aptを使用してさまざまなディストリビューション用のソフトウェアパッケージをダウンロードする

aptを使用してさまざまなディストリビューション用のソフトウェアパッケージをダウンロードする

.debさまざまなディストリビューションへの依存関係を含むパッケージをダウンロードしたいです。

当社には、Ubuntu 11.04、11.10、12.10、Debian 5、6など、多くのLinuxシステムがあります。

完全な依存関係ツリーをダウンロードするコマンドはですapt-get -d install package

私は現在Debian 6(squeeze)を使用しており、同じディストリビューションのパッケージダウンロードがうまくいきます。ダウンロードしようとしています(いいえsources.list私のソースをDebian 5(lenny)ソース)パッケージツリーに変更してインストールしました。

ただし、次のエラーが発生します。

# apt-get -d install python-lxml
...
The following packages have unmet dependencies:
 python-lxml : Depends: python (< 2.6) but 2.6.6-3+squeeze7 is to be installed
E: Broken packages

各ディストリビューションに対して異なるオペレーティングシステムを実行すると、12台以上のマシンが作成されます。私はより明確な解決策を探しています。

どんな提案がありますか?

答え1

APTの重要な作業は、依存関係を解決することです。したがって、依存関係について不平を言ってもそれを非難することはできません。

パッケージデータベースが混在しないように、別の構成で呼び出す必要があります。各ディストリビューションごとに別々apt.confのファイルを保管してくださいsources.list

apt-get -o Dir::Etc::Main=/path/to/precise/apt.conf -d …

そしてapt.conf少なくとも含まれています

Dig::State::status "/path/to/precise/status";
APT::Get::Download-Only "true";

/etc/aptディレクトリ内の一部のファイルをシンボリックリンクまたはコピーする必要があります/path/to/precise(その内容によって異なります)。

スタンバイ・データベースを渡すときに apt-get を root として実行しない。システムを変更するためのアクセス権がある場合は、apt-get誤って何かを誤って設定したり、シャットダウンしたりすると、-dシステムが深刻に混乱する可能性があります。apt-getルートを含まないコンテンツのみをダウンロードする限り、必要な権限でのみ実行してください。キャッシュディレクトリ/var/cache/aptとその内容に書き込むには十分な権限が必要です。これを行うには、グループを作成し、addgroup aptcache; chgrp -R aptcache /var/cache/apt; chmod -R g+w /var/cache/aptここに自分自身を追加することをお勧めします。

答え2

これらのパッケージをダウンロードした後は、このパッケージで何をしたいのかわかりにくいことが本当に役に立ちます。

後で別のコンピュータにインストールするためにこれらのパッケージをダウンロードしてローカルに保持するには、次のコマンドを使用して各展開の部分的な適切なストレージを作成することをお勧めします。レプリカ。会社にDebian / Ubuntuシステムが多い場合は、とにかくこれを実行したいかもしれません。

私の環境には、リポジトリにpython xmlrpcサーバーがあり、クライアントはリポジトリdpkg --get-selectionsの部分パッケージのリストとマージする出力を送信してローカルリポジトリを同期状態に保つのに役立ちます。とてもシンプルなスクリプトなので、時間があればgithubに投稿します。

ダウンロード後にローカルコンピュータでこれらのパッケージを使用する必要があり、そのパッケージが使用しているシステム用に構築されていない場合は、次のものを使用できます。シュルート。このschrootパッケージを使用すると、各ディストリビューションを実行してchrootコードやその他の必要なタスクをテストできます。

答え3

すべてのシステムを最新の状態に保ち、セキュリティ上の問題にパッチを適用するのに5倍の時間と労力を費やすことを特に気にしない限り、1つのディストリビューションを選択してネットワークに強制することを決定することを本当にお勧めします。

少なくともDebian Lennyは死んだと宣言されました。ほぼ1年前-- ないだろうはい追加のセキュリティアップデート。実行し続けるのがどれほど悪い考えかを言う必要はありません。

私はUbuntuのライフサイクルについてはよくわかりませんが、04/11のバリエーションはもはや最新の状態ではないと確信しています。

さらに、要求された操作を実行しても、誤ってシステムをひどい混乱に陥らせる可能性がある内部保護を意図的に無効にしました。

実際にこれらのディストリビューションをすべて実行する必要がある場合は、各適切なキャッシュhttpプロキシを使用するように指示することをお勧めします。イカ帯域幅使用量を最小限に抑え、外部世界との接触を最小限に抑えるために中央サーバーに設定します。

答え4

パッケージをダウンロードしてそこからインポートしたいディストリビューションのDockerイメージを使用できます。依存関係に対する回答を入手するここから

# Get the distro image of choice
docker pull debian:stretch-slim

# Run the image binding the current (host) directory to container
docker run -it --mount type=bind,source="$(pwd)",target=/packages debian:stretch-slim bash

ドッカープロンプトで

# Change to the packages directory
cd packages

# Update your packages list
apt update

# Define what packages (and their dependencies) you want to download
PACKAGES="wget unzip"

# Downloads to `/packages` i.e. your PWS on host
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  --no-pre-depends ${PACKAGES} | grep "^\w")
exit

関連情報