前日は @__tomotomon さんの Re:dash についての記事 でした。
Re:dash はちゃんと触ったことがなかったので、勉強になりました。ありがとうございました。
少し遅れてしまいましたが、7日目は普段なんとなく触っている yum について調べてみた結果を記事にしました。
用語の整理
yum(Yellowdog Updater Modified)
- RPM Package Manager のパッケージを管理するメタパッケージ管理システム
- yumは、内部でRPMを呼び出している
- パッケージの依存関係を自動解決
RPM
- RPM Package Manager (前は Red Hat Package Manager) の略
- rpm 形式パッケージを対象とした Red Hat Linux で開発されたツール
- RedHat系OSが使うパッケージ管理システム
- パッケージの依存関係の自動解決はやってくれない
パッケージ
OSになんらかのソフトウェアを追加インストールする場合には、ソフトウェアに関係するファイル一式をまとめた「パッケージ」が利用される。パッケージの形式は複数あるが、利用される形式はOSによって限定されることが多い。
■ 実行形式でないもの
インストールされるデータ・依存関係のみが含まれており、OSに搭載されているパッケージ管理システムを用いることでインストールできる。
- RPM形式パッケージ
- Red Hat Linux用に開発されたパッケージ形式
 
- deb形式パッケージ
- Debian用に開発されたパッケージ形式
 
他にも色々な形式のパッケージがある。
■ 実行形式
ソフトウェアのアーカイブにインストール処理を行う仕組みを追加した形式。Mac OSやWindowsでよく使われ、Linuxディストリビューション向けのソフトウェアでも稀に利用される。依存関係の解決・インストールは、パッケージが独自に行う。
こちらは今回対象ではないので深く調べない。
パッケージ管理システムの種類
- Debian系
- dpkg
- APT
 
- Red Hat系
- RPM
- Yum
 
- Mac
- Homebrew
 
- Windows
- Windows Package Manager
 
他にも色々ある。
リポジトリ
- パッケージの提供元
- 世界中にあって、配布しているパッケージが違う
- 公式のものと非公式のものがある
yum のリポジトリについて
有効になっているリポジトリの一覧。
# yum repolist
repo id             repo name             status
base/7/x86_64       CentOS-7 - Base       10072
extras/7/x86_64     CentOS-7 - Extras     515
updates/7/x86_64    CentOS-7 - Updates    4425
repolist: 15012
おそらく、yum install コマンドなどの対象となるリポジトリがこの一覧ということ。
リポジトリの情報を管理しているの /etc/yum.repos.d/ 以下に置かれたファイル
上記の有効、無効も管理している。
# ls -l /etc/yum.repos.d/
total 28
-rw-r--r-- 1 root root 1664 Aug 30  2017 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 Aug 30  2017 CentOS-CR.repo
-rw-r--r-- 1 root root  649 Aug 30  2017 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root  630 Aug 30  2017 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 Aug 30  2017 CentOS-Sources.repo
-rw-r--r-- 1 root root 3830 Aug 30  2017 CentOS-Vault.repo
-rw-r--r-- 1 root root  314 Aug 30  2017 CentOS-fasttrack.repo
中身を確認してみる。
#  cat /etc/yum.repos.d/CentOS-Base.repo
[base]
# リポジトリ名
name=CentOS-$releasever - Base
# ミラーサーバのリスト。近い場所からインストールしてくるらしい。
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
# GPG の検証を有効にする(ダウンロード先が正しい場所かの確認)
gpgcheck=1
# GPG のキー情報
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1 と書かれていないが、 enabled=0 が明示的に書かれているため、おそらくデフォルトが
enabled=1 なので CentOS-7 - Base CentOS-7 - Updates CentOS-7 - Extras リポジトリが有効化されていることがわかる。
先ほどの yum repolist で確認した内容とも一致しているように見える。
baseosリポジトリなどの説明はこの辺。
有効化されているリポジトリからパッケージを取得することができる。
リポジトリの追加
yum install と yum localinstall の違い
yum install or yum localinstall コマンドでリポジトリを追加することが可能。
2つの違いは次の通り
| yum install | yum localinstall | |
|---|---|---|
| パッケージのインストール | できる | できない | 
| リポジトリの追加 | できる | できる | 
RHEL 5 以前のバージョンでは、yum install ではリポジトリの追加はできなかったが、
RHEL 6 以降では可能になったらしい。
リポジトリを追加してみる
MySQL のリポジトリの追加を試してみる。
追加するリポジトリ はこちら。
今回は CentOS 7 系なので Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package を選択。
ダウンロードリンクの URL をコピーしておく。
# yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
... 省略 ...
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mysql80-community-release-el7-7.noarch      1/1
  Verifying  : mysql80-community-release-el7-7.noarch      1/1
