如何冻结已安装软件包列表并编写 apt-upgrade 脚本以便在之后的任何时间针对相同的软件包?

如何冻结已安装软件包列表并编写 apt-upgrade 脚本以便在之后的任何时间针对相同的软件包?

在 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)

相关内容