当我使用该createrepo
命令时,我是否可以将 RPM(在基本目录中)放置在多个目录(认为是分层的)中,并且仍然让 yum 递归地查看基本目录中目录的所有 RPM?
例子:
createrepo /srv/my/repo
/srv/my/repo/vendor1/package1/first.rpm
/srv/my/repo/vendor1/package2/first.rpm
/srv/my/repo/vendor2/package1/third.rpm
我问这个问题是因为我将其中一个 RPM 放入目录中,执行了 acreaterepo --update
又 ayum clean all
但它仍然没有拾取它。现在我想知道它是否需要采用平面文件结构而不是分层结构?
答案1
根据我的经验,不,createrepo
不能递归地遍历目录树。因此,您必须扁平化存储库的目录结构。我通常在我的存储库构建脚本中使用这种类型的循环构造。
destdir="/path/to/my/yum-repos/Fedora/14"
for arch in i386 x86_64 noarch; do
printf "\n\n==== creating repo: %-50s [%-s]\n" $destdir $arch
pushd ${destdir}/${arch} >/dev/null 2>&1
createrepo -dp .
popd >/dev/null 2>&1
done
答案2
这个线程和我自己的轶事证据表明 yum createrepo 将遍历子目录,并且您不需要展平。
http://lists.baseurl.org/pipermail/yum/2013-December/024061.html
根据我刚刚运行的测试,这似乎就是发生的情况。我创建了一个新目录 /usr/local/repob/pkgs/b/,并将所有以字母“b”开头的 Fedora 19 rpm 文件复制到其中。然后我从更高的目录结构运行“createrepo”:
# createrepo /usr/local/repob
它似乎通过递归搜索整个目录结构来创建一个新的本地 yum 存储库。我通过为新存储库创建一个快速 /etc/yum.repos.d/.conf 文件并使用“repoquery”列出其软件包来验证这一点,它们都在那里。
因此,看起来 createrepo 默认情况下会递归扫描“/path/to/rpms/”目录,但手册页中似乎没有提到这一点,我认为这是需要了解的有用信息。
答案3
如果您在 /repodata 所在的同一目录中使用符号链接,则可以。
答案4
createrepo
版本 0.9.9(可能更早)进入子目录。