CentOS8設定の基礎 – dnfについて その3 モジュールについて

CentOS7では、パッケージのバージョン管理を行う方法はありませんでした。

このため新しいバージョンのパッケージをインストールするには既存のリポジトリを無効化したり、既存のリポジトリに入っているパッケージとは別の名前のパッケージで登録したりと面倒でした。

しかしCentOS8にはモジュールという機能が追加され、バージョンを選んでインストールをすることが出来ます。

また、CentOS8のリポジトリに存在しないバージョンを別のリポジトリからインストールする場合も、そのリポジトリがモジュール機能に対応していれば同じようにバージョンを選ぶ事が出来ます。

今回はnginxを例にとってモジュールの簡単な使い方を説明したいと思います。

この記事で行うこと

  1. 事前準備
  2. モジュールのコマンド
    1. list
    2. install
    3. remove
    4. reset

1. 事前準備

今回は複数のリポジトリからバージョンを選べることを確認するために、EPELリポジトリを事前にインストールします。

[root@localhost ~]# dnf install epel-release

2. モジュールのコマンド

モジュールに関する操作の際には dnf module コマンドを用います。(dnfコマンド内のmoduleコマンドですね)

2-1. list

存在するモジュールの一覧を表示します。

[root@localhost ~]# dnf module list [モジュール名]

ちなみに、[探したいモジュール名]を空欄にすると、全てのモジュールとバージョンの一覧が表示されます。多分使うことはほぼないです。

nginxのモジュールを対象に実行した結果が以下となります。

[root@localhost ~]# dnf module list nginx
CentOS-8 - AppStream
Name                           Stream                               Profiles                           Summary
nginx                          1.14 [d]                             common [d]                         nginx webserver
nginx                          1.16                                 common [d]                         nginx webserver

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                           Stream                               Profiles                           Summary
nginx                          mainline [e]                         common [i]                         nginx webserver

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Stream 列がバージョンを表しています。

AppStreamリポジトリにバージョン1.14と1.16、EPEL(Extra Packages for Enterprise Linux)リポジトリにmainlineというバージョンが存在することが分かると思います。

また、Profiles 列は開発版などの細かい区分けを表します。nginxにはcommon(通常版)しかないようです。

StreamProfiles の隣にある括弧内のアルファベットは実行結果下部のヒントにあるようにそのバージョンをどのような状態にしているかを表しています。

今回の内容では、EPELリポジトリのmainlineバージョンが有効で、その通常版がインストールされているという事が分かります。

defaultというのは、特に指定せずにインストールしようとするとそのバージョンがインストールされるということです。

nginxを何の指定も無しにインストール使用とするとバージョン1.14の通常版がインストールされます。

2-2. install

モジュールの特定のバージョンをインストールしたい場合は以下のコマンドとなります。

[root@localhost ~]# dnf module install [Name]:[Stream]/[Profile]

[]内のName、Stream、Profileはそれぞれ先程の list コマンドで確認した同名の項目を入れてください。

ちなみに、StreamとProfileは省略すると自動的にdefault指定されている物が選択されます。

ただしdefault指定されている物が無いとエラーとなりますし、誤って望んでいたのとは違う物を入れてしまう可能性があるため、全て指定することをオススメします。

2-3. remove

モジュールをアンインストールしたい場合は以下のコマンドとなります。

[root@localhost ~]# dnf module remove [Name]

同時にインストールできるバージョン・プロファイルは1つだけなので、削除する際にはバージョンやプロファイルを指定する必要はありません。

2-4. reset

モジュールのバージョンを切り替えたい場合は以下のコマンドで一旦バージョン選択をリセットする必要があります。

[root@localhost ~]# dnf module reset [Name]

ちなみに、リセットしてもインストールしたファイルは消されず、再度同じバージョンをインストールしようとすると紐付けることができます。

なので、綺麗に消したい際には先に remove でアンインストールしてからリセットしましょう。

まとめ

今回はモジュールの使い方について説明しました。

モジュールを使えばソフトウェアのバージョン管理が楽になるので、モジュールがあるリポジトリを使う際にはモジュールを優先的に使うのがオススメです。

CentOS8設定の基礎 – dnfについて その2 リポジトリ

前回はdnfを使って簡単にソフトウェアのインストールや更新、アンインストールが出来ることを説明しました。

しかし、このインストールするソフトウェアはどこからダウンロードされた物なのでしょうか。

この答えがリポジトリとなります。

この記事で行うこと

  1. リポジトリ(Repository)とは
  2. リポジトリを確認する
  3. リポジトリを追加する
    1. ダウンロードする
      1. dnfでインストール
      2. 提供元からダウンロード
    2. リポジトリファイルを作成する
  4. 追加したリポジトリからソフトウェアをインストールする

