写在前面

细细算来, 使用 linux 已经 7,8 年了, 从最早的 ubuntu, deepin 开始, 到最后的 archlinux, 算是打造了自己的系统. 但是 ubuntu, deepin 可定制性比较差, archlinux 更新大量包时容易挂掉, 都不算是心目中最理想的系统.

gentoo 在最开始用 linux 系统的时候就知道了, 当时有一段时间也尝试给笔记本安装 gentoo, 但是由于当时时间有限, 折腾了一周没有安装好, 就放弃了, 之后一直用 archlinux. 以后准备从事 NPL 和知识图谱方面的工作, 最近配了一台深度学习机, 从头开始安装 gentoo 系统, 进行个人配置, 共撰写三篇博客记录 gentoo 折腾过程, 这篇博客主要记录 gentoo 系统安装和配置过程, 后续还有软件安装配置和 gentoo 学习体会.

安装gentoo xfce4版本, 再安装xmonad桌面.

制作安装媒介

启用使用 UEFI 安装, 因此下载 liveDVD, 参照选择正确的安装媒介1, 这里需要注意两点:

  1. 在 windows 下制作 linux UEFI, 用 Rufus U 盘工具2, linux下直接用dd即可
  2. gentoo liveDVD 默认登录密码是: gentoo, 登录后, 在终端调输入 sudo su - 或者 sudo -i 来获取所需权限.
  3. 选取合适的媒介进行可启动U盘的制作, 很重要, 可以选用Admin CD进行制作, UEFI不支 持UEFI, 故选用CD
  4. ifconfig 选择网科, 无线网卡和有限网卡, net-setup eht0, 进行网卡选择

磁盘分区

选用 parted 进行分区, 默认选用 GPT 分区表

按照下表格进行分区

Table 1: 磁盘分区表

分区 文件系统 大小
/dev/sdb1 (bootloader) 200M
/dev/sdb2 fat32 1024M
/dev/sdb3 swap 32G
/dev/sdb4 ext4 200G
/deb/sda1 ext4 2T

这里注意:

  1. 使用 UEFI 进行引导的分区, 需格式化成 fat32.
  2. parted -l 查看所有的硬盘
  3. parted 操作
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
parted -a optimal /dev/sada
mklabel gpt
unit mib
mkpart primary 1 20
mkpart primary 20 1226
mkpart primary 1226 -8GiB
mkpart primary -8GiB 100%
name 1 grub
name 2 boot
name 3 rootfs
name 4 swap
set 1 bios_grub on
set 2 boot on
print

# 格式化
mkfs.fat -F 32 /dev/sda2
mkfs.ext4 /dev/sda3
mkswap /dev/sda4
swapon /dev/sda4
# mkfs.btrfs /dev/sda1/

安装 stage3

使用有线网进行安装, liveDVD 进入后, 网络可以直接连接

使用无线网卡, 用net-setup进行配置(ifconfig可以查看网卡)

用 USB 2.0 端口启动 U 盘进行安装, 3.0 不能进入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 获取管理员权限, liveDVD版本
sudo -i

# 挂载 root 分区
mount /dev/sda3 /mnt/gentoo

# 切换到 gentoo 目录
cd /mnt/gentoo

# 选择合适的 stage3 镜像, 获取地址并下载 https://www.gentoo.org/downloads/
wget <URL>
# use links
links https://www.gentoo.org/downloads/mirrors/

# 解压下载文件
tar xvjpf stage3-*.tar.{bz2,xz} --xattrs-include='*.*' --numeric-owner

安装基础系统

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
# 选择镜像, 选择中国 163 源
cd
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

# 创建 Gentoo ebuild 仓库, 复制 DNS 信息
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
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

# 挂载必要的文件系统
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

# 进入新环境, 并关在 boot 分区
chroot /mnt/gentoo /bin/bash && source /etc/profile && export PS1="(chroot) $PS1"
mkdir /boot
mount /dev/sdb2 /boot

# 更新 Portage ebuild 数据库, emerge-webrsync 更新最近 24 小时的, 节省带宽, emrege-sync 更新 1h 的
emrege-webrsync
emerge --sync

# 安装vim,用于后面修改文件
emerge --ask vim


# 修改编译选项, 为后续安装 gnome, 修改 USE 选项如下
cp /usr/share/protage/config/make.conf.example ./
vimdiff /etc/portage/make.conf make.conf.sample

# 编译选项
MAKEOPTS="-j9" # CPU核数+1
COMMON_FLAGS="-march=skylake -O2 -pipe" # CPU型号选择
COMMON_FLAGS="-march=native -mtune=native -O2 -pipe" # 常规选择
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
ACCEPT_KEYWORDS="amd64"

# 显卡
VIDOE_CARDS="intel"  # 笔记本
VIDEO_CARDS="intel i965 nvidia" # 双显卡
VIDEO_CARDS="vmware vesa" # 虚拟机

# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"

# license
ACCEPT_LICENSE="*"

# Language
L10N="en_US zh_CN en zh"
LINGUAS="en_US zh_CN en zh"

