从网页用户界面和文档来看,spacewalk 似乎想要下载给定 repo 中的所有内容,而不管其相关性如何,如果您使用 repo 中的所有/大多数软件包,那么这并不是太糟糕,但如果仅使用 repo 中的一个或两个软件包并且 repo 包含 10k 个软件包,那么这就太过分了。
就我而言,我希望能够仅保留tomcat
(在epel
repo 内)及其依赖项在其自己的子通道内同步,同时保持所有其他不必要的epel
包不受影响(且不下载)。
这是我找到的唯一方法,但它似乎是一种临时解决方案(创建一个本地存储库来代理我想要的包),而且我不清楚该解决方案是否能优雅地解决依赖关系问题(我的直觉告诉我它不能)。
编辑:如果你想知道我怎么能对太空行走的基本方面感到如此困惑,请允许我向你介绍一下当前文档(截至本次编辑,这些标题还没有任何内容)。
答案1
我通过让单独的 cronjob 仅下载我需要的软件包并将它们放入合适的现有存储库中解决了这种情况。下载后,我再次运行 createrepo 来重建存储库索引。
脚本:
#!/bin/bash
CONFFILE="/local/etc/fetchextras.conf" # can be overridden
TARGETDIR="/tmp/repodl"
read_config() {
[[ -r $CONFFILE ]] || { echo "Can't read $CONFFILE, giving up..."; exit 1; }
while read type value
do
[[ "$type" = "repo" ]] && ENABLE="--enablerepo $value $ENABLE"
[[ "$type" = "package" ]] && PKGS="$value $PKGS"
done < $CONFFILE
}
fetch_packages() {
for pkg in $PKGS
do
yumdownloader -q -y --destdir=$TARGETDIR --disablerepo=* --resolve $ENABLE $pkg
done
}
get_options() {
CONFFILE=${1:-$CONFFILE}
}
get_options $@
read_config
fetch_packages
配置文件:
repo epel
package whatever
答案2
spacewalk 包括 cobbler。我通常使用其中的 repo 配置来筛选出我需要的内容;至少对于较旧的 spacewalk 来说是这样。
较新的版本有一个过滤器,可以直接放入仓库本身。
spacecmd {SSM:2}> repo_listfilters epel-6-64
spacecmd {SSM:2}> repo_addfilters epel-6-64 '+tomcat'
spacecmd {SSM:2}> repo_listfilters epel-6-64
+tomcat
spacecmd {SSM:2}> repo_clearfilters epel-6-64
spacecmd {SSM:2}> repo_listfilters epel-6-64
spacecmd {SSM:2}>
UI 位适用于较新的 webUI。
皮匠:
cobbler repo edit --name epel-6-64 --rpm-list 'tomcat'
...但前提是你已经将 repo 添加到 cobbler 中,并从 localhost 获取 spacewalk 副本。因为它将是 localhost,并且你将拥有两个 tomcat 副本,你必须接受这一点。
哦。没必要像在论坛上那样发帖。