Linuxのリポジトリとパッケージ管理コマンドについて

RedHat系のLinuxと、Debian系のLinuxのリポジトリ管理について書いてみようと思います。前回の記事の続きです。

まずリポジトリとは、Linuxが必要なアプリケーションを見つけ出せるようにインターネット上のどこのサーバーにアプリケーションが格納されているかを記載したファイルのことです。アプリケーションと言っても通常はパッケージとしてまとめられていて、パッケージをダウンロード、および、インストールする形になります。Linux標準のリポジトリでも不自由ない場合もありますが、最新のものを使いたかったりだとか、何か特別な機能を持つアプリを入れてみたいだとかの場合に、そのアプリが格納されているサーバーの情報をリポジトリに追加する必要があります。Linuxはリポジトリの情報を元にアプリのパッケージをダウンロードしてきます。

RedHat系(Fedora、RHEL、CentOS)ではリポジトリへの追加は「/etc/yum.repos.d」配下に「~.repo」というファイルを作成して配置します。「.repo」ファイルに記載する内容は最低限で以下となります。

[リポジトリID]
name=リポジトリ名
baseurl=パッケージを格納しているサーバーの場所

リポジトリIDはyumコマンドの実行時の「--enablerepo」、「--disablerepo」のオプションで指定します。enablerepoはリポジトリを使用する、disablerepoはリポジトリを使用しない、という意味合いです。

Debian系(Debian、ubuntu等)では「/etc/apt/sources.list」ファイルにサーバーの情報を追記するか「/etc/apt/sources.list.d」配下に「.list」ファイルを新規作成して配置するかになります。記載する内容は以下です。

deb パッケージを格納しているサーバーの場所
deb-src ソースファイルを格納しているサーバーの場所

[2019/12/27 追加・修正]
RedHat系、Debian系とも第三者のパッケージを追加することになるのでGPG公開鍵を登録して置く必要があるとのこと。そうしないとパッケージをダウンロードしたときに警告が出るみたいです。なので、以下のコマンドを先に実行しておく必要があるようです。

まずRedHat系の場合です。

GPG公開鍵を登録するコマンド
# rpm --import /etc/pki/rpm-gpg/GPG公開鍵ファイル名

登録してあるGPG公開鍵を確認するコマンド
# rpm -qai gpg-pubkey*

RedHat系ではこのコマンドを使った記憶がほとんどないのだけど、/etc/pki/rpm-gpg 配下を見てみるとGPG公開鍵ファイルが配置されていて、おそらくyumでリポジトリを追加したときに自動でGPG公開鍵の登録も行われていたのじゃないのかな?と思う。。

次にDebian系の場合です。

GPG公開鍵を登録するコマンド
# wget -q GPG公開鍵が配置されているサーバーの場所
# apt-key add ダウンロードしたGPG公開鍵ファイル名

登録してあるGPG公開鍵を確認するコマンド
# apt-key list

ubuntuにWEBサーバーのnginxをインストールする際は手動でGPG公開鍵の登録が必要みたいです。

最後に、RedHat系とDebian系のパッケージ管理コマンドの対比を載せておきます。

操作 RedHat系 Debian系
インストール yum install 〜 apt install 〜
アンインストール yum remove 〜 apt remove 〜
パッケージリストの更新 apt update
アップデート yum update apt upgrade
パッケージの検索 yum search 〜 apt search 〜
パッケージの情報表示 yum info 〜 apt show 〜
インストール済みパッケージの表示 yum list installed dpkg -l
アップデート可能なパッケージの表示 yum list updates
不要パッケージの削除 apt autoremove
インストーラーパッケージの削除 apt clean

「パッケージリストの更新」だけれど、Debian系ではOSの内部でパッケージに関わる情報のリストを持っていてその更新を行っている模様。なのでDebian系の場合はインストールやアップデートを行う場合は「apt update」を事前に行ったほうが良さそうです。

また「インストール済みパッケージの表示」について、Debian系では「apt list --installed」というのも使えます。ただパイプを使ってgrepと組み合わせると以下のようなワーニングが出るのでご注意を(結果が出力されないわけではない)。「dpkg -l」はパイプを使ってもワーニングは出ません。

$ apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Linuxのディストリビューションとパッケージ管理方法について

Linuxのディストリビューションをざっくりわけると、RedHat系、Debian系、Slackware系にわかれるようです。僕がSlackware系になじみがないので、ここではRedHat系とDebian系について書いてみます。

RedHat系とDebian系の代表的なOSと、パッケージ管理方法をまとめると以下の表のようになります。

系列 OS パッケージ形式 管理コマンド
RedHat系 Fedora
RHEL
CentOS
RPM形式 rpm
yum
dnf
Debian系 Debian
ubuntu
deb形式 dpkg
apt

RedHat系のOSのRHELは「RedHat Enterprise Linux」の略です。FedoraとRHELとCentOSの関係ですが以下のようになっています。

Fedora → RHEL → CentOS

まずFedoraで新機能をいち早く搭載し安定稼働が確認できたらRHELにそれを組み込みます。RHELはRedHat社が有償で商用サポートを行っています。CentOSはRHELのクローンで無償で利用できますがRHELに比べると機能の実装が遅くなります。僕の感覚ですが、企業で利用しているLinuxのOSはRHELかCentOSが多いですね。Fedoraは実験的な取り組みでもあるので個人でLinuxの新機能をいち早く勉強したい方には良いかもしれません。なお、FedoraとCentOSは有志の団体が無償で開発を行っていますがRedHat社とは提携関係にあるようです。

Debian系のOSにはDebianとubuntuがあります。日本ではubuntuのほうが人気があるように思えるのですが、世界的にはDebianのほうがメジャーみたいです(あくまで個人的な感想です)。

ちなみにFreeBSDというOSがあるのですが、こちらはLinuxではないようです。LinuxはそもそもUnixからわかれてきたOSですが、FreeBSDはUnixです。Unixの中でオープンソース化され無償で利用できるOSとしてFreeBSDがあるようです。

[広告]

ここからはパッケージ管理のコマンドについて書いてみます。

RedHat系のパッケージ管理コマンドは以前はrpmが使われていましたが最近はyumが一般的に使われています。yumはrpmより高機能ですが状況によってはyumでは対応できずrpmでしか対応できない場面もあります。Fedoraではdnfというパッケージ管理コマンドを搭載しているようですがまだそんなには使われていない感じはします。
Debian系についても同様に、以前はdpkgを使用していましたが最近はaptのパッケージ管理コマンドが一般的になっています。dpkgはRedHat系のrpmに該当する感じでしょうか。

rpm/dpkg・・・システムコールに近い(低水準)
yum/apt・・・rpmやdpkgをラップした関数みたいなもの(高水準)

次回はyumとaptのリポジトリ管理について書いてみようと思います。