パッケージのオフラインインストール

提供: ArchWiki
2017年9月21日 (木) 09:15時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「www.archlinuxjp.org」を「www.archlinux.jp」に置換)
ナビゲーションに移動 検索に移動

通常の方法: Pacman

この方法は こちらのスレッド への投稿が元になっています。

インターネットにアクセスできるコンピュータでパッケージデータベースをダウンロードして他のコンピュータに転送します。必要ならば、ARCHx86_64 に、MIRRORミラーリスト に記載されているミラーに置き換えてください。

#!/bin/bash

ARCH='i686'
MIRROR='https://mirrors.kernel.org/archlinux/'

wget "${MIRROR}/community/os/${ARCH}/community.db"
wget "${MIRROR}/core/os/${ARCH}/core.db"
wget "${MIRROR}/extra/os/${ARCH}/extra.db"
if [ "$ARCH" == "x86_64" ]; then
  wget "${MIRROR}/multilib/os/${ARCH}/multilib.db"
fi

以下のステップは pacman -Sy を実行したときのようにパッケージリストが最新の状態で行います。

*.db ファイルをオフラインの PC に転送したら、以下のコマンドを実行:

# cp *.db /var/lib/pacman/sync/
# pacman -Sp --noconfirm package-name > pkglist
ヒント: /etc/pacman.d/mirrorlist ファイルでサーバーが有効になっていることを確認してください。有効になっていないと次のようなエラーメッセージが表示されます: error: no database for package: package-name

インストール直後の新しい Arch Linux ベースシステムをアップデートするには:

# pacman -Sup --noconfirm > pkglist

それからエディタでテキストファイルを開いて URL 以外の行を全て削除してください。そしてインターネットに接続できるマシンにリストをコピーして手動でパッケージをダウンロードするか wget で空のディレクトリに保存します:

# wget -nv -i ../pkglist
ヒント: cygwin などの Windows 環境を使用してパッケージをダウンロードするとファイル名がおかしくなります。Windows のファイルの命名規則ではコロンなどをエスケープする必要があるためです。そのような場合は wget --restrict-file-names=unix を使ってください。

*.pkg.tar.gz ファイルを全てオフラインのマシンにコピーしたら、/var/cache/pacman/pkg に配置して以下のコマンドを実行してください:

# pacman -S package-name

単純な例

ダウンロードしたパッケージをインストールするには:

# pacman -U /root/Download/packagename.tar.gz

ディレクトリに保存した複数のパッケージをインストールするには:

# pacman -U /root/Download/*.tar.gz

少し工夫した例

シナリオ: インターネット接続が出来る 'Al' とインターネットに接続できない 'Bob' という2台の Arch Linux マシンが存在して、nvidia パッケージと依存パッケージを 'Bob' に依存する必要がある場合。インストールしたいパッケージは nvidia, nvidia-utils, xf86-video-nouveau ですが /var/cache/pacman/pkg/ の代わりに専用のリポジトリを使って nvidia という名前の専用のリポジトリを使いたいとします。

ダウンロードするパッケージのリストを生成

最新のリポジトリデータベースがある Arch Linux マシンで、必要なパッケージのリンクのリストを作成するには:

# pacman -Sp nvidia nvidia-utils xf86-video-nouveau > /path/to/nvidia.list

nvidia.list ファイルには指定したパッケージのリンクと Al にまだインストールされていない依存パッケージのリンクが記載されます。キャッシュを削除しないかぎりインストールしたパッケージはキャッシュディレクトリに存在します。/etc/pacman.conf でキャッシュディレクトリを確認できます (例: /var/cache/pacman/pkg/)。

パッケージと依存パッケージをダウンロードしてコピー

インターネット接続が必要です。'Al' で /path/to/nvidia というディレクトリを作成して以下のコマンドを実行:

# wget -P /path/to/nvidia/ -i /path/to/nvidia.list

それからキャッシュからインストール済みの依存パッケージをコピーします。https://www.archlinux.jp/packages/ を閲覧して手動で確認するかパッケージのキャッシュの合計容量が大きくない場合は全てのパッケージをコピーしてください:

# cp /var/cache/pacman/pkg/* /path/to/nvidia/

パッケージのためのリポジトリデータベースを作成

'Al' あるいは 'Bob' で (pacman に含まれている) repo-add コマンドを使うことで作成できます。まずパッケージをダウンロードした /path/to/nvidia ディレクトリに移動して、nvidia.db.tar.gz という名前でデータベースファイルを作成してください:

$ cd /path/to/nvidia
# repo-add nvidia.db.tar.gz *.pkg.tar.xz

パッケージの転送

全てのパッケージをダウンロードしたら、'Al' はもう必要ありません。/path/to/nvidia の中身を 'Bob' の一時的なパッケージキャッシュディレクトリにコピーしてください。ここでは例として /home/me/nvidia というディレクトリを使います:

$ cp /path/to/nvidia/* /home/me/nvidia

次に、pacman からパッケージの新しいリポジトリを使えるようにします。まず現在の pacman.conf をコピー:

# cp /etc/pacman.conf /etc/pacman.conf.old

リポジトリに署名は追加しないため /etc/pacman.conf の設定で SigLevel は Never に設定します:

SigLevel = Never

それから pacman.conf の末尾に以下の行を追加:

[nvidia]
Server = file:///home/me/nvidia

インターネットからパッケージがダウンロードされないように他のリポジトリをコメントアウトする必要があるかもしれません。その後 pacman で作成した nvidia リポジトリを同期します:

# pacman -Sy 

上記のコマンドで /home/me/nvidianvidia.db.tar.gz ファイルが認識され /var/lib/pacman/sync/nvidia に伸長されて nvidia リポジトリに含まれているパッケージのデータベースが作成されます。

パッケージのインストール

最後にパッケージをインストールします:

# pacman -S nvidia nvidia-utils xf86-video nouveau

オンラインソースの復元

Bob をオンラインにするときは前に作成しておいた /etc/pacman.conf.old/etc/pacman.conf を置き換えてオンラインのリポジトリを使えるようにします。

ソース

Heller_Barbebyte に感謝します。