Gentoo
1.0、参考
1.1、Gentoo简介
所属类型:GNU/Linux
base on:独立
创建者:Daniel RobbinsFreeBSD的开发者之一)
所在国家:美国
首次发布:2002
发布模型:滚动发布
包管理器:Portage
cli-Shellbash
init-SoftOpenRCsystemd,安装时可以选择
支持架构:x86_64
桌面环境:CinnamonEnlightenmentGNOMEKDELXDEMATEXfce
优秀变种:Funtoo
官方主页:http://www.gentoo.org
1.2、Gentoo stage tarball

Gentoo是让用户进行高度定制化的,但是不同的用户,他们需要定制的东西可能就会不同, 比如有的人对选择使用哪种libc有要求,有的人对使用哪种initSystem有要求, 有的人只是对要不要桌面有要求,如何尽量满足不同人的需求呢?

Gentoo划分出4stage来,分别叫做stage 1stage 2stage 3stage 4

每一个stage的产出物都是tar.gztar.xztar.bz2之类的tar压缩包。

每一个stage都是基于前一个stage之上增加了一些东西。

基于越靠前的stage进行安装系统,用户的定制度越高。比如你用stage1安装系统的可定制性就比用stage2安装系统的可定制性更强。

Gentoo官方提倡我们基于stage3进行安装系统。

1.3、Gentoo Docker Image
Gentoo Docker Imagehardenedmultilib
gentoo/stage3-amd64✔︎
gentoo/stage3-amd64-nomultilib
gentoo/stage3-amd64-hardened✔︎✔︎
gentoo/stage3-amd64-hardened-nomultilib✔︎

hardened是包含有selinux

multilib是包含有lib32

下载镜像,并创建一个容器,然后启动该容器:

docker run --tty --interactive --name gentoo --hostname gentoo gentoo/stage3-amd64-nomultilib /bin/bash
1.4、Gentoo ISO安装镜像
1.5、安装Gentoo

Gentoo并没有提供一个通用的安装镜像。因为它希望使用者自己决定如何使用该系统。因此,你需要对GNU/Linux的各个细节有足够多的了解。当然,你如果是个初学者, 通过安装Gentoo,你将学习到非常多的GNU/Linux的知识。

step1 : 获取你的电脑的CPU是哪种架构

电脑的CPU架构有很多种,但是,我们普通人常见的只有2种:

  • amd64,也称为x86_64,是64位的
  • x86,是32位的
step2 : 打开对应CPU架构的 Installation HandBook

我们按照HandBook中的说明进行安装。

step3 : 准备一个U盘,制作可启动U盘
step4 : 从可启动U盘启动系统

1、将可启动U盘插入电脑中。

2、开机。

3、选择从USB启动之后,首先出现如下界面:

4、输入gentoo,然后回车,最终出现如下界面:

step5 : 考虑硬盘是否要进行分区

明确以下2个问题:

1、硬盘以前是否分区过,也就是是否存在分区表?

2、如果已经存在分区表,是否要重新进行分区?

如果不需要重新分区,跳过step6step7step8step9

step6 : 选择硬盘分区模式

MBRMaster Boot Record

GPTGUID Partition Table

对比项MBRGPT
代码段空间512byte2048byte
地址宽度32bit64bit
最大磁盘容量2TB无限制
最多主分区4个无限制
分区类型主分区
扩展分区、逻辑分区
无区别
分区工具fdiskparted

建议优先选择GPT这种模式。

step7 : 选择硬盘引导模式

我们知道,在按下电脑的开机按钮之后,电脑获得了能量(电流),开始自举, 检测各种硬件并加载他们,其中,我们的操作系统的代码是存储在硬盘上的,要启动操作系统, 这在电脑的主板上有个专门的固件负责这个事情。随着技术的发展,现在总共有2种固件可以做这种事情:

BIOSBasic Input Output System

UEFIUnified Extensible Firmware Interface

MBRGPT
BIOS
UEFI

BIOS可以引导MBRGPT分区模式的磁盘;

UEFI也可以引导MBRGPT分区模式的磁盘;

BIOS-MBR这种组合形式是最早出现的,虽然现在有被抛弃的趋势,但是他们的组合是最稳定的。

UEFI-GPT这种模式也是相伴而生的,正在一步一步的取代BIOS-MBR,他们的组合也是稳定的。

BIOS-GPTUEFI-MBR这2种组合形式,他们只是为了兼容,并不提倡。

step8 : 规划硬盘分区布局

我们分别以BIOS-MBRUEFI-GPT2种组合形式给出建议。 其他2种组合形式就不予考虑了。

