ESXi/vCenter安装部署Gentoo Linux - OpenRC/SystemD

2024-01-05 11:16:55 浏览数 (2)

一、准备镜像

本文采用最小化安装方式,同时会阐述OpenRCSystemD两种init环境安装区别。所以,镜像采用的是最小化minimal镜像 Stage3(OpenRC/SystemD),整个过程需要有公网访问能力,因此Stage3镜像不用下载到本地,直接在Live系统中wget即可。镜像可在国内清华Gentoo镜像站下载。

1.OpenRC需要准备的镜像

访问OpenRC下载地址,下载minimal镜像

以及同目录下的OpenRC Stage3镜像:

可选步骤,这里只要清楚需要哪几个镜像即可,Stage3不用下载到本地。

2.SystemD需要准备的镜像

访问SystemD下载地址,SystemD作为init系统时,Stage3镜像则为:

minimal镜像还是没有变:

3.OpenRC和SystemD的优势对比

1)OpenRC优势

  • 具有更低的内存占用,对于低端服务器和资源受限系统来说,OpenRC是一个不错的选择;
  • 易于管理和维护,因为它是一个脚本系统,可以轻松通过修改脚本来配置系统;
  • 配置文件容易理解,OpenRC使用普通的Shell脚本,它的配置文件相对更容易理解;

2)SystemD优势

  • 更快的启动速度,可以更快的启动和停止服务;
  • 更多的功能,支持多用户启动,支持多种服务状态的检测和管理,支持热插拔硬件,支持远程管理等;
  • 更高的可靠性,SystemD可以更好地处理系统故障,并可以更好地分析和诊断系统问题;

4.选用OpenRC还是SystemD

OpenRC是Gentoo的原生init系统,核心部份处理依赖管理和init脚本分析,通过扫描运行级别,建造依赖图,接着启动需要的服务脚本来工作,启动方式为rc-service <service> <action>或者/etc/init.d/<service> <action>

SystemD,由Fedora 15引入,相对OpenRC较新的init系统,也是当今最流行的init系统,集成了各类工具以便更好的管理系统,目前在各大Linux发行版基本都能见到,绝大部分默认都是以SystemD作为init系统,启动速度比OpenRC快很多,启动方式为systemctl [Option] [Unit]

OpenRC是Gentoo的默认Init系统,Gentoo官网整个安装步骤也是围绕此展开讨论,SystemD是Gentoo添加上去的支持,因此安装SystemD需要一些额外的步骤,但个人建议是选用SystemD集大成者,除非你清晰知道OpenRC更适合你的需求场景。

二、创建ESXi虚拟机

minimal镜像上传到ESXi后,接下来可开始创建虚拟机,已有相关经验的可跳过这一步。

注:这里是用vCenter作为操作平台,界面展示上和ESXi有所区别,但实际就是操纵ESXi。

1.选择创建类型

2.选择名称和文件夹

这里理解为将Gentoo安装到哪一台ESXi上面,如果你直接在ESXi操作则没有此步骤。

3.选择计算资源

选择集群机器,101则为ESXi地址:

4.选择存储

这里将Gentoo安装到16TB的硬盘里:

5.选择兼容性

选默认最高版本即可,这里用的是ESXi 7.0:

6.选择客户机操作系统

操作系统版本:Linux

客户机操作系统版本:其他5.x或更高版本的Linux(64位)

7.自定义硬件

根据主机性能酌情分配,并挂载好minimal镜像。Gentoo安装软件默认都会把源码拉下来编译,性能可以尽量给高点,提升安装效率,编译内核速度也会更快。

虚拟机选项-->引导选项,这里选择BIOS:

三、进入虚拟机并配置网络

1.进入虚拟机

打开虚拟机后,默认第一个LiveCD选项进入系统:

2.配置网络

如果你在【自定义硬件】步骤选用的网络适配器能上公网,那么此步骤可忽略。

使用ifconfigip addr查看网卡名:

可以看到Live系统默认已经从DHCP地址池中获取到了IP,一般这一步都没有太大问题。

测试公网连通性及DNS解析也没有问题:

如果没网,可以考虑使用net-setup来配置,比如上面网卡是enp11s0,那么命令则为:net-setup enp11s0,输出为下面的dialog界面,按照界面提示选择网络环境即可:

配置网络部分不做赘述,可参考官方文档。

3.开启sshd

设置一个密码,并开启sshd来远程登录,这样直接方便复制操纵一些文本:

通过终端ssh进入到live系统后的效果:

四、配置分区

1.分区方案

以100G磁盘为例,分区方案可以如下作为参考:

分区

大小

描述

/dev/sda1

256M

/boot分区。

/dev/sda2

2G

交换(swap)分区,一般为内存的两倍,内存足够大可以考虑适量给。

/dev/sda3

剩余部分

根分区。

2.使用fdisk分区

选择parted也没啥问题,大于2T的硬盘用不了fdisk。

使用如下命令开始分区硬盘:

代码语言:shell复制
fdisk /dev/sda

如果你用的是SSD,那么硬盘名称形如/dev/nvme0n1

1)创建/boot分区

代码语言:shell复制
Command (m for help): n

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-209715199, default 2048):

Last sector,  /-sectors or  /-size{K,M,G,T,P} (2048-209715199, default 209715199):  256M



Created a new partition 1 of type 'Linux' and of size 256 MiB.

2)创建swap分区

代码语言:shell复制
Command (m for help): n

Partition type

   p   primary (1 primary, 0 extended, 3 free)

   e   extended (container for logical partitions)

Select (default p): p

Partition number (2-4, default 2):

First sector (526336-209715199, default 526336):

Last sector,  /-sectors or  /-size{K,M,G,T,P} (526336-209715199, default 209715199):  2G



Created a new partition 2 of type 'Linux' and of size 2 GiB.



Command (m for help): t

Partition number (1,2, default 2):

Hex code or alias (type L to list all): 82



Changed type of partition 'Linux' to 'Linux swap / Solaris'.

3)创建根分区

代码语言:shell复制
Command (m for help): n

Partition type

   p   primary (2 primary, 0 extended, 2 free)

   e   extended (container for logical partitions)

Select (default p): p

Partition number (3,4, default 3):

First sector (4720640-209715199, default 4720640):

Last sector,  /-sectors or  /-size{K,M,G,T,P} (4720640-209715199, default 209715199): 



Created a new partition 3 of type 'Linux' and of size 97.7 GiB.



Command (m for help): p

Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors

Disk model: Virtual disk

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xaf2138c5



Device     Boot   Start       End   Sectors  Size Id Type

/dev/sda1          2048    526335    524288  256M 83 Linux

/dev/sda2        526336   4720639   4194304    2G 82 Linux swap / Solaris

/dev/sda3       4720640 209715199 204994560 97.7G 83 Linux



Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

3.创建文件系统

比如,在示例分区结构中,有使用FAT32的引导分区(/dev/sda1)和使用Ext4的根分区(/dev/sda3),则使用下面的命令:

代码语言:shell复制
mkfs.vfat -F 32 /dev/sda1

mkfs.ext4 /dev/sda3

激活并初始化swap分区:

代码语言:shell复制
mkswap /dev/sda2

swapon /dev/sda2

4.挂载root分区

使用mount命令将根分区挂载到目录下面:

代码语言:shell复制
mount /dev/sda3 /mnt/gentoo

五、安装Stage包

1.设置日期和时间

建议和UTC时区保持一致,注意不是UTC 8,Gentoo网络基础服务使用了安全证书,如果系统时间差的离谱,可能无法下载安装文件,后面步骤会设置为正确的时区。

可以使用内置的ntpd命令和ntp服务器同步:

代码语言:shell复制
ntpd -q -g

或者你也可以手动设置,比如设置时间为2023年1月16日18:00,则为:

代码语言:shell复制
date 011618002023

2.下载Stage归档文件

1)OpenRC

进入Gentoo的根挂载点:

代码语言:shell复制
cd /mnt/gentoo

下载OpenRC Stage3包文件:

代码语言:shell复制
wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-openrc-20230108T161708Z.tar.xz

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-openrc-20230108T161708Z.tar.xz.CONTENTS.gz

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-openrc-20230108T161708Z.tar.xz.DIGESTS

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-openrc-20230108T161708Z.tar.xz.asc

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-openrc-20230108T161708Z.tar.xz.sha256

