既存の Linux からインストール
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、インストールガイドの記述に従ってインストールを行なって下さい。
既存の Linux から Arch Linux をインストールすることが考えられるのは以下の場合になります:
- Arch Linux のリモートインストール、例えば (仮想) ルートサーバー
- 既存の Linux を LiveCD を使わずに置き換える (#LiveCD を使わずに既存のシステムを置き換える を参照)
- Arch Linux ベースの新しい Linux ディストリビューションや LiveCD の作成
- Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ
- ディスクレスマシンの rootfs-over-NFS
ブートストラップの目的は arch-install-scripts (pacstrap
や arch-root
など) が走る環境をセットアップすることです。
ホストシステムにネイティブに arch-install-scripts をインストールするか、Arch Linux ベースの chroot を設定することでこれを行います。
ホストシステムで Arch Linux を動かしている場合は、arch-install-scripts をインストールするだけです。
目次
Arch Linux ベースの chroot
ホストシステムの中で Arch システムを動かします。 実際のインストールは Arch システムから実行します。 chroot の中に入れ子になったシステムが含まれます。 設定して chroot に入る方法は以下の3つがあります。
方法 1: ブートストラップイメージを使う
ミラーからブートストラップイメージをダウンロードしてください:
$ 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
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/
方法 2: LiveCD イメージを使う
最新の Arch Linux インストールメディアの root イメージをマウントして chroot することが可能です。この方法は指定のパッケージをインストールする必要なくホストシステムの中で Arch Linux をインストールできるという利点があります。
- root イメージはミラーの一つから取得することができます。squashfs フォーマットは編集ができないので root イメージを unsquash してマウントします。
- root イメージを unsquash するには、次を実行してください:
# unsquashfs -d /squashfs-root root-image.fs.sfs
- これで root イメージをループマウントすることができます:
# mkdir /arch # mount -o loop /squashfs-root/root-image.fs /arch
- chroot する前に、マウントポイントを設定してネットワークのために resolv.conf をコピーする必要があります。
# 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
- 新しくインストールする Arch 環境に chroot する準備がすべて整いました:
# chroot /arch bash
方法 3: (スクリプトを使って) 手動で chroot を組み立てる
このスクリプトは archinstall-pkg
という名前のディレクトリを作成し、必要なパッケージをそこにダウンロードします。それからパッケージを archinstall-chroot
ディレクトリに展開します。最後に、マウントポイントを準備して、pacman を設定し chroot に入ります。
archinstall-bootstrap.sh
#!/bin/bash # last edited 02. March 2014 # This script is inspired on the archbootstrap script. FIRST_PACKAGE=(filesystem) 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[*]}) # Change to the mirror which best fits for you # USA MIRROR='http://mirrors.kernel.org/archlinux' # Germany # MIRROR='http://archlinux.limun.org' # 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/" # 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/" mkdir -p "$CHROOT_DIR/etc/pacman.d/" echo "Server = $MIRROR/\$repo/os/$ARCH" >> "$CHROOT_DIR/etc/pacman.d/mirrorlist" 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
chroot 環境を使う
pacman キーリングの初期化
インストールを始める前に、pacman のキーを設定する必要があります。pacman-key (日本語)#キーリングの初期化 を読んでエントロピーの必要性について理解してから以下の2つのコマンドを実行してください:
# pacman-key --init # pacman-key --populate archlinux
インストール
インストールガイドのパーティションのマウントとベースシステムのインストールのセクションに従って下さい。
Debian ベースのホスト
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
システムの設定
ここからは、インストールガイドのパーティションのマウントセクションに従って下さい。
LiveCD を使わずに既存のシステムを置き換える
swap パーティションをパーティション分けするなどしてディスクのどこかに ~500MB の空き容量を作って下さい。 そこに新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションにシステム全体を rsyncしてください。 再起動する前にブートローダーの設定を修正してください。