假设要分区的硬盘设备为/dev/sda


BIOS-MBR组合形式的分区建议:
分区大小用途文件系统挂载点
/dev/sda1512MBboot partitionext4/boot
/dev/sda24GBswap partitionnonenone
/dev/sda320GBroot partitionext4/
/dev/sda4剩余data partitionext4/home
UEFI-GPT组合形式的分区建议:
分区大小用途文件系统挂载点
/dev/sda1512MBEFI system partition, espFAT32/vfat/boot
/dev/sda24GBswap partitionnonenone
/dev/sda320GBroot partitionext4/
/dev/sda4剩余data partitionext4/home

注意:

1、第一个分区必须从2048sector处开始, 也就是要预留出硬盘的最开始处的2048 * 512byte = 1M空间,用来保存磁盘分区表信息和加载代码。

2、/boot挂载点对应的分区的大小为512MB已经是绰绰有余的,之所以分这么多,留出多余的部分是为了,可能会出现多个内核同时存在的情况。

3、swap分区不是必须的,如果创建了该分区,大小通常视您的内存容量的情况而定,建议大小为内存容量的一半。

4、root分区的大小要您自己衡量,因为它的大小与您如何使用磁盘有关,如果大部分数据存储到其他分区上的话,此磁盘的大小可以相对较小。

5、/home挂载点对应的分区是非必须的,但是如果你是为了日常办公的话,此挂载点单独分一个分区是必要的。 如果你用作其他目的,此分区可以挂载其他挂载点,比如/var之类的。总之,要看您的用途。

6、官方文档中,在使用了GPT分区的时候,第一个分区总是BIOS boot partition。 实际上,只有用BIOS启动GPT分区的时候才需要BIOS boot partition, 之所以总是创建了该分区,主要原因是该分区只占用了2M的磁盘空间,如果没有创建此分区, 一但想用BIOS启动GPT分区的时候,没有此分区就会启动失败,所以,为了兼容性,官方建议你无论打算用BIOS还是UEFI启动GPT分区,都创建BIOS boot partition

step9 : 按照规划,对磁盘进行分区
BIOS-MBR组合形式的分区:

1、进入fdisk的交互模式进行分区操作:

fdisk -t dos /dev/sda

2、最终布局如下:

Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: Hitachi HTS54505
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xe204b4ea

Device     Boot    Start       End  Sectors Size Id Type
/dev/sda1  *        2048   1050623  1048576  512M 83 Linux
/dev/sda2        1050624   9439231  8388608    4G 82 Linux swap
/dev/sda3        9439232  51382271 41943040   20G 83 Linux
/dev/sda4       51382272 134217727 82835456 39.5G 83 Linux
UEFI-GPT组合形式的分区:

1、进入parted的交互模式进行分区操作:

fdisk -t dos /dev/sda

2、最终布局如下:

Disk /dev/sda: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: Hitachi HTS54505
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xe204b4ea

Device     Boot    Start       End  Sectors Size Id Type
/dev/sda1  *        2048   1050623  1048576  512M 83 Linux
/dev/sda2        1050624   9439231  8388608    4G 82 Linux swap
/dev/sda3        9439232  51382271 41943040   20G 83 Linux
/dev/sda4       51382272 134217727 82835456 39.5G 83 Linux
step9 : 给每个分区应用文件系统

UEFI-GPT模式下,第一个分区是EFI system partition,此分区的文件系统必须是FAT32,设置如下:

mkfs.fat -F 32 /dev/sda1

BIOS-MBR模式下,第一个分区是boot partition,此分区的文件系统是ext4,设置如下:

mkfs.ext4 -T small /dev/sda1

/dev/sda3/dev/sda4应用文件系统ext4:

mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4
step10 : 初始化并激活swap分区
mkswap /dev/sda2
swapon /dev/sda2
step11 : 把各个磁盘分区挂载到对应的目录上

后面操作中的数据需要写到对应的磁盘分区中。所以,现在我们需要先把这些分区挂载到对应的目录上。

mkdir /mnt/gentoo/{boot,home}

mount /dev/sda3 /mnt/gentoo
mount /dev/sda1 /mnt/gentoo/boot
mount /dev/sda4 /mnt/gentoo/home
step12 : 配置网络

如果是通过Wi-Fi上网,并且您连接的Wi-Fi热点设置了密码,此时,您一定无法上网,您需要按照以下步骤进行设置:

1、使用ip命令查看有哪些网卡:

ip addr

通常无线网的网卡名称为wlan0wlp4s0之类的。

2、使用ip命令开启无线网卡:

ip link set wlan0 up

