2024 年最初のブログとなりました。「ブログの書初め」です、本年もよろしくお願いします。

CentOS / RHEL 系の Linux で rpm パッケージをインストールする際には "yum"("dnf" 派の人もいるかもしれませんが、ここでは "yum" で統一します。内容は同じなので単純に読み替えていただいて大丈夫です)を使う機会が多いと思っています。

この yum を使って、例えば "wget" をインストールしようとすると、
# yum install wget

というコマンドを実行します。すると、
# yum install wget
Updating Subscription Management repositories.
Last metadata expiration check: 3:32:04 ago on Mon Jan  1 05:44:30 2024.
Dependencies resolved.
================================================================================
 Package Arch      Version            Repository                           Size
================================================================================
Installing:
 wget    x86_64    1.21.1-7.el9       rhel-9-for-x86_64-appstream-rpms    794 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 794 k
Installed size: 3.1 M
Is this ok [y/N]:

↑のようなメッセージが表示されて、最後に "Is this ok [y/N]:" と確認メッセージが表示されて止まります。「このパッケージをインストールするよ、OK?」と聞かれていて、"y" と入力するとインストール開始、"n" だとインストールせずに終了します("[y/N]" と "N" が大文字になっているのでデフォルトは "n" ということになります。つまりそのままリターンキーを入力すると "n" とみなされます)。

で、この確認メッセージで止まるのが面倒な場合、つまり「正しいことはわかっているから、いいからインストールして」と思っている場合はコマンドのどこか(最後とか)に "-y" オプションを指定します。つまり、
# yum install wget -y

と入力することで、確認メッセージなしでインストールを始めることができます。シェルスクリプトなどで連続実行したい場合はよく使いますよね。


で、このブログのメインはここからです。需要は少ないかもしれないのですが、「この "-y" の逆のオプションって何だろう?」という疑問が生じて調べてみました。要は「 "yum install" のインストール直前までを実行して、インストールせずに終了する」ようなオプションです。

単純に「 "-n" かな?」と思ったのですが「そんなパラメータ知らん」と怒られてしまいました:
# yum install wget -n
Updating Subscription Management repositories.
usage: yum install [-c [config file]] [-q] [-v] [--version]
                   [--installroot [path]] [--nodocs] [--noplugins]
                   [--enableplugin [plugin]] [--disableplugin [plugin]]
                   [--releasever RELEASEVER] [--setopt SETOPTS]
                   [--skip-broken] [-h] [--allowerasing] [-b | --nobest] [-C]
                   [-R [minutes]] [-d [debug level]] [--debugsolver]
                   [--showduplicates] [-e ERRORLEVEL] [--obsoletes]
                   [--rpmverbosity [debug level name]] [-y] [--assumeno]
                   [--enablerepo [repo]] [--disablerepo [repo] | --repo
                   [repo]] [--enable | --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]
                   PACKAGE [PACKAGE ...]
yum install: error: unrecognized arguments: -n

"-n" ではないとしたら、果たしてそんなオプショことがあるのか(そもそも「そんなオプション使うことがあるのか?」と言われそうですが、その件についてはいずれまた)、という疑問が生じ、一度ちゃんと調べてみました。結論としては存在していて、上のエラーメッセージ内にも表示されている "--assumeno" オプションでした。このオプションを付けて実行することで、インストールされる rpm ライブラリに関する(アーキテクチャやバージョン、サイズなどの)情報を表示されるだけでインストールは実行しない、という挙動が可能になります:
# yum install wget --assumeno
Updating Subscription Management repositories.
Last metadata expiration check: 0:09:21 ago on Mon Jan  1 09:30:11 2024.
Dependencies resolved.
================================================================================
 Package Arch      Version            Repository                           Size
================================================================================
Installing:
 wget    x86_64    1.21.1-7.el9       rhel-9-for-x86_64-appstream-rpms    794 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 794 k
Installed size: 3.1 M
Operation aborted.

# 

インストールは何もせずに "Operation aborted." と表示されてプロンプトに戻ってきました(この挙動は "n" を入力した時と全く同じです)。


インストールしようと思っているライブラリに関する情報だけを収集するようなシェルスクリプトを作るようなケースで役立つ、かもしれない、情報でした。