xhyve で mikutter
xhyve 用の仮想マシンで FreeBSD インストールして mikutter 使えるようにした日記 (結構前にやったから記憶があやふやかも) (というか酒飲みながら書いてるので余計あやふや)
環境
- MacBook Air (13-inch, Early 2015)
- macOS Mojave 10.14
- XQuartz 2.7.11
- Homebrew
xhyve のインストール
% brew install xhyve
で多分おっけー
FreeBSD のインストール
適当なディレクトリを用意する (僕は $HOME/.xhyve/FreeBSD/
を作った)
% mkfile 16g storage.img
で 16GB の仮想マシン用ファイルを用意 (dd
コマンド使ってもなんでもいいしサイズも適当でいい)
FreeBSD の公式サイトから最新の bootonly とかの iso をダウンロードしてくる
% uuidgen > uuid
とかして UUID
を用意しておく
% mkdir boot % ln -s /usr/local/share/xhyve/test/userboot.so boot/userboot.so
のようにして /usr/local/share/xhyve/test/userboot.so
をとりあえず近くに持ってきた (あとで FreeBSD から userboot.so
持ってくるかもな〜的な)
#!/usr/bin/env bash DIR=$(dirname $0) ISO=$DIR/FreeBSD-11.2-RELEASE-amd64-bootonly.iso STORAGE=$DIR/storage.img USERBOOT=$DIR/boot/userboot.so BOOTVOLUME=$ISO UUID=$(cat "$DIR/uuid") MEM=2G SMP=2 PCI=0:0,hostbridge NET=2:0,virtio-net IMG=3:0,ahci-cd,$ISO HDD=4:0,virtio-blk,$STORAGE LPC=31:0,lpc DEV=com1,stdio KERNELENV="" xhyve -A -U $UUID \ -c $SMP \ -m $MEM \ -s $PCI \ -s $NET \ -s $IMG \ -s $HDD \ -s $LPC \ -l $DEV \ -f fbsd,$USERBOOT,$BOOTVOLUME,"$KERNELENV"
のようなスクリプト (僕は isoboot
って名付けました) を用意して sudo
で立ち上げ、いつものようにインストール
ifconfig
で IP アドレスを控えておくのと sshd
有効にしておくことは一応やっておく (後で X11 Forwarding したいので)
UUID
を固定しているので dhcp
云々でも IP アドレスは固定されるらしい (わからん)
インスコその他が終わったら
#!/usr/bin/env bash usage() { cat << EOS >&2 Usage: $(basename $0) [-h,--help] [-s, --stdio] Up the VM. Options: -s,--stdio Run the VM, connecting console to STDIO. -h,--help Show this message and exit. EOS exit 1 } DIR=$(dirname $0) STORAGE=$DIR/storage.img USERBOOT=$DIR/boot/userboot.so BOOTVOLUME=$STORAGE UUID=$(cat $DIR/uuid) SMP=2 MEM=2048 PCI=0:0,hostbridge NET=2:0,virtio-net HDD=4:0,virtio-blk,$STORAGE LPC=31:0,lpc DEV=com1,stdio KERNELENV="" for opt in $@; do case $opt in '--stdio'|'-s') SIO=1 ;; '--help'|'-h') usage ;; esac done if [[ -n $SIO ]] ; then xhyve -A -U $UUID \ -c $SMP \ -m $MEM \ -s $PCI \ -s $NET \ -s $HDD \ -s $LPC \ -l $DEV \ -f fbsd,$USERBOOT,$BOOTVOLUME,"$KERNELENV" else xhyve -A -U $UUID \ -c $SMP \ -m $MEM \ -s $PCI \ -s $NET \ -s $HDD \ -f fbsd,$USERBOOT,$BOOTVOLUME,"$KERNELENV" > /dev/null 2>&1 & fi
のようなスクリプト (これは up
って名前にした) を用意して sudo ./up --stdio
で標準入出力をどうたらで仮想マシンを立ち上げられるようになりました
この時点でのディレクトリの中身はこんな感じ
% tree -l . ├── FreeBSD-11.2-RELEASE-amd64-bootonly.iso ├── boot │ └── userboot.so -> /usr/local/share/xhyve/test/userboot.so ├── isoboot ├── storage.img ├── up └── uuid 1 directory, 6 files
VM 内での準備
まず下準備として VM 内で
% sudo pkg install xauth git ruby devel/ruby-gems libidn
しておきます (xauth
は X11 Forwarding のために必要だったはず)
そして mikutter のインストール
% sudo gem install rake bundler % git clone git://toshia.dip.jp/mikutter % cd mikutter % git checkout develop % bundle install --path vendor/bundle
怒られたらググって解決します
完全に好みなんですがこの後 mikutter
のディレクトリを /opt/
に移しました
日本語環境
ここからは GUI 使うかもなので X11 Forwarding 云々でログインしてる前提です
% sudo pkg install ja-fcitx-mozc zh-fcitx-configtool % sudo pkg install ja-font-migu ubuntu-font
で fcitx-mozc
とフォントを用意しておく (フォント云々はお好みで)
で 一回ログアウトしてもう一回ログイン
そしたら
% fcitx-config-gtk
して
fcitx
を適当にこういう風にいい感じに設定しておく
そして ~/.zshrc
やらの *rc
に
#X11 forwarding: IM config if [[ -z $FCITX_ENABLED ]] ; then if [[ -n $DISPLAY ]] && [[ -n $SSH_CLIENT ]] ; then export GTK_IM_MODULE=fcitx export QT_IM_MODULE=xim export XMODIFIERS=@im=fcitx mozc start > /dev/null 2>&1 fcitx -r -d > /dev/null 2>&1 export FCITX_ENABLED=1 fi fi
みたいなのを追記しておく
ついでに FreeBSD ではデフォルトで $HOME/bin
にパスが通ってるので
#!/usr/local/bin/bash LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 /opt/mikutter/mikutter.rb $@
こういうのを $HOME/bin/mikutter
として用意しておく (僕はロケールを en_US.UTF-8
にしてあるので)
終わったら再ログインなりなんなりして mikutter
で起動するかどうか確認しておきます (ログイン時に fcitx
起動してなかったら fcitx -r -d
しましょう)
その他
上で書いた up
はデフォルトではバックグラウンド起動的な感じで ssh
でログイン前提です
これから困るぞ〜ってときのために --stdio
用意してる的な (bash
の簡単なオプション解析書く練習だったんだけど)
Gtk のテーマとかフォントとかの設定したいなら lxappearance
とかインストールして設定するといいと思います (僕はさらに bzr
で bzr branch lp:ubuntu-themes
して ubuntu のテーマ持ってきたりしてます) (ubuntu のテーマ綺麗じゃないですか?)
mikutter -d
で mikutter は daemon で起動します
おわりに
さわやかておくれライフ!