N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

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