パッケージマネージャー

Myrlyn、 RPMパッケージ マネージャーのGUIの例

パッケージマネージャーまたはパッケージ管理システムは、ホストシステムへのソフトウェアのインストール、アップグレード、構成、削除を一貫した方法でサポートするソフトウェアです。 [ 1 ]

パッケージマネージャーは、パッケージ、ソフトウェアのディストリビューション、およびアーカイブファイル内のデータを処理します。パッケージには、ソフトウェアの名前、用途の説明、バージョン番号、ベンダー、チェックサム(通常は暗号ハッシュ関数)、ソフトウェアが正常に動作するために必要な依存関係のリストなどのメタデータが含まれています。インストール時に、メタデータはローカルパッケージデータベースに保存されます。パッケージマネージャーは通常、ソフトウェアの依存関係とバージョン情報のデータベースを管理し、ソフトウェアの不一致や前提条件の不足を防止します。パッケージマネージャーは、ソフトウェアリポジトリバイナリリポジトリマネージャー、およびアプリストアと緊密に連携します。

パッケージマネージャは、手動によるインストールやアップデートの必要性を排除するように設計されています。これは、オペレーティングシステム(OS)が数百、あるいは数万もの個別のパッケージで構成されている大規模企業にとって特に有用です。[ 2 ]

歴史

初期のパッケージマネージャはIBM AIXのSMIT(およびそのバックエンドインストール)でした。SMITは1989年にAIX 3.0で導入されました。dpkgのようなパッケージマネージャは1994年にはすでに存在していました。[ 3 ] 1994年頃の初期のパッケージマネージャには依存関係の自動解決機能はありませんでしたが[ 4 ]、実行中のシステムへのソフトウェアの追加と削除のプロセスを簡素化することは既に可能でした。[ 5 ]

1995年頃、CPANに始まり、パッケージマネージャはパッケージリポジトリのダウンロード、依存関係の解決、必要に応じてインストールを処理するようになり、ソフトウェアのインストール、アンインストール、アップデートが容易になりました。[ 6 ]

機能

新しいソフトウェアをダウンロードするためにパッケージマネージャーが使用されているイラスト。手動操作には、ソフトウェアライセンス契約への同意やパッケージ固有の設定オプションの選択などが含まれます。

ソフトウェアパッケージとは、コンピュータプログラムとその展開に必要なメタデータを含むアーカイブファイルです。プログラムはソースコードである場合があり、まずコンパイルとビルドが必要です。[ 7 ]パッケージのメタデータには、ソフトウェアの説明、バージョン番号、依存関係が含まれます。

パッケージマネージャーは、ユーザーの指示に従ってパッケージを検索、インストール、保守、またはアンインストールする役割を担います。パッケージ管理システムの典型的な機能には、以下のものがあります。

共有ライブラリの課題

静的ライブラリリンクではなく動的ライブラリリンクを利用するコンピュータシステムでは、パッケージやアプリケーション間でマシン命令の実行可能ライブラリを共有します。このようなシステムでは、異なるバージョンのライブラリを必要とする異なるパッケージ間の競合関係により、 「依存関係地獄」と呼ばれる状況が発生します。Microsoft Windowsシステムでは、動的リンクライブラリを使用する場合、これは「DLL地獄」とも呼ばれます。 [ 8 ]

現代のパッケージ マネージャーは、複数のライブラリ バージョン ( OPENSTEPフレームワークシステムなど)、あらゆる種類の依存関係 ( Gentoo Portageのスロットなど)、さらには異なるコンパイラ バージョンでコンパイルされたパッケージ (安定したABIが存在しないGlasgow Haskell コンパイラによってビルドされた動的ライブラリなど) の並行インストールを許可することで、これらの問題をほぼ解決しています。これにより、他のパッケージがリンクまたはインストールされるバージョンを指定できるようになります。

ローカルでコンパイルされたパッケージのフロントエンド

