はじめに
いつも何気なくyum install ${パッケージ名}
でなんとなくインストールしていたのですが、
そもそもyumってなんだ?なんか調べたらrpmって出てくるけど何が違うんだ?
そんな思いから自分の考えをまとめるために書きます。
同様の疑問を持つ人の助けになれば幸いなのと、誤ってることがあればコメントにて指摘していただけますと幸いです!
yumとは
yumはCentOSを始め、Red Hat系のLinuxディストリビューションで使用されている、パッケージ管理ツールで、パッケージをインストール、削除、更新といったあらゆる操作ができます。
そしてyumと同様にrpmもパッケージ管理ツールです。
両者には以下のような違いがあります。
yum | rpm | |
---|---|---|
依存関係の自動解決 | ◯ | X |
自動更新 | ◯ | X |
yum
の場合は、何かパッケージをinstallした際に、他にも必要なパッケージがないかチェックし一緒にインストールすることができます。
一方rpmコマンドの場合はそういった依存関係は関係なく、指定したパッケージのみをインストイールします。
なのでrpmコマンドを使う場面としては限定的にはなりそうですが、インストールするパッケージを個別に選定してカスタマイズが必要な時になるのでしょうか。
rpmの後継としてyumが登場した背景もあり、yumのほうが高機能なので基本的にはyumを使用することにはなるかと思います。
yumの仕組みについて
一旦yumの仕組みについて全体を以下に記載します。
パッケージが置いてある場所
ここにyum install
で実際にインストールするパッケージが置かれています。
では、どうやってパッケージを置いてある場所を参照しているんだ?と思ったのですが、それは/etc/yum.repos.d/
配下の
ファイルに記載してあります。
/etc/yum.repos.d/
配下のCentOS-Base.repo
を見てみます。
sh-4.2$ cat CentOS-Base.repo
# 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.
#
#
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
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://vault.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://vault.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://vault.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
上記の中の、以下に書かれているURLにパッケージを取りに行っています。
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
mirrorlist
はパッケージが置かれたサーバーの中から地理的に一番近い場所からパッケージを取得してくれます。
baseurl
では直接サーバーのURLを指定します。
余談ですが、筆者がこのブログ中で使用しているOSはCentOS7なのですが、提供されていたリポジトリが停止されているため、初期設定のままyum install
してもパッケージを取得できません。
以下の記事を参考にbaseurl
の値を変更する必要があるので良かったら参考にしてください。
CentOS 7 の標準リポジトリの停止について
実際にyum install
してみます。
sh-4.2$ sudo yum install postgresql
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* epel: d2lzkl7pfhq30w.cloudfront.net
Resolving Dependencies
--> Running transaction check
---> Package postgresql.x86_64 0:9.2.24-9.el7_9 will be installed
--> Processing Dependency: postgresql-libs(x86-64) = 9.2.24-9.el7_9 for package: postgresql-9.2.24-9.el7_9.x86_64
--> Processing Dependency: libpq.so.5()(64bit) for package: postgresql-9.2.24-9.el7_9.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.2.24-9.el7_9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================================================================================================
Installing:
postgresql x86_64 9.2.24-9.el7_9 updates 3.0 M
Installing for dependencies:
postgresql-libs x86_64 9.2.24-9.el7_9 updates 235 k
Transaction Summary
====================================================================================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 3.3 M
Installed size: 17 M
Is this ok [y/d/N]: yes
Downloading packages:
(1/2): postgresql-libs-9.2.24-9.el7_9.x86_64.rpm | 235 kB 00:00:00
(2/2): postgresql-9.2.24-9.el7_9.x86_64.rpm | 3.0 MB 00:00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 8.4 MB/s | 3.3 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : postgresql-libs-9.2.24-9.el7_9.x86_64 1/2
Installing : postgresql-9.2.24-9.el7_9.x86_64 2/2
Verifying : postgresql-9.2.24-9.el7_9.x86_64 1/2
Verifying : postgresql-libs-9.2.24-9.el7_9.x86_64 2/2
Installed:
postgresql.x86_64 0:9.2.24-9.el7_9
Dependency Installed:
postgresql-libs.x86_64 0:9.2.24-9.el7_9
Complete!
以下の部分ですが、元々指定したパッケージはpostgresql
ですが、yumのおかげで他にも必要なパッケージとして postgresql-libs
もインストールされています。
rpmコマンドでインストールする場合は、こういった依存関係にある、他に必要なパッケージは自分で判断する必要があるので注意が必要です。
====================================================================================================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================================================================================================
Installing:
postgresql x86_64 9.2.24-9.el7_9 updates 3.0 M
Installing for dependencies:
postgresql-libs x86_64 9.2.24-9.el7_9 updates 235 k
Transaction Summary
====================================================================================================================================================================================================================
そしてyumコマンドでインストールしたパッケージは、/var/lib/rpm
配下のrpmDBに保存されます。
最後にyum ijnstall
実行からパッケージがインストールされて保存する流れを追記します。
終わりに
おおよその概要でしたが参考になりますと幸いです。
また誤った部分があればぜひコメントで教えていただけますと幸いです!!