KVM に Gentoo(systemd) をインストールした

忘れないうちにメモ。
iso を落とすのが面倒なので、Arch のイメージを使ってインストールします。
今回は用途が限られているためかなり手抜きしています、ご容赦ください。
※ あくまで一例です

Partitioning

/dev/vda1 /boot ext2 32MB
/dev/vda2 swap 2GB
/dev/vda3 / ext4 のこりすべて
# fdisk /dev/vda

# mkfs.ext2 /dev/vda1
# mkfs.ext4 /dev/vda3
# mkswap /dev/vda2
# swapon /dev/vda2
# mount /dev/vda3 /mnt
# mkdir /mnt/boot
# mount /dev/vda1 /mnt/boot

ベースシステムのインストール

# cd /mnt

// stage3 tarball
# curl -O http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20150409.tar.bz2
# tar xvfjp stage3-*.tar.bz2

// portage snapshots
# curl -O http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/portage-latest.tar.bz2
# tar xvfj portage-latest.tar.bz2 -C ./usr

# rm *.tar.bz2

Chroot!!

# cp -L /etc/resolv.conf ./etc/resolv.conf

# mount -t proc none ./proc
# mount --rbind /dev ./dev
# mount --rbind /sys ./sys

# chroot ./ /bin/bash

(chroot)# source /etc/profile
(chroot)# env-update
>>> Regenerating /etc/ld.so.cache...
(chroot)# emerge --sync

make.conf

それっぽく。

(chroot)# vim /etc/portage/make.conf

// 次を追加または編集
CFLAGS="-O2 -pipe -march=native"
MAKEOPTS="-j3"
GENTOO_MIRRORS="http://ftp.jaist.ac.jp/pub/Linux/Gentoo/"

まず

エディタは重要ですよね

# emerge vim

カーネル設定

コンパイルにかかる時間を極力抑えたいので、make allnoconfig で全部無効にした状態で必要なオプションだけ有効にしています。
ちなみにサウンドまわりは割愛してます。
※ あくまで一例です

(chroot)# emerge gentoo-sources

(chroot)# cd /usr/src/linux
(chroot)# make allnoconfig
(chroot)# make menuconfig
General setup  --->
    // Embedded じゃないので切っておく
    [ ] Embedded system
    [ ] Configure standard kernel features (expert users)  --->

Bus options (PCI etc.)  --->
    [*] PCI support

Gentoo Linux  --->
    [*] Gentoo Linux support
        Support for init systems, system and service managers  --->
            // systemd を使うので
            [*] systemd

[*] 64-bit kernel

General setup  --->
    // プロセス間通信
    [*] System V IPC

    // sysfs を使えるようにする
    [*] Enable deprecated sysfs features to support old userspace tools

    // 稼働中のカーネルの設定が見れるように
    [*] Kernel .config support
    [*]   Enable access to .config through /proc/config.gz

    // systemd で必要
    [*] Automatic process group scheduling
    -*- Control Group support  --->
        [*]   Freezer cgroup subsystem
        [*]   Device controller for cgroups
        [*]   Cpuset support
        [*]     Include legacy /proc//cpuset file
        [*]   Simple CPU accounting cgroup subsystem
        [*]   Resource counters
        [*]     Memory Resource Controller for Control Groups
        [*]       Memory Resource Controller Swap Extension
        [*]         Memory Resource Controller Swap Extension enabled by default
        [*]       Memory Resource Controller Kernel Memory accounting
        [*]   Block IO controller
    -*- Namespaces support  --->
        [*]   UTS namespace
        [*]   IPC namespace
        [*]   User namespace 
        [*]   PID Namespaces
        -*-   Network namespace

Processor type and features  --->
    // マルチ(コア)プロセッササポート
    [*] Symmetric multi-processing support

    // KVM
    [*] Linux guest support  --->
        [*]   Enable paravirtualization code
        [*]     KVM Guest support (including kvmclock)

Executable file formats / Emulations  --->
    // ELF 形式のバイナリをサポートするかどうか
    [*] Kernel support for ELF binaries

-*- Networking support  --->
    // 通信できるように
    Networking options  --->
        [*] Packet socket
        [*] Unix domain sockets