システム管理者は、パッケージマネージャー以外のツールを使用してソフトウェアのインストールとメンテナンスを行う場合があります。例えば、ローカル管理者がパッケージ化されていないソースコードをダウンロードし、コンパイルしてインストールするなどです。これにより、ローカルシステムとパッケージマネージャーのデータベースの同期が失われる可能性があります。ローカル管理者は、依存関係の一部を手動で管理したり、変更をパッケージマネージャーに統合したりするなど、追加の対策を講じる必要があります。

ローカルでコンパイルされたパッケージがパッケージ管理に統合されていることを確認するツールがあります。.debファイルや.rpmファイルベースのオペレーティングシステムやSlackware LinuxではCheckInstallが、レシピベースのシステム(Gentoo Linuxなど)やハイブリッドシステム( Arch Linuxなど)では、まずレシピを記述することで、パッケージがローカルパッケージデータベースに適合することを確認できます。

構成のメンテナンス

設定ファイルアップグレードは特に厄介な場合があります。パッケージ マネージャーは、少なくともUnix システムでは、ファイル アーカイバの拡張機能として始まったため、通常は設定ファイルにルールを適用するのではなく、上書きまたは保持することしかできません。これには例外があり、通常カーネル設定に当てはまります (カーネル設定が壊れていると、再起動後にコンピュータが使用できなくなります)。設定ファイルの形式が変わると、問題が発生する可能性があります。たとえば、古いファイルで、無効にすべき新しいオプションが明示的に無効にされていない場合などです。Debian の dpkg など、一部のパッケージ マネージャーではインストール中に設定を行うことができます。他の状況では、パッケージはデフォルトの設定でインストールされ、その後、たとえば多数のコンピュータへの ヘッドレスインストールなどで上書きされます。このような事前設定済みのインストールも、dpkg ではサポートされています。

リポジトリ

ユーザーがシステムにインストールを許可するソフトウェアをより細かく制御できるようにするため、また場合によっては配布者側の法的または利便性上の理由により、パッケージはソフトウェアリポジトリからダウンロードされることがよくあります。[ 9 ]

アップグレード抑制

ユーザーがパッケージ管理ソフトウェアを使用してパッケージをアップグレードする場合、実行するアクション (通常はアップグレードするパッケージの一覧と、場合によっては新旧のバージョン番号) が提示され、一括でアップグレードを受け入れるか、アップグレードするパッケージを個別に選択できるようにするのが一般的です。多くのパッケージ マネージャーは、特定のパッケージをアップグレードしないように設定したり、ソフトウェアのパッケージ作成者が定義したように、以前のバージョンに重大な脆弱性や不安定性が見つかった場合にのみアップグレードするように設定したりできます。このプロセスは、アップグレードの抑制、またはバージョン ピンニングと呼ばれます。たとえば、OpenOfficeプログラム のアップグレードを防止するには、次の手順を実行します。

カスケードパッケージ削除

より高度なパッケージ管理機能の中には、カスケードパッケージ削除[ 11 ]を提供するものがあり、これにより対象パッケージに依存するすべてのパッケージと、対象パッケージのみが依存するすべてのパッケージも削除されます。

コマンドの比較

コマンドはパッケージマネージャーごとに異なりますが、ほとんどのパッケージマネージャーが同様の機能を提供しているため、ある程度は翻訳可能です。Arch Linux wikiでは、コマンドに関する詳細な概要を提供しています。[ 14 ]

