Gentoo Linux を sysytemd でインストールする(裏)

概要

Gentoo のインストールに慣れている人向けに、筆者の手順を紹介します。 下記環境で決め打ち & プライベートネットワーク内サーバのベースを想定してます。

UEFI + GPT + SSD + btrfs + systemd

あまり一般的ではない所は、sysvinit & openrc を削除する部分とブートローダを使わない所でしょうか。

インストールの準備をする

インストールメディアは SystemRescueCd を使用する。

BIOSで該当のメディアがブートされるように設定し、インストールメディアをセットしブートする

../../../_images/srcd01.png

altanative kernel を選択

キーボードの選択

../../../_images/srcd02.png

日本語キーボードは 22

対話シェルが起動した状態

../../../_images/srcd03.png

DHCP 環境の場合は下記コマンドでIPアドレスが割り当てられた事を確認する

ip a

固定IPアドレスを振る例

# インターフェース名とIPアドレスは環境に合わせて置き換える
ip link set dev eno1 up
ip addr add 10.16.128.77/24 broadcast 10.16.128.255 dev eno1
ip route add default via 10.16.128.254

リモートからsshで接続してインストール作業を実施する為、コンソールよりsshdの起動とrootパスワードの設定をする

passwd
# 任意のパスワード aaa等を入力
# sshd が起動していない場合は起動する
/etc/init.d/sshd start

# 起動確認
pgrep -l sshd

コンソールで上記設定ができたら、リモートより SSH 接続をする

ディスクの確認

lsblk -f
blkid

パーティション設定 (GPT+UEFI)

先にコマンドで調べたストレージデバイスにパーティション、ファイルシステムを作成する。

gdiskコマンドを利用する

# /dev/sdaに作成する例
gdisk /dev/sda

    GPT fdisk (gdisk) version 1.0.0

    The protective MBR's 0xEE partition is oversized! Auto-repairing.

    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present

    Found valid GPT with protective MBR; using GPT.

    Command (? for help):p ※pで現在のパーティション状況を表示

    Command (? for help): d ※不要なパーティションを削除する例
    Partition number (1-6): 1

    Command (? for help): o ※全てのパーティションを削除しGPTのパーティションテーブルを作成
    This option deletes all partitions and creates a new protective MBR.
    Proceed? (Y/N): y

    Command (? for help): n ※ESP(EFI System Partition)を作成する
    Partition number (1-128, default 1):
    First sector (34-500118158, default = 2048) or {+-}size{KMGTP}:
    Last sector (2048-500118158, default = 500118158) or {+-}size{KMGTP}: +512M
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): EF00
    Changed type of partition to 'EFI System'

    Command (? for help): n
    Partition number (3-128, default 3):
    First sector (34-500118158, default = 34605056) or {+-}size{KMGTP}:
    Last sector (34605056-500118158, default = 500118158) or {+-}size{KMGTP}: +20G ※ルートとして標準の「Linux filesystem」に割り当てる。
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'

    Command (? for help): p ※ 確認

    Command (? for help): w ※ 変更を書き込んで終了

    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!

    Do you want to proceed? (Y/N): y
    OK; writing new GUID partition table (GPT) to /dev/sda.
    The operation has completed successfully.

ESPのフォーマット

mkfs.vfat -F32 /dev/sda1

ルート領域をbtrfsでフォーマット

mkfs.btrfs -f -L root /dev/sda2

    Detected a SSD, turning off metadata duplication.  Mkfs with -m dup if you want to force metadata duplication.
    btrfs-progs v4.2.2
    See http://btrfs.wiki.kernel.org for more information.

    Performing full device TRIM (20.00GiB) ...
    Label:              root
    UUID:               950dc1ea-feef-4ec8-9642-392bff95d977
    Node size:          16384
    Sector size:        4096
    Filesystem size:    20.00GiB
    Block group profiles:
      Data:             single            8.00MiB
      Metadata:         single            8.00MiB
      System:           single            4.00MiB
    SSD detected:       yes
    Incompat features:  extref, skinny-metadata
    Number of devices:  1
    Devices:
       ID        SIZE  PATH
        1    20.00GiB  /dev/sda3

ディスクのマウント

# btrfs のサブボリュームを作成する
mkdir -p /mnt/btrfs
mount /dev/sda2 /mnt/btrfs
cd /mnt/btrfs

