序章

パッケージ管理は、Linuxシステムの基本的な機能の1つです。 パッケージ形式とパッケージ管理ツールは配布ごとに異なりますが、ほとんどの配布では2つのコアツールセットのいずれかを使用します。

Red Hat Enterprise Linuxベースのディストリビューション(RHEL自体やRocky Linuxなど)の場合、RPMパッケージ形式とrpmyumなどのパッケージツールが一般的です。 Debian、Ubuntu、および関連するディストリビューションで使用される他の主要なファミリは、.debパッケージ形式とaptdpkgなどのツールを使用します。

近年、コアaptおよびdpkgツールと並行して実行するように設計された補助パッケージマネージャーが増えています。たとえば、 snap は、より多くの移植性とサンドボックスを提供します。また、macOSから移植された Homebrew は、システムパッケージとの競合を回避するために個々のユーザーがインストールできるコマンドラインツールを提供します。

このガイドでは、システム管理者がDebianおよびUbuntuシステムで使用する最も一般的なパッケージ管理ツールのいくつかを学習します。 これは、これらのシステム内でパッケージ管理タスクを実行する方法を知る必要がある場合のクイックリファレンスとして使用できます。

前提条件

ステップ1-Debianパッケージ管理ツールの概要

Debian / Ubuntuエコシステムは、システム上のソフトウェアを管理するために、かなりの数の異なるパッケージ管理ツールを採用しています。

これらのツールのほとんどは相互に関連しており、同じパッケージデータベースで機能します。 これらのツールの中には、パッケージングシステムに高レベルのインターフェイスを提供しようとするものもありますが、他のユーティリティは低レベルの機能を提供することに集中しています。

apt

aptコマンドは、おそらくaptパッケージツールスイートの中で最も頻繁に使用されるメンバーです。 その主な目的は、ディストリビューションのパッケージングチームによって維持されているリモートリポジトリとのインターフェースを取り、利用可能なパッケージに対してアクションを実行することです。

aptスイートは、一般に、リモートリポジトリからローカルシステムに保持されているキャッシュに情報をプルすることで機能します。 aptコマンドは、ローカルキャッシュを更新するために使用されます。 また、パッケージの状態を変更するためにも使用されます。つまり、システムにパッケージをインストールまたは削除するために使用されます。

通常、aptは、ローカルキャッシュを更新し、ライブシステムに変更を加えるために使用されます。

注:以前のバージョンのUbuntuでは、コアのaptコマンドはapt-getと呼ばれていました。 合理化されていますが、習慣から、または下位互換性のために、apt-getで呼び出すことができます。

apt-cache

aptスイートのもう1つの重要なメンバーは、apt-cacheです。 このユーティリティは、ローカルキャッシュを使用して、使用可能なパッケージとそのプロパティに関する情報を照会します。

たとえば、特定のパッケージや特定の機能を実行するツールを検索する場合は、apt-cacheから始めるとよいでしょう。 また、手順の対象となる正確なパッケージバージョンについても情報を提供できます。 依存関係と逆依存関係の情報は、apt-cacheが役立つもう1つの領域です。

dpkg

以前のツールはリポジトリに保持されているパッケージの管理に重点を置いていましたが、dpkgコマンドを使用して個々の.debパッケージを操作することもできます。 dpkgツールは、実際には、上記のコマンドの舞台裏での作業のほとんどを担当します。 aptは、dpkgがパッケージ自体と対話している間、追加のハウスキーピングを提供します。

aptコマンドとは異なり、dpkgには依存関係を自動的に解決する機能がありません。 その主な機能は、.debパッケージを直接操作する機能と、パッケージを分析してその構造について詳しく知る機能です。 システムにインストールされているパッケージに関する情報を収集できますが、プライマリパッケージマネージャーとして使用しないでください。 次のステップでは、パッケージアップグレードのベストプラクティスについて学習します。

ステップ2–パッケージキャッシュとシステムの更新

DebianおよびUbuntuパッケージ管理ツールは、システムの利用可能なパッケージのリストを最新の状態に保つのに役立ちます。 また、サーバーに現在インストールしているパッケージを更新するさまざまな方法も提供します。

