本記事では、Linuxのパッケージ管理でよく聞く
「レポジトリ(リポジトリ)」と言う言葉の概念に焦点を当てて記事を書いていこうと思う。
と言うのも、筆者が初学者の頃、パッケージ管理と聞いてまず出てくる「レポジトリ」と言う言葉の概念がとても理解しがたく、またイメージしづらいものだったために、何度も何度もネット記事をググった経緯があるからだ。
なので、同じような気持ちの初学者の方のためにも、今回は「レポジトリとは?Linuxパッケージ管理の概念を分かりやすく説明する(図解)」と言うことをテーマに記事を書いていこうと思う。
パッケージ管理における、レポジトリとは?
まず初めに結論から言ってしまおう。
パッケージ管理におけるレポジトリとは、「パッケージを置いてある倉庫」だと考えてもらえれば良い。ちなみにパッケージとは、例えばPHP7.3のパッケージ、PHP7.4のパッケージ、、と言う風に、具体的にPCにインストールして動かすシステム群のことだ。

そしてLinuxにおけるレポジトリとは大体の場合、「外部レポジトリ」と呼ばれるものだ。外部レポジトリとは、インターネットなどを通じて、ローカルのPCにインストールされることを前提として外部に公開されているレポジトリのことである。

さらに、ローカルPCにインストールした外部レポジトリ(パッケージの倉庫)の中から、必要なパッケージ(システム)を選択してローカルPCにインストールすると言うことを実行する。
上記のように、レポジトリからパッケージをインストールの場合、①外部からレポジトリをインストールする。②レポジトリからパッケージをインストールすると言う2段階のプロセスがある。
- 外部からレポジトリをインストールする
- レポジトリからパッケージをインストールする
ここまでがLinuxにおけるパッケージ管理のリポジトリの概念図だ。
上記図の「レポジトリ」「パッケージ」の立ち位置をまずはしっかりと理解してほしい。
そもそもなんで「レポジトリ」とか「パッケージ」って存在するの?
Windowsのように、主たる機能のほとんどを同じ組織で設計し、完成させて出荷するOSとは違い、Linuxの場合、パッケージ管理形式に関わらず、「本体」であるカーネルを、各種パッケージと組み合わせ、「使いやすい形にまとめる」と言う形式を前提としている。
それらの理由から、上記で説明した通り、「外部レポジトリ」と言う形で第三者が配布したレポジトリ(倉庫)から、任意で必要なパッケージのみをインストールすると言った、Linuxと言うOSの構想に沿った運用をエンジニアは強いられる訳である。
しかし、どうもこの前提と上記「レポジトリ」「パッケージ」と言う2役の概念が話をややこしくしているようなので、図解にして、それぞれの役割を明確化したと言う訳である。
なので、ざっくりとしたリポジトリの概念が理解できたところで、次では実際に、リポジトリをインストールする過程をコマンドレベルでさらに深く理解を深めていこうと思う。
EPEL、Remiレポジトリからパッケージをインストールする例
レポジトリの種類自体はたくさんあるが、ここでは例として筆者も実際に扱ったことがある、EPELレポジトリと、Remiレポジトリ(PHPパッケージのレポジトリ)をインストールし、そこから必要なパッケージをインストールする例を取り上げて説明をしていく。
①レポジトリのインストール
例えば、EPELレポジトリと、Remiレポジトリ(PHPパッケージのレポジトリ)を自身にインストールするには以下のようにコマンドを実行する。
#epelを追加
$ rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
#remiを追加
$ rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
上記では、httpから始まるURLを指定して、インターネット経由でEPELレポジトリと、Remiレポジトリをインストールしている。
① rpmコマンドは、パッケージ管理用のコマンドだ。
パッケージをインストールしたり削除したりするのに使用する。
また、上記はrpmコマンドでなくとも、同じくパッケージ管理システムであるyumコマンドでも可能だ。
② 上記では、rpmコマンドでレポジトリのダウンロード+インストールを実行しているが、他にも、wgetコマンドなどをでレポジトリのダウンロードだけを先に行なっておき、後からrpmコマンドでインストールのみ行うと言ったことも可能だ。
#ローカルにダウンロード済みのレポジトリからインストール
#epelを追加
$ rpm -ivh epel-release-6-8.noarch.rpm
#remiを追加
$ rpm -ivh remi-release-6.rpm
③リポジトリ追加が完了すると、
/etc/yum.repos.d/以下にremi.repoとeple.repoという設定ファイルが生成される。
#レポジトリ追加後に生成される設定¥ファイル
/etc/yum.repos.d/remi.repo
/etc/yum.repos.d/eple.repo
②パッケージのインストール
レポジトリがインストールできたら、次はレポジトリからパッケージをインストールする。以下ではyumコマンドで必要なphpのパッケージ(php、php-devel〜以降)をまとめてインストールする例。
$ sudo yum -y install --enablerepo=epel,remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
インストール:
php.x86_64 0:7.3.4-1.el7.remi php-devel.x86_64 0:7.3.4-1.el7.remi
php-gd.x86_64 0:7.3.4-1.el7.remi php-mbstring.x86_64 0:7.3.4-1.el7.remi
php-pdo.x86_64 0:7.3.4-1.el7.remi php-pecl-mcrypt.x86_64 0:1.0.2-2.el7.remi.7.3
php-xml.x86_64 0:7.3.4-1.el7.remi
依存性関連をインストールしました:
apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7
autoconf.noarch 0:2.69-11.el7 automake.noarch 0:1.13.4-3.el7
cpp.x86_64 0:4.8.5-36.el7_6.1 dejavu-fonts-common.noarch 0:2.33-6.el7
dejavu-sans-fonts.noarch 0:2.33-6.el7 fontconfig.x86_64 0:2.13.0-4.3.el7
fontpackages-filesystem.noarch 0:1.44-8.el7 gcc.x86_64 0:4.8.5-36.el7_6.1
gcc-c++.x86_64 0:4.8.5-36.el7_6.1 gd-last.x86_64 0:2.2.5-8.el7.remi
glibc-devel.x86_64 0:2.17-260.el7_6.4 glibc-headers.x86_64 0:2.17-260.el7_6.4
httpd.x86_64 0:2.4.6-88.el7.centos httpd-tools.x86_64 0:2.4.6-88.el7.centos
–enablerepoは、
「enabled=0」と設定されているリポジトリを一時的に有効にするオプションだ。
「enabled=0」と設定されているリポジトリは、普段は使用しない設定になっているリポジトリのことで、これらのレポジトリからパッケージをインストールする際は–enablerepo=レポジトリ名と記述して有効化してあげる必要がある。
インストールしたいphpのパッケージ(php、php-devel〜以降)は、半角区切りでまとめて指定することができる。
ちなみにインストール可能なパッケージや、インストール済みパッケージの一覧は以下のコマンドで調べることができる(詳細は長くなるのでまた別に調べてほしい)。
yum list [installed|updates|available|extras]
関連記事
https://wa3.i-3-i.info/word15664.html