Linuxで使われる色々なパッケージの概説

最近会社で聞かれて答えようと思ったことをまとめてみました。

前任者(?)の作った手順書やDockerfileなどで、いらなそうなパッケージだけどLinuxに詳しくないし調べて説明見てもどんなパッケージなのかよく分からない、と聞かれました。パッケージがいっぱいあって、一つ一つ答えていくのも面倒なのでまとめました。

Linuxに詳しくない人が見る前提なので、機能別ではなくアルファベット順で書いています。また、聞かれたら追加していくつもりです。

# 共通事項
不要と書いてあっても、他の必要なパッケージに依存している場合は必要です。また、最初から入っているものをそのままのバージョンで使用できない、新しくしないとダメなケースもあります。ライブラリパッケージをセキュリティアップデートしている場合などです。

#B

## binutils
アセンブラ、リンカー、オブジェクトファイルを扱うツールです。ソースビルドする場合に必要です。

# C

## -client
サーバーとクライアントが別パッケージになっている場合、xxx-server/xxx-clientといったパッケージ名になっていることがあります。

## compat-
互換性(コンパティビリティ)の略です。

ビルド済みのAを動かそうとします。Aは環境Xで動かす前提でビルドされているとします。しかし今動かそうとしている環境はYとします。その場合、そのままではAを動かすことはできません。Aをビルドしなおせばよいのですが、Aのソースがありません。このとき、AとYの懸け橋となるライブラリLを入れることでY上で動かそう、というためのライブラリのことを、互換ライブラリと呼びます。

# D

## -devel
開発に必要なパッケージ群です。ソースビルドする場合に必要です。