ローカルパッケージキャッシュの更新

パッケージングツールがパッケージ情報のために依存しているリモートリポジトリは、常に更新されます。 ただし、ほとんどのLinuxパッケージ管理ツールは、歴史的な理由から、この情報のローカルキャッシュを直接操作するように設計されています。 そのキャッシュは定期的に更新する必要があります。

通常、他のパッケージコマンドを実行する前に、セッションごとにローカルパッケージキャッシュを更新することをお勧めします。 これにより、利用可能なソフトウェアに関する最新情報を確実に操作できるようになります。 古いパッケージ情報で操作している場合、一部のインストールコマンドは失敗します。

ローカルキャッシュを更新するには、aptコマンドをupdateサブコマンドと一緒に使用します。

  1. sudo apt update

これにより、追跡しているリポジトリで利用可能なパッケージの更新されたリストがプルダウンされます。

パッケージの更新

aptコマンドは、2つの異なる更新手順を区別します。 最初の更新手順(このセクションで説明)を使用して、コンポーネントの削除を必要としないコンポーネントをアップグレードできます。 aptを更新し、必要に応じてコンポーネントを削除および交換できるようにする方法については、以下のセクションを参照してください。

これは、どのような状況でもインストールされているパッケージを削除したくない場合に非常に重要になる可能性があります。 ただし、一部の更新には、システムコンポーネントの交換、または競合するファイルの削除が含まれます。 この手順では、パッケージの削除が必要な更新はすべて無視されます。

  1. sudo apt upgrade

2番目の手順では、パッケージの削除が必要なパッケージも含め、すべてのパッケージが更新されます。 これは、パッケージの依存関係が変更されるときに必要になることがよくあります。

通常、削除されるパッケージは、アップグレード手順中に同等の機能に置き換えられるため、これは一般的に安全です。 ただし、一部の重要なコンポーネントに削除のマークが付けられている場合に備えて、削除するパッケージを監視することをお勧めします。 このアクションを実行するには、次のように入力します。

  1. sudo apt full-upgrade

これにより、システム上のすべてのパッケージが更新されます。 次のステップでは、新しいパッケージのダウンロードとインストールについて学習します。

ステップ3–パッケージのダウンロードとインストール

パッケージを検索する

パッケージをダウンロードしてインストールするときの最初のステップは、多くの場合、ディストリビューションのリポジトリで探しているパッケージを検索することです。

パッケージの検索は、情報のパッケージキャッシュを対象とする1つの操作です。 これを行うには、apt-cache searchを使用します。 パッケージを検索する前に、sudo apt updateを使用してローカルキャッシュが最新であることを確認する必要があることに注意してください。

  1. apt-cache search package

この手順は情報を照会するだけなので、sudo特権は必要ありません。 実行される検索では、パッケージ名とパッケージの完全な説明が表示されます。

たとえば、htopを検索すると、次のような結果が表示されます。

  1. apt-cache search htop
Output
aha - ANSI color to HTML converter htop - interactive processes viewer libauthen-oath-perl - Perl module for OATH One Time Passwords

ご覧のとおり、htopという名前のパッケージがありますが、他に2つのプログラムがあり、それぞれがパッケージの完全な説明フィールド(次の説明の横にある説明)にhtopと記載されています。出力は短い要約にすぎません)。

リポジトリからパッケージをインストールする

リポジトリからパッケージ、および必要なすべての依存関係をインストールするには、aptコマンドをinstall引数とともに使用できます。

このコマンドの引数は、リポジトリでラベル付けされている1つまたは複数のパッケージ名である必要があります。

  1. sudo apt install package

スペースで区切って、一度に複数のパッケージをインストールできます。

  1. sudo apt install package1 package2

要求されたパッケージに追加の依存関係が必要な場合、これらは標準出力に出力され、手順を確認するように求められます。 次のようになります。

  1. sudo apt install apache2
Output
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 236 kB of archives. After this operation, 1,163 kB of additional disk space will be used. Do you want to continue [Y/n]?

