MacBook AirのVirtualBoxにArch Linux 2012.12.01をインストール

インストールしてみたはいいけど、遅い…。

VMの設定の何かがマズいのかと思ったのですが、ググると他にもチラホラ遅いという話が上がっているようなので、VirtualBoxの問題なんでしょうね。
VMWare Fusionへの乗り換えを検討しています。

なお、MacはVMWare Playerが使えないという悲劇…。

ちなみにどの位遅いのかというと、

  • CPU: 1core割当, 使用率制限100%
  • MEM: 2GB

で、phantom.jsが10時間かかってもビルドし終わらない、emacs (GUI) の起動に数分かかる、guard立ち上げてるとemacsのカーソル移動が数秒遅れて反応する、という程度です (core数増やせばいいの?いや、それにしたって…) 。

では、インストール手順をば。

VirtualBoxのインストール

本家サイトから、Mac用のdmgを落としてきてポチっとします。
https://www.virtualbox.org/wiki/Downloads

仮想イメージの作成

VIrtualBoxを起動し、「新規」ボタンからVDI形式で作ります。容量はとりあえず60GBにしてみました。
VMDXにしようかとも思いましたが、後でVDIから変換できるようですし、VirtualBox上で動かすのであればVDIの方が変なオーバーヘッドが出なそう (未検証) だなと思ってVDIを選びました。

ま、VMWare Fusionに乗り換えようとしてるんですけどね。

Arch LinuxのISO入手

Arch LinuxのサイトからISOを落としてきます。

https://www.archlinux.org/download/

ファイルは archlinux-2012.12.01-dual.iso です。
bit torrentでもHTTPでもお好きな手段で。

その後、VirualBoxのUIから、前項で作った仮想イメージのCD/DVDとしてマウントさせます。

Arch Linuxのインストール

ここからが本題です。

