apt-getで使用するために絶対パスでダウンロードしたファイル名をwget


2

オフラインのマシンを更新する方法を探しています。そのために私が使用してこの説明見つかっ--print-のURIからをapt-get。新しいパッケージ(および依存関係)を正常にインストールしました。とても便利な。

ただし、前のリンクで説明した方法を使用してパッケージリストを更新しようとすると、すべての名前が付いた一連のファイルになりましたPackages.bz2.*。ここで、*値は1〜23になります。結果のファイルをにコピーし/var/lib/apt/lists/ます。

wgetを使用してファイルをダウンロードする方法はありますが、apt-getが元々使用していたものと同じ名前(またはなるべく同じ名前)のPackages.bz2を呼び出す代わりに、archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packagesそれらを抽出するときに読みやすい名前のままになります。

それをした後、更新を見つけるためにapt-getを取得するために私がしなければならないことは他にあります(私はurisを出力してパッケージをインストールするアップグレードを行うつもりです)。


実行例:

sudo apt-get update --print-uris -y > update.list

これにより、次のような行を含むファイルが作成されます。

'http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-amd64/Packages.bz2' security.ubuntu.com_ubuntu_dists_trusty-security_main_binary-amd64_Packages 0 :
'http://security.ubuntu.com/ubuntu/dists/trusty-security/restricted/binary-amd64/Packages.bz2' security.ubuntu.com_ubuntu_dists_trusty-security_restricted_binary-amd64_Packages 0 :

この形式はwgetに渡すことができないため、実行することでURLを抽出します(リンクされたページに示されているように、前のコマンドで直接実行できます)。

cat update.list | grep ^\' | cut -d\' -f2 > update.cut

次に、次のような行を含むファイルを取得します。

http://security.ubuntu.com/ubuntu/dists/trusty-security/main/binary-amd64/Packages.bz2
http://security.ubuntu.com/ubuntu/dists/trusty-security/restricted/binary-amd64/Packages.bz2

オプション--input-fileを使用して、これをwgetにフィードできるようになりました。私は実行しました:

mkdir lists
cd lists
wget --input-file ../update.cut

lsショー:

Packages.bz2     Packages.bz2.14  Packages.bz2.2   Packages.bz2.4  Translation-en.bz2     Translation-en.bz2.4
Packages.bz2.1   Packages.bz2.15  Packages.bz2.20  Packages.bz2.5  Translation-en.bz2.1   Translation-en.bz2.5
Packages.bz2.10  Packages.bz2.16  Packages.bz2.21  Packages.bz2.6  Translation-en.bz2.10  Translation-en.bz2.6
Packages.bz2.11  Packages.bz2.17  Packages.bz2.22  Packages.bz2.7  Translation-en.bz2.11  Translation-en.bz2.7
Packages.bz2.12  Packages.bz2.18  Packages.bz2.23  Packages.bz2.8  Translation-en.bz2.2   Translation-en.bz2.8
Packages.bz2.13  Packages.bz2.19  Packages.bz2.3   Packages.bz2.9  Translation-en.bz2.3   Translation-en.bz2.9

この時点以降、リンクしたサイトでは、/ var / lib / apt / lists /に追加する以外の手がかりはありません。そのために(オフラインマシンにファイルをコピーした後):