3、使用iw命令扫描Wi-Fi热点,并查看对应的SSID

iw dev wlan0 scan | grep SSID

4、使用wpa_passphrase命令生成配置:

wpa_passphrase TP-LINK-2F5A 12345678 > /etc/wpa_passphrase/wpa_passphrase.conf

5、启动wpa_supplicant服务:

rc-service wpa_supplicant start

6、使用dhcpcd命令获取IP地址:

dhcpcd wlan0

7、使用ping命令检测是否可以连接外网:

ping www.baidu.com
step13 : 下载并解压stage3 tarball

1、使用curl命令下载stage3 tarball下载地址

stage3TarballDownloadUrl=https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/
stage3Tarball=$(curl $stage3TarballDownloadUrl | grep "href=\"stage3-amd64-[0-9]\{8\}T[0-9]\{6\}Z.tar.xz\"" | sed 's/.*href="\([^"]*\)".*/\1/')
curl -LO "$stage3TarballDownloadUrl$stage3Tarball"

2、使用tar解压:

tar vxf "$stage3Tarball" -C /mnt/gentoo

注意:这里本应该验证此包的合法性、是否被修改过等。为了方便,我们就不验证了。

step14 : 配置/mnt/gentoo/etc/portage/make.conf

/mnt/gentoo/etc/portage/make.confPortage的全局Makefile,默认是存在的,我们需要追加一些配置进去:

cat >> /mnt/gentoo/etc/portage/make.conf <<EOF
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"
MAKEOPTS="-j$(nproc)"
USE="python"
ACCEPT_LICENCES="*"
EOF
变量说明
GENTOO_MIRRORS源码包的下载地址。使用国内的镜像可以加快下载速度
MAKEOPTSgmake命令的选项设置。这里设置了-j参数的值jobCount, 它是gmake执行的时候并行执行的job数量, 计算规则是:CPU核心数量+ 1,比如我的CPU共有8个核心, 那么我的计算出来就是9 = 8 + 1
USE此变量控制着包要安装哪些依赖包、不安装哪些依赖包。在通过源码编译安装的时候,通常会有--with-xx的选项, 因为emerge命令包装了源码安装的过程, 所以不再能设置--with-xx等参数了,取而代之的使用USE变量。
鉴于目前Python非常火爆,大多数软件会依赖它,它已成为一个必不可少的工具,所以, 我们可以把它加入全局USE变量中。
ACCEPT_LICENCES此变量控制着安装哪些开源协议的包。对于普通的个人用户来说,一般不需要考虑这件事情。 我们可以设置为所有的开源协议的软件都可以安装。
step15 : 配置/mnt/gentoo/etc/portage/repos.conf

/mnt/gentoo/etc/portage/repos.confPortage tree仓库相关配置文件。该文件默认是不存在的。

执行如下的命令进行配置:

cat > /mnt/gentoo/etc/portage/repos.conf <<EOF
[DEFAULT]
main-repo = gentoo

[gentoo]
location = /usr/portage
sync-type = rsync
sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
auto-sync = yes
EOF
step16 : 复制/etc/resolv.conf
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

--dereference的意思是:如果/etc/resolv.conf是一个软连接, 将复制它的真实文件而不是软连接,不能用软连接的原因是:后面我们chroot/mnt/gentoo之后, 如果是软连接,则会出现找不到该文件的问题。

step17 : 复制/etc/wpa_supplicant/wpa_supplicant.conf
cp --dereference /etc/wpa_supplicant/wpa_supplicant.conf /mnt/gentoo/etc/wpa_supplicant/

如果您是通过WI-FI上网的,并且WI-FI热点设置有密码,前面您肯定已经配置过该文件,为了避免安装好系统后再配置一次,我们直接复制过去。

step18 : 重新挂载一些必要的文件系统

/proc/sys/dev这些伪文件系统的数据是操作系统运行起来之后动态变化的, 我们也需要把这些重新挂载到新位置。

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
step19 : chroot进入/mnt/gentoo
chroot /mnt/gentoo /bin/bash
step20 : 同步Portage tree
emerge --sync
step21 : 选择一个profile

查看有哪些profile

eselect profile list

在这里你可以选择的profile非常多,通常要选择你是使用纯粹的console还是桌面系统, 使用哪种initSystem, 默认是OpenRC, 还可以使用systemd

假如,您想使用systemd,那么您现在就需要做如下的设置:

eselect profile set default/linux/amd64/17.1/systemd

这一步骤是非必须的,按照默认的走,不选也可以。

