在 LXC 容器中,我希望能够记下刚刚更新的软件包,然后在之后的任何日期重新创建该情况。
我想我想做这样的事:
dpkg-query --show | sed "s/\t/=/" > somewhere_safe.txt
这将给出如下列表:
adduser=3.118
apache2=2.4.38-3+deb10u4
apache2-bin=2.4.38-3+deb10u4
apache2-data=2.4.38-3+deb10u4
apache2-utils=2.4.38-3+deb10u4
apparmor=2.13.2-10
apt=1.8.2.1
apt-listchanges=3.19
apt-transport-https=1.8.2.1
apt-utils=1.8.2.1
# and so on
然后使用一个脚本对其进行后处理,apt upgrade
该脚本将它们全部作为参数。我这样做对吗?
理由:apt update
没有“截至该日期”的参数,这意味着如果我想的话我无法重新创建某些东西,但一般来说,即使我不使用 docker 风格的图像存储库,我也希望在包方面可以重新创建一些东西。
答案1
apt list --installed | sed s/Listing...// | awk -F "/" '{print $1}' > $(date +aptlist-%m.%d.%Y-%H.%M.%S.txt)
创建列出所有已安装软件包的文件。
xargs -a ThatFileCratedAbove.txt sudo apt-get install
将从列表中安装它们
....我将首先使用模拟安装来测试文件apt-get -s install
,只是为了确保列表不会引起任何问题......(尽管这可能需要很长时间)
。
。
。
更新版本要求... 如果您想要捕获版本并能够稍后安装这些版本,那么您的 apt 列表快照需要像这样创建,而不是像上面那样:
apt list --installed | sed s/Listing...// | awk -F"[[:blank:]/]" '{ if( $1 ne '' ) print $1"="$3}' > $(date +aptlist-%m.%d.%Y-%H.%M.%S.txt)