ご覧のとおり、インストール対象はapache2パッケージでしたが、依存関係としてapache2-dataパッケージが必要です。 この場合、Enterキーまたは「Y」を押して続行するか、「n」を入力してキャンセルできます。

リポジトリから特定のパッケージバージョンをインストールする

パッケージの特定のバージョンをインストールする必要がある場合は、次のように、ターゲットにするバージョンを=で指定できます。

sudo apt install package=version

この場合のバージョンは、リポジトリで使用可能なパッケージバージョン番号の1つと一致する必要があります。 これは、ディストリビューションで採用されているバージョン管理スキームを利用することを意味します。 apt-cache policy packageを使用して、利用可能なバージョンを見つけることができます。

  1. apt-cache policy nginx
Output
nginx: Installed: (none) Candidate: 1.18.0-0ubuntu1.2 Version table: 1.18.0-0ubuntu1.2 500 500 http://mirrors.digitalocean.com/ubuntu focal-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 1.17.10-0ubuntu1 500 500 http://mirrors.digitalocean.com/ubuntu focal/main amd64 Packages

パッケージを再構成する

多くのパッケージには、インストールの完了後に自動的に実行されるインストール後の構成スクリプトが含まれています。 多くの場合、これらには、管理者が構成を選択するためのプロンプトが含まれます。

後でこれらの(および追加の)構成手順を実行する必要がある場合は、dpkg-reconfigureコマンドを使用できます。 このコマンドは、渡されたパッケージを調べて、パッケージ仕様に含まれている構成後のコマンドを再実行します。

  1. sudo dpkg-reconfigure package

これにより、インストール時に実行したのと同じ(多くの場合はそれ以上の)プロンプトにアクセスできるようになります。

パッケージアクションのドライランを実行する

多くの場合、実際にコマンドの実行を確約せずに、プロシージャの副作用を確認する必要があります。 aptを使用すると、-sフラグを追加して、プロシージャを「シミュレート」できます。

たとえば、パッケージのインストールを選択した場合に何が行われるかを確認するには、次のように入力します。

  1. apt install -s package

これにより、-sフラグを削除した場合に発生する、システムへのすべての依存関係と変更を確認できます。 これの利点の1つは、sudoを使用せずに、通常はルート権限を必要とするプロセスの結果を確認できることです。

たとえば、apache2パッケージで何がインストールされるかを評価する場合は、次のように入力できます。

  1. apt install -s apache2
Output
NOTE: This is only a simulation! apt needs root privileges for real execution. Keep also in mind that locking is deactivated, so don't depend on the relevance to the real current situation! Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64]) Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

実際のプロセスを完了することなく、インストールされるパッケージとバージョンに関するすべての情報を取得できます。

これは、システムのアップグレードなど、他の手順でも機能します。

  1. apt -s dist-upgrade

デフォルトでは、aptは、多くのプロセスの確認をユーザーに求めます。 これには、追加の依存関係を必要とするインストール、およびパッケージのアップグレードが含まれます。

これらのアップグレードをバイパスし、デフォルトでこれらのプロンプトのいずれかを受け入れるために、これらの操作を実行するときに-yフラグを渡すことができます。

  1. sudo apt install -y package

これにより、ユーザーからのプロンプトが表示されることなく、パッケージと依存関係がインストールされます。 これは、アップグレード手順にも使用できます。

  1. sudo apt dist-upgrade -y

壊れた依存関係とパッケージを修正する

依存関係やその他の問題により、インストールが正常に終了しない場合があります。 これが発生する可能性のある一般的なシナリオの1つは、.debパッケージをdpkgとともにインストールする場合です。これは、依存関係を解決しません。

aptコマンドは、-fコマンドを渡すことにより、この状況を解決しようとすることができます。

  1. sudo apt install -f

これにより、満たされていない依存関係が検索され、それらをインストールして依存関係ツリーを修正しようとします。 インストールで依存関係の問題について不満が出た場合は、これが問題を解決するための最初のステップになります。 この方法で問題を解決できず、サードパーティのパッケージをインストールした場合は、それを削除して、より積極的に保守されている新しいバージョンを探す必要があります。

