Help us understand the problem. What is going on with this article?

Gentooをインストールして、XmonadでGUI環境を整える

Gentooをインストールして、XmonadでGUI環境を整える

はじめに

この記事は未完です。自分用のメモです。僕の個人的な環境での作業例です。現在はKVM上のゲストOSの環境を調整中です。

ゆくゆくは、もっと細かに内容にわけて、それぞれ独立した記事にする予定です。

何をするか

長年、Gentooを使ってきて、どのような環境にするのかが、ほぼ、かたまってきた。その「自分用の環境」を作成するための、やりかたをここにメモする。

この記事の書きかた

Gentooをインストールして、環境を整えるという作業を何度もくりかえしてきた。そこで、だいたい、どのようにするかは覚えている。ただし細部は忘れている。そこで、まずは作業の前に、だいたいの流れを書く。そして、作業しながら細かい点をうめたり、修正したりしていく。

実際の作業がどこまで進んでいるのかは「!!ここまでやった!!」というラベルで表示する。

どのような環境にするか

つぎのような環境にする。

  • ディスクはMBRではなくGPTで初期化する
  • LVMを使って、パーティションの容量をフレキシブルにする
  • SWAP領域はメモリ容量の2倍
  • bootパーティションは自動ではマウントしない
  • x86_64用のGentooをインストールする
  • ...

インストールCDの作成

GentooのミラーサイトからISOイメージを落としてくる。つぎのアドレスから、ミラーサイトを選ぶ。

https://www.gentoo.org/downloads/mirrors/

つぎのようにリンクをたどる。

  • 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を検索して導入する。それから、指づかいを変える。以下の記事にしたがう。

http://qiita.com/YoshikuniJujo/items/67236b619fc4e21dc806

ブラウザ上での文字入力で、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: nfs-utils

ハードディスクの暗号化と、そのマウント

さきに、まちがえて消さないように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

!!ここまでやった!!

さくらのVPSでketerでまとめたWebアプリを公開してみる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away