安装前的准备

不建议没有使用过Linux系统的朋友直接使用gentoo。先用用Ubuntu、LinuxMint、Manjaro这些新手友好的系统熟练一下Linux。一个最简单的方法,租个vps,照着网上教程敲敲命令,搭个梯子(别用一键脚本)建个网站什么的,敲多了就有感觉了。也可以直接在自己的电脑上或者虚拟机上安装练习。推荐《鸟哥的Linux私房菜》这本书,虽然贵了点,但绝对物有所值,能当工具书用。等熟悉了Linux的基本命令之后,可以试试安装ArchLinux,之后再玩Gentoo吧。

安装Gentoo,最好准备几部电影,或者一本小说,或者别的用来打发时间的。编译速度还是很慢的。不过该安的安好了之后用起来就很舒服了。同时要学会自己查官方wiki,本文可能有些地方的不够清楚(欢迎留言指出),但wiki是没问题的。本文大部分内容可以直接复制,个别需要自己设置的地方【会指出】。本文命令全部使用【root】用户执行。

首先,如果想要安装win10+gentoo双系统,先右键开始菜单,磁盘工具,压缩卷,给gentoo留出一定的空间。我看windows自带的分区太多,直接把恢复分区和保留分区删了(用diskgenius),省的看着罗嗦。——补充,后来直接把Windows分区删了,打算在虚拟机中安Win系统。要不是使用“必备的垃圾软件”,像TIM(有没有注意到“管理电脑文件功能”?!这尼玛算不算严重侵犯个人隐私啊?!)这种的,谁愿意用Win啊。

然后制作gentoo启动盘。可以用官方的(无图形界面),也可以使用ubuntu,能边看本教程边安装。(其实理论上任何linux的安装盘都能用来安装gentoo)建议如果有两台电脑的朋友使用官方最小安装盘,乌班图没有mkfs.f2fs工具。不用f2fs系统就无所谓了。

使用启动盘引导系统启动,插网线。(用wifi简直是自己找刺激。。。Gentoo可没有arch的wifi-menu。。。而且如果你是博通网卡那就更难受了。。。博主之前折腾黑苹果换了个BCM94352网卡,Linux下那叫一个坑。。。)

(可选)使用gentoo最小安装CD的,可以使用别的电脑通过ssh来辅助安装,便于复制命令。具体操作如下:

  • 在目标机上 passwd 设置密码
  • 在目标机上 /etc/init.d/sshd start 开启sshd服务
  • 在目标机上ifconfig查看ip
  • 在辅助机上安装putty(windows)或者直接 “ssh [email protected]目标机ip”(mac/linux)

磁盘分区

我们需要给gentoo系统分区。笔者分这三个区:

  • efi分区(与Win共用),用于引导,可以和windows共用,可以是fat32格式;
  • rootfs分区,用于挂载根目录,固态硬盘建议使用f2fs,机械硬盘建议使用ext4格式;
  • swap分区,虚拟内存。

分区使用parted工具,【假设】已有sda1——efi,sda2——windows,将要分区sda3——swap和sda4——rootfs。X指的是print显示出来的windows分区结束位置,Y指swap分区结束位置(X+你内存大小)。使用parted分区之后再给sda3、sda4格式化,使用方法如下:

【谨慎!操作失误会导致数据丢失!】

parted -a optimal /dev/sda
unit mib
print
mkpart primary X Y
name 3 swap
mkpart primary Y -1
name 4 rootfs
print
quit

mkfs.f2fs /dev/sda4 #可换成mkfs.ext4
mkswap /dev/sda3

如果清除硬盘所有内容装单系统,可以这样:

parted -a optimal /dev/sda
mklabel gpt
unit mib
print
mkpart primary 1 200
name 1 boot
set 1 boot on
mkpart primary 200 4297
name 2 swap
mkpart primary 4297 -1
name 3 rootfs
print
quit

mkfs.vfat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.f2fs /dev/sda3

ext4格式是主流的linux文件系统,f2fs是针对闪存有优化的文件系统,据说华为手机现在用的就是这个文件系统。个人感觉Linux系统的权限真是棒极了!他们都比fat32、exfat系统牛逼多了,这俩Windows的文件系统最要命的是没有权限设置,只要是exe文件,甚至其他文件(图片?音乐?)都能执行,这也就给了病毒和流氓软件可乘之机(说的就是那些xx全家桶软件)。虽然ntfs也有权限,但他那个权限。。。真是看不懂。。。而linux的权限,主要就是读、写、执行,即使下载了带病毒的东西,没有可执行权限照样没治。

