dnf に対応した OS で http のレポジトリの Cobbler reposync が失敗する場合


Linux のインストールの簡略化のため、Cobbler を導入しています。

Cobbler がインストールされている OS が CentOS 7 だったので、CentOS Stream 8 に切り替えたところ、reposync がうまくいかなくなってしまったのでメモです。

CentOS 7 の場合(成功例)

Zabbix 5.0 のレポジトリをミラーする前提で下記コマンドを実施します。

# cobbler repo add --name="Zabbix-5.0-rhel8-x86_64" --mirror=https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/
# cobbler reposync

running: /usr/bin/reposync -l -n -d --config=/var/www/cobbler/repo_mirror/Zabbix-5.0-rhel8-x86_64/.origin/Zabbix-5.0-rhel8-x86_64.repo --repoid=Zabbix-5.0-rhel8-x86_64 --download_path=/var/www/cobbler/repo_mirror -a x86_64

正常に reposync できました。

# ll /var/www/cobbler/repo_mirror/Zabbix-5.0-rhel8-x86_64/
total 20256
drwxr-xr-x 2 root apache    4096 Jan 24 12:50 cache
-rwxr-xr-x 1 root apache     162 Jan 24 12:50 config.repo
drwxr-xr-x 2 root apache    4096 Jan 24 12:50 repodata
-rwxr-xr-x 1 root apache  475852 Dec 21 11:15 zabbix-agent-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 5546872 Dec 21 11:15 zabbix-agent2-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache   17796 Dec 21 11:15 zabbix-apache-conf-5.0.7-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache  334636 Dec 21 11:15 zabbix-get-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache  817968 Dec 21 11:15 zabbix-java-gateway-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache  513844 Dec 21 11:15 zabbix-js-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache   18100 Dec 21 11:15 zabbix-nginx-conf-5.0.7-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache 1137376 Dec 21 11:15 zabbix-proxy-mysql-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 1136416 Dec 21 11:15 zabbix-proxy-pgsql-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 1078508 Dec 21 11:15 zabbix-proxy-sqlite3-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache   18256 May 11  2020 zabbix-release-5.0-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache  369432 Dec 21 11:15 zabbix-sender-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 2925220 Dec 21 11:15 zabbix-server-mysql-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 2918860 Dec 21 11:15 zabbix-server-pgsql-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache 3302976 Dec 21 11:15 zabbix-web-5.0.7-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache   17824 Dec 21 11:15 zabbix-web-deps-5.0.7-1.el8.x86_64.rpm
-rwxr-xr-x 1 root apache   17372 Dec 21 11:15 zabbix-web-japanese-5.0.7-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache   16772 Dec 21 11:15 zabbix-web-mysql-5.0.7-1.el8.noarch.rpm
-rwxr-xr-x 1 root apache   16780 Dec 21 11:15 zabbix-web-pgsql-5.0.7-1.el8.noarch.rpm

CentOS Stream 8 の場合(失敗例)

CentOS Stream 8 にインストールした、cobbler 3.2.0 で同様のコマンドを実行しても、下記のようにエラーが発生します。

running: /usr/bin/dnf reposync -l -n -d --config=/var/www/cobbler/repo_mirror/Zabbix-5.0-rhel8-x86_64/.origin/Zabbix-5.0-rhel8-x86_64.repo --repoid=Zabbix-5.0-rhel8-x86_64 -p /var/www/cobbler/repo_mirror -a x86_64
received on stdout: usage: dnf [-c [config file]] [-q] [-v] [--version] [--installroot [path]]
           [--nodocs] [--noplugins] [--enableplugin [plugin]]
           [--disableplugin [plugin]] [--releasever RELEASEVER]
           [--setopt SETOPTS] [--skip-broken] [-h] [--allowerasing]
--nobest] [-C] [-R [minutes]] [-d [debug level]]
           [--debugsolver] [--showduplicates] [-e ERRORLEVEL] [--obsoletes]
           [--rpmverbosity [debug level name]] [-y] [--assumeno]
--repo [repo]]
--disable] [-x [package]] [--disableexcludes [repo]]
           [--repofrompath [repo,path]] [--noautoremove] [--nogpgcheck]
           [--color COLOR] [--refresh] [-4] [-6] [--destdir DESTDIR]
           [--downloadonly] [--comment COMMENT] [--bugfix] [--enhancement]
           [--newpackage] [--security] [--advisory ADVISORY] [--bz BUGZILLA]
           [--cve CVES] [--sec-severity {Critical,Important,Moderate,Low}]
           [--forcearch ARCH]

received on stderr: Failed to set locale, defaulting to C.UTF-8
Command line error: argument -d/--debuglevel: expected one argument

原因

CentOS 7 の reposync コマンドと、CentOS Stream 8 の dnf コマンドの reposync モジュールでコマンド引数が変わっているようです。

cobbler で reposync コマンドの引数は、/etc/cobbler/settings に設定されているようです。

# Flags to use for yum's reposync.  If your version of yum reposync
# does not support -l, you may need to remove that option.
reposync_flags: "-l -n -d"

CentOS 7 の reposync コマンドではそれぞれ下記の意味があったようです。

  • -l, –plugins enable yum plugin support
  • -n, –newest-only Download only newest packages per-repo
  • -d, –delete delete local packages no longer present in repository

CentOS Stream 8 の dnf reposync では下記になっているようです。

  • -n, –newest-only download only newest packages per-repo
  • –delete delete local packages no longer present in repository

-l に相当するものは見つけられませんでした。

したがって、/etc/cobbler/settings を下記に修正し、cobblerd を restart したら解決しました。

reposync_flags: "-n --delete"

まとめ

今回は CentOS Stream 8 で確認しましたが、dnf を採用した Oracle Linux 8 系や、Fedora でも同様の現象になると思われます。

また、rsync のレポジトリを追加した場合は、全て sync するのに、http の場合は新しいパッケージのみ sync するという挙動も気になっていました。

今回の調査結果より、最新版のみ選択する -n オプションを削除することで、全て sync できそうです。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)