我正在尝试在VM中设置暂存环境,以便在将更新应用到主系统之前对其进行测试。
为此,我已经在VM中完成了Debian Wheezy的基本安装(与主系统上相同),然后以root身份从VM中运行:
# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
dpkg --set-selections
在我的情况下,不幸的是需要i386架构。该系统是amd64本机。
问题是dpkg --set-selections
在VM中运行。我确实有一些需要特殊处理的软件包(实际上,这是我首先要提供暂存环境的主要原因),但是当我运行上面的最后一条命令时,得到的输出行如数以百万计:
dpkg: warning: package not in database at line NNN: package-name
用于基本系统中确实应该可用的软件包。实例包括xterm
,yelp
和zip
。
现在我的问题是:
将软件包选择列表从一个Debian系统转移到另一个系统(假设在Wheezy中为相同的Debian发行级别),然后随后应用这些更改的具体过程是什么?目的是使两者都具有相同的已安装软件包列表,理想情况下,这样diff
会使两者的输出dpkg --get-selections
或dpkg --list
在两者的输出之间进行“ a”操作,从而显示出没有差异。
该grep -v deinstall
部分是从Ask 软件包中dpkg --set-selections
借用的Prevent软件包中删除的。
我已将VM中的源更改为与主系统上的源相同,还安装了apt-transport-https
:
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main
查看--set-selections输出,我看到:
dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...
行号看起来很奇怪,--get-selections输出的相应部分是:
a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install
请注意,在之间acl
和aglfn
是acpi-support-base
,acpid
和adduser
正为其没有错误报告。似乎已报告错误的软件包是un
根据dpkg -l
,还是dpkg -l
根本不了解它们(dpkg-query: no packages found matching ...
)。我知道有一些本地安装的软件包,但不是很多。i386
不图,直到gcc-4.7-base:i386 install
多越往下列表(在--get-选择输出线342)。
dpkg --get-selections
(我假设您的意思是dpkg --set-selections
笔录?)?甚至仅前者就超过3600行,大约100 KB。
/var/lib/dpkg/Packages
(甚至更长)的副本也可能有用-这可能是Packages文件损坏的症状。
dpkg --get-selections … | … dpkg --set-selections
是复制软件包选择的方法。如果失败了,您将需要提供有关原因的更多信息。在这两个系统上发布完整的源代码,的输出dpkg --get-selections
和的完整成绩单dpkg --get-selections
(也许我们可以通过查看有效的方法和无效的方法来识别模式)。如果主系统是amd64或i386?如果不添加i386架构,是否可以正常工作?