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


8

我将系统从32位更改为64位,并且与以前一样,Debian Squeeze,但是我不想丢失以前安装的程序,因为我不记得所有程序的名称。

因此,我需要一个命令来为我执行此操作,将我安装的所有程序的名称保存在文件中,而不保存系统随附的标准程序,并且在使用其他系统时,我会提到文件和目录,以便自动安装所有内容。

另一个问题:是否可以通过手动安装的程序来完成dpkg-i package.deb?如果是这样,我该怎么做?

Answers:


7

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

dpkg --set-selections <packages

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

另一个问题:如果这些软件包是i386体系结构软件包,并且已经multiarch安装,则可以.deb使用常规安装dpkg -i package.deb。但是最好逐个调查并安装具有这些软件包的那些软件包的64位版本。


谢谢,当您说到已经安装的软件包在i386体系结构中时,您确实提供了帮助,我没有考虑过,我认为最好重新安装其他软件包。
Zignd 2012年

9

在当前的Debian版本上,您可以通过以下方式获取明确安装的软件包的列表:

apt-mark showmanual

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

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

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

您可以稍后使用

apt-get install $(cat package.list)

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

请注意,如果用例是重现相同的安装,而不是保留软件包集而改变体系结构,则现在有一个名为apt-clone的工具(自wheezy以来在Debian中分发),该工具可以自动执行所有操作。


不幸的是,这并不完美。当我这样做时,列出的第一件事是“ acl”,我没有明确加载。看一下rdepends,似乎systemd依赖于此,并且在已经安装的Debian 8中。并且,systemd也在此列表中。因此,即使安装了systemd和acl,aptitude也不会将它们标识为“自动”。难道这是天赋不足吗?
利亚姆

@Liam我认为安装程序不会将任何软件包标记为自动。即使这样做,这对于库来说也是有意义的,但像这样的软件包也acl可能被视为基本系统的重要组成部分,因此将被标记为手动安装。它是由初始安装程序而非用户“手动”安装的,但是即使如此,“自动安装”的含义是“如果不破坏依赖关系,则可以安全地删除它”,并且需要基本软件包来制作该文件。系统正常工作不符合要求。
吉尔(Gilles)“所以,别再邪恶了”

1

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

这不是直截了当的我更喜欢使用粗体大写的文字来使其清楚,但是您可以执行以下操作

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

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

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

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

 apt-get update
 dpkg --set-selections < yourSelection
 apt-get -u dselect-upgrade
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.