Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

Linuxにおけるリポジトリ、yumあるいはdnf

Linuxにおいてリポジトリとは、ダウンロードのためにパッケージ(.rpm, .deb)などを配置してくれているサーバのこと。

例えば、ニフクラさんは、rhui-rhel-8-for-x86_64-baseos-rhui-rpmsrhui-rhel-8-for-x86_64-appstream-rhui-rpmsというリポジトリ(サーバ)に、さまざまなパッケージ(aajohan-comfortaa-fonts.noarchとか)を置いていて、ユーザーがダウンロードできるようにしてくれている。ちなみに、.noarchというのはアーキテクチャに依存しないよ、という意味で、パッケージを作成する人がi386(32bit)やらx86_64(64bit)とか気にしないでいずれのアーキテクチャでも使用できるよ、とお知らせしてくれている。

で、このリポジトリLinuxマシンに追加しておかないと、リポジトリに配置されているパッケージをダウンロードできない。

ほんで、RHELでのリポジトリ追加は以下のコマンドで行う。

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署名を確認し、パッケージの真正性を検証する。

/etc/yum.repos.d/vscode.repo

[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://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-managing_yum_repositories

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-configuring_yum_and_yum_repositories

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

https://blog.apar.jp/linux/16100/