Answers:
您尝试过使用dpkg --get-selections >packages
吗?如果要排除某些软件包,则可以编辑输出文件packages
。完成后,将其传输到目标系统并说:
dpkg --set-selections <packages
并且软件包将标记为要安装。您很可能还需要说aptitude update; aptitude dist-upgrade
。
另一个问题:如果这些软件包是i386
体系结构软件包,并且已经multiarch
安装,则可以.deb
使用常规安装dpkg -i package.deb
。但是最好逐个调查并安装具有这些软件包的那些软件包的64位版本。
在当前的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
可能被视为基本系统的重要组成部分,因此将被标记为手动安装。它是由初始安装程序而非用户“手动”安装的,但是即使如此,“自动安装”的含义是“如果不破坏依赖关系,则可以安全地删除它”,并且需要基本软件包来制作该文件。系统正常工作不符合要求。
我看不到这样做的简单标准方法。恐怕您将不得不摆弄dpkg
的日志和选项,因为dpkg
它不能区分“系统附带的标准程序”和其他程序。
这不是直截了当的,我更喜欢使用粗体大写的文字来使其清楚,但是您可以执行以下操作
从/var/log/dpkg.log*
文件中提取已安装软件的列表。
删除在系统安装期间安装的那些。(使用安装时间来检测它们)
以dpkg --get-selections
格式保存列表
等等!当系统启动并运行时,使用以下命令重新安装程序
apt-get update
dpkg --set-selections < yourSelection
apt-get -u dselect-upgrade