如何创建已安装软件包的列表,以便在格式化磁盘后轻松/自动重新安装

如何创建已安装软件包的列表,以便在格式化磁盘后轻松/自动重新安装

我会将我的系统从 32 位更改为 64 位,并且与以前相同,Debian Squeeze,但我不想丢失以前安装的程序,因为我不记得它们的名称。

所以我想要一个命令来为我做这件事,将我安装的所有程序的名称保存在一个文件中,但不保存系统附带的标准程序,当我使用其他系统时,我会提到文件和您的目录,以便自动安装所有内容。

还有一个问题:是否可以使用手动安装的程序来执行此操作dpkg-i package.deb?如果是这样,我该怎么做?

答案1

在当前的 Debian 版本中,您可以使用以下命令获取显式安装的软件包列表

apt-mark showmanual

对于那些运行不存在的旧版本 Debian 的人apt-mark showmanual,或者如果您想要执行其他选择,您可以使用 aptitude。

aptitude search '~i !~M' -F %p >package.list

~i匹配已安装的软件包;!~M省略作为其他软件包的依赖项自动安装的软件包。-F %p更改输出格式以仅包含包名称。

您可以稍后安装这些软件包

apt-get install $(cat package.list)

Debian挤压没有apt-mark showmanual,但它有apt-mark showauto列出自动安装的软件包。如果您使用此功能,您可以使用 列出旧系统上的所有软件包dpkg --get-selections >package.list,恢复所有这些软件包,然后使用 标记自动软件包apt-mark markauto。对于您的用例(32 位到 64 位),此方法可能会将一些库标记为手动,因为它们在不同的体系结构下具有不同的名称。

请注意,如果用例是重现相同的安装,而不是保留软件包集但更改架构,现在有一个名为apt克隆(自 wheezy 起在 Debian 中分发)可以自动完成所有操作。

答案2

你尝试过使用吗dpkg --get-selections >packages?如果要排除某些包,可以编辑输出文件packages。完成后,将其传输到目标系统并说:

dpkg --set-selections <packages

并且软件包将被标记为安装。您很可能还需要说aptitude update; aptitude dist-upgrade

另一个问题:如果这些包是i386架构包,并且您已经multiarch安装,则可以使用.deb通常的dpkg -i package.deb.但最好根据具体情况进行调查并安装包含这些软件包的 64 位版本。

答案3

我没有看到一个简单、标准的方法来做到这一点。恐怕您将不得不摆弄 的dpkg日志和选项,因为它dpkg无法区分“系统附带的标准程序”和其他程序。

这不会是直截了当的,我更喜欢使用粗体大写文本来表达清楚,但你可以做这样的事情

  • 从文件中提取已安装软件的列表/var/log/dpkg.log*

  • 删除系统安装过程中安装的那些。 (使用安装时间来检测它们)

  • dpkg --get-selections以格式保存列表

瞧!当您的系统启动并运行时,请使用以下命令重新安装程序

 apt-get update
 dpkg --set-selections < yourSelection
 apt-get -u dselect-upgrade

答案4

我试图弄清楚如何在使用 RPM 打包的 RHEL/Fedora 系统上执行相同的操作。我发现sudo dnf history这很有帮助,但该命令仅列出用户在 anaconda 安装程序安装系统后安装的内容。

这是我使用的命令:

sudo dpkg -l|awk '/^ii/{ print $2 }'|grep -v -e ^lib -e -dev -e $(uname -r) > /path/to/your/filename000.txt

相关内容