${PKG}または%PKG%パッケージ名です。
アクション 自家製アプトパックマンdnf (ヤム) ポーテージジッパー[ 15 ]ニックスXBPS [ 16 ]swupd [ 17 ]ウィンゲット
パッケージをインストールする brewinstall${PKG}aptinstall${PKG}pacman-S${PKG}dnfinstall${PKG}emerge${PKG}zypperin${PKG}nix-env-i${PKG}xbps-install${PKG}swupdbundle-add${PKG}winget install %PKG%
パッケージを削除 brewuninstall${PKG}aptremove${PKG}pacman-R${PKG}dnfremove--nodeps${PKG}emerge-C${PKG}またはemerge--unmerge${PKG}zypperrm-RU${PKG}nix-env-e${PKG}xbps-remove${PKG}swupdbundle-remove${PKG}winget uninstall %PKG%
ソフトウェアデータベースを更新する brewupdateaptupdatepacman-Sydnfcheck-updateemerge--synczypperrefnix-channel--upgradexbps-install-Sswupdupdate--downloadまたはswupdupdate--update-search-file-indexwinget upgrade
更新可能なパッケージを表示 brewoutdatedaptlist--upgradablepacman-Qudnfcheck-updateemerge-avtuDN--with-bdeps=y@worldまたは(は の省略形であり、は の省略形です。) emerge-u--pretend@world-D--deep-u--updatezypperlu
nix-channel --upgrade && \ nix-env -u && \ nix-collect-garbage 
./xbps-srcupdate-check${PKG}(void-packages リポジトリが必要です) swupdupdate-sまたはswupdcheck-updatewinget upgrade
すべて更新 brewupgradeaptupgradepacman-Syudnfupdateemerge-u-D--with-bdeps=y@worldzypperupnix-env-u&&nix-collect-garbagexbps-install-Suswupdupdatewinget upgrade --all
孤立ファイルと設定を削除する brewautoremove&&brewcleanupaptautoremovepacman-Rsn$(pacman-Qdtq)該当なしemerge--depcleanzypperrm-unix-collect-garbage-dxbps-remove-of
swupdバンドル削除--orphans && \ swupdクリーン--all 
該当なし
孤児を表示 brewautoremove--dry-run該当なしpacman-Qdtpackage-cleanup-q--leaves--exclude-bin(-qは の省略形です--quiet。) emerge-caDまたはemerge--depclean--pretendzypperpa--orphaned--unneeded該当なしxbps-remove-oswupdbundle-list--orphans該当なし
パッケージ(および孤立パッケージ)を削除する
brew uninstall ${ PKG } && brew autoremove 
aptautoremove${PKG}pacman-Rs${PKG}dnfremove${PKG}emerge-c${PKG}またはemerge--depclean${PKG}zypperrm-u--force-resolution${PKG}nix-env-e${PKG}&&nix-env-uxbps-remove-R${PKG}
swupdバンドル削除${ PKG } && \ swupdバンドル削除--orphans 
winget uninstall %PKG%

有病率

バイナリパッケージを中心とするLinuxディストリビューションは、ソフトウェアの管理と保守の主な手段としてパッケージ管理システムに大きく依存しています。Android (Linuxベース)やiOSUnixベース)などのモバイルオペレーティングシステムは、それぞれのベンダーのアプリストアにほぼ全面的に依存しており、専用のパッケージ管理システムを使用しています。

類似のプログラムとプラットフォーム

インストーラー

パッケージマネージャーはインストールマネージャーと呼ばれることが多く、パッケージマネージャーとインストーラーが混同されることがあります。違いは以下のとおりです。

基準 パッケージマネージャー インストーラ
同梱物 通常、オペレーティングシステム 各コンピュータプログラム
インストール情報の場所 1つの中央インストールデータベース それは完全にインストーラの裁量次第です。アプリのフォルダ内のファイル、あるいはオペレーティングシステムのファイルやフォルダの中にある可能性があります。せいぜい、インストール情報を公開することなく、アンインストーラのリストに自身を登録する程度でしょう。
メンテナンスの範囲 システム上のすべてのパッケージ バンドルされた製品のみ
開発者 パッケージマネージャベンダー1社 複数のインストーラベンダー
パッケージ形式 いくつかのよく知られたフォーマットアプリの数だけフォーマットが存在する可能性がある
パッケージ形式の互換性 パッケージマネージャーがサポートしている限り使用できます。パッケージマネージャーの新しいバージョンがサポートを継続するか、ユーザーがパッケージマネージャーをアップグレードしない限り、この機能は利用できません。 インストーラーは、アーカイブ形式を使用している場合、常にその形式と互換性があります。ただし、他のコンピュータプログラムと同様に、インストーラーもソフトウェアの劣化の影響を受ける可能性があります。

ビルド自動化ユーティリティ

