Gentoo Install Log 2014年1月

面白いことないかなーって探してましたがGentooにいろんな意味でハマったのでよかったです。

Gentoo入れよう2014年1月版

今回のポイント

  • UEFI+GPTなハードウェア
  • systemd
  • lvm2

です。2014年はこれで行きましょう。

問題

  • Windows8 EFIインストール済み
    • 高速スタートアップはDisabledにする
  • Gentoo minimal livecdはBIOSブートしかできない
    • 一旦、旧来の方法でインストールした後で、何らかの方法でEFIブートに変更しなければならない

時間の無い人向けに先にハマりポイント

  • まず、LiveCDとか、USB stickとかはケチらずに用意しておいたほうがいい。手元に無いからといって、最初からLiveUSB作ったりすると余計に時間がかかる。どっちも100均で売ってる。
  • systemd
    • systemd導入は最初のrebootが成功してからが望ましい。
    • 先に*udevを削除する*。systemdのパッケージ自体にudevがマージされている。代わりにvirtual/udevが自動で入る。
    • USE=“-systemd” emerge sys-apps/dbus を先にやってから改めてsystemd, dbusの順でインストールする。(dbusとsystemdが相互依存になっているので)
  • UEFI+GPT
追記

解決2' 別の方法をoruminさんからコメント欄で教えて頂きました。

UEFI+GPTの問題2の解決方法について、もうひとつあるので紹介を。
grub2-installを実行時に-fオプションを付け、ひとまずブートローダが登録されないことは無視します。
そして、/boot/efi/EFI//grubx64.efi
/boot/efi/EFI/BOOT/bootx64.efi (32bitならboot.efi)へリネーム&コピー。
このbootx64.efiは、UEFIに登録されたブートローダがないとフォールバックモードで自動に読み込むものです。
(場合によっては、起動デバイスでHDDを指定するとこのフォールバックのローダーを読みます)

そしてフォールバックのローダーでUEFIモードで起動できるはずなので、そこからefibootmgrをつかうなりgrub2-installをもう一度やりなおすなりをすれば解決します。


以下に、私の行った具体的なコマンドを記録する。

パーティション構成

(*)印は既存のパーティション
[GPT]
sda1 (*) Windows回復
sda2 (*) EFI System Partition(Windowsが自動的に作成)
sda3 (*) Windows予約済み
sda4 (*) Windows 8
sda5 linux-swap
sda6 /
sda7 lvmで管理 { /home, /usr, /var, /opt }

(/bootの役割はEFI System Partitionが担っていると考え、あえて作成しない)

Gentoo LiveCD

install-amd64-minimal-20140115.iso

UEFI設定

なぜかEFI System Partitionに登録されているプログラム以外、例えばCDROMとかUSBとかをUEFIで認識しなくなっていた。UEFIの設定(マザーボードMSI A75MA-G55)でRestore Defaultsしたら直った。原因不明。

Install

boot: gentoo dolvm

ifconfigするとインターフェイス名がeth0ではなくenp2s0になっているが問題ない。

# ifconfig enp2s0 x.x.x.x netmask 255.255.255.0
# route add default gw x.x.x.x
# /etc/init.d/dhcpcd stop
# echo "nameserver x.x.x.x” >> /etc/resolve.conf
# parted /dev/sda
(parted) mkpart
(以降、対話的にパーティション作成)

sda5 linux-swap
sda6 ext4
sda7 ファイルシステム指定無し。lvmフラグを立てる((parted) set 7 lvm on)

# mkswap /dev/sda5
# swapon /dev/sda5
# mkfs.ext4 /dev/sda6
# pvcreate /dev/sda7
# vgchange -a y
# vgcreate vg /dev/sda7
# lvcreate -L100G -nusr vg
# lvcreate -L100G -nvar vg
# lvcreate -L100G -nopt vg
# lvcreate -L100G -nhome vg
# mkfs.ext4 /dev/vg/usr
# mkfs.ext4 /dev/vg/var
# mkfs.ext4 /dev/vg/opt
# mkfs.ext4 /dev/vg/home
# mount /dev/sda6 /mnt/gentoo
# mkdir /mnt/gentoo/usr
# mkdir /mnt/gentoo/opt
# mkdir /mnt/gentoo/var
# mkdir /mnt/gentoo/home
# mount /dev/vg/usr /mnt/gentoo/usr
# mount /dev/vg/opt /mnt/gentoo/opt
# mount /dev/vg/var /mnt/gentoo/var
# mount /dev/vg/home /mnt/gentoo/home
# cd /mnt/gentoo
# links http://www.gentoo.org/main/en/mirrors.xml
(stage3-amd64-20140115.tar.bz2をダウンロード)
# tar xvjpf stage3-*.tar.bz2
# nano /mnt/gentoo/etc/portage/make.conf
------------------------------------------------------
CFLAGS=“-march=native -02 -pipe -fromit-frame-pointer”
MAKEOPTS=“-j2”
------------------------------------------------------
# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
# mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
# mount -t proc proc /mnt/gentoo/proc
# mount —-rbind /sys /mnt/gentoo/sys
# mount —-rbind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1=“(chroot) $PS1”
# emerge-webrsync
# echo “Asia/Tokyo” > /etc/timezone
# emerge --config sys-libs/timezone-data
# echo “ja_JP.UTF-8 UTF-8” >> /etc/locale.gen
# locale-gen
# eselect locale set 1 #Cにした
# env-update && source /etc/profile
# emerge gentoo-sources
# cd /usr/src/linux
# make menuconfig
# make -j5 && make modules_install

