web-dev-qa-db-ja.com

インストールスクリプトはapt-getinstallで何をしますか?

そうみたいです apt-get installはDebianパッケージをダウンロードし、次のインストールスクリプトを実行しようとします。

  • 適切なディレクトリを作成する
  • 適切なアカウントを作成する
  • バイナリファイルをコピーする
  • データファイルをコピーする
  • 会議ファイルをコピーする
  • Init.dスクリプトをコピーします
  • サービス開始
  • 等.

私は本当にそれに興味があり、何が起こっているのかを段階的に理解したいと思っています。それを見る方法はありますか? 「ドライラン」モードでのシェルコマンドの印刷のように?

14
ShenLei

要するにapt-get installは、システムが新しくインストールされたソフトウェアアプリケーションを正常に実行できるようにするために必要なすべてを実行します。

長いバージョン:

予備知識:

manpage から:

インストール用に指定されたパッケージに必要なすべてのパッケージも取得され、インストールされます。

これらのパッケージは、ネットワーク(インターネット)のリポジトリに保存されます。したがって、apt-getは、必要なすべてのパッケージを一時ディレクトリ(/var/cache/apt/archives/)にダウンロードします。それらは、Webサーバーまたはftpサーバーからダウンロードされます。それらはいわゆるsources.listで指定されます。パッケージマネージャーaptのリポジトリのリスト。それ以降、手続き的に1つずつインストールされます。

最初にインストールされるのは、それ以上の依存関係がないものです。したがって、正しく機能するために他のパッケージをインストールする必要はありません。これにより、他のパッケージ(以前は依存関係があった)は依存関係を失いました。指定されたパッケージがインストールされるまで、システムはそのプロセスを繰り返し実行し続けます。

各パッケージにはインストール手順があります。

パッケージのインストール手順:

UbuntuやMintなどのDebianベースのLinuxディストリビューションでは、これらのパッケージは、deb-> Debianバイナリパッケージ形式 と呼ばれる指定された標準化された形式になっています。

このようなパッケージには、システムにインストールされるファイルが含まれています。また、 制御ファイル が含まれています。そのファイルには、パッケージングシステムが特定の状況で実行する必要のあるスクリプトが含まれています。いわゆる メンテナスクリプト 。これらのスクリプトは次のように分割されています。

  • preinst:システムのファイル階層にファイルをインストールする前
  • postinst:インストール後
  • prerm:アンインストール前
  • postrm:アンインストール後

これらのスクリプトは、特定のユーザーが作成される場所、再起動が必要なサービス、またはパッケージが機能するために必要なその他の予備的な場所です。

これらのスクリプトに加えて、パッケージシステムには特定のイベントを対象とした triggers があります。たとえば、新しいカーネルバージョンまたはldconfigまたはman-dbをインストールするときのinitrdの再生成。これらは1つ以上のパッケージによってアクティブ化され、インストールプロセス全体の最後に実行されます。

新しいパッケージのインストール手順を示す興味深い写真があります。

installation

さらに多くの制御ファイルがありますが、最も重要なものは次のとおりです。

興味がある場合は、(ダウンロード後に)debパッケージを手動で解凍し、中身を確認できます。

# to only download the package (no installation)
apt-get download package
# to unpack the deb file
ar x package.deb

これで、ファイルを含むdata.tar.gzというファイルと、4つのメンテナスクリプトと上記の制御ファイルを含むcontrol.tar.gzというファイルが表示されます。

25
chaos