btrfs subvolume create gentoo
btrfs subvolume create usr-portage
btrfs subvolume create var-log

# ルート→サブボリューム→bootの順にマウントする
mount -odefaults,subvol=gentoo,compress=lzo,ssd_spread /dev/sda2 /mnt/gentoo

cd /mnt/gentoo
mkdir -p usr/portage var/log
mount -odefaults,subvol=usr-portage,compress=lzo,ssd_spread /dev/sda2 usr/portage
mount -odefaults,subvol=var-log,compress=lzo,ssd_spread /dev/sda2 var/log
mkdir -p /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot

# 確認
btrfs filesystem show
btrfs sub list /mnt/gentoo

マウントの状態とルートのディスク容量を確認

df -hT
btrfs filesystem df /mnt/gentoo
# 意図しないサイズの場合、リブートをしてサイズが意図通りになる事がある

インストール用ファイル準備

作業領域にカレントを移し、最新のstage3のアーカイブをダウンロード、展開する

cd /mnt/gentoo
MIRROR='ftp://ftp.iij.ad.jp/pub/linux/gentoo/';
STAGE3=${MIRROR}/releases/amd64/autobuilds/$(curl -L ${MIRROR}/releases/amd64/autobuilds/latest-stage3-amd64-systemd.txt -s | awk '!/^\s*(#|$)/{print $1}');
curl -LO ${STAGE3}.DIGESTS;
curl -LO ${STAGE3};
STAGE3_FILENAME=$(echo ${STAGE3}|awk -F/ '{print $NF}')
RIGHT_HASH_VALUE=$(awk -v STAGE3_FILENAME=$STAGE3_FILENAME '/SHA512 HASH/{FLAG=1} $2==STAGE3_FILENAME {if(FLAG==1){ print; FLAG=0}}'  $STAGE3_FILENAME.DIGESTS)
HASH_VALUE=$(sha512sum $STAGE3_FILENAME)
[ "$HASH_VALUE" = "$RIGHT_HASH_VALUE" ] && echo OK
tar xfp $STAGE3_FILENAME;

Portageスナップショットをダウンロードし、インストール

cd /mnt/gentoo
wget http://ftp.iij.ad.jp/pub/linux/gentoo/releases/snapshots/current/portage-latest.tar.bz2.md5sum
wget http://ftp.iij.ad.jp/pub/linux/gentoo/releases/snapshots/current/portage-latest.tar.bz2
md5sum -c portage-latest.tar.bz2.md5sum
tar xf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

make.confの設定

コンパイルオプションの設定とミラーサイトの選択を記述する

エディタで編集をする

vim /mnt/gentoo/etc/portage/make.conf

お好みで

CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
# コア数 + 1 程度
MAKEOPTS="-j9"
# USEフラグ
USE="mmx sse sse2 cjk unicode nptl nptlonly threads nls systemd"
USE="${USE} acpi dbus hal xml pam nis nfs"
USE="${USE} -bindist -alsa -cups -gnome -gtk -kde -oss -perl -qt3 -qt4 -ruby -X"

LINGUAS="ja"
GENTOO_MIRRORS="ftp://ftp.iij.ad.jp/pub/linux/gentoo/ ftp://ftp.jaist.ac.jp/pub/Linux/Gentoo/"

# portage log
PORT_LOGDIR="/var/log/portage"
PORTAGE_ELOG_CLASSES="warn error log"
PORTAGE_ELOG_SYSTEM="save"

portage のシンク先の設定

gentoo.confの編集

mkdir /mnt/gentoo/etc/portage/repos.conf
vim /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
[DEFAULT]
main-repo = gentoo
[gentoo]
location = /usr/portage
sync-type = rsync
sync-uri=rsync://rsync.jp.gentoo.org/gentoo-portage
auto-sync = yes

DNS情報のコピー

cp -L /etc/resolv.conf /mnt/gentoo/etc/
# 固定 IP アドレスを振っている場合は手動で編集

システムパーティションのマウント

mount -t proc none /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

chrootする

cd /mnt/gentoo && chroot /mnt/gentoo /bin/bash
source /etc/profile && export PS1="(chroot) $PS1"

Vimのインストール

インストール中の作業用に Vim をインストールする

mkdir /etc/portage/package.use
echo app-editors/vim python vim-pager lua luajit >> /etc/portage/package.use/vim
emerge -avt app-editors/vim
echo "set paste" > ~/.vimrc