リポジトリからパッケージをダウンロード

実際にインストールせずにリポジトリからパッケージをダウンロードすると役立つ場合があります。 これを行うには、download引数を指定してaptを実行します。

これはファイルのダウンロードのみであり、実際のシステムには影響を与えないため、sudo特権は必要ありません。

  1. apt download package

これにより、指定したパッケージが現在のディレクトリにダウンロードされます。

.debパッケージをインストールします

ほとんどのディストリビューションでは、保守されているリポジトリからソフトウェアをインストールすることを推奨していますが、一部のベンダーは、システムにインストールできる生の.debファイルを提供しています。

これを行うには、dpkgを使用します。 dpkgは、主に個々のパッケージを操作するために使用されます。 リポジトリからのインストールを実行しようとはせず、代わりに現在のディレクトリまたは指定されたパスで.debパッケージを検索します。

  1. sudo dpkg --install debfile.deb

dpkgツールは依存関係の処理を実装していないことに注意することが重要です。 これは、満たされていない依存関係がある場合、インストールが失敗することを意味します。 ただし、必要な依存関係をマークするため、すべての依存関係がリポジトリ内で使用可能な場合は、後で次のように入力することでそれらを満たすことができます。

  1. sudo apt install -f

これにより、dpkgでマークされたものを含め、満たされていない依存関係がインストールされます。 次のステップでは、インストールしたパッケージの一部を削除する方法について学習します。

ステップ4–パッケージの削除とファイルの削除

このセクションでは、パッケージをアンインストールし、パッケージ操作によって残された可能性のあるファイルをクリーンアップする方法について説明します。

パッケージをアンインストールする

インストールされているパッケージを削除するには、apt removeを使用します。 これにより、1つの注目すべき例外を除いて、パッケージがシステムにインストールしたほとんどのファイルが削除されます。

このコマンドは、構成ファイルをそのまま残して、後日アプリケーションを再インストールする必要がある場合に構成を引き続き使用できるようにします。 これは、誤ってパッケージを削除した場合に、カスタマイズした構成ファイルが削除されないことを意味するため、便利です。

この操作を完了するには、アンインストールするパッケージの名前を指定する必要があります。

  1. sudo apt remove package

パッケージは、構成ファイルを除いてアンインストールされます。

パッケージと関連するすべての構成ファイルをアンインストールします

パッケージと、構成ファイルを含むすべての関連ファイルをシステムから削除する場合は、apt purgeを使用できます。

上記のremoveコマンドとは異なり、purgeコマンドはすべてを削除します。 これは、構成ファイルを保存したくない場合、または問題が発生していて、きれいな状態から始めたい場合に役立ちます。

構成ファイルを削除すると、元に戻すことはできなくなります。

  1. sudo apt purge package

これで、そのパッケージを再インストールする必要がある場合は、デフォルトの構成が使用されます。

不要になった自動依存関係を削除します

apt removeまたはapt purgeを使用してシステムからパッケージを削除すると、パッケージターゲットが削除されます。 ただし、インストール要件を満たすために自動的にインストールされた依存関係は残ります。

パッケージで不要になった依存関係としてインストールされたパッケージを自動的に削除するには、autoremoveコマンドを使用できます。

  1. sudo apt autoremove

削除する依存関係から関連するすべての構成ファイルを削除する場合は、--purgeオプションをautoremoveコマンドに追加する必要があります。 これにより、purgeコマンドが対象の削除に対して行うのと同じように、構成ファイルもクリーンアップされます。

  1. sudo apt --purge autoremove

廃止されたパッケージファイルをクリーンアップする

パッケージがディストリビューションのパッケージメンテナによってリポジトリに追加および削除されると、一部のパッケージは廃止されます。

aptツールは、autocleanコマンドを使用して、リポジトリから使用できなくなったパッケージに関連付けられているローカルシステム上のパッケージファイルを削除できます。

これにより、サーバーのスペースが解放され、古い可能性のあるパッケージがローカルキャッシュから削除されます。

  1. sudo apt autoclean

次のステップでは、必ずしもインストールせずにパッケージをクエリする方法について学習します。

