如何检查指定文件中的.rpm包是否存在于内部SLES仓库
检查内部SLES仓库中缺失的软件包
我有一个内部SLES仓库,其中包含大量软件包/依赖项,存储在src、noarch、x86_64等不同子目录下。我还有一份所需软件包/依赖项的列表,希望检查列表文件中的包是否存在于该内部SLES仓库中:若存在则跳过该行,若不存在则将该行保存到新文件,以便统计所有缺失的软件包/依赖项。
我已尝试了两种方案:
方案一
SLES_ALIAS=<repo-alias> MY_REPO=<some/url/internal-sles-repo> repo_pkg_list="../repo/required_pkgs.list" missing_pkg_list="../repo/missing_cbo_pkg.list" while IFS= read -r rpm; do found=false for subdir in noarch src x86_64; do if curl --output /dev/null --silent --head --fail "$MY_REPO/$subdir/$rpm"; then found=true break fi done if! $found; then echo "RPM not found: $rpm" fi done < "$repo_pkg_list"
该方案遍历MY_REPO的各子目录,通过curl的HEAD请求检查列表文件中的.rpm包是否存在。列表文件与仓库中的rpm包示例如下:
expat-2.4.4-150400.3.17.1.x86_64.rpm filesystem-15.0-11.8.1.x86_64.rpm fillup-1.42-2.18.x86_64.rpm findutils-4.8.0-1.20.x86_64.rpm fontconfig-2.13.1-150400.1.4.x86_64.rpm fonts-config-20200609+git0.42e2b1b-150000.4.10.1.noarch.rpm gawk-4.2.1-150000.3.3.1.x86_64.rpm
方案二
while IFS= read -r line; do package_found=false for subdir in x86_64 src noarch; do if zypper --non-interactive-download "$MY_REPO$line"; then echo "Downloaded: $line" else echo "$line" >> "$missing_pkg_list" echo "Failed to download: $line, adding to $missing_pkg_list" fi done done < "$repo_pkg_list"
内容的提问来源于stack exchange,提问作者Kevin Niland
相关产品推荐
相关产品推荐

