跳转至

安装 Gentoo Linux CLI

文档时效性说明

本文为早期笔记,可能存在版本过时、命令失效、链接失效、最佳实践变化等问题。请以官方最新文档为准。

原英文标题:Install Gentoo Linux CLI

1. 分区磁盘

printf "g\nn\n1\n\n+256M\nt\nuefi\nn\n2\n\n+4G\nt\n2\nswap\nn\n3\n\n\nt\n3\nlinux\np\nw\n" | fdisk /dev/sda
sync
1
2
3
mkfs.vfat -F 32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 -F /dev/sda3

2. 挂载文件系统

1
2
3
swapon /dev/sda2
mkdir -p /mnt/gentoo
mount /dev/sda3 /mnt/gentoo/

3. 下载并解压 stage3 tarball

1
2
3
4
ntpd -q -g
cd /mnt/gentoo
wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20211010T170540Z/stage3-amd64-openrc-20211010T170540Z.tar.xz
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

4. 配置编译选项

sed -i 's/COMMON_FLAGS="-O2 -pipe"/COMMON_FLAGS="-march=x86-64 -O2 -pipe"/' /mnt/gentoo/etc/portage/make.conf
echo MAKEOPTS="\"-j$(nproc)\"" >> /mnt/gentoo/etc/portage/make.conf

5. 设置 Gentoo 镜像

echo 'GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"' >> /mnt/gentoo/etc/portage/make.conf

6. 配置 eBuild 仓库

1
2
3
mkdir --parents /mnt/gentoo/etc/portage/repos.conf
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
sed -i 's/sync-uri = rsync:\/\/rsync.gentoo.org\/gentoo-portage/sync-uri = rsync:\/\/mirrors.tuna.tsinghua.edu.cn\/gentoo-portage/' /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

7. 复制 DNS 信息

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

8. 挂载必要的文件系统

1
2
3
4
5
6
7
mount --types 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
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run

9. 进入新环境

chroot /mnt/gentoo /bin/bash
source /etc/profile

10. 挂载 boot 分区

mount /dev/sda1 /boot

11. 从网络安装 Gentoo ebuild 仓库快照

emerge-webrsync
emerge --sync

12. 选择正确的 profile

eeselect profile list
eeselect profile set 1

13. 更新 @world 集合

emerge --verbose --update --deep --newuse @world

14. 接受所有许可

echo "ACCEPT_LICENSE=\"*\"" >> /etc/portage/make.conf

15. 时区

echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data

16. 配置 locales

1
2
3
4
5
6
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eeselect locale list
eeselect locale set 5
env-update && source /etc/profile

17. 安装内核源码

1
2
3
4
emerge sys-kernel/gentoo-sources
eeselect kernel list
eeselect kernel set 1
ls -l /usr/src/linux

18. 内核配置和编译

1
2
3
4
5
6
emerge sys-kernel/genkernel
echo "/dev/sda1 /boot   vfat    defaults    0 2" >> /etc/fstab
genkernel all
ls /boot/vmlinu* /boot/initramfs*
echo "/dev/sda2 swap    swap    defaults    0 0" >> /etc/fstab
echo "/dev/sda3 /   ext4    defaults    0 0" >> /etc/fstab

19. 主机和域名信息

1
2
3
4
5
6
7
8
echo "hostname=\"hxp-server\"" > /etc/conf.d/hostname
echo "dns_domain_lo=\"homenetwork\"" > /etc/conf.d/net
echo "nis_domain_lo=\"my-nisdomain\"" > /etc/conf.d/net
emerge --noreplace net-misc/netifrc
echo "config_enp3s0=\"dhcp\"" > /etc/conf.d/net
cd /etc/init.d
ln -s net.lo net.enp3s0
rc-update add net.enp3s0 default

20. 设置 root 密码

1
2
3
sed -i 's/^password/# password/' /etc/pam.d/system-auth
echo "password  required    pam_unix.so nullok sha512 shadow" >> /etc/pam.d/system-auth
sed -i 's/root:x:/root::/' /etc/passwd

21. 系统日志

emerge app-admin/sysklogd
rc-update add sysklogd default

22. Cron 守护进程

emerge sys-process/cronie
rc-update add cronie default

23. 文件索引

emerge sys-apps/mlocate

24. 远程访问

rc-update add sshd default

25. 文件系统工具

emerge sys-fs/e2fsprogs sys-fs/xfsprogs sys-fs/dosfstools

26. 安装 DHCP 客户端

emerge net-misc/dhcpcd

27. 安装 GRUB2 引导加载器

1
2
3
4
5
6
echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge sys-boot/grub:2
grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg
mkdir /boot/EFI/boot
cp /boot/EFI/gentoo/grubx64.efi /boot/EFI/boot/bootx64.efi

28. 添加日常使用用户

useradd -m -G users,wheel,audio -s /bin/bash hxp
sed -i 's/hxp:x:/hxp::/' /etc/passwd