ステップ5–パッケージに関する情報を取得する

各パッケージには、パッケージ管理ツールを使用してアクセスできる大量のメタデータが含まれています。 このセクションでは、利用可能でインストールされているパッケージに関する情報を取得するためのいくつかの一般的な方法を示します。

ディストリビューションのリポジトリ内のパッケージに関する詳細情報を表示するには、apt-cache showを使用できます。 このコマンドのターゲットは、リポジトリ内のパッケージ名です。

  1. apt-cache show nginx

これにより、問題のパッケージのインストール候補に関する情報が表示されます。 各候補者は、依存関係、バージョン、アーキテクチャ、競合、実際のパッケージファイル名、パッケージのサイズとインストール、および特に詳細な説明に関する情報を持っています。

Output
Package: nginx Architecture: all Version: 1.18.0-0ubuntu1.2 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <[email protected]> Original-Maintainer: Debian Nginx Maintainers <[email protected]> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 44 Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2) Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb …

逆依存関係の完全なリスト(照会されたパッケージに依存するパッケージのリスト)など、各候補に関する追加情報を表示するには、代わりにshowpkgコマンドを使用します。 これには、このパッケージと他のパッケージとの関係に関する情報が含まれます。

  1. apt-cache showpkg package

.debパッケージに関する情報を表示する

.debファイルの詳細を表示するには、dpkgコマンドで--infoフラグを使用できます。 このコマンドのターゲットは、.debファイルへのパスである必要があります。

  1. dpkg --info debfile.deb

これにより、問題のパッケージに関するメタデータが表示されます。 これには、パッケージ名とバージョン、それが構築されたアーキテクチャ、必要なサイズと依存関係、説明と競合が含まれます。

依存関係(このパッケージが依存するパッケージ)と逆依存関係(このパッケージに依存するパッケージ)を具体的に一覧表示するには、apt-cacheユーティリティを使用できます。

従来の依存関係情報については、dependsサブコマンドを使用できます。

  1. apt-cache depends nginx
Output
nginx |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras

これにより、ハード依存、提案、推奨、または競合としてリストされているすべてのパッケージに関する情報が表示されます。

どのパッケージが特定のパッケージに依存しているかを調べる必要がある場合は、そのパッケージをapt-cache rdependsに渡すことができます。

  1. apt-cache rdepends package

インストール済みおよび利用可能なパッケージバージョンを表示する

多くの場合、リポジトリ内には複数のバージョンのパッケージがあり、デフォルトのパッケージは1つです。 パッケージの利用可能なバージョンを確認するには、apt-cache policyを使用できます。

  1. apt-cache policy package

これにより、インストールされているバージョン(存在する場合)、インストールコマンドでバージョンを指定しない場合にデフォルトでインストールされるパッケージ、および各バージョンの優先度を示す重みが付いたパッケージバージョンの表が表示されます。

これを使用して、インストールするバージョンと使用可能な代替手段を決定できます。 これには、各バージョンが配置されているリポジトリもリストされるため、これを使用して、デフォルトのリポジトリのパッケージに取って代わる追加のリポジトリがあるかどうかを判断できます。

インストールされているパッケージをdpkg-lで表示する

システムにインストールされているパッケージを表示するために、出力の形式と詳細度が異なるいくつかの個別のオプションがあります。

最初の方法では、dpkgまたはdpkg-queryコマンドを-lフラグとともに使用します。 これらのコマンドの両方からの出力は同じです。 引数なしで、システムにインストールされている、または部分的にインストールされているすべてのパッケージのリストが表示されます。 出力は次のようになります。

  1. dpkg -l
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===========================================-=======================================-============-===================================================================================================================== ii account-plugin-generic-oauth 0.10bzr13.03.26-0ubuntu1.1 amd64 GNOME Control Center account plugin for single signon - generic OAuth ii accountsservice 0.6.34-0ubuntu6 amd64 query and manipulate user account information ii acl 2.2.52-1 amd64 Access control list utilities ii acpi-support 0.142 amd64 scripts for handling many ACPI events ii acpid 1:2.0.18-1ubuntu2 amd64 Advanced Configuration and Power Interface event daemon . . .

