「オフラインインストール」の版間の差分
(TranslationStatus) |
(参照を追加) |
||
(他の1人の利用者による、間の4版が非表示) | |||
1行目: | 1行目: | ||
[[Category:ライブ Arch システム]] |
[[Category:ライブ Arch システム]] |
||
[[Category:Arch の入手とインストール]] |
[[Category:Arch の入手とインストール]] |
||
+ | [[cs:Offline installation]] |
||
[[en:Offline installation]] |
[[en:Offline installation]] |
||
[[ru:Offline installation]] |
[[ru:Offline installation]] |
||
[[zh-hans:Offline installation]] |
[[zh-hans:Offline installation]] |
||
+ | この記事では、インターネット接続の無いシステムで Arch Linux をインストールする方法を説明します。これを行うには、インターネット接続のある別のシステムが必要です。 |
||
− | {{Related articles start}} |
||
− | {{Related|パッケージのオフラインインストール}} |
||
− | {{Related articles end}} |
||
− | |||
− | インターネットに接続せずに [[Archiso]] (例えば、[https://archlinux.org/download/ 公式月次リリース]) をそのままインストールしたい場合や、ほしいパッケージを何度もダウンロードしたくない場合: |
||
まず、[[インストールガイド]]を [[インストールガイド#必須パッケージのインストール]] の前まで行ってください (ただし、[[インストールガイド#インターネットへの接続]] はスキップする)。 |
まず、[[インストールガイド]]を [[インストールガイド#必須パッケージのインストール]] の前まで行ってください (ただし、[[インストールガイド#インターネットへの接続]] はスキップする)。 |
||
+ | {{Warning|Arch Linux の ISO からルートファイルシステムイメージ ({{ic|airootfs.sfs}}) を抽出したり、live 環境のルートファイルシステムをコピーしたりするインストール方法はサポートされていません。}} |
||
− | 新しい環境をブートストラップ可能にする方法は主に2つあります: 必要なファイルすべてを持つローカルリポジトリを準備する方法と、archiso からファイルを手動でコピーする方法です。1番目の方法を取ることを強く推奨します。 |
||
− | |||
− | == ローカルリポジトリを使う方法 (推奨) == |
||
− | + | == ローカルリポジトリを準備する == |
|
[[Pacman ヒント#パッケージを CD/DVD や USB スティックからインストールする]] の指示に従って、必要なファイルを含むローカルリポジトリを別のホスト環境上に準備してください。 |
[[Pacman ヒント#パッケージを CD/DVD や USB スティックからインストールする]] の指示に従って、必要なファイルを含むローカルリポジトリを別のホスト環境上に準備してください。 |
||
22行目: | 17行目: | ||
最低限、システムを機能させるには以下のパッケージをインストールすることが推奨されます: |
最低限、システムを機能させるには以下のパッケージをインストールすることが推奨されます: |
||
− | # pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel linux linux-firmware |
+ | # pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel linux linux-firmware mkinitcpio vim |
カスタムのオフラインリポジトリを作成してください: |
カスタムのオフラインリポジトリを作成してください: |
||
28行目: | 23行目: | ||
# repo-add ./custom.db.tar.gz ./*[^sig] |
# repo-add ./custom.db.tar.gz ./*[^sig] |
||
− | + | == マウントと設定 == |
|
リポジトリの準備が済んだら、外部メディアを新しい環境に接続し、新しく作成したルートファイルシステムにメディアをマウントしてください: |
リポジトリの準備が済んだら、外部メディアを新しい環境に接続し、新しく作成したルートファイルシステムにメディアをマウントしてください: |
||
− | # mkdir /mnt/repo |
+ | # mount --mkdir /dev/sd''xy'' /mnt/repo |
− | # mount /dev/sdX /mnt/repo |
||
archiso {{ic|/etc/pacman.conf}} を編集し、新しいセクションを追加してください: |
archiso {{ic|/etc/pacman.conf}} を編集し、新しいセクションを追加してください: |
||
+ | {{hc|/etc/pacman.conf|2= |
||
− | [custom] |
||
+ | [custom] |
||
− | SigLevel = Optional |
||
+ | SigLevel = Optional |
||
− | Server = file:///mnt/repo/ |
||
+ | Server = file:///mnt/repo/ |
||
+ | }} |
||
pacman がデフォルトのリポジトリでエラーを吐かないようにするために、{{ic|[core]}}、{{ic|[extra]}}、{{ic|[community]}} のセクションをコメントアウトしてください。 |
pacman がデフォルトのリポジトリでエラーを吐かないようにするために、{{ic|[core]}}、{{ic|[extra]}}、{{ic|[community]}} のセクションをコメントアウトしてください。 |
||
− | + | == Pacstrap == |
|
これで、ローカルで利用可能なパッケージを新しい環境に pacstrap することができます: |
これで、ローカルで利用可能なパッケージを新しい環境に pacstrap することができます: |
||
− | # pacstrap /mnt base base-devel linux linux-firmware mkinitcpio |
+ | # pacstrap -K /mnt base base-devel linux linux-firmware mkinitcpio vim |
+ | == パッケージのオフラインインストール == |
||
− | === Chroot === |
||
+ | === ファイルからインストールする === |
||
− | 新しいシステムがオフライン、あるいはネットワークから物理的に切り離されたままになることが予想される場合、ローカルリポジトリのみを使うように設定する必要があります。 |
||
+ | ネットワークにアクセスする前にいくつかのパッケージを手動でインストールする必要があり、一時的にオフラインインストールをする場合、ローカルのパッケージをインストールする方法について [[pacman#追加コマンド]] を参照してください。 |
||
− | 新しい環境に chroot して、先に説明したように {{ic|/etc/pacman.conf}} を編集してください (ただし、{{ic|/mnt}} を除いて): |
||
+ | [[シェル]]の[[Wikipedia:ja:グロブ|グロブ]]を使うことで、多くのパッケージを一度にインストールすることができます: |
||
− | [custom] |
||
− | SigLevel = Optional |
||
− | Server = file:///repo/ |
||
+ | # pacman -U /package/folder/*.tar.zst |
||
− | 他のすべてのリポジトリをコメントアウトし、保存してください。通常通り、新しいシステムの設定を続けてください。 |
||
+ | === オフラインキャッシュ === |
||
− | これで、このオフラインのシステムのアップデートは、ローカルリポジトリの最新のコピーを持ってきて、それを {{ic|/repo}} にマウントし、通常通り pacman のコマンドを実行することで行えます。 |
||
+ | 必要なファイルを {{ic|/var/lib/pacman/sync}} と {{ic|/var/cache/pacman/pkg}} に入れることで、検索、更新、そしてインストールすべきものがすべて揃っていると {{ic|pacman}} に認識させることができます。以下の方法は2つのフォーラムスレッドが元になっています: [https://bbs.archlinux.org/viewtopic.php?pid=463238#p463238][https://bbs.archlinux.org/viewtopic.php?id=30431]。 |
||
− | == ファイルをコピーする方法 == |
||
+ | 手順: |
||
− | {{Remove|ルートファイルシステムのイメージを ISO から展開する方法は、サポートされているインストール手段ではありません。この方法のカスタマイズは、インストール済みのシステムには適していません。}} |
||
+ | # インターネットアクセスのあるコンピュータ上で最新のパッケージデータベースをダウンロードする。 |
||
− | {{Accuracy|archiso からファイルをコピーするのではなく、Arch のミラーから手に入る "bootstrap" イメージを対象のディスクに直接展開することができます。archiso を変更する必要はなく、最小のシステムを手に入れることができます。}} |
||
+ | # それらをオフラインのコンピュータへ転送する。 |
||
+ | # オフラインコンピュータからアップデートする必要のあるパッケージのリストを生成する。 |
||
+ | # インターネットアクセスのあるコンピュータ上でそれらのパッケージを署名と共にダウンロードする。 |
||
+ | # それらをオフラインのコンピュータの pacman キャッシュへ転送する。 |
||
+ | # 更新をインストールする。 |
||
+ | {{Tip|デフォルトのリポジトリをデフォルト (core、extra、community、multilib) から変更した場合、{{ic|/etc/pacman.conf}} ファイルを確認しておくべきです。}} |
||
− | {{Out of date|複数のファイル (カーネル、mkinitcpio フック、設定ファイル、journald 設定ファイル、choose-mirror スクリプトなど) の名前と場所が変更されています。}} |
||
+ | 以下のスクリプトは最新のパッケージデータベースをダウンロードします。必要であれば、{{ic|MIRROR}} を [https://archlinux.org/mirrors/status/ ミラーステータスリスト]の別のミラーに変更してください。 |
||
− | === 新しい root に archiso をインストール === |
||
+ | {{hc|download_databases.sh|2= |
||
− | {{ic|pacstrap}} でパッケージをインストールする代わりに (リモートのリポジトリからパッケージをダウンロードするわけですが今はインターネット接続がありません)、ライブ環境から新しい root に''全て''をコピーしてください: |
||
+ | #!/bin/sh |
||
− | # cp -ax / /mnt |
||
− | {{Note|オプション ({{ic|-x}}) を使って、新しい root にコピーしないようにいくつかの特殊なディレクトリを除外しています。}} |
||
− | 次に、新しいシステムの整合性を保つために、カーネルイメージを新しい root にコピーします: |
||
− | # cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux |
||
+ | ARCH="x86_64" |
||
− | その後、[[インストールガイド#fstab の生成]] に書かれているとおりに fstab を生成してください。 |
||
+ | MIRROR="https://mirrors.kernel.org/archlinux/" |
||
+ | wget "${MIRROR}/core/os/${ARCH}/core.db" |
||
− | === Chroot とベースシステムの設定 === |
||
+ | wget "${MIRROR}/extra/os/${ARCH}/extra.db" |
||
+ | wget "${MIRROR}/community/os/${ARCH}/community.db" |
||
+ | wget "${MIRROR}/multilib/os/${ARCH}/multilib.db" |
||
+ | # 必要に応じて以下もアンコメント (/etc/pacman.conf や pacman.conf.d でカスタマイズしている場合): |
||
− | 次に、新しくインストールしたシステムに chroot します: |
||
− | # arch-chroot /mnt /bin/bash |
||
+ | #wget "${MIRROR}/testing/os/${ARCH}/testing.db" |
||
− | {{Note|[[インストールガイド#システムの設定]]における他の設定 (ロケールやキーマップなど) を行う前に、ライブ環境の跡 (つまり、非ライブ環境に適合しない archiso のカスタマイズ) を消す必要があります。}} |
||
+ | #wget "${MIRROR}/community-testing/os/${ARCH}/community-testing.db" |
||
+ | #wget "${MIRROR}/multilib-testing/os/${ARCH}/multilib-testing.db" |
||
+ | # 必要に応じてデバッグパッケージやステージングパッケージも追加。 |
||
− | ==== journald の設定の復旧 ==== |
||
+ | }} |
||
+ | このスクリプトを[[実行可能属性|実行可能]]にして実行してください。複数の ''.db'' ファイルが取得されます。 |
||
− | [https://gitlab.archlinux.org/archlinux/archiso/blob/master/configs/releng/airootfs/root/customize_airootfs.sh#L19 archiso のカスタマイズ]によってシステムのジャーナルはメモリに保存されるようになっており、そのままだと再起動でジャーナルは消えてしまいます: |
||
− | # sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf |
||
+ | 以下の手順では、これらの ''.db'' ファイルをオフラインの PC へ転送し、(まるで {{ic|pacman -Sy}} を実行したかのように) 最新のパッケージリストで作業できるようにし、更新が必要なパッケージのリストを生成します: |
||
− | ==== 特殊な udev ルールの削除 ==== |
||
+ | # cp *.db /var/lib/pacman/sync/ |
||
− | {{Out of date|https://gitlab.archlinux.org/archlinux/archiso/commit/0d67870667ee8c2084dea2bbdf1323288e2e7457 を見ると、systemd-networkd と systemd-resolved の変更によって以下の文章を書き換える必要があります。}} |
||
+ | # pacman -Sup --noconfirm > pkglist |
||
+ | {{Note|{{ic|/etc/pacman.d/mirrorlist}} ファイルで定義されているサーバのうち少なくとも1つは有効にしておいてください。さもないと、誤解を招くエラーメッセージが表示されてしまいます: {{ic|error: no database for package: package-name}}。}} |
||
− | [https://gitlab.archlinux.org/archlinux/archiso/-/blob/769fbecef3ea7411c6e68ff1c4838f49b7c5d648/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules この udev ルール] は有線ネットワークインターフェイスが存在する場合に自動的に dhcpcd を起動します。 |
||
+ | 対応するパッケージ署名もダウンロードする必要があります。なので、ダウンロードすべき署名のリストを用意してください: |
||
− | # rm /etc/udev/rules.d/81-dhcpcd.rules |
||
+ | # sed -e 's/\.zst$/.zst.sig/' ../pkglist > ../siglist |
||
− | ==== archiso によって作成されたサービスの無効化と削除 ==== |
||
+ | Next, bring the two lists with you to a place where you have internet and download the listed packages in an empty directory: |
||
− | ライブ環境用に作成されているサービスファイルがあるので、{{ic|pacman-init.service}} と {{ic|choose-mirror.service}} を[[無効化]]してファイルを削除してください (新しい環境では不要であるため): |
||
+ | 次に、インターネットにアクセスできる場所にこれらの2つのリストを持ってきて、リスト内のパッケージを空のディレクトリ内でダウンロードしてください: |
||
− | # rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d} |
||
− | # rm /etc/systemd/scripts/choose-mirror |
||
+ | # wget -nv -i ../pkglist |
||
− | ==== ライブ環境の特殊なスクリプトの削除 ==== |
||
+ | # wget -nv -i ../siglist |
||
+ | {{Tip|[https://www.cygwin.com cygwin] などの Windows 環境を使ってパッケージをダウンロードする場合、デフォルトの Windows ファイル命名規則ではコロンなどをエスケープする必要があるので、ファイル名がマングリングされます。(そのような制限に従っていない cygwin で) これを防ぐには、{{ic|1=wget --restrict-file-names=unix}} を使用してください。}} |
||
− | ライブ環境には archiso スクリプトによっていくつかスクリプトがインストールされており、これらは新しい環境では必要ありません: |
||
− | # rm /etc/systemd/system/getty@tty1.service.d/autologin.conf |
||
− | # rm /root/{.automated_script.sh,.zlogin} |
||
− | # rm /etc/mkinitcpio-archiso.conf |
||
− | # rm -r /etc/initcpio |
||
+ | すべての {{ic|*.pkg.tar.zst}} と {{ic|*.pkg.tar.zst.sig}} ファイルをオフラインのコンピュータへ移動させ、それらを {{ic|/var/cache/pacman/pkg}} 内に置き、最後に以下を実行してください: |
||
− | {{Note|{{ic|mkinitcpio-archiso.conf}} ファイルはもはや存在しません。追加の手順については [[#Initramfs の設定]] を見てください。}} |
||
+ | # pacman -Su |
||
− | ==== archlinux 鍵のインポート ==== |
||
+ | === ローカルリポジトリ === |
||
− | 公式リポジトリを使うには archlinux のマスター鍵をインポートする必要があります ([[pacman-key#キーリングの初期化]])。通常は pacstrap でインポートされますが、以下のコマンドでインポートすることもできます: |
||
+ | 新しいシステムがオフライン、あるいはネットワークから物理的に切り離されたままになることが予想される場合、ローカルリポジトリのみを使うように設定する必要があります。 |
||
− | # pacman-key --init |
||
− | # pacman-key --populate |
||
+ | ==== 完全なリポジトリ ==== |
||
− | {{Note|エントロピーを生成して最初のステップを高速化するにはキーボードやマウスを動かす必要があります。}} |
||
+ | 新しい環境に chroot して、先に説明したように {{ic|/etc/pacman.conf}} を編集してください (ただし、{{ic|/mnt}} を除いて): |
||
− | ==== Initramfs の設定 ==== |
||
+ | {{hc|/etc/pacman.conf|2= |
||
− | archiso からファイルシステムをコピーしたので、適切な initramfs をインストールするために {{ic|mkinitcpio.conf}} を編集する必要があります。 |
||
+ | [custom] |
||
− | テキストエディタで {{ic|/etc/mkinitcpio.conf}} を開き、唯一コメントアウトされていない {{ic|HOOKS}} をコメントアウト/削除し、以下に置き換えてください: |
||
+ | SigLevel = Optional |
||
+ | Server = file:///repo/ |
||
+ | }} |
||
+ | 他のすべてのリポジトリをコメントアウトし、保存してください。通常通り、新しいシステムの設定を続けてください。 |
||
− | # HOOKS=(base udev autodetect modconf block filesystems keyboard fsck) |
||
+ | |||
+ | これで、このオフラインのシステムのアップデートは、ローカルリポジトリの最新のコピーを持ってきて、それを {{ic|/repo}} にマウントし、通常通り pacman のコマンドを実行することで行えます。 |
||
+ | == 参照 == |
||
− | ==== システムの設定 ==== |
||
+ | * [[ヘルプ:閲覧#オフラインでの閲覧|オフラインでの閲覧]]: ArchWiki をオフラインで見るための様々な手段。 |
||
− | スキップした[[インストールガイド#システムの設定]]セクションの設定 (ロケールやタイムゾーン、ホストネームなど) を行って[[インストールガイド#Initramfs]] に書いてあるように初期 RAM ディスクを作成してインストールを完了してください。 |
||
− | {{TranslationStatus|Offline installation| |
+ | {{TranslationStatus|Offline installation|2024-02-29|769633}} |
2024年2月29日 (木) 06:10時点における最新版
この記事では、インターネット接続の無いシステムで Arch Linux をインストールする方法を説明します。これを行うには、インターネット接続のある別のシステムが必要です。
まず、インストールガイドを インストールガイド#必須パッケージのインストール の前まで行ってください (ただし、インストールガイド#インターネットへの接続 はスキップする)。
目次
ローカルリポジトリを準備する
Pacman ヒント#パッケージを CD/DVD や USB スティックからインストールする の指示に従って、必要なファイルを含むローカルリポジトリを別のホスト環境上に準備してください。
最低限、システムを機能させるには以下のパッケージをインストールすることが推奨されます:
# pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel linux linux-firmware mkinitcpio vim
カスタムのオフラインリポジトリを作成してください:
# repo-add ./custom.db.tar.gz ./*[^sig]
マウントと設定
リポジトリの準備が済んだら、外部メディアを新しい環境に接続し、新しく作成したルートファイルシステムにメディアをマウントしてください:
# mount --mkdir /dev/sdxy /mnt/repo
archiso /etc/pacman.conf
を編集し、新しいセクションを追加してください:
/etc/pacman.conf
[custom] SigLevel = Optional Server = file:///mnt/repo/
pacman がデフォルトのリポジトリでエラーを吐かないようにするために、[core]
、[extra]
、[community]
のセクションをコメントアウトしてください。
Pacstrap
これで、ローカルで利用可能なパッケージを新しい環境に pacstrap することができます:
# pacstrap -K /mnt base base-devel linux linux-firmware mkinitcpio vim
パッケージのオフラインインストール
ファイルからインストールする
ネットワークにアクセスする前にいくつかのパッケージを手動でインストールする必要があり、一時的にオフラインインストールをする場合、ローカルのパッケージをインストールする方法について pacman#追加コマンド を参照してください。
シェルのグロブを使うことで、多くのパッケージを一度にインストールすることができます:
# pacman -U /package/folder/*.tar.zst
オフラインキャッシュ
必要なファイルを /var/lib/pacman/sync
と /var/cache/pacman/pkg
に入れることで、検索、更新、そしてインストールすべきものがすべて揃っていると pacman
に認識させることができます。以下の方法は2つのフォーラムスレッドが元になっています: [1][2]。
手順:
- インターネットアクセスのあるコンピュータ上で最新のパッケージデータベースをダウンロードする。
- それらをオフラインのコンピュータへ転送する。
- オフラインコンピュータからアップデートする必要のあるパッケージのリストを生成する。
- インターネットアクセスのあるコンピュータ上でそれらのパッケージを署名と共にダウンロードする。
- それらをオフラインのコンピュータの pacman キャッシュへ転送する。
- 更新をインストールする。
以下のスクリプトは最新のパッケージデータベースをダウンロードします。必要であれば、MIRROR
を ミラーステータスリストの別のミラーに変更してください。
download_databases.sh
#!/bin/sh ARCH="x86_64" MIRROR="https://mirrors.kernel.org/archlinux/" wget "${MIRROR}/core/os/${ARCH}/core.db" wget "${MIRROR}/extra/os/${ARCH}/extra.db" wget "${MIRROR}/community/os/${ARCH}/community.db" wget "${MIRROR}/multilib/os/${ARCH}/multilib.db" # 必要に応じて以下もアンコメント (/etc/pacman.conf や pacman.conf.d でカスタマイズしている場合): #wget "${MIRROR}/testing/os/${ARCH}/testing.db" #wget "${MIRROR}/community-testing/os/${ARCH}/community-testing.db" #wget "${MIRROR}/multilib-testing/os/${ARCH}/multilib-testing.db" # 必要に応じてデバッグパッケージやステージングパッケージも追加。
このスクリプトを実行可能にして実行してください。複数の .db ファイルが取得されます。
以下の手順では、これらの .db ファイルをオフラインの PC へ転送し、(まるで pacman -Sy
を実行したかのように) 最新のパッケージリストで作業できるようにし、更新が必要なパッケージのリストを生成します:
# cp *.db /var/lib/pacman/sync/ # pacman -Sup --noconfirm > pkglist
対応するパッケージ署名もダウンロードする必要があります。なので、ダウンロードすべき署名のリストを用意してください:
# sed -e 's/\.zst$/.zst.sig/' ../pkglist > ../siglist
Next, bring the two lists with you to a place where you have internet and download the listed packages in an empty directory:
次に、インターネットにアクセスできる場所にこれらの2つのリストを持ってきて、リスト内のパッケージを空のディレクトリ内でダウンロードしてください:
# wget -nv -i ../pkglist # wget -nv -i ../siglist
すべての *.pkg.tar.zst
と *.pkg.tar.zst.sig
ファイルをオフラインのコンピュータへ移動させ、それらを /var/cache/pacman/pkg
内に置き、最後に以下を実行してください:
# pacman -Su
ローカルリポジトリ
新しいシステムがオフライン、あるいはネットワークから物理的に切り離されたままになることが予想される場合、ローカルリポジトリのみを使うように設定する必要があります。
完全なリポジトリ
新しい環境に chroot して、先に説明したように /etc/pacman.conf
を編集してください (ただし、/mnt
を除いて):
/etc/pacman.conf
[custom] SigLevel = Optional Server = file:///repo/
他のすべてのリポジトリをコメントアウトし、保存してください。通常通り、新しいシステムの設定を続けてください。
これで、このオフラインのシステムのアップデートは、ローカルリポジトリの最新のコピーを持ってきて、それを /repo
にマウントし、通常通り pacman のコマンドを実行することで行えます。
参照
- オフラインでの閲覧: ArchWiki をオフラインで見るための様々な手段。