验证文件下载是否完整,避免文件下载不完全导致后面步骤白做,比如使用SHA512校验:

代码语言:shell复制
openssl dgst -r -sha512 stage3-amd64-openrc-20230108T161708Z.tar.xz

cat stage3-amd64-openrc-20230108T161708Z.tar.xz.DIGESTS

确保完全一致即可。

2)SystemD

进入Gentoo的根挂载点:

代码语言:shell复制
cd /mnt/gentoo

下载SystemD Stage3包文件:

代码语言:shell复制
wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-systemd-20230108T161708Z.tar.xz

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-systemd-20230108T161708Z.tar.xz.CONTENTS.gz

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-systemd-20230108T161708Z.tar.xz.DIGESTS

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-systemd-20230108T161708Z.tar.xz.asc

wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/20230108T161708Z/stage3-amd64-systemd-20230108T161708Z.tar.xz.sha256

使用SHA256校验文件是否完整:

代码语言:shell复制
openssl dgst -r -sha256 stage3-amd64-systemd-20230108T161708Z.tar.xz

cat stage3-amd64-systemd-20230108T161708Z.tar.xz.sha256

可以看到完全一致。

3.解压Stage3

代码语言:shell复制
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

--numeric-owner 被用于确保从tarball中提取的文件的用户和组ID与Gentoo发布工程团队预期的保持一致。

4.配置编译选项

编辑make.conf文件,优化编译参数:

代码语言:shell复制
nano -w /mnt/gentoo/etc/portage/make.conf

改成如下内容:

代码语言:shell复制
# These settings were set by the catalyst build script that automatically

# built this stage.

# Please consult /usr/share/portage/config/make.conf.example for a more

# detailed example.

COMMON_FLAGS="-march=native -O2 -pipe"

CFLAGS="${COMMON_FLAGS}"

CXXFLAGS="${COMMON_FLAGS}"

FCFLAGS="${COMMON_FLAGS}"

FFLAGS="${COMMON_FLAGS}"



MAKEOPTS="-j16"

# NOTE: This stage was built with the bindist Use flag enabled



# This sets the language of build output to English.

# Please keep this setting intact when reporting bugs.

LC_MESSAGES=C

其中MAKEOPTS表示编译时使用的线程数量,官方的建议是在CPU的线程数整个系统的内存 / 2GiB 中选择小的那个比较好,我这里设置为16

六、安装Gentoo基础系统

1.选择镜像站点

Gentoo默认配置的是官方源,跨境传输速度较慢,这里建议配置为国内源,比如选择清华源或阿里、网易等多个软件源。

代码语言:shell复制
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

空格勾选即可:

2.设置Gentoo ebuild 软件仓库

Portage为Gentoo的包管理器,这里需要创建Portage配置目录,并将Gentoo镜像的配置文件复制到创建的repos.conf目录:

代码语言:shell复制
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

验证是否成功,可以看下文件内容:

代码语言:shell复制
cat /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

3.复制DNS信息

代码语言:shell复制
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

--dereference,可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是resolv.conf的目标文件而不是这个链接文件。

4.挂载文件系统

想要确保新环境(/mnt/gentoo)能正常工作,需要把Live系统的一些文件系统挂载到/mnt/gentoo,才能确保能正常使用。

代码语言:shell复制
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

5.chroot

使用chroot命令进入到Gentoo环境:

代码语言:shell复制
chroot /mnt/gentoo /bin/bash #进入到gentoo基础系统,并且使用bash解释器

source /etc/profile  #是配置文件重新生效

export PS1="(chroot) ${PS1}"  #修改PS1,帮助我们记忆这是在chroot环境

6.挂载boot分区

安装内核及引导程序时需用到boot分区,因此需要提前挂载:

代码语言:shell复制
mount /dev/sda1 /boot

7.配置Portage

1)安装Gentoo ebuild数据库快照

代码语言:shell复制
emerge-webrsync

2)更新Portage ebuild数据库(可选)