出力は、システム上のすべてのパッケージに対して続行されます。 出力の上部に、各行の最初の3文字の意味が表示されます。 最初の文字は、パッケージの望ましい状態を示します。 かもね:

  • u :不明
  • i :インストール済み
  • r :削除されました
  • p :パージされました
  • h :保持されているバージョン

2番目の文字は、パッケージングシステムに認識されているパッケージの実際のステータスを示します。 これらは次のようになります。

  • n :インストールされていません
  • i :インストール済み
  • c :構成ファイルは存在しますが、アプリケーションはアンインストールされています。
  • u :開梱。 ファイルは解凍されていますが、まだ構成されていません。
  • f :パッケージが半分インストールされています。つまり、インストールの途中で障害が発生し、操作が停止しました。
  • w :パッケージは別のパッケージからのトリガーを待機しています
  • p :パッケージは別のパッケージによってトリガーされました。

ほとんどのパッケージでは空白になる3番目の文字には、他に1つの選択肢しかありません。

  • r :これは再インストールが必要であることを示します。 これは通常、パッケージが壊れていて機能していない状態にあることを意味します。

残りの列には、パッケージ名、バージョン、アーキテクチャ、および説明が含まれています。

フィルタリングされたパッケージのインストール状態を表示する

-lパターンの後に検索パターンを追加すると、dpkgは、そのパターンを含むすべてのパッケージ(インストールされているかどうかに関係なく)を一覧表示します。 たとえば、ここでYAML処理ライブラリを検索できます。

  1. dpkg -l libyaml*
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============-============-============-=================================== ii libyaml-0-2:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li ii libyaml-dev:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li un libyaml-perl <none> (no description available) un libyaml-syck-pe <none> (no description available) ii libyaml-tiny-pe 1.51-2 all Perl module for reading and writing

最初の列からわかるように、3番目と4番目の結果はインストールされていません。 これにより、パターンに一致するすべてのパッケージと、それらの現在の状態および望ましい状態が得られます。

システムにインストールされているパッケージをレンダリングする別の方法は、dpkg –get-selectionsを使用することです。

これにより、インストールまたは削除されたがパージされていないすべてのパッケージのリストが表示されます。

  1. dpkg --get-selections

これら2つの状態を区別するために、出力をdpkgからawkにパイプして、状態でフィルタリングできます。 インストールされているパッケージのみを表示するには、次のように入力します。

  1. dpkg --get-selections | awk '$2 ~ /^install/'

構成ファイルがパージされていない削除済みパッケージのリストを取得するには、代わりに次のように入力します。

  1. dpkg --get-selections | awk '$2 !~ /^install/'

また、awkを介したpipingコマンドの出力について詳しく知ることもできます。

インストールされているパッケージを検索する

インストールされているパッケージベースで特定のパッケージを検索するには、--get-selectionsオプションの後にパッケージフィルター文字列を追加できます。 これは、ワイルドカードとの照合をサポートします。 繰り返しになりますが、これにより、インストールされているパッケージ、またはシステムに構成ファイルが残っているパッケージが表示されます。

  1. dpkg --get-selections libz*

もう一度、前のセクションのawk式を使用してフィルタリングできます。

パッケージによってインストールされたファイルのリスト

パッケージが担当するファイルを見つけるには、dpkgコマンドで-Lフラグを使用できます。

  1. dpkg -L package

これにより、パッケージによって制御される各ファイルの絶対パスが出力されます。 これには、パッケージ内のプロセスによって生成される構成ファイルは含まれません。

ファイルシステム内の特定のファイルを担当するパッケージを見つけるには、-Sフラグを指定してdpkgコマンドに絶対パスを渡すことができます。

これにより、問題のファイルをインストールしたパッケージが印刷されます。

  1. dpkg -S /path/to/file

インストール後のスクリプトによって所定の位置に移動されたファイルは、この手法ではパッケージに結び付けられないことに注意してください。

インストールせずにファイルを提供するパッケージを見つける

