A software package is an archive file containing a computer program as necessary metadata for its deployment.A software package is an archive file containing a computer program as necessary metadata for its deployment.A software package is an archive file for an package. コンピュータプログラムは、最初にコンパイルおよびビルドする必要があるソースコードである場合があります。 パッケージのメタデータには、パッケージの説明、パッケージのバージョン、依存関係(事前にインストールする必要がある他のパッケージ)などがあります。
パッケージマネージャは、ユーザーのコマンドによってソフトウェアパッケージを見つけ、インストールし、維持またはアンインストールするタスクを担っています。 パッケージ管理システムの代表的な機能には、以下のものがあります。
- ファイル アーカイバと連携してパッケージ アーカイブを抽出する
- チェックサムおよびデジタル証明書をそれぞれ検証してパッケージの完全性と信頼性を確保する
- ソフトウェア リポジトリまたはアプリケーション ストアから既存のソフトウェアを検索、ダウンロード、インストールまたはアップデートする
- 機能によってパッケージをグループ化してユーザーの混乱を軽減する
- 依存関係の管理によりパッケージはそれが必要とするすべてのパッケージと確実にインストールする
- パッケージがインストールされているか確認する。
Challenges with shared librariesEdit
Computer systems that rely on dynamic library linking instead of static library linking, which shares executable libraries of machine instructions across packages and applications. これらのシステムでは、ライブラリの異なるバージョンを必要とする異なるパッケージ間の複雑な関係は、俗に「依存性地獄」として知られる課題となっています。 Microsoft Windowsシステムで、ダイナミックリンクされたライブラリを扱う場合、これは「DLL地獄」とも呼ばれます。 このようなシステムでは、パッケージの適切な管理が不可欠です。 OPENSTEP の Framework システムはこの問題を解決する試みで、複数のバージョンのライブラリを同時にインストールできるようにし、ソフトウェアパッケージがどのバージョンに対してリンクされているかを指定できるようにしました。 例えば、ローカル管理者はパッケージ化されていないソースコードをダウンロードし、それをコンパイルし、インストールすることがあります。 この場合、ローカルシステムの状態がパッケージマネージャのデータベースの状態と同期しなくなることがあります。 ローカル管理者は、いくつかの依存関係を手動で管理したり、パッケージマネージャに変更を統合するなどの追加措置を取る必要があります。
ローカルでコンパイルされたパッケージがパッケージマネージャに統合されることを保証するツールがあります。 Slackware Linux のように .deb や .rpm ファイルをベースにしたディストリビューションには CheckInstall があり、Gentoo Linux や Arch Linux のようなハイブリッドシステムのようなレシピベースのシステムには、最初にレシピを書いて、パッケージがローカルパッケージデータベースに適合することを確認することができます。 パッケージマネージャは、少なくとも Unix システムではファイルアーカイ ブユーティリティの拡張として生まれたので、通常、設定ファイルにルールを 適用するのではなく、上書きするか保持するかのどちらか一方しかできません。 例外として、カーネルコンフィギュレーション (これが壊れると再起動後にコンピュータが使えなくなります) に適用されるものがあります。 例えば、古い設定ファイルが、無効にすべき新しいオプションを明示的に無効にしていない場合など、設定ファイルの形式が変わると、問題が発生することがあります。 Debian の dpkg のようないくつかのパッケージマネージャは、インストール中に設定 を行うことができます。 他の状況では、例えば多数のコンピュータへのヘッドレスインストールのように、 デフォルトの設定でパッケージをインストールし、その設定を上書きすることが望まし い場合があります。 この種の事前設定されたインストールは、dpkg でもサポートされています。
RepositoriesEdit
システムにインストールすることを許可するソフトウェアの種類を、 ユーザがよりコントロールできるようにするため (そして時には、販売者側の法的あるいは利便性の理由により)、ソフトウェアはしばしば多くのソフトウェアリポジトリからダウンロードされます。
Upgrade suppressionEdit
ユーザがパッケージ管理ソフトウェアとやりとりしてアップグレード を行う場合、実行するアクションのリストをユーザに提示し (通常はアップグレードする パッケージのリストで、おそらく新旧のバージョン番号を与えます)、ユーザが一括して アップグレードを受け入れるか、アップグレードするパッケージを個別に選べる ようにすることが一般的となっています。 多くのパッケージマネージャは、特定のパッケージをアップグレードしないように 設定できますし、ソフトウェアのパッケージャが定義した、重大な脆弱性や不安定 性が以前のバージョンで見つかった場合にのみアップグレードするように設定できま す。 このプロセスはバージョンピニング (version pinning) と呼ばれることもあります。
たとえば、以下のようなものです。
- yum は exclude=openoffice* という構文でこれをサポートしています
- pacman は IgnorePkg= openoffice (両方のケースで openoffice をアップグレードしない)
- dpkg と dselect は hold フラグでこれを部分的にサポートしています。 パッケージ選択において
- APT は複雑な “pinning” メカニズムを通して hold フラグを拡張する (ユーザはパッケージをブラックリスト化することもできる)
- aptitude は “hold” および “forbid” フラグを持つ
- portage はパッケージを通してこれをサポートする。マスク設定ファイル
Cascading package removalEdit
より高度なパッケージ管理機能のいくつかは、対象のパッケージに依存するすべてのパッケージと対象のパッケージのみが依存するすべてのパッケージも削除する、「cascading package removal」機能を提供します。
Action | zypper | pacman | apt | dnf (yum) | portage |
---|---|---|---|---|---|
install package | zypper in PKG |
pacman - - 。S PACKAGE |
apt install PACKAGE |
dnf install PACKAGE |
emerge PACKAGE |
remove package | zypper rm -。RU PKG |
pacman -R PACKAGE |
apt remove PACKAGE |
dnf remove --nodeps PACKAGE |
emerge -... 続きを読むC PACKAGE または emerge --unmerge PACKAGE |
remove package+orphans | zypper rm -u -force-。resolution PKG |
pacman -Rs PACKAGE |
apt autoremove PACKAGE |
dnf remove PACKAGE |
emerge -...c PACKAGE または emerge --depclean PACKAGE |
update software database | zypper ref |
pacman -」とあります。Sy |
apt update |
dnf check-update |
emerge -」。-sync |
show updatable packages | zypper lu |
pacman -Qu |
apt list - 。-upgradeable |
dnf check-update |
emerge -avtuDN --with-bdeps=y @world または emerge --update -- 。ふり @world |
delete orphans+config | zypper rm -u |
pacman -Rsn $(pacman -)Qdtq) |
apt autoremove |
dnf erase PKG |
emerge --depclean |
show orphans | zypper pa - 。-orphaned --unneed |
pacman -Qdt |
package-cleanup --quiet --leaves --exclude-bin |
emerge - 。caD または emerge --depclean --pretend |
|
update all | zypper up |
pacman - 。Syu |
apt upgrade |
dnf update |
emerge --update --deep --with-bdeps=y @world |
The Arch Linux Pacman/Rosetta wiki には幅広い概要が載っています。