前日は @__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 機能の記事です!!
参考