Linuxのパッケージ命名規則とリポジトリの話

## はじめに
* 各ディストリビューションごとのパッケージの命名規則やリポジトリに関連する知識の更新する意味も含めてまとめてみました。
* 間違いはあるかもなので、そのときはお気軽にご指摘ください。

## パッケージ命名の解析

### RHEL系ディストリビューション
#### `httpd-2.4.6-99.el7.x86_64.rpm`
* パッケージの名称：`httpd`
* ソフトウェアバージョン：`2.4.6`
* リリース番号：`99`
* 対象ディストリビューション：`el7`(Enterprise Linux 7)
* アーキテクチャ：`x86_64`（64ビットIntel/AMD）
* ファイル形式：`.rpm`

### Debian系ディストリビューション
#### `apache2_2.4.52-1ubuntu4.7_amd64.deb`
* パッケージの名称：`apache2`
* ソフトウェアバージョン：`2.4.52`
* リビジョン：`1`（Ubuntuのビルド番号）
* リリース名：`1ubuntu4.7`
* アーキテクチャ：`amd64`（64ビットIntel/AMD）
* ファイル形式：`.deb`

## アーキテクチャの種類

### Intel/AMD（x86_64/i386）

* `x86_64`: 64bit アーキテクチャ用
* `i386`: 32bit アーキテクチャ用

### ARM（armhf/aarch64）

* `armhf`: 32bit ARMアーキテクチャ用
* `aarch64`: 64bit ARMアーキテクチャ用

## RHEL系ディストリビューションのリポジトリ

### 基本リポジトリ（`Base`、`optional`、`supplementary`、`extras`）

* RHELおよび派生ディストリビューションの標準リポジトリ。
* 提供されるパッケージの例：
    * `httpd-2.4.6-99.el7.x86_64`
    * `gcc-4.8.5-44.el7.x86_64`
    * `libcurl-7.29.0-59.el7_9.2.x86_64`

### `EPEL` リポジトリ

* Fedoraプロジェクトが管理し、RHELとその派生ディストリビューションに追加パッケージを提供。
* 提供されるパッケージの例：
    * `python3-3.6.8-21.el7_9.x86_64`
    * `vim-enhanced-7.4.629-8.el7_9.x86_64`
    * `docker-1.13.1-209.git7d71120.el7.x86_64`

## Amazon Linuxのリポジトリ

### `core` リポジトリ

* Amazon Linux 2の標準リポジトリで、基本的なシステムツールやライブラリを提供。
* 提供されるパッケージの例：[Amazon Linux Core x86_64](https://amazonlinux.pkgs.org/2/amazonlinux-core-x86_64/)
    * `python3-3.7.10-1.amzn2.0.1.x86_64`
    * `jq-1.5-1.amzn2.0.2.x86_64`
    * `oniguruma-5.9.6-1.amzn2.0.7.x86_64`

### `extra` リポジトリ

* 特定のアプリケーションや実験的なパッケージを提供。
* 提供されるパッケージの例：
    * `redis-6.2.13-1.amzn2.x86_64`
    * `dnsmasq-2.88-1.amzn2.0.2.x86_64`
    * `runc-1.1.7-4.amzn2.x86_64`

## Debian系ディストリビューションのリポジトリ

### 基本リポジトリ

* DebianやUbuntuの標準リポジトリ。安定版、テスト版、アンステーブル版が存在。
* 提供されるパッケージの例：[Ubuntu Main amd64](https://ubuntu.pkgs.org/22.04/ubuntu-main-amd64/)
    * `apache2_2.4.52-1ubuntu4.7_amd64`
    * `gcc_11.2.0-1ubuntu1_amd64`
    * `glibc-doc-reference_2.35-0ubuntu1_all`
### 代表的なリポジトリ

* **Universe** (Ubuntu): コミュニティによって管理される様々なフリーソフトウェアの集まり。
    * 提供されるパッケージの例：[Ubuntu Universe amd64](https://ubuntu.pkgs.org/22.04/ubuntu-universe-amd64/)
        * `7zip_21.07+dfsg-4_amd64`
        * `bashtop_0.9.25-1_all`
        * `golang-github-shopify-sarama-dev_1.22.1-1_all`

* **Multiverse** (Ubuntu): ライセンスに制限のあるソフトウェアを含むリポジトリ。
    * 提供されるパッケージの例：[Ubuntu Multiverse amd64](https://ubuntu.pkgs.org/22.04/ubuntu-multiverse-amd64/)
        * `google-android-build-tools-24-installer_24.0.2+nmu5_amd64.deb`
        * `java-package_0.62_all.deb`
        * `virtualbox-ext-pack_6.1.32-1_all.deb`

## 参考

* [Packages for Linux and Unix](https://pkgs.org/)
* [Naming Guidelines](https://docs.fedoraproject.org/en-US/packaging-guidelines/Naming/)
* [RPMパッケージのネーミング規則](https://docs.oracle.com/cd/E96517_01/ladbi/rpm-packages-naming-convention.html#GUID-04FBD99C-77A8-4E31-9C8D-5B6B2EAE68DB)
* [Debian ポリシーマニュアル Chapter 3 - バイナリパッケージ](https://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ch-binary.html)
* [Red Hat Enterprise Linux における RPM パッケージの命名規則](https://access.redhat.com/ja/solutions/3188752)
* [Amazon Linux Extras](https://aws.amazon.com/jp/amazon-linux-2/faqs/#Amazon_Linux_Extras)

## 感想

* 各パッケージ情報をまとめている `Packages for Linux and Unix`を知ることができてよかった（楽できた笑）です。
* 記事を書くこと自体が久しぶりでしたが、やっぱり楽しめてできたのはよかった。