普段なんとなく yum を使っていませんか?私はそうです。
ということで、 yum を基礎からおさらいしました。
検証環境
CentOS 8 を利用する。
]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ]# uname -a Linux localhost.localdomain 4.18.0-80.el8.x86_64 #1 SMP Tue Jun 4 09:19:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
yum の基礎
- yum はパッケージ(rpm)を管理するソフトウェア。
- 一般的にはネットワーク越しにリポジトリにアクセスし、パッケージを取得する。
- インストールしたパッケージは RPM データベースが管理する。
- パッケージのインストールに必要な依存関係は自動で解決する。
- CentOS 8 では バックエンドに dnf が使われる。yum と dnf の違いは
6.1. YUM スタックへの主な変更
を参照すること。ユーザ視点では yum の CLI インタフェースが提供されるので、あまり気にすることはない。
パッケージ
パッケージの実体は rpm ファイル。 rpm ファイルには、メタデータ・インストール手順・インストールするファイル などが格納されている。rpm パッケージの具体的な構造は、次のサイトが参考になる。
参考 Maximum RPM: Taking the RPM Package Manager to the Limit
パッケージの中身の確認
まず rpm パッケージだけをダウンロードする。
]# yumdownloader postgresql-server メタデータの期限切れの最終確認: 0:23:16 時間前の 2020年01月18日 22時17分29秒 に実施しました。 postgresql-server-10.6-1.module_el8.0.0+15+f57f353b.x86_64.rpm
続いて、インストール時に実行されるコマンドを確認する。
]# rpm -q --scripts postgresql-server-10.6-1.module_el8.0.0+15+f57f353b.x86_64.rpm preinstall scriptlet (using /bin/sh): /usr/sbin/groupadd -g 26 -o -r postgres >/dev/null 2>&1 || : /usr/sbin/useradd -M -N -g postgres -o -r -d /var/lib/pgsql -s /bin/bash \ -c "PostgreSQL Server" -u 26 postgres >/dev/null 2>&1 || : postinstall scriptlet (using /bin/sh): if [ $1 -eq 1 ] ; then # Initial installation systemctl --no-reload preset postgresql.service &>/dev/null || : fi preuninstall scriptlet (using /bin/sh): if [ $1 -eq 0 ] ; then # Package removal, not upgrade systemctl --no-reload disable --now postgresql.service &>/dev/null || : fi postuninstall scriptlet (using /bin/sh): if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall systemctl try-restart postgresql.service &>/dev/null || : fi
続いて、インストールされるファイルを確認する。
]# rpm2cpio postgresql-server-10.6-1.module_el8.0.0+15+f57f353b.x86_64.rpm | cpio -t ./etc/pam.d/postgresql ./etc/postgresql-setup ./etc/postgresql-setup/upgrade ./etc/postgresql-setup/upgrade/postgresql.conf ./usr/bin/initdb ./usr/bin/pg_basebackup ./usr/bin/pg_controldata ./usr/bin/pg_ctl ./usr/bin/pg_receivewal ./usr/bin/pg_recvlogical ./usr/bin/pg_resetwal ./usr/bin/pg_rewind ./usr/bin/postgres ./usr/bin/postgresql-setup ...
続いて、パッケージ間の依存関係を表示する。この結果を見るとわかるが、依存するファイル名しかわからず、どのパッケージに属するかがわからない。これを解決するのが yum。
]# rpm -qRp postgresql-server-10.6-1.module_el8.0.0+15+f57f353b.x86_64.rpm /bin/bash /bin/sh /bin/sh /bin/sh /bin/sh /bin/sh /usr/sbin/useradd config(postgresql-server) = 10.6-1.module_el8.0.0+15+f57f353b libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.15)(64bit) ...
どのように依存関係を解決するか?
yum がどのように依存関係を解決するのかを説明する。大まかに、次の流れになっている。
- リポジトリにアクセスする
- リポジトリの情報を取得する
- パッケージの依存関係を解決する
- 依存するファイルをダウンロードする
リポジトリにアクセスする
参照先のリポジトリは /etc/yum.repos.d/
に記載されている。
]# ls /etc/yum.repos.d/ CentOS-AppStream.repo CentOS-CR.repo CentOS-Extras.repo CentOS-PowerTools.repo CentOS-Vault.repo CentOS-fasttrack.repo epel-testing.repo CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Sources.repo CentOS-centosplus.repo epel-playground.repo epel.repo
.repo
ファイルは次のようになっている。
]# cat /etc/yum.repos.d/CentOS-AppStream.repo ... [AppStream] # リポジトリ名 name=CentOS-$releasever - AppStream # ミラーサーバのリスト。このリストから良い感じに近いところが選ばれる。 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra #baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/ # GPG の検証を有効にする(ダウンロード先が正しい場所かの確認) gpgcheck=1 # yum リポジトリを有効にする enabled=1 # GPG のキー情報 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
$
で始まるのは変数。次のコマンドで中身を確認できる。
]# python3 -c 'import dnf, pprint; db = dnf.dnf.Base(); pprint.pprint(db.conf.substitutions,width=1)' {'arch': 'x86_64', 'basearch': 'x86_64', 'releasever': '8'} // /etc/yum/vars にも変数定義がある ]# cat /etc/yum/vars/infra stock
yum repoinfo
を使えば、一発でリポジトリの URL を確認できる。
]# yum repoinfo メタデータの期限切れの最終確認: 0:11:45 時間前の 2020年01月17日 10時43分52秒 に実施しました。 Repo-id : AppStream Repo-name : CentOS-8 - AppStream Repo-revision: 1579219754 Repo-updated : 2020年01月16日 19時09分14秒 Repo-pkgs : 4,933 Repo-size : 6.4 G Repo-mirrors : http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock Repo-baseurl : http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/8.1.1911/AppStream/x86_64/os/ (9 more) Repo-expire : 172,800 秒 (最終: 2020年01月17日 10時43分46秒) Repo-filename: /etc/yum.repos.d/CentOS-AppStream.repo ...
マイナーバージョン
リポジトリの URL(http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock) を見るとわかるが、 CentOS のリポジトリではマイナーバージョンの違いを意識していない(mirror が release=8
)。つまり、使い始めたときのバージョンが古くても、パッケージを更新すれば最新のマイナーバージョンに近づく。これを確認する。
// CentOS 8.0 を使っている ]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) // 全てのパッケージをアップデートする ]# yum update -y ... // CentOS 8.1 にアップデートされている ]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core)
マイナーバージョンを固定したい場合は、先述の .repo
ファイルで baseurl
に過去のスナップショット(CentOS 過去リポジトリのスナップショット)を指定する。ただし、CentOS のオフィシャルリポジトリは古いマイナーバージョンのパッケージをサポートせず、セキュリティパッチも提供されないため、利用は推奨されない。基本的には、定期的なアップデートが望ましいと思う。
リポジトリの追加
yum リポジトリはオフィシャルリポジトリ以外にもさまざま提供されている。CentOS のオフィシャルリポジトリは提供されているミドルウェアバージョンがだいたい古いので、最新版のミドルウェアをインストールしたいときに追加することがある。野良パッケージはセキュリティ的にあやしい点は注意が必要。最近は、検証目的だったらコンテナ使えば済むことも多い。
.repo
ファイルは手でも追加できるが、一部のリポジトリは yum
で追加できる。
// 例. epel を追加する ]# yum install -y epel-release ... インストール済み: epel-release-8-5.el8.noarch 完了しました! // 追加されたリポジトリを確認する ]# yum repolist epel メタデータの期限切れの最終確認: 0:26:49 時間前の 2020年01月17日 10時43分52秒 に実施しました。 repo id repo の名前 状態 *epel Extra Packages for Enterprise Linux 8 - x86_64 4,401
URL 指定でもいける。
// 例. postgresql のリポジトリを追加する ]# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm // 追加されたリポジトリを確認する ]# yum repolist 'pgd*' メタデータの期限切れの最終確認: 0:01:15 時間前の 2020年01月17日 11時13分37秒 に実施しました。 repo id repo の名前 状態 pgdg10 PostgreSQL 10 for RHEL/CentOS 8 - x86_64 676 pgdg11 PostgreSQL 11 for RHEL/CentOS 8 - x86_64 711
リポジトリの情報を取得する
先述した yum リポジトリ(たとえば http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/8.1.1911/AppStream/x86_64/os/)には、repomd.xml が配置されている。これはリポジトリの情報が記述されたファイル。
<?xml version="1.0" encoding="UTF-8"?> <repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm"> <revision>1583442846</revision> <data type="primary"> <checksum type="sha256">2cede7c42f45529dddf24e87f8efde2307e9a5d864e16b2b7b9f70edcf62c089</checksum> <open-checksum type="sha256">fce809e1aa0bda7d0c4feae290b67a3e464584f054d0ef568fa4c50a94035da6</open-checksum> <location href="repodata/2cede7c42f45529dddf24e87f8efde2307e9a5d864e16b2b7b9f70edcf62c089-primary.xml.gz"/> <timestamp>1583442839</timestamp> <size>1582689</size> <open-size>15951759</open-size> </data> <data type="filelists"> <checksum type="sha256">9fd0fdcad384526e5dbe6841bc446d7a12c892b26f479f4017ef9ab00dbeeeb0</checksum> <open-checksum type="sha256">09b85490475f7e0c1459c9def803ce307abb5bcfbb103721ae7761eee6db9e88</open-checksum> <location href="repodata/9fd0fdcad384526e5dbe6841bc446d7a12c892b26f479f4017ef9ab00dbeeeb0-filelists.xml.gz"/> <timestamp>1583442839</timestamp> <size>5142434</size> <open-size>65464057</open-size> </data> ...
リンクされている別ファイル(たとえば type=primary
の repodata/2cede7c42f45529dddf24e87f8efde2307e9a5d864e16b2b7b9f70edcf62c089-primary.xml.gz
)を確認すると、次のように記載されている。これらは rpm が元になっているメタデータファイルで、依存関係の解決に重要なのは、パッケージが提供するファイルの一覧と依存するファイルの一覧が記載されている部分。
... <package type="rpm"> <name>jq</name> <arch>x86_64</arch> <version epoch="0" ver="1.5" rel="12.el8"/> <checksum type="sha256" pkgid="YES">65d37df250e218828523bea2882f4bfad1ffc4dcc0f56aadd92b9c5265e7ae37</checksum> <summary>Command-line JSON processor</summary> <description>lightweight and flexible command-line JSON processor jq is like sed for JSON data ? you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text. It is written in portable C, and it has zero runtime dependencies. jq can mangle the data format that you have into the one that you want with very little effort, and the program to do so is often shorter and simpler than you'd expect.</description> <packager>CentOS Buildsys <bugs@centos.org></packager> <url>http://stedolan.github.io/jq/</url> <time file="1562074383" build="1557872881"/> <size package="165044" installed="367321" archive="369376"/> <location href="Packages/jq-1.5-12.el8.x86_64.rpm"/> <format> <rpm:license>MIT and ASL 2.0 and CC-BY and GPLv3</rpm:license> <rpm:vendor>CentOS</rpm:vendor> <rpm:group>Unspecified</rpm:group> <rpm:buildhost>x86-01.mbox.centos.org</rpm:buildhost> <rpm:sourcerpm>jq-1.5-12.el8.src.rpm</rpm:sourcerpm> <rpm:header-range start="5608" end="12540"/> <!-- パッケージが提供するファイル --> <rpm:provides> <rpm:entry name="jq" flags="EQ" epoch="0" ver="1.5" rel="12.el8"/> <rpm:entry name="jq(x86-64)" flags="EQ" epoch="0" ver="1.5" rel="12.el8"/> <rpm:entry name="libjq.so.1()(64bit)"/> </rpm:provides> <!-- パッケージが必要とするファイル --> <rpm:requires> <rpm:entry name="ld-linux-x86-64.so.2()(64bit)"/> <rpm:entry name="ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)"/> <rpm:entry name="libm.so.6()(64bit)"/> <rpm:entry name="libm.so.6(GLIBC_2.2.5)(64bit)"/> <rpm:entry name="libonig.so.5()(64bit)"/> <rpm:entry name="rtld(GNU_HASH)"/> <rpm:entry name="libc.so.6(GLIBC_2.14)(64bit)"/> </rpm:requires> <file>/usr/bin/jq</file> </format> </package> <package type="rpm"> ... </package> ...
パッケージの依存関係を解決する
上記のメタデータファイルを利用して依存関係を解決する。dnf では hawkey や libdnf というライブラリが使われている。
これを利用して python からパッケージに関する操作を試してみた。
# RPM データベースの読み込み >>> import hawkey >>> sack = hawkey.Sack() >>> sack.load_system_repo() # このファイルが含まれる パッケージ を探す >>> subject = hawkey.Subject("/sbin/ldconfig") >>> query = subject.get_best_query(sack) >>> query.run() [<hawkey.Package object id 160, glibc-2.28-72.el8.x86_64, @System>]
# yum リポジトリキャッシュ の読み込み # 簡単だったので hawkey.Repo を使った。ただし ddeprecate らしいので注意。 >>> repo = hawkey.Repo("AppStream") /usr/lib64/python3.6/site-packages/hawkey/__init__.py:345: DeprecationWarning: The class hawkey.Repo is deprecated. Please use dnf.repo.Repo instead. The class will be removed on 2019-12-31. warnings.warn(msg, DeprecationWarning) >>> repo.repomd_fn = "/var/cache/dnf/AppStream-a520ed22b0a8a736/repodata/repomd.xml" >>> repo.primary_fn = "/var/cache/dnf/AppStream-a520ed22b0a8a736/repodata/cd0620b70e0fea590c1a2f8d76011fccb24fc268efa121e670a9ae809661147d-primary.xml.gz" >>> repo.filelists_fn = "/var/cache/dnf/AppStream-a520ed22b0a8a736/repodata/25f52a6969043ad2e69b4aaeac995e6fb999545c363d573b498f72d2784b63d9-filelists.xml.gz" >>> sack = hawkey.Sack() >>> sack.load_repo(repo, load_filelists=True) # インストールされてない依存ファイルを検索する >>> subject = hawkey.Subject("/var/log/httpd") >>> query = subject.get_best_query(sack) >>> query.run() [<hawkey.Package object id 1323, httpd-2.4.37-16.module_el8.1.0+256+ae790463.x86_64, AppStream>]
なお、実際の dnf では /usr/lib/python3.6/site-packages/dnf/sack.py
や /usr/lib/python3.6/site-packages/dnf/package.py
で hawkey のクラスを継承して利用している。
依存するファイルをダウンロードする
ダウンロードして rpm でインストールするだけ。なお、RPM データベースも更新される。
yum の使い方
ここからは、yum の使い方を説明する。
プロキシ
前述の通り、 yum リポジトリにはネットワーク越しにアクセスする。そのため、プロキシ環境では設定が必要。環境変数(http_proxy)を参照してくれないので /etc/dnf/dnf.conf
に記述する。
[main] ... proxy=http://hostname:port/
リポジトリ系
すべてのリポジトリが常に利用されるわけではない。(有効は enabled=1
)
有効なリポジトリの一覧は yum repolist
で表示できる。
]# yum repolist メタデータの期限切れの最終確認: 1:29:01 時間前の 2020年01月17日 06時20分37秒 に実施しました。 repo id repo の名前 状態 AppStream CentOS-8 - AppStream 4,933 BaseOS CentOS-8 - Base 1,784 PowerTools CentOS-8 - PowerTools 1,462 *epel Extra Packages for Enterprise Linux 8 - x86_64 4,401 extras CentOS-8 - Extras
リポジトリ情報のキャッシュ
リポジトリにアクセスすると、リポジトリの情報などは /var/cache/dnf/
にキャッシュされる。
]# ls /var/cache/dnf/ AppStream-a520ed22b0a8a736 PowerTools-filenames.solvx cr-039a6a50a93fd9f5 epel.solv AppStream-filenames.solvx PowerTools.solv epel-6519ee669354a484 expired_repos.json AppStream-source-d916d81a182f85b8 base-debuginfo-08a542605d8eb5c1 epel-debuginfo-959fe314f3484166 extras-2770d521ba03e231 AppStream.solv base-debuginfo-5345089e85c6a348 epel-filenames.solvx extras-filenames.solvx BaseOS-929b586ef1f72f69 base-debuginfo-5980dc1967f83779 epel-playground-debuginfo-e325992085d3d403 extras-source-e5a50b143fd03d3a BaseOS-filenames.solvx base-debuginfo-d0bcd5150a07fdca epel-presto.solvx extras.solv BaseOS-source-c81876907597427a bpftools-46d7d628f821a1b2 epel-source-8d551035510941c5 last_makecache BaseOS.solv c8-media-BaseOS-457410b384608a54 epel-testing-debuginfo-cdd88e3082e30ebe packages.db PowerTools-25a6a2b331e53e98 centosplus-7c2fb1944c8ef543 epel-updateinfo.solvx tempfiles.json // 主に repodata(パッケージのメタ情報) がキャッシュされる ]# ls /var/cache/dnf/AppStream-a520ed22b0a8a736/ mirrorlist packages repodata // キャッシュ元は baseurl(今回だと http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/8.1.1911/AppStream/x86_64/os/repodata/) ]# ls repodata/ 025600546e8cc2f3e6981c1ad506349c3f651bdf0dfd2ee2526f835b9f39b39d-comps-AppStream.x86_64.xml.xz 25f52a6969043ad2e69b4aaeac995e6fb999545c363d573b498f72d2784b63d9-filelists.xml.gz 5e56e0e0a2d21f525ee7169def6f7b7fb7e4f1b69b0c98ba537269c8d928135a-modules.yaml.gz cd0620b70e0fea590c1a2f8d76011fccb24fc268efa121e670a9ae809661147d-primary.xml.gz repomd.xml ...
そのため、一部のコマンド(yum リポジトリのキャッシュで済む場合 や rpm データベースで済むもの)は、ネットワークがつながらない状態でも実行できる。
// ネットワークを切断した状態で次の操作を行う ]# yum search java メタデータの期限切れの最終確認: 0:14:03 時間前の 2020年01月17日 08時29分24秒 に実施しました。 ================================================================== 名前 & 概要 一致: java =================================================================== java-hdf.x86_64 : HDF4 java library java-hdf5.x86_64 : HDF5 java library jargs-javadoc.noarch : Javadoc for jargs java-atk-wrapper.x86_64 : Java ATK Wrapper tzdata-java.noarch : Timezone data for Java ... ]# yum list installed インストール済みパッケージ NetworkManager.x86_64 1:1.20.0-3.el8 @BaseOS NetworkManager-config-server.noarch 1:1.20.0-3.el8 @BaseOS NetworkManager-libnm.x86_64 1:1.20.0-3.el8 @BaseOS NetworkManager-team.x86_64 1:1.20.0-3.el8 @BaseOS ...
しかしパッケージのインストールは失敗する。
// ネットワークを切断した状態で次の操作を行う ]# yum install java メタデータの期限切れの最終確認: 0:15:50 時間前の 2020年01月17日 08時29分24秒 に実施しました。 パッケージ java-1.8.0-openjdk-1:1.8.0.232.b09-0.el8_0.x86_64 は既にインストールされています。 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: java-1.8.0-openjdk x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 317 k java-1.8.0-openjdk-devel x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 9.8 M java-1.8.0-openjdk-headless x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 33 M トランザクションの概要 ============================================================================================================================================================= アップグレード 3 パッケージ ダウンロードサイズの合計: 43 M これでよろしいですか? [y/N]: y パッケージのダウンロード: [=== ] --- B/s | 0 B --:-- ETA ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。 'dnf clean packages' を実行することでキャッシュパッケージを削除できます。 エラー: パッケージのダウンロード中にエラーが発生しました: Curl error (7): Couldn't connect to server for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=stock [Failed to connect to localhost port 8080: 接続を拒否されました]
なんらかの操作が失敗したときにその結果がキャッシュされてしまい、修正しても直らない場合がある。yum clean
を使うとキャッシュを削除でき、この問題を解消できる。
]# yum clean all 38 ファイルが削除されました
検索系
だいたいのパッケージ名がわかっていれば yum search
を使う。
]# yum search openjdk メタデータの期限切れの最終確認: 0:27:07 時間前の 2020年01月17日 06時20分37秒 に実施しました。 ================================================================= 概要 & 名前 一致: openjdk ================================================================= java-11-openjdk-demo.x86_64 : OpenJDK Demos 11 java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos 8 java-latest-openjdk-demo.x86_64 : OpenJDK Demos 13 java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11 java-11-openjdk-src.x86_64 : OpenJDK Source Bundle 11 java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle 8 java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11 java-latest-openjdk-jmods.x86_64 : JMods for OpenJDK 13 ...
コマンド名しかわからなければ、yum provides
を使う。
口頭で教えてもらった手順を試そうとしたときに「コマンド入ってないぞ…今さら聞きづらい…」ってときに使う。
]# yum provides psql メタデータの期限切れの最終確認: 0:19:25 時間前の 2020年01月17日 06時20分37秒 に実施しました。 postgresql-10.6-1.module_el8.0.0+15+f57f353b.x86_64 : PostgreSQL client programs Repo : AppStream 一致: ファイル名 : /usr/bin/psql
依存パッケージを調べたいときは yum deplist
を使う。
こういうのを見ると 「頑張ってくれてるんだな…」と思う。
]# yum deplist postgresql メタデータの期限切れの最終確認: 0:09:26 時間前の 2020年01月17日 10時43分52秒 に実施しました。 package: postgresql-10.6-1.module_el8.0.0+15+f57f353b.x86_64 dependency: libc.so.6(GLIBC_2.15)(64bit) provider: glibc-2.28-72.el8.x86_64 dependency: libm.so.6()(64bit) provider: glibc-2.28-72.el8.x86_64 dependency: libm.so.6(GLIBC_2.2.5)(64bit) provider: glibc-2.28-72.el8.x86_64 dependency: libpq.so.5()(64bit) provider: libpq-10.5-1.el8.x86_64 dependency: libpq.so.5(RHPG_10)(64bit) provider: libpq-10.5-1.el8.x86_64 ...
最新版じゃないパッケージをインストールしたい場合は yum --showduplicates search
を使う。
]# yum --showduplicates search glibc メタデータの期限切れの最終確認: 1:05:51 時間前の 2020年01月17日 06時20分37秒 に実施しました。 =================================================================== 名前 完全一致: glibc ==================================================================== glibc-2.28-42.el8.1.x86_64 : The GNU libc libraries glibc-2.28-72.el8.i686 : The GNU libc libraries glibc-2.28-72.el8.x86_64 : The GNU libc libraries ... // バージョンまで指定する ]# yum install -y glibc-2.28-72.el8.x86_64 ...
パッケージを削除するときは yum remove
(yum erase
はエイリアス)を使う。
]# yum remove -y perf ... 削除しました: perf-4.18.0-147.3.1.el8_1.x86_64 完了しました!
更新系
パッケージを追加するときは yum install
を使う。
// -y オプションを使うと、ユーザ確認なしでインストールできる ]# yum install -y jq
更新可能なパッケージを調べるときは yum check-update
を使う。
]# yum check-update ... kernel-headers.x86_64 4.18.0-147.el8 BaseOS kernel-headers.x86_64 4.18.0-80.11.2.el8_0 @BaseOS kernel-headers.x86_64 4.18.0-147.0.3.el8_1 BaseOS kernel-headers.x86_64 4.18.0-80.11.2.el8_0 @BaseOS kernel-headers.x86_64 4.18.0-147.3.1.el8_1 BaseOS kernel-headers.x86_64 4.18.0-80.11.2.el8_0 @BaseOS libssh-config.noarch 0.9.0-4.el8 BaseOS libssh.x86_64 0.8.5-2.el8 @anaconda yum-utils.noarch 4.0.8-3.el8 BaseOS dnf-utils.noarch 4.0.2.2-3.el8 @BaseOS
実際にパッケージを更新するときは yum update
を使う。
// 一部のパッケージだけ更新する。 ]# yum update -y dnf-utils ... アップグレード済み: dnf-4.2.7-7.el8_1.noarch dnf-data-4.2.7-7.el8_1.noarch dnf-plugins-core-4.0.8-3.el8.noarch libdnf-0.35.1-9.el8_1.x86_64 librepo-1.10.3-3.el8.x86_64 libsolv-0.7.4-3.el8.x86_64 python3-dnf-4.2.7-7.el8_1.noarch python3-dnf-plugins-core-4.0.8-3.el8.noarch python3-hawkey-0.35.1-9.el8_1.x86_64 python3-libdnf-0.35.1-9.el8_1.x86_64 python3-librepo-1.10.3-3.el8.x86_64 yum-4.2.7-7.el8_1.noarch インストール済み: yum-utils-4.0.8-3.el8.noarch 完了しました! // 全て更新する ]# yum update -y
昔のパッケージに戻すときは、yum downgrade
を使う。
// インストール済みのパッケージ一覧を表示し、昔のパッケージがあることを確認する ]# yum list java-1.8.0-openjdk-devel メタデータの期限切れの最終確認: 0:06:25 時間前の 2020年01月17日 08時02分12秒 に実施しました。 インストール済みパッケージ java-1.8.0-openjdk-devel.x86_64 1:1.8.0.232.b09-0.el8_0 @AppStream 利用可能なパッケージ java-1.8.0-openjdk-devel.x86_64 1:1.8.0.232.b09-2.el8_1 AppStream ]# yum update java-1.8.0-openjdk-devel CentOS-8 - AppStream 7.9 kB/s | 4.3 kB 00:00 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: java-1.8.0-openjdk x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 317 k java-1.8.0-openjdk-devel x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 9.8 M java-1.8.0-openjdk-headless x86_64 1:1.8.0.232.b09-2.el8_1 AppStream 33 M ... ]# yum downgrade java-1.8.0-openjdk-devel CentOS-8 - AppStream 3.7 kB/s | 4.3 kB 00:01 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= ダウングレード: java-1.8.0-openjdk x86_64 1:1.8.0.232.b09-0.el8_0 AppStream 299 k java-1.8.0-openjdk-devel x86_64 1:1.8.0.232.b09-0.el8_0 AppStream 9.7 M java-1.8.0-openjdk-headless x86_64 1:1.8.0.232.b09-0.el8_0 AppStream 32 M ...
アップデートの履歴を見るときは yum history
を使う。
]# yum history ID | コマンドライン | 日時 | 動作 | 変更さ ------------------------------------------------------------------------------- 30 | update dnf-utils | 2020-01-17 07:17 | I, O, U | 14 29 | builddep coreutils-8.30- | 2020-01-05 11:35 | Install | 12 28 | --enablerepo=*debug* deb | 2020-01-05 11:19 | Install | 2 27 | --enablerepo=*debug* deb | 2020-01-05 10:50 | Install | 3 26 | --enablerepo=*debug* deb | 2020-01-05 10:40 | Install | 1 ... // パッケージごとに検索できる ]# yum history glibc ID | コマンドライン | 日時 | 動作 | 変更さ ------------------------------------------------------------------------------- 31 | install -y glibc-2.28-72 | 2020-01-17 07:28 | Upgrade | 6 < 1 | | 2019-12-12 18:19 | Install | 613 >E
各ヒストリの詳細は yum history info
を使う。
]# yum history info 19 トランザクション ID : 19 開始時間 : 2020年01月03日 11時44分17秒 開始 rpmdb : 995:a18673e372c3415463e4b424d834d7b8a6244225 終了時間 : 2020年01月03日 11時44分17秒 (0 秒) 終了 rpmdb : 996:0b6a633209a84b1d46f9117b3121ef21e87064eb ユーザー : root <root> 終了コード : 成功 Releasever : 8 コマンドライン : install -y perf 変更されたパッケージ: インストール perf-4.18.0-80.11.2.el8_0.x86_64 @BaseOS ...
履歴から操作一式を取り消したい場合は yum history undo
を使う。
]# yum history undo 19 メタデータの期限切れの最終確認: 0:13:17 時間前の 2020年01月17日 08時02分12秒 に実施しました。 トランザクション 19 を 2020年01月03日 11時44分17秒 から取り消しています インストール perf-4.18.0-80.11.2.el8_0.x86_64 @BaseOS 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= 削除中: perf x86_64 4.18.0-80.11.2.el8_0 @BaseOS 7.3 M トランザクションの概要 ============================================================================================================================================================= 削除 1 パッケージ 解放された容量: 7.3 M これでよろしいですか? [y/N]: y ...
「やっぱり undo やめた!」ってときは yum history redo
を使う。
ただし該当パッケージがリポジトリに既に存在しなければ、実行は失敗する。
]# yum history redo 19 メタデータの期限切れの最終確認: 0:14:10 時間前の 2020年01月17日 08時02分12秒 に実施しました。 Repeating transaction 19, from 2020年01月03日 11時44分17秒 インストール perf-4.18.0-80.11.2.el8_0.x86_64 @BaseOS 利用可能なパッケージ perf-4.18.0-80.11.2.el8_0.x86_64 がありません。 エラー: An operation cannot be redone