コラム

Linuxのパッケージシステムを知ろう第1回(宮﨑悟氏)

今回から、Linuxのパッケージシステムについて説明します。

Linuxのパッケージシステムとは

いわゆるLinuxのディストリビューションにはいくつか種類があります。Red Hat Enterprise Linux(以下RHEL)とその派生ディストリビューション。Debianとその派生ディストリビューション(Ubuntuが有名)。Alpine Linuxなどです。これらはソフトウェアパッケージを使用して、必要なソフトウェアをインストールします。

RHELにおけるパッケージシステム

まずは、RHELのパッケージシステムを紹介します。ソフトウェアパッケージ自体はRPM(RPM Package Manager)で行われています。しかし、普段使用するのはyum(Yellowdog Updater Modified) です。これらがどのように違うのかを説明します。

RPM

RPMはRed Hat社が開発したパッケージです。サフィクスが.rpmのファイルがRPMファイルと呼ばれるものです。この中に、パッケージに含まれるファイルや情報が含まれています。

インストール済みのRPMファイル情報を見る

RHEL系ディストリビューションの場合、既にRPMで色々なファイルがインストールされています。rpmコマンドを使用して、既にインストールされたRPMファイルの情報を得ることが出来ます。

  • rpm -qa
    インストールされたRPMパッケージのすべてのRPM名が表示されます
$ rpm -qa
filesystem-3.2-25.el7.x86_64
basesystem-10.0-7.el7.noarch
  (以下略)
  • rpm -q RPM名
    指定したRPMのバージョンを表示します
  $ rpm -q rpm
  rpm-4.11.3-35.el7.x86_64
  • rpm -qi RPM名
    指定したRPMの情報を表示します
  $ rpm -qi rpm
  Name        : rpm
  Version     : 4.11.3
  Release     : 35.el7
  Architecture: x86_64
  Install Date: Tue 04 Dec 2018 02:10:38 AM JST
  Group       : System Environment/Base
  Size        : 2622274
  License     : GPLv2+
  Signature   : DSA/SHA1, Tue 06 Nov 2018 01:39:49 AM JST, Key ID b0b4183f192a7d7d
  Source RPM  : rpm-4.11.3-35.el7.src.rpm
  Build Date  : Tue 30 Oct 2018 11:20:09 PM JST
  Build Host  : sl7.fnal.gov
  Relocations : (not relocatable)
  Packager    : Scientific Linux
  Vendor      : Scientific Linux
  URL         : http://www.rpm.org/
  Summary     : The RPM package management system
  Description :
  The RPM Package Manager (RPM) is a powerful command line driven
  package management system capable of installing, uninstalling,
  verifying, querying, and updating software packages. Each software
  package consists of an archive of files along with information about
  the package like its version, a description, etc.
  • rpm -ql RPM名
    指定したRPMに含まれるファイル一覧を表示します
  $ rpm -ql rpm
  /bin/rpm
  /etc/rpm
  /usr/bin/rpm2cpio
  /usr/bin/rpmdb
  /usr/bin/rpmkeys
  /usr/bin/rpmquery
  /usr/bin/rpmverify
  (以下略)
  • rpm -q –changelog RPM名
    指定したRPMのチェンジログを表示します
  $ rpm -q --changelog rpm |head -20
  * Tue Jun 19 2018 Pavlina Moravcova Varekova <pmoravco@redhat.com> - 4.11.3-35
  - Correct "root_dir" output in audit event (#1555326)

  * Fri May 25 2018 Pavlina Moravcova Varekova <pmoravco@redhat.com> - 4.11.3-34
(以下略)
  • rpm -q –provides RPM名
    RPMには、依存関係があります。指定したRPMが提供するソフトウェア・パッケージ等を表示します
  $ rpm -q --provides rpm
  config(rpm) = 4.11.3-35.el7
  rpm = 4.11.3-35.el7
  rpm(x86-64) = 4.11.3-35.el7
  • rpm -q –requires PRM名
    指定したRPMが必要とするソフトウェアパッケージを表示します
  $ rpm -q --requires rpm
  /bin/bash
  /bin/sh
  /bin/sh
  /usr/bin/db_stat
  config(rpm) = 4.11.3-35.el7
  coreutils
  curl
  libacl.so.1()(64bit)
  libaudit.so.1()(64bit)
  (略)
  rpmlib(CompressedFileNames) <= 3.0.4-1
  rpmlib(FileDigests) <= 4.6.0-1
  rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  rtld(GNU_HASH)
  rpmlib(PayloadIsXz) <= 5.2-1
  • rpm -qf ファイル名
    ファイル名が含まれるRPM名を表示する
  $ rpm -qf  /usr/bin/rpm
  rpm-4.11.3-35.el7.x86_64

RPMファイルの情報を見る

ホスト上にRPMファイルが有る場合、その情報を見ることが出来ます。情報を見るためには、以下のように-q--qpにします。-qp以降のオプションは上記と同じです。ただし、-qa/-qf は使用できません

$ rpm -qp RPMファイル名 

RPMの追加・更新・削除

RPMを追加するにはRPMファイルが必要です。

$ rpm -i RPMファイル

RPMを更新するにはRPMファイルが必要です。アップグレードするRPMがインストールさ例ない場合でも、指定したRPMファイルがインストールされます。

$ rpm -U RPMファイル

RPMを削除するには、RPM名を指定します。

$ rpm -e RPM名

ここで注意しなければいけないのは、rpmの追加・削除・更新時には、その依存関係の解決をしないと言うことです。RPMには依存関係がありため、依存するパッケージが追加されていないときはRPMファイルを追加できません。また、依存するパッケージがあるときはRPMを削除できません。

ここで、yumの出番となります。

YUM

yumはRed Hat製ではなく、Yellowdog Linuxというディストリビューションが使用したネットワーク経由でRPMをインストールする仕組みです。後にRHELでも使用されるようになりました。yum を使うことの大きなメリットは、RPMの依存性の問題が解決です。

yumを使うためには、yum リポジトリを設定する必要があります。ディストリビューションをインストールすると、必ずそのディストリビューション用のyum リポジトリが追加されます。また、サードパーティのyum リポジトリも追加できます。yum リポジトリにRPM情報がまとまっているため、yum による依存性の解決や検索が可能になります。

yum コマンドのオプションをかんたんに説明します。

コマンド説明
yum install RPM名指定されたRPMと、それに依存するRPMが追加されます
yum erase RPM名指定されたRPMが削除されます
yum update更新可能なすべてのRPMが更新されます
yum update RPM名指定されたRPMとそれに依存するRPMが更新されます
yum listyum リポジトリ上のRPM一覧を表示する
yum search キーワードキーワードによりyumリポジトリのRPMを検索します

yum コマンドは--enablerepo=リポジトリ名--disablerepo=リポジトリ名を指定することで、対象となるyumリポジトリを変更することが可能です。

yum コマンドは、RPM名の代わりにRPMファイルやネットワーク上のRPMファイル(URLを指定)を直接指定してインストールすることが可能です。このときRPMの依存性を解決し、依存するパッケージを同時にインストールすることが出来ます。

終わりに

今回は、LinuxにおけるソフトウェアパッケージとRHEL系ディストリビューションで使用されるRPM/yumについて説明しました。次回は、Debian/Ubuntuなどで使用されるパッケージについて説明しようと思います。次回をお楽しみに

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。

DHT OSS導入コンサルティングサービス

DHT OSS導入コンサルティングサービス

関連記事一覧