安装带 systemd 的 gentoo

不管是物理机还是虚拟机,首先进入 resuce ,哪个发行版的都行,最好带 systemd,推荐 manjaro

1 分区

BIOS 启动方式建议使用 fdisk ,UEFI 启动建议使用 gdisk

1.1 fdisk

fdisk /dev/sda 进入分区模式
首先 n 新建一个分区,大小至少 20GB ,要不要一个盘一个分区自己把握
建完分区后 w 保存分区
mkfs.ext4 /dev/sda1 格式化根分区

1.2 gdisk

gdisk /dev/sda 进入分区模式
首先 n 新建 boot 分区, 大小16MB, 然后建根分区,大小至少 20GB
建立 boot 的时候提示选择分区类型的时候输入 EF00 , 标示为 EFI System
建完分区后 w 保存分区
mkfs.vfat -F 32 /dev/sda1 格式化 boot 分区
mkfs.ext4 /dev/sda2 格式化根分区

2 挂载分区

2.1 BIOS

mkdir /mnt/gentoo
mount /dev/sda1 /mnt/gentoo
cd /mnt/gentoo
VERSION='20180528'
wget "http://distfiles.gentoo.org/releases/amd64/autobuilds/${VERSION}/systemd/stage3-amd64-systemd-${VERSION}.tar.bz2"
tar xjf "stage3-amd64-systemd-${VERSION}.tar.bz2"

VERSION 版本号自行前往 https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-systemd/ 查看并替换

2.2 UEFI

mkdir /mnt/gentoo
mount /dev/sda2 /mnt/gentoo
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efi
cd /mnt/gentoo
VERSION='20180528'
wget "https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-${VERSION}.tar.bz2"
tar xjf "stage3-amd64-systemd-${VERSION}.tar.bz2"

VERSION 版本号自行前往 https://gentoo.osuosl.org/releases/amd64/autobuilds/current-stage3-amd64-systemd/ 查看并替换

3 chroot

mount -t proc proc /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 /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

4 更新和安装

echo "nameserver 8.8.8.8" > /etc/resolv.conf  # DNS 看鸡子是国内的还是国外的自己改一改
emerge-webrsync

4.1 时区和编码

东八区和英文 UTF-8 编码,好像没什么不对

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
emerge --config sys-libs/timezone-data
eselect locale set en_US.UTF-8
env-update && source /etc/profile && export PS1="(chroot) $PS1"

4.2 多线程编译和优化 CPU 编译

MAKEOPTS=$[`echo \`nproc\``+1]
echo "MAKEOPTS=\"-j${MAKEOPTS}\"" >> /etc/portage/make.conf
emerge app-portage/cpuid2cpuflags
TEMP=`cpuid2cpuflags | awk -F ':' '{print $2}'`
echo "CPU_FLAGS_X86=\"${TEMP}\"" >> /etc/portage/make.conf
emerge -avuDN @world

4.4 安装必要的包

emerge -av sys-kernel/genkernel-next sys-kernel/gentoo-sources logrotate cronie sys-boot/grub:2

# 开机自启动这些包
systemctl enable sshd.service
systemctl enable cronie.service
systemctl enable systemd-networkd.service
systemctl enable systemd-timesyncd.service  # 国内注意修改 /etc/systemd/timesyncd.conf FallbackNTP 为墙内 NTP 服务器


# root 敢死队
sed -i "s@#PermitRootLogin@PermitRootLogin@" /etc/ssh/sshd_config
sed -i "s@PermitRootLogin.*@PermitRootLogin yes@" /etc/ssh/sshd_config
sed -i "s@#PasswordAuthentication@PasswordAuthentication@" /etc/ssh/sshd_config
sed -i "s@PasswordAuthentication no@PasswordAuthentication yes@" /etc/ssh/sshd_config

# 初始化 /etc/machine-id
systemd-machine-id-setup