step22 : 更新 @world set
emerge --ask --verbose --update --deep --newuse @world
step23 : 设置时区
echo "Asia/Shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
step24 : 设置locale

1、修改/etc/locale.gen配置文件:

sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen

2、生成locale数据:

locale-gen

3、设置LANG环境变量:

eselect locale set en_US.UTF-8

4、更新环境变量:

. /etc/profile
step25 : 安装 Linux kernel 源码

1、查看有哪些可用的Linux kernel源码:

emerge -s "%@^sys-kernel/.*-sources"

2、安装sys-kernel/gentoo-sources(官方建议):

emerge sys-kernel/gentoo-sources sys-kernel/genkernel sys-kernel/linux-firmware sys-apps/pciutils

注意:这里很可能会因为USE变化,提示让您修改全局USE变量的值, 或者配置某个包的USE。只要仔细阅读它的提示就可以解决掉。

3、进入/usr/src/linux,查看其内容:

step26 : 编译 Linux kernel 源码

编译Linux kernel源码有2种方式:

编译方式可配置性难度推荐
手动编译自主可控
自动编译可配置性小

手动编译

1、启动配置界面:

make menuconfig

出现如下的配置界面:

2、编译并安装:

make && make modules_install && make install

自动编译

genkernel all
step27 : 配置hostname
hostname=gentoo
sed -i "s@127.0.0.1\slocalhost@127.0.0.1\\tlocalhost ${hostname}@g" /etc/hosts
sed -i "s@hostname=\"localhost\"@hostname=\"${hostname}\"@g" /etc/conf.d/hostname
step28 : 设置root账户密码
passwd
step29 : 创建一个非root账户,并设置其密码
useradd -m -G wheel -s /bin/bash fpliu
passwd fpliu
step30 : 安装和配置sudo
emerge app-admin/sudo
sed -i 's/\# \%wheel ALL=(ALL) ALL/\%wheel ALL=(ALL) ALL/g' /etc/sudoers

因为上面创建的fpliu用户在wheel组中,所以, 我们将原来/etc/sudoers中的wheel组的配置前面的注释放开。

step31 : 安装和配置cronie
emerge sys-process/cronie
rc-update add cronie default

安装该软件是因为我们需要配置一些周期性的任务,比如每周自动与网络时间同步一次、 更天自动同步一次Portage tree、每周更新升级一次软件等等。

step32 : 安装man
emerge sys-apps/man-db sys-apps/man-pages

看使用手册是必不可少的。

step33 : 安装和配置ntp
emerge net-misc/ntp

sed -i 's/0.gentoo.pool.ntp.org/ntp1.aliyun.com/g' /etc/conf.d/ntp-client
sed -i 's/1.gentoo.pool.ntp.org/ntp2.aliyun.com/g' /etc/conf.d/ntp-client
sed -i 's/2.gentoo.pool.ntp.org/ntp3.aliyun.com/g' /etc/conf.d/ntp-client
sed -i 's/3.gentoo.pool.ntp.org/ntp4.aliyun.com/g' /etc/conf.d/ntp-client

rc-update add ntp-client default

与阿里巴巴的ntp Server同步。

step34 : 安装mlocate
emerge sys-apps/mlocate
step35 : 安装dhcpcd
emerge net-misc/dhcpcd
step36 : 安装iw
emerge net-wireless/iw
step37 : 安装、配置wpa_supplicant
emerge net-wireless/wpa_supplicant
rc-update add wpa_supplicant default
step38 : 使用genfstab配置/etc/fstab
curl -Lo /sbin/genfstab https://raw.githubusercontent.com/YangMame/Gentoo-Installer/master/genfstab
chmod o+x /sbin/genfstab
genfstab -U / >> /etc/fstab
step39 : 安装GRUB
emerge sys-boot/grub:2
step40 : 配置GRUB
BIOS-MBR组合形式的配置:
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
UEFI-GPT组合形式的配置:
grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg
step41 : 退出chroot
exit
step42 : 卸载文件系统
umount -R /mnt/gentoo
step43 : 重启系统
reboot
step44 : 选择从硬盘启动
1.6、通过SSH安装Gentoo

如果你同时又2台电脑,那么通过SSH连接上要安装系统的电脑进行操作要比直接在 要安装系统的电脑上操作要方便的多。

前提条件:

1、启动系统。

2、配置网络。

3、在要安装系统的电脑上设置root账户密码:

passwd

4、在要安装系统的电脑上启动OpenSSH Server

rc-service sshd start

5、在另外一台电脑上通过OpenSSH Client连接上要安装系统的电脑:

ssh root@192.168.1.108

6、后续操作都在这台电脑上操作即可。