ほとんどのソフトウェア構成管理システムでは、ソフトウェアのビルドとデプロイを別々の独立したステップとして扱います。ビルド自動化ユーティリティは通常、コンピューター上に既に存在する人間が読める形式のソースコードファイルを取得し、それらを同じコンピューターまたはリモートコンピューター上で実行可能パッケージに変換するプロセスを自動化します。その後、通常は別のコンピューターで実行されるパッケージマネージャーが、ビルド済みの実行可能ファイルをダウンロードしてインストールします。

ただし、どちらの種類のツールにも多くの共通点があります。

MaakAAPなどのツールはビルドとデプロイメントの両方を処理するように設計されており、ビルド自動化ユーティリティ、パッケージマネージャー、またはその両方として使用できます。[ 18 ]

アプリストア

アプリストアは、アプリケーションレベルのパッケージマネージャー(すべてのレベルのプログラムをインストールする機能はない[ 19 ] [ 20 ])とも考えられます。従来のパッケージマネージャーとは異なり、アプリストアはソフトウェア開発ではなくソフトウェア自体に対して支払いができるように設計されており、依存関係や依存関係の解決のないモノリシックなパッケージのみを提供する場合があります。[ 21 ] [ 20 ]アプリストアは通常、パワーや出現よりも使いやすさに重点を置いているため、管理機能が制限されており、商用オペレーティングシステムやスマートデバイスで一般的です。

パッケージマネージャーも、人間がレビューしたコードしか持っていないことがほとんどです。Google PlayやAppleのApp Storeなど、多くのアプリストアでは、主に自動化ツールのみを使用してアプリをスクリーニングしています。マルウェアは、アプリがテストされていることを検知し、悪意のある活動を遅らせることで、これらのテストを通過できます。[ 22 ] [ 23 ] [ 24 ]例外もあります。たとえば、 npmパッケージデータベースは、コードの公開後のレビューに完全に依存しています。 [ 25 ] [ 26 ]一方、Debianパッケージデータベースでは、パッケージがメインデータベースに追加される前に、人間による徹底的なレビュープロセスがあります。XZ Utilsバックドアは、バックドアを挿入するために何年もの信頼構築を利用しましたが、それでもテストデータベースで発見されました。

一般的なパッケージマネージャーとフォーマット

ユニバーサルパッケージマネージャー

バイナリリポジトリマネージャーとも呼ばれるこのソフトウェアツールは、ソフトウェア開発プロセスで使用および生成されるバイナリファイル、成果物、パッケージのダウンロードと保存を最適化するために設計されています。[ 27 ]これらのパッケージマネージャーは、企業があらゆる種類のパッケージを扱う方法を標準化することを目的としています。ユーザーは、あらゆる種類の成果物にセキュリティとコンプライアンスのメトリクスを適用できます。ユニバーサルパッケージマネージャーは、 DevOpsツールチェーンの中核を担うと言われています。[ 28 ]

パッケージ形式

各パッケージマネージャーは、リポジトリ内のパッケージのフォーマットとメタデータに依存しています。つまり、パッケージマネージャーは、依存関係などの適切なメタデータとともに、ファイルグループをバンドルする必要があります。多くの場合、コアとなるユーティリティセットがこれらのパッケージの基本的なインストールを管理し、複数のパッケージマネージャーがこれらのユーティリティを使用して追加機能を提供します。

例えば、yumはバックエンドとしてrpmに依存しています。yumは、システムネットワークの保守のためのシンプルな設定機能などを追加することで、rpmの機能を拡張します。別の例として、Synaptic Package ManagerはAdvanced Packaging Tool (apt)ライブラリを使用してグラフィカルユーザーインターフェースを提供していますが、aptライブラリはコア機能として dpkgに依存しています。

Alien は、さまざまなLinux パッケージ形式を変換するプログラムであり、Linux Standard Base (LSB) 準拠の.rpmパッケージ、.deb、Stampede (.slp)、Solaris (.pkg)、およびSlackware ( .tgz.txz、.tbz、.tlz) パッケージ間の変換をサポートしています。

モバイルオペレーティングシステムの場合、Google PlayはAndroidアプリケーションパッケージ(APK)形式を使用し、 Microsoft StoreはAPPX形式とXAP形式を使用します。Google PlayとMicrosoft Storeはどちらも、独自のパッケージマネージャーを備えています。

フリーでオープンソースのソフトウェアシステム

