Linuxにおけるリポジトリ、yumあるいはdnf
Linuxにおいてリポジトリとは、ダウンロードのためにパッケージ(.rpm, .deb)などを配置してくれているサーバのこと。
例えば、ニフクラさんは、rhui-rhel-8-for-x86_64-baseos-rhui-rpmsやrhui-rhel-8-for-x86_64-appstream-rhui-rpmsというリポジトリ(サーバ)に、さまざまなパッケージ(aajohan-comfortaa-fonts.noarchとか)を置いていて、ユーザーがダウンロードできるようにしてくれている。ちなみに、.noarchというのはアーキテクチャに依存しないよ、という意味で、パッケージを作成する人がi386(32bit)やらx86_64(64bit)とか気にしないでいずれのアーキテクチャでも使用できるよ、とお知らせしてくれている。
で、このリポジトリをLinuxマシンに追加しておかないと、リポジトリに配置されているパッケージをダウンロードできない。
yum repolist # リポジトリの一覧表示
yum-config-manager --add-repo repository_url # リポジトリの追加
yum-config-manager --enable repository # リポジトリの有効化
追加したリポジトリは/etc/yum.repos.d/ディレクトリにファイル(.repo)として保存される。
試しに、.repoファイルの中身をみてみると、ini形式で記述されている。enabled=1はリポジトリが有効化されていることを意味している。gpgkeyは公開鍵ファイルのパスで、RPMに含まれた暗号化された署名を公開鍵ファイルで復号できれば、RPMファイルが偽物でないことがわかるようになっている。gpgcheck=1だと、リポジトリー内の全パッケージでGPG署名を確認し、パッケージの真正性を検証する。
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
リポジトリを無効化したい場合は、--disableで無効化する。
yum-config-manager --disable repository # リポジトリの無効化
追加したリポジトリを削除するには、/etc/yum.repos.d/ディレクトリにある.repoファイルを削除する。
リポジトリにあるパッケージをインストール、またはアップデートするには、次のコマンドを実行する。
yum list # インストール可能なパッケージの一覧
yum list installed # インストール済みのパッケージ一覧
yum install [パッケージ名] # パッケージのインストール
yum check-update # インストール済みのパッケージのうち、アップデートのあるパッケージの一覧
yum update [パッケージ名]
実際にリポジトリを追加し、リポジトリ上のパッケージをインストールしてみる
CentOS Stream9のDockerイメージを使用して、リポジトリの追加とインストールを試してみる。ちなみに、Stream9のイメージはDocker Hubではなくて、quay.ioにある。
docker pull quay.io/centos/centos:stream9
docker run --name centos_stream9 -it quay.io/centos/centos:stream9 /bin/bash
yum-config-managerがインストールされていないので、yum-utilsをインストールする。
# yum install -y yum-utils
VScodeをインストールしてみたい。公式をみてみると、リポジトリはhttps://packages.microsoft.com/yumrepos/vscodeの模様。リポジトリを追加すると、/etc/yum.repos.d/配下にpackages.microsoft.com_yumrepos_vscode.repoが作成されている。
# yum-config-manager --add-repo https://packages.microsoft.com/yumrepos/vscode
# ls /etc/yum.repos.d/
centos-addons.repo centos.repo packages.microsoft.com_yumrepos_vscode.repo
.repoファイルの中身を見るとこんな感じ。
# cat /etc/yum.repos.d/packages.microsoft.com_yumrepos_vscode.repo
[packages.microsoft.com_yumrepos_vscode]
name=created by dnf config-manager from https://packages.microsoft.com/yumrepos/vscode
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
これでyum install codeとすればVScodeをインストールできるのだが、.repoファイル名がなんだかかっこ悪いし、gpgcheckもされないので、ファイル名を変更してgpgcheckとgpgkeyを追加する。こんな感じ↓。
/etc/yum.repos.d/vscode.repo
[vscode]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
このように手動で.repoファイルを設定し、yum installでパッケージをインストールすることもできる。例えば、公式のgcloud CLIのインストール手順だと、次のように手動で.repoファイルを作成する。
sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-cli]
name=Google Cloud CLI
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el9-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM
ちなみにVScodeの正式なインストール方法でやれば、手動で.repoファイルを作ったりしないで大丈夫です。
今回はyumを使用したけれど、dnfというコマンドもある。これは「yum」の後継となるコマンドで、yumと同じサブコマンド、オプションを使用できる。実際のところyumにしろ、dnfにしろシンボリックリンク先がdnf-3となっているので、結局dnf-3コマンドを実行していることになる。
$ ls -l /usr/bin/yum /usr/bin/dnf
lrwxrwxrwx 1 root root 5 Oct 26 05:16 /usr/bin/dnf -> dnf-3
lrwxrwxrwx 1 root root 5 Oct 26 05:16 /usr/bin/yum -> dnf-3
今日のところはこんな感じ。おわり。
参考
https://xtech.nikkei.com/it/article/COLUMN/20061031/252339/
https://onoredekaiketsu.com/yum-command-and-repository/#toc36
https://eng-entrance.com/linux-package-yum
https://qiita.com/sksmnagisa/items/05a6f8a707010b8bea56
https://atmarkit.itmedia.co.jp/ait/articles/2001/31/news006.html