sudo rm -R /var/lib/apt/lists/*
bunzip2 Packages.bz2.14
sudo cp Packages.bz2.14.out /var/lib/apt/lists/

しかし、それを行った後、パッケージを検索できないapt-cacheため、何かがおかしいと思われます(Packages.bz2.14.outファイルにパッケージ名0adがリストされていることを確認し、検索しました)。

今のところ、人間が読める名前のwgetダウンロードファイルを取得しようとしています(gpgファイルである必要があると思いますが、名前のためにどのファイルかはわかりません)。

その後、アップグレードとソフトウェアのインストールを行うために、新しいパッケージリストを使用してパッケージ検索を実行できるようにします。gpgファイルが見つからない場合(パッケージが見つからない理由かもしれません)、またはにコピーする前にgpgを確認する必要があります/var/lib/apt/lists/


待つ。パッケージの更新をオフラインで適用しようとしていますが、使用するインターネットがない場合でもパッケージリストを更新する必要があるのはなぜですか?
ブライアム

使用した正確なコマンドを教えてください。指定したリンクにはさまざまなオプションがあります。これをどのくらい正確に実行しましたか?wgetデフォルトで同じ名前を保持する必要があります。
テルドン

@terdon正確なコマンドを追加しました。
ハビエル氏

@Braiam:新しいパッケージをインストールし、アップグレードを実行します。どうやって?同じを使用して、--print-urisダウンロードするdebsのリストを取得し、インターネットに接続している別のマシンからそれらのパッケージをダウンロードします(すでに正常に実行されています)
ハビエル氏

回答:


3

シンプルなアプローチ

インターネットに接続されている別のマシンを使用してターゲットコンピューターをアップグレードする場合sources.list、2台のマシンで同じファイルを使用し、実行してapt-get updateからパッケージリストをコピーできます。

$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.orig
$ sudo mv target_computer_sources.list /etc/apt/sources.list
$ sudo apt-get update

aptリポジトリファイルリストをに保存します。/var/lib/apt/lists/上記のコマンドを実行した/var/lib/apt/lists/後、すべてをターゲットマシンにコピーしてから元のマシンに戻しsources.listます。

$ sudo mv /etc/apt/sources.list.orig /etc/apt/sources.list 

複雑な方法

私は何らかの理由で上記の方法がうまくいかない場合、あなたが提案した方法でそれを行うことができます、あなたはただの出力を解析する必要がありますapt-get update --print-uris。以下は私のLMDEシステムのものですが、考え方は同じです:

$ sudo apt-get update --print-uris -y | head
'ftp://ftp.debian.org/debian/dists/testing/main/source/Sources.bz2' ftp.debian.org_debian_dists_testing_main_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/contrib/source/Sources.bz2' ftp.debian.org_debian_dists_testing_contrib_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/non-free/source/Sources.bz2' ftp.debian.org_debian_dists_testing_non-free_source_Sources 0 :
'ftp://ftp.debian.org/debian/dists/testing/InRelease' ftp.debian.org_debian_dists_testing_InRelease 0 
'http://packages.linuxmint.com/dists/debian/main/source/Sources.bz2' packages.linuxmint.com_dists_debian_main_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/upstream/source/Sources.bz2' packages.linuxmint.com_dists_debian_upstream_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/import/source/Sources.bz2' packages.linuxmint.com_dists_debian_import_source_Sources 0 :
'http://packages.linuxmint.com/dists/debian/main/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_main_binary-amd64_Packages 0 :
'http://packages.linuxmint.com/dists/debian/upstream/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_upstream_binary-amd64_Packages 0 :
'http://packages.linuxmint.com/dists/debian/import/binary-amd64/Packages.bz2' packages.linuxmint.com_dists_debian_import_binary-amd64_Packages 0 :

上記の出力では、1番目のフィールドはURLで、2番目はファイルが保存される名前です。前述したように、aptリポジトリファイルリストをに保存します。/var/lib/apt/lists/これを確認するにlocateは、上記の2番目のフィールドのいずれかを実行します。

$ locate packages.linuxmint.com_dists_debian_main_source_Sources
/var/lib/apt/lists/packages.linuxmint.com_dists_debian_main_source_Sources

したがって、これらの各リストをダウンロードして更新する場合は、の出力を解析し、2番目のフィールドを出力名として使用するapt-get update --print-urisように指示する必要がありますwget

$ sudo apt-get update --print-uris -y | sed "s/'//g" | cut -d ' ' -f 1,2 | 
   while read url target; do wget $url -O ./$target; done 

これにより、各パッケージリストがダウンロードされ、適切な名前を使用して現在のディレクトリに保存されます。これで、これらのファイルを/var/lib/apt/lists/ターゲットマシンのディレクトリにコピーできます。


まさに、それが私ができることです。私ができないのは、パッケージリストの更新です。これは、アップグレードを確認するために必要です。(シャットダウンではなく)オフラインになっている最新のシステムで、1週間後に更新するパッケージがあるかどうかを知りたいとします。これを行うには、packahesリストを更新する必要があり(これは実行できません)、アップグレードを実行します(アップグレードを行ったことはありませんが、説明したとおりに新しいパッケージをインストールできます。これは同じはずです)。パッケージリストの更新に問題があります。
ハビエル氏

@JavierMrは更新された回答を参照してください。
テルドン

両方のsources.listファイルを同一にする必要があるのはなぜですか?この方法の利点は、インターネットに接続しているマシンが同じディストリビューション(またはOS)である必要がないことだと思いました。ダウンロードされます。
ハビエル氏

それはあなたが接続されたマシンからターゲットマシンのソースを更新したい場合は、パッケージをダウンロードするための本当@JavierMr、その後、接続された一方で、同じソースを持っている必要があります。そうしないと、間違ったリストを更新することになります。
テルドン

理由はまだわかりません。つまり、オフラインマシンがダウンロードするURLを生成し、接続されたマシンが.bz2ファイルをダウンロードしました(できる限りオフラインマシンが行うように)。その後、それらのファイルが抽出され、オフラインマシンの正しい場所に配置された場合、なぜうまくいかないでしょうか?「間違ったリストを更新します」というメッセージが表示されません。とにかく、あなたはあなたの答えが質問のタイトルを解決しました、パッケージリストの更新は範囲外ですので、私は答えを受け入れました。ありがとう。
ハビエル氏

0

これは、実行したいことに直接適用されない場合があります。ただし、wgetダウンロードしたファイルのパスが保存されていないように見えるため、Directory Optionを使用することをお勧めします-x

-x
--force-directories
       The opposite of -nd---create a hierarchy of directories, even if
       one would not have been created otherwise.  E.g. wget -x
       http://fly.srk.fer.hr/robots.txt will save the downloaded file to
       fly.srk.fer.hr/robots.txt.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.