dpkgを使用すると、-Sオプションを使用して、どのパッケージがファイルを所有しているかを確認できます。 ただし、関連するパッケージがインストールされていない場合でも、ファイルまたはコマンドを提供するパッケージを知る必要がある場合があります。

そのためには、apt-fileというユーティリティをインストールする必要があります。 これにより、データベース内のパッケージによって制御されるすべてのファイルのインストールパスを含む、独自の情報データベースが維持されます。

通常どおりapt-fileパッケージをインストールします。

  1. sudo apt update
  2. sudo apt install apt-file

次に、ツールのデータベースを更新し、次のように入力してファイルを検索します。

  1. sudo apt-file update
  2. sudo apt-file search /path/to/file

これは、パッケージによって直接インストールされたファイルの場所でのみ機能します。 インストール後のスクリプトで作成されたファイルは照会できません。 次のステップでは、インストールされているパッケージのリストをインポートおよびエクスポートする方法を学習します。

ステップ6–システム間でのパッケージリストの転送

多くの場合、あるシステムからインストールされたパッケージのリストをバックアップし、それを使用して別のシステムに同じパッケージのセットをインストールする必要があります。 これは、バックアップの目的にも役立ちます。 このセクションでは、パッケージリストをエクスポートおよびインポートする方法について説明します。

あるシステムにインストールされているパッケージのセットを別のシステムに複製する必要がある場合は、最初にパッケージリストをエクスポートする必要があります。

dpkg --get-selectionsの出力をテキストファイルにリダイレクトすることにより、インストールされているパッケージのリストをファイルにエクスポートできます。

  1. dpkg --get-selections > ~/packagelist.txt

入力および出力リダイレクトについても詳しく知ることができます。

次に、このリストを2番目のマシンにコピーしてインポートできます。

また、ソースリストと信頼できるキーリストをバックアップする必要がある場合もあります。 新しいディレクトリを作成し、/etc/apt/のシステム構成からコピーすることで、ソースをバックアップできます。

  1. mkdir ~/sources
  2. cp -R /etc/apt/sources.list* ~/sources

サードパーティのリポジトリからパッケージをインストールするために追加したキーは、apt-key exportallを使用してエクスポートできます。

  1. apt-key exportall > ~/trusted_keys.txt

これで、packagelist.txtファイル、sourcesディレクトリ、およびtrusted_keys.txtファイルを別のコンピューターに転送してインポートできます。

パッケージリストのインポート

上記のようにdpkg --get-selectionsを使用してパッケージリストを作成した場合は、dpkgコマンドを使用して別のコンピューターにパッケージをインポートすることもできます。