デバイス確認系のツールをインストール

ethtool:

sys-apps/ethtool

lspci, lsmod:

pciutils

lshw:

sys-apps/lshw

まとめてインストール

emerge -avt sys-apps/ethtool sys-apps/pciutils sys-apps/lshw

各種情報を出力し、メモをしておく

lspci -k
lsmod
lshw -short

カーネルソースをインストール

echo "sys-kernel/gentoo-sources symlink"> /etc/portage/package.use/gentoo
mkdir -p /etc/portage/package.keywords
echo "sys-kernel/gentoo-sources ~amd64" > /etc/portage/package.keywords/gentoo
emerge -avt gentoo-sources
ls -l /usr/src

カーネル構成設定

cd /usr/src/linux
make menuconfig
make menuconfig の KVM 用パラメータ
===================================


コンテナ用 ::

    CONFIG_DEVPTS_MULTIPLE_INSTANCES=y


UEFI の Linux カーネル設定オプション ::

    CONFIG_RELOCATABLE=y
    CONFIG_EFI=y
    CONFIG_EFI_STUB=y #手動
    CONFIG_FB_EFI=y
    CONFIG_FRAMEBUFFER_CONSOLE=y

    UEFI Runtime Variables Support (efivarfs ファイルシステム - /sys/firmware/efi/efivars)。
    CONFIG_EFIVAR_FS=y #手動

    UEFI Runtime Variables Support (古い efivars sysfs インターフェイス - /sys/firmware/efi/vars)。このオプションは無効にしてください。
    CONFIG_EFI_VARS=n #手動

    GUID Partition Table GPT 設定オプション - UEFI サポートのために必須
    CONFIG_EFI_PARTITION=y

UEFI用?

    [*] Enable the block layer  --->
        Partition Types  --->
            [*] Advanced partition selection
            [*]   EFI GUID Partition support
    Processor type and features  --->
        [*] EFI runtime service support
    Firmware Drivers  --->
            EFI (Extensible Firmware Interface) Support -->
                <*> EFI Variable Support via sysfs


