我会将我的系统从 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