フリー オープンソース ソフトウェア(FOSS)の性質上、類似した互換性のあるライセンスのパッケージが、多くのオペレーティング システムで利用できます。これらのパッケージは、構成可能なパッケージ システムを使用して組み合わせて配布することができ、さまざまなソフトウェアの組み合わせを処理し、バージョン固有の依存関係と競合を管理できます。一部の FOSS パッケージ マネージャーは、それ自体が FOSS としてリリースされています。Mac OS X や Windows などのプロプライエタリ オペレーティング システムのパッケージ管理と、Linux などのフリー オープンソース ソフトウェアのパッケージ管理の一般的な違いは、フリー オープンソース ソフトウェア システムでは、同じメカニズムを使用してサードパーティ製のパッケージもインストールおよびアップグレードできるのに対し、Mac OS X と Windows のパッケージ マネージャーは、それぞれ Apple と Microsoft が提供するソフトウェアのみをアップグレードすることです (Windows の一部のサードパーティ製ドライバーを除く)。サードパーティ製ソフトウェアを継続的にアップグレードする機能は通常、対応するリポジトリのURLをパッケージ管理の構成ファイルに追加することによって追加されます。

アプリケーションレベルのパッケージマネージャー

システムレベルのアプリケーション マネージャーの他に、機能が制限されたオペレーティング システム用や、開発者が最新のライブラリを必要とするプログラミング言語用のアドオン パッケージ マネージャーもあります。

システムレベルのパッケージマネージャとは異なり、アプリケーションレベルのパッケージマネージャはソフトウェアシステムのごく一部に焦点を当てています。通常、c:\cygwin/opt/swなど、システムレベルのマネージャによって管理されていないディレクトリツリー内に存在します。[ 29 ]これは、プログラミングライブラリを扱うマネージャには当てはまらない場合があり、両方のマネージャがファイルの所有権を主張し、アップグレードが失敗するなど、競合が発生する可能性があります。

インパクト

イアン・マードックは、パッケージ管理は「 Linuxが業界にもたらした最大の進歩」であり、オペレーティングシステムとアプリケーションの境界を曖昧にし、「新しいイノベーションを市場に投入し、OSを進化させることが容易になる」とコメントした。[ 30 ]

パッケージマネージャー開発者向けのカンファレンス「PackagingCon」もあります。これは、パッケージ管理へのさまざまなアプローチを理解することを目的として、2021年に設立されました。[ 31 ]

参照

