Archlinux の Vagrant Box (VirtualBox) を一から作る
目的
- Archlinux の Virtualbox 用 Vagrant box を作る。 http://www.vagrantbox.es にはすでにあるけど、サイズが 400M に近いサイズのものが多く、もっと減らせるのではと思った
- 勉強
作業
仮想マシンの作成
Virtualbox で仮想マシンを作成する。
- 名前は vagrant-archlinux
- メモリは 256MB
- ディスクは VDI で約 40GB
- 接続には NAT
ArchLinux のインストール
ここからイメージを落としてくる。 マウントし、起動。
- パーティションは分けない。 swap もめんどいからなし
- ホスト名は
vagrant-archlinux
/etc/localtime
は/usr/share/zoneinfo/UTC
- passwd:
vagrant
- その他 Installation guide - ArchWiki に書かれている普通の手順を踏む
ここで再起動し、ハードディスクから起動し直す
- ネットワークは dhcpcd で設定
# useradd -m -G wheel -s /bin/bash vagrant; passwd vagrant
する。パスワードはvagrant
sudo
を設定する%wheel ALL=(ALL) NOPASSWD: ALL
を uncommentDefaults env_keep += "SSH_AUTH_SOCK"
という行を加える
- ここを見つつ、
virtualbox-guest-utils
をインストールする - ruby, rubygems, puppet, openssh をインストールする。
sudo gem install chef
する。 - ssh鍵を https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub からコピーし、
/home/vagrant/.ssh/authorized_keys
に置く。chmod 700 /home/vagrant/.ssh
をついでにする。 /etc/ssh/sshd_config
にUseDNS no
を追記する- sshd を立てる
マシンを終了する。
box の作成
$ vagrant package --base vagrant-archlinux
仮想マシンの名前を使って package を実行する。
この時点で、 .box のサイズは 545M だった。 大きすぎるので、 WEB の情報も参考にサイズを減らすことを試した。
サイズを縮める
- パッケージのキャッシュを削除する。
pacman -Scc
gem install chef
に必要だった gcc と make を削除。pacman -Rs gcc make
- ディスクの空き部分をゼロで埋める?
dd if=/dev/zero of=/empty bs=1M; rm /empty
結果
サイズは 288M になった。
縮める前に比べれば予想以上に減った。ここまで減ったのはゼロで埋めたのが大きいのかも? もしかしたら既存の http://www.vagrantbox.es/ のものもゼロで埋めるだけで減るかも??
一番初めの考えではもっと小さくなると思っていたけれど、最終的には 300M 程度になった。 virtualbox-guest-utils の依存で xorg 系のパッケージが軒並み入ったりしてそれが容量を増やしているような印象を受けたけど、正直分からない。
参考
Cygwin のパッケージを管理する pac-cyg
作りました。
apt-cyg の fork です。
apt-cyg
のコマンドオプションが長くて面倒だったので、 Arch Linux の pacman に似たオプションを使えるようにしました。その他少しリファクタリングをしたりしました。
インストール
現在まともなインストール方法はありません。
ここ からダウンロードしてパスの通った場所において chmod +x
してください。
かんたんな使い方
パッケージをインストールするには、
$ pac-cyg -S tmux
します。
$ pac-cyg -R tmux
でパッケージを削除します。また、
$ pac-cyg -Q
でインストールされたパッケージのリストが見られたりします。
その他、パッケージの検索、ファイルからのパッケージの逆引きができたりします。
詳しくは、 README.md を参照するか pac-cyg -h
, pac-cyg -Sh
とかしてみてください。
USB メモリにインストールした Arch Linux を別のへコピーする
目的
元々ある USB メモリにインストールしてあった Arch Linux を別の USB にブート可能な形で移動する。 コピー先の方が容量が小さいので、 dd は使えない気がする(?)。
登場人物
UUID を知るには lsblk -f
, サイズを知るには lsblk -m
コピー元USBメモリ : sdc
コピー先 : sdb
- sdb1: , fvat, 226A-xxxx, 3.8G
全削除する
方針
- sdb を普通インストールするときと同じようにパーティション分けする
- 両方を mount し、 rsync か何かを使って全パーティションをコピーする
- /boot 以下のファイル、 /etc/fstab でディスクの UUID を新しいものに書き換える
ログ
パーティション分け、フォーマット
# gdisk /dev/sdb
o で新たにパーティションテーブルを作り、 n でパーティションを作る。 先頭から 100M とそれ以外の全部に分ける。 あと一応 c でラベルをつけておく (Boot_ArchLinux, Root_ArchLinux)。 w で書き込んで終了。
# mkfs.ext2 /dev/sdb1 # mkfs.ext4 /dev/sdb2
ファイルのコピー
# mkdir usbcp && cd usbcp # mkdir src # mkdir dst # mount /dev/sdc1 src # mount /dev/sdb1 dst # rsync -aAXv src/ dst ## 動いてるシステムのコピーじゃないので exclude は不要 # umount src dst # mount /dev/sdc2 src # mount /dev/sdb2 dst # rsync -aAXv src/ dst # umount src dst
ファイルの書き換え
# mount /dev/sdb2 dst # vi dst/etc/fstab ## UUIDを書き換える # umount dst
ブートローダのインストール
# mount /dev/sdb2 /mnt # mount /dev/sdb1 /mnt/boot # arch-chroot /mnt # syslinux-install_update -i -a -m # exit # umount -R /mnt
参考
Arch Linux インストール後の MacBook 固有っぽい設定とか
参考
キーボードとか
F
# echo 2 >/sys/module/hid_apple/parameters/fnmode
pommed を使ってみる。 macbook 用のキーボード設定らしい。 aur から。 /etc/pommed.conf.mactel を pommed.conf としてコピーし、 general で fmmode = 2 とする。 systemctl enable pommed で有効にする。
無線LANの設定
wifi-menu を使うと、たまに画面がどうしようもなくなって動けなくなる(dialog の問題?)。 しかたがないので networkmanager を使ってみる。 cli ツールは nmcli 。
# nmcli device wifi list # list ssid
# nmcli device wifi connect <ssid> password <password>
音
alsa-utils をインストールする。 alsamixer で音量調節をする。 Master がはじめミュートになってることに注意する。
X
ビデオカードを調べる
lspci | grep VGA すると NVIDIA なのがわかるので、 NVIDIA - ArchWiki を見る。
lspci | grep -A 2 -i VGA すると GeForce 320M の文字が見えるので、 CodeNames を見るとコードネームは NVAF っぽい。ということは、 nvidia-304xx を入れれば良い?
なんかうまくいかない(真っ暗になる(電源が落ちる?))ので、 nvidia は諦めて xf86-video-nouveau を入れる。 これを入れる前に、 aur から mesa-git を入れる。
KMS を有効にするという指示があるが、 KMS のページを見ると自動で有効になるという記述があるので気にしない。
nvidia-bl を aur から入れるかも。
xf86-input-synaptics を入れる。
あと xorg-server とかもろもろ入れて、以上で startx がまともに動くことを確認。
その他
TODO
- カラープロファイルの設定 MacBook - ArchWiki
MacBook Air に Arch Linux を入れる
参考
CD ブート
インストールディスクをもらってきて焼く。 2014.02.01-dual 使った。
/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport と
/Library/ColorSync/Profiles/Displays/
MacOSX が存在するうちに音量をミュートにしておく、ソフトウェア・アップデートをしておく。
alt/options を押しながら再起動して cd からブートする。
ディスクのセットアップとか
ともかくまずは loadkeys i386/qwerty/jp106.map.gz
cgdisk /dev/sda でパーティションをいじる。
1 200MiB EFI System
2 100MiB Linux filesystem BootArch
3 rest Linux filesystem RootArch
partition type ってなんだかわかんないんだけど Linux filesystem でいいのかしら。
ディスクをフォーマットする。 lsblk が便利。
# mkfs.vfat /dev/sda1
# mkfs.ext2 /dev/sda2
# mkfs.ext4 /dev/sda3
マウントする。
# mount /dev/sda3 /mnt
# mkdir /mnt/boot
# mount /dev/sda2 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sda1 /mnt/boot/efi
ネットワークの設定を確認する。 wifi-menu 使ったらなんか簡単にできた。netctl から来たものらしい。
# pacstrap /mnt base
# genfstab -pU /mnt >> /mnt/etc/fstab
chroot
# arch-chroot /mnt
# vi /etc/hostname
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/locale.gen # uncomment ja_JP.UTF-8 and ja_JP.EUC-JP
# locale-gen
# vi /etc/locale.conf
LANG=ja_JP.UTF-8
LC_TIME=C
# vi /etc/vconsole.conf
KEYMAP=jp106
## /etc/mkinitcpio.conf の設定は不要?
# mkinitcpio -p linux
# passwd
無線lanを設定するためのパッケージを入れる。 dialog は wifi-menu に必要。
# pacman -S dialog wpa_supplicant
ブートローダ(正確には boot manager?)のインストール。
# pacman -S refind-efi
# refind-install
/boot/refind_linux.conf を編集するらしいがそのままにしておく?
exit で chroot 環境を抜け、 umount -R /mnt して reboot する。
TODO
- rEFInd の設定をどうにかする The rEFInd Boot Manager, EFISTUB - ArchWiki
rsync を使った簡単なディレクトリ同期ツール synk
作った。
https://github.com/10sr/script/blob/master/synk.sh
予め同期先のディレクトリを決めておけば、 synk {pull|push}
によってそのディレクトリと現在のディレクトリを同期できる。
まず、同期したいディレクトリに、 .synk.conf
というファイルを作る。
これはシェルスクリプトであり、例えば次のような変数定義を書く。
remote=user@host:/home/user/documents rsync_opts="--delete --backup --suffix=.bak"
この .synk.conf
を置いたディレクトリかその下のディレクトリで synk を実行すると、 .synk.conf
があるディレクトリをルートとして $remote
と同期する。
synk pull
なら remote の内容をローカルにコピーし、 synk push
はその逆をする。
emacs の minibuffer にホスト名を書く
リモートで作業しているときは、今いるマシンのホスト名がわからないとかなり困る。
普段は tmux を使っているので、そのステータスラインにホスト名を表示すれば十分だったりする。 でも、例えば多段に ssh してたりしてわざわざ tmux を張るほどじゃない場合もあって、そういう時に emacs を起動してそこがどこだかわからなくなることが意外とある。
なので、 emacs 上のどこかでホスト名を表示したいと思った。 表示する場所の候補の一つとしては mode-line とかあるけど、もう日付加えてるしあんまり色々書いても読みづらくなる。 その上 mode-line は window 毎に用意されるので無駄が多い感じが強い。
そこで、 advice を使って minibuffer に書くことにした。
find-file
とか minibuffer を使った対話的な入力のときに、 [USER@HOST]
が一緒に表示される(M-x
での表示には emacs24 から対応してる)。
(defvar my-system-info nil "System info in the form of \"[user@host] \".") (setq my-system-info (concat "[" user-login-name "@" (car (split-string system-name "\\.")) "] ")) (defadvice read-from-minibuffer (before info-in-prompt activate) (ad-set-arg 0 (concat my-system-info (ad-get-arg 0)))) (defadvice read-string (before info-in-prompt activate) (ad-set-arg 0 (concat my-system-info (ad-get-arg 0)))) (when (< emacs-major-version 24) (defadvice completing-read (before info-in-prompt activate) (ad-set-arg 0 (concat my-system-info (ad-get-arg 0)))))