我正在尝试基于第 3 方 docker 映像制作一个交互式 docker 容器,该映像/usr/share/man
已被删除以节省图层空间。属于该文件夹中的每个文件都是 apt 包的一部分,否则可以正常工作。我想仅恢复我当前已安装的软件包的那些已删除的手册页。
对于单个包解决这个问题的方法是重新安装它。我可能会--reinstall
在容器上的每个包裹上写上类似的东西,
apt-get --reinstall install \
$(dpkg --get-selections | awk '$2=="install"{print $1}')
但是有没有一种方法可以有选择地让 dpkg 重新创建已删除的文件夹,而不必每次重建时都诉诸这样一个耗时和带宽消耗的过程?
答案1
您将需要重新安装受影响的软件包,因为本地映像没有任何内容可供修复。
但是,您可以最大程度地减少所需的维修量。
您可以/usr/share/man
通过循环确定哪些包中包含文件,例如
for pkg in $(dpkg --get-selections | awk '$2=="install" { print $1}')
do
f=$(dpkg -L $pkg | grep /usr/share/man)
if [ -n "$f" ]
then
echo $pkg has files in /usr/share/man
fi
done
然后您可以重新安装这些软件包。
我们甚至可以通过查看/var/lib/dpkg/info/$pkg.info
man 文件并与丢失的内容进行比较来进一步限制丢失的内容,然后仅重新安装它们。
然而,最终,我认为你会重新安装一个很多的包裹。在我的 Jessie 安装中,703 个软件包的文件为/usr/share/man
.这比安装的 2200 个软件包要好,但仍然很多。似乎表明了避免网络流量的本地镜像。