Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxのパッケージ管理とアップデート基礎知識

 Linuxのパッケージ管理とアップデート基礎知識

Linuxのパッケージ管理に関連する用語や仕組みを整理しました。
主にRedHat系(Red Hat Enterprise Linux)についてまとめています。

Go Nishimoto

April 22, 2025
Tweet

Other Decks in Technology

Transcript

  1. 主なディストリビューションのパッケージ管理 ディストリビューション 分類(拡張子) 管理コマンド RedHat,CentOS,AlmaLinux RPM(.rpm) rpm yum dnf Debian,Ubuntu

    DEB(.deb) dpkg apt FreeBSD Ports Collection Binary Packages(.txz,.tbz) Pkg Portsnap portmaster portupgrade Solaris SVR4 IPS(.pkg,.p5p) pkgadd pkgrm pkginfo pkg
  2. Linuxで利用される主なパッケージ Webサーバ nginx、Apache HTTP Serverなど、Webサイトを提供す るためのサーバソフトウェア データベース MariaDB、MySQL、PostgreSQLなど、データを効率的に 保存・検索するためのシステム 開発ツール

    gcc、git、pythonなど、ソフトウェア開発に必要なコンパ イラやバージョン管理ツール セキュリティツール firewalld、SELinux、OpenSSLなど、システムを保護する ためのセキュリティ関連ツール
  3. 主要なライブラリの例 glibc (GNU C Library) C言語の標準ライブラリで、メモリ 管理、入出力操作、文字列処理など 基本的な機能を提供します。ほぼす べてのLinuxプログラムがこのライ ブラリに依存しています。

    libcurl URL転送ライブラリで、HTTP、 FTP、SMTPなど様々なプロトコル でのデータ転送機能を提供します。 多くのネットワークアプリケーショ ンで使用されています。 zlib データ圧縮用のライブラリで、効率 的なデータ圧縮・展開機能を提供し ます。ファイル圧縮やネットワーク 通信の効率化に広く利用されていま す。
  4. RedHat系パッケージの操作方法 rpmコマンド パッケージを個別に操作する基本コマン ドです。依存関係や競合関係の解決は手 動で行う必要があります。直接ファイル を指定してインストールする場合に使用 します。 例: rpm -ivh

    package.rpm yumコマンド リポジトリからパッケージを取得し、依 存関係や競合関係を自動で解決します。 バックグラウンドでrpmコマンドを使用 しています。既に開発が終了しており、 現在はdnfに置き換えられています。 例: yum install package dnfコマンド yumの後継で、パフォーマンス向上やメ モリ使用量の削減など改善が加えられて います。依存関係や競合関係の管理やト ランザクション処理がより効率的になっ ています。 例: dnf install package
  5. 主要なdnfコマンドとオプション(1) dnf install パッケージをインストールします。依存関係も自動的に解 決されます。 dnf update インストール済みパッケージをアップデートします。 dnf upgrade

    インストール済みパッケージをアップデートし、旧パッケ ージを自動削除します。 dnf remove インストール済みパッケージを削除します。 dnf reinstall インストール済みパッケージを再インストールします。 dnf downgrade パッケージをダウングレードします。 dnf distro-sync システムを最新バージョンに同期します。 dnf install ./package.rpm ローカルのRPMファイルを指定してインストールします。
  6. dnf info パッケージの詳細情報を表示します。 dnf list installed インストール済みパッケージを表示します。 dnf check-update アップデート可能なパッケージ一覧を表示します。

    dnf repoquery --requires パッケージの依存関係を表示します。 dnf search パッケージを検索します。 dnf repolist リポジトリ一覧を表示します。 dnf repolist enabled 有効になっているリポジトリ一覧を表示します。 dnf config-manager --set-enabled 指定したリポジトリを恒久的に有効化します。 主要なdnfコマンドとオプション(2)
  7. dnf config-manager --set-disabled 指定したリポジトリを恒久的に無効化します。 dnf config-manager --add-repo リポジトリURLを追加します。 dnf --enablerepo

    特定のリポジトリを一時的に有効化します。 dnf --disablerepo 特定のリポジトリを一時的に無効化します。 主要なdnfコマンドとオプション(3) dnf clean all キャッシュやダウンロード済みパッケージを削除します。 dnf update --skip-broken 依存関係エラーをスキップしてアップデートします。 dnf update --exclude 指定したパッケージをアップデート対象から除外します。 dnf update --disableexcludes 除外設定を無効化してアップデートします。
  8. dnfに関する設定ファイル yumのファイル名 dnfのファイル名 説明 /etc/yum.conf /etc/dnf/dnf.conf メインの設定ファイル、リポジトリやキャッシュ、 GPGチェックの設定など基本的な設定 /etc/yum.repos.d/*.repo /etc/yum.repos.d/*.repo

    リポジトリ情報が記載されているファイル群、 リポジトリごとに個別の.repoファイルがある /etc/yum/vars/* /etc/dnf/vars/* 変数の定義ディレクトリ、releaseverやbasearchなどの変数が定義 /var/log/yum.log /var/log/dnf.log パッケージインストールやアップデートのログが保存されるファイル /var/cache/yum/* /var/cache/dnf/* パッケージのキャッシュやメタデータが保存されるディレクトリ N/A /etc/dnf/modules.d/*.module dnfでモジュールストリームを管理するためのファイル、 特定のバージョンや機能セットを選択してインストールする際に使用 N/A /etc/dnf/plugins/ dnfプラグインの設定ディレクトリ、プラグインの動作を設定
  9. dnf.confの主な設定項目(デフォルト定義) オプション 設定内容 cachedir パッケージのキャッシュを保存するディレクトリ keepcache ダウンロード後のキャッシュ保持の有無 debuglevel デバッグメッセージの出力レベル logfile

    ログの出力先 gpgcheck インストール時のGPGキーのチェック有無 plugins プラグインの使用許可の有無 fastestmirror 使用可能なミラーの中で最も速いものを選択するか exclude 更新やインストールから除外するパッケージのパターンを指定 includepkgs インストールまたは更新するパッケージを限定するためのリスト timeout リポジトリ接続のタイムアウト時間 proxy プロキシサーバーのアドレス proxy_username プロキシサーバーの認証情報(ユーザ名) proxy_password プロキシサーバーの認証情報(パスワード) sslverify SSL証明書の検証を行うか metadata_expire リポジトリのメタデータのキャッシュ有効期間
  10. dnfとリポジトリの関係性 リポジトリとは各種パッケージを保存しておくためのサーバ(保存庫)です。インターネット上のリポジトリを外部リポジトリ、社内 ネットワーク上のリポジトリを内部リポジトリと呼びます。 リポジトリの役割 パッケージの保存と配布を行い、システム管理者がソフトウェ アを効率的に管理できるようにします。 外部リポジトリ インターネット上に公開されているリポジトリで、公式リポジ トリとサードパーティリポジトリがあります。 内部リポジトリ

    オプション 設定内容 name リポジトリ名(必須) baseurl リポジトリの保存先URL(必須) enablerepo リポジトリの有効化or無効化の設定 gpgcheck GPGのチェックを有効化or無効化の設定。 gpgkey 使用する公開鍵のURL(またはファイル名) 組織内のネットワークに設置されたリポジトリで、セキュリ ティやネットワーク帯域の効率化のために利用されます。 [main]セクションの他に[repository]セクションを作成し、リポジトリ関連の情報を定義することも可能でが、リポジトリごとの設定は /etc/dnf.confに直接記載せずに、/etc/dnf.repos.d/*.repoに定義することが推奨されます。 リポジトリ設定の主なオプション
  11. 主な外部リポジトリ(公式、サードパーティ、特化型) BaseOS Red Hat Enterprise Linuxの基本的なOS機能を提供する公式リ ポジトリです。カーネルやシステムライブラリなどのコアパッ ケージが含まれています。 AppStream モジュール化されたアプリケーションや開発ツールを提供する

    公式リポジトリです。異なるバージョンやエディションの選択 が可能で、柔軟な環境構築ができます。 EPEL (Extra Packages for Enterprise Linux) Fedoraプロジェクトの有志によるRedHat系ディストリビューシ ョン向けのサードパーティリポジトリです。公式リポジトリにな い多数の追加パッケージを提供しています。 Zabbix Zabbix監視ソフトウェアの公式サードパーティリポジトリです 。監視ツールの最新バージョンや関連パッケージを提供してい ます。 Docker Dockerの公式サードパーティリポジトリです。Dockerエンジ ンやコンテナ関連のツールを提供しています。 基本的なパッケージはRHELの公式リポジトリから取得可能ですが、ZabbixやDockerのようにサービスごとの公式リポジトリ(サードパーティ リポジトリ)から取得しなければならないパッケージも存在します。これらのリポジトリは、特定のアプリケーションに特化した最新のパッケ ージを提供しています。 Remi Repository PHPやその他の開発ツールの最新バージョンを提供するサード パーティリポジトリです。PHP関連のパッケージが豊富に揃っ ています。
  12. パッケージ取得元の優先順位 ①キャッシュの利用 既にキャッシュされたパッケージがあれば、ネットワーク越しのリ ポジトリから再ダウンロードせずにキャッシュを利用します。キャ ッシュがない場合、リポジトリからパッケージがダウンロードされ ます。 ②リポジトリの有効性 リポジトリが有効でなければ使用されません。無効なリポジトリは パッケージ選択に影響しません。dnfコマンドで有効・無効を切り 替えることができます。

    ③リポジトリの優先度 yumの場合、/etc/dnf.repos.d/*.repoの「priority」オプションが設 定されている場合、優先度が小さいリポジトリが選択されます。 dnfでは「dnf-plugin-priorities」パッケージをインストールするこ とで使用可能になります。 ④パッケージのバージョン 同一パッケージの複数バージョンが存在する場合、最新バージョン のパッケージが優先されます。特定のバージョンを指定しない限り 、常に最新のものが選択されます。 ⑤コストオプション costオプションが設定されている場合、低コストのリポジトリが優 先されます。dnfではcostオプションを使ってリポジトリ選択に影 響を与えることができます。 ⑥リポジトリファイルの読み込み順 リポジトリファイルの読み込み順序やincludeされた順番も影響し ますが、通常はリポジトリの優先度やその他の設定がより重要です 。
  13. リポジトリ管理コマンド RHEL7以前 yum-config-managerコマンドを使用します。このコマンドを利用す るには、yum-utilsパッケージの追加インストールが必要です。 インストール方法: sudo dnf install yum-utils RHEL8以降

    dnf config-managerコマンドを使用します。dnfの一部として提供さ れるためパッケージの追加インストールは不要です。 リポジトリの有効化: sudo dnf config-manager --set-enabled <repository-name> リポジトリの無効化: sudo dnf config-manager --set-disabled <repository-name> リポジトリの追加 メタデータの更新 sudo dnf makecache パッケージのインストール sudo dnf install docker-ce docker-ce-cli containerd.io 通常、パッケージ管理はdnfコマンドにオプションを加えて実行するシンプルなものですが、サードパーティリポジトリからパッケージを取得す る場合は、まずリポジトリを追加し、メタデータを更新してからパッケージをインストールする必要があります。取得元のリポジトリによりイ ンストール方法が異なることがあります。
  14. 関連用語のまとめ 用語 意味 ディストリビューション OSの配布版で、基本的なOSとその関連ソフトウェアを含む一式 リリースバージョン ディストリビューションの特定のバージョン、新機能や改善点を含むリリースのバージョン番号 カーネル OSの中核部分で、ハードウェアとソフトウェアのリソースを管理する基本的な部分 モジュール

    カーネルやOSの機能を拡張するための部品(例:ハードウェアのドライバや追加機能など) ライブラリ 各種プログラムが共通して利用するための機能やコードの集まり パッケージ インストール可能なソフトウェアの単位でプログラムやその依存関係を含む リポジトリ パッケージを保存し配布するための場所、リポジトリからソフトウェアをダウンロードする レポジトリファイル リポジトリの設定情報を含むファイル、どのリポジトリを使用するかを定義する メタデータ リポジトリ内のパッケージの情報や依存関係などを含むデータ、パッケージの検索や管理に使用される GPGキー ソフトウェアのパッケージに対してデジタル署名を行うための公開鍵、パッケージの信頼性と整合性を 確認する サードパーティリポジトリ 公式リポジトリ以外の、外部の開発者や団体が提供するリポジトリ、公式のサポートがないことが多い リポジトリURL リポジトリへのアクセス先のURL、リポジトリの場所を指定する パッケージマネージャ ソフトウェアのインストール、更新、削除を管理するツール(例:yum、dnf) AppStream RHEL 8以降で導入されたソフトウェア配布の仕組み、複数のバージョンを提供し、アプリケーションの 選択と管理を容易にする RHSCL Red Hat Software Collectionsの略、RHEL向けの追加ソフトウェアパッケージ群で、より新しいバー ジョンのアプリケーションを提供
  15. 主要なディストリビューション RHEL (Red Hat Enterprise Linux) 商用サーバー向けの企業向けディストリビュ ーションです。安定性とセキュリティに重点 を置き、長期サポートを提供しています。有 償のサブスクリプションモデルで提供されて

    います。 CentOS RHELの無償クローンで、商用サポートがなく 、コミュニティ主導のディストリビューショ ンです。以前は広く使われていましたが、現 在は開発方針が変更されています。 AlmaLinux CentOSの後継として位置づけられるRHELク ローンです。商用サポートがなく、コミュニ ティ主導で開発されています。企業での採用 が増えています。 Rocky Linux CentOSの後継として設立された、RHELクロ ーンです。商用サポートなし、コミュニティ 主導で開発されています。AlmaLinuxと同様 に企業環境での採用が増えています。 Amazon Linux AWS (Amazon Web Services) に最適化され たAmazon提供のディストリビューションで す。クラウド環境向けに最適化されており、 AWSサービスとの統合が強化されています。 Ubuntu Debianを基にしたユーザーフレンドリーなデ ィストリビューションです。デスクトップか らサーバーまで広く利用されており、初心者 にも使いやすい設計になっています。 以前はCentOSが採用されていることも多かったですが、最近はサポート期間などの都合上、AlmaLinuxやRocky Linuxが後継として採用されることが増えてきました 。ディストリビューションの選択は、サポート期間、安定性、必要なパッケージの対応状況などを考慮して行われます。
  16. ディストリビューションとカーネルバージョン リリースバージョン 初期カーネルバージョン アップデート後 カーネルバージョン RHEL 7.x 3.10系 3.10 系

    RHEL 8.x 4.18系 5.4~5.14系 RHEL 9.x 5.14系 5.14 系 パッケージ名 「カーネル」パッケージであることを示す バージョン番号 カーネルのメジャー、マイナー、パッチレベルを示す リリース番号 ビルド番号やリビジョンを含むもの アーキテクチャ 「64ビットのCPU」を指す OSの中核を成すソフトウェアが「カーネル」です。ディストリビューションは、カーネルを含むOS全体のパッケージであり、通常、特定のリ リースバージョンごとに指定されたカーネルバージョンが含まれています。一つのリリースバージョンに対して適用されるカーネルバージョン は複数存在します。 例えば、ファイル名が「kernel-4.18.0-425.3.1.el8.x86_64.rpm」の場合、各部分の意味は上記のようになります。基本的には、カーネルに限ら ず、他のパッケージ名もこのような構造でファイル名が決まります。これにより、パッケージの詳細と適用対象が明示されます。 パッケージ名の意味
  17. モジュールとライブラリの違い モジュール Linuxカーネルやソフトウェアの機能を追加・拡張するための部 品です。たとえば、カーネルモジュールは、ハードウェアサポー トや新しいファイルシステム機能を提供するためにカーネルに動 的に組み込まれます。モジュールは、特定の機能やサービスを分 けて管理し、必要に応じて読み込むことができます。 ライブラリ アプリケーションが実行時に利用する共通のコードや関数の集合 です。例えば、C言語の標準ライブラリは、プログラムが基本的

    な操作を行うための関数群を提供します。ライブラリは、アプリ ケーションが直接呼び出して利用し、コードの再利用を促進しま す。 モジュールはシステムやカーネルの機能を拡張する部品で、ライブラリはプログラムの機能を提供するコードの集まりです。両者は異 なる役割を持ちますが、どちらもシステムの機能を拡張するために重要です。
  18. ネットワークの問題(1) リポジトリへの通信がブロックされる問題 取得元リポジトリの設定(URLやGPGキーなど)によりパッ ケージのインストールに失敗することがあります。 /etc/yum.repos.d/*.repoの設定内容を見直すか、リポジトリ を再インストールすることで解消する可能性があります。 firewalldの設定 通常、リポジトリへの通信はHTTP(ポート80)または HTTPS(ポート443)を使用するため、firewalldによるポー トの開放が必要です。

    設定例: sudo firewall-cmd --permanent --add-service=http DNSサーバへの通信がブロックされる問題 通常、リポジトリへのアクセス設定はホスト名(ドメイン名 )で定義されるため、リポジトリへアクセスするにはDNSに よる名前解決が必要です。DNSサーバの設定は /etc/resolv.confにより定義されます。 設定例: nameserver 8.8.8.8 DNSポートの開放 DNSサーバへアクセスするためのfirewalldの設定(UDPポー ト53の開放)も必要です。 設定例: sudo firewall-cmd --permanent --add-port=53/udp
  19. SELinuxの設定による問題 SELinuxのステータスを確認 する SELinuxの現在の状態を確認します。 Enforcing(強制)モードの場合、セキ ュリティポリシーが厳格に適用されま す。 確認コマンド: getenforce SELinuxのログを確認する

    SELinuxによるブロックが発生した場 合、ログに記録されます。これを確認 することで問題の原因を特定できます 。 確認コマンド: ausearch -m avc -ts recent SELinuxのポリシーを調整す る 必要に応じてSELinuxのポリシーを調 整し、必要な操作を許可します。 設定例: setsebool -P httpd_can_network_connect on
  20. ディストリビューションごとのバージョン上限 パッケージ RHEL7 RHEL8 RHEL9 kernel 3.10.x 4.18.x~5.14.x 5.14.x OpenSSL

    1.0.2 1.1.1 3.x PHP 5.4(標準),7.x(RHSCL) 7.x(標準),8.x(AppStream) 8.x(標準) MySQL 5.7 8 8.x Python 2.7 3.6 3.9 Perl 5.16 5.26 5.32 Apache HTTP Server 2.4.x 2.4.x 2.4.x メジャーバージョンが複数あるパッケージ • 比較的頻繁に更新されるため複数のメジャーバージョンが存在す る • ディストリビューションのリリースバージョンによってバージョ ン制限がある • ディストリビューションごとのバージョンの上限を意識する必要 がある • 例)OpenSSL、PHP、MySQL、Python、Perlなど メジャーバージョンが一つのパッケージ • 比較的安定しているため同一のメジャーバージョンが長期間にわ たって使用される • ディストリビューションのリリースバージョンに依存せず • バージョン制限を意識する必要が少ない • 例)BIND、Postfix、Squidなど一般的なパッケージ全般
  21. 新しいバージョンのパッケージを使用する方法 サードパーティリポジトリの利用 公式リポジトリにない新しいバージョンのパッケージを提 供するサードパーティリポジトリを追加します。ただし、 互換性の問題や公式サポートが受けられなくなる可能性が あります。 コンテナの利用 Dockerなどのコンテナ技術を使用して、必要なバージョン のパッケージを含む独立した環境を構築します。ホストシ ステムに影響を与えずに新しいバージョンを使用できます

    。 AppStreamの利用 RHEL8以降では、AppStreamを通じて特定のバージョンの パッケージを選択してインストールできます。複数のバー ジョンが公式にサポートされています。 ディストリビューションのアップグレード システム全体を上位のディストリビューションにアップグ レードします。最も根本的な解決策ですが、大きな変更を 伴います。
  22. サブスクリプションの設定 システムへの登録 sudo subscription-manager register --username=<RHNユーザー名> --password=<RHNパスワード> サブスクリプションの取得 sudo subscription-manager

    attach --auto リポジトリの有効化 sudo subscription-manager repos --enable=<repo_id> リポジトリの表示 sudo subscription-manager repos --list Red Hatのサブスクリプションを管理するには「Subscription Manager」コマンドを使います。これにより、Red Hatのシステムへ登録し、公式 リポジトリにアクセスしてセキュリティパッチやソフトウェアの更新、追加パッケージのダウンロードなどが可能になります。 サブスクリプションの重要性 セキュリティパッチの入手 最新のセキュリティパッチを入手し、 システムを脆弱性から保護できます。 バグ修正の適用 既知の問題に対する修正を適用し、 システムの安定性を向上させます。 テクニカルサポートの利用 問題が発生した場合に、 Red Hatのテクニカルサポートを利用できます。 最新機能の利用 新しい機能や改善された機能を利用して、 システムのパフォーマンスを向上させます。 適切にサブスクリプションを登録することで、セキュリティパッチやバグ修正などのパッケージをダウンロードおよびインストールできるようになります。サードパ ーティリポジトリからパッケージの取得する場合は、公式リポジトリへアクセスする必要がないため、Subscription Managerの設定は必須ではありません。
  23. まとめ パッケージ管理の基本 ディストリビューションごとにパッケージのファイル形式や 管理コマンドが異なります。RedHat系ではRPM形式のパッ ケージをrpm、yum、dnfコマンドで管理します。 パッケージとライブラリの違い パッケージは実行可能なソフトウェアで依存関係や競合関係 の考慮が必要です。ライブラリはプログラムが動作するため に必要となる再利用可能な共通機能です。 カーネルとモジュール

    カーネルはOSの中核部分でリソース管理などを担います。 モジュールはカーネルの拡張機能で、機能追加を可能にします。 リポジトリの役割 リポジトリはパッケージの取得先で公式パッケージとサード パーティパッケージがあります。 適切なリポジトリの選択と設定が重要です。 バージョン制限 ディストリビューションのリリースバージョンにより利用可 能なパッケージのバージョンに上限があります。 新しいバージョンが必要な場合は適切な対応が必要です。 ネットワーク設定 ネットワークやサブスクリプトの設定に不備があると リポジトリへのアクセスが失敗します。 適切な設定が必要です。