# Install from Existing 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 をインストールするだけです。

Note: このガイドでは新しいターゲット Arch Linux アーキテクチャのプログラムを実行することができる既存のホストシステムが必要です。ホストが x86_64 の場合、32ビット chroot 環境を作成するために i686-pacman を使うことができます。Arch64 Install bundled 32bit system を見て下さい。ただし、ホストが32ビットのプログラムしかサポートしていない場合、64ビット環境を作成するのは簡単ではありません。

## Arch Linux ベースの chroot

ホストシステムの中で Arch システムを動かします。 実際のインストールは Arch システムから実行します。 chroot の中に入れ子になったシステムが含まれます。 設定して chroot に入る方法は以下の3つがあります。

Note: ホストシステムは Linux 2.6.32 以降である必要があります。
Note: 以下の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

Note: x86_64 のホストシステムから i686 イメージをブートストラップする場合は、pacman が正しい i686 パッケージをインストールするように `/tmp/root.i686/etc/pacman.conf` を編集して `Architecture = i686` を明示的に定義する必要があります。

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 をインストールできるという利点があります。

Note: 先に進む前に、ホストシステムに squashfs の最新バージョンをインストールしてください。インストールしていないと次のエラーが表示されます: `FATAL ERROR aborting: uncompress_inode_table: failed to read block`。

- 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してください。 再起動する前にブートローダーの設定を修正してください。

Category:

- Getting and installing Arch (日本語)