Gentooをインストールして、XmonadでGUI環境を整える
はじめに
この記事は未完です。自分用のメモです。僕の個人的な環境での作業例です。現在はKVM上のゲストOSの環境を調整中です。
ゆくゆくは、もっと細かに内容にわけて、それぞれ独立した記事にする予定です。
何をするか
長年、Gentooを使ってきて、どのような環境にするのかが、ほぼ、かたまってきた。その「自分用の環境」を作成するための、やりかたをここにメモする。
この記事の書きかた
Gentooをインストールして、環境を整えるという作業を何度もくりかえしてきた。そこで、だいたい、どのようにするかは覚えている。ただし細部は忘れている。そこで、まずは作業の前に、だいたいの流れを書く。そして、作業しながら細かい点をうめたり、修正したりしていく。
実際の作業がどこまで進んでいるのかは「!!ここまでやった!!」というラベルで表示する。
どのような環境にするか
つぎのような環境にする。
- ディスクはMBRではなくGPTで初期化する
- LVMを使って、パーティションの容量をフレキシブルにする
- SWAP領域はメモリ容量の2倍
- bootパーティションは自動ではマウントしない
- x86_64用のGentooをインストールする
- ...
インストールCDの作成
GentooのミラーサイトからISOイメージを落としてくる。つぎのアドレスから、ミラーサイトを選ぶ。
つぎのようにリンクをたどる。
- releases/
- amd64/
- autobuilds/
- current-install-amd64-minimal/
install-amd64-minimal-201XXXXX.isoをダウンロードする。
それをCDに焼く。
% cdrecord install-amd64-minimal-201XXXXX.iso
起動
GentooをインストールするマシンにインストールCDをいれ、起動する。つぎのように表示されたらエンターキーを押す。
boot:
ここでエンターキーを押さないと、ハードディスクから起動してしまう。
ネットワークの確認
ここではDHCPサーバが動いているネットワーク内にいることを前提とする。その場合pingが通るはずだ。
% ping foo.bar.com -c 3
foo.bar.comのところは適当なアドレス(PINGを受け付けてくれるところ)に置き換えること。
パーティションの作成
パーティションの計画
まずは、パーティションの切りかたの計画を立てる。LVMが使えるようになってから、この作業はずいぶんと楽になった。LVM上に作ったパーティションは、あとから容量を変えることができるからだ。
ハードディスクとメモリの容量を調べる
とりあえず、ハードディスク容量とメモリの大きさを調べよう。
# parted /dev/sda
(parted) print
...
Disk /dev/sda: 2000GB
...
(parted) quit
ハードディスク容量は2TBくらいだ。
# free -m
total ...
Mem: 15951 ...
Swap: 0 ...
このマシンは16GBのメモリを積んでいる。
パーティションの構成
- grub: 2MiB
- boot: 1GiB - 3MiB
- root: 5GiB
- swap: 32GiB
- lvm2: 1TiB - 32GiB
- space: 約1TiB
だいたい、こんな感じにする。多少のずれはあるかもしれない。これをMiB単位での開始位置と終了位置とに直す。
- grub: 1 - 3
- boot: 3 - 1024
- root: 1024 - 6144
- swap: 6144 - 38912
- lvm2: 38912 - 1048576
- space: 1048576 - -1
LVM上の論理パーティションの構成
- usr: 10GiB
- home: 10GiB
- opt: 5GiB
- var: 5GiB
- tmp: 2GiB
GPTラベルをつける
つぎのようにしてGPTラベルをつける。これで、もとのデータにはアクセスできなくなるので注意すること。
# parted /dev/sda
(parted) mklabel gpt
(parted) print
パーティションを作成する
パーティションを作成するときの単位をMiBにする。
(parted) unit mib
GRUBが使用するパーティションを作成する。
(parted) mkpart grub 1 3
(parted) set 1 bios_grub on
(parted) print
bootパーティションを作成する。
(parted) mkpart boot 3 1024
(parted) set 2 boot on
(parted) print
rootパーティションを作成する。
(parted) mkpart root 1024 6144
swapパーティションを作成する。
(parted) mkpart swap 6144 38912
lvm2パーティションを作成する。
(parted) mkpart lvm2 38912 1048576
予備のパーティションを作成する。
(parted) mkpart space 1048576 -1
(parted) print
(parted) quit
論理パーティションを作成する
dm-modモジュールを読みこむ
% modprobe dm-mod
パーティションの準備
% pvcreate /dev/sda5
ボリュームグループの作成
% vgcreate vg /dev/sda5
論理パーティションの作成
# lvcreate -L10G -nusr vg
# lvcreate -L10G -nhome vg
# lvcreate -L5G -nopt vg
# lvcreate -L10G -nvar vg
# lvcreate -L2G -ntmp vg
ファイルシステムを作成する
Swap領域の作成と有効化
# mkswap /dev/sda4
# swapon /dev/sda4
# free -g
ファイルシステムの作成
# mkfs.ext4 /dev/sda2
(UEFIのシステムの場合には、mkfs.vfat -F32 /dev/sda2)
# mkfs.ext4 /dev/sda3
# mkfs.ext4 /dev/vg/usr
# mkfs.ext4 /dev/vg/home
# mkfs.ext4 /dev/vg/opt
# mkfs.ext4 /dev/vg/var
# mkfs.ext4 /dev/vg/tmp
パーティションをマウントする
まずはrootパーティションを/mnt/gentoo/ディレクトリにマウントし、そのしたに、ほかのパーティションをマウントするためのディレクトリを作成する。
# mount /dev/sda3 /mnt/gentoo/
# mkdir /mnt/gentoo/boot
# mkdir /mnt/gentoo/usr
# mkdir /mnt/gentoo/home
# mkdir /mnt/gentoo/opt
# mkdir /mnt/gentoo/var
# mkdir /mnt/gentoo/tmp
root以下に、それぞれのパーティションをマウントする。
# mount /dev/sda2 /mnt/gentoo/boot
# mount /dev/vg/usr /mnt/gentoo/usr
# mount /dev/vg/home /mnt/gentoo/home
# mount /dev/vg/opt /mnt/gentoo/opt
# mount /dev/vg/var /mnt/gentoo/var
# mount /dev/vg/tmp /mnt/gentoo/tmp
/tmp/のパーミッションを修正する
# chmod 1777 /mnt/gentoo/tmp
stage3
時間を合わせる
時間を合わせる。
# date
# rc-service ntp-client start
# date
ハードディスククロックも合わせる。
# hwclock
# hwclock --systohc
# hwclock
ディレクトリを移動する
# cd /mnt/gentoo/
stage3のtarボールをダウンロードする
# links https://www.gentoo.org/downloads/mirrors/
ミラーサイトを選び。つぎのように、ディレクトリをたどる。
- releases
- amd64
- autobuilds
- current-stage3-amd64
stage3-amd64-201XXXXX.tar.bz2をダウンロードする(最近では*.tar.bz2ではなく、*.tar.xz。
解凍し展開する
# tar xvjpf stage3-amd64-201XXXXX.tar.bz2 --xattrs
(*.tar.xzでは、tar xvJpf stage3-amd64-201XXXXX.tar.xz --xattrs)
コンパイルオプションを設定する
ファイルmake.confからCFLAGS="..."という行を見つけ、つぎのようにする。
# vi /mnt/gentoo/etc/portage/make.conf
...
CFLAGS="-march=native -O2 -pipe"
...
おなじファイルの末尾に、MAKEOPTSからはじまる、つぎのような行を追加する。
# vi /mnt/gentoo/etc/portage/make.conf
MAKEOPTS="-j5"
MAKEOPTSに-j5としたのは、コンパイルを5個並列で行うということ。この数字は、だいたいコア数(スレッド数?) + 1くらいが目安だと言う。今回インストールするマシンは4コア(4スレッド)なので5とする。
/mnt/genoo/ディレクトリ以下の環境にはいる
DNS情報のコピー
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
ファイルシステムのマウント
# mount -t proc proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev
最近では、さらに/run/udevもマウントしておかないと、あとあとのgrub-configにすごい時間がかかる(2時間くらい)。
# mkdir -p /mnt/gentoo/run/udev
# mount -o bind /run/udev /mnt/gentoo/run/udev
# mount --make-rslave /mnt/gentoo/run/udev
/mnt/gentoo/下の環境にはいる
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) $PS1"
インストール作業を進めるための準備
Portageツリーの取得と更新
# emerge-webrsync
# emerge --sync
プロファイルの選択
つぎのようにして、プロファイルを選択する。今回はdefault/linux/amd64/13.0/desktopを選んだ。これが3番目だったのでset 3とした。
# eselect profile list
# eselect profile set 3
TmuxとVimのインストール
まず、Tmuxをインストールする。そうすると、複数の画面を持てるので、作業がしやすくなる。
# emerge -av tmux
# tmux
Ctrl-b "で画面を分割しておこう。分割したそれぞれの領域間の移動はCtrl-b oだ。新しい画面を作るにはCtrl-b cとする。画面間を移動するにはCtrl-b 0やCtrl-b 1のようにする。
いろいろとファイルを編集するので、使いやすいエディタをインストールしておく。
# USE="-X" emerge -av vim
まだXは入れないのでUSEを-Xとしておく。
cpuid2cpuflags
# emerge -av cpuid2cpuflags
# echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
USE変数の設定
# vi /etc/portage/make.conf
...
USE="...\
cjk m17n-lib nls unicode git postgres zsh-completion vim-syntax"
...
# vi /etc/portage/make.conf
...
LINGUAS="ja"
L10N="ja"
...
タイムゾーンの決定
# ls /usr/share/zoneinfo
# echo "Japan" > /etc/timezone
# emerge --config sys-libs/timezone-data
ロケールの設定
# vim /etc/locale.gen
ja_JP.UTF-8 UTF-8
# locale-gen
# eselect locale list
# eselect locale set 3
カーネルの作成
カーネルとpciutilsを取得する
# emerge -av gentoo-sources
# emerge -av pciutils
カーネルの設定
カーネルの設定は以下のようにして、設定ツールを立ち上げて、行う。
# cd /usr/src/linux
# make menuconfig
走っているカーネルからの設定の入手
走っているカーネルから設定を入手できるようにする。
General setup --->
<*> Kernel .config support
[*] Enable access to .config through /proc/config.gz
一度、設定ツールを、保存終了させる。
有線LANのドライバ
つぎに有線LANのカーネルモジュールを確認する。
# lspci -k | grep -A 2 -i ethernet
Kernel driver in use: alx
# grep -i alx .config
# CONFIG_ALX is not set
結果がis not setだったので、つぎのように、設定を有効化する。
# make menuconfig
Device Drivers --->
[*] Network driver support --->
[*] Atheros devices
.
.
<*> Qualcomm Atheros 816x/AR817x support
プロセッサファミリー
プロセッサファミリーでCore 2 / newer Xeonを選択する。
Processor type and features --->
Processor family (Core 2 / newer Xeon)
LVM2
Device mapper supportが有効になっていることを確認する。
Device Drivers --->
Multi-device support (RAID and LVM)
Multiple devices driver support (RAID and LVM)
<*> Device mapper support
ビルドとインストール
# make && make modules_install
# make install
initramfsの作成
# emerge -av genkernel
# genkernel --install initramfs
# ls /bool/initramfs*
LVM2ツールをインストール
# emerge -av lvm2
パーティションにラベルを設定する
ext4ファイルシステムに対してはe2labelコマンドを使う。
# e2label /dev/sda2 boot
# e2label /dev/sda2
boot
# e2label /dev/sda3 root
# e2label /dev/vg/usr usr
# e2label /dev/vg/home home
# e2label /dev/vg/opt opt
# e2label /dev/vg/var var
# e2label /dev/vg/tmp tmp
swapパーティションにはmkswapを使う。
# swapoff /dev/sda4
# mkswap -L swap /dev/sda4
# swapon LABEL=swap
fstabの設定
# vi /etc/fstab
LABEL=root / ext4 noatime 0 1
LABEL=boot /boot ext4 noauto,noatime 0 2
LABEL=usr /usr ext4 noatime 0 2
LABEL=home /home ext4 noatime 0 2
LABEL=opt /opt ext4 noatime 0 2
LABEL=var /var ext4 noatime 0 2
LABEL=tmp /tmp ext4 noatime 0 2
LABEL=swap none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
hostnameの設定
とりあえず、名前はchassisにしておく。
# vim /etc/conf.d/hostname
hostname="chassis"
ドメイン名も適当に設定しておく。
# vim /etc/conf.d/net
dns_domain_lo="local.hogehoge.jp"
local.hogehoge.jpのところは、適当に置き換えること。
/etc/hostsにも自分の名前を設定しておく。
# vim /etc/hosts
127.0.0.1 chassis chassis.local.hogehoge.jp localhost
::1 chassis chassis.local.hogehoge.jp chassis
ルートパスワードの設定
ルートパスワードを設定する。
# passwd
いくつかのシステムツールを導入する
metalogを導入する。
# emerge -av metalog
# rc-update add metalog default
fcronを導入する。
# emerge -av fcron
# rc-update add fcron default
# crontab /etc/crontab
mlocateを導入する。
# emerge -av mlocate
DHCPクライアントを導入する。
# emerge -av dhcpcd
LVM2デーモンを登録
# rc-update add lvm boot
ブートローダの設定
BIOSの場合
# emerge -av grub
# grub-install /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
UEFIの場合
# emerge -pv grub
(GRUB_PLATFORMSのefi-64が有効になっていることを確認)
# emerge -av grub
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=gentoo_grub /dev/sda
# mkdir /boot/EFI/boot
# cp /boot/EFI/gentoo_grub/grubx64.efi /boot/EFI/boot/bootx64.efi
# grub-mkconfig -o /boot/grub/grub.cfg
再起動
さて、ついに、このときがきた。
うまくいくだろうか。
# exit
# exit
# exit
# reboot
シャットダウンが終わったところでCDをぬいておくこと。
再起動成功
rootユーザでログインする。まずは、ネットワークの確認。
# ping hoge.co.jp -c 3
hoge.co.jpのところは適当なアドレス(pingを受けつけてくれる)に置き換えること。
これがうまくいったら、とりあえずtmuxに入っておこう。
# tmux
OpenRCのログを記録する
# vim /etc/rc.conf
rc_logger="YES"
こうしておくと、次回からは/var/log/rc.logにログが記録される。
ハイバネーション
カーネルの設定を確認する。
# zcat /proc/config.gz | grep -i suspend
# zcat /proc/config.gz | grep -i hibernation
サスペンド
作業内容をメモリに保存して、省電力モードに入る。
# echo mem > /sys/power/state
これでコンピュータの電源が落ちる。再度、電源を入れると中断したところから、はじめられる。
ハイバネート
作業内容をハードディスクのスワップ領域に保存して電源を切る。ハードディスクへの保存なので、完全に電源を落とすことができる。カーネルにオプションとして、スワップ領域を指定してやる必要がある。
# vim /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda4"
...
# mount boot
# grub-mkconfig -o /boot/grub/grub.cfg
# echo disk > /sys/power/state
これで、電源が落ちる。電源スイッチを押して、立ち上げると、中断したところから、はじめられる。
電源ボタンでハイバネートする
# emerge -av acpid
# rc-update add acpid default
# rc-service acpid start
# vim /etc/acpid/default.sh
...
case "$group" in
button)
case "$action" in
power)
case "$device" in
PBTN)
echo disk > /sys/power/state
;;
esac
;;
いろいろと試してから設定したいときは、とりあえず、buttonに反応しないようにしてから、どのボタンでどのイベントが発生するのかを試してみる。
# vim /etc/acpi/default.sh
('power)'という行の次の行の先頭に'#'を追加する)
# acpi_listen
(電源ボタンを押す)
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000001
(電源ボタンをもう1回、押す)
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000002
(ノートPCなら、ディスプレイを開閉する)
button/lid LID close
button/lid LID open
電源ボタンなら、たとえば
- $1: button/power
- $2: PBTN
- $3: 00000080
- $4: 00000000
のようになる。
Vimをデフォルトのエディタにする
# eselect editor list
...
[3] /usr/bin/vi
# eselect editor set 3
# . /etc/profile
# echo $EDITOR
/usr/bin/vi
一般ユーザの追加とsudoの導入
ユーザを追加してパスワードを設定する。
# useradd -m -G users,portage,wheel -s /bin/bash yoshio
# passwd yoshio
yoshioのところは好きなアカウント名に置き換えること。
このアカウントでログインし直して、そのうえでrootユーザになる。
# exit
# exit
login: yoshio
passwd: ******
$ tmux
$ su
passwd: ******
#
sudoを導入する。
# emerge -av sudo
# visudo
%wheel ALL=(ALL) ALL
# exit
$ sudo echo hoge
(使っているアカウントのパスワードを入力する)
hoge
Zshの導入
使っているアカウントのシェルをZshにする。
$ sudo emerge -av zsh
$ sudo vipw
(使っているアカウントの/bin/bashを/bin/zshに変更する)
ログインし直して、いくつかの設定をする。
$ exit
$ exit
login: yoshio
passwd: ******
(zshの設定ツールが起動する)
履歴の保存を1,000,000個に増やす。
補完システムはデフォルト設定でonにする。
指づかいにviを選択。
パターンマッチの拡張と背景ジョブの終了の即時報告を有効にする。
保存終了
% vi .zshrc
...
setopt share_history
プロンプトを設定する。^[はCtrl-V Escで入力する。
% vi .zshrc
...
PROMPT="%{^[[;32;1m%}[%D{%H:%M}] %#%{^[[m%} "
PROMPT2="%_> "
RPROMPT="[%40<...<%~]"
ログインし直す。
% exit
login: yoshio
passwd: ******
% tmux
Xorgのインストールと設定
なんとなく、clangをUSEに追加する。また、INPUT_DEVICESを設定する。
% sudoedit /etc/portage/make.conf
USE="...\
...\
clang"
INPUT_DEVICES="evdev"
グラフィックカードの種類を調べる。
% /usr/sbin/lspci | grep -i graphics
...: Intel ...
たぶんintelで良さそうなので、つぎのようにする。
% sudoedit /etc/portage/make.conf
VIDEO_CARDS="intel"
xorgをインストールする。
% sudo emerge -av xorg-server
77パッケージが導入される。とくにllvmあたりがすごく時間がかかるので、お出かけするか眠るか、家に帰るかするほうがいいと思われる。
ちゃんと動くかどうかテストする。
% sudo emerge -av twm xterm
% startx
パッケージのアップデート
このあたりで、パッケージを最新のものにアップデートしておこう。
% sudo emerge -av --deep --newuse @system
125パッケージが更新または新規導入される。しばらく、かかるだろう。
% sudo emerge -av --deep --newuse @world
% sudo emerge -av --depclean
念のため、もう一度syncしておく。
% sudo emerge --sync
% sudo emerge -av --deep --newuse @system
% sudo emerge -av --deep --newuse @world
Xmonadの導入
% sudo emerge -av xmonad
しばらく時間がかかるので、すこし休憩しよう。
% vim ~/.xinitrc
exec xmonad
% startx
画面がまっ黒になるけれど、あわてずに、Alt + Shift + Enterを押す。すると、ターミナルエミュレータが出る。exitして、Alt + Shift + qでXをぬけよう。
rxvt-unicodeの導入
ターミナルエミュレータにはrxvtのユニコード版を使うことにする。
% emerge -pv rxvt-unicode
可能なUSEフラグのなかから、256-color、wcwidth、unicode3、xftあたりを有効にする。また、そのためには-vanillaとする必要がある。
% sudoedit /etc/portage/package.use/rxvt-unicode
x11-terms/rxvt-unicode -vanilla 256-color wcwidth unicode3 xft
% sudo emerge -av rxvt-unicode
Xmonadのデフォルトのターミナルエミュレータとして登録する。
% mkdir ~/.xmonad
% vim ~/.xmonad/xmonad.hs
import XMonad
main :: IO ()
main = do
xmonad defaultConfig {
terminal = "urxvt"
}
試してみよう。
% startx
ここで、Alt + Shift + Enterでターミナルエミュレータを立ち上げて、そこに、つぎのように打ち込む。
% echo $TERM
rxvt-unicode-256color
% exit
問題なければ、Alt + Shift + qでXを終了させる。
画面の色などを設定する。
% vim ~/.Xdefaults
urxvt*background: black
urxvt*foreground: snow
urxvt*color12: #7799FF
urxvt*saveLines: 0
もう一度、立ち上げて、チェックする。
% startx
Alt + Shift + Enterとする。環境が整ったので、ここからは、このターミナル上で作業をする。
% tmux
日本語入力
日本語入力には僕は、TUT-codeを使っている。uimを使う。
% emerge -pv uim
とりあえずUSEにxftを追加しておく。このフラグは全体に指定してもいい気もするが、とりあえず、あとで検討しよう。
% sudoedit /etc/portage/package.use/uim
app-i18n/uim xft
導入する。
% sudo emerge -av uim
.xinitrcを編集する。
% vim .xinitrc
export XMODIFIERS="@im=uim"
uim-xim --engine=tutcode &
exec xmonad
ターミナルエミュレータをぬける。
% exit
% exit
Alt + Shift + qで1度Xをぬけてから、もう1度Xを立ち上げる。
% startx
Alt + Shift + Enterでターミナルエミュレータを立ち上げる。Shift + Spaceで日本語入力ができるようになる。もう1度Shift + Spaceでアルファベット入力にもどる。
混ぜ書き辞書をダウンロードする。
% curl https://raw.githubusercontent.com/YoshikuniJujo/memos/master/mazegaki.dic > ~/.mazegaki.dic
% exit
Xに入りなおして、混ぜ書き変換ができることを確認する。
uimの設定をする。
% uim-pref-gtk
「カーソルのそばに入力モードを表示」とTut-codeの「vi協調モードを有効にする」とを設定。
firefoxを導入
% emerge -pv firefox
pythonパッケージでUSEにsqliteが必要なようだ。
% sudoedit /etc/portage/package.use/python
dev-lang/python sqlite
% sudo emerge -av firefox
Vimperatorを導入する。
% firefox
vimperatorを検索して導入する。それから、指づかいを変える。以下の記事にしたがう。
ブラウザ上での文字入力で、vi流で、コマンドモードから入るようにする。
% vim ~/.vimperatorrc
set noinsertmode
Xの環境を整える
dmenuの導入。
% sudo emerge -av dmenu
これで、ターミナルエミュレータからでなくても、Alt + pをしてからfirefoxと打ち込むことでfirefoxが起動できるようになった。
xmobarの導入
% emerge -pv xmobar
このあたりでxftをグローバルに設定してしまおう。
% sudoedit /etc/portage/make.conf
USE="... \
... \
clang xft"
% sudo emerge -av xmobar
.xmobarrcを作成。ここではgithubからダウンロードしておく。
% curl https://raw.githubusercontent.com/YoshikuniJujo/memos/master/xmobarrc > ~/.xmobarrc
xmonad-contribを導入する。
% sudo emerge -av xmonad-contrib
xmonad.hsの編集。
% vim ~/.xmonad/xmonad.hs
import XMonad
import XMonad.Util.Run (spawnPipe, hPutStrLn)
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, defaultPP, ppOutput)
import XMonad.Hooks.ManageDocks (avoidStruts, docks)
import Control.Concurrent
myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) ||| Full
where tiled = Tall 1 (3 / 100) (1 / 2)
main :: IO ()
main = do
h <- spawnPipe "xmobar"
threadDelay 100000
xmonad $ docks defaultConfig {
terminal = "urxvt",
layoutHook = myLayout,
logHook = dynamicLogWithPP $ defaultPP { ppOutput = hPutStrLn h }
}
ウィンドウがひとつのときには枠を表示しないようにする。
% vim .xmonad/xmonad.hs
(import XMonad.Layout.NoBorders (smartBorders)を追加)
(layoutHook = myLayout,のmyLayoutの前にsmartBordersを追加)
テザリング(スマホからネットにつなぐ)
ノートパソコンなどでは、スマホからネットにつなげると便利だ。ここで、その設定をする。
% zcat /proc/config.gz | grep -i rndis
# CONFIG_USB_NET_RNDIS_WLAN is not set
% cd /usr/src/linux
% sudo make menuconfig
Device Drivers --->
[*] Network device support --->
<*> USB Network Adapters --->
<*> Multi-purpose USB Networking Framework
<*> CDC Ethernet support (smart devices ...)
<*> CDC EEM support
<*> Host for RNDIS and ActiveSync devices
<*> Simple USB Network Links (CDC Ethernet subset)
[*] Embedded ARM Linux links (iPaq, ...)
% grep -i rndis .config
CONFIG_USB_NET_RNDIS_HOST=y
# CONFIG_USB_NET_RNDIS_WLAN is not set
% sudo make && sudo make modules_install
% sudo mount /boot
% sudo make install
再起動する。
% zcat /proc/config.gz | grep -i rndis
CONFIG_USB_NET_RNDIS_HOST=y
# CONFIG_USB_NET_RNDIS_WLAN is not set
テザリング可能なスマホをUSB接続する。
% dmesg | tail
...
[ XXX.XXXXXX] rndis_host: 1-1.2:1.0 enp0s29u1u2: renamed from usb0
スマホによっては認識されないものもある。そういうときは、(僕の知識の範囲ではどうしようもないので)別の機種を試す。
% ifconfig
enp0s29u1u2: ...
...
enp3s0f1: ...
...
% sudo ifconfig enp3s0f1 down
% ping gentoo.org -c 3
...
うまくいっていたら、再起動を試す。有線LANのケーブルを抜いておく。
参考にしたページ
Android USB Tethering - Gentoo Wiki
KVMの設定
この、インストールしたOSをホストOSとしてKVMを使ってゲストOSを走らせることにする。
カーネルを設定する
% zcat /proc/config.gz | grep -i kvm
% cd /usr/src/linux
% sudo make menuconfig
[*] Virtualization --->
<*> Kernel-based Virtual Machine (KVM) support
<*> KVM for Intel processors support
[*] Audit KVM MMU
Device Drivers --->
[*] Network device support --->
<*> Universal TUN/TAP device driver support
[*] Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
<*> 802.1Q VLAN Support
% sudo make && sudo make modules_install
% sudo mount /boot
% sudo make install
% exit
% exit
Alt + Shift + qでXをぬける。
% sudo reboot
% zcat /proc/config.gz | grep -i kvm
ちょっと、忘れてたがlsのaliasを設定する。
% vim ~/.zshrc
alias ls='ls --color=auto'
bridgeを設定する
bridge-utilsのインストール。
% sudo emerge -av bridge-utils
br0を設定する。
% sudoedit /etc/conf.d/net
bridge_br0=""
config_br0="192.168.100.254/24"
sysctl.confを編集する。
% sudoedit /etc/sysctl.conf
...
#
# Setup bridge interface for KVM
#
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
bridge_forwardを作成する。
% sudoedit /etc/init.d/bridge_forward
#!/sbin/openrc-run
depend() {
need net.br0
}
start() {
ebegin "Turning on forwarding for bridge interface"
sysctl net.ipv4.conf.br0.forwarding=1 > /dev/null 2>&1
sysctl net.ipv4.ip_forward=1 > /dev/null 2>&1
eend $?
}
stop() {
ebegin "Turning off forwarding for bridge interface"
sysctl net.ipv4.conf.br0.forwarding=0 > /dev/null 2>&1
sysctl net.ipv4.ip_forward=0 > /dev/null 2>&1
eend $?
}
いろいろとやる。
% sudo ln -s net.lo /etc/init.d/net.br0
% sudo brctl addbr br0
% sudo rc-service net.br0 start
% sudo rc-update add net.br0 default
% sudo chmod +x /etc/init.d/bridge_forward
% sudo rc-service bridge_forward start
% sudo rc-update add bridge_forward default
% sudo iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
DHCPサーバを設定する
DHCPサーバをインストールする。
% sudo emerge -av dhcp
設定する。ホストの環境で使っているDNSサーバを調べる。
% cat /etc/resolv.conf
nameserver 123.456.789.123
nameserver 987.654.321.987
結果はそれぞれ異なる。
% sudoedit /etc/dhcp/dhcp.conf
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.254;
range 192.168.100.100 192.168.100.199;
}
option domain-name-servers 123.456.789.123;
123.456.789.123は実際のアドレスに置き換えること。
DHCPサーバを走らせる。
% sudo rc-service dhcpd start
% sudo rc-update add dhcpd default
KVMを導入する
% emerge -pv qemu
いくつかのフラグを設定する。
% sudoedit /etc/portage/make.conf
USE="... \
... \
clang xft virtfs"
...
QEMU_USER_TARGETS="x86_64"
qemuをインストールする。
% sudo emerge -av qemu
ネットワークのupとdown用のスクリプトを作成する。
% vim qemu-ifup
#!/bin/sh
sudo ifconfig $1 up
sudo brctl addif br0 $1
% vim qemu-ifdown
sudo brctl delif br0 $1
sudo ifconfig $1 down
% chmod +x qemu-ifup qemu-ifdown
VNCビューワーを導入する。
% sudo emerge -av ssvnc
CD-Rからのブートを試す。インストールCDをCDドライブに挿入してから、つぎのコマンドを実行する。
% sudo qemu-system-x86_64 -enable-kvm -cdrom /dev/cdrom -boot d -m 2047 -net nic,macaddr=00:00:00:00:00:01,model=e1000 -net tap,ifname=tap0,script=qemu-ifup,downscript=qemu-ifdown -vnc :0 -monitor stdio -vga cirrus
別のウィンドウから
% ssvncviewer 127.0.0.1:5900
次のように表示されたらEnterキーを押す。
boot:
しばらくして、プロンプトが表示されたら、pingを試そう。
# ping some.address.com (pingを許可しているアドレス) -c 3
これでpingが通れば、ネットワークの設定は成功しているということだ。
一度、haltし、再起動して、問題なく動くか確認する
% exit
% exit
firefoxはZZで終了。Alt + Shift + qでXをぬける。
% sudo reboot
再帰動したら、
% sudo ln -s net.lo /etc/init.d/net.enp2s0
% sudo rc-service net.enp2s0 start
% sudo rc-update add net.enp2s0 default
% sudo iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
% sudo qemu-system-x86_64 -enable-kvm -cdrom /dev/cdrom -boot d -m 2047 -net nic,macaddr=00:00:00:00:00:01,model=e1000 -net tap,ifname=tap0,script=qemu-ifup,downscript=qemu-ifdown -vnc :0 -monitor stdio -vga cirrus
% ssvncviewer 127.0.0.1:5900
で、立ち上げてpingを試す。
qemuを立ち上げるための権限を設定
% sudo vigr
(使用しているアカウントにkvm, cdromグループを追加する)
一度ログアウトして、ログインしなおす。
% groups
% sudo emerge -av usermode-utilities
% sudo tunctl -u yoshio
% qemu-system-x86_64 ..
% ssvncviewer 127.0.0.1:5900
起動時に、いくつかの設定をする
% sudoedit /etc/local.d/masquerade.start
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
% sudo chmod +x /etc/local.d/masquerade.start
% sudoedit /etc/local.d/tunctl.start
tunctl -u yoshio
% sudo chmod +x /etc/local.d/tunctl.start
再起動して、以下を試す。
% qemu-system-x86_64 ...
% ssvncviewer 127.0.0.1:5900
ディスクイメージを作成し、qemuにわたす
% qemu-img create -f qcow2 gentoo.img 100G
% qemu-system-x86_64 ... -hda gentoo.img
ゲストOSのインストール
パーティションの用意
% parted /dev/sda
(parted) mklabel gpt
(parted) unit mib
(parted) print
(parted) mkpart grub 1 3
(parted) set 1 bios_grub on
(parted) mkpart boot 3 1000
(parted) set 2 boot on
(parted) mkpart swap 1000 7000
(parted) mkpart rootfs 7000 -1
(parted) print
Swapパーティション
# mkswap /dev/sda3
# swapon /dev/sda3
# free -h
ファイルシステムの作成とマウント
# mkfs.ext4 /dev/sda2
# mkfs.ext4 /dev/sda4
# mount /dev/sda4 /mnt/gentoo/
# mkdir /mnt/gentoo/boot
# mount /dev/sda2 /mnt/gentoo/boot
# ls /mnt/gentoo
# ls /mnt/gentoo/boot
日付けと時刻の確認
# date
# rc-service ntp-client start
# date
# hwclock
# hwclock --systohc
# hwclock
Stage3
ディレクトリを移動する。
# cd /mnt/gentoo/
つぎのようにGentooのミラーにアクセスする。
# links https://www.gentoo.org/downloads/mirrors/#JP
ここからミラーサイトを選び、つぎのようにディレクトリをたどる。
- releases
- amd64
- autobuilds
- current-stage3-amd64
つぎのファイルをダウンロードする。
stage3-amd64-201XXXXX.tar.bz2
解凍して設置する。
# tar xvjpf stage3-amd64-201XXXXX.tar.bz2 --xattrs
コンパイルオプションを設定する。
# vi /mnt/gentoo/etc/portage/make.conf
CFLAGS="-march=native -O2 -pipe"
...
MAKEOPTS="-j2"
新しいシステムに入る
必要なディレクトリをマウントする。
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
# mount -t proc proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev
最近では、さらに、つぎのディレクトリもマウントする必要がある。
# mkdir -p /mnt/gentoo/run/udev
# mount -o bind /run/udev /mnt/gentoo/run/udev
# mount --make-rslave /mnt/gentoo/run/udev
新しいシステムに入る。
# chroot /mnt/gentoo/ /bin/bash
# source /etc/profile
# export PS1="(chroot) $PS1"
Portage木の取得
# emerge-webrsync
# emerge --sync
# eselect profile list
# eselect profile set 3
USEフラグの設定など
TmuxとVimをインストールする。
# emerge -av tmux
# emerge -pv vim
# USE="-X" emerge -av vim
CPUフラグを設定する。
# emerge -av cpuid2cpuflags
# cpuinfo2cpuflags-x86
# cpuinfo2cpuflags-x86 >> /etc/portage/make.conf
USEフラグを設定する。
# vim /etc/portage/make.conf
USE="bindist \
nsplugin xft vim-syntax cjk m17n-lib nls unicode git postgres \
zsh-complition"
タイムゾーンとロケールを設定する。
# date
# echo "Japan" > /etc/timezone
# emerge --config sys-libs/timezone-data
# date
# vim /etc/locale.gen
ja_JP.UTF-8 UTF-8
# locale-gen
# eselect locale list
# eselect locale set 3
カーネルを作成する
# emerge -av gentoo-sources
# emerge -av pciutils
# cd /usr/src/linux
# make menuconfig
一度、保存終了する。
# lspci -k | grep -A 2 -i ethernet
...
Kernel driver in use: e1000
# grep -i e1000 .config
CONFIG_E1000=y
Processor familyは、とりあえずデフォルトのGeneric-x86-64としておく。ここは、そのうちに、ちゃんと調べたい。
# make menuconfig
[*] Networking support --->
<*> Plan 9 Resource Sharing Support (9P2000) --->
# grep -i p9 . config
CONFIG_NET_9P=y
# make menuconfig
File system --->
[*] Network File Systems --->
<*> Plan 9 Resource Sharing Support (9P2000)
[*] 9P POSIX Access Control Lists
Device Drivers --->
[*] Virtualization drivers
Virtio drivers --->
<*> PCI driver for virtio devices
[*] Support for legacy virtio draft 0.9.X and older devices
[*] Networking support --->
<*> Plan 9 Resource Sharing Support (9P2000) --->
<*> 9P Virtio Transport
# grep -i 9p .config
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
ビルドしてインストールする。
# make && make modules_install
# make install
initramfsを作成する。
# emerge -av genkernel
# ls /boot
# genkernel --install initramfs
# ls /boot
fstabを作成する
# e2label /dev/sda2 boot
# e2label /dev/sda4 root
# e2label /dev/sda2
boot
# e2label /dev/sda4
root
# swapoff /dev/sda3
# mkswap -L swap /dev/sda3
# swapon LABEL=swap
# free -h
# vim /etc/fstab
LABEL=boot /boot ext4 noauto,noatime 1 2
LABEL=root / ext4 noatime 0 1
LABEL=swap none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
ホスト名などを設定する
# vim /etc/conf.d/hostname
hostname="gentoo_2017"
# vim /etc/conf.d/net
dns_domain_lo="local.hogehoge.jp"
# vim /etc/hosts
127.0.0.1 gentoo_2017 gentoo_2017.local.iocikun.jp localhost
::1 gentoo_2017 gentoo_2017.local.iocikun.jp localhost
ルートパスワードの設定
# passwd
システムツールを導入
# emerge -av metalog
# rc-update add metalog default
# emerge -av fcron
# rc-update add fcron default
# crontab /etc/crontab
# emerge -av mlocate
# emerge -av dhcpcd
ブートローダを導入
# emerge -av grub
# grub-install /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
再起動する
# exit
# exit
# halt
ゲスト側で
パスワード: ****
# qemu-system-x86_64 -enable-kvm -cdrom /dev/cdrom -boot c -m 2047 -net nic,macaddr=00:00:00:00:00:01,model=e1000 -net tap,ifname=tap0,script=qemu-ifup,downscript=qemu-ifdown -vnc :0 -monitor stdio -vga cirrus -fsdev local,id=hoge,path=/home/tatsuya/hoge,security_model=mappend -device virtio-9p-pci,fsdev=hoge,mount_tag=v_hoge -hda gentoo.img
ローカライズのためのフラグを設定
# vim /etc/portage/make.conf
LINGUAS="ja"
L10N="ja"
...
virtfsでディレクトリの共有ができるかどうか試す
(virtfsだと、不具合があったので、NFSを使うことにした)
# mkdir /mnt/free
# chmod 0700 /mnt/free
# mount -t 9p -o trans=virtio v_hoge /mnt/free
# touch /mnt/free/hogera
NFSでディレクトリの共有ができるかどうか試す
つぎのページを参考にする。
ハードディスクの暗号化と、そのマウント
さきに、まちがえて消さないようにgentoo.imgをバックアップしておこう。同じハードディスク内なので、故障などへの防御にはならないが、ケアレスミスへの防御にはなる。実は、リスクとしては、これが一番大きい。
まずはLVM上の論理パーティションを拡大する。
% sudo lvextend -L +10G /dev/mapper/vg-home
% sudo resize2fs /dev/mapper/vg-home
コピーしておこう。
% mkdir backup
% cp gentoo.img backup/
% md5sum gentoo.img
c7c1a7f36d027db6a8982ee453e27131 gentoo.img
% md5sum backup/gentoo.img
c7c1a7f36d027db6a8982ee453e27131 backup/gentoo.img
ntfsファイルシステムをマウントできるようにする
% zcat /proc/config.gz | grep -i ntfs
# CONFIG_NTFS_FS is not set
% sudo make menuconfig
File systems --->
DOS/FAT/NT Filesystems --->
<*> NTFS file system support
[*] NTFS write support
% sudo mount /boot
% sudo make && sudo make modules_install
% sudo make install
% exit
% exit
Xを落として、再起動する。
% zcat /proc/config.gz | grep -i ntfs
CONFIG_NTFS_FS=y
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
% sudo mount /dev/sdb1 /mnt/free
ハードディスクイメージを暗号化したディスクにコピーする
cryptsetupとpartedを導入する
% sudo emerge -av cryptsetup
% sudo emerge -av parted
ハードディスクのパーティションを切る
% sudo parted /dev/sdb
(parted) mklabel gpt
(parted) unit gb
(parted) mkpart pass1 1 250
(parted) mkpart pass2 250 -1
(parted) print
(parted) quit
カーネルの設定
% zcat /proc/config.gz | grep -i dm_crypt
# CONFIG_DM_CRYPT is not set
% cd /usr/src/linux
% sudo make menuconfig
Device Drivers --->
[*] Multiple device driver support (RAID and LVM) --->
<*> Crypt target support
Cryptgraphic API --->
<*> XTS support
% sudo mount /boot
% sudo make && sudo make modules_install
% sudo make install
% exit
% exit
再起動する。
% zcat /proc/config.gz | grep -i dm_crypt
CONFIG_DM_CRYPT=y
% sudo cryptsetup luksFormat /dev/sdb1
% sudo cryptsetup luksOpen /dev/sdb1 pass1
% sudo mkfs.ext4 /dev/mapper/pass1
% sudo mount /dev/mapper/pass1 /mnt/free
% ls /mnt/free
lost+found
% sudo e2label /dev/mapper/pass1 pass1
% sudo e2label /dev/mapper/pass1
% sudoedit /etc/fstab
LABEL=pass1 /mnt/pass1 ext4 noauto,noatime 0 2
% sudo umount /mnt/free
% sudo mkdir /mnt/pass1
% sudo chmod 0700 /mnt/pass1
% sudo mount /mnt/pass1
% sudo mkdir /mnt/pass1/tatsuya
% sudo chown tatsuya:tatsuya /mnt/pass1/tatsuya
% ln -s /mnt/pass1/tatsuya pass1
% mkdir pass1/guests
% cp gentoo.img pass1/guests
ホストOS側をすこし整える
% sudo cp qemu-ifup /etc
% sudo cp qemu-ifdown /etc
ゲストOSを試してみる。
% qemu-system-x86_64 -enable-kvm -cdrom /dev/cdrom -boot c -m 2047 -net nic,macaddr=00:00:00:00:00:01,model=e1000 -net tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -vnc :0 -monitor stdio -vga cirrus -fsdev local,id=hoge,path=/home/tatsuya/hoge,security_model=mapped -device virtio-9p-pci,fsdev=hoge,mount_tag=v_hoge -hda ~/pass1/guests/gentoo.img
% qemu-system-x86_64 ...(上のコマンドのhogeをpass1に置き換える)
% echo 'qemu-system-x86_64 ...' > ~/pass1/guests/run_gentoo.sh
% chmod +x ~/pass1/guests/run_gentoo.sh
% vim ~/pass1/guests/run_gentoo.sh
(先頭に#!/bin/shを追加)
ゲストOSの環境を整える
% ~/pass1/guets/run_gentoo.sh
% ssvnc 127.0.0.1:5900 -scale 1.1
(rootアカウントでゲストOSにログインする)
# tmux
ハイバネーションの設定
# blkid /dev/sda3
# vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda3"
# mount /boot
# grub-mkconfig -o /boot/grub/grub.cfg
# echo disk > /sys/power/state
これでゲストOSが終了する。ホストOSから
% ~/pass1/guests/run_gentoo.sh
% ssvnc 127.0.0.1:5900 -scale 1.1
中断したところに復帰する。
一般ユーザの追加とsudoの導入
# useradd -m -G users,portage,wheel -s /bin/bash yoshio
# passwd yoshio
ログアウトして、一般ユーザでログインしなおす。
$ tmux
$ su
# emerge -av sudo
# eselect editor list
# eselect editor set 3
# . /etc/profile
# visudo
%wheel ALL=(ALL) ALL
# exit
$ sudo echo hoge
hoge
一般ユーザでのハイバネート
$ echo disk | sudo tee /sys/power/state
$ . /etc/profile
$ sudoedit /usr/local/bin/hibernate
#!/bin/sh
echo disk | sudo tee /sys/power/state
$ sudo chmod +x ls /usr/local/bin/hibernate
$ hibernate
Zshの導入
$ sudo emerge -av zsh
$ sudo vipw
(使っているアカウントのbashをzshに)
ログインしなおすと、zshの設定ツールが起動するので、履歴の保存を1,000,000にして、補完をデフォルトで設定し、vi流のキーバインドにして、拡張パターンマッチと背景ジョブの終了のリアルタイムでの通知を有効にする。
% vim .zshrc
setopt share_history
プロンプトを設定する。
% vim .zshrc
PROMPT="%{^[[;32;1m%}[%D{%H:%M}] %#%{^[[m%} "
PROMPT2="%_> "
RPROMPT="[%40<...<%~]"
ログインしなおす。
Tmuxの設定
% vim ~/.tmux.conf
set-window-option -g mode-keys vi
bind-key j resize-pane -D
bind-key k resize-pane -U
bind-key J resize-pane -D 8
bind-key K resize-pane -U 8
bind-key O select-pane -U
% tmux
Xを導入する
Xorgを導入する。
% sudoedit /etc/portage/make.conf
USE="... \
... \
zsh-completion clang llvm"
...
INPUT_DEVICES="evdev"
VIDEO_CARDS="cirrus"
% sudo emerge -av xorg-server twm xterm xclock
% exit
% exit
% startx
システムのアップデート
% sudo emerge -avu --deep @system
% sudo emerge -avu --deep --newuse @system
% sudo emerge -avu --deep --newuse @world
% sudo emerge -av --depclean
% sudo emerge --sync
% sudo emerge -avu --deep --newuse @system
% sudo emerge -avu --deep --newuse @world
Xmonadの導入
さきにホスト側のキーバインドを変更しておく。まずはxmodmapパッケージを導入する。
% sudo emerge -av xmodmap
いくつかのファイルを作成/編集する。
% vim .Xmodmap
keycode 102 = Meta_L
keycode 100 = Meta_R
remove mod1 = Meta_L
remove mod1 = Alt_L
remove mod1 = Alt_R
add mod3 = Meta_R
add mod3 = Meta_L
remove mod3 = Alt_L
remove mod3 = Alt_R
add mod1 = Alt_L
add mod1 = Alt_R
% vim .xmonad/xmonad.hs
...
xmonad defaultConfig {
...
modMask = mod3Mask
}
% vim .xinitrc
export XMODIFIERS="@im=uim"
uim-xim --engine=tutcode &
xmodmap .Xmodmap
exec xmonad
ゲストを中断する。
% hibernate
Xを落として、また入りなおす。AltではなくCmdでXmonad上のいろいろな操作ができることを確認する。
ゲスト側にもどる。ホスト側で、つぎのようにする。
% ~/pass1/guests/run_gentoo.sh
% ssvncviewer 127.0.0.1:5900 -scale 1.1
ゲストでxmonadを導入する。
% sudo emerge -av xmonad
% vim .xinitrc
exec xmonad
% exit
% exit
% startx
Alt + Shift + Enterでターミナルを立ち上げる。
% exit
Alt + Shift + qでXを落とす。
% emerge -pv rxvt-unicode
% sudoedit /etc/portage/package.use/rxvt-unicode
x11-terms/rxvt-unicode -vanilla 256-color unicode3 wcwidth
% sudo emerge -av rxvt-unicode
% vim .Xdefaults
urxvt*background: black
urxvt*foreground: snow
urxvt*color12: #7799FF
urxvt*saveLines: 0
% vim .zshrc
...
alias ls='ls --color=auto'
alias grep='grep --color=auto'
% vim .xmonad/xmonad.hs
import XMonad
main :: IO ()
main = do
xmonad defaultConfig {
terminal = "urxvt"
}
% startx
firefoxの導入
% emerge -pv firefox
% sudoedit /etc/portage/package.use/python
dev-lang/python sqlite
% sudo emerge -av firefox
問題発生、virtfsはシムリンクを指定するとダメ?
ゲストでつぎのようにコマンドを入力したところ、プロンプトがかえってこなくなった。
% sudo mount -t 9p -o trans=virtio v_pass1 /mnt/free
どうやら、virtfsではシムリンクを指定してはダメなようだ。run_gentoo.shを書き換える。ホストで、
% vim ~/pass1/guests/run_gentoo.sh
qemu-system-x86_64 ...
(/home/tatsuya/pass1のところを/mnt/pass1/tatsuyaとする)
ゲストOSをシャットダウンして、再度立ち上げる。ログインして、
% sudo mount -t 9p -o trans=virtio v_pass /mnt/free
% ls /mnt/free
日本語入力
% sudo emerge -av uim
% vim .xinitrc
export XMODIFIERS="@im=uim"
uim-xim --engine=tutcode &
exec xmonad
% uim-pref-gtk
TUT-codeのvi協調モード、入力モードをカーソルの近くに表示するなど。
ホスト側で
% mkdir pass1/tmp
% cp .mazegaki.dic pass1/tmp/
ゲスト側で
% cp ~/pass1/tmp/.mazegaki.dic ~/
一度Xをぬけて再度入る。
% startx
Shift + Spaceで日本語入力、漢字入力ができることを確認する。
vimperatorを導入
% firefox
vimperatorで検索しアドオンを入れる。
% vim .vimperatorrc
(あとで書く)
dmenuを導入
% sudo emerge -av dmenu
xmobarを導入する
% sudo emerge -av xmobar
問題発生。virtfs?
virtfsでマウントしているディレクトリにアクセスしようとしたらフリーズした。
security=mappedをnoneにして試してみようか?
% vim ~/pass1/guests/run_gentoo.sh
(mappedをnoneにした)
hibernateをパスワードなしで
% sudo visudo
yoshio ALL=(ALL) NOPASSWD: /usr/local/bin/hibernate
xmobarを導入(続き)
ホストで
% cp ~/.xmobarrc ~/pass1/tmp/
ゲストで
% sudo emerge -av xmonad-contrib
% vim .xmonad/xmonad.hs
import XMonad
import XMonad.Util.Run (spawnPipe, hPutStrLn)
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, defaultPP, ppOutput)
import XMonad.Hooks.ManageDocks (avoidStruts)
import XMonad.Layout.NoBorders (smartBorders)
import Control.Concurrent
myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) ||| Full
where tiled = Tall 1 (3 / 100) (1 / 2)
main :: IO ()
main = do
h <- spawnPipe "xmobar"
threadDelay 500000
xmonad defaultConfig {
terminal = "urxvt"
layouthook = smartBorders myLayout,
logHook = dynamicLogWithPP { ppOutput = hPutStrLn h }
}
Muttの導入と設定
まずは、ハードディスクをマウントする場所を決める。
% sudoedit /etc/fstab
v_pass1 /home/yoshio/pass1 9p trans=virtio 0 0
% sudo umount /mnt/free
% sudo mount /home/yoshio/pass1
一度シャットダウンして立ち上げなおして、自動でマウントされることを確認する。
ツールをインストールする
% sudoedit /etc/portage/package.use/mutt
mail-client/mutt gpg imap mbox smtp
% sudo emerge -av mutt
% sudoedit /etc/portage/package.use/procmail
mail-filter/procmail mbox
% sudo emerge -av fetchmail msmtp procmail
% vim ~/.fetchmailrc
(あとで書く)
% fetchmail -akv -m "/usr/bin/procmail -d %T"
% vim .procmailrc
(あとで書く)
% fetchmail -akv -m "/usr/bin/procmail -d %T"
% vim ~/.muttrc
(あとで書く)
% sudo emerge -av w3m
% vim ~/.mailcap
(あとで書く)
古いメールなどを取り込む
backupディレクトリを作成する。ホストで
% mkdir backup
% mkdir backup/git
% vim pass1/guests/run_gentoo.sh
(あとで書く)
ゲストを再起動する。
% sudoedit /etc/fstab
(あとで書く)
% sudoedit ~/.msmtprc
(あとで書く)
% sudo emerge -av urlview
SSHの設定
% cp .../id_rsa ~/.ssh/
% cp .../id_rsa.pub ~/.ssh/
firefoxでPDFを表示する
とくに何もする必要もなかった。
firefoxのダウンロードディレクトリの変更
ダウンロードディレクトリを"ダウンロード"から"download"にする。
HaskellのStackを導入する
% sudoedit /etc/portage/package.use/ncurses
sys-libs/ncurses tinfo
% sudo emerge -av ncurses
% curl -sSL https://get.haskellstack.org/ | sh
% vim ~/.zshrc
...
path=($HOME/.local/bin(N-/) $path)
% stack setup
yesodでプロジェクトを作成する
% cd
% mkdir yesod
% cd yesod
% stack new testProject yesod-simple
% cd testProject
% stack install yesod-bin cabal-install --install-ghc
% stack build
% stack exec -- yesod devel
ブラウザでhttp://localhost:3000 に接続するとYesodのデフォルトのページが見られる。
keterにまとめる
% vi config/keter.yml
user-edited: true
...
hosts:
...
- www.hogehoge.jp
...
# Static files.
- type: static-files
hosts:
- www.hogehoge.jp
% stack exec -- yesod keter
!!ここまでやった!!