是否有 "freeze" 所有已安装软件包的 pkgsrc 命令?

Is there a pkgsrc command to "freeze" all installed packages?

我不知道 "freezing" 的意思是否有特定的术语。我正在寻找的是一个与 pkgsrc 对应的命令:

我的动机是轻松地将我的系统从一台机器迁移到另一台机器。

有多种方法可以解决这个问题,其中的任何组合也可能有效,具体取决于您要执行的操作。

以下建议基于我在 OpenIndiana 中对 pkgsrc 的使用,因此请记住,如果您使用不同的 OS,事情 可能 会有所不同。

让我们定义 2 个术语:

OldMachine = 您要迁移的机器

NewMachine = 您要迁移到的机器

开始之前,请看一下 pkgin(pkgsrc 的包管理器)documentation;你需要熟悉它。

任务

本部分列出了可能的任务,这些任务可能相关也可能不相关,具体取决于您的目标(见下文)。

1: 生成 OldMachine

上已安装软件包的列表

# pkgin list

我相信您可以通过以下方式将输出保存到文本文件:

# pkgin list >> /Path/To/List/Of/Packages.list

不用担心 .list 扩展;任何文本编辑器仍会读取该文件。

2:Bootstrap OldMachineNewMachine

上的 pkgsrc 分支

检查您的 OS-specific pkgsrc 文档,了解如何确定您所在的分支以及如何 bootstrap 该分支。例如,here's Illumos'.

3:在 NewMachine

上安装生成的软件包列表

有多种方法可以做到这一点,包括但不一定限于:

  1. 编写脚本或命令,对 Packages.list
  2. 中的所有包执行 # pkgin -y install
  3. 在文本编辑器中,将 Packages.list 从垂直列表转换为水平列表。您可以手动或通过 RegEx 执行此操作。这是有关如何在 Sublime Text 中执行此操作的 example。然后将该文本复制并粘贴到 # pkgin -y install
  4. 的末尾
  5. 写一个单行命令来完成它。我确定那些存在;就是不知道怎么自己写一个

4:从 OldMachine

导入包设置

您必须手动找到您自定义的所有 .conf(或类似)文件,然后将它们传输到 NewMachine 文件系统上的匹配位置,确保每个文件的内容不要引用无效 locations/settings/etc。在 NewMachine

目标

这部分有可能的目标,然后通过适当组合上述任务来实现它们:

A1:您想简单地安装所有相同软件包的最新版本(推荐)

任务 1 和 3

A2:你想做A1+导入设置

任务 1、3 和 4

B1:您想安装软件包的特定分支版本

任务 1 - 3

B2:您想做 B1 + 导入设置

任务 1 - 4