Linuxソフトウェア管理の極意 - パッケージマネージャーを完全攻略


# Linuxソフトウェア管理 - ソフトウェアパッケージとパッケージマネージャ

## 1.1 ソフトウェアパッケージの紹介
オープンソースソフトウェアは最初、.tar.gzでパッケージされたソースコードファイルのみを提供していました。ユーザーはGNU/Linux上で実行したいソフトウェアを自分でコンパイルする必要がありました。ユーザーはこれらのソフトウェアをより便利に管理するシステムを強く求めていました。Debianが誕生したとき、このような管理ツールであるdpkgも登場し、deb拡張子の「パッケージ」ファイルを管理するために使用されました。これにより、有名な「パッケージ」という概念がGNU/Linuxシステムに初めて登場しました。その後、Red Hatは独自のrpmパッケージ管理システムを開発しました。

## 1.2 ソフトウェアパッケージ内のファイル分類
- バイナリファイル
- ライブラリファイル
- 設定ファイル
- ヘルプファイル

cpioツールを使用してパッケージファイルリストを表示する
```shell
rpm2cpio パッケージファイル | cpio –itv # パッケージ内ファイルをプレビュー
rpm2cpio パッケージファイル | cpio –id "*.conf" # パッケージ内ファイルを抽出
```

### 使用例
```shell
[root@rocky8 h]# rpm2cpio httpd-devel-2.4.37-47.module+el8.6.0+823+f143cee1.1.x86_64.rpm | cpio -itv
-rwxr-xr-x   1 root     root        23720 Nov 10  2021 ./usr/bin/apxs
drwxr-xr-x   1 root     root            0 Nov 10  2021 ./usr/include/httpd
-rw-r--r--   1 root     root           14 Nov 10  2021 ./usr/include/httpd/.mmn
-rw-r--r--   1 root     root         1075 Nov 10  2021 ./usr/include/httpd/ap_compat.h
```

## 1.3 プログラムパッケージマネージャ
ソフトウェアパッケージマネージャの機能：
コンパイルされたアプリケーションの各構成ファイルを1つまたはいくつかのパッケージファイルにパッケージ化し、パッケージマネージャを使用してパッケージのインストール、アンインストール、クエリ、アップグレード、および検証などの管理操作を迅速かつ簡単に実行できます。

主なパッケージマネージャ：
- Red Hat：rpmファイル、rpmパッケージマネージャ、rpm：Redhat Package Manager、RPM Package Manager
- Debian：debファイル、dpkgパッケージマネージャ

## 1.4 パッケージの命名
### ソースコードパッケージファイルの命名
```
name-VERSION.tar.gz|bz2|xz 
VERSION: major.minor.release
```
例：
```shell
# nginx-1.22.0.tar.gz 
# major    メジャーバージョン番号
# minor    マイナーバージョン番号
# release  リリース番号
```

### rpmパッケージの命名方式
```
name-VERSION-release.arch.rpm 
VERSION: major.minor.release 
release：release.OS
```
例：
```shell
# http-parser-2.8.0-9.el8.x86_64.rpm
# httpd-2.4.37-41.module+el8.5.0+695+1fa8055e.x86_64.rpm
# nginx-1.14.1-9.module+el8.4.0+542+81547229.x86_64.rpm
# major    メジャーバージョン番号
# minor    マイナーバージョン番号
# release  リリース番号
# el8 ELはRed Hat Enterprise Linux（EL）の略。EL8はRed Hat 8.x、CentOS 8.xを指します。el8.4.0+ はRed Hat 8.4.0以上およびCentOS 8.4.0以上のシステムに適合します。
```

### よくあるarch（アーキテクチャ）は次の通りです：
- x86: i386, i486, i586, i686
- x86_64: x64, x86_64, amd64
- powerpc: ppc
- プラットフォームに依存しない：noarch

### 例：rpm
```shell
[root@rocky8 ~]# ls /cdrom/AppStream/Packages/h
haproxy-1.8.27-2.el8.x86_64.rpm
harfbuzz-1.7.5-3.el8.i686.rpm
harfbuzz-1.7.5-3.el8.x86_64.rpm
harfbuzz-devel-1.7.5-3.el8.i686.rpm
harfbuzz-devel-1.7.5-3.el8.x86_64.rpm
harfbuzz-icu-1.7.5-3.el8.i686.rpm
harfbuzz-icu-1.7.5-3.el8.x86_64.rpm
hawtjni-runtime-1.16-1.module+el8.3.0+241+f23502a8.noarch.rpm
hawtjni-runtime-1.16-2.module+el8.3.0+133+b8b54b58.noarch.rpm
HdrHistogram-2.1.11-3.module+el8.4.0+405+66dfe7da.noarch.rpm
```