29. 重启系统

1
2
3
4
5
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot

30. 原文(English)

---
tags:
  - Gentoo
  - Linux
---

# Install Gentoo Linux CLI


!!! warning "文档时效性说明"
    本文为早期笔记,可能存在版本过时、命令失效、链接失效、最佳实践变化等问题。请以官方最新文档为准。

## Partitioning disk

```bash
printf "g\nn\n1\n\n+256M\nt\nuefi\nn\n2\n\n+4G\nt\n2\nswap\nn\n3\n\n\nt\n3\nlinux\np\nw\n" | fdisk /dev/sda
sync
1
2
3
mkfs.vfat -F 32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 -F /dev/sda3

Mount filesystem

1
2
3
swapon /dev/sda2
mkdir -p /mnt/gentoo
mount /dev/sda3 /mnt/gentoo/

Download and unpack tarball

1
2
3
4
ntpd -q -g
cd /mnt/gentoo
wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20211010T170540Z/stage3-amd64-openrc-20211010T170540Z.tar.xz
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

Configuring compile options

sed -i 's/COMMON_FLAGS="-O2 -pipe"/COMMON_FLAGS="-march=x86-64 -O2 -pipe"/' /mnt/gentoo/etc/portage/make.conf
echo MAKEOPTS="\"-j$(nproc)\"" >> /mnt/gentoo/etc/portage/make.conf

Set Gentoo mirror

echo 'GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"' >> /mnt/gentoo/etc/portage/make.conf

Configure eBuild repository

1
2
3
mkdir --parents /mnt/gentoo/etc/portage/repos.conf
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
sed -i 's/sync-uri = rsync:\/\/rsync.gentoo.org\/gentoo-portage/sync-uri = rsync:\/\/mirrors.tuna.tsinghua.edu.cn\/gentoo-portage/' /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

Copy DNS info

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

Mount necessary filesystems

1
2
3
4
5
6
7
mount --types 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
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run

Entering the new environment

chroot /mnt/gentoo /bin/bash
source /etc/profile

Mounting the boot partition

mount /dev/sda1 /boot

Installing a Gentoo ebuild repository snapshot from the web

emerge-webrsync
emerge --sync

Choosing the right profile

eeselect profile list
eeselect profile set 1

Updating the @world set

emerge --verbose --update --deep --newuse @world

Accept all license

echo "ACCEPT_LICENSE=\"*\"" >> /etc/portage/make.conf

Timezone

echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data

Configure locales

1
2
3
4
5
6
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eeselect locale list
eeselect locale set 5
env-update && source /etc/profile

Installing the sources

1
2
3
4
emerge sys-kernel/gentoo-sources
eeselect kernel list
eeselect kernel set 1
ls -l /usr/src/linux

Kernel configuration and compilation

1
2
3
4
5
6
emerge sys-kernel/genkernel
echo "/dev/sda1 /boot   vfat    defaults    0 2" >> /etc/fstab
genkernel all
ls /boot/vmlinu* /boot/initramfs*
echo "/dev/sda2 swap    swap    defaults    0 0" >> /etc/fstab
echo "/dev/sda3 /   ext4    defaults    0 0" >> /etc/fstab

Host and domain information

1
2
3
4
5
6
7
8
echo "hostname=\"hxp-server\"" > /etc/conf.d/hostname
echo "dns_domain_lo=\"homenetwork\"" > /etc/conf.d/net
echo "nis_domain_lo=\"my-nisdomain\"" > /etc/conf.d/net
emerge --noreplace net-misc/netifrc
echo "config_enp3s0=\"dhcp\"" > /etc/conf.d/net
cd /etc/init.d
ln -s net.lo net.enp3s0
rc-update add net.enp3s0 default

Set root password

1
2
3
sed -i 's/^password/# password/' /etc/pam.d/system-auth
echo "password  required    pam_unix.so nullok sha512 shadow" >> /etc/pam.d/system-auth
sed -i 's/root:x:/root::/' /etc/passwd

System logger

emerge app-admin/sysklogd
rc-update add sysklogd default

Cron daemon

emerge sys-process/cronie
rc-update add cronie default

File indexing

emerge sys-apps/mlocate

Remote access

rc-update add sshd default

Filesystem tools

emerge sys-fs/e2fsprogs sys-fs/xfsprogs sys-fs/dosfstools

Installing a DHCP client

emerge net-misc/dhcpcd

Install GRUB2 boot loader

1
2
3
4
5
6
echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge sys-boot/grub:2
grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg
mkdir /boot/EFI/boot
cp /boot/EFI/gentoo/grubx64.efi /boot/EFI/boot/bootx64.efi

Adding a user for daily use

useradd -m -G users,wheel,audio -s /bin/bash hxp
sed -i 's/hxp:x:/hxp::/' /etc/passwd

Rebooting the system

1
2
3
4
5
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot
```