# 输入
INPUT_DEVICES="libinput syanptics"

# USE, consolekit多账户配置用
USE="-qt4 -qt5 -kde X gtk systemd cjk networkmanager alsa pulseaudio infinality"

# python版本和efi
PYTHON_TARGETS="python2_7 python3_6"
PYTHON_SINGLE_TARGET="python3_6"
GRUB_PLATFORMS="efi-64"

# 更新源地址
GENTOO_MIRRORS="https://mirrors.163.com/gentoo/ http://gentoo.aditsu.net:8000/ rsync://ftp:iij.ad.jp/pub/linux/gentoo http://gentoo.cs.utah.edu/ http://ftp.twaren.net/Linux/Gentoo/ ftp://ftp.twaren.net/Linux/Gentoo/ ftp://ftp.gtlib.gatech.edu/pub/gentoo http://www.gtlib.gatech.edu/pub/gentoo http://mirror.lug.udel.edu/pub/gentoo/"

# 可以通过 eselect news list/read 查看 rsync 的消息

# 通过 eselect profile list/set 选择 profile,选择最近稳定版的 17.1/desktop/plasma/systemd, 选择 17.1/desktop
eselect profile list
eselect profile set 20
# 更新时区
ls /usr/share/zoneinfo
echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data
# 如果上述时间不合适, 用ntpdate同步
sudo emerge --ask intall net-misc/ntp
sudo ntpdate -u ntp.api.bz # 默认是上海服务器 上海复旦-ntp.fudan.edu.cn

# 配置地区
nano -w /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN.GB2312 GB2312
zh_TW.UTF-8 UTF-8

locale-gen
eselect locale list
eselect locale set 2

# 重新加载环境
env-update && source /etc/profile && export PS1="(chroot)$PS1"

# 更新@world
emerge --ask --update --deep --newuse @world
emerge --ask --update --deep --changed-use @world
etc-update --automode -3

配置内核与系统

选用自动配置方法

配置内核时, 选择编译网卡和UEFI的部分, 这部分以后学习后单独写一篇文章.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 配置文件系统信息
vim /etc/fstab
/dev/sda2	/boot   vfat    defaults,noatime        0 2
/dev/sda3	/	ext4    noatime,defaults,discard        0 1
/dev/sda4	none    swap    sw              0 0
# /dev/sda1	/media/data     ext4    noatime,rw	0 2

/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0

# 安装内核,固件,网络和dosfstools
emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel sys-kernel/linux-firmware  sys-fs/dosfstools

# 配置内核
genkernel --menuconfig all

-systemd 支持
Gentoo Linux support -->
  Support for init systems, system and service managers -->
    [*]systemd

# - 内核:启用devtmpfs支持, 内在支持
# 作用:用来挂载/dev,以便在启动过程中使用关键设备文件
# Device Drivers --->
#   Generic Driver Options --->
#     [*] Maintain a devtmpfs filesystem to mount at /dev
#     [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
# - 内核: 启用SCSI磁盘支持, 内在支持
# Device Drivers --->
#    SCSI device support  --->
#       <*> SCSI disk support
- 内核: 选择必要的文件系统
建议常用的文件系统格式都选择上,免得用的时候抓瞎
File systems --->
  <*> Second extended fs support
  <*> The Extended 3 (ext3) filesystem
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  <*> Btrfs filesystem support
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support
# - 内核: 激活SMP支持, 默认支持
# 作用:用于支持多内核存在,用来在多个内核间进行切换
# Processor type and features  --->
#   [*] Symmetric multi-processing support
#  - 内核: 启用输入设备的USB支持
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    <*>     OHCI HCD (USB 1.1) support

# - 内核: 选择处理器类型和特点, 一般不用选择
# Processor type and features  --->
#    [ ] Machine Check / overheating reporting
#    [ ]   Intel MCE Features
#    [ ]   AMD MCE Features
#    Processor family (AMD-Opteron/Athlon64)  --->
#       ( ) Opteron/Athlon64/Hammer/K8
#       ( ) Intel P4 / older Netburst based Xeon
#       ( ) Core 2/newer Xeon
#       ( ) Intel Atom
#       ( ) Generic-x86-64
# - 内核: 启用对GPT的支持(用于支持GPT分区)
# -*- Enable the block layer --->
#    Partition Types --->
#       [*] Advanced partition selection
#       [*] EFI GUID Partition support
- 内核: 启用对UEFI方式引导系统的支持
注:如果不启用,则系统不能通过UEFI方式引导
Processor type and features  --->
    [*] EFI runtime service support
    [*]   EFI stub support
    [*]     EFI mixed-mode support
Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs

# 查看编译内核
ls /boot/kernel* /boot/initramfs*

# 配置主机名
nano -w /etc/conf.d/hostname
hostname="lengyue_gentoo_vm"

vim  /etc/hosts
127.0.0.1 gentoo.vm gentoo_lengyue_vm localhost   #这定义了当前系统并且必须设置

配置引导工具和添加账户

