10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ミライトデザインAdvent Calendar 2022

Day 7

yum についてよくわかっていないので調べる

Last updated at Posted at 2022-12-09

前日は @__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が使うパッケージ管理システム
  • パッケージの依存関係の自動解決はやってくれない

パッケージ

Wiki

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 installyum 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 を選択。

image.png

ダウンロードリンクの URL をコピーしておく。

image.png

# 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 を行った際の流れ

イメージ.png

多分こんな感じになっているはず。
違ったら誰か教えて。

動作確認した環境

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

おわり

8日目は @Nyokki さんの PostgreSQL 15 で追加された MERGE 機能の記事です!!

参考

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?