いつの間にやら、Arch Linuxはインストーラらしいインストーラがいなくなっていました。
時代と逆行していてかわいいですね(ぉ

まずはVMを起動します。
Arch Linuxブートローダが現れます。

パーティションを切る

これ、自分でやらないといけません。/dev/sdaがディスクにあたるので、これをfdiskでパーテイショニングします。

# fdisk /dev/sda

で、

  • sda1 -> 100MB, /boot 用, bootable
  • sda2 -> 1GB, swap 用
  • sda3 -> 残り, / 用

としました。

どうせVMだし、と思って /home やら /var は切ってません。

なお、sda1にbootable flagを立てるのを忘れると起動しません。
fdiskの使い方はググればすぐ出ますし、ヘルプもあるのでそう迷わないはず。

パーティションのフォーマット

これも自分でやらないと行けません。

# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/sda3
# mkdswap /dev/sda2

/boot は 無難に ext2 です。

フォーマットしたらマウントします。

# mount /dev/sda3 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

で、このマウントしたディレクトリに色々とブツをインストールするわけです。

中の人をインストール

まずはレポジトリのミラーを設定します。

# vi /etc/pacman.d/mirrorlist

で、JapanのレポジトリのScoreを 0.1 にするとよいようです (<-Scoreが何者なのかまだ調べてない) 。

ではインストールします。

# pacstrap /mnt base base-devel

続いて、grubインストールします。

# arch-chroot /mnt pacman -S grub-bios

fstabを生成します。これがないと使えませんね。

# genfstab -p /mnt >> /mnt/etc/fstab
各種設定

さて、/mnt に必要なものをインストールしたわけなので

# arch-chroot /mnt

として /mnt を見せかけの / として扱います。
これによって、普通のLinuxっぽいファイルシステム構成として作業が進められます。

ホスト名の設定

# echo 'ホスト名前' >> /etc/hostname

タイムゾーンの設定

# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ロケールの設定

# echo 'LANG="ja_JP.UTF-8' >> /etc/locale.conf

続いて

# vi /etc/locale.gen

で「ja_JP.UTF-8 UTF-8」の行をアンコメントして

# locale-gen

コンソールキーマップとフォントの設定
とりあえず困ってないから初期状態のままで
直したくなったら
https://wiki.archlinux.org/index.php/KEYMAP_(%E6%97%A5%E6%9C%AC%E8%AA%9E)

イニシャルRAMディスク

いらないような気がします。試行錯誤の末、やらないようにした記憶がありますが、一応。。

# mkinitcpio -p linux

ブートローダ

# grub-install --target=i386-pc --boot-directory=/boot --recheck --debug /dev/sda

ちなみにここで target を x86_64-pc にしたら

source_dir doesn't exist. Please specify --target or --directory

と怒られました。なぜ…。

この後

# grub-mkconfig -o /boot/grub/grub.cfg

これをやらないとインストール後の起動で以下のエラーが出ます。

No such Device: ad4103fa-d940-47ca-8506-301d8071d467.
Loading Linux core repo kernel ...
error: no such partition.
Loading initial ramdisk ...
error: you need to load the kernel first.

Press any key to continue..._

rootのパスワード

# passwd
設定後
# exit

chroot を抜けて

# umount /mnt/boot

で /mnt 配下をアンマウントします (home や varがあればそれも)。そしてVMをシャットダウンします。

# shutdown -h now

VirtualBoxのUIからCDイメージをアンマウントして (しないとまたCDブートします) 再起動します。

以上でOSのインストールは完了です。

OSインストール後の設定

ネットワークの設定
# ip link set eth0 up
# systemctl start dhcpcd@eth0

どうも、起動の度に systemctrl しないとダメみたいです。起動時に自動でやって欲しいですが、まだその辺は調べてません。

あ、ちなみに ifconfig は初期状態では入っていないのでご注意を。

参考
https://wiki.archlinux.org/index.php/Beginners%27_Guide/Extra_(%E6%97%A5%E6%9C%AC%E8%AA%9E)

パッケージを最新に
# pacman -Syu
一般ユーザの作成

# useradd -m {username}
これでまずユーザを作った後

# pacman -S sudo
# sudoedit /etc/sudoers

として

{username} ALL=(ALL) ALL

を追記して、作ったユーザで sudo すれば色々できる便利設定をしておきます。

パスワードを

# passwd {username}

で設定します。

X Window System
# pacman -S xorg-server xorg-xinit xorg-server-utils

VitualBoxのゲストOSだったらビデオドライバのインストールは不要、とのことです。

続いて、VirtualBoxのゲストアドイン設定をします https://wiki.archlinux.org/index.php/VirtualBox#Arch_Linux_guests

# pacman -S virtualbox-guest-utils
# modprobe -a vboxguest vboxsf vboxvideo
# vi /etc/modules-load.d/virtualbox.conf

virtualbox.confの内容は

vboxguest
vboxsf
vboxvideo

となります。サービスの起動は

# VBoxClient-all &

とやるので、後ほど .xinitrc に記述しておきます。

Window Managerを入れます。

# pacman -S openbox

ターミナルエミュレータはひとまず

# pacman -S xterm

一般ユーザにします。

# su {username}

.xinitrc を記述します。

$ cd
$ vi .xinitrc

内容は

VBoxClient-all &
xterm &
exec openbox

Xを起動します。

$ startx
いつものパッケージをインストール

よく使うものを入れます。

$ sudo pacman -S zsh tmux openssh git emacs

自分の場合、GitHub にドットファイルを置いているので

$ git clone {れぽじとり} dotfiles
$ ln -s dotfiles/.zshrc .
$ ln -s dotfiles/.tmux.conf .
$ ln -s dotfiles/.emacs .

という感じにします。

ログインシェルをzshにします。

$ sudo vi /etc/passwd

自分の{username}の行で /bin/bash -> /bin/zsh とします。
または chsh コマンドを使います (こっちのが楽か…) 。
再起動しないと反映されない??

yaourt

AUR から便利にパッケージインストールできるようにします。

先ずは yaourt と依存関係にある package-query を入れるのですがそれがさらに依存関係にある yajl をインストールします。

$ sudo pacman -S yajl

package-query を入れます。AUR から落としてきてローカルでパッケージを作ってインストールします。

$ curl -O https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz
$ tar zxvf package-query.tar.gz
$ cd package-query
$ makepkg
$ sudo pacman -U package-query-*.pkg.tar.xz

yaourt 本体を入れます。要領は package-query と同じです。

$ curl -O https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz
$ tar zxvf yaourt.tar.gz
$ cd yaourt
$ makepkg
$ sudo pacman -U yaourt-*pkg.tar.gz
フォント

とりあえずRictyを入れておけば何とかなるでしょう。

$ yaourt -S ttf-ricty
キーコード

MacBook Air(日本語版)だと、英語配列にしたときにバッククオート/ティルダに相当するキーがないので

$ echo "keycode 132 = grave asciitilde grave asciitilde" > ~/.modmap

として
~/.xinitrc の openbox 実行前に

xmodmap ~/.xmodmap

を記述します。
これによって、バックスラッシュキー(deleteの横)がバッククオート/ティルダになります。ちょっと変則的ですけどね。

まあ、素直に日本語配列で使えばいいのかもしれませんが…。

日本語入力

mozcでもanthyでも好きなのを。とりあえず割愛します。