可以用usermod -a -G lpadmin lengyue 将lengyue加入到某一个gourp中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 安装 grub2 引导工具
# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf # 之前已经加入
emerge --ask sys-boot/grub app-admin/sudo
mount -o remount,rw /sys/firmware/efi/efivars
grub-install --target=x86_64-efi --efi-directory=/boot

# 配置 grub2
grub-mkconfig -o /boot/grub/grub.cfg

# 设置管理员账户密码, 添加账户 lengyue 并设置密码
passwd
useradd -m -G users,wheel,audio,video,cdrom,portage,lp,lpadmin -s /bin/bash lengyue
passwd lengyue

chmod 644 /etc/sudes
echo "lengyue ALL=ALL) ALL" >> /etc/sudoes

Xorg 安装与配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 安装 startx
vim /etc/sudoers

emerge --ask --verbose x11-base/xorg-drivers x11-base/xorg-server x11-terms/xterm net-misc/networkmanager

# 更新环境
env-update && source /etc/profile

# 网卡管理启动
systemctl enable NetworkManager

重启系统并安装桌面系统

  • 按照上述配置, 没有问题可以登录xorg系统了, 并且有 lengyue 账户, 可以上网了
1
2
3
4
5
6
7
8
9
# 退出系统并重现登录
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot

# 登录系统, 如有问题再调试
startx
  • xfce4配置安装配置
1
2
3
4
sudo emerge --ask x11-misc/sddm x11-misc/lightdm xfce-base/xfce4-meta xfce-extra/xfce4-notifyd x11-terms/xfce4-terminal

# sddm目前有bug, 暂时用lightdm
systemctl enable lightdm
  • Xmonad安装
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 安装eix和layman
sudo emerge --ask app-portage/eix app-portage/layman dev-vcs/git app-portage/gentoolkit

# layman 安装 rdnetto-overlay->stack-bin, 暂时不用  4nykey->megasync three->powline-fonts
sudo layman -a 4nykey haskell gentoo-zh genthree

sudo layman -S # layman 更新数据库
sudo eix-update # 更新eix数据库


# 配置dotfiles
git clone dotfiles_path .dotfiles
cd .dotfiles
./install.sh
sudo cp xmonad.desktop /usr/share/xsessions/

# 配置dotfils gentoo config
# 1. 加入accept_keywords
vim gentoo_config/gentoo_lengyue_package.accept_keywords
=x11-wm/xmonad-0.15
=x11-wm/xmonad-contrib-0.15
=dev-haskell/cabal-2.4.0.1
=dev-haskell/cabal-install-2.4.0.0-r2
=x11-misc/xmobar-0.30
# 安装xmobar需要加入
dev-haskell/parser-numbers
dev-haskell/alsa-mixer
# 安装cabal需要加入

# compton
x11-misc/picom

# 2. 配置package_use
vim gentoo_config/gentoo_lengyue_package.use
>=app-text/texlive-2017 cjk png truetype xml context detex dvi2tty epspdf extra games graphics humanities jadetex luatex metapost music pdfannotextractor pstricks publishers science tex4ht texi2html xetex xindy zh en
>=x11-misc/xmobar-0.24 xft
>app-editors/emacs-25 xft xwidgets imagemagick sound gconf gsettings
>=media-libs/libsdl2-2.0.8-r2 gles
media-video/vlc gnutls live lua matroska rtsp theora upnp vcdx voribs vpx qt5
>=x11-misc/rofi-1.5.1 test windowmode
>=net-fs/samba-4.5.16 client
net-mail/mu emacs
app-misc/tmux vim-syntax
x11-drivers/nvidia-drivers compat
dev-lang/php gd
media-fonts/source-han-sans l10n_zh-CN l10n_zh-HK l10n_zh-TW

# 3. 将文件cp到对应位置
sudo cp gentoo_lengyue_package.use /etc/portage/package.use/lengyue_use
sudo cp gentoo_lengyue_package.accept_keywords /etc/portage/package.accept_keywords

# 安装xmoand, cabal-install
sudo emerge --ask x11-wm/xmonad x11-wm/xmond-contrib dev-haskell/cabal-install

# 安转xmobar,pandoc
cabal install pandoc-citeproc
sudo emerge --ask wireless-tools # iwlib xmobar 无线模块需要
cabal install
cabal install xmobar --flags="all_extensions" --force-reinstalls

# 安装xmonad相关软件, alsamixer 在 alsa-utils 被 xfce4-power-manager需要, 故不安装alasmixer-app
sudo emerge --ask x11-misc/arandr media-gfx/feh x11-misc/picom x11-apps/xsetroot x11-misc/stalonetray app-i18n/ibus-rime x11-misc/xscreensaver gnome-extra/nm-applet media-sound/pulseaudio xfce4-extra/xfce4-power-manager media-gfx/scrot x11-misc/rofi

# 更新系统和package
emerge --ask --update --deep --newuse @world
emerge --ask --update --deep --changed-use @world
emerge -uDU --keep-going --with-bdeps=y @world


# 重启,直接进入xmonad