UEFI,systemd,KVM ホスト用

  Linux/x86 4.4.6-gentoo Kernel Configuration

  General setup  --->
    <*> Kernel .config support
    [*]   Enable access to .config through /proc/config.gz
    [*] Memory placement aware NUMA schedule
       [*]   Automatically enable NUMA aware memory/task placement (NEW)


    [*] Namespaces support  --->

    [*] Configure standard kernel features (expert users)  --->

  [*] Enable loadable module support  --->
    [ ]   Forced module loading
    [*]   Module unloading
    [*]     Forced module unloading
    [*]   Module versioning support
    [ ]   Source checksum for all modules (NEW)
    [ ]   Module signature verification (NEW)

  -*- Enable the block layer  --->
    IO Schedulers  --->
       <*> Deadline I/O scheduler
       <*> CFQ I/O scheduler
       Default I/O scheduler (deadline)  ---> ※SSDの場合は deadlineで。No-opにすると速いが大きなファイルの読み書きで他のタスクに影響が出る HDDの場合はCFQのままで。

  Processor type and features  --->
    [*] Linux guest support  --->
      [*]   Enable paravirtualization code ※KVM Guest
      [*]     Paravirtualization layer for spinlocks ※KVM Guest
      [ ]     Xen guest support
      [*]   KVM Guest support (including kvmclock) ※KVM Guest
      [*]   Paravirtual steal time accounting

    Processor family (Generic-x86-64)  --->
     (X) Core 2/newer Xeon

    [*] Supported processor vendors  --->
        [*]   Support Intel processors

    [*] Enable Maximum number of SMP Processors and NUMA Nodes

    <*> CPU microcode loading support ※ CPUのマイクロコードアップデートに必要
    [*]   Intel microcode loading support ※ CPUのマイクロコードアップデートに必要
    [*] Numa Memory Allocation and Scheduler Support
    [*]   Old style AMD Opteron NUMA detection
    [*]   ACPI NUMA detection

    [*] Enable KSM for page merging ※ KVM 使用時にメモリ圧縮の為に ksm/ksmtuned サービスと一緒に使う

    [*] EFI runtime service support ※ UEFI起動に必要
    [*]   EFI stub support ※ UEFI起動に必要
    [ ]     EFI mixed-mode support ※ 不要

  [*] Networking support  --->
    Networking options  --->
      -*- TCP/IP networking
      <M>   IP: AH transformation ※iptables
      <M>   IP: ESP transformation ※iptables
      <M>   IP: IPComp transformation ※iptables
      <*>   IP: IPsec transport mode ※iptables
      <*>   IP: IPsec tunnel mode ※iptables
      <M>   IP: IPsec BEET mode ※iptables
      <*>   Large Receive Offload (ipv4/tcp) (NEW) ※iptables
      <*>   INET: socket monitoring interface ※iptables
      <M>     UDP: socket monitoring interface ※iptables
      <*>   The IPv6 protocol  ---> ※iptables
      [*] Network packet filtering framework (Netfilter)  ---> ※iptables
        [*]   Advanced netfilter configuration
              Core Netfilter Configuration  ---> ※iptables
                <*>   nfmark target and match support
                <*>   ctmark target and match support
                <*>   CHECKSUM target support
                <*>   "addrtype" address type match support
                <*>   "comment" match support
                <*>   "conntrack" connection tracking match support
                <*>   "hl" hoplimit/TTL match support
                <*>   "iprange" address range match support
                <*>   "length" match support
                <*>   "limit" match support
                <*>   "mac" address match support
                <*>   "multiport" Multiple port match support
             IP: Netfilter Configuration  --->
                <*> IP tables support (required for filtering/masq/NAT)
                <*>   "ah" match support
                <*>   "ecn" match support
                <*>   "rpfilter" reverse path filter match support
                <*>   "ttl" match support
                <*>   IPv4 NAT
                <*>     MASQUERADE target support
                <*>     NETMAP target support
                <*>     REDIRECT target suppor
                <*> ARP tables support
                <*>   ARP packet filtering
                <*>   ARP payload mangling
        <*>   Ethernet Bridge tables (ebtables) support  ---> ※802.1d Ethernet Bridgingを先にチェック
          <*>   ebt: mark target support
      <*> 802.1d Ethernet Bridging ※VMが使用するインターフェースブリッジで使用
      [*]   IGMP/MLD snooping (NEW)
      [*]   VLAN filtering
      <*> 802.1Q/802.1ad VLAN Support ※VMが使用するインターフェースブリッジで使用
      [*]   GVRP (GARP VLAN Registration Protocol) support ※VMが使用するインターフェースブリッジで使用
      [*]   MVRP (Multiple VLAN Registration Protocol) support ※VMが使用するインターフェースブリッジで使用
    [ ]   Amateur Radio support  --->
    < >   RF switch subsystem support  --->
    <*>   Plan 9 Resource Sharing Support (9P2000)  --->  ※KVMゲスト VirtFSに必要 Virtualization driversを先にチェック
      <*>   9P Virtio Transport  ※KVMゲスト VirtFSに必要 Virtualization driversを先にチェック
    <*>   CAIF support  --->

  Device Drivers  --->
    [*] Block devices  --->
      <*>   DRBD Distributed Replicated Block Device support ※DRBDを使う場合
      [*]     DRBD fault injection ※DRBDを使う場合
      <*>   Virtio block driver ※KVMゲスト必須 Virtio driversを先にチェック

    SCSI device support  --->
      [*] SCSI low-level drivers  ---> ※サーバでLSIのRAIDカードを使っている場合
          [*]   LSI Logic New Generation RAID Device Drivers
          <*>     LSI Logic Management Module (New Driver)
          <*>       LSI Logic MegaRAID Driver (New Driver)
          <*>   LSI Logic Legacy MegaRAID Driver
          <*>   LSI Logic MegaRAID SAS RAID Module
          <*>   virtio-scsi support (EXPERIMENTAL) ※KVMゲスト

    [*] Multiple devices driver support (RAID and LVM)  ---> ※LVMを使う場合
      <*>   Device mapper support
      <*>     Crypt target support
      <*>     Snapshot target
      <*>     Thin provisioning target
      <*>     Mirror target
      <*>   Multipath target
         <*>     I/O Path Selector based on the number of in-flight I/Os
         <*>     I/O Path Selector based on the service time

    [*] Network device support  --->
      <M>   Bonding driver support ※複数のインターフェースをまとめる場合
      <M>     Ethernet team driver support  --->
               <M>   Broadcast mode support
               <M>   Round-robin mode support
               <M>   Random mode support
               <M>   Active-backup mode support
               <M>   Load-balance mode support
      <*>     MAC-VLAN support ※KVMホスト
      <*>       MAC-VLAN based tap driver ※KVMホスト
      <*>   Universal TUN/TAP device driver support ※KVMホスト
      <*>     Virtio network driver ※KVMゲスト 必須
      <*>   CAIF virtio transport driver ※KVMホスト 先に Networking support ->  CAIF support をチェックする必要あり
        <*>     Host kernel accelerator for virtio net ※KVMホスト
      [*]   Ethernet driver support  ---> ※必要に応じて
          [*]   Broadcom devices
          {*}   Broadcom NetXtremeII support

    Character devices  --->
      <*> Virtio console  ※KVMゲスト device virtio-serial を使ったシリアル接続をする時に必要 libvirtのシリアル接続には不要
      <*> Hardware Random Number Generator Core support  --->
          <*>   VirtIO Random Number Generator support※KVMゲスト
      Serial drivers  --->
        <*> 8250/16550 and compatible serial support ※シリアル接続に必要
        [*]   Console on 8250/16550 and compatible serial port ※シリアル接続に必要

    Graphics support  --->
        Direct Rendering Manager  --->
            <*> Kernel modesetting driver for MGA G200 server engines ※サーバのグラフィックカードで使われている事が多い lspciの結果を見る
            <*> ATI Radeon
              [*]   Enable userspace modesetting on radeon (DEPRECATED)
        <*> Cirrus driver for QEMU emulated device
        < > Virtio GPU driver

    [*] DMA Engine support  --->
       <*>   Intel I/OAT DMA support

    [*] Virtualization drivers  ---> ※KVMゲスト 先にチェックする
    Virtio drivers  ---> ※KVMゲスト
      <*> PCI driver for virtio devices ※KVMゲスト
      [*]   Support for legacy virtio draft 0.9.X and older devices
      <*> Virtio balloon driver ※KVMゲスト
      <*> Virtio input driver ※KVMゲスト
      <*> Platform bus driver for memory mapped virtio devices ※KVMゲスト
      [*]   Memory mapped virtio devices parameter parsing ※KVMゲスト

  Firmware Drivers  --->
    <*> BIOS update support for DELL systems via sysfs ※DELL機のみ
    <*> Dell Systems Management Base Driver ※DELL機のみ
    EFI (Extensible Firmware Interface) Support  --->
        < > EFI Variable Support via sysfs            ※ UEFIブートに不要

  File systems  --->
    [*]   Ext3 extended attributes (NEW)
    <*> The Extended 4 (ext4) filesystem
      [*]   Use ext4 for ext2/ext3 file systems
      [*]   Ext4 POSIX Access Control Lists
      [*]   Ext4 Security Labels ※KVMホスト
    <*> XFS filesystem support
     [*]   XFS Quota support
     [*]   XFS POSIX ACL support
     [*]   XFS Realtime subvolume support
     [*]   XFS Verbose Warnings
    <*> Btrfs filesystem support
     [*]   Btrfs POSIX Access Control Lists


    [*] Dnotify support ※NFSを利用する時に必要
    [*] Network File Systems  --->
       <*>     NFS client support for NFS version 4
       [*]   NFS client support for NFSv4.1
       <*>   NFS server support ※NFSサーバを構築する場合
       -*-     NFS server support for NFS version 3
       [*]     NFS server support for NFS version 4
       [*]       Provide Security Label support for NFSv4 server
       <*>   Plan 9 Resource Sharing Support (9P2000) ※KVMゲスト VirtFS
       [*]     9P POSIX Access Control Lists ※KVMゲスト VirtFS
       [*]     9P Security Labels ※KVMゲスト VirtFS


  Security options  --->
    [ ] Enable different security models

  -*- Cryptographic API  --->
    <*>   CRC32c INTEL hardware acceleration
    <*>   GHASH digest algorithm (CLMUL-NI accelerated)
    <*>   AES cipher algorithms (x86_64)

  [*] Virtualization  --->
     <*>   Kernel-based Virtual Machine (KVM) support ※KVMホスト
       <*>     KVM for Intel processors support ※KVMホスト
       < >     KVM for AMD processors support
       [ ]     Audit KVM MMU (NEW)
       [*]     KVM legacy PCI device assignment support (NEW) ※KVMホスト
       <*>   Host kernel accelerator for virtio net ※KVMホスト