Device Drivers  --->
    Virtio drivers  --->
        [*] PCI driver for virtio devices

        // 仮想マシンのメモリを動的に割り当てる感じのやつ
        [*] Virtio balloon driver

    // systemd で必要
    Generic Driver Options  --->
        [*] Support for uevent helper

    // フレームバッファの利用に必要
    [*] Connector - unified userspace <-> kernelspace linker  --->

    [*] Block devices  --->
        [*]   Virtio block driver

    [*] Network device support  --->
        [*]   Network core driver support
        [*]     Virtio network driver

    // evdev
    Input device support  --->
        [*]   Event interface

    // シリアルコンソールを使いたかった
    Character devices  --->
        Serial drivers  --->
            [*] 8250/16550 and compatible serial support
            [*]   Console on 8250/16550 and compatible serial port

    Graphics support  --->
        Frame buffer Devices  --->
            [*] Support for frame buffer devices  --->
                // uvesafb を有効化
                [*] Userspace VESA VGA graphics support

        Console display driver support  --->
            // フレームバッファコンソールを有効にする
            [*] Framebuffer Console support

File systems  --->
    // ext4 を有効にする(ext2 のめんどうもみてくれるっぽい)
    [*] The Extended 4 (ext4) filesystem
    [*]   Ext4 POSIX Access Control Lists
    [*]   Ext4 Security Labels

    // 疑似ファイルシステムを有効化
    Pseudo filesystems  --->
        [*]   Tmpfs POSIX Access Control Lists

Kernel hacking  --->
    [ ] Kernel debugging

    // 緊急用
    [*] Magic SysRq key
(chroot)# make
(chroot)# make install

3 分くらいで終わる

systemd の設定

(chroot)# vim /etc/portage/make.conf

// USE="bindist mmx sse sse2"
//     ↓
USE="bindist mmx sse sse2 systemd"

(chroot)# emerge systemd
Calculating dependencies... done!
〜〜〜
  (sys-fs/udev-216:0/0::gentoo, installed) pulled in by
    >=sys-fs/udev-208-r1 required by (virtual/udev-215:0/0::gentoo, installed)


For more information about Blocked Packages, please refer to the following
section of the Gentoo Linux x86 Handbook (architecture is irrelevant):

http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?full=1#blocked

エラーになった。
udev まわりで衝突してるっぽいのでいったん消す

(chroot)# emerge --unmerge udev

再度

(chroot)# emerge systemd

シリアルコンソールからも入れるようにしたい

(chroot)# ln -s /usr/lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

syslog-ng、dhcpcd

必要そうなツールを入れる

(chroot)# emerge syslog-ng dhcpcd
〜〜〜
 * Error: The above package list contains packages which cannot be
 * installed at the same time on the same system.

〜〜〜
  (sys-fs/udev-216:0/0::gentoo, ebuild scheduled for merge) pulled in by
    >=sys-fs/udev-208-r1 required by (virtual/udev-215:0/0::gentoo, installed)


For more information about Blocked Packages, please refer to the following
section of the Gentoo Linux x86 Handbook (architecture is irrelevant):

http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?full=1#blocked

また udev でコケたので消す

(chroot)# emerge --unmerge udev

再び

(chroot)# emerge syslog-ng dhcpcd
(chroot)# systemctl enable syslog-ng
(chroot)# systemctl enable dhcpcd

Grub の設定

(chroot)# emerge grub
(chroot)# vim /etc/default/grub

// デフォルトの init を systemd にする
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

(chroot)# grub2-install /dev/vda
(chroot)# grub2-mkconfig -o /boot/grub/grub.cfg

その他設定

(chroot)# vim /etc/fstab
/dev/vda1               /boot           ext2            noatime         1 2
/dev/vda3               /               ext4            noatime         0 1
/dev/vda2               none            swap            sw              0 0

(chroot)# vim /etc/locale.gen
// コメントを外す
en_US.UTF-8

(chroot)# locale-gen
(chroot)# echo "LANG=en_US.UTF-8" > /etc/locale.conf
(chroot)# echo "KEYMAP=jp106" > /etc/vconsole.conf
(chroot)# echo "gentoovpc" > /etc/hostname
(chroot)# rm /etc/localtime
(chroot)# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

// root パスワードを設定
(chroot)# passwd

ここで一旦 reboot

(chroot)# exit
# reboot

デスクトップ環境のインストール

とりあえず MATE と lightdm をいれた

# vim /etc/portage/make.conf

// 追記
INPUT_DEVICES="evdev"
VIDEO_CARDS="vesa"

# emerge xorg-server
# vim /etc/portage/make.conf

// USE="bindist mmx sse sse2 systemd"
//     ↓
USE="bindist mmx sse sse2 systemd X python gudev gtk cairo udisks"

# emerge mate lightdm
# systemctl enable lightdm

ついでに USE フラグの変更で影響のあるパッケージを再コンパイルしておく

# emerge --update --deep --newuse @world

ユーザーの作成

// まず sudo をいれる
# emerge sudo

# useradd -m your-user-name
# passwd your-user-name
# gpasswd -a your-user-name wheel
# visudo

// コメントを外す
%wheel ALL=(ALL) ALL

再起動してデスクトップが表示されれば完了
つかれた