開発版のような誤解をしがちです。しかしそうではありません。例えば[openssl](https://rpmfind.net/linux/RPM/centos/updates/7.6.1810/x86_64/Packages/openssl-1.0.2k-16.el7_6.1.x86_64.html)と[openssl-devel](https://rpmfind.net/linux/RPM/centos/updates/7.6.1810/x86_64/Packages/openssl-devel-1.0.2k-16.el7_6.1.i686.html)の説明を見比べてみます。

opensslは"OpenSSL includes a certificate management tool and shared libraries..."となっています。ツールと共有ライブラリです。

openssl-develは"The openssl-devel package contains include files needed to develop applications..."となっています。インクルードファイル(Cのヘッダファイルなど)です。

# E

## elfutils-libelf
ELFバイナリを扱うツール群です。Oracle11gの前提条件の一つです。

# G

## gcc
GNU Cコンパイラです。C言語で開発されたものをソースビルドする場合に必要です。RPMインストールやyumインストールするだけなら不要です。

### gcc-c++
C++言語で開発されたものをソースビルドする場合に必要です。

## glibc
GNU C標準ライブラリ。ソースビルドする場合には、セキュリティ的理由で更新するケースは多々あると思います。

## gnome-system-monitor
GNOMEシステムモニターです。Windowsでいうところのタスクマネージャーのパフォーマンスタブのようなものです。デスクトップ利用でなければ不要です。

## groupinstall
yumのオプション指定です。パッケージではありません。しかし、似たような場面で出てくるので説明しておきます。

特定の目的を満たすために必要なパッケージが大量にある場合に、それらのパッケージをまとめてインストールするためにグルーピングしてあります。

実際に何がインストールされたかを確認するには"yum groupinfo"を使用します。

### groupinstall "Desktop"
デスクトップのパッケージグループです。

### groupinstall "Fonts"
フォントのパッケージグループです。サーバー用途で使う分には不要なケースがほとんどだと思います。

### General Purpose Desktop
汎用デスクトップ


### groupinstall "Japanese Support"
日本語サポート用のパッケージグループです。[日本語フォント、日本語man、日本語入力(ibus-anthy)が入るくらい](http://d.hatena.ne.jp/toshi_hirasawa/20130101/1357013723)なので、サーバー用途で使う分には不要なケースがほとんどだと思います。これが入っていなくてもTomcatなどから日本語のログを出すことはできます。

# I

## iproute
ipコマンドなどのツールです。サーバー用途のDockerコンテナにはまずいらないと思います。実サーバーには調査ツール目的で入っていてほしいです。ちなみに過去に使われていた同種のツールは、net-toolsパッケージです。

# J

## jre
Javaのランタイムです。

# K

## ksh
Korn Shell(コーンシェル)です。Bourneシェル系列の一派です。詳しくは[Linuxにおけるシェルの進化](https://www.ibm.com/developerworks/jp/linux/library/l-linux-shells/index.html)に書かれています。

Oracle11gの前提条件の一つ"pdksh"として使用できます。[そもそも"pdksh"は"Public Domain版のksh"のようです](https://qiita.com/Tamawifi/items/78ac534aeb9248c60e86)(2020/12/03追加)。

これ以外の理由では、kshラブの人を除き、デフォルトインストールされているシェル(bashなど)を差し置いて入れる理由はあまりありません。

# L

## lib～
ライブラリを表す接頭辞です。他パッケージの依存でないなら、必要なのはソースビルドのときくらいだと思います。

### libaio
非同期I/O(AIO)ライブラリです。Oracle11gの前提条件の一つです。

### libstdc++
C++の追加ランタイムライブラリです。C++のコンパイルを行う場合に必要な場合があります。Oracle11gの前提条件の一つです。

## libtool
ライブラリを扱うツールです。ライブラリそのものではないので上記のライブラリパッケージ群とは仲間外れです。異なるプラットフォーム間でのライブラリの扱いを吸収するための使います。要不要という観点では、RPMインストールするだけならまずいらないと思います。自前ビルドするときに必要かどうかは、configureなどにLIBTOOLが含まれているかによって判断することになります。

# N

## noarch
アーキテクチャ非依存を意味します。

# M

## make
コンパイルやビルドを行う際の手続きを記載することで、再コンパイルが必要な部分を効率的に検出し、……(以下略)。聞いてきた当人にとってはAntのような役割のものという説明のほうが分かりやすいと思います。ソースビルドする場合に必要です。

# O

## openssh
SSHサーバー/クライアントです。

### openssh-server
SSHサーバーです。サーバー用途のDockerコンテナに含まれているケースでは、大抵不要化できます。データやログを永続化できていれば、Dockerコンテナに入る必要はほとんどないためです。そうでなくても"docker exec"で事足りると考えることもできます。

# P

## passwd
パスワード関連ツールです。passwdコマンドだけでなくchshなども含まれています。Dockerコンテナに含まれているケースでは大抵不要だと思います。

## perl
perl言語。Webアプリサーバーやそのサーバー用途のDockerコンテナなら、CGI目的で使っているかもしれないです。

## pgdg
Postgresの公式RPMパッケージです。

## postgresql
いわずと知れたデータベースです。上に書いたように公式RPMはpgdgです。各ディストリビューションのパッケージはpostgresqlの様子です。

# R

## readline
行入力支援ライブラリです。

例えば、OracleのSqlPlusのようなコンソールプログラムを作るとします。そのプログラムの入力機能部分にヒストリ機能などを設けたい場合に使用します。ソースビルドでない場合には多分不要です。また、コンソールアプリをビルドする場合でないなら多分不要です。

# S

## -server
サーバーとクライアントが別パッケージになっている場合、xxx-server/xxx-clientといったパッケージ名になっていることがあります。

## sysstat
システム状態を表示するツール群です。サーバー用途のDockerコンテナには不要な場合が多いと思います。実サーバーには調査ツール目的で入っていてほしいです。

# T

## tigervnc
VNCの実装の一種です。VNCサーバー/クライアントが必要なら必要、そうでないなら不要です。なお、groupinstallの"Desktop"には含まれていません。

Oracleインストールのようにインストール時のみVNCサーバーが必要で、インストール後はサーバー用途で使うだけなら、インストールが終わってから"Desktop"もろとも消すのがよいと思います。

# U

## unzip
ZIP圧縮の伸張を行うためのツールです。そのままです。ZIP圧縮の伸張を行うコンソールプログラムが必要なら必要、不要なら不要です。

# Z

## zlib
圧縮伸張(解凍)を行うための関数群のライブラリです。圧縮伸張処理を組み込んでいるプログラムのソースビルドをする場合に必要です。