archlinuxをVirtualBoxにインストール(1)

VirtualBoxはOral謹製の仮想環境。ホストとしてWindows,Mac,Linux,Solarisに対応し無料で使える。
2013年8月現在のarchlinuxのインストールはisoイメージはあるが、OSインストールはほとんど手動で行うのでそのための練習メモ。
VirtualBoxのダウンロード先はこちら
archlinuxのダウンロード先はこちら
下の方のJapan→jaist.ac.jp当たりからダウンロードすれば良いだろう。2013年9月現在の最新版は
archlinux-2013.09.01-dual.isoである。archlinuxのisoイメージは毎月更新されるらしいので、最新版はここを必ず確認すること。

VirtualBoxをダウンロード出来たらインストールし、最初にしておくべき設定は、環境設定メニューからネットワークタブを開き、右側の+ボタンをクリックしホストオンリーネットワークを追加しておくこと。
vboxnet0が追加される。これをしておくとホストOSのターミナルからsshで接続して作業がやりやすくなるし、archlinux上でwebサーバなどを構築した後にテストしやすい。

Oracle VM VirtualBoxマネージャの新規をクリック。名前にArchとか入れると自動でOSタイプが認識される。
以降は、

  • メモリサイズ:1024MB
  • ハードドライブ:仮想ハードドライブを作成する
  • ハードドライブのファイルタイプ:VDI
  • 物理ハードドライブにあるストレージ:可変サイズ
  • ファイルの場所とサイズ:8GB

作成をクリック。
マネージャ画面で設定タブをクリック。ネットワークタブで
アダプタ2
ネットワークアダプタを有効化
割当:ホストオンリーアダプタ
名前:vboxnet0
次にストレージタブ。
ストレージツリーのコントローラ:IDEのCDアイコン 空をクリック。
属性のCDアイコンをクリック 仮想CD/DVDを選択から先ほどのarchlinuxのisoイメージを選択
OKボタンクリックで準備完了。ここまで設定完了するとマネージャ画面は下のようになっているはず。
VBManagerInfo

起動ボタンで起動後、Boot Arch Linux x86_64を選択してリターンでisoイメージからブートする。
automatic loginでrootにログインし、入力待ちになるので、

# loadkeys jp106
# passwd
# systemctl start sshd
# ip addr

IP アドレスは2つ確認できるはず。192.から始まるIPアドレスはホストからアクセス可能なIPアドレスなので(筆者の環境では192.168.56.102だった)ホストのターミナルから

iMac:~ hiro$ ssh root@192.168.56.102
The authenticity of host '192.168.56.102 (192.168.56.102)' can't be established.
RSA key fingerprint is cc:c2:63:20:9a:dd:62:fe:39:c6:bd:55:d7:7a:69:01.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.102' (RSA) to the list of known hosts.
root@192.168.56.102's password:

でログイン。何度もインストールトライして同じプライベートIPになってしまうと、sshで接続する際にRSA Key が違うよと怒られることがあるが、その場合はホストPCの
~/.ssh/known_hosts
を編集して該当IPの一行を削除すると良い。

まずはパーティション作製

# cgdisk /dev/sda

GPTパーテションでgrubブートローダを使用するため、パーティションはcgdiskを使う。
(VirtualBoxのゲストOSはUEFIではなく、BIOSモードで起動する)
注意点だが、パーティションに1007KiBの領域で、かつ、type:ef02のBIOS Boot partitionを作成する必要がある。cgdiskは何かパーティションを作ると勝手に1007KiBをfree spaceとして確保するので、最後にtype設定を行う。
これを忘れると、grub-installで失敗してまたパーティションからやり直すハメになる。
linux partitionは/boot (100M)と / (残り全部)に分けた。ここはお好みで。
cgdiskを起動したら
・[New]
・first sector:このままリターン
・サイズを 100M で入力
・タイプはデフォルト値でそのままリターン linux partitionになる。
名前は bootとでも入れておく。 名前はなくても良い。
次も
・[New]
・first sector:このままリターン
・size:このままリターン
・タイプ:このままリターン
・名前: / 入力。 名前はなくても良い。
cgdiskは一番上に1007Kibのfree スペースが取られるので、最後にこの部分を選択
・[New]
・first sector: そのままリターン
・last sector: そのままリターン
タイプのところだけ注意。ef02 を入力。 名前は不要。
以上を実行すると下記の画面になるはずなのでその後[Write][Quit]でパーティションは終了。cgdisk_bios_type_set
フォーマット & マウント

