使用 createrepo 时可以将 rpm 放置在多个目录中吗?

使用 createrepo 时可以将 rpm 放置在多个目录中吗?

当我使用该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(可能更早)进入子目录。

相关内容