1. リポジトリ(Repository)とは

リポジトリ(Repository)は英語で倉庫という意味です。

今回はリポジトリはソフトウェアを保管しておく倉庫という事ですね。

CentOSの中にはリポジトリファイルという物が保管されていて、このファイルにはそのリポジトリのURLが書かれています。

dnfがソフトウェアをインストールする際にはこのリポジトリファイルに記載されたURLからソフトウェアをダウンロードしてくるわけです。

リポジトリにはCentOSの開発元が提供しているリポジトリ以外にも、それぞれのソフトウェアの開発元が提供しているリポジトリもあります。

こういったリポジトリは動作の保証はないものの、最新バージョンのソフトウェアをダウンロードすることが出来ます。

これらのリポジトリからソフトウェアをダウンロードするためにはそのリポジトリのURLをサーバに教えてあげる必要があります。

一般的にこれを「リポジトリを追加する」と言います。

決して自分が新しいリポジトリを立ち上げるとかそういう意味じゃないので注意してください。

2. リポジトリを確認する

登録されているリポジトリの一覧は /etc/yum.repos.d/ 内にあります。

試しに一つ中身を確認してみましょう。

[root@localhost ~]# vi /etc/yum.repos.d/CentOS-Base.repo

すると、以下のような表示になるかと思います。(上部に表示される#始まりの部分は省略しています)

[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
  • []内はリポジトリの短縮名称です。 dnf info で表示したときの提供元リポジトリに表示されます。ここが重複してはいけません。
  • nameはリポジトリの正式名称です。
  • mirrorlistはミラーリストの場所です。ミラーリストにはこのリポジトリがある場所のうち、物理的に近いURLを返してきます。その中で最も良さそうなところが選ばれてダウンロードしに行くというわけです。
  • baseurlはリポジトリの場所です。リポジトリが一つしか無い場合や、特定の場所にあるリポジトリを使いたい場合はこちらに記載します。しかし、baseurlで指定した場合、そのリポジトリが何らかの理由で使えない場合にインストールや更新が出来なくなってしまいます。
    • mirrorlistとbaseurlはどちらか片方だけを記載し、使わない方は消すかコメントアウトします。
    • mirrorlistとbaseurlにある$から始まる部分は変数で、実行時に別の値に置き換えられます。例えば64bit環境では $basearchx86_64 に変換されます。
  • gpgcheckはソフトウェアが改竄されていないことを確認するかを指定する項目です。1で確認する、0は確認しないです。基本的には確認するようにします。
  • gpgkeyはgpgcheckで改竄を確認する際に使う鍵の場所です。
  • enabledはこのリポジトリが有効かを指定する項目です。有効な場合、dnfを使った時にオプションの指定をしなくても自動的にこのリポジトリが使われます。無効な場合はこのリポジトリからソフトウェアをインストールしたい場合にオプションを使う必要があります。(リポジトリが無効でも更新は問題なく行えます)

3. リポジトリを追加する

リポジトリの追加方法は大きく分けて2つあります。

すなわち、リポジトリファイルをダウンロードしてくるか、自分で作るかです。

基本的に公開元が推奨する通りの方法を取れば良いですが、今回はそれぞれ簡単に解説をします。

3-1. ダウンロードする

リポジトリを提供している公開元の多くはそのリポジトリを利用するためのリポジトリファイルを何かしらの方法で公開しています。

このファイルを /etc/yum.repos.d/ 内にダウンロードしてくる事でそのリポジトリを使えるようになります。

3-1-1. dnfでインストール

リポジトリファイルそのものがRPMパッケージとして提供されている場合は、dnfを使ってリポジトリファイルをインストールできます。

以下はEPELというリポジトリをインストールする例です。

[root@localhost ~]# dnf install epel-release

EPELは利用は自己責任であるもののCentOS8の開発元と関連があるRed Hatが出しているリポジトリです。

このため、初期設定で利用できるリポジトリにEPELリポジトリのパッケージが存在していて、簡単にインストールができます。

これはごく一部のリポジトリだけで、通常はRPMパッケージのURLを指定してインストールすることになります。

以下はRemi’s RPM repositoryという主に最新のPHPを利用するために使われるリポジトリの追加方法です。

[root@localhost ~]# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

RPMパッケージのURLを直接指定しているのが分かると思います。

このURLはリポジトリの公式サイトなどに載っているのでそれを探してください。

なお、dnfでインストールしたRPMパッケージは他のソフトウェア同様に remove でアンインストールするすることが出来ます。

3-1-2. 直接ダウンロード

リポジトリファイルが一つだけといった場合、わざわざRPMパッケージにしないことが多いです。

こういった場合はwgetというファイルをダウンロードするためのコマンドで直接 /etc/yum.repos.d/ 内にダウンロードしてくる事になります。

以下はownCloudというソフトウェアの開発元が提供するリポジトリの追加方法です。

[root@localhost ~]# wget https://download.owncloud.org/download/repositories/production/CentOS_8/ce:stable.repo -P /etc/yum.repos.d/
  • wget : ファイルをダウンロードしてくるコマンドです。
  • https://download…ce:stable.repo : ダウンロードしてくるファイルのURLです。リポジトリファイルのURLはそのリポジトリの公開元の公式ページで確認します。
  • -P /etc/yum.repos.d/ : -Pは保存先を指定するオプションです。リポジトリファイルを格納する /etc/yum.repos.d/ を指定しています。

3-2. リポジトリファイルを作成する

リポジトリファイルが公開されていないリポジトリもあります。

こういったリポジトリでもリポジトリファイルの作成例や、最悪URLとgpgkeyさえ分かれば直接リポジトリファイルを作成することで利用できます。

nginxの公式リポジトリでは、 nginx.repo というファイル名で以下の内容のリポジトリファイルを作るように書かれています。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

なので、この内容をコピペしたファイルを作成することでリポジトリの追加が出来ます。

ちなみに、上記設定内の module_hotfixes というのはRPMのフィルタリングを無効化して全てのパッケージを使えるようにするというものだそうです。

恐らくAppStreamなど優先度の高いリポジトリに同じパッケージ名のパッケージが存在しても表示させるといったものかと思うのですが、まあ公式が付けろって言っているんですし付けておいた方が良いのではないでしょうか。

ちなみに、特定のアプリをインストールするときだけ使いたいという場合は enabled=0 を指定してリポジトリを無効化しておいてください。

4. 追加したリポジトリからソフトウェアをインストールする

リポジトリが有効化されている場合は特別な事をする必要は無くインストールが出来ます。

[root@localhost ~]# dnf install nginx

初めてインストールするリポジトリの場合、gpgcheck用の鍵のインストールで追加の確認がされますが、それだけです。

リポジトリが無効化されている場合は --repo オプションを付けます。

[root@localhost ~]# dnf install nginx --repo nginx-stable

--repo は指定したリポジトリを使用するというオプションになります。リポジトリを指定する際は[]で囲われた短縮名称を使ってください。

まとめ

今回はリポジトリについて説明しました。

超メジャーと言えるほど有名ではないソフトウェアや、最新版のソフトウェアなどをインストールする際には扱う必要が出てきます。

しっかりと意味を分かって使いこなす事で誤って古いアプリをインストールしたり、どこから何をインストールしたのか分からなくなることがないようにしましょう。

CentOS8設定の基礎 – dnfについて その1

Windowsではソフトウェアをインストールする際には、そのソフトウェアの公式サイトに行ってインストールすることが基本だと思います。(最近はWindowsストアというのも出てきたので一概にそうとも言えないですが)

しかし、Linuxではよく使われる大半のソフトウェアはコマンド一つでインストールすることができます。

これがdnfというコマンドになります。

dnfはDandified Yumの略で、直訳すると「おめかししたYum」となります。

実はCentOS7まではdnfではなくyumというコマンドがこの役割を果たしていました。

ちなみにyumはYellowdog Updater Modifiedの略なのですが、まあyum yum(もぐもぐ)の略って事で覚えた方が覚えやすいんじゃないでしょうか。こう、擬人化したLinuxちゃんがソフトウェアをもぐもぐしてる感じで。

なお、この記事で触れるレベルではdnfもyumも使い方は同じなので、CentOS7を使っている方はdnfをyumと置き換えれば問題なく使えます。

この記事で行うこと

  1. dnfとは
  2. 主なコマンド
    1. update
    2. info
    3. install
    4. remove
  3. 自動更新の設定

1. dnfとは

Red Hat系のLinuxでは基本的にソフトウェアをRPMパッケージという単位で管理しています。

Windowsにおいて「プログラムと機能」からアプリケーションをアンインストールするとそのプログラムに関連したファイルが一気に消えるように、LinuxではRPMパッケージを消すとそのプログラムに関連したファイルが一気に消えます。

これを管理するのに使うのがdnfコマンドです。

なおdnfはWindowsの「プログラムと機能」よりも多機能で、アンインストールするだけではなくソフトウェアをダウンロードしてインストールすることもできますし、インストールやアンインストールの際にわざわざ指定しなくても関連するRPMパッケージまで一緒にインストール・アンインストールしてくれます。

2. 主なコマンド

では、早速dnfを使ったコマンドの解説に入ります。

2-1. update

このコマンドはサーバ内のソフトウェアやOSそのものの更新を行うためのコマンドです。

dnfで管理されているソフトウェアはこのコマンドで更新できます。

使い方は以下の通りです。

[root@localhost ~]# yum update [更新したいパッケージの名称]

なお、[更新したいパッケージの名称]の部分を書かないと、更新可能なもの全てが更新されます。

コマンドを実行すると、更新されるものの一覧が表示されて確認されますので、そこでyを入力すると更新が開始されます。

趣味でサーバをやっている場合、最も怖いのはサーバが落ちることよりもサーバに侵入される事です。

更新したときの影響を心配するよりも更新しないことによるリスクを考えてなるべく更新するようにしましょう。(自動更新の設定についても後述します)

よく使われるオプションは以下の通りです。

-y 確認を省略して全てyと入力したことにします。確認が煩わしい時に使います。

2-2. info

インストール可能なパッケージパッケージの情報を確認します。

使い方は以下の通りです。

[root@localhost ~]# dnf info [確認したいパッケージの名称]

[確認したいパッケージの名称]の部分を書かないと書かないとインストール可能な全てのパッケージが表示されます。が、大量に出てくるのであまり意味がありません。

パッケージをインストールしたか忘れたので確認したいとき、バージョンを確認したいときなどに使います。

2-3. install

パッケージをインストールします。

使い方は以下の通りです。

[root@localhost ~]# dnf install [インストールしたいパッケージの名称]

[インストールしたいパッケージの名称]を記載しないとエラーとなります。(インストールできるソフトが全部インストールされたりしたら時間かかるやら容量圧迫するやら設定の穴が量産されるやらで大惨事ですからね)

ちなみに、このコマンドも -y オプションが使えます。

ただ、一つのパッケージをインストールするつもりでも依存関係の問題で複数のパッケージがインストールされたりするので、何がインストールされるか確認をした方が良いと考えます。

基本的にはdnfでインストールできるソフトウェアは全てdnfを使ってインストールすることをオススメします。

稀に「通はソースコードから直接インストールする」とか何とか言ってる所があったりしますが、理由が無ければインストールにも更新にも手間がかかるだけで無意味です。

しっかりと文明の利器を使えるようにしましょう。

2-4. remove

パッケージをアンインストールします。

コマンドの使い方は以下の通りです。

[root@localhost ~]# dnf remove [アンインストールしたいパッケージの名称]

これも[アンインストールしたいパッケージの名称]を空欄にすると削除対象がないと言われ、何も起りません。(流石にシステムそのものをアンインストールとかにはならないです)

このコマンドも -y オプションが使えますが、依存関係で意図しないパッケージが消えたりしないようにちゃんと確認を行うことをおすすめします。

3. 自動更新の設定

「2-1. update」でも触れたように更新を忘れていてセキュリティホールが出来ていたなんていうのはゾッとしない話です。

そうならないようにdnfでは自動更新の設定を行うことが出来ます。

手順は以下の通りです。

まず、自動更新を行うためのパッケージをインストールします。

[root@localhost ~]# dnf install dnf-automatic

次に、自動更新をsystemctlで起動・有効化します。

[root@localhost ~]# systemctl enable --now dnf-automatic-install.timer
Created symlink /etc/systemd/system/multi-user.target.wants/dnf-automatic-install.timer → /usr/lib/systemd/system/dnf-automatic-install.timer.
  • --now : enable コマンドを使うときに設定することで、 start も同時に実行されるというオプションです。

なお、今回は自動で更新のインストールまでするものを起動しました。

起動するものが dnf-automatic-install.timer だと更新の自動インストール、 dnf-automatic-notifyonly.timer だと更新の通知のみ、 dnf-automatic-download.timer だと更新のダウンロードまでを行います。

ただ、システムが落ちて損害を受けるようなサーバでない限りは自動インストールを行うように設定した方が安全です。(というか落ちて困るようなサーバをこんなサイト見ながら運用しようとしないでください)

まとめ

今回はCentOS8のパッケージ管理システムdnfについて説明しました。

dnfはソフトウェアのインストール時に真っ先に上がる選択肢なので、ぜひ覚えておいてください。

dnfでインストールできない、バージョンが古すぎるといった問題が見つかったときに初めて他の選択肢を検討しましょう。

あと、アプリケーションの更新は絶えず行うようにしてくださいね。

次回はリポジトリと設定方法について解説します。