インターネットに接続していないマシンにパッケージをインストールしようとしています。私がやりたいのは、すべてのパッケージとインターネットに接続されたマシンへの依存をダウンロードしてから、すべてをオフラインコンピューターにスニーカーネットします。
私はapt-get
およびapt-cache
しかし、私はパッケージと依存関係を自分の選んだディレクトリに一気にダウンロードするための迅速で簡単な方法を見つけていません。どうすればいいですか?この問題について正しく対処していますか?多くの依存関係があるオフラインパッケージをどのようにインストールしますか?
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
マークされた回答には、ダウンロードを実行しているマシンで使用可能なパッケージがターゲットマシンと異なる可能性があり、そのためパッケージセットが不完全であるという問題があります。
これを回避し、すべての依存関係を取得するには、次を使用しています。
apt-get download $(apt-rdepends <package>|grep -v "^ ")
同じ質問がすでにここで答えられています: debianパッケージの再帰的な依存関係をリスト/ダウンロードする方法?
試してください:
PACKAGES="wget unzip"
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")
aptitude --download-only ...
アプローチは、手元にインターネット接続があるdebianディストリビューションがある場合にのみ機能します。
そうでない場合は、切断されたdebianマシンで次のスクリプトを実行することをお勧めします。
apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list
downloads.listファイルを接続されたLinux(またはLinux以外)マシンに移動し、次を実行します:
wget --input-file myurilist
これにより、すべてのファイルが現在のディレクトリにダウンロードされます。その後、USBキーにコピーして、切断されたdebianマシンにインストールできます。
クレジット: http://www.tuxradar.com/answers/517
PS私は基本的にブログの記事をコピーしました。なぜなら、それはあまり読めなかったので、そして投稿が消える場合に備えて。
私のために働いた方法をいくらか単純化した(そして私のために働いたもの)(上記すべてに基づいて)
依存関係の階層は1レベルよりも深くなる可能性があることに注意してください
パッケージの依存関係を取得します
$ apt-cache depends mongodb | grep Depends:
Depends: mongodb-dev
Depends: mongodb-server
URLを取得:
Sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-Shell mongodb-org-tools | grep "http://" | awk '{print$1}' | xargs -I'{}' echo {} | tee files.list
wget --input-file files.list
これにより、すべてのDebsが現在のディレクトリにダウンロードされ、候補が見つからない場合は失敗しません。
Sriptを実行するのにSudoも必要ありません!
nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh
#!/bin/bash
package=ssmtp
apt-cache depends "$package" | grep Depends: >> deb.list
sed -i -e 's/[<>|:]//g' deb.list
sed -i -e 's/Depends//g' deb.list
sed -i -e 's/ //g' deb.list
filename="deb.list"
while read -r line
do
name="$line"
apt-get download "$name"
done < "$filename"
apt-get download "$package"
注:実際にSSMTPのDL Depsを試みており、debconf-2.0で失敗したため、これを例として使用しましたが、このスクリプトで必要なものが得られました。
apt-cache depends package
すべての必要なパッケージを取得するためを使用しました既にシステムにインストールされているかどうか。したがって、常に正しく動作します。
コマンドapt-cacheの動作は言語によって異なるため、システムでこのコマンドを試して、コマンドを調整する必要があります。 apt-cacheはパッケージに依存します
englischシステムでは次のようになります。
$ apt-cache depends yourpackage
node
Depends: libax25
Depends: libc6
ドイツのシステムでは次のようになります:node
Hängt ab von: libax25
Hängt ab von: libc6
次の用語を含む英語版:
"Depends:
"
このコマンドで用語「yourpackage
」を希望するものに2回変更する必要があります。これに注意してください!
$ Sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep " Depends:" | sed 's/ Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list
そしてドイツ語版の用語:
"Hängt ab von:
"
このコマンドで用語「yourpackage
」を希望するものに2回変更する必要があります。これに注意してください!
このテキストは、このコマンドで2回使用されます。言語に合わせて調整する場合は、この点に注意してください。
$ Sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" | sed 's/ Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list
downloads.listでリンクのリストを取得します
リストを確認し、フォルダーに移動してリストを実行します。
$ cd yourpathToYourFolder
$ wget --input-file downloads.list
必要なパッケージはすべて次の場所にあります。
$ ls yourpathToYourFolder
私はあなたが素敵な太いUSB HDとネットへの良好な接続を持っていると仮定しています。 apt-mirrorを使用して、本質的に独自のdebianミラーを作成できます。
これにより、すべてのパッケージと依存関係(まだインストールされていない)が選択したディレクトリにダウンロードされます。
Sudo apt-get install -d -o Dir::Cache=/path-to/directory/apt/cache -o Dir::State::Lists=/path-to/directory/apt/lists packages
/path-to/directory/apt/cache
および/path-to/directory/apt/lists
が存在することを確認してください。 -o Dir::Cache
を設定しない場合、/var/cache/apt
を指し、Dir::State::Lists
は/var/lib/apt/lists
を指します(使用可能なパッケージのインデックスファイルを保持します)
両方の-o
オプションは、インストールの代わりに更新およびアップグレードで使用できます。
別のマシンで「-d
」なしで同じコマンドを実行します