参考文献

  1. ^ 「パッケージマネージャーとは?」 debian.org 2017年10月17日時点のオリジナルよりアーカイブ。2018年12月19日閲覧。
  2. ^ 「ソフトウェア配布」。Dell KACE。2015年10月3日時点のオリジナルよりアーカイブ2012年7月11日閲覧。
  3. ^ “dpkg version 0.93.15 source code” . 2015年4月2日時点のオリジナルよりアーカイブ2018年12月19日閲覧。
  4. ^ “*nixパッケージ管理の歴史” . 2017年8月14日. 2021年10月24日時点のオリジナルよりアーカイブ2021年10月12日閲覧。
  5. ^ 「InfoMagicの1994年12月リリースのレビュー」2021年10月29日時点のオリジナルよりアーカイブ2021年10月12日閲覧。
  6. ^ 「Perlとその文化のタイムライン」2013年1月11日時点のオリジナルよりアーカイブ2021年10月29日閲覧。
  7. ^ Ludovic Courtès、「Guixによる機能的パッケージ管理」、Wayback Machineで2020年5月15日にアーカイブ、2013年6月、マドリード、European Lisp Symposium 2013
  8. ^ Tucker, Chris (2007年3月15日). 「OPIUM: 最適なパッケージインストール/アンインストールマネージャ」(PDF) .第29回国際ソフトウェア工学会議 (ICSE'07) . カリフォルニア大学サンディエゴ校. p. 1. doi : 10.1109/ICSE.2007.59 . ISBN 978-0-7695-2828-1. S2CID  1279451 . 2011年6月14日時点のオリジナルよりアーカイブ(PDF) . 2011年9月14日閲覧.
  9. ^ 「Linux リポジトリ分類スキーム」 braintickle.blogspot.com. 2006年1月13日. 2007年10月11日時点のオリジナルよりアーカイブ。 2008年3月1日閲覧
  10. ^ 「CentOS yum pinning rpms」 . centos.org. 2007年11月2日時点のオリジナルよりアーカイブ2008年3月1日閲覧。
  11. ^ a b「pacman(8) マニュアルページ」 . archlinux.org . 2019年8月31日時点のオリジナルよりアーカイブ2008年3月1日閲覧。
  12. ^ 「特定のバージョンのパッケージをインストールしたままにする方法(複雑)」 debian.org。2019年11月14日時点のオリジナルよりアーカイブ2008年3月1日閲覧。
  13. ^ “Apt pinning to blacklist a package” . 2011年7月22日時点のオリジナルよりアーカイブ2010年8月19日閲覧。
  14. ^ “Pacman/Rosetta – ArchWiki” . wiki.archlinux.org . 2016年11月20日時点のオリジナルよりアーカイブ2017年9月17日閲覧。
  15. ^ "documentation/sles11" . en.opensuse.org . 2022年12月1日時点のオリジナルよりアーカイブ2017年8月16日閲覧。
  16. ^ 「XBPS パッケージマネージャ - Void Linux ハンドブック」 . docs.voidlinux.org . 2023年1月23日時点のオリジナルよりアーカイブ。 2022年12月19日閲覧
  17. ^ “swupd-client/swupd.1.rst at master: clearlinux/swupd-client” . GitHub.com . 2022年12月7日時点のオリジナルよりアーカイブ。 2022年6月22日閲覧
  18. ^ Eelco Dolstra、「ソフトウェア構築とソフトウェア展開の統合」。2019年9月21日アーカイブ。Wayback Machine
  19. ^ 「Brewは、macOSアプリストアの代替として、あなたが知らなかったニーズに応えるものです」 www.msn.com . 2024年5月25日閲覧
  20. ^ a b King, Bertel (2017年3月17日). 「Linuxアプリストアの比較:あなたに最適なのはどれ?」 MUO . 2024年5月25日閲覧
  21. ^ 「パッケージマネージャーとは何ですか?www.debian.org
  22. ^ブライアン・バレット「18種類のマルウェアアプリがいかにしてAppleのApp Storeに潜入したか」Wired
  23. ^ザック・ウィテカー(2019年10月24日)「Google Playからアドウェアに感染したAndroidアプリを数百万人がダウンロードTechCrunch
  24. ^ニューマン、リリー・ヘイ。「Google Play以外でAndroidアプリを絶対にダウンロードしてはいけないWired
  25. ^ Ojamaa, Andres; Duuna, Karl (2012). 「Node.jsプラットフォームのセキュリティ評価」 2012年インターネット技術とセキュアトランザクションに関する国際会議IEEE ISBN 978-1-4673-5325-0. 2016年7月22日閲覧
  26. ^ 「npm行動規範:許容されるパッケージコンテンツ」 。 2017年5月9日閲覧
  27. ^ Waters, John K. (2015年9月8日). 「JFrogが『ユニバーサル』アーティファクトリポジトリをリリース」 . ADT Mag . Application Development Trends Magazine. 2016年3月2日時点のオリジナルよりアーカイブ。 2016年2月19日閲覧
  28. ^ Decoster, Xavier (2013年8月18日). 「NuGetエコシステムの概要」 . CodeProject.com . 2020年7月5日時点のオリジナルよりアーカイブ2020年2月6日閲覧。
  29. ^ “Fink – Home” . finkproject.org . 2021年8月18日時点のオリジナルよりアーカイブ2021年9月2日閲覧。
  30. ^ 「パッケージ管理がすべてを変えた方法」 ianmurdock.com。2009年2月23日時点のオリジナルよりアーカイブ2008年3月1日閲覧。
  31. ^ “PackagingCon 2021 – パッケージマネージャー開発者とパッケージ作成者のためのカンファレンス” . packaging-con.org . 2021年9月2日時点のオリジナルよりアーカイブ。 2021年9月2日閲覧