「既存の Linux からインストール」の版間の差分
(→ミラーを選択して基本ツールをダウンロード: セクション名を英語版と同じに) |
|||
(5人の利用者による、間の12版が非表示) | |||
1行目: | 1行目: | ||
[[Category:Arch の入手とインストール]] |
[[Category:Arch の入手とインストール]] |
||
− | [[en:Install from |
+ | [[en:Install from existing Linux]] |
− | [[es:Install from |
+ | [[es:Install from existing Linux]] |
[[fr:Install chroot]] |
[[fr:Install chroot]] |
||
− | [[it:Install from |
+ | [[it:Install from existing Linux]] |
− | [[pt:Install from |
+ | [[pt:Install from existing Linux]] |
− | [[ru:Install from |
+ | [[ru:Install from existing Linux]] |
− | [[ |
+ | [[zh-hans:Install from existing Linux]] |
− | [[zh- |
+ | [[zh-hant:Install from existing Linux]] |
+ | {{Related articles start}} |
||
− | [[zh-TW:Install from Existing Linux]] |
||
+ | {{Related|SSH からインストール}} |
||
+ | {{Related articles end}} |
||
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、[[インストールガイド]]の記述に従ってインストールを行なって下さい。 |
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、[[インストールガイド]]の記述に従ってインストールを行なって下さい。 |
||
14行目: | 16行目: | ||
* Arch Linux のリモートインストール、例えば (仮想) ルートサーバー |
* Arch Linux のリモートインストール、例えば (仮想) ルートサーバー |
||
* 既存の Linux を LiveCD を使わずに置き換える ([[#LiveCD を使わずに既存のシステムを置き換える]] を参照) |
* 既存の Linux を LiveCD を使わずに置き換える ([[#LiveCD を使わずに既存のシステムを置き換える]] を参照) |
||
− | * Arch Linux ベースの新しい Linux ディストリビューションや |
+ | * Arch Linux ベースの新しい Linux ディストリビューションや [[Arch ベースのディストリビューション|Arch Linux ベースのLiveMedia]] の作成 |
* Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ |
* Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ |
||
− | * [[ |
+ | * [[ディスクレスシステム|ディスクレスマシンの rootfs-over-NFS]] |
− | ブートストラップの目的は {{Pkg|arch-install-scripts}} ({{ic|pacstrap}} や {{ic|arch- |
+ | ブートストラップの目的は {{Pkg|arch-install-scripts}} のスクリプト ({{ic|pacstrap}} や {{ic|arch-chroot}} など) が走る環境をセットアップすることです。 |
− | ホストシステムにネイティブに {{Pkg|arch-install-scripts}} をインストールするか、Arch Linux ベースの chroot を設定することでこれを行います。 |
||
− | ホストシステムで Arch Linux を動かしている場合は、{{Pkg|arch-install-scripts}} をインストールするだけです。 |
+ | ホストシステムで Arch Linux を動かしている場合は、{{Pkg|arch-install-scripts}} をインストールするだけです。ホスト環境で他の Linux ディストリビューションを使っている場合、まず Arch Linux ベースの chroot をセットアップする必要があります。 |
− | {{Note|このガイドでは新しいターゲット Arch Linux アーキテクチャのプログラムを実行することができる既存のホストシステムが必要です。ホストが x86_64 の場合、32ビット chroot 環境を作成するために i686-pacman を使うことができます。[[ |
+ | {{Note|このガイドでは新しいターゲット Arch Linux アーキテクチャのプログラムを実行することができる既存のホストシステムが必要です。ホストが x86_64 の場合、32ビット chroot 環境を作成するために i686-pacman を使うことができます。[[64ビット環境に32ビット環境をインストール]]を見て下さい。ただし、ホストが32ビットのプログラムしかサポートしていない場合、64ビット環境を作成するのは簡単ではありません。}} |
+ | {{Warning|コマンドを実行する前にコマンドの意味を考えてください。システムを破壊して重要なデータを喪失した場合、データ復旧会社に頼むと多額の請求費が届くでしょう。}} |
||
− | ==Arch Linux ベースの chroot== |
||
− | ホストシステムの中で Arch システムを動かします。 |
||
− | 実際のインストールは Arch システムから実行します。 |
||
− | chroot の中に入れ子になったシステムが含まれます。 |
||
− | 設定して chroot に入る方法は以下の3つがあります。 |
||
+ | ==バックアップと準備== |
||
− | {{Note|ホストシステムは Linux 2.6.32 以降である必要があります。}} |
||
+ | メールやウェブサーバーなど全てのデータをバックアップしてください。マシン設定の情報も控えておきましょう。サーバーの設定やホストネームなどです。 |
||
− | {{Note|以下の3つの方法からどれか一つを選んで、それから記事の残りを読んでインストールを完了してください。}} |
||
+ | 以下は必要なデータのリストです: |
||
− | ===方法 1: ブートストラップイメージを使う=== |
||
+ | * IP アドレス |
||
+ | * ホストネーム (ノート: ルートサーバーも大抵の場合、プロバイダーのドメインに含まれます。{{ic|/etc/hosts}} を確認・バックアップしてください) |
||
+ | * DNS サーバー ({{ic|/etc/resolv.conf}} を確認) |
||
+ | * SSH 鍵 (サーバーを使っている人が他にいる場合、新しい鍵を認証する必要があります。Apache やメールサーバー、SSH サーバーなどの鍵が該当します) |
||
+ | * ハードウェアの情報 (ネットワークカードなど。インストール済みの {{ic|/etc/modules.conf}} を参照してください) |
||
+ | * GRUB 設定ファイル |
||
+ | ローカルのハードドライブに {{ic|/etc}} ディレクトリのコピーを作成すると良いでしょう。 |
||
− | [https://www.archlinux.org/download ミラー]からブートストラップイメージをダウンロードしてください: |
||
− | $ curl -O http://mirrors.kernel.org/archlinux/iso/2014.03.01/archlinux-bootstrap-2014.03.01-x86_64.tar.gz |
||
− | tarball を展開してください: |
||
− | # cd /tmp |
||
− | # tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-2014.03.01-x86_64.tar.gz |
||
− | リポジトリサーバーを選択してください: |
||
− | # nano /tmp/root.x86_64/etc/pacman.d/mirrorlist |
||
+ | == Arch Linux が動作しているホストからインストール == |
||
− | {{Note|x86_64 のホストシステムから i686 イメージをブートストラップする場合は、pacman が正しい i686 パッケージをインストールするように {{Ic|/tmp/root.i686/etc/pacman.conf}} を編集して {{Ic|1=Architecture = i686}} を明示的に定義する必要があります。}} |
||
+ | {{Pkg|arch-install-scripts}} パッケージをインストールしてください。 |
||
− | chroot に入って下さい |
||
− | * bash 4 以降がインストールされている場合は: |
||
− | # /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ |
||
− | * インストールされていない場合は以下のコマンドを実行してください: |
||
− | # cp /etc/resolv.conf /tmp/root.x86_64/etc |
||
− | # mount --rbind /proc /tmp/root.x86_64/proc |
||
− | # mount --rbind /sys /tmp/root.x86_64/sys |
||
− | # mount --rbind /dev /tmp/root.x86_64/dev |
||
− | # mount --rbind /run /tmp/root.x86_64/run |
||
− | (assuming /run exists on your system) |
||
− | # chroot /tmp/root.x86_64/ |
||
+ | [[インストールガイド#パーティションのマウント]]に従ってください。{{ic|/mnt}} ディレクトリを別の用途に使っている場合、{{ic|/mnt/install}} などのように他のディレクトリを作成してください。 |
||
− | ===方法 2: LiveCD イメージを使う=== |
||
− | + | その後[[インストールガイド#インストール]]に従ってください。ホストにミラーリストが存在するため、[[インストールガイド#ミラーの選択]]は省略できます。 |
|
+ | {{Tip|全てのパッケージをもう一度ダウンロードするかわりに、[[Pacman ヒント#pacman のキャッシュをネットワークで共有する|pacman のキャッシュをネットワークで共有する]]か ''pacstrap'' の {{ic|-c}} オプションを使う方法もあります。}} |
||
− | {{Note|先に進む前に、ホストシステムに [http://squashfs.sourceforge.net/ squashfs] の最新バージョンをインストールしてください。インストールしていないと次のエラーが表示されます: {{ic|FATAL ERROR aborting: uncompress_inode_table: failed to read block}}。}} |
||
+ | {{Tip|GRUB ブートローダーが使われているとき、{{ic|grub-mkconfig}} がデバイスを誤検知することがあり、スティックから起動しようとしても {{ic|Error:no such device}} エラーになります。解決策としては、Arch Linux が動作しているホストから新しくインストールしたパーティションをマウントして {{ic|arch-chroot}} し、その上でGRUB をインストールして設定する方法です。GRUB をインストールするときに {{ic|/etc/lvm/lvm.conf}} で {{ic|1=use_lvmetad=0}} として {{ic|lvmetad}} を無効にしなければならないかもしれません。}} |
||
− | * root イメージは[https://www.archlinux.org/download ミラー]の一つから取得することができます。squashfs フォーマットは編集ができないので root イメージを unsquash してマウントします。 |
||
+ | {{Note|既存の Arch 環境の複製を作成したい場合、新しいパーティションにファイルシステムをコピーするだけで作成できます。その場合、以下の設定が必要です: |
||
− | *root イメージを unsquash するには、次を実行してください: |
||
− | {{bc|# unsquashfs -d /squashfs-root root-image.fs.sfs}} |
||
+ | * [[インストールガイド#Fstab|{{ic|/etc/fstab}}]] を作成して {{ic|/etc/hostname}} を編集 |
||
− | * これで root イメージをループマウントすることができます: |
||
+ | * {{ic|/etc/machine-id}} を削除。起動時に新しいファイルが作成されます。 |
||
− | {{bc| |
||
+ | * その他インストールメディアに適宜変更を加える |
||
− | # mkdir /arch |
||
+ | * ブートローダーのインストール |
||
− | # mount -o loop /squashfs-root/root-image.fs /arch |
||
− | }} |
||
+ | ルートファイルシステムをコピーするときは、{{ic|cp -ax}} あるいは {{ic|rsync -axX}} コマンドを使います。マウントポイントの中身はコピーされず ({{ic|-x}})、システムバイナリの[[ケイパビリティ]]属性は維持されます ({{ic|rsync -X}})。}} |
||
− | * [[Change Root (日本語)|chroot]] する前に、マウントポイントを設定してネットワークのために resolv.conf をコピーする必要があります。 |
||
− | {{bc| |
||
− | # mount -t proc none /arch/proc |
||
− | # mount -t sysfs none /arch/sys |
||
− | # mount -o bind /dev /arch/dev |
||
− | # mount -o bind /dev/pts /arch/dev/pts # important for pacman (for signature check) |
||
− | # cp -L /etc/resolv.conf /arch/etc #this is needed to use networking within the chroot |
||
− | }} |
||
+ | == 他の Linux ディストリビューションが動作しているホストからインストール == |
||
− | * 新しくインストールする Arch 環境に chroot する準備がすべて整いました: |
||
− | {{bc|# chroot /arch bash}} |
||
+ | 以下のサブセクションに書かれている手順を自動化するツールが複数存在します。詳しくはそれぞれのホームページを見てください。 |
||
− | ===方法 3: (スクリプトを使って) 手動で chroot を組み立てる=== |
||
+ | * [https://github.com/tokland/arch-bootstrap arch-bootstrap] (Bash) |
||
− | このスクリプトは {{ic|archinstall-pkg}} という名前のディレクトリを作成し、必要なパッケージをそこにダウンロードします。それからパッケージを {{ic|archinstall-chroot}} ディレクトリに展開します。最後に、マウントポイントを準備して、pacman を設定し chroot に入ります。 |
||
+ | * [https://github.com/hartwork/image-bootstrap image-bootstrap] (Python) |
||
+ | * [https://gitlab.com/drizzt/vps2arch vps2arch] (Bash) |
||
+ | 以下では手動でインストールする方法を記述しています。ホスト環境で直接 [[pacman]] を動作させる方法と、ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納する方法を紹介します。 |
||
− | {{hc|archinstall-bootstrap.sh|<nowiki> |
||
− | #!/bin/bash |
||
− | # last edited 02. March 2014 |
||
− | # This script is inspired on the archbootstrap script. |
||
+ | === ホストシステムから pacman を使用する === |
||
− | FIRST_PACKAGE=(filesystem) |
||
+ | [https://git.archlinux.org/pacman.git/ Pacman のソースコード] は大抵の Linux ディストリビューションでコンパイルでき、ホストシステムから直接 Arch Linux をブートストラップするのに活用できます。[https://git.archlinux.org/arch-install-scripts.git/about/ arch-install-scripts] は最近のディストリビューションでダウンロードしたソースコードから問題なく動作するはずです。 |
||
− | BASH_PACKAGES=(glibc ncurses readline bash) |
||
− | PACMAN_PACKAGES=(acl archlinux-keyring attr bzip2 coreutils curl e2fsprogs expat gnupg gpgme keyutils krb5 libarchive libassuan libgpg-error libgcrypt libssh2 lzo2 openssl pacman xz zlib) |
||
− | # EXTRA_PACKAGES=(pacman-mirrorlist tar libcap arch-install-scripts util-linux systemd) |
||
− | PACKAGES=(${FIRST_PACKAGE[*]} ${BASH_PACKAGES[*]} ${PACMAN_PACKAGES[*]}) |
||
+ | ディストリビューションによっては、公式リポジトリに ''pacman'' や ''arch-install-scripts'' があり、ブートストラップに利用できます。2019年2月時点で、Gentoo Linux には ''pacman'' パッケージが提供されており、Alpine Linux および Fedora には ''pacman'' と ''arch-install-scripts'' がともにに提供されていると知られています。 |
||
− | # Change to the mirror which best fits for you |
||
− | # USA |
||
− | MIRROR='http://mirrors.kernel.org/archlinux' |
||
− | # Germany |
||
− | # MIRROR='http://archlinux.limun.org' |
||
+ | === chroot の作成 === |
||
− | # You can set the ARCH variable to i686 or x86_64 |
||
− | ARCH=`uname -m` |
||
− | LIST=`mktemp` |
||
− | CHROOT_DIR=archinstall-chroot |
||
− | DIR=archinstall-pkg |
||
− | mkdir -p "$DIR" |
||
− | mkdir -p "$CHROOT_DIR" |
||
− | # Create a list of filenames for the arch packages |
||
− | wget -q -O- "$MIRROR/core/os/$ARCH/" | sed -n "s|.*href=\"\\([^\"]*xz\\)\".*|\\1|p" >> $LIST |
||
− | # Download and extract each package. |
||
− | for PACKAGE in ${PACKAGES[*]}; do |
||
− | FILE=`grep "$PACKAGE-[0-9]" $LIST|head -n1` |
||
− | wget "$MIRROR/core/os/$ARCH/$FILE" -c -O "$DIR/$FILE" |
||
− | xz -dc "$DIR/$FILE" | tar x -k -C "$CHROOT_DIR" |
||
− | rm -f "$CHROOT_DIR/.PKGINFO" "$CHROOT_DIR/.MTREE" "$CHROOT_DIR/.INSTALL" |
||
− | done |
||
− | # Create mount points |
||
− | mount -t proc proc "$CHROOT_DIR/proc/" |
||
− | mount -t sysfs sys "$CHROOT_DIR/sys/" |
||
− | mount -o bind /dev "$CHROOT_DIR/dev/" |
||
− | mkdir -p "$CHROOT_DIR/dev/pts" |
||
− | mount -t devpts pts "$CHROOT_DIR/dev/pts/" |
||
+ | chroot をセットアップする方法は2つ存在します。簡単な方法と複雑な方法の2つです。どちらか片方を選択してください。その後、[[#chroot 環境を使う]]に進んでください。 |
||
− | # Hash for empty password Created by doing: openssl passwd -1 -salt ihlrowCo and entering an empty password (just press enter) |
||
− | # echo 'root:$1$ihlrowCo$sF0HjA9E8up9DYs258uDQ0:10063:0:99999:7:::' > "$CHROOT_DIR/etc/shadow" |
||
− | # echo "myhost" > "$CHROOT_DIR/etc/hostname" |
||
− | [ -f "/etc/resolv.conf" ] && cp "/etc/resolv.conf" "$CHROOT_DIR/etc/" |
||
+ | ==== 方法 A: ブートストラップイメージを使う (推奨) ==== |
||
− | mkdir -p "$CHROOT_DIR/etc/pacman.d/" |
||
+ | [https://www.archlinux.jp/download/ ミラー] からブートストラップイメージを {{ic|/tmp}} にダウンロードしてください。 |
||
− | echo "Server = $MIRROR/\$repo/os/$ARCH" >> "$CHROOT_DIR/etc/pacman.d/mirrorlist" |
||
+ | 署名をダウンロードして (URL に {{ic|.sig}} が付きます)、[[GnuPG#署名の検証|GnuPG で検証]]することもできます。 |
||
− | chroot $CHROOT_DIR pacman-key --init |
||
− | chroot $CHROOT_DIR pacman-key --populate archlinux |
||
− | chroot $CHROOT_DIR pacman -Syu pacman --force |
||
− | [ -f "/etc/resolv.conf" ] && cp "/etc/resolv.conf" "$CHROOT_DIR/etc/" |
||
− | echo "Server = $MIRROR/\$repo/os/$ARCH" >> "$CHROOT_DIR/etc/pacman.d/mirrorlist" |
||
− | chroot $CHROOT_DIR |
||
− | </nowiki>}} |
||
+ | tarball を解凍: |
||
− | ===chroot 環境を使う=== |
||
+ | # tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-*-x86_64.tar.gz |
||
+ | {{ic|/tmp/root.x86_64/etc/pacman.d/mirrorlist}} を編集してリポジトリサーバーを選択してください。 |
||
− | ====pacman キーリングの初期化==== |
||
+ | |||
− | インストールを始める前に、pacman のキーを設定する必要があります。[[pacman-key (日本語)#キーリングの初期化]] を読んでエントロピーの必要性について理解してから以下の2つのコマンドを実行してください: |
||
+ | {{Note|x86_64 のホスト環境から i686 イメージをブートストラップした場合、i686 のパッケージが pacman によって取得されるように {{Ic|/tmp/root.i686/etc/pacman.conf}} を編集して {{Ic|1=Architecture = i686}} と記述してください。}} |
||
+ | |||
+ | chroot 環境に入ってください: |
||
+ | |||
+ | * bash 4 以上がインストールされていて、unshare が --fork と --pid オプションに対応している場合: |
||
+ | # /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ |
||
+ | * bash 4 未満の場合、以下のコマンドを実行: |
||
+ | # mount --bind /tmp/root.x86_64 /tmp/root.x86_64 |
||
+ | # cd /tmp/root.x86_64 |
||
+ | # cp /etc/resolv.conf etc |
||
+ | # mount -t proc /proc proc |
||
+ | # mount --make-rslave --rbind /sys sys |
||
+ | # mount --make-rslave --rbind /dev dev |
||
+ | # mount --make-rslave --rbind /run run # (assuming /run exists on the system) |
||
+ | # chroot /tmp/root.x86_64 /bin/bash |
||
+ | |||
+ | ==== 方法 B: LiveCD イメージを使う ==== |
||
+ | |||
+ | 最新の Arch Linux インストールメディアのルートイメージをマウントして chroot することができます。この方法では特定のパッケージをインストールして準備をしなくても Arch Linux のインストール環境を動作させることができるというメリットがあります。 |
||
+ | |||
+ | {{Note|先に進む前に、ホスト環境に最新版の [http://squashfs.sourceforge.net/ squashfs] がインストールされていることを確認してください。バージョンが古いと、次のようなエラーが発生します: {{ic|FATAL ERROR aborting: uncompress_inode_table: failed to read block}}。}} |
||
+ | |||
+ | * ルートイメージは [https://www.archlinux.jp/download/ ミラー] の arch/x86_64/ と arch/i686/ に存在します (使用したいアーキテクチャにあわせて選んでください)。squashfs フォーマットは編集ができないため、ルートイメージを unsquash してからマウントします。 |
||
+ | |||
+ | *ルートイメージを unsquash するには、次を実行: |
||
+ | {{bc|# unsquashfs airootfs.sfs}} |
||
+ | |||
+ | * [[Change Root|chroot]] する前に、マウントポイントを設定して {{ic|resolv.conf}} をコピーする必要があります: |
||
+ | {{bc| |
||
+ | # mount --bind squashfs-root squashfs-root |
||
+ | # mount -t proc none squashfs-root/proc |
||
+ | # mount -t sysfs none squashfs-root/sys |
||
+ | # mount -o bind /dev squashfs-root/dev |
||
+ | # mount -o bind /dev/pts squashfs-root/dev/pts ## important for pacman (for signature check) |
||
+ | # cp -L /etc/resolv.conf squashfs-root/etc ## this is needed to use networking within the chroot |
||
+ | }} |
||
+ | |||
+ | * それから、新しくインストールする Arch 環境に chroot してください: |
||
+ | {{bc|# chroot squashfs-root bash}} |
||
+ | |||
+ | === chroot 環境を使う === |
||
+ | |||
+ | ブートストラップ環境は完全なベアボーンです ({{ic|nano}} も {{ic|ping}} も {{ic|cryptsetup}} も {{ic|lvm}} も存在しません)。したがって、[[pacman]] をセットアップして {{ic|base}} を (必要であれば {{ic|base-devel}} も) ダウンロードする必要があります。 |
||
+ | |||
+ | ==== pacman キーリングの初期化 ==== |
||
+ | |||
+ | インストールを開始する前に、pacman の鍵をセットアップしてください。[[pacman-key#キーリングの初期化]]を読んでから (エントロピーが必要です)、以下のコマンドを実行: |
||
{{bc| |
{{bc| |
||
# pacman-key --init |
# pacman-key --init |
||
157行目: | 144行目: | ||
}} |
}} |
||
+ | {{Tip|{{Pkg|haveged}} のインストール・実行はホスト環境で行う必要があります。pacman のキーリングを初期化しないとパッケージをインストールすることはできないためです。''systemd'' は chroot で動作していることを認識すると [https://superuser.com/questions/688733/start-a-systemd-service-inside-chroot サービスの起動リクエスト] を無視します。他のコンソール (TTY, ターミナル, SSH セッションなど) で {{ic|ls -Ra /}} を実行する場合、リモートのヘッドレスサーバーに十分なエントロピーを供給するのに必要な実行回数は5回あるいは6回です。}} |
||
− | ====インストール==== |
||
− | [[Installation Guide (日本語)|インストールガイド]]の[[Installation Guide (日本語)#パーティションのマウント|パーティションのマウント]]と[[Installation Guide (日本語)#ベースシステムのインストール|ベースシステムのインストール]]のセクションに従って下さい。 |
||
− | ==== |
+ | ==== 基本ツールをダウンロード ==== |
− | Debian ベースのホストシステムでは、{{ic|pacstrap}} は以下のエラーを吐き出します: |
||
− | # pacstrap /mnt base |
||
− | # ==> Creating install root at /mnt |
||
− | # mount: mount point /mnt/dev/shm is a symbolic link to nowhere |
||
− | # ==> ERROR: failed to setup API filesystems in new root |
||
+ | [[ミラー#特定のミラーを有効にする|ミラーを選択]]したら、[[ミラー#pacman にパッケージリストを更新させる|パッケージリストを更新]]して必要なパッケージを[[インストール]]してください: {{Pkg|base}}, {{Grp|base-devel}}, {{Pkg|parted}} など。 |
||
− | Debian では、/dev/shm は /run/shm になっています。しかしながら Arch ベースの chroot では、/run/shm は存在せずリンクが壊れています。このエラーを修正するには、/run/shm ディレクトリを作成してください: |
||
+ | |||
+ | {{Note| |
||
+ | * テキストエディタが何も導入されていない場合は、一旦 {{ic|arch-chroot}} を抜け、ホスト環境のテキストエディタで {{ic|mirrorlist}} を編集する必要があります。 |
||
+ | * pacman でパッケージのインストールを試みて、{{ic|''error: could not determine cachedir mount point /var/cache/pacman/pkg''}} というエラーが生じた際、回避策として、chroot の前に{{ic|mount --bind <directory-to-livecd-or-bootstrap> <directory-to-livecd-or-bootstrap>}} を実行する方法があります。{{Bug|46169}} を参照してください。 |
||
+ | }} |
||
+ | |||
+ | === インストールのヒント === |
||
+ | |||
+ | [[インストールガイド#パーティション]]に進んで[[インストールガイド]]の残りのセクションに従ってください。 |
||
+ | |||
+ | ホスト環境によっては特定の設定が必要になることがあります。以下のセクションを見てください。 |
||
+ | |||
+ | ==== Debian ベースのホスト ==== |
||
+ | |||
+ | ===== /dev/shm ===== |
||
+ | |||
+ | Debian ベースのホスト環境では、{{ic|pacstrap}} が以下のエラーを表示することがあります: |
||
+ | |||
+ | {{hc|# pacstrap /mnt base| |
||
+ | ==> Creating install root at /mnt |
||
+ | mount: mount point /mnt/dev/shm is a symbolic link to nowhere |
||
+ | ==> ERROR: failed to setup API filesystems in new root |
||
+ | }} |
||
+ | |||
+ | Debian では、{{ic|/dev/shm}} が {{ic|/run/shm}} になっているのに対して、Arch の chroot では {{ic|/run/shm}} が存在せずリンクが壊れてしまうのが原因です。エラーを回避するには、{{ic|/run/shm}} ディレクトリを作成してください: |
||
# mkdir /run/shm |
# mkdir /run/shm |
||
− | ==== |
+ | ===== /dev/pts ===== |
+ | |||
+ | Debian 7 ホストから {{ic|archlinux-2015.07.01-x86_64}} をインストールしたとき、[https://projects.archlinux.org/arch-install-scripts.git/tree/pacstrap.in pacstrap] と [[Change_Root#arch-chroot を使う|arch-chroot]] が以下のエラーで動作しません: |
||
+ | |||
+ | {{hc|# pacstrap -i /mnt| |
||
+ | mount: mount point /mnt/dev/pts does not exist |
||
+ | ==> ERROR: failed to setup chroot /mnt |
||
+ | }} |
||
+ | |||
+ | スクリプトが一般的な関数を使っているのが原因です。{{ic|chroot_setup()}}[https://projects.archlinux.org/arch-install-scripts.git/tree/common#n76] は {{Pkg|util-linux}} の新しい機能に依存していますが、Debian 7 のユーザーランドでは使用することができません ({{Bug|45737}} を参照)。 |
||
+ | |||
+ | [https://projects.archlinux.org/arch-install-scripts.git/tree/pacstrap.in#n77 様々な作業] を手動で実行して対象ディレクトリ ({{ic|"$newroot"}}) にカーネルファイルシステムを[[Change_Root#chroot を使う|通常の方法]]でマウントしてください: |
||
+ | |||
+ | {{bc|1= |
||
+ | # newroot=/mnt |
||
+ | # mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc} |
||
+ | # mkdir -m 1777 -p "$newroot"/tmp |
||
+ | # mkdir -m 0555 -p "$newroot"/{sys,proc} |
||
+ | # mount --bind "$newroot" "$newroot" |
||
+ | # mount -t proc /proc "$newroot/proc" |
||
+ | # mount --rbind /sys "$newroot/sys" |
||
+ | # mount --rbind /run "$newroot/run" |
||
+ | # mount --rbind /dev "$newroot/dev" |
||
+ | # pacman -r "$newroot" --cachedir="$newroot/var/cache/pacman/pkg" -Sy base base-devel ... ## add the packages you want |
||
+ | # cp -a /etc/pacman.d/gnupg "$newroot/etc/pacman.d/" ## copy keyring |
||
+ | # cp -a /etc/pacman.d/mirrorlist "$newroot/etc/pacman.d/" ## copy mirrorlist |
||
+ | }} |
||
+ | |||
+ | [[インストールガイド#Chroot]] では {{ic|arch-chroot}} のかわりに、{{ic|chroot "$newroot"}} を使います。 |
||
+ | |||
+ | ===== lvmetad ===== |
||
+ | |||
+ | Debian 7 のホストの {{ic|archlinux-bootstrap-2015.07.01-x86_64}} から [[LVM]] の[[LVM#論理ボリュームの作成|論理ボリューム]]を作成しようとすると以下のエラーが発生します: |
||
+ | |||
+ | {{hc|# lvcreate -L 20G lvm -n root| |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | /dev/lvm/root: not found: device not cleared |
||
+ | Aborting. Failed to wipe start of new LV.}} |
||
+ | |||
+ | {{Tip|物理ボリュームやボリュームグループの作成については {{ic|/run/lvm/lvmetad.socket: connect failed: No such file or directory}} というエラーが表示されますが問題ありません。}} |
||
+ | |||
+ | (Debian から) chroot の外側に論理ボリュームを作成することでエラーを回避できます。その後、chroot して利用してください。 |
||
+ | |||
+ | また、システムから LVM を使用している場合に、以下の出力がされることがあります: |
||
+ | |||
+ | {{hc|1=# grub-install --target=i386-pc --recheck /dev/main/archroot|2= |
||
+ | Installing for i386-pc platform. |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | /run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
+ | WARNING: Failed to connect to lvmetad. Falling back to internal scanning. |
||
+ | }} |
||
+ | |||
+ | Debian がデフォルトで lvmetad を使用しないのが原因です。{{ic|/etc/lvm/lvm.conf}} を編集して {{ic|use_lvmetad}} を {{ic|0}} に設定してください: |
||
+ | |||
+ | use_lvmetad = 0 |
||
+ | |||
+ | 上記の設定を行うと起動の initrd ステージでエラーが発生します。GRUB の生成を行ってから変更してください。ソフトウェア RAID + LVM の場合、以下の手順で設定します: |
||
+ | |||
+ | * システムを全てインストールした後、initramfs (mkinitcpio) や [[ブートローダー]]の設定をよく確認してください。 |
||
+ | * {{ic|/etc/mdadm.conf}} を RAID の構成にあわせて変更してください。 |
||
+ | * LVM と RAID の要件を満たすように HOOKS と MODULES を変更してください: {{ic|1=MODULES="dm_mod" HOOKS="base udev '''mdadm_udev''' ... block '''lvm2''' filesystems ..."}}。 |
||
+ | * mkinitcpio で initrd イメージを生成してください。[[mkinitcpio#イメージ作成とアクティベーション]] を参照。 |
||
+ | * {{ic|/etc/lvm/lvm.conf}} を編集して {{ic|1=use_lvmetad=0}} と記述します。 |
||
+ | * ブートローダーの設定を更新します。 |
||
+ | * {{ic|/etc/lvm/lvm.conf}} を編集して {{ic|1=use_lvmetad=1}} と記述します。 |
||
+ | |||
+ | ==== Fedora ベースのホスト ==== |
||
+ | |||
+ | Fedora ベースのホストやライブ USB では {{ic|genfstab}} を使って [[fstab]] を生成しようとしたときに問題が発生することがあります。重複するエントリを削除して "seclabel" オプションを削除してください。後者は Fedora だけで使われるオプションで、システムが起動できなくなります。 |
||
+ | |||
+ | == 再起動する前に確認すること == |
||
+ | |||
+ | 再起動する前に、新しくインストールした環境に chroot してください。 |
||
+ | |||
+ | [[SSH]] を使いログインできるように、ユーザーとパスワードを作成してください。root でのログインは OpenSSH-7.1p2 からデフォルトで無効です。 |
||
+ | |||
+ | 再起動後 su を使えるように root パスワードを設定: |
||
+ | # passwd |
||
+ | |||
+ | [[SSH]] をインストールして起動時に自動的に実行されるように[[有効化]]してください。 |
||
+ | |||
+ | 起動時に自動的に接続されるように[[ネットワーク]]を設定してください。 |
||
+ | |||
+ | [[ブートローダー]]をセットアップしてルートパーティションと同じように適切なスワップパーティションを使用するように設定します。古い環境を起動できるようにブートローダーを設定することもできます。その場合、サーバーの既存の {{ic|/boot}} パーティションを再利用するのも有用です。 |
||
+ | |||
+ | == LiveCD を使わずに既存の環境を置き換える == |
||
+ | |||
+ | ディスク上に 700MB 程度の空き容量を見繕ってください。スワップパーティションを無効化してシステムをセットアップします。 |
||
+ | |||
+ | === 昔のスワップパーティションを新しいルートパーティションに設定 === |
||
+ | |||
+ | {{ic|cfdisk}}, {{ic|/proc/swaps}}, {{ic|/etc/fstab}} をチェックしてスワップパーティションを確認してください。ハードドライブが {{ic|sdaX}} として、以下を実行: |
||
+ | |||
+ | スワップ領域を無効化: |
||
+ | # swapoff /dev/sdaX |
||
+ | |||
+ | ファイルシステムを作成 ({{ic|/dev/sdaX}} の ID フィールドは "Linux" (83) に設定): |
||
+ | # fdisk /dev/sda |
||
+ | # mke2fs -j /dev/sdaX |
||
+ | |||
+ | マウントするためにディレクトリを作成: |
||
+ | # mkdir /mnt/newsys |
||
+ | |||
+ | 一時的に新しいディレクトリをマウント: |
||
+ | # mount -t ext4 /dev/sdaX /mnt/newsys |
||
+ | === インストール === |
||
− | ここからは、[[インストールガイド]]の[[インストールガイド#パーティションのマウント|パーティションのマウント]]セクションに従って下さい。 |
||
+ | 空き容量が 700MB 以下の場合、base グループのパッケージを確認して、インターネット接続を立ち上げて一時的なパーティションで実行するのに必要なパッケージだけを選択してください。個別のパッケージを pacstrap に指定して、-c オプションを使います。 |
||
+ | 新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションに[[Rsync によるフルシステムバックアップ|システム全体を rsync]] してください。再起動する前にブートローダーの設定を修正してください。 |
||
− | ==LiveCD を使わずに既存のシステムを置き換える== |
||
− | swap パーティションをパーティション分けするなどしてディスクのどこかに ~500MB の空き容量を作って下さい。 |
||
− | そこに新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションに[[Full system backup with rsync#With_a_single_command|システム全体を rsync]]してください。 |
||
− | 再起動する前にブートローダーの設定を修正してください。 |
2023年10月21日 (土) 18:54時点における最新版
関連記事
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、インストールガイドの記述に従ってインストールを行なって下さい。
既存の Linux から Arch Linux をインストールすることが考えられるのは以下の場合になります:
- Arch Linux のリモートインストール、例えば (仮想) ルートサーバー
- 既存の Linux を LiveCD を使わずに置き換える (#LiveCD を使わずに既存のシステムを置き換える を参照)
- Arch Linux ベースの新しい Linux ディストリビューションや Arch Linux ベースのLiveMedia の作成
- Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ
- ディスクレスマシンの rootfs-over-NFS
ブートストラップの目的は arch-install-scripts のスクリプト (pacstrap
や arch-chroot
など) が走る環境をセットアップすることです。
ホストシステムで Arch Linux を動かしている場合は、arch-install-scripts をインストールするだけです。ホスト環境で他の Linux ディストリビューションを使っている場合、まず Arch Linux ベースの chroot をセットアップする必要があります。
目次
バックアップと準備
メールやウェブサーバーなど全てのデータをバックアップしてください。マシン設定の情報も控えておきましょう。サーバーの設定やホストネームなどです。
以下は必要なデータのリストです:
- IP アドレス
- ホストネーム (ノート: ルートサーバーも大抵の場合、プロバイダーのドメインに含まれます。
/etc/hosts
を確認・バックアップしてください) - DNS サーバー (
/etc/resolv.conf
を確認) - SSH 鍵 (サーバーを使っている人が他にいる場合、新しい鍵を認証する必要があります。Apache やメールサーバー、SSH サーバーなどの鍵が該当します)
- ハードウェアの情報 (ネットワークカードなど。インストール済みの
/etc/modules.conf
を参照してください) - GRUB 設定ファイル
ローカルのハードドライブに /etc
ディレクトリのコピーを作成すると良いでしょう。
Arch Linux が動作しているホストからインストール
arch-install-scripts パッケージをインストールしてください。
インストールガイド#パーティションのマウントに従ってください。/mnt
ディレクトリを別の用途に使っている場合、/mnt/install
などのように他のディレクトリを作成してください。
その後インストールガイド#インストールに従ってください。ホストにミラーリストが存在するため、インストールガイド#ミラーの選択は省略できます。
他の Linux ディストリビューションが動作しているホストからインストール
以下のサブセクションに書かれている手順を自動化するツールが複数存在します。詳しくはそれぞれのホームページを見てください。
- arch-bootstrap (Bash)
- image-bootstrap (Python)
- vps2arch (Bash)
以下では手動でインストールする方法を記述しています。ホスト環境で直接 pacman を動作させる方法と、ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納する方法を紹介します。
ホストシステムから pacman を使用する
Pacman のソースコード は大抵の Linux ディストリビューションでコンパイルでき、ホストシステムから直接 Arch Linux をブートストラップするのに活用できます。arch-install-scripts は最近のディストリビューションでダウンロードしたソースコードから問題なく動作するはずです。
ディストリビューションによっては、公式リポジトリに pacman や arch-install-scripts があり、ブートストラップに利用できます。2019年2月時点で、Gentoo Linux には pacman パッケージが提供されており、Alpine Linux および Fedora には pacman と arch-install-scripts がともにに提供されていると知られています。
chroot の作成
chroot をセットアップする方法は2つ存在します。簡単な方法と複雑な方法の2つです。どちらか片方を選択してください。その後、#chroot 環境を使うに進んでください。
方法 A: ブートストラップイメージを使う (推奨)
ミラー からブートストラップイメージを /tmp
にダウンロードしてください。
署名をダウンロードして (URL に .sig
が付きます)、GnuPG で検証することもできます。
tarball を解凍:
# tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-*-x86_64.tar.gz
/tmp/root.x86_64/etc/pacman.d/mirrorlist
を編集してリポジトリサーバーを選択してください。
chroot 環境に入ってください:
- bash 4 以上がインストールされていて、unshare が --fork と --pid オプションに対応している場合:
# /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
- bash 4 未満の場合、以下のコマンドを実行:
# mount --bind /tmp/root.x86_64 /tmp/root.x86_64 # cd /tmp/root.x86_64 # cp /etc/resolv.conf etc # mount -t proc /proc proc # mount --make-rslave --rbind /sys sys # mount --make-rslave --rbind /dev dev # mount --make-rslave --rbind /run run # (assuming /run exists on the system) # chroot /tmp/root.x86_64 /bin/bash
方法 B: LiveCD イメージを使う
最新の Arch Linux インストールメディアのルートイメージをマウントして chroot することができます。この方法では特定のパッケージをインストールして準備をしなくても Arch Linux のインストール環境を動作させることができるというメリットがあります。
- ルートイメージは ミラー の arch/x86_64/ と arch/i686/ に存在します (使用したいアーキテクチャにあわせて選んでください)。squashfs フォーマットは編集ができないため、ルートイメージを unsquash してからマウントします。
- ルートイメージを unsquash するには、次を実行:
# unsquashfs airootfs.sfs
- chroot する前に、マウントポイントを設定して
resolv.conf
をコピーする必要があります:
# mount --bind squashfs-root squashfs-root # mount -t proc none squashfs-root/proc # mount -t sysfs none squashfs-root/sys # mount -o bind /dev squashfs-root/dev # mount -o bind /dev/pts squashfs-root/dev/pts ## important for pacman (for signature check) # cp -L /etc/resolv.conf squashfs-root/etc ## this is needed to use networking within the chroot
- それから、新しくインストールする Arch 環境に chroot してください:
# chroot squashfs-root bash
chroot 環境を使う
ブートストラップ環境は完全なベアボーンです (nano
も ping
も cryptsetup
も lvm
も存在しません)。したがって、pacman をセットアップして base
を (必要であれば base-devel
も) ダウンロードする必要があります。
pacman キーリングの初期化
インストールを開始する前に、pacman の鍵をセットアップしてください。pacman-key#キーリングの初期化を読んでから (エントロピーが必要です)、以下のコマンドを実行:
# pacman-key --init # pacman-key --populate archlinux
基本ツールをダウンロード
ミラーを選択したら、パッケージリストを更新して必要なパッケージをインストールしてください: base, base-devel, parted など。
インストールのヒント
インストールガイド#パーティションに進んでインストールガイドの残りのセクションに従ってください。
ホスト環境によっては特定の設定が必要になることがあります。以下のセクションを見てください。
Debian ベースのホスト
/dev/shm
Debian ベースのホスト環境では、pacstrap
が以下のエラーを表示することがあります:
# pacstrap /mnt base
==> Creating install root at /mnt mount: mount point /mnt/dev/shm is a symbolic link to nowhere ==> ERROR: failed to setup API filesystems in new root
Debian では、/dev/shm
が /run/shm
になっているのに対して、Arch の chroot では /run/shm
が存在せずリンクが壊れてしまうのが原因です。エラーを回避するには、/run/shm
ディレクトリを作成してください:
# mkdir /run/shm
/dev/pts
Debian 7 ホストから archlinux-2015.07.01-x86_64
をインストールしたとき、pacstrap と arch-chroot が以下のエラーで動作しません:
# pacstrap -i /mnt
mount: mount point /mnt/dev/pts does not exist ==> ERROR: failed to setup chroot /mnt
スクリプトが一般的な関数を使っているのが原因です。chroot_setup()
[1] は util-linux の新しい機能に依存していますが、Debian 7 のユーザーランドでは使用することができません (FS#45737 を参照)。
様々な作業 を手動で実行して対象ディレクトリ ("$newroot"
) にカーネルファイルシステムを通常の方法でマウントしてください:
# newroot=/mnt # mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc} # mkdir -m 1777 -p "$newroot"/tmp # mkdir -m 0555 -p "$newroot"/{sys,proc} # mount --bind "$newroot" "$newroot" # mount -t proc /proc "$newroot/proc" # mount --rbind /sys "$newroot/sys" # mount --rbind /run "$newroot/run" # mount --rbind /dev "$newroot/dev" # pacman -r "$newroot" --cachedir="$newroot/var/cache/pacman/pkg" -Sy base base-devel ... ## add the packages you want # cp -a /etc/pacman.d/gnupg "$newroot/etc/pacman.d/" ## copy keyring # cp -a /etc/pacman.d/mirrorlist "$newroot/etc/pacman.d/" ## copy mirrorlist
インストールガイド#Chroot では arch-chroot
のかわりに、chroot "$newroot"
を使います。
lvmetad
Debian 7 のホストの archlinux-bootstrap-2015.07.01-x86_64
から LVM の論理ボリュームを作成しようとすると以下のエラーが発生します:
# lvcreate -L 20G lvm -n root
/run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /dev/lvm/root: not found: device not cleared Aborting. Failed to wipe start of new LV.
(Debian から) chroot の外側に論理ボリュームを作成することでエラーを回避できます。その後、chroot して利用してください。
また、システムから LVM を使用している場合に、以下の出力がされることがあります:
# grub-install --target=i386-pc --recheck /dev/main/archroot
Installing for i386-pc platform. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
Debian がデフォルトで lvmetad を使用しないのが原因です。/etc/lvm/lvm.conf
を編集して use_lvmetad
を 0
に設定してください:
use_lvmetad = 0
上記の設定を行うと起動の initrd ステージでエラーが発生します。GRUB の生成を行ってから変更してください。ソフトウェア RAID + LVM の場合、以下の手順で設定します:
- システムを全てインストールした後、initramfs (mkinitcpio) や ブートローダーの設定をよく確認してください。
/etc/mdadm.conf
を RAID の構成にあわせて変更してください。- LVM と RAID の要件を満たすように HOOKS と MODULES を変更してください:
MODULES="dm_mod" HOOKS="base udev mdadm_udev ... block lvm2 filesystems ..."
。 - mkinitcpio で initrd イメージを生成してください。mkinitcpio#イメージ作成とアクティベーション を参照。
/etc/lvm/lvm.conf
を編集してuse_lvmetad=0
と記述します。- ブートローダーの設定を更新します。
/etc/lvm/lvm.conf
を編集してuse_lvmetad=1
と記述します。
Fedora ベースのホスト
Fedora ベースのホストやライブ USB では genfstab
を使って fstab を生成しようとしたときに問題が発生することがあります。重複するエントリを削除して "seclabel" オプションを削除してください。後者は Fedora だけで使われるオプションで、システムが起動できなくなります。
再起動する前に確認すること
再起動する前に、新しくインストールした環境に chroot してください。
SSH を使いログインできるように、ユーザーとパスワードを作成してください。root でのログインは OpenSSH-7.1p2 からデフォルトで無効です。
再起動後 su を使えるように root パスワードを設定:
# passwd
SSH をインストールして起動時に自動的に実行されるように有効化してください。
起動時に自動的に接続されるようにネットワークを設定してください。
ブートローダーをセットアップしてルートパーティションと同じように適切なスワップパーティションを使用するように設定します。古い環境を起動できるようにブートローダーを設定することもできます。その場合、サーバーの既存の /boot
パーティションを再利用するのも有用です。
LiveCD を使わずに既存の環境を置き換える
ディスク上に 700MB 程度の空き容量を見繕ってください。スワップパーティションを無効化してシステムをセットアップします。
昔のスワップパーティションを新しいルートパーティションに設定
cfdisk
, /proc/swaps
, /etc/fstab
をチェックしてスワップパーティションを確認してください。ハードドライブが sdaX
として、以下を実行:
スワップ領域を無効化:
# swapoff /dev/sdaX
ファイルシステムを作成 (/dev/sdaX
の ID フィールドは "Linux" (83) に設定):
# fdisk /dev/sda # mke2fs -j /dev/sdaX
マウントするためにディレクトリを作成:
# mkdir /mnt/newsys
一時的に新しいディレクトリをマウント:
# mount -t ext4 /dev/sdaX /mnt/newsys
インストール
空き容量が 700MB 以下の場合、base グループのパッケージを確認して、インターネット接続を立ち上げて一時的なパーティションで実行するのに必要なパッケージだけを選択してください。個別のパッケージを pacstrap に指定して、-c オプションを使います。
新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションにシステム全体を rsync してください。再起動する前にブートローダーの設定を修正してください。