gentooインストール
Tech > Distoribution > gentoo
もう既に有名になってしまったgentooのインストールを今更書いても意味は無いと思いますが、これからの若い世代へぜひ一度、OSをインストールする意味を 考えてもらうために、書き残そうと思います。
gentooが勘違いされているところは、 「インストールがむずかしい」 とか、その昔 「今更カーネルビルドしてどうする?」 とか散々言われましたが、最近のgentooは インストールはそんなに難しくないし、インストール後の素晴らしいところは、CentOS互換レベルもしくはそれ以上、で色々簡単に最先端のパッケージなどがすぐに使える ようになります。
gentooのインストールはいつも楽しいです、新しいハイスペックなマシンを買ってしまった後の後悔の念を、 emerge コマンドがすべて忘れさせてくれることでしょう…
とりあえず一番簡単なCD-ROMからのインストールでご説明していきます、CD-ROMを入れてbootしてくださいしばらく待てば完了です、とはいきません。
ISOファイルのダウンロード
gentooのオフィシャルサイトから https://www.gentoo.org/ isoファイルをダウンロードしてUSBとかCD-ROMに焼いてください。 (CD-ROMを焼くのにgentooが必要じゃないか、みたいな質問はしないでください)
左側がamd64(x86_64アーキテクチャ)用のiso、右側がx86(i386系アーキテクチャ)のisoです、最近のマシンはamd64なので左側を選択もらえれば問題ないと思います。
stage3とは
以前はstage1からインストールを行っていたのですが、何年か前に「それは、やりすぎだろ」ということで、今ではstage3からのインストールになりました(stage2が何だったのかは忘れました)。 そしてこのstage3とは初期ディレクトリ構成と必要なファイルが保存されているアーカイブで、CD-ROMからboot後に展開して利用します。
stage3にも2通りあり、システム管理デーモンがsystemd版とopenrc版です、もう最近ではsystemdが標準的になってきているので得に理由が無い限りsystemd版を選択してください。
インストール
IPアドレスを設定する
インストール時にネットワークを利用するためIPアドレスを設定する、dhcpが利用できれば
livecd ~ # dhcpcd enp0s3
手動でIPを設定するならば
livecd ~ # ip addr flush dev enp0s3
livecd ~ # ip addr flush dev enp0s8
livecd ~ # ip addr add 192.168.100.77/24 dev enp0s3
livecd ~ # ip route add default via 192.168.100.1
livecd ~ # ip addr add 192.168.253.77/24 dev enp0s8
リゾルバの設定
名前引きを行えるようにリゾルバの設定を行う
livecd ~ # echo 'nameserver 8.8.8.8' > /etc/resolv.conf
SSHを利用可能にする
外部からログインするためrootのパスワードを設定する、ここで設定するパスワードはインストールのための一時的パスワードです。
livecd ~ # passwd root
...
sshdを起動する
livecd ~ # /etc/init.d/sshd start
...
お好みで、ssh経由のインストールを行うことができます、もちろん実機にログインして行っても問題ありません。
パーティション設定
partedコマンドでパーティションを設定します。
livecd ~ # parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted)
GPTへ設定
(parted) mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No? yes
(parted)
パーティションを切る
(parted) unit mib
(parted) mkpart grub 1 3
(parted) set 1 bios_grub on
(parted) unit gib
(parted) mkpart swap 515MiB 32GiB
(parted) mkpart rootfs 32GiB 800GiB
(parted) mkpart home 800GiB -1
(parted) set 2 boot on
(parted) p
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sda: 2795GiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 0.00GiB 0.00GiB 0.00GiB grub bios_grub
2 0.00GiB 0.50GiB 0.50GiB boot boot, esp
3 0.50GiB 32.0GiB 31.5GiB swap
4 32.0GiB 800GiB 768GiB rootfs
5 800GiB 2794GiB 1994GiB home
(parted)
(parted) quit
Information: You may need to update /etc/fstab.
livecd ~ #
フォーマット
パーティションを作成したのちに、お好きなファイルシステムでフォーマットしてください。
livecd ~ # mkfs.vfat -F 32 /dev/sda1
mkfs.fat 3.0.28 (2015-05-16)
livecd ~ # mkswap /dev/sda3
Setting up swapspace version 1, size = 33027068 KiB
no label, UUID=9e744205-e85d-4d9f-af7b-93c99cb737e4
livecd ~ # swapon /dev/sda3
livecd ~ # mkfs.xfs -f /dev/sda4
meta-data=/dev/sda4 isize=512 agcount=4, agsize=50331648 blks
sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1
= data = bsize=4096 blocks=201326592, imaxpct=25
sunit=0 swidth=0 blks
= naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=98304, version=2
sectsz=4096 sunit=1 blks, lazy-count=1
= realtime =none extsz=4096 blocks=0, rtextents=0
livecd ~ # mkfs.xfs /dev/sda5
meta-data=/dev/sda5 isize=512 agcount=4, agsize=130647326 blks
sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1
= data = bsize=4096 blocks=522589302, imaxpct=5
sunit=0 swidth=0 blks
= naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=255170, version=2
sectsz=4096 sunit=1 blks, lazy-count=1
= realtime =none extsz=4096 blocks=0, rtextents=0
livecd ~ #
マウント
フォーマット完了したストレージをマウントしていきます
livecd ~ # mount /dev/sda4 /mnt/gentoo/
livecd ~ # mkdir /mnt/gentoo/boot
livecd ~ # mount /dev/sda2 /mnt/gentoo/boot/
livecd ~ # mkdir /mnt/gentoo/home
livecd ~ # mount /dev/sda5 /mnt/gentoo/home/
stage3の展開
先ほどダウンロードしたstage3を展開します、gentooの基本的ファイルマッピングが行われます。
livecd ~ # cd /mnt/gentoo
livecd ~ # tar -jpxvf stage3-amd64-20151227.tar.bz2
デバイスの関連のマウント
システムデバイス等をループバックマウントします
livecd # mount -o bind /dev /mnt/gentoo/dev/
livecd # mount -t proc /proc /mnt/gentoo/proc
livecd # mount -o bind /sys /mnt/gentoo/sys
livecd # mount -o bind /tmp /mnt/gentoo/tmp
忘れずに、chroot先リゾルバを保存します、IPは適切に設定してください。
livecd ~ # echo 'nameserver 192.168.11.1' > /mnt/gentoo/etc/resolv.conf
chrootする
新しいgentooへchrootします、dockerコンテナに入るのとあまり変わりません。
livecd ~ # chroot /mnt/gentoo /bin/bash
livecd / # env-update
Section 'gentoo' in repos.conf has location attribute set to nonexistent directory: '/usr/portage'
!!! Section 'x-portage' in repos.conf has location attribute set to nonexistent directory: '/usr/portage'
!!! Invalid Repository Location (not a dir): '/usr/portage'
!!! >>> Regenerating /etc/ld.so.cache...
livecd / # source /etc/profile
livecd / # export PS1="(chroot) $PS1"
(chroot) livecd / #
「パッケージ管理用ディレクトリ/usr/portageがないじゃないか!」 と叱られますが、無視です。
poratgeを更新する
rsyncで/usr/portageを同期させて更新します、普段は本家に負荷をかけないように、1台だけ本家とrsyncし、その後の他の自分の機器はその同期させた自前サーバーと 同期するように修正します(必須ではありませんし、1台めの場合は本家と同期してください)
こちらへ詳細を書きましたので Portageの設定 参照してください。
make.confの設定
非常に重要な設定ファイルです、ビルドの設定を行います。
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-march=skylake -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="mmx sse sse2 sse3 X alsa dbus avahi -doc udev emacs policykit consolekit systemd -libressl jpeg tiff png flac mp3 vorbis pulseaudio wavpack mpeg dvd cdrw dvdr python qt qt2 qt3 qt4 qt5 gtk gtk2 gtk3 xft lock session startup-notification thunar cjk xkb xcb libnotify opengl cairo -gnome -kde"
# guess cpuid2cpuflags
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
# BIN ARCH
ABI_X86="32 64"
ACCEPT_LICENSE="*"
MAKEOPTS="-j16"
# Xorg
INPUT_DEVICES="evdev joystick mouse synaptic keyboard mouse synaptic"
# Gen 4 through Gen 9
# https://wiki.gentoo.org/wiki/Intel
VIDEO_CARDS="intel i915 i965 nouveau nv nvidia"
LINGUAS="us ja"
L10N="ja"
PYTHON_TARGETS="python3_7 python3_8"
PYTHON_SINGLE_TARGET="python3_7"
RUBY_TARGETS="ruby25 ruby26"
PHP_TARGETS="php5-7 php7-3"
# Overlay
# source /var/lib/layman/make.conf
#EMERGE_DEFAULT_OPTS="--autounmask=y"
FEATURES="-stricter -test -distcc -buildpkg"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
PORTDIR_OVERLAY="/home/cuomo/overlay/gentoo-haskell /home/cuomo/overlay/karky7-overlay ${PORTDIR_OVERLAY}"
# GRUB_PLATFORMS=efi-64
# CURL_SSL="libressl"
スタンドアローンでビルドするかたや、distccをやらないのであればnativeがおすすめです、後のオプションはgccのリファレンスマニュアルを調べてください。
CFLAGS="-march=native -O2 -pipe"
buildpkgオプションは、バイナリパッケージを作成するオプションです、不要なら外してください、私の場合、仮想OSのアップデートでビルドする時間を短縮するために作成しています。
FEATURES="-stricter -test -distcc -buildpkg"
余談ですが、その昔、SonyのATOMプロセッサにめんどくさいので、Ubuntuのgnomeを入れたのですが、あまりに重いくて使い物にならなかったので、gentooでカスタムし 同じgnomeを入れたところ全然問題なく使えてた記憶があります、そんな影響力のある設定です、gentooならではですね。
ロケールの設定
ロケールの設定を行います、一部のパッケージがビルドでエラーを起こす場合があるので、「en_US.UTF-8 UTF-8」を指定しておいた方がいいと思います。
- /etc/locale.gen
en_US.UTF-8 UTF-8
#ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
#ja_JP EUC-JP
#en_HK ISO-8859-1
更新します
(chroot) livecd ~ # locale-gen
* Generating 4 locales (this might take a while) with 8 jobs
* (2/4) Generating ja_JP.EUC-JP ... [ ok ]
* (4/4) Generating C.UTF-8 ... [ ok ]
* (3/4) Generating ja_JP.UTF-8 ... [ ok ]
* (1/4) Generating en_US.UTF-8 ... [ ok ]
* Generation complete
* Adding locales to archive ... [ ok ]
(chroot) livecd ~ #
portageを同期する
(chroot) livecd ~ # emerge --sync
>>> Syncing repository 'gentoo' into '/usr/portage'...
>>> Starting rsync with rsync://192.168.11.3/gentoo-portage...
receiving incremental file list
timestamp.chk
...
profileを設定する
gentooでは利用用途の目的別にprofileを設定することが可能です、profileを設定することで概ね必要なUSEフラグがディフォルトで設定されます。 eselectコマンドで一覧を出力できます、(*)マークがついている設定が現在の設定です、マークが無い場合未設定ですので必ず設定しましょう。
例えば、「systemdがベースでgnome環境ついかいたい」 場合、 [7] を指定します。
(chroot) livecd ~ # eselect profile list
Available profile symlink targets:
1] default/linux/amd64/17.1 (stable)
[2] default/linux/amd64/17.1/selinux (stable)
[3] default/linux/amd64/17.1/hardened (stable)
[4] default/linux/amd64/17.1/hardened/selinux (stable)
[5] default/linux/amd64/17.1/desktop (stable)
[6] default/linux/amd64/17.1/desktop/gnome (stable)
[7] default/linux/amd64/17.1/desktop/gnome/systemd (stable)
[8] default/linux/amd64/17.1/desktop/plasma (stable)
[9] default/linux/amd64/17.1/desktop/plasma/systemd (stable)
[10] default/linux/amd64/17.1/developer (stable)
[11] default/linux/amd64/17.1/no-multilib (stable)
[12] default/linux/amd64/17.1/no-multilib/hardened (stable)
[13] default/linux/amd64/17.1/no-multilib/hardened/selinux (stable)
[14] default/linux/amd64/17.1/systemd (stable) *
[15] default/linux/amd64/17.0 (dev)
[16] default/linux/amd64/17.0/selinux (dev)
[17] default/linux/amd64/17.0/hardened (dev)
[18] default/linux/amd64/17.0/hardened/selinux (dev)
[19] default/linux/amd64/17.0/desktop (dev)
[20] default/linux/amd64/17.0/desktop/gnome (dev)
[21] default/linux/amd64/17.0/desktop/gnome/systemd (dev)
[22] default/linux/amd64/17.0/desktop/plasma (dev)
[23] default/linux/amd64/17.0/desktop/plasma/systemd (dev)
[24] default/linux/amd64/17.0/developer (dev)
[25] default/linux/amd64/17.0/no-multilib (dev)
[26] default/linux/amd64/17.0/no-multilib/hardened (dev)
[27] default/linux/amd64/17.0/no-multilib/hardened/selinux (dev)
[28] default/linux/amd64/17.0/systemd (dev)
[29] default/linux/amd64/17.0/x32 (dev)
[30] default/linux/amd64/17.0/musl (exp)
[31] default/linux/amd64/17.0/musl/hardened (exp)
[32] default/linux/amd64/17.0/musl/hardened/selinux (exp)
[33] default/linux/amd64/17.0/uclibc (exp)
[34] default/linux/amd64/17.0/uclibc/hardened (exp) [
設定はeselectコマンドを使って行います。
(chroot) livecd ~ # eselect profile set 14
システムビルド
ここから、make.confの設定で指定されるバイナリへプログラムを更新していき、最終的に我が愛しのgentooを構築していきます。
(chroot) livecd ~ # emerge -epv system
一昔前は三日三晩かかったビルドも、いまのハイスペックなマシンなら半日かからず終了します、やっと時代がgentooに近づいてきたようです。
glibcのビルド開始時に以下のエラーが発生する場合があります、
* In order to use glibc with USE=-suid, you must make sure that
* you have devpts mounted at /dev/pts with the gid=5 option.
* Openrc should do this for you, so you should check /etc/fstab
* and make sure you do not have any invalid settings there.
* ERROR: sys-libs/glibc-2.17::gentoo failed (preinst phase):
* mount & fix your /dev/pts settings
その場合、以下のようptsを再マウントしてみてください。
(chroot) livecd ~ # mount -o remount,gid=5 /dev/pts
ファイルシステム
起動時のマウント情報を作成する必要があります、あわててインストールするとこの作業を忘れてrebootしてしまい、再度chrootという屈辱を味わうので先に行っておきましょう。
まず、パーティショニングしたブロックデバイスのブロックIDを取得しておきます、面倒くさければ昔ながらの/dev/sdxとか、/dev/nvme0n1p2でも構いません。
(chroot) livecd ~ # blkid /dev/sda1
/dev/sda1: UUID="85A1-51D0" TYPE="vfat" PARTLABEL="efi-boot" PARTUUID="2c0c39ce-d12b-44fc-b00c-49f7c8f32cfe"
(chroot) livecd ~ # blkid /dev/sda2
/dev/sda2: UUID="17ec9164-e43c-4a9b-a3a8-e34f1e5fdfaf" TYPE="swap" PARTLABEL="swap" PARTUUID="22998b31-cb08-45e7-8fc6-ee3fba08f82e"
(chroot) livecd ~ # blkid /dev/sda3
/dev/sda3: UUID="7ed7ac5f-50e6-43b0-9543-4d90a6aebb81" TYPE="xfs" PARTLABEL="rootfs" PARTUUID="5f5fac32-7266-47c1-b123-977d72823ef2"
(chroot) livecd ~ # blkid /dev/sda4
/dev/sda4: UUID="d8208f95-6aca-4064-8d67-41014b236cee" TYPE="xfs" PARTLABEL="home" PARTUUID="94be1fe5-cbc2-41cc-a1dc-5ab13e5c5f35"
(chroot) livecd ~ #
ちなみに、UUIDとPARTUUIDは違いますのでご注意ください。
そして、ファイル情報を更新し保存します。
- /etc/fstab
# <fs> <mountpoint> <type> <opts> <dump/pass>
UUID="85A1-51D0" /boot/efi vfat noauto,noatime 1 2 # /dev/sda1
UUID="7ed7ac5f-50e6-43b0-9543-4d90a6aebb81" / xfs noatime 0 1 # /dev/sda3
UUID="d8208f95-6aca-4064-8d67-41014b236cee" /home xfs default 0 1 # /dev/sda4
UUID="17ec9164-e43c-4a9b-a3a8-e34f1e5fdfaf" none swap default 0 0 # /dev/sda2
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
/dev/fd0 /mnt/floppy auto noauto 0 0
# /dev/BOOT /boot ext2 noauto,noatime 1 2
# /dev/ROOT / ext3 noatime 0 1
# /dev/SWAP none swap sw 0 0
# /dev/cdrom /mnt/cdrom auto noauto,ro 0 0
# /dev/fd0 /mnt/floppy auto noauto 0 0
- /etc/mtab
mtabを作成します。
(chroot) livecd ~ # grep -v rootfs /proc/mounts > /etc/mtab
/dev/root / xfs rw,noatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,nosuid,noexec,size=16412364k,nr_inodes=4103091,mode=755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,size=6579152k,nr_inodes=819200,mode=755 0 0
...
... 続く
カーネル構築
カーネル構築といっても、すべてgentooがやってくれます、genkernelコマンドで終了です。
最初に、gentooのカーネルソースを持ってきます
(chroot) livecd ~ # emerge gentoo-sources
そして、genkernelパッケージをインストール
(chroot) livecd ~ # emerge sys-kernel/genkernel
カーネルを構築する、オプションがいっぱいありますがとりあえずこれで終わりです、カーネルオプションを設定したい方は 最後に「–menuconfig」オプションをつければビルド前にメニューが開くと思います。
(chroot) livecd ~ # genkernel all
これだけです、完了すると、/bootディレクトリしたにカーネルが展開されます。
ブートローダ
grub2をブートローダへ設定します、UEFIの場合、/etc/portage/make.confへ以下の設定を追加
- /etc/portage/make.conf
# UEFI on amd64
GRUB_PLATFORMS="efi-64"
grub2パッケージののインストール
(chroot) livecd ~ # emerge sys-boot/grub
ディスクへインストールします
(chroot) livecd ~ # grub2-install --target=x86_64-efi --efi-directory=/boot
Installing for x86_64-efi platform.
Installation finished. No error reported.
efibootmgr: EFI variables are not supported on this system. が出力される場合、 grub設定の備考 あたりを参考に調整してください
grub設定ファイル作成します
livecd ~ # grub2-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Linux イメージを見つけました: /boot/kernel-genkernel-x86_64-4.1.15-gentoo-r1
Found initrd image: /boot/initramfs-genkernel-x86_64-4.1.15-gentoo-r1
完了
- /etc/default/grub
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
ユーザー作成
rootユーザーのパスワードは必ず設定してください、reboot後、辱めを受けます。
(chroot) livecd ~ # passwd root
新しいパスワード:
新しいパスワードを再入力してください:passwd: パスワードは正しく更新されました
(chroot) livecd ~ #
追加パッケージをインストール
再起動後ネットワークへ接続できるよう、必要最低限のパッケージをインストールします
(chroot) livecd ~ # emerge dhcpcd
(chroot) livecd ~ # emerge net-misc/bridge-utils
(chroot) livecd ~ # emerge sys-apps/iproute2
失敗した場合、再度CD-ROMから起動して、chrootを行ってください。
環境設定
ホスト名、ロケール、タイムゾーンなどを設定します。
(chroot) livecd ~ # timedatectl set-timezone Asia/Tokyo
(chroot) livecd ~ # hostnamectl set-hostname vkari
(chroot) livecd ~ # localectl set-locale LANG=ja_JP.utf-8
(chroot) livecd ~ # localectl set-keymap jp106
(chroot) livecd ~ # timedatectl set-ntp true
(chroot) livecd ~ # timedatectl status
Local time: 日 2017-02-05 16:24:37 JST
Universal time: 日 2017-02-05 07:24:37 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
(chroot) livecd ~ # localectl
System Locale: LANG=ja_JP.utf-8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
(chroot) livecd ~ #
ネットワーク設定
ネットワークデバイスが利用できるように設定します。
- /etc/conf.d/network@enp0s3
address=192.168.100.77
netmask=24
broadcast=192.168.254.255
gateway=192.168.243.1
- /etc/conf.d/network@enp0s8
address=192.168.254.77
netmask=24
broadcast=192.168.254.255
enp0s3とenp0s8のネットワークデバイスは実際のデバイス名で置き換えてください。
(chroot) livecd ~ # systemctl enable network@enp0s3
(chroot) livecd ~ # systemctl start network@enp0s3
最終処理
ベースの構築はこれで完了です、chroot環境からexitしてください。
(chroot) livecd ~ # exit
# cd
すべてunmountします
livecd # umount /mnt/gentoo/dev/
livecd # umount /mnt/gentoo/proc
livecd # umount /mnt/gentoo/sys
livecd # umount /mnt/gentoo/tmp
livecd # umount /mnt/gentoo/home
livecd # umount /mnt/gentoo/boot
livecd # umount /mnt/gentoo/
umountでエラーが発生しても無視していいと思います。
reboot
さぁ、rebootです、恥ずかしめを受けないようお祈りが完了したら、以下のコマンドを打ち込んでください。 (CD-ROMを取り出すことをおわすれなく…)
livecd # reboot
おめでとうございます、gentooが起動しましたか?…
Posted on 2020-11-16 05:09:26