下载、解压stage3包,更新@world

闲话少说,咱们继续安装。下面咱们挂载系统,安装stage3包。个人理解stage3就是一个最小化可以运行的没有内核的系统。自行根据你的实际情况替换黑体字

mkdir -v /mnt/gentoo      #使用gentoo最小光盘安装的跳过这一步
mount -v /dev/sda4 /mnt/gentoo
cd /mnt/gentoo
wget https://mirrors4.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-20190223.tar.bz2
#下载stage3-amd64-时间-tar.xz,下载完q退出

tar vxpf stage3-* --xattrs-include='.*' --numeric-owner #解压stage3

下一步,编辑make.conf。【别全抄我的,看清楚自己的情况】

  • CFLAGE的haswell是四代intel core cpu 的架构,别的cpu自己查
  • CPU_FLAGS、CHOST在刚刚的地方也可以查。
  • MAKEOPTS=”j9″的9,是自己cpu线程数+1。我是八核,所以j9。(j8也行,就是有点难听。)
  • VIDEOCARS是显卡,现在咱们先不安桌面,回头再说。
  • GENTOO_MIRRORS是镜像源自己选,感觉清华、中科大都挺快的。
  • L10N语言选中文英文。
nano /mnt/gentoo/etc/portage/make.conf

CFLAGS="-march=haswell -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
MAKEOPTS="-j9 --load-average=8"
VIDEO_CARDS="intel i965"
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo/"
#GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
L10N="en_US en zh zh_CN"
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"
LC_MESSAGES=C
ACCEPT_LICENSE="*"
#ACCEPT_KEYWORDS="~amd64"
EMERGE_DEFAULT_OPTS="-v -j9 --keep-going --with-bdeps=y --load-average=8"

再配置portage镜像源。

mkdir /mnt/gentoo/etc/portage/repos.conf
nano /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

[gentoo]
location = /usr/portage
sync-type = rsync
sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
auto-sync = yes

复制DNS,挂载需要的磁盘,chroot进入stage3系统。

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
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

test -L /dev/shm && rm /dev/shm && mkdir /dev/shm #非官方最小CD用
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm #非官方最小CD用
chmod 1777 /dev/shm #非官方最小CD用

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
mount /dev/sda1 /boot #自行根据你的实际情况替换黑体字

更新一下镜像源。类似于ubuntu的apt update。然后选择profile。这里我们先选个最小的systemd系统,桌面啥的之后再说。笔者喜欢一步一步进行,这样哪里出现问题比较容易发现。

emerge-webrsync #可省略
emerge --sync
eselect profile list
eselect profile set "default/linux/amd64/17.0/systemd"

emerge一下world。相当于乌班图的apt upgrade。这里由于没有选桌面,所以不会太久。

emerge -auvDN --with-bdeps=y @world

简单设置系统

等待emerge的时候,可以进另一个终端,做下面的操作。配置时区、本地化、写fstab。

echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eselect locale list
eselect locale set "en_US.utf8" #命令行一定要用英文!!中文可能乱码。
env-update && source /etc/profile && export PS1="(chroot) $PS1"
nano /etc/fstab #【自己注意看清楚分区号,别照抄】

/dev/sda1 /boot vfat defaults 0 0
/dev/sda3 / f2fs defaults 0 0
/dev/sda2 none swap sw 0 0
/dev/sdb1 /home xfs defaults 0 0

安装常用软件(系统日志,计划任务,野包,vim文编编辑器),添加用户,设置密码。

emerge app-admin/sysklogd sys-process/cronie sudo layman vim
visudo
#去掉wheel ALL=(ALL) NOPASSWD: ALL的注释
useradd -m -G users,wheel,portage,usb,video,audio jerry
passwd
passwd jerry

手动配置内核

激动人心的时刻到了,手动配置内核!先下载内核源代码,官方推荐使用gentoo-source,然后进入源代码目录,进行设置。详细的设置可以看金步国的文章。这里我只说说简单的配置。

本段感谢百度贴吧用户@a126285补充:由于用了efi stub,那么往往是不带initramfs启动的(带的话,要么配置efivar,要么内核内置initramfs,都较繁琐),于是有个要点:内核能正确读取 /lib/modules 之前的所有驱动都需要built-in(不能以module形式存在),大体包含scsi一套、ahci/nvme(或pata/sata,取决于该系统的实际配置)、文件系统驱动。不用efi stub,想免initrd/initramfs的系统,都需要注意这一点:内核能正确读取 /lib/modules 分区之前的所有驱动都需要built-in,不能以module形式存在。