### 例：debパッケージ
```shell
root@ubuntu20:~# ls /cdrom/pool/main/z/zfs-linux/
libnvpair1linux_0.8.3-1ubuntu12.13_amd64.deb
libuutil1linux_0.8.3-1ubuntu12.13_amd64.deb
libzfs2linux_0.8.3-1ubuntu12.13_amd64.deb
libzpool2linux_0.8.3-1ubuntu12.13_amd64.deb
zfs-initramfs_0.8.3-1ubuntu12.13_amd64.deb
zfsutils-linux_0.8.3-1ubuntu12.13_amd64.deb
zfs-zed_0.8.3-1ubuntu12.13_amd64.deb
```

## 1.5 分類とサブパッケージ
ソフトウェアパッケージは管理と使用の便宜のため、大きなソフトウェアを分類し、異なるサブパッケージに分けます。
### パッケージの分類
- Application-VERSION-ARCH.rpm: 主パッケージ
- Application-devel-VERSION-ARCH.rpm: 開発サブパッケージ
- Application-utils-VERSION-ARCH.rpm: その他のサブパッケージ
- Application-libs-VERSION-ARCH.rpm: その他のサブパッケージ

## 1.6 パッケージの依存関係
ソフトウェアパッケージ間には依存関係が存在する可能性があり、循環依存（例：AパッケージがBパッケージに依存し、BパッケージがCパッケージに依存し、CパッケージがAパッケージに依存する）もあります。ソフトウェアパッケージをインストールする際、依存パッケージが不足しているためにインストールが失敗することがあります。

### 依存関係の管理ツール
- yum：rpmパッケージマネージャのフロントエンドツール
- dnf：Fedora 18+ のrpmパッケージマネージャのフロントエンド管理ツール、CentOS 8ではyumの代わりに使用
- apt：debパッケージマネージャのフロントエンドツール
- zypper：suseのrpmフロントエンド管理ツール

## 1.7 プログラムパッケージマネージャ関連ファイル
### (1) パッケージファイルの構成（各パッケージ固有）
- パッケージ内のファイル
- メタデータ（例：パッケージの名称、バージョン、依存関係、説明など）
- インストールまたはアンインストール時に実行されるスクリプトが含まれることもあります

### (2) データベース（共通）：/var/lib/rpm
- パッケージ名称およびバージョン
- 依存関係
- 機能説明
- パッケージインストール後に生成される各ファイルのパスおよびチェックサム情報

## 1.8 プログラムパッケージの入手方法
ソフトウェアパッケージは、ソースコードをコンパイルしてパッケージ化されたもので、以下の方法で入手できます：

### 1.8.1 システムリリースのCDまたは公式ウェブサイト
#### CentOSイメージ：
- https://www.centos.org/download/
- http://mirrors.aliyun.com
- http://mirrors.sohu.com
- http://mirrors.163.com

#### Ubuntuイメージ：
- http://cdimage.ubuntu.com/releases/
- http://releases.ubuntu.com

### 1.8.2 サードパーティによる提供
#### Fedora-EPEL：Enterprise Linux向けの追加パッケージ
- https://fedoraproject.org/wiki/EPEL
- https://mirrors.aliyun.com/epel/?spm=a2c6h.13651104.0.0.3bc47dfaZpesAr

#### Rpmforge：RHEL推奨、パッケージが充実しているが、間もなく閉鎖予定
- http://repoforge.org/

#### Community Enterprise Linux Repository：最新のカーネルおよびハードウェア関連パッケージをサポート
- http://www.elrepo.org

### 1.8.3 ソフトウェアプロジェクト公式サイト
- http://yum.mariadb.org/10.4/centos8-amd64/rpms/
- http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/

### 1.8.4 検索エンジン
注意：サードパーティのパッケージは、その合法性、出所の信頼性、プログラムパッケージの完全性を確認する必要があります
- http://pkgs.org
- http://rpmfifind.net
- http://rpm.pbone.net
- https://sourceforge.net/

### 1.8.5 自作
ソースコードファイルを利用し、rpmbuildやfpmなどのツールを使用してrpmパッケージファイルを作成することができます。