# mkfs.ext4 /dev/sda2 && mkfs.ext4 /dev/sda1
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

pacman mirrorlistの編集とpacstrapで最小限のインストール
mirrorlistでは以下の行をファイルの最上段に持ってくる。
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
ちなみに上のサーバーはインストール完了後、reflectorをインストールし
パッケージを提供してくれるサーバにおいて、日本国内の最速サーバを取ってきたもの。
# reflector –verbose –country Japan -l 200 -p http –sort rate –save /etc/pacman.d/mirrorlist
の実行の結果得られたものである。

エディタは便利なのでvim,ssh接続のためopenssh,ネットワークのお手軽設定のためnetworkmanagerを入れておく。

# nano /etc/pacman.d/mirrorlist
# pacstrap /mnt base base-devel vim openssh networkmanager

genfstabしてch-root

# genfstab -U -p /mnt >> /mnt/etc/fstab
# arch-chroot /mnt /bin/bash

ロケールの設定

# vim /etc/locale.gen

/etc/locale.genを編集して
#en_US.UTF-8
#ja_JP.UTF-8
の行頭をアンコメントするだけ。その後以下のコマンドは下の行までcopy & pasteで大丈夫なはず。ホストネームは適宜自分の好みに書き換えるべし。最下行でrootのパスワード設定。

# locale-gen
# echo LANG=en_US.UTF-8 >> /etc/locale.conf
# echo KEYMAP=jp106 >> /etc/vconsole.conf
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc --utc
# echo Arch >>  /etc/hostname
# mkinitcpio -p linux
# passwd

ブートローダのインストール & 設定

# pacman -S grub-bios
# grub-install --recheck /dev/sda
Installation finished. No error reported.

この後のgrub-mkconfigの際に注意。この記事を修正した2013年12月7日の時点でのgrub-biosのバージョンは
grub-1:2.00.1282.g5ae5c54-1
であり、grub-mkconfigの実行時に
error: out of memory.
error: syntax error.
error: Incorrect command.
error: syntax error.
を吐いてしまう。そこで、

vim /etc/default/grub
GRUB_DISABLE_SUBMENU=y //この行を最後に追加して保存終了。
# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
done

ネットワークの自動設定
archlinuxらしくないと言われればそれまでだが、お手軽ネットワーク設定。ただし、他のネットワークモジュールとコンフリクトするらしいので、詳細はwikiの英語版を確認のこと。日本語版にはイーサネットをダウンさせろとか書いてあるが、これをやるとsshが切れてしまい、その後の操作が出来ない(からやってはいけない)。NetworkManagerはインストールの時はすべて小文字だけど、サービス名はNetworkManager.serviceだから気をつけること。

# systemctl enable sshd.service
# systemctl enable NetworkManager.service
# exit
# umount /mnt/{boot,}
# shutdown -h now

VirtualBoxマネージャウィンドウの設定ボタンからストレージタブを選択、CD/DVDアイコンをクリックして仮想ドライブからisoを除去してから再起動する。

VirtualBoxのコンソールからrootでログインして、

# ip addr

でプライベートIPアドレスを確認し、もしインストール時のIPアドレスと同じだとホストマシンからsshで接続の時に
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

のメッセージが出て接続できないので、この場合はホスト側のターミナルで

# vim ~/.ssh/known_hosts

を編集し、該当するプライベートアドレスの行を dd で削除、:wqで保存終了。最後にホストOSのターミナルで

# ssh root@192.168.56.102

でログイン出来るはず。
一般ユーザの追加等は次回に。