まず、信頼できるキーを追加し、最初の環境からコピーしたソースリストを実装する必要があります。 バックアップしたすべてのデータが新しいコンピューターのホームディレクトリにコピーされていると仮定すると、次のように入力できます。

  1. sudo apt-key add ~/trusted_keys.txt
  2. sudo cp -R ~sources/* /etc/apt/

次に、新しいコンピューターからすべての必須ではないパッケージの状態をクリアします。 これにより、変更をきれいな状態に確実に適用できます。 これは、rootアカウントまたはsudo権限で実行する必要があります。

  1. sudo dpkg --clear-selections

これにより、必須ではないすべてのパッケージが削除対象としてマークされます。 インストールする予定のすべてのソフトウェアのレコードがインストールに含まれるように、ローカルパッケージリストを更新する必要があります。 実際のインストールとアップグレードの手順は、dselectと呼ばれるツールによって処理されます。

dselectツールがインストールされていることを確認する必要があります。 このツールは独自のデータベースを維持しているため、続行する前にデータベースを更新する必要もあります。

  1. sudo apt update
  2. sudo apt install dselect
  3. sudo dselect update

次に、現在のリストの上にパッケージリストを適用して、保持またはダウンロードするパッケージを構成できます。

  1. sudo dpkg --set-selections < packagelist.txt

これにより、正しいパッケージ状態が設定されます。 変更を適用するには、apt dselect-upgradeを実行します。

  1. sudo apt dselect-upgrade

これにより、必要なパッケージがダウンロードおよびインストールされます。 また、選択解除のマークが付けられたパッケージもすべて削除されます。 最終的に、パッケージリストは以前のコンピューターのリストと一致する必要がありますが、構成ファイルは引き続きコピーまたは変更する必要があります。 etckeeper などのツールを使用して、/etcディレクトリから構成ファイルを移行することをお勧めします。

次の最後のステップでは、サードパーティのパッケージリポジトリの操作について学習します。

ステップ7–リポジトリとPPAを追加する

ほとんどのディストリビューションで提供されているデフォルトのリポジトリセットは一般的に最も保守しやすいものですが、追加のソースが役立つ場合があります。 このセクションでは、追加のソースを参照するようにパッケージツールを構成する方法を学習します。

Ubuntuの従来のリポジトリの代わりに、PPA、またはp個人用pパッケージaアーカイブがあります。 他のLinuxフレーバーは通常、サードパーティリポジトリの異なるが類似した概念を使用します。 通常、PPAはリポジトリよりもスコープが小さく、PPA所有者によって維持されるアプリケーションの焦点を絞ったセットが含まれています。

システムにPPAを追加すると、通常のパッケージ管理ツールを使用して、PPAに含まれるパッケージを管理できます。 これを使用して、ディストリビューションのリポジトリに含まれていない最新のパッケージを提供できます。 非標準のメンテナがシステムのパッケージをビルドすることを許可するため、信頼できるPPAのみを追加するように注意してください。

PPAを追加するには、add-apt-repositoryコマンドを使用できます。 ターゲットには、ラベルppa: Launchpad のPPA所有者の名前、スラッシュ、およびPPA名を含める必要があります。

  1. sudo add-apt-repository ppa:owner_name/ppa_name

パッケージャのキーを受け入れるように求められる場合があります。 その後、PPAがシステムに追加され、通常のaptコマンドを使用してパッケージをインストールできるようになります。 パッケージを検索またはインストールする前に、新しいPPAに関する情報でローカルキャッシュを更新してください。

  1. sudo apt update

リポジトリ構成を直接編集することもできます。 /etc/apt/sources.listファイルを編集するか、/etc/apt/sources.list.dディレクトリに新しいリストを配置することができます。 この後者のルートを使用する場合、作成するファイル名は.listで終わる必要があります。

  1. sudo nano /etc/apt/sources.list.d/new_repo.list

ファイル内で、次の形式を使用して新しいリポジトリの場所を追加できます。

/etc/apt/sources.list.d/new_repo.list
deb_or_deb-src url_of_repo release_code_name_or_suite component_names

リポジトリ仕様のさまざまな部分は次のとおりです。

  • debまたはdeb-src:これはリポジトリのタイプを識別します。 従来のリポジトリはdebでマークされていますが、ソースリポジトリはdeb-srcで始まります。
  • url :リポジトリのメインURL。 これは、リポジトリを見つけることができる場所である必要があります。
  • リリースコード名またはスイート:これは通常、ディストリビューションのリリースのコード名ですが、ディストリビューションのバージョン用に作成された特定のパッケージセットを識別するために使用される任意の名前にすることができます。
  • コンポーネント名:使用可能にしたいパッケージを選択するためのラベル。 これは多くの場合、リポジトリのメンテナが、そこに含まれるソフトウェアの信頼性やライセンスの制限について何かを表現するために提供する区別です。

これらの行をファイル内に追加できます。 ほとんどのリポジトリには、使用する必要のある正確な形式に関する情報が含まれています。 他の一部のLinuxディストリビューションでは、そのリポジトリの構成ファイルのみを含むパッケージを実際にインストールすることで、リポジトリソースを追加できます。これは、パッケージマネージャーが機能するように設計されている方法と一致しています。

結論

パッケージ管理は、おそらくLinuxシステムを管理する上で最も重要な側面の1つです。 実行できるパッケージ管理操作は他にもたくさんありますが、このチュートリアルでは、Ubuntuの基本のベースラインを提供しており、その多くは、マイナーな変更を加えて他のディストリビューションに一般化できます。

次に、他のプラットフォームでのパッケージ管理について詳しく知りたいと思うかもしれません。