https://wiki.gentoo.org/wiki/Initramfs/HOWTO

# emerge genkernel-next
# genkernel —-udev --lvm --no-ramdisk-modules initramfs
# mv /boot/initramfs-* /boot/initrd-3.10.25-gentoo.img
# cp arch/x86_64/boot/bzImage /boot/kernel-3.10.25-gentoo
(grub2-mkconfigに見つけてもらえるようなファイル名にする。)
  • fstabの編集について
    • # blkid /dev/sda5 >> /etc/fstabなどとして、マウントしたいデバイスのUUIDを集め、fstabにはUUIDで指定するのが安全。読み込んだ順にsdxは変わってしまう。また、この状態でgenkernel initramfsしたとき、/dev/vg/usr -> ../dm-0(存在しない)になっていたので。
# nano /etc/fstab
--------------------------------------
UUID=*** none swap sw 0 0
UUID=*** / ext4 noatime 0 1
UUID=*** /usr ext4 noatime 0 2
UUID=*** /var ext4 noatime 0 2
UUID=*** /opt ext4 noatime 0 2
UUID=*** /home ext4 noatime 0 2
/dev/cdrom /mnt/cdrom auto noauto 0 0
-------------------------------------
# nano /etc/conf.d/net
----------------------------------------------------
config_enp2s0="x.x.x.x netmask 255.255.255.0"
routes_enp2s0="default via x.x.x.x"
----------------------------------------------------
# cd /etc/init.d
# ln -s net.lo net.enp2s0
# rc-update add net.enp2s0 default
# passwd
# nano /etc/conf.d/keymaps
--------------
keymap="jp106"
~-------------
# nano /etc/conf.d/hwclock
-------------
clock="local"
-------------
# emerge syslog-ng
# rc-update add syslog-ng default
# emerge mlocate

今回の本番環境ではGRUBEFIブートファイルにするつもりだが、ここでgrub2-installを行なっても、EFIインストールはできない。LiveCD自体がEFIブートしていないと、EFIモードにならないらしい。よって、USBメモリに別のEFIブートファイルを入れておき、そこからLinuxを起動し直す。これには、EFI stub kernelというカーネルコンフィグが役に立つ。これはLinuxカーネル自体をEFIブートファイルにできる仕組みだ。

http://wiki.gentoo.org/wiki/EFI_stub_kernel

# make menuconfig
EFI=y
->EFI_STUB=y
CMDLINE="root=/dev/sda6 dolvm rootfstype=ext4 initrd=/efi/boot/initramfs.img"
# make -j5

デバイスファイル(/dev/sd*)はtail -f /var/log/messagesでUSBメモリを抜き差ししてみて特定する
http://wiki.gentoo.org/wiki/UEFI_Gentoo_Quick_Install_Guide
https://wiki.archlinux.org/index.php/GRUB#UEFI_systems_2

LiveCD# parted /dev/sdc
(parted) mklabel gpt
(parted) mkpart esi fat32 0% 500m
(parted) set 1 boot on
(parted) q
LiveCD# mkfs.vfat -F 32 /dev/sdc1
# mkdir /mnt/tmp
# mount /dev/sdc1 /mnt/tmp
# mkdir -p /mnt/tmp/efi/boot
# cp arch/x86_64/boot/bzImage /mnt/tmp/efi/boot/bootx64.efi
# umount /mnt/tmp
# exit
LiveCD# umount -l /mnt/gentoo/dev/{/shm,/pts,}
LiveCD# umount -l /mnt/gentoo/pts
LiveCD# umount /mnt/gentoo{/usr,/opt,/var,/home}
LiveCD# vgcahnge -a n
LiveCD# umount /mnt/gentoo
LiveCD# reboot

UEFIブート選択でUEFI: USB Stickを選ぶと立ち上がる

(再びchroot)
# vgchange -a y
# GRUB_PLATFORMS="efi-64" emerge sys-boot/grub
# mkdir /boot/efi
# mount /dev/sda2 /boot/efi
# grub2-install --target=x86_64-efi --efi-direcotry=/boot/efi --bootloader-id=Gentoo
# grub2-mkconfig -o /boot/grub/grub.cfg
Found initrd imageと出ない場合はファイル名を変える:
http://forums.gentoo.org/viewtopic-p-7125364.html
# rc-update add lvm boot
# nano /etc/lvm/lvm.conf
------------------------------------
filter = ["a|dev/sd[ab]|", "r/.*/" ]
------------------------------------

もう一度rebootしてGentooがブート選択に現れているのを確かめる。

systemdの導入をする

# emerge -C sys-fs/udev
# USE=“-systemd” emerge sys-apps/dbus
# eselect profile list
# eselect profile set 5 #desktop/gnome/systemd
# emerge sys-apps/systemd
# emerge --update --deep --newuse --with-bdeps=y @world
# emerge --depclean
# /etc/init.d/dbus start
# /usr/lib/systemd/systemd-localed &
# /usr/lib/systemd/systemd-timedated &
# /usr/lib/systemd/systemd-hostnamed &
# hostnamectl set-hostname <HOSTNAME>
# emerge Networkmanger
# localectl set-keymap jp106
# localectl set-x11-keymap jp106
# genkernel —-udev --lvm initramfs
# nano /etc/default/grub
パラメータに
real_init=/usr/lib/systemd/systemd dolvmを追加
# grub2-mkconfig -o /boot/grub/grub.cfg
# reboot