Installed:
  mysql80-community-release.noarch 0:el7-7
Complete!
リポジトリが追加されたことを確認する。
# yum repolist
repo id                             repo name                    status
base/7/x86_64                       CentOS-7 - Base              10072
extras/7/x86_64                     CentOS-7 - Extras            515
mysql-connectors-community/x86_64   MySQL Connectors Community   146
mysql-tools-community/x86_64        MySQL Tools Community        58
mysql80-community/x86_64            MySQL 8.0 Community Server   156
updates/7/x86_64                    CentOS-7 - Updates           4425
repolist: 15372
MySQL のリポジトリが追加されている。
リポジトリの追加というより、リポジトリの情報の追加の方が正しいかも。
リポジトリを追加しただけなので当然 MySQL がインストールされたわけじゃない。
# mysql --version
bash: mysql: command not found
yum install を試す
MySQL Client をインストールする
yum install -y mysql-community-client
... 省略 ...
Installed:
  mysql-community-client.x86_64 0:8.0.31-1.el7
Dependency Installed:
  mysql-community-client-plugins.x86_64 0:8.0.31-1.el7                                mysql-community-common.x86_64 0:8.0.31-1.el7                                mysql-community-libs.x86_64 0:8.0.31-1.el7
Complete!
# mysql --version
mysql  Ver 8.0.31 for Linux on x86_64 (MySQL Community Server - GPL)
ダウンロードされた rpm ファイルを確認
一度ダウンロードされた rpm ファイルは、再度取得して来なくてもいいように、
/var/cache/yum/x86_64/7/ ディレクトリにキャッシュされるらしい。
yum clean で削除される。
# ls -la /var/cache/yum/x86_64/7/
total 40
drwxr-xr-x 8 root root 4096 Dec  9 05:10 .
drwxr-xr-x 3 root root 4096 Dec  9 02:10 ..
drwxr-xr-x 4 root root 4096 Dec  9 02:10 base
drwxr-xr-x 4 root root 4096 Dec  9 02:10 extras
drwxr-xr-x 4 root root 4096 Dec  9 05:10 mysql-connectors-community
drwxr-xr-x 4 root root 4096 Dec  9 05:10 mysql-tools-community
drwxr-xr-x 4 root root 4096 Dec  9 05:10 mysql80-community
-rw-r--r-- 1 root root  121 Dec  9 05:10 timedhosts
-rw-r--r-- 1 root root  407 Dec  9 02:10 timedhosts.txt
drwxr-xr-x 4 root root 4096 Dec  9 02:10 updates
ls -l /var/cache/yum/x86_64/7/mysql-connectors-community/
total 116
-rw-r--r-- 1 root root 95132 Oct  8 12:22 8393eb6d1cc24f6768d2260581e1ef283f65bdbf-primary.sqlite.bz2
-rw-r--r-- 1 root root     0 Dec  9 05:10 cachecookie
drwxr-xr-x 2 root root  4096 Dec  9 05:10 gen
drwxr-xr-x 2 root root  4096 Dec  9 05:10 packages
-rw-r--r-- 1 root root  2622 Oct  8 12:22 repomd.xml
インストールされた rpm パッケージの情報を参照
rpm -qi mysql-community-client
Name        : mysql-community-client
Version     : 8.0.31
Release     : 1.el7
Architecture: x86_64
Install Date: Fri Dec  9 05:10:15 2022
Group       : Applications/Databases
Size        : 83836667
License     : Copyright (c) 2000, 2022, Oracle and/or its affiliates. Under GPLv2 license as shown in the Description field.
Signature   : RSA/SHA256, Wed Sep 14 08:28:57 2022, Key ID 467b942d3a79bd29
Source RPM  : mysql-community-8.0.31-1.el7.src.rpm
Build Date  : Tue Sep 13 19:18:01 2022
Build Host  : pb2-el7-20.regionaliad02.mysql2iad.oraclevcn.com
Relocations : (not relocatable)
Packager    : MySQL Release Engineering <mysql-build@oss.oracle.com>
Vendor      : Oracle and/or its affiliates
URL         : http://www.mysql.com/
Summary     : MySQL database client applications and tools
Description :
This package contains the standard MySQL clients and administration
tools.
これは rpm database というところからデータを取得してきているらしい。
rpm データベースには rpm install などをするとデータが追加されるらしい。
rpm データベースの場所は /var/lib/rpm にあるらしい。
# ls -l /var/lib/rpm
total 19988
-rw-r--r-- 1 root root   954368 Dec  9 05:10 Basenames
-rw-r--r-- 1 root root     8192 Dec  9 05:10 Conflictname
-rw-r--r-- 1 root root   274432 Dec  9 05:10 Dirnames
-rw-r--r-- 1 root root     8192 Dec  9 05:10 Group
-rw-r--r-- 1 root root    12288 Dec  9 05:10 Installtid
-rw-r--r-- 1 root root    16384 Dec  9 05:10 Name
-rw-r--r-- 1 root root     8192 Dec  9 05:10 Obsoletename
-rw-r--r-- 1 root root 15720448 Dec  9 05:10 Packages
-rw-r--r-- 1 root root  1646592 Dec  9 05:10 Providename
-rw-r--r-- 1 root root    98304 Dec  9 05:10 Requirename
-rw-r--r-- 1 root root    24576 Dec  9 05:10 Sha1header
-rw-r--r-- 1 root root    16384 Dec  9 05:10 Sigmd5
-rw-r--r-- 1 root root     8192 Sep 11  2017 Triggername
-rw-r--r-- 1 root root   270336 Dec  9 05:53 __db.001
-rw-r--r-- 1 root root    81920 Dec  9 05:53 __db.002
-rw-r--r-- 1 root root  1318912 Dec  9 05:53 __db.003
インストールされた rpm パッケージを確認
rpm -ql mysql-community-client
/usr/bin/mysql
/usr/bin/mysql_config_editor
/usr/bin/mysql_migrate_keyring
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlpump
/usr/bin/mysqlshow
/usr/bin/mysqlslap
/usr/share/doc/mysql-community-client-8.0.31
/usr/share/doc/mysql-community-client-8.0.31/LICENSE
/usr/share/doc/mysql-community-client-8.0.31/README
/usr/share/man/man1/mysql.1.gz
/usr/share/man/man1/mysql_config_editor.1.gz
/usr/share/man/man1/mysqladmin.1.gz
/usr/share/man/man1/mysqlbinlog.1.gz
/usr/share/man/man1/mysqlcheck.1.gz
/usr/share/man/man1/mysqldump.1.gz
/usr/share/man/man1/mysqlimport.1.gz
/usr/share/man/man1/mysqlpump.1.gz
/usr/share/man/man1/mysqlshow.1.gz
/usr/share/man/man1/mysqlslap.1.gz
yum install を行った際の流れ
多分こんな感じになっているはず。
違ったら誰か教えて。
動作確認した環境
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
おわり
8日目は @Nyokki さんの PostgreSQL 15 で追加された MERGE 機能の記事です!!
参考



