私は家にDebian Linuxを実行しているコンピュータがいくつかあり、パッケージシステムの部分イメージを作成したいと思いました。完全なミラーを作成することを検討しましたが、ほとんどのパッケージを使用しません。しかし、私が見つけたほとんどの部分ミラーリングソリューションでは、パッケージを設定ファイルに手動で配置する必要があります。クライアントにパッケージをインストールするときにローカルサーバーがパッケージをダウンロード/更新できるように部分ミラーを使用する方法はありますか?
また、Ubuntuをサポートすることもできます(一部のUbuntu VMがあります)。
ありがとうございます!
答え1
やるべきことがいくつかありますが、Debian の完全なミラーを作成したくないことを理解しています。もちろん、彼らは全体のイメージをすべてのアーキテクチャとすべてのバージョンとして定義します。
より小さいサブセットを使用しますが、それはまだ希望よりも大きいですapt-mirror
。これにより、必要に応じて単一のバージョンとアーキテクチャに調整できます。 https://apt-mirror.github.io/
ただし、実際に必要なのは、パッケージを初めてダウンロードするときにキャッシュしてネットワーク上のすべてのコンピュータで使用できるようにすることです。クライアントとミラーサーバーの間にプロキシを配置することでこれを行うことができ、ローカルのapt-cacher-ng
Debian/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/)リポジトリ全体をミラーリングせずに、パッケージのサブセットとユーザーが指定した依存関係のみをミラーリングして、正確な問題を解決するようです。
まだテストしていませんが、有望に見えます。