所属类型: | GNU/Linux |
base on: | 独立 |
创建者: | Daniel Robbins (FreeBSD的开发者之一) |
所在国家: | 美国 |
首次发布: | 2002 年 |
发布模型: | 滚动发布 |
包管理器: | Portage |
cli-Shell: | bash |
init-Soft: | OpenRC或systemd,安装时可以选择 |
支持架构: | x86_64 |
桌面环境: | Cinnamon、Enlightenment、GNOME、KDE、LXDE、MATE、Xfce |
优秀变种: | Funtoo |
官方主页: | http://www.gentoo.org |
Gentoo
是让用户进行高度定制化的,但是不同的用户,他们需要定制的东西可能就会不同, 比如有的人对选择使用哪种libc
有要求,有的人对使用哪种initSystem有要求, 有的人只是对要不要桌面有要求,如何尽量满足不同人的需求呢?
Gentoo
划分出4
个stage
来,分别叫做stage 1
、stage 2
、stage 3
、stage 4
。
每一个stage
的产出物都是tar.gz
、tar.xz
、tar.bz2
之类的tar
压缩包。
每一个stage
都是基于前一个stage
之上增加了一些东西。
基于越靠前的stage
进行安装系统,用户的定制度越高。比如你用stage1
安装系统的可定制性就比用stage2
安装系统的可定制性更强。
Gentoo
官方提倡我们基于stage3
进行安装系统。
Gentoo Docker Image | hardened | multilib |
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
Gentoo
并没有提供一个通用的安装镜像。因为它希望使用者自己决定如何使用该系统。因此,你需要对GNU/Linux的各个细节有足够多的了解。当然,你如果是个初学者, 通过安装Gentoo
,你将学习到非常多的GNU/Linux的知识。
CPU
是哪种架构电脑的CPU
架构有很多种,但是,我们普通人常见的只有2
种:
amd64
,也称为x86_64
,是64
位的x86
,是32
位的CPU
架构的 Installation HandBook我们按照HandBook
中的说明进行安装。
1、将可启动U盘
插入电脑中。
2、开机。
3、选择从USB
启动之后,首先出现如下界面:
4、输入gentoo
,然后回车,最终出现如下界面:
明确以下2个问题:
1、硬盘以前是否分区过,也就是是否存在分区表?
2、如果已经存在分区表,是否要重新进行分区?
如果不需要重新分区,跳过step6
、step7
、step8
、step9
MBR
(Master Boot Record
)
GPT
(GUID Partition Table
)
对比项 | MBR | GPT |
代码段空间 | 512byte | 2048byte |
地址宽度 | 32bit | 64bit |
最大磁盘容量 | 2TB | 无限制 |
最多主分区 | 4个 | 无限制 |
分区类型 | 主分区 扩展分区、逻辑分区 | 无区别 |
分区工具 | fdisk | parted |
建议优先选择GPT
这种模式。
我们知道,在按下电脑的开机
按钮之后,电脑获得了能量(电流),开始自举, 检测各种硬件并加载他们,其中,我们的操作系统的代码是存储在硬盘
上的,要启动操作系统, 这在电脑的主板上有个专门的固件负责这个事情。随着技术的发展,现在总共有2
种固件可以做这种事情:
BIOS
(Basic Input Output System
)
UEFI
(Unified Extensible Firmware Interface
)
MBR | GPT | |
BIOS | ||
UEFI |
BIOS
可以引导MBR
和GPT
分区模式的磁盘;
UEFI
也可以引导MBR
和GPT
分区模式的磁盘;
BIOS-MBR
这种组合形式是最早出现的,虽然现在有被抛弃的趋势,但是他们的组合是最稳定的。
UEFI-GPT
这种模式也是相伴而生的,正在一步一步的取代BIOS-MBR
,他们的组合也是稳定的。
BIOS-GPT
和UEFI-MBR
这2种组合形式,他们只是为了兼容,并不提倡。
我们分别以BIOS-MBR
和UEFI-GPT
这2
种组合形式给出建议。 其他2
种组合形式就不予考虑了。
假设要分区的硬盘设备为/dev/sda
。
BIOS-MBR
组合形式的分区建议:分区 | 大小 | 用途 | 文件系统 | 挂载点 |
---|---|---|---|---|
/dev/sda1 | 512MB | boot partition | ext4 | /boot |
/dev/sda2 | 4GB | swap partition | none | none |
/dev/sda3 | 20GB | root partition | ext4 | / |
/dev/sda4 | 剩余 | data partition | ext4 | /home |
UEFI-GPT
组合形式的分区建议:分区 | 大小 | 用途 | 文件系统 | 挂载点 |
---|---|---|---|---|
/dev/sda1 | 512MB | EFI system partition, esp | FAT32/vfat | /boot |
/dev/sda2 | 4GB | swap partition | none | none |
/dev/sda3 | 20GB | root partition | ext4 | / |
/dev/sda4 | 剩余 | data partition | ext4 | /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
。
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
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
mkswap /dev/sda2
swapon /dev/sda2
后面操作中的数据需要写到对应的磁盘分区中。所以,现在我们需要先把这些分区挂载到对应的目录上。
mkdir /mnt/gentoo/{boot,home}
mount /dev/sda3 /mnt/gentoo
mount /dev/sda1 /mnt/gentoo/boot
mount /dev/sda4 /mnt/gentoo/home
如果是通过Wi-Fi
上网,并且您连接的Wi-Fi热点
设置了密码,此时,您一定无法上网,您需要按照以下步骤进行设置:
1、使用ip命令查看有哪些网卡:
ip addr
通常无线网的网卡名称为wlan0
、wlp4s0
之类的。
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
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
注意:这里本应该验证此包的合法性、是否被修改过等。为了方便,我们就不验证了。
/mnt/gentoo/etc/portage/make.conf
是Portage的全局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 | 源码包的下载地址。使用国内的镜像可以加快下载速度 |
MAKEOPTS | gmake命令的选项设置。这里设置了-j 参数的值jobCount , 它是gmake执行的时候并行执行的job 数量, 计算规则是:CPU核心数量 + 1,比如我的CPU 共有8 个核心, 那么我的计算出来就是9 = 8 + 1 。 |
USE | 此变量控制着包要安装哪些依赖包、不安装哪些依赖包。在通过源码编译安装的时候,通常会有--with-xx 的选项, 因为emerge命令包装了源码安装的过程, 所以不再能设置--with-xx 等参数了,取而代之的使用USE 变量。鉴于目前 Python 非常火爆,大多数软件会依赖它,它已成为一个必不可少的工具,所以, 我们可以把它加入全局USE 变量中。 |
ACCEPT_LICENCES | 此变量控制着安装哪些开源协议的包。对于普通的个人用户来说,一般不需要考虑这件事情。 我们可以设置为所有的开源协议的软件都可以安装。 |
/mnt/gentoo/etc/portage/repos.conf
是Portage 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
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
--dereference
的意思是:如果/etc/resolv.conf
是一个软连接, 将复制它的真实文件而不是软连接,不能用软连接的原因是:后面我们chroot
进/mnt/gentoo
之后, 如果是软连接,则会出现找不到该文件的问题。
cp --dereference /etc/wpa_supplicant/wpa_supplicant.conf /mnt/gentoo/etc/wpa_supplicant/
如果您是通过WI-FI
上网的,并且WI-FI
热点设置有密码,前面您肯定已经配置过该文件,为了避免安装好系统后再配置一次,我们直接复制过去。
/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
chroot /mnt/gentoo /bin/bash
emerge --sync
查看有哪些profile
:
eselect profile list
在这里你可以选择的profile
非常多,通常要选择你是使用纯粹的console
还是桌面系统, 使用哪种initSystem, 默认是OpenRC, 还可以使用systemd。
假如,您想使用systemd,那么您现在就需要做如下的设置:
eselect profile set default/linux/amd64/17.1/systemd
这一步骤是非必须的,按照默认的走,不选也可以。
emerge --ask --verbose --update --deep --newuse @world
echo "Asia/Shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
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
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
,查看其内容:
编译Linux kernel
源码有2
种方式:
编译方式 | 可配置性 | 难度 | 推荐 |
---|---|---|---|
手动编译 | 自主可控 | 大 | |
自动编译 | 可配置性小 | 无 |
手动编译
:
1、启动配置界面:
make menuconfig
出现如下的配置界面:
2、编译并安装:
make && make modules_install && make install
自动编译
:
genkernel all
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
passwd
useradd -m -G wheel -s /bin/bash fpliu
passwd fpliu
emerge app-admin/sudo
sed -i 's/\# \%wheel ALL=(ALL) ALL/\%wheel ALL=(ALL) ALL/g' /etc/sudoers
因为上面创建的fpliu
用户在wheel
组中,所以, 我们将原来/etc/sudoers
中的wheel
组的配置前面的注释放开。
emerge sys-process/cronie
rc-update add cronie default
安装该软件是因为我们需要配置一些周期性的任务,比如每周自动与网络时间同步一次、 更天自动同步一次Portage tree
、每周更新升级一次软件等等。
emerge sys-apps/man-db sys-apps/man-pages
看使用手册是必不可少的。
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
同步。
emerge sys-apps/mlocate
emerge net-misc/dhcpcd
emerge net-wireless/iw
emerge net-wireless/wpa_supplicant
rc-update add wpa_supplicant default
curl -Lo /sbin/genfstab https://raw.githubusercontent.com/YangMame/Gentoo-Installer/master/genfstab
chmod o+x /sbin/genfstab
genfstab -U / >> /etc/fstab
emerge sys-boot/grub:2
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
exit
umount -R /mnt/gentoo
reboot
如果你同时又2
台电脑,那么通过SSH
连接上要安装系统的电脑进行操作要比直接在 要安装系统的电脑上操作要方便的多。
前提条件:
1、启动系统。
2、配置网络。
3、在要安装系统的电脑上设置root
账户密码:
passwd
4、在要安装系统的电脑上启动OpenSSH Server:
rc-service sshd start
5、在另外一台电脑上通过OpenSSH Client连接上要安装系统的电脑:
ssh root@192.168.1.108
6、后续操作都在这台电脑上操作即可。