カーネルをインストールする

カーネルconfigが終わったらコンパイル、インストールを実施する

make && make modules_install
make install

# initramfs?モジュール読み込み?面倒だから全部組み込みで!

systemd の適用

システムが systemd を使うように設定変更

# default/linux/amd64/13.0/systemd が選択されている事を確認
eselect profile list

# 例
    [12]  default/linux/amd64/13.0/systemd *

openrc と sysvinit を削除する

emerge -C sys-apps/sysvinit sys-apps/openrc

systemd 関連の USE フラグを変更する

mkdir /etc/portage/package.use
echo "sys-apps/systemd gnuefi importd curl lzma gcrypt sysv-utils" > /etc/portage/package.use/systemd
mkdir /etc/portage/package.keywords
echo "sys-apps/systemd ~amd64" > /etc/portage/package.keywords/systemd
echo "sys-apps/util-linux ~amd64" >> /etc/portage/package.keywords/systemd
echo "sys-libs/libseccomp ~amd64" >> /etc/portage/package.keywords/systemd

Python に sqlite の USEフラグ を付ける

echo "dev-lang/python sqlite gdbm ipv6 ncurses readline ssl threads xml" >> /etc/portage/package.use/python
mkdir /etc/portage/package.keywords
echo "dev-lang/python ~amd64" >> /etc/portage/package.keywords/python

