Debian パッケージングシステムの自動部分イメージを作成するには?

Debian パッケージングシステムの自動部分イメージを作成するには?

私は家にDebian Linuxを実行しているコンピュータがいくつかあり、パッケージシステムの部分イメージを作成したいと思いました。完全なミラーを作成することを検討しましたが、ほとんどのパッケージを使用しません。しかし、私が見つけたほとんどの部分ミラーリングソリューションでは、パッケージを設定ファイルに手動で配置する必要があります。クライアントにパッケージをインストールするときにローカルサーバーがパッケージをダウンロード/更新できるように部分ミラーを使用する方法はありますか?

また、Ubuntuをサポートすることもできます(一部のUbuntu VMがあります)。

ありがとうございます!

答え1

やるべきことがいくつかありますが、Debian の完全なミラーを作成したくないことを理解しています。もちろん、彼らは全体のイメージをすべてのアーキテクチャとすべてのバージョンとして定義します。

より小さいサブセットを使用しますが、それはまだ希望よりも大きいですapt-mirror。これにより、必要に応じて単一のバージョンとアーキテクチャに調整できます。 https://apt-mirror.github.io/

ただし、実際に必要なのは、パッケージを初めてダウンロードするときにキャッシュしてネットワーク上のすべてのコンピュータで使用できるようにすることです。クライアントとミラーサーバーの間にプロキシを配置することでこれを行うことができ、ローカルのapt-cacher-ngDebian/Ubuntu/Mint/etcシステムを指すプロキシ/ウェブサーバーコンボがあります(もちろん、最新バージョンもいくつかあります)。ここに。http://xmodulo.com/apt-caching-server-ubuntu-debian.html

答え2

私は専門家ではありませんが、似たようなことをしたことがあります。完全自動ではありませんが、いくつかのコマンドを入力するだけです。

まず、使用しているリストを取得します(すべてのシステムが同じアーキテクチャを持っているとします)。

$ apt list --installed > install.list

次に、人間が読める形式に変換します。

$ sed -r  's/ \[.*?\]//g' install.list | sed -r 's/(^.*?)\/.*?[ ](.*?)[ ](.*?)$/\1:\3=\2/g' > install.list.to.dl

次に、現在のパッケージバージョンをダウンロードします。

$ xargs apt download < install.list.to.dl

これにより、現在インストールされているすべての debs が現在のディレクトリにダウンロードされます。

このフォルダをaptのソースとして追加するには、Packages.gzファイルを作成する必要があります。例えば

$ cd ~/deb_server/debs/
$ dpkg-scanpackages -m . /dev/null | gzip -9c >  Packages.gz  

編集:dpkg-scanpackagesパスは相対パスでなければなりません。それ以外の場合、後でダウンロードプロセスが中断されます。

(-mを使用すると複数のバージョンを持つことができます。最新バージョンが必要な場合は-mを削除してください。)

これでファイルサーバー(apache2など)を起動し、ファイルを索引付けするように構成する必要があります。

/etc/apache2/sites-enabled/000-debserver.conf

含む:

 DocumentRoot /var/www
   <Directory /var/www/>
     Options +Indexes +FollowSymLinks
     Require all granted
   </Directory>

最後に、debフォルダを/var/wwwにシンボリックリンクする必要があります。 (または現在の deb ダウンロード場所でサーバーを構成します。)

$ ln -s ~/deb_server/debs/ /var/www/repo

最後の作業は、サーバーシステムを各ターゲットシステムの適切な更新の唯一のソースとして追加することです。

$ deb [trusted=yes] http://deb_server_ip/repo /

パッケージを更新するには、apt downloadを再実行してリストを表示する必要がありますが、バージョンは表示されません。

$ sed -r  's/ \[.*?\]//g' install.list | sed -r 's/(^.*?)\/.*?[ ](.*?)[ ](.*?)$/\1:\3/g' > install.list.for.update

$ apt update && xargs apt download < install.list.for.update

Packages.gzを更新してください。

これが最善のアプローチであるかどうかはわかりませんが、私にとっては効果的です。

答え3

私は、複数のコンピュータに同じコンテンツを配布できるように、適切なリポジトリでパッケージと依存関係を制御するソリューションを探していました。私はこれがクライアントとサーバーを同期したままにしたい状況に似ていると思います。

偶然出会いました(https://www.aptly.info/)リポジトリ全体をミラーリングせずに、パッケージのサブセットとユーザーが指定した依存関係のみをミラーリングして、正確な問題を解決するようです。

まだテストしていませんが、有望に見えます。

関連情報