はじめに
OSS (Open Source Software) に強い OS とは?
- OSS のパッケージ管理機能を標準では持っていない Windows を自システムの OS に採用してしまうと、導入した OSS の更新作業が大変なことになる。
- 例えば、Windows 環境に手作業でインストールした OSS の更新を実行しようとしたら、更新した OSS が依存しているライブラリに要求されるバージョンのズレが発生したり、依存関係が変わってしまったことによる依存ライブラリ不足などといったことに起因する整合性回りのエラーが発生して頭を抱えることになってしまった、という話をよく聞く。
 
 - OSS の更新作業が大変だとついつい更新をサボってしまいがちになり、その結果、そのシステムは重大なセキュリティインシデントを引き起こす可能性が高くなってしまう。多数の OSS を活用するのであれば、Windows よりも Linux ディストリビューションを OS として採用する方が無難だろう。
 - OSS の更新に強い OS の候補としては、Red Hat Enterprise Linux (RHEL)、CentOS、Ubuntu (Ubuntu Server) あたりが代表的なものになる。
 
| ディストリビューション名 | 特徴 | 
|---|---|
| RHEL | 有償サポートの OS。提供する OSS は、最新であることよりも安定していることの方が重視される。 | 
| CentOS | RHEL とほぼ同じ内容を提供しているクローン OS。無償だが、サポートがないので自己責任で利用する必要がある。 | 
| Fedora | RHEL がサポートする予定の機能を先取りして検証しているという立ち位置の OS。提供している OSS は最新であることが重視される。無償だが、サポートがないので自己責任で利用しなければならない。 | 
| Ubuntu | 開発環境として多くの OSS 開発者達に愛用されている OS。CentOS や Fedora が RHEL 準拠なのと比べると、こちらのシステム構成は Debian GNU/Linux をベースとしており、RHEL とは異なる構成になる。なお、提供している OSS は基本的に最新のものが採用されている。 | 
OSS パッケージ管理機能
- それぞれの OS の OSS パッケージ管理機能は、以下のものになる。
 
| OS | パッケージ管理機能 | 備考 | 
|---|---|---|
| RHEL、CentOS | yum | RHEL や CentOS のバージョン 7 まで。 | 
| RHEL、CentOS、Fedora | dnf | RHEL や CentOS はバージョン 8 以降から。 | 
| Ubuntu | apt | |
| macOS | Homebrew | 厳密に言うと OS の機能ではないが、もはや macOS のデファクトスタンダードである。 | 
- 本ナレッジでは、それらの OSS パッケージ管理機能の具体的な使い方を説明する。
 
OS に取り込める OSS を探す
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum search キーワード | dnf search キーワード | apt search キーワード | brew search キーワード | 
- 以下に、CentOS 7 における OSS の探し方の具体例を紹介する。
$ yum search apache : httpd.x86_64 : Apache HTTP Server : 
OSS を OS にインストールする
- OSS パッケージ管理機能を利用して OSS をインストールすると、依存関係で必要になる OSS も合わせて同時にインストールされる。
 
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum install パッケージ名 | dnf install パッケージ名 | apt install パッケージ名 | brew install パッケージ名 | 
- OS のパッケージ構成を変更する作業には基本的に root 権限を要求される。
- Homebrew だけはパッケージ構成の基本がユーザの実行環境になっており root 権限が必要になった時にのみ権限昇格を要求されるので、最初から最後まで root 権限なしで作業 (コマンド入力) する。
 
 - yum は過去の慣例もあって su で root になってから作業することが多いのだが、dnf や apt は 
sudo apt install パッケージ名などと入力する sudo 環境での作業が推奨されている。 - 以下に、CentOS 7 における OSS の追加手順の具体例を紹介する。
# yum install httpd 
OS にインストール済の OSS 一覧を表示する
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum list installed | dnf list installed | apt list --installed | brew list | 
リポジトリを更新する
- この節でいうリポジトリとは「OS が管理している OSS のバージョン情報や依存関係が定義されているメタデータのことである」と定義する。
 - 一部の OS は、OSS の更新を実行する前にリポジトリを更新しなければならない。
 - リポジトリを更新してもインストール済の OSS の方は更新されない。
 
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| apt update | brew update | 
更新が可能な OSS を確認する
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum check-update | dnf check-update | apt list --upgradable | brew outdated | 
- apt の場合は、後述する 
apt upgradeの時に更新対象が一覧表示されるので、そこで n を入力すると更新が可能な OSS の確認だけを行うことができる。 
OSS を更新する
| ケース | yum | dnf | apt | Homebrew | 
|---|---|---|---|---|
| OS にインストールした全てのパッケージを最新に更新する | yum update もしくは yum upgrade | dnf update もしくは dnf upgrade | apt upgrade | brew upgrade | 
| 脆弱性が修正されたパッケージだけを更新する | dnf upgrade --security | |||
| 特定のパッケージを更新する | yum upgrade パッケージ名 | dnf upgrade パッケージ名 | apt upgrade パッケージ名 | brew upgrade パッケージ名 | 
yum upgradeの動作はyum update --obsoletesと同じであり、OSS の更新に伴って必要がなくなったパッケージを自動的に削除するという処理が追加される。- yum と dnf と apt は更新の実行の有無を確認してくるが、-y オプションを追加しておくと自動的に y を答えたことになる。
 - Homebrew は、
brew upgradeを実行すると、リポジトリの更新とインストールしたパッケージの更新の両方を行う。 - 特定のパッケージを更新すると、そのパッケージが依存しているパッケージも自動的に更新される。
 
OSS の更新の実行例
- Homebrew
$ brew upgrade ==> Upgrading 11 outdated packages: glib-networking 2.64.2_1 -> 2.64.3 postgresql 12.3_3 -> 12.3_4 cmake 3.17.2 -> 3.17.3 boost 1.72.0_2 -> 1.72.0_3 dart-lang/dart/dart 2.8.2 -> 2.8.3 icu4c 66.1 -> 67.1 harfbuzz 2.6.6 -> 2.6.6_1 php 7.4.6 -> 7.4.6_1 libwebsockets 4.0.10 -> 4.0.13 node 14.3.0 -> 14.3.0_1 python@3.8 3.8.2 -> 3.8.3 ==> Upgrading icu4c 66.1 -> 67.1 : 
OSS の更新に伴って必要がなくなったパッケージを削除する
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| apt autoremove | brew cleanup | 
- yum と dnf は、
yum upgradeやdnf upgradeを実行すると、パッケージの更新のついでに必要がなくなったパッケージを削除してくれる。 
キャッシュを削除する
- この節でいうキャッシュとは、OSS のインストール時に必要となった関連ファイルのことである。
 - インストールが完了している OSS にそれらのキャッシュは不要なので、ストレージ容量がシビアな環境では以下のコマンドを実行してキャッシュを削除しておくといいかもしれない。
 
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum clean all | dnf clean all | apt clean | brew cleanup -s | 
OS にインストールした OSS をアンインストールする
| yum | dnf | apt | Homebrew | 
|---|---|---|---|
| yum remove パッケージ名 | dnf remove パッケージ名 | apt remove パッケージ名 | brew uninstall パッケージ名 | 
- 他のパッケージとの依存関係があるパッケージをアンインストールしようとすると警告される。