パッケージのコンパイルし直し

emerge -avDN @world
emerge --depclean

fstabの修正

エディタで編集する

vim /etc/fstab

/dev/sda1                /boot             vfat    defaults,noatime                                                        1 2
/dev/sda2                /                 btrfs   defaults,noatime,subvol=gentoo,compress=lzo,ssd_spread,space_cache      0 1
/dev/sda2                /usr/portage      btrfs   defaults,noatime,subvol=usr-portage,compress=lzo,ssd_spread,space_cache 0 1
/dev/sda2                /var/log          btrfs   defaults,noatime,subvol=var-log,compress=lzo,ssd_spread,space_cache     0 1

ネットワーク設定

固定IPアドレス割り当て

vim /etc/systemd/network/eno1.network

    [Match]
    Name=eno1
    Virtualization=no

    [Network]
    DHCP=no
    DNS=10.16.128.1
    Domains=usaturn.local
    NTP=10.16.128.1

    [Address]
    Address=10.16.128.77
    Broadcast=10.16.128.255

    [Route]
    Gateway=10.16.128.254

ネットワークデーモンをスタートアップに追加する

systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service

ステータスの確認

networkctl -a
networkctl status eno1

sshdの設定

とりあえず内部ネットワーク用にゆるく設定しとく

vim /etc/ssh/sshd_config
  PermitRootLogin yes         # rootログイン
  UsePAM yes
  PasswordAuthentication yes  # パスワードログイン許可
  RSAAuthentication no        # ssh v1 不可
  PubkeyAuthentication yes    # ssh v2 許可

sshd 有効化

systemctl enable sshd
    Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib64/systemd/system/sshd.service.

rootのパスワードの設定

passwd

必要なパッケージをインストールする

ファイルシステムに btrfs を利用している場合は専用パッケージが必要

emerge -avt sys-fs/btrfs-progs

マイクロコードのアップデート

emerge -avt sys-kernel/linux-firmware

ブート設定

bootctl --path=/boot install
    Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/systemd/systemd-bootx64.efi".
    Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/Boot/BOOTX64.EFI".
    Created EFI boot entry "Linux Boot Manager".

efibootmgr のインストール

emerge -avt sys-boot/efibootmgr

エントリの確認

efibootmgr -v

uefi 変数がカーネルでサポートされていて正しく動作していることを確認する

efivar -l

ブートローダ(grub, systemd-boot)を使わずに UEFI に直接カーネルを読ませるエントリを追加する

NEWVMLINUZ=$(ls -lt /boot|awk '/vmlinuz/{print $NF}'|head -1)
VERSION=$(echo $NEWVMLINUZ|awk 'BEGIN{FS="-"}{print $2}')
PARTUUID=$(blkid -s PARTUUID -o value /dev/sda2)
efibootmgr -d /dev/sda -p 1 -c -L "Gentoo ${VERSION}/GNU Linux" -l /${NEWVMLINUZ} -u "root=PARTUUID=${PARTUUID} rw reboot=warm"
# systemd の USE フラグに sysv-utils を使っている場合 はカーネルパラメータに init=/usr/lib/systemd/systemd reboot=warm" は不要