emerge -av gentoo-sources 
#可怕,2018-11-17内核升级到了4.19.2,编译了好几次都崩溃。。。我也要崩溃了。。。
#后来成功了,但是编译后kworker进程cpu占用率过高,尝试解决,未果。。。
#最新内核可能会导致kworker进程cpu占用率高,解决方法是拆下硬盘光驱托架,找到一个小开关,打开它。
cd /usr/src/linux
make menuconfig

设置systemd:

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

设置stub kernel(用于直接efi引导,而不使用grub等引导器):

Processor type and features  --->
[*] EFI runtime service support
[*] EFI stub support
[ ] EFI mixed-mode support
... ...
[*] Built-in kernel command line
(root=/dev/sda4 init=/lib/systemd/systemd)
#不用systemd的话不要加init这一句。root这句也可以用partuuid,详见wiki。

设置文件系统,像我这样使用f2fs系统的,记得在FileSystem里面勾选上。它默认勾选了ext4。

File systems --->
<*> F2FS filesystem support

现在就先设置这些。显卡网卡声卡乱七八糟的以后再设。设置完毕后保存退出,开始编译,之后安装模块和内核。

make -j9
make modules_install install

这里也提供一个我写好的配置文件,stub kernel,systemd,root=/dev/sda3(因为后来我彻底不用windows系统了),Intel网卡,alc255声卡,算是比较简洁了。

cd /usr/src/linux
wget https://raw.githubusercontent.com/Jerry-T-Ding/myconfig/master/kernel-config-Intel-WirelessCard
cp .config .config.bak
mv kernel-config .config
make menuconfig

make -j9
make install modules_install

引导设置,运气好可跳过

内核本身自带引导功能,看wiki上说需要把内核复制到EFI文件夹下,但我发现并不用复制也能引导,或许是和主板型号有关?如果引导不起来再试试下面的命令吧。使用grub等引导器请查看官方wiki。

mkdir -p /boot/EFI/gentoo
cp /boot/vm* /boot/EFI/gentoo/bootx64.efi

不使用efibootmgr的话需要自行在bios界面添加引导,具体方法与主板有关,有些主板可能不支持。

我也没用使用efibootmgr,直接在bios添加的引导项。使用efibootmgr的方法也提一下吧,粗体字记得改成自己的:

emerge -av efibootmgr
efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\gentoo\bootx64.efi"

安装网络管理器,重启电脑

重启之前咱们先安上networkmanager,要不然不能上网多尴尬啊。之后就可以退出chroot环境重启电脑了。

emerge -av networkmanager

如果报错,说什么USE不对,就输入以下命令:

emerge -av networkmanager --autounmask-write
etc-update
-3 y
emerge -av networkmanager

以后出现类似错误都这么解决,加–autounmask-write并etc-update后重试,后面不在赘述。添加开机服务之后咱们就可以重启到新系统了。

systemctl enable NetworkManager
systemctl enable sshd #可选,默认禁止root通过ssh登录,安全起见不改了,改的话修改/etc/ssh/sshd_config,把permit root loging 去掉注释并改成yes
reboot

笔者踩过的坑

如果无法引导,用启动盘引导并chroot,检查以下内容:(都是我踩过的坑啊)

  • fstab有错吗
  • 如果用的非ext4系统,记得在内核加入该系统的支持。在内核配置界面的File Syatem里面找到你的文件系统,例如我的f2fs。
  • 检查stub kernel有没有勾选
  • 检查Built-in kernel command line有没有写对
  • 总而言之,具体还是看kernel panic时的报错信息,再对照我说的这几点看看。也可能有我没遇到过的别的问题,不过自己学习自己探索岂不正是linux的乐趣所在。

systemd设置

重启之后,设置时区,地区,机器码(我也不知道是啥东东),建立一个防bug的软链接。

timedatectl set-timezone Asia/Shanghai
hostnamectl set-hostname gentoo
systemd-machine-id-setup
ln -sf /proc/self/mounts /etc/mtab

至此,gentoo系统安装完成。桌面环境及应用软件请看本系列的后续部分。

补充:NetworkManager用法

插网线自己就连了,不需要任何设置。

搜索并连接wifi(粗体字自行替换):

nmcli device wifi rescan
nmcli device wifi list
nmcli device wifi connect 无线网essid password 密码

不好使?可能你无线网卡需要手动安装驱动。ifconfig -a 看看识别到你的无线网卡没有。

4 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *