#10 OS が標準で持つ OSS パッケージ管理機能の使い方

  OSS  [公開]
icon 古場 正行 が 2020/05/31 3:01 に投稿 ( icon 古場 正行 が 2020/06/11 5:25 に編集 <更新履歴> )

はじめに

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 は、最新であることよりも安定していることの方が重視される。
CentOSRHEL とほぼ同じ内容を提供しているクローン OS。無償だが、サポートがないので自己責任で利用する必要がある。
FedoraRHEL がサポートする予定の機能を先取りして検証しているという立ち位置の OS。提供している OSS は最新であることが重視される。無償だが、サポートがないので自己責任で利用しなければならない。
Ubuntu開発環境として多くの OSS 開発者達に愛用されている OS。CentOS や Fedora が RHEL 準拠なのと比べると、こちらのシステム構成は Debian GNU/Linux をベースとしており、RHEL とは異なる構成になる。なお、提供している OSS は基本的に最新のものが採用されている。

OSS パッケージ管理機能

  • それぞれの OS の OSS パッケージ管理機能は、以下のものになる。
OSパッケージ管理機能備考
RHEL、CentOSyumRHEL や CentOS のバージョン 7 まで。
RHEL、CentOS、FedoradnfRHEL や CentOS はバージョン 8 以降から。
Ubuntuapt
macOSHomebrew厳密に言うと OS の機能ではないが、もはや macOS のデファクトスタンダードである。
  • 本ナレッジでは、それらの OSS パッケージ管理機能の具体的な使い方を説明する。

OS に取り込める OSS を探す

yumdnfaptHomebrew
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 も合わせて同時にインストールされる。
yumdnfaptHomebrew
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 一覧を表示する

yumdnfaptHomebrew
yum list installeddnf list installedapt list --installedbrew list

リポジトリを更新する

  • この節でいうリポジトリとは「OS が管理している OSS のバージョン情報や依存関係が定義されているメタデータのことである」と定義する。
  • 一部の OS は、OSS の更新を実行する前にリポジトリを更新しなければならない。
  • リポジトリを更新してもインストール済の OSS の方は更新されない。
yumdnfaptHomebrew
apt updatebrew update

更新が可能な OSS を確認する

yumdnfaptHomebrew
yum check-updatednf check-updateapt list --upgradablebrew outdated
  • apt の場合は、後述する apt upgrade の時に更新対象が一覧表示されるので、そこで n を入力すると更新が可能な OSS の確認だけを行うことができる。

OSS を更新する

ケースyumdnfaptHomebrew
OS にインストールした全てのパッケージを最新に更新するyum update もしくは yum upgradednf update もしくは dnf upgradeapt upgradebrew 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 の更新に伴って必要がなくなったパッケージを削除する

yumdnfaptHomebrew
apt autoremovebrew cleanup
  • yum と dnf は、yum upgradednf upgrade を実行すると、パッケージの更新のついでに必要がなくなったパッケージを削除してくれる。

キャッシュを削除する

  • この節でいうキャッシュとは、OSS のインストール時に必要となった関連ファイルのことである。
  • インストールが完了している OSS にそれらのキャッシュは不要なので、ストレージ容量がシビアな環境では以下のコマンドを実行してキャッシュを削除しておくといいかもしれない。
yumdnfaptHomebrew
yum clean alldnf clean allapt cleanbrew cleanup -s

OS にインストールした OSS をアンインストールする

yumdnfaptHomebrew
yum remove パッケージ名dnf remove パッケージ名apt remove パッケージ名brew uninstall パッケージ名
  • 他のパッケージとの依存関係があるパッケージをアンインストールしようとすると警告される。

 添付ファイル     - [0]


 コメント追加