新年度ですね!
私はインフラの仕事に携わって9か月が経ち、
以前は全然理解できていなかったことが、少しずつ分かるようになってきました。
まだまだ分からないことも多いですが、仕組みが分かってくるとおもしろい。
さて今回は、パッケージ管理ツールの1つである、yumについて勉強します。
対象範囲はRedHatの公式ドキュメントの6.3章部分。
もくじ
1.yumとは
3.設定ファイル2種( /etc/yum.confの詳細 / /etc/yum.repos.d/*.repoの詳細 )
1.yumとは
Linux上で動くソフトウェアパッケージを管理するツールの1つ。
主にRedHat系ディストリビューションで利用されている。
RedHat系では、dnfが同様の機能を持っている。dnfのほうがyumよりも新しいが、今回は、それでも根強く使われているyumについて勉強する。
2.そもそも、パッケージとリポジトリについて
yumの話の前に、パッケージとリポジトリについて簡単に説明する。
まずパッケージとは、ソフトウェアサービスなどの機能がひとまとまりになったもの。
例えば、Pythonのパッケージ(Pythonを利用できるように必要なソースなどがまとまったパッケージ)など。
Pythonパッケージであれば、Pythonの開発元から取得することになるし、自分でパッケージを作ることもできる。そのため、パッケージは世の中に無数にある。
リポジトリは、パッケージを管理するための箱のようなもので、
例えばRedHatの管理するリポジトリの中には、RedHat上で利用する様々なパッケージが配置されている。
そのため利用者は、リポジトリから必要なパッケージをインストールして利用することになる。
リポジトリからパッケージをインストールしたり、パッケージのバージョンアップ、削除をしたりといったことを行うため、今回取り上げるyumなどが、パッケージ管理ツールとして利用されている。
※リポジトリは、RedHatなど外部団体が作ったもの(オープンなもの)もあれば、
自社組織などで独自に作成するクローズドなものもある。ただyumの利用方法としては変わらない。
3.設定ファイル2種
yumは、OSの他の機能と同様、設定ファイルをもとに動く。
設定ファイルと設定ファイルの格納先は以下の2種類ある。
・ /etc/yum.conf
・ /etc/yum.repos.d/*.repo
1つめのconfファイルには、yumの機能全般に関わる設定=グローバルオプションを記述する。
2つめのディレクトリに格納する各ファイルには、リポジトリ毎の個別設定を記述する。
◎/etc/yum.confファイルの詳細
yum全体に関する設定や、各リポジトリ共通としたい設定などを記述するための設定ファイル。
[main]の下に、Key=Value方式で記述していく。
イメージとして、私の環境(CentOS8、設定は特にいじっていない)では以下のような設定になっていた。
(各プロパティの詳細はRedHatの公式ドキュメントやyumのmanページ参照)
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
これらconfファイル内の[main]以下の各設定は、グローバルオプションとも呼ばれ、
設定値は次に紹介するリポジトリ毎の個別設定よりも優先される。
◎/etc/yum.repos.d/*.repo各ファイルの詳細
リポジトリ毎の個別設定を記述するファイル。1リポジトリにつき1ファイルとすると良い。(デフォルトではそうなっている)
例として、/etc/yum.repos.d/CentOS-Base.repoの中身。
記述方法は、/etc/yum.confと同じく、key=valueとなる。ただし各パラメータ値は、"[ ]"でくくられたリポジトリ名の下に書いていくことになる。
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
このファイルに書いていく[repository]オプションの各パラメータのうち、以下2つは設定必須となっている。
・name
・baseurl(またはmirrorlist)
nameはリポジトリ名。
baseurlはリポジトリの repodata ディレクトリがあるディレクトリへの URL。
基本はこれら2つを必須事項として設定するが、baseurlパラメータの代わりにmirrorlistパラメータを指定しても良い。
mirrorlistは、baseurlのリストにアクセスするためのURLとなる。そのためmirrorlistを利用する場合は、あらかじめbaseurlのリストを含むファイルが存在している必要がある。
上記の/etc/yum.repos.d/CentOS-Base.repoは、baseurlの代わりにmirrorlistを使用している例となる。
リポジトリ名はCentOS-$releasever - Base ($releasever 部分は変数)、
baseurlのリスト(mirrorlist)は、http://mirrorlist.centos.org/? にあるという設定である。(「?」より前の部分で、リストのベースURLが表現されている)
4.yum変数について
「3.設定ファイル2種」の例でも一部出てきたように、設定ファイル内にはyum変数と呼ばれる変数を定義することが可能となっている。
yum変数は先頭に「$」をつけたものであり、例えば以下のようなものが設定されている。
name=CentOS-$releasever - Base
release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
デフォルトであらかじめ設定されているyum変数のうち、以下は特に重要なものとなる。
・$releasever
RedHatのリリースバージョンを指す。
・$basearch
システムのベースアーキテクチャを指す。
ベースアーキテクチャとは、x86_64やi386など。
関連して、上記例には出ていないが、「$arch」であればCPUアーキテクチャを指す。(i586、i686、x86_64のいずれか。)
他にも多くの変数があるが、これら変数は以下に定義されている。
/etc/yum/vars/
※CentOS8の環境では、実体は/etc/dnf/vars/にあった。
上記ディレクトリの配下に、変数名のファイルがあり、ファイルの中身は変数の設定値のみとなっている。
従って、変数名や変数の値を変えたい時や、変数を自作する時は、同ディレクトリのファイルを編集/新規作成すれば良い。
5.yum-config-manager
ここまでリポジトリ設定ファイルの書き方のルールを見てきた。
最後に、リポジトリ設定を制御するコマンド「yum-config-manager」を紹介する。
yum-config-managerコマンドを利用することで、新規リポジトリ追加や既存リポジトリの設定編集・参照などが簡単にできるようになる。
yum-config-managerが入っていない場合は、以下をインストール。
$ yum install -y yum-utils
リポジトリを新規追加する場合(オプションなしの最低限のコマンド)
$ yum-config-manager --add-repo リポジトリのURL
今回は以上!