注釈

efibootmgr のその他使い方

ブート順の設定例 ::

    efibootmgr -o 0007,0004,0000,0002,000A,0001,0003,0008,0009,0005,0006

UEFI エントリ削除 ::

    efibootmgr -b 0007 -B

システムの再起動

再起動をするが、再起動する前にchrootを抜けmountした領域を外す必要がある

exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount /mnt/gentoo{/boot,/sys,/proc,}

再起動を実施する

reboot

注釈

再起動後に問題があった場合 SystemRescueCd で chroot する所までのコマンド

mount /dev/sda2 /mnt/gentoo
mkdir -p /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot
mount -t proc none /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
cd /mnt/gentoo && chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile && export PS1="(chroot) $PS1"

名前解決の設定

/etc/resolv.conf をインターフェース設定で生成される resolv.conf のシンボリックリンクにする

rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

ホスト名の設定

# hostnamectl set-hostname <HOSTNAME>
# /etc/hostname に書き込まれる
# FQDNは使わない。FQDNはhostsに書く
# 例
hostnamectl set-hostname afxw

# 確認
hostnamectl

ロケールの設定

ロケールの指定

# 使用可能なロケール一覧を確認する
localectl list-locales
# ja_JP.utf8 を指定
localectl set-locale LANG=ja_JP.utf8

キー配列の指定

localectl set-keymap jp106

確認

localectl

時刻の設定

タイムゾーンを Tokyo にする

timedatectl set-timezone Asia/Tokyo

Tokyo になった事を確認。また、RTC(hwclock)が UTC と同じ時刻である事を確認

timedatectl status

時刻同期の設定

systemd-timesyncd を有効にする。インターフェース設定に記述したものが使われる。

systemctl start systemd-timesyncd.service
systemctl status systemd-timesyncd.service
systemctl enable systemd-timesyncd.service

# 時刻の確認
timedatectl status
date

デフォルトエディタの設定

profile を編集する

vim /etc/profile

  EDITOR=/usr/bin/vim
  export EDITOR=${EDITOR:-/bin/nano} # この行の上に追加

ドットコマンドで profile を読み込む

. /etc/profile

sudoの設定

echo "app-admin/sudo -sendmail" >> /etc/portage/package.use/sudo
emerge -avt app-admin/sudo

visudo
  %wheel ALL=(ALL) ALL

その他パッケージインストール

システムユーティリティ一括インストール

echo "app-misc/tmux vim-syntax" > /etc/portage/package.use/tmux
emerge -avt app-portage/gentoolkit net-dns/bind-tools sys-apps/dstat app-portage/pfl sys-apps/gptfdisk sys-apps/the_silver_searcher app-portage/eix app-shells/zsh dev-vcs/rcs app-misc/tmux

eix のインデックス作成

eix-update

設定完了後の確認

リブート

systemctl reboot

インストールしたパッケージの確認

eix -cI --selected

スタートアップの確認

systemctl list-unit-files|grep enabled

eix-sync の定期実行

eix-sync を実行するユニット eixsync.service を作成する

vim /etc/systemd/system/eixsync.service

    [Unit]
    Description=execute eix-sync

    [Service]
    Type=simple
    ExecStart=/usr/bin/eix-sync
    RemainAfterExit=no

eixsync.service が正常に実行できる事を確認する

# 実行
systemctl start eixsync.service

# ログの確認
systemctl status eixsync.service
journalctl -f -u eixsync

timer ユニットを作成する

vim /etc/systemd/system/eixsync.timer

    # 毎朝 9 時に eixsync.service を実行する
    [Unit]
    Description=execute eix-sync

    [Timer]
    OnCalendar=*-*-* 9:30:00
    Unit=eixsync.service

    [Install]
    WantedBy=multi-user.target

eixsync.timer を有効にする

systemctl daemon-reload
systemctl start eixsync.timer
systemctl status eixsync.timer
systemctl enable eixsync.timer

timer ユニット一覧を確認する

systemctl list-unit-files -t timer
systemctl list-timers

SSD の場合に実施する設定

fstrim コマンドを定期的に実行する

systemctl start fstrim.timer
systemctl status fstrim.timer
systemctl enable fstrim.timer

# timer ユニット一覧の確認
systemctl list-unit-files -t timer