上一步已经建立数据库快照了并且更新ebuild为了最新版本,如果距离上一步有停顿一段时间(几个小时或者一天),可以使用下面命令保持为最新:

代码语言:shell复制
emerge --sync

3)eselect news

当更新Portage ebuild数据库后,Portage可能会输出类似下面的信息:

代码语言:shell复制
 * IMPORTANT: 9 news items need reading for repository 'gentoo'.

 * Use eselect news read to view new items.

一般都是推送的重要消息,可以使用eselect命令来阅读,不然每次emerge安装软件时都会在最后提示此信息。

代码语言:shell复制
eselect news list

eselect news read

4)选择正确的profile

使用如下命令查看目前选择的profile

代码语言:shell复制
eselect profile list

最后面*号表示当前选的配置文件。选的时候不能跨版本选择,比如17.1就选17.1的profile,不要17.0、17.1都包含。

因为我们使用最小化安装,这里默认就行,系统已经帮我们选好,如果是OpenRC Stage3包则默认会选OpenRC的profile(序列号1)。

比如选择OpenRC:

代码语言:shell复制
eselect profile set 1

5)更新@world集合

@world集合是Gentoo所有软件、配置的集合,进行构建系统之前,更新一下@world集合是必要的:

代码语言:shell复制
emerge --ask --verbose --update --deep --newuse @world

6)配置USE变量

USE变量可以在编译时选择编译或者不编译某些可选的支持、扩展包,简单理解为启用或禁用主程序某些其他功能,这样可以做到按需安装,只安装我们想要的包,更加精简化。

比如有以下需求:需要安装nmap,但是nmap的USE变量默认没有npingncat子命令,我们需要把它们一并安装上。

每个包的USE定义都可以在/etc/portage/package.use目录下设置,它可能也是一个文件,不管是哪一种,语法都是一样。

比如基于如上需求,需要安装npingncat子命令,那么USE变量可以是:

代码语言:shell复制
net-analyzer/nmap ipv6 nse ssl -libssh2 ncat nping -symlink (-system-lua) -verify-sig

要看nmap支持哪些USE标记,通过emerge -pv nmap即可查看:

代码语言:shell复制
emerge -pv nmap

因为配置了nmap的USE设置,所以默认会读取设置后的USE变量

-开头表示不安装,比如libssh2不安装libssh2库文件。

默认的USE设置在make.defaults文件中,可以使用如下命令查看当前USE标记:

代码语言:shell复制
emerge --info |grep ^USE

如果对USE不了解,这里建议保持默认。

同时可以在/var/db/repos/gentoo/profiles/use.desc中找到可用的USE标记的完整描述:

代码语言:shell复制
less /var/db/repos/gentoo/profiles/use.desc

以下8、9点根据当前init系统做对应操作,后续操作步骤会多次用到文本编辑器,如果不习惯内置的nano可以通过emerge --ask vim安装vim命令。

8.使用SystemD作为init系统

1)软链/etc/mtab

代码语言:shell复制
ln -sf /proc/self/mounts /etc/mtab

上游仅支持/etc/mtab,如果不建立此软连接,则会导致mountdf命令出现bug(#434090和##477240)。

2)生成Machine ID

创建一个随机机器ID:

代码语言:shell复制
systemd-machine-id-setup

3)设置主机名

代码语言:shell复制
hostnamectl set-hostname <HOSTNAME>

4)设置时区

时区列表在/usr/share/zoneinfo目录下,查到对应可用的时区后,软链到/etc/localtime

比如我们要设置到上海时区:

代码语言:shell复制
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

5)设置语言环境

代码语言:shell复制
vim /etc/locale.conf

习惯使用英文环境,修改成LANG="en_US.utf8"即可。

9.使用OpenRC作为init系统

1)设置时区

依然以上海为例:

代码语言:shell复制
echo 'Asia/Shanghai' > /etc/timezone

重新配置timezone-data:

代码语言:shell复制
emerge --config sys-libs/timezone-data

将会基于/etc/timezone去更新/etc/localtime文件,/etc/localtime会让系统的C类库知道系统在什么时区。

10.配置区域设置

1)生成区域设置

完整的locale支持列表可以在/usr/share/i18n/SUPPORTED文件找到。系统支持的locale必须在/etc/local.gen定义。