# 如果有需要的话用 rsyslog 替换 systemd 的 log 处理
emerge -av rsyslog
echo "\$ModLoad imjournal" >> /etc/rsyslog.conf
sed -i "s@#ForwardToSyslog=no@#ForwardToSyslog=yes@" /etc/systemd/journald.conf
systemctl enable rsyslog.service

~~genkernel 和 grub 的配置处理
sed -i 's@#UDEV="yes"@UDEV="yes"@' /etc/genkernel.conf
MAKEOPTS=$[echo \cat /proc/cpuinfo | grep 'processor' | wc -l``+1]
sed -i "s@#MAKEOPTS=.*@MAKEOPTS="-j${MAKEOPTS}"@" /etc/genkernel.conf
sed -i 's@# GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"@GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"@' /etc/default/grub~~

4.5 配置网络

不重命名网卡为 en*
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

cat > /etc/systemd/network/80-dhcp.network <<EOF
[Match]
Name=eth0

[Network]
DHCP=yes
EOF
  • 静态 IPv4 + IPv6
    下面用局域网地址作为演示,杜甫请更换为实际互联网地址
cat > /etc/systemd/network/10-eth0.network <<EOF
[Match]
Name=eth0

[Network]
Address=fe80::20c:29ff:fef9:1/64
Gateway=192.168.1.1
Gateway=fe80::1

[Address]
Address=192.168.1.123
Peer=192.168.1.1/32
EOF

4.6 root 密码

passwd

5 安装内核, grub, fstab, 分配 swapfile

# swapfile 如果 1GB 小了自己增加
dd if=/dev/zero of=/swapfile count=1024 bs=1M
mkswap /swapfile
chmod 600 /swapfile
# 本菜鸡只会用 genkernel ,大佬请绕道
# genkernel 不会编译全部网卡驱动,如果启动后出现没网卡的情况就是这里出问题了
genkernel all --menuconfig --makeopts=-j${MAKEOPTS}

进入内核配置界面选择 Gentoo Linux → Support for init systems, system and service managers
选中 systemdy
官方 WIKI 没写 OPENRC 要不要去掉,我去掉了也没什么神奇的事发生

5.1 BIOS 启动时的 fstab 和 grub

UUID1=`blkid /dev/sda1 | awk '{printf($2)}' | awk -F "[\"\"]" '{print $2}'`
TYPE1=`blkid /dev/sda1 | awk '{printf($3)}' | awk -F "[\"\"]" '{print $2}'`
echo "UUID=${UUID1} / ${TYPE1} defaults 0 1" >> /etc/fstab
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

5.2 UEFI 启动时的 fstab 和 grub

UUID1=`blkid /dev/sda1 | awk '{printf($2)}' | awk -F "[\"\"]" '{print $2}'`
TYPE1=`blkid /dev/sda1 | awk '{printf($3)}' | awk -F "[\"\"]" '{print $2}'`
echo "UUID=${UUID1} /boot/efi ${TYPE1} defaults 0 2" >> /etc/fstab
UUID2=`blkid /dev/sda2 | awk '{printf($2)}' | awk -F "[\"\"]" '{print $2}'`
TYPE2=`blkid /dev/sda2 | awk '{printf($3)}' | awk -F "[\"\"]" '{print $2}'`
echo "UUID=${UUID2} / ${TYPE2} defaults 0 1" >> /etc/fstab
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

grub-install --target=x86_64-efi --efi-directory=/boot/efi
# 如果有只读的错误报出,执行以下
mount -o remount,rw /sys/firmware/efi/efivars

grub-mkconfig -o /boot/grub/grub.cfg

6 退出并重启

exit
reboot

7 启动成功后给鸡起个名

使用 localhost 某些程序会出神奇的问题...

HOSTNAME='这里机器名自己填'
hostnamectl set-hostname ${HOSTNAME}
echo "127.0.0.1 ${HOSTNAME}" >> /etc/hosts
echo "::1 ${HOSTNAME}" >> /etc/hosts