インストール手順を回避するために、特定のパッケージのインストール ディレクトリを別のコンピューターに転送できますか?

インストール手順を回避するために、特定のパッケージのインストール ディレクトリを別のコンピューターに転送できますか?

Linux マシンにパッケージを 1 つインストールしましたが、同じパッケージを別の Linux マシンにインストールしたいと考えています。インストールしたディレクトリを 1 台のコンピューターから別のコンピューターに直接コピーできますか? つまり、インストール ディレクトリを複製するということです。

答え1

APT/DPKGでインストールされたソフトウェアの検討

Ubuntu を含むほとんどの Linux システムでは、パッケージのインストール ディレクトリは 1 つではありませんが、サードパーティ ソフトウェアではすべてのファイルが 1 つのディレクトリに存在する場合があります。

代わりに、パッケージには複数のファイルシステムの場所に配置されている一連のファイルが含まれています。whereisパッケージを実行すると、その主要部分を含むディレクトリが表示されます。

$ whereis gimp
gimp: /usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

gimp には少なくとも/usr/bin/usr/lib、のファイルがあり/etc/usr/shareそのすべてに他のパッケージに属する多くのファイルが含まれていることがわかります。

dpkg-query -Lまたは--listfilesオプションを使用して、dpkg が認識しているパッケージのファイル リストを読み取ることができます。

$ dpkg --listfiles g++
/.
/usr
/usr/bin
/usr/share
/usr/share/doc
/usr/share/man
/usr/share/man/man1
/usr/bin/g++
/usr/bin/x86_64-linux-gnu-g++
/usr/share/doc/g++
/usr/share/man/man1/g++.1.gz
/usr/share/man/man1/x86_64-linux-gnu-g++.1.gz

g++ パッケージが明らかに親ディレクトリを提供していないにもかかわらず、リストにはすべての親ディレクトリが含まれていることに注意してください (ファイルのみを取得するには、 のように実行できますがfor i in $(dpkg --listfiles g++); do [[ -f "$i" ]] && echo "$i"; done、一部のパッケージのインストールではディレクトリが作成されます)。

非常に小さなファイルのリストg++です...

$ dpkg --listfiles gimp | wc -l
254
$ dpkg --listfiles xkb-data | wc -l
331
$ dpkg --listfiles linux-image-4.10.0-24-generic | wc -l
1312

また、関連するすべてのファイルを別のシステム上の関連するすべての場所にコピーしただけでは、パッケージ マネージャーはそれについて何も認識しないため、パッケージは更新されず、依存関係もインストールされず、デバッグが困難なためまったく機能しない可能性があることも考慮してください。

つまり、APTでインストールできるソフトウェアの場合、APTを使うのが断然一番簡単なインストール方法だということです。各システムでダウンロードする手間を省きたい場合は、インターネットなし(オフライン)でソフトウェアやパッケージをインストールするにはどうすればよいですか?

この分散型のインストール方法はバグだと考える人もいます。そして、多くの人が何らかの対策を講じています。たとえば、パッケージを個別にインストールするディストリビューションを作成したり、依存関係をすべて含めて個別にインストールできる snaps などのクロスプラットフォーム パッケージ ソリューションを発明したりしています。

関連情報