验证并附加到包存储库?

验证并附加到包存储库?

我已经设置了一个 ubuntu 镜像并准备通过硬盘传输到离线机器。我想验证镜像是否具有我需要的所有软件包,并向其中添加任何缺少的软件包。该镜像位于/var/spool/apt-mirror,大小为 120 GB,其中包含数百个 .deb 文件。我该如何完成这两项任务?

(1) 要检查是否存在软件包,我假设我必须使用dpkg并将其以某种方式指向我的镜子,并询问它我的软件包是否在镜子中的某个位置。我怎么做?这是我尝试失败的方法:

dpkg --info /var/spool/apt-mirror/ astyle
dpkg-deb: error: error reading archive magic version number from file /var/spool/apt-mirror/: Is a directory

也许我应该以apt-cache某种方式使用该命令?

(2)假设包丢失了,如何将其放入镜像?我是否只需找到一个 deb 文件并将它们复制到镜像“池”中的任意位置?例如,假设我想要这个包:

apt-cache showpkg astyle
Package: astyle
Versions:
2.01-1 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_precise_universe_binary-amd64_Packages)

该软件包显然在我的本地缓存中可用(但未安装在我的临时计算机上)。我如何将它移动到镜子中?

答案1

要查明某个包是否存在于目录树中的某个位置,您不需要使用dpkg. find就可以了,你正在检查一个文件是否存在——它是一个.deb文件这一事实几乎是无关紧要的。

例如

find /var/spool/apt-mirror/ -name 'astyle*.deb'

如果您计划对许多文件重复执行此操作,我建议将输出重定向find /var/spool/apt-mirror/ -type f到一个文件,然后使用搜索该文件 - 这比每次搜索grep运行一次要快得多。find

如果您的镜像中缺少该包(并且它存在于您正在镜像的存储库中),请检查您的apt-mirror配置并再次运行apt-mirror

要查明该包是否应该在镜像中,grep请在相关Packages文件中查找。例如,我有 jessie 的 zfsonlinux 存档的镜像,所以如果我想知道该spl包是否应该在该存储库中,我会执行以下操作:

# grep 'Package: spl$' /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages
Package: spl

或者

# find /var/spool/apt-mirror/mirror/archive.zfsonlinux.org/ -name 'Packages' -exec grep 'Package:\ spl$' {} +
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie-daily/main/binary-amd64/Packages:Package: spl
/var/spool/apt-mirror/mirror/archive.zfsonlinux.org/debian/dists/jessie/main/binary-amd64/Packages:Package: spl

相关内容