修改/etc/locale.gen文件,将前面的注释去掉,启用US字符格式:

代码语言:shell复制
en_US.UTF-8 UTF-8

运行locale-gen,将会生成/etc/locale.gen文件中指定的地区:

代码语言:shell复制
locale-gen

可以使用locale -a验证当前选择的locale

2)选择区域设置

通过如下命令显示可用的配置:

代码语言:shell复制
eselect locale list

可以看到,系统默认已经帮我们选择了en_US.utf8,如果不符合预期,可通过eselect locale set <NUMBER>选择正确的区域设置,比如选择POSIX,可以是:

代码语言:shell复制
eselect locale set 3

完成上述选择后,重新加载环境:

代码语言:shell复制
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

七、安装内核

以下内核安装方式二选一进行,ESXi上运行则更建议使用第一种。

1.安装二进制内核

ESXi安装方式最推荐使用二进制内核,如果你不厌其烦要从源码编译内核,那就需要把vmware虚拟化、相关驱动等诸多内核配置查找出来并勾选,费时费力,最后还不一定能完美兼容。

使用如下命令安装二进制内核:

代码语言:shell复制
emerge --ask sys-kernel/gentoo-kernel-bin

可以看到当前源里面最新stable版本为5.15.85-r1,且默认USE了initramfs

安装成功后,可以通过eselect命令看到当前版本:

代码语言:shell复制
eselect kernel list

2.源码编译内核

1)安装内核源码

代码语言:shell复制
emerge --ask sys-kernel/gentoo-sources

列出已安装的内核:

代码语言:shell复制
eselect kernel list

可以看到一共有两个内核,第一个是从源码安装的版本,第二个是刚安装的二进制版本。

如果没有进行二进制内核安装,这里只会看到一个内核,不需要做额外操作。因为这里有两个内核,且第一是源码安装的内核版本,我们选择第一个:

代码语言:shell复制
eselect kernel set 1

可以看到,设置为第一个时,其实就是创建一个/usr/src/linux的链接指向内核目录。

2)手动配置内核

首先可以安装sys-apps/pciutils包,通过lspci命令来收集硬件信息:

代码语言:shell复制
emerge --ask sys-apps/pciutils

lspci

因为下一步配置需要把每个必要的内核模块勾选。

接下来进入内核源码,开始配置内核:

代码语言:shell复制
cd /usr/src/linux

make menuconfig

一如既往的dialog视图:

接下来就是最繁琐的步骤,勾选必要的内核模块(空格勾选,*代表勾选上):

① 启用Gentoo特有选项
代码语言:shell复制
Gentoo Linux --->
  Generic Driver Options --->
    [*] Gentoo Linux support
    [*]   Linux dynamic and persistent device naming (userspace devfs) support
    [*]   Select options required by Portage features
        Support for init systems, system and service managers  --->
          [*] OpenRC, runit and other script based systems and managers
          [*] systemd
② 启用devtmpfs支持
代码语言:shell复制
Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
③ 启用SCSI硬盘支持
代码语言:shell复制
Device Drivers --->
   SCSI device support  --->
      <*> SCSI disk support

验证SCSI磁盘支持是否已激活(CONFIG_BLK_DEV_SD),可以通过/,来搜索CONFIG_BLK_DEV_SD,这样不用一个个子选项去找,可以看到默认已经勾选:

④ 选择所需要的文件系统
代码语言:shell复制
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

  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Tmpfs virtual memory file system support (former shm fs)
⑤ 激活SMP支持

CPU多核需要用到,配置名为:CONFIG_SMP,这里默认也是勾选的,可以检查一遍:

代码语言:shell复制
Processor type and features  --->
  [*] Symmetric multi-processing support
⑥ 启用对GPT的支持

如果在分区时使用GPT分区,则需要启用它(CONFIG_PARTITION_ADVANCEDCONFIG_EFI_PARTITION):

代码语言:shell复制
-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support
⑦ 启用对UEFI的支持

如果你用的是UEFI引导,则需要启用EFI stub支持(CONFIG_EFICONFIG_EFI_STUBCONFIG_EFI_MIXEDCONFIG_EFI_VARSCONFIG_EFI_FB

代码语言:bash复制
Processor type and features  --->
    [*] EFI runtime service support
    [*]   EFI stub support
    [*]     EFI mixed-mode support

Device Drivers
    Firmware Drivers  --->
        EFI (Extensible Firmware Interface) Support  --->
            <*> EFI Variable Support via sysfs
    Graphics support  --->
        Frame buffer Devices  --->
            <*> Support for frame buffer devices  --->
                [*]   EFI-based Framebuffer Support
⑧ 启用对ESXi的支持

针对ESXi,官方给出了需要勾选的内核模块列表:

代码语言:shell复制
[*] Networking support  --->
        Networking options  --->
            <*> Virtual Socket protocol
            <*>   VMware VMCI transport for Virtual Sockets
    Device Drivers  --->
        [*] Fusion MPT device support  --->
                <*>   Fusion MPT ScsiHost drivers for SPI
            Misc devices  --->
                <*> VMware Balloon Driver
                <*> VMware VMCI Driver
            SCSI device support  --->
                [*] SCSI low-level drivers  --->
                   <*>   VMware PVSCSI driver support
        [*] Network device support  --->
                [*]   Ethernet driver support  --->
                    [*]   AMD devices
                    <*>     AMD 8111 (new PCI LANCE) support
                    <*>     AMD PCnet32 PCI support
                    [*]   Intel devices
                    <*>     Intel(R) PRO/1000 Gigabit Ethernet support
                    <*>     Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support
                <*>   VMware VMXNET3 ethernet driver
            Input device support  --->
                [*]   Keyboards  --->
                    <*>   AT keyboard
    File systems  --->
        <*> FUSE (Filesystem in Userspace) support

配置文件名:

  • CONFIG_NET_VENDOR_AMD
  • CONFIG_AMD8111_ETH
  • CONFIG_PCNET32
  • CONFIG_NET_VENDOR_INTEL
  • CONFIG_E1000
  • CONFIG_E1000E
  • CONFIG_KEYBOARD_ATKBD
  • CONFIG_VMWARE_BALLOON
  • CONFIG_VMWARE_PVSCSI
  • CONFIG_VMXNET3
  • CONFIG_VMWARE_VMCI
  • CONFIG_VMWARE_VMCI_VSOCKETS
  • CONFIG_FUSE_FS
  • CONFIG_FUSION

同时可以考虑安装vm-tools工具:

代码语言:shell复制
emerge --ask app-emulation/open-vm-tools

3)编译和安装内核

代码语言:shell复制
make && make modules_install

无需用-j指定线程数,默认从我们前面的/etc/portage/make.conf读取MAKEOPTS指定的线程数。

编译完成后,使用如下命令完成安装,将会复制内核镜像到/boot目录:

代码语言:shell复制
make install

4)安装initramfs

安装前线安装dracut,用它来生成initramfs

代码语言:shell复制
emerge --ask sys-kernel/dracut

dracut --kver=5.15.80-gentoo

成功后,可以在/boot目录下看到initramfs开头的文件:

八、配置系统

1.创建/etc/fstab

可以通过blkid命令查看磁盘UUID:

代码语言:shell复制
blkid

拿到UUID后,写入到fstab里面:

代码语言:shell复制
vim /etc/fstab

vim默认没装,可以使用emerge --ask app-editors/vim安装,要么就用nano命令。

比如如上UUID,写入为:

代码语言:shell复制
UUID=C8D9-EEED                             /boot           vfat            defaults,noatime 0 2

UUID=e483307b-a5ce-44d2-94d6-d88b0584b5e0  none            swap            sw               0 0

UUID=7a05ddf2-b16c-4b4f-a70b-50288aededa8  /               ext4            noatime          0 1

2.配置主机名、域名

1)OpenRC
代码语言:shell复制
nano -w /etc/conf.d/hostname

2)SystemD

比如将主机名设置为gentoo:

代码语言:shell复制
hostnamectl hostname gentoo

3.配置网络

安装dhcpcd:

代码语言:shell复制
emerge --ask net-misc/dhcpcd

如果是OpenRC,默认启用此服务,让它开机自启动:

代码语言:shell复制
rc-update add dhcpcd default

rc-service dhcpcd start

SystemD则为:

代码语言:shell复制
systemctl enable dhcpcd

4.设置密码

不要忘了给系统设置一个密码,不然无法登录进去:

代码语言:shell复制
passwd

5.配置引导和启动

OpenRC无需执行此步骤,保持默认即可。

SystemD则需要通过如下两条命令,从Live环境平滑过渡到安装后的首次启动:

代码语言:shell复制
systemd-firstboot --prompt --setup-machine-id

systemctl preset-all

九、安装系统工具

1.安装日志工具

OpenRC可以安装它,如果是SystemD则不需要安装:

代码语言:shell复制
emerge --ask app-admin/sysklogd

在OpenRC上添加自启动:

代码语言:shell复制
rc-update add sysklogd default

2.安装Cron守护进程(可选)

代码语言:shell复制
emerge --ask sys-process/dcron

OpenRC上添加自启动

代码语言:shell复制
rc-update add dcron default

SystemD上添加自启动

代码语言:shell复制
systemctl enable dcron

初始化

代码语言:shell复制
crontab /etc/crontab

3.文件索引(可选)

locate工具,安装命令如下:

代码语言:shell复制
emerge --ask sys-apps/mlocate

4.远程访问(推荐)

sshd服务默认已经内置,我们只需要把它设置为开机自启动服务即可。

OpenRC

代码语言:shell复制
rc-update add sshd default

SystemD

代码语言:shell复制
systemctl enable sshd

需要注意,默认sshd_config禁用了root登录,可以考虑修改成允许:

代码语言:shell复制
sed -ir 's|^#(Permit.*) (pro.*)|1 yes|g' /etc/ssh/sshd_config 

之后重启sshd服务即可。

5.时间同步

使用NTP协议进行时钟同步的软件很多,比如ntpd或者chrony,这里建议使用后者:

代码语言:shell复制
emerge --ask net-misc/chrony

OpenRC

代码语言:shell复制
rc-update add chronyd default

SystemD

代码语言:shell复制
systemctl enable chronyd

6.安装文件系统工具

/dev/sda1/dev/sda3我们分别使用了FAT32和EXT4两个文件系统,所以至少需要安装这两个工具:

代码语言:shell复制
emerge --ask sys-fs/dosfstools sys-fs/e2fsprogs

十、安装及配置引导

以下选项根据实际引导对应选择

1.BIOS引导

当使用BIOS引导时,无需其他配置直接安装GRUB:

代码语言:shell复制
emerge --ask --verbose sys-boot/grub

/etc/default/grub添加两行:

代码语言:shell复制
GRUB_CMDLINE_LINUX="init=/lib/systemd/systemd"

GRUB_DISABLE_OS_PROBER=false

安装grub到第一块盘:

代码语言:shell复制
grub-install /dev/sda

生成grub.cfg配置文件:

代码语言:shell复制
grub-mkconfig -o /boot/grub/grub.cfg

2.UEFI引导

同理,先安装grub:

代码语言:shell复制
emerge --ask --verbose sys-boot/grub

在将grub安装到引导分区:

代码语言:shell复制
grub-install --target=x86_64-efi --efi-directory=/boot

生成grub.cfg配置文件:

代码语言:shell复制
grub-mkconfig -o /boot/grub/grub.cfg

3.重启系统

以上步骤安装完成后,可以退出chroot环境,并使用umount取消挂载,最后重启系统:

代码语言:shell复制
(chroot) (none) / # exit

exit

(none) ~ # umount -l /mnt/gentoo/dev{/shm,/pts,}

(none) ~ # umount -R /mnt/gentoo

(none) ~ # reboot

重启后,可以正常进入系统,说明已经成功:

进入系统后,stage3包我们已经不需要了,可以把它们删除掉:

代码语言:shell复制
rm /stage3-*.tar.*

同时可以安装neofetch工具看下系统概览:

代码语言:shell复制
emerge --ask app-misc/neofetch

到此,整个系统已经全部安装结束。

附上PDF版本:

ESXi&vCenter部署Gentoo-Systemd Openrc.pdf

0 人点赞