Gentoo快速安装和安装在zfs上安装实践

作为Linux菜鸟,却由于对性能的追求而想安装Gentoo,也失败了几十次,走了太多的弯路,甚至花一整个五一假期照着某医科生的帖子,从stage1开始装,然后还失败了。近些时总算找到了诀窍,能做到除核心配置失误导致死机外,都能安装成功。

最近又对zfs起了兴趣,想把Gentoo装在zfs上。经过这几个月的不断失败和重装(最多的是找不到引导区),终于在昨天晚上安装成功(撒花~撒花~~)

特写此文记录一下。

1.安装前须知

1.1最容易犯的错误

  1. 忘记设密码
  2. 忘记安装文件系统支持
  3. 忘记设置网络

1.2补救方法

1.2.1非zfs下

mount {DEV} /mnt/gentoo

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev

chroot /mnt/gentoo /bin/bash
# 以上即可,还可以加上

export PS1="(chroot) ${PS1}"

1.2.2zfs下

zpool import -d {DEV} -R /mnt/gentoo -f {POOLNAME}

zfs mount  -a

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev

chroot /mnt/gentoo /bin/bash

export PS1="(chroot) ${PS1}"

2.安装过渡系统

我找到很多的资料都是从Arch安装的,但是我试过几次都有冲突问题(高手可以略过),于是我尝试着通过Gentoo作媒介来在ZFS安装Gentoo并成功。

2.1分区准备

准备装系统的盘/dev/sda被分为6个区,其中sda1~sda3用来装在ZFS上的系统,sda4~sda6用来装过渡系统。

sda1、sda4为300M的FAT32分区,作为EFI所用。sda2、sda5为1G的EXT4分区,用作/boot(因为我不想以FAT32分区作/boot)。sda6为50G的XFS分区(其实其它类型也行)。sda3也是50G现在不用设定分区类型。

另外最好先下载好stage3的xz压缩包,在下载https://www.gentoo.org/downloads/即可。

2.2安置stage3

启动Gentoo的安装镜像, Minimal Installation LiveGUI USB Image都可以。执行以下操作

mkdir -p /mnt/gentoo

mount /dev/sda6 /mnt/gentoo

mkdir -p /mnt/gentoo/boot

mount /dev/sda5 /mnt/gentoo/boot

mkdir -p /mnt/gentoo/boot/efi

mount /dev/sda4 /mnt/gentoo/boot/efi

cp -v stage3-*-.xz /mnt/gentoo

cd /mnt/gentoo

tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

#选择中国源

mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf  


mkdir -p -v /mnt/gentoo/etc/portage/repos.conf

cd /mnt/gentoo/usr/share/portage/config/
cp -v repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

 #加入中国源
nano -w /mnt/gentoo/etc/portage/repos.conf/gentoo.conf:  

sync-uri = rsync://mirrors.163.com/gentoo-portage
#sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
#sync-uri = rsync://mirrors.yun-idc.com/gentoo-portage/

# 复制DNS信息

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

# 挂载系统必要环境,并进入Chroot环境

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
#mount --make-rslave /mnt/gentoo/sys (不使用systemd,所以注释掉)
mount --rbind /dev /mnt/gentoo/dev
#mount --make-rslave /mnt/gentoo/dev (不使用systemd,所以注释掉)

chroot /mnt/gentoo /bin/bash
mkdir -p /var/db/repos/gentoo          # 只用一次,后面进chroot不需要
env-update                                  # 只用一次,后面进chroot不需要
source /etc/profile                          # 只用一次,后面进chroot不需要
export PS1="(chroot) ${PS1}"         # 可以不用这句

现在你已经进入要安装的系统中了,此后你的操作会直接影响安装后的系统。你在此时安装的内容和修改的设置都会保留在安装后的系统中。你也可以理解为,现在使用的是跑在“外部”核心上的系统,和我们的目标的最大区别是没有可以引导的自身核心而已。

注意:make.conf中的ACCEPT_KEYWORDS要设为amd64,如果按网上教程设为~amd64会有zfs的支持问题(高手可无视这一条)

2.3安装系统核心

此处我去掉了其它教程中emerge @world的步骤,因为现在这个过渡系统不需要作这个升级(我是之后把sda4~sda6都删除了),而且也不会影响核心的安装。

另外我建议不要再这个阶段emerge太多东西,因为这阶段会多出多余的步骤,耗费更多的时间

nano -w /etc/hosts

# 添加github的host

185.199.108.133        raw.githubusercontent.com
185.199.109.133        raw.githubusercontent.com
185.199.110.133        raw.githubusercontent.com
185.199.111.133        raw.githubusercontent.com

emerge-webrsync # 更新软件列表

eselect profile list 

eselect profile set 1  # 过渡系统最基础的即可

echo "Asia/Shanghai" > /etc/timezone    

emerge --config sys-libs/timezone-data
hwclock --systohc
date MMDDhhmmYY      #设为当前时间

nano -w /etc/locale.gen:  

en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK 
zh_CN.UTF-8 UTF-8

locale-gen

eselect locale list 

eselect locale set en_US.UTF-8

env-update && source /etc/profile  # 后面不需要了

export PS1="(chroot) ${PS1}"

# 生成/etc/fstab配置

emerge --ask --quiet genfstab

genfstab -U -p / >> /etc/fstab

# 有人说genfstab是Arch下的,其实有Gentoo版

# 安装Linux核心

emerge --ask --quiet --verbose sys-kernel/gentoo-kernel-bin

# 过渡系统嘛~装个已编译好的即可,能省下大量CPU、硬盘消耗和时间

eselect kernel list

eselect kernel set 1 # 不出意外只能选1,如果不是,那就是安装时出意外了

# 这样会自动生成/usr/src/linux。很多软件emerge时会寻找Linux的Header,所以我先设定好kernel的版本。

# 安装文件系统支持

emerge --ask --quiet sys-fs/xfsprogs  

emerge --ask --quiet sys-fs/dosfstools 

emerge --ask --quiet zfs zfs-kmod # zfs最好在核心和其它文件系统之后

# 这里需要注意确认zfs是不是安装成功。这里不成功的话后面也别做了。

  

emerge --ask --quiet --verbose sys-kernel/linux-firmware

emerge --ask --quiet sys-kernel/genkernel

genkernel initramfs --kernel-config=/usr/src/linux/.config

emerge --ask --quiet --verbose sys-boot/grub:2

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=TmpGen

grub-mkconfig -o /boot/grub/grub.cfg

# 这两步也很可能出错

# 设置时钟

nano -w /etc/conf.d/hwclock

clock="local"

# 修改主机名

nano -w /etc/conf.d/hostname

hostname={主机名}

nano -w /etc/hosts

127.0.0.1    localhost {主机名}
::1            localhost {主机名}

# 配置有线网络

emerge --ask --quiet --noreplace net-misc/netifrc

ifconfig  # 查看本机网络设置

cd /etc/init.d

ln -s net.lo net.enp5s0 # enp5s0是我机器上的设定,诸位按自己的机器设置修改

rc-update add net.enp5s0 default

emerge --ask --quiet net-misc/dhcpcd

# 安装无线网络工具

emerge --ask net-wireless/iw  # Open或WEP网络

emerge --ask net-wireless/wpa_supplicant  # WAP或WAP2网络

# 设置root密码

passwd

# 不要忘记哦

2.4重启机器

通过以上步骤基本上将过渡系统安装好了,现在重启机器验证下能否进入。

# 退出chroot环境

exit

umount -a

reboot

如果能引导进入上面所配置的系统,那么可以进入此系统,以此为基础安装在ZFS上的目标系统。

如果进系统失败,可以先把sda4~6格式化掉,再按上述步骤再做一遍。

3.安装在ZFS上的Gentoo系统

3.1安装准备

进入上述安装的过渡系统,先创建zfs分区。

# 加载zfs模块

modprobe zfs

# 查看块设备的id

ls -l /dev/disk/by-id

# 可以得到类似下面的结果

lrwxrwxrwx 1 root root  9 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC -> ../../sda
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 Mar 26 00:40 ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part6 -> ../../sda6
lrwxrwxrwx 1 root root 13 Mar 26  2023 nvme-J.ZAO_5_SERIES_256GB_SSD_MHA235T002396 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Mar 26  2023 nvme-J.ZAO_5_SERIES_256GB_SSD_MHA235T002396-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Mar 26  2023 nvme-J.ZAO_5_SERIES_256GB_SSD_MHA235T002396-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 13 Mar 26  2023 nvme-uuid.3bdb662a-440d-ed11-b13b-5901b2ee7c69 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Mar 26  2023 nvme-uuid.3bdb662a-440d-ed11-b13b-5901b2ee7c69-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Mar 26  2023 nvme-uuid.3bdb662a-440d-ed11-b13b-5901b2ee7c69-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root  9 Mar 26  2023 usb-Teclast_CoolFlash_8960281250321381726-0:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Mar 26  2023 usb-Teclast_CoolFlash_8960281250321381726-0:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Mar 26 00:40 wwn-0x50014ee2154caec4 -> ../../sda
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 Mar 26 00:40 wwn-0x50014ee2154caec4-part6 -> ../../sda6

# 创建zfs分区

zpool create -f -o ashift=12           \

                -o cachefile-/etc/zfs/zpool.cache        \
             -O acltype=posixacl       \
             -O relatime=on            \

             -O atime=off                \
             -O xattr=sa               \
             -O dnodesize=legacy       \
             -O normalization=formD    \
             -O mountpoint=none        \
             -O canmount=off           \
             -O devices=off            \
             -O compression=lz4       \
             -O dedup=off               \

               -m none                 \
             -R /mnt/gentoo             \
             zgenroot         \

             /dev/disk/by-id/ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part3    

# 如果想给zfs设置密码,可以使用

-O encryption=on -O keyformat=passphrase

zfs create -o mountpoint=none -o canmount=off zgenroot/ROOT

zfs create -o mountpoint=/ zgenroot/ROOT/default

# 配置zpool bootfs

zpool set bootfs=zgenroot/ROOT/default zgenroot

挂载其它文件系统

mkdir -p /mnt/gentoo/boot

mount /dev/disk/by-id/ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part2 /mnt/gentoo/boot

mkdir -p /mnt/gentoo/boot/efi

mount /dev/disk/by-id/ata-WDC_WD10SPSX-22A6WT0_WD-WXA2A52FUKHC-part1 /mnt/gentoo/boot/efi

复制zfs缓存

mkdir -p zgenroot/etc/zfs
cp /etc/zfs/zpool.cache zgenroot/etc/zfs/zpool.cache

复制已下载的文件

cd /

cp -v starge3-*.xz /mnt/gentoo/

cd /mnt/gentoo

tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

mkdir -p -v /mnt/gentoo/etc/portage/repos.conf

cp -v /etc/portage/repos.conf/gentoo.conf /mnt/gentoo/etc/portage/repos.conf/

mkdir -p /mnt/gentoo/var/cache/distfiles

cd /var/cache/distfiles

cp -v *.* /mnt/gentoo/var/cache/distfiles/

进入要安装的系统:

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
#mount --make-rslave /mnt/gentoo/sys (不使用systemd,所以注释掉)
mount --rbind /dev /mnt/gentoo/dev
#mount --make-rslave /mnt/gentoo/dev (不使用systemd,所以注释掉)

chroot /mnt/gentoo /bin/bash
mkdir -p /var/db/repos/gentoo          # 只用一次,后面进chroot不需要
env-update                                  # 只用一次,后面进chroot不需要
source /etc/profile                          # 只用一次,后面进chroot不需要
export PS1="(chroot) ${PS1}"         # 可以不用这句

进行如下设置:

nano /etc/portage/package.use/zfs
sys-fs/zfs dist-kernel
sys-fs/zfs-kmod dist-kernel

nano  /etc/portage/package.use/grub

sys-boot/grub libzfs

nano  /etc/portage/package.accept_keywords/zfs

sys-fs/zfs amd64
=sys-fs/zfs-999 **
sys-fs/zfs-kmod amd64
=sys-fs/zfs-kmod-999 **

系统设置:

nano -w /etc/hosts

# 添加github的host

185.199.108.133        raw.githubusercontent.com
185.199.109.133        raw.githubusercontent.com
185.199.110.133        raw.githubusercontent.com
185.199.111.133        raw.githubusercontent.com

emerge-webrsync # 更新软件列表

eselect profile list 

eselect profile set 9  # 这路要装KDE

echo "Asia/Shanghai" > /etc/timezone    

emerge --config sys-libs/timezone-data
hwclock --systohc
date MMDDhhmmYY      #设为当前时间

# 生成/etc/fstab配置

emerge --ask --quiet genfstab

genfstab -U -p / >> /etc/fstab

# 这里要把/etc/fstab中zfs的分区信息注释掉 

blkid >> /etc/fstab

nano -w /etc/locale.gen:  

en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK 
zh_CN.UTF-8 UTF-8

locale-gen

eselect locale list 

eselect locale set en_US.UTF-8

env-update && source /etc/profile  # 后面不需要了

export PS1="(chroot) ${PS1}"

3.2安装核心

下载核心代码。因为这里是要真正使用的系统,所以不使用bin,而是下载代码核心的代码自己编译(这才是使用Gentoo的精髓啊!

emerge --ask --quiet  sys-kernel/gentoo-sources

eselect kernel set 1

emerge --ask --quiet --verbose sys-kernel/linux-firmware

emerge --ask --quiet sys-kernel/genkernel

emerge --ask --quiet sys-fs/xfsprogs

emerge --ask --quiet sys-fs/dosfstools 

emerge --ask --quiet zfs

emerge --ask --quiet sys-firmware/intel-microcode sys-apps/iucode_tool

iucode_tool -S

iucode_tool -S -l /lib/firmware/intel-ucode/*

 cp -v /usr/share/genkernel/arch/x86_64/generated-config /usr/src/linux/.config

cd /usr/src/linux

# 配置核心,也是容易翻车的步骤

make menuconfig

make -j20

make modules_install

make install

emerge --ask  zfs-kmod

这里在编译核心后安装zfs-kmod,是因为zfs-kmod需要检测存在的核心。而且zfs0kmod要连接github下载,很有可能失败,所以需要去掉--quiet注意观察。如果kmod安装失败,会在引导时找不到分区。

rm -rf /etc/hostid && zgenhostid

mkdir -p /etc/kernels

cp -v .config /etc/kernels/kernel-config-<内核版本号>-gentoo-x86_64

genkernel --install initramfs

rc-update add zfs-import boot

rc-update add zfs-mount boot

rc-update add zfs-share default

rc-update add zfs-zed default

emerge --ask --quiet --verbose sys-boot/grub:2

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GenZFS

nano -w /etc/default/grub

GRUB_CMDLINE_LINUX="dozfs=cache quiet iommu=pt nowatchdog"
GRUB_CMDLINUX_LINUX_DEFAULT="spectre_v1=off spectre_v2=off spec_store_bypass_disable=off pti=off"

 grub-mkconfig -o /boot/grub/grub.cfg

如上面装过渡系统那样配置网络和设置密码。

emerge --ask --quiet sys-power/acpid

rc-update add acpid default

emerge --ask --quiet sys-power/thermald

rc-update add thermald

3.3重启

#退出chroot

exit 

umount /mnt/gentoo/boot/efi

umount /mnt/gentoo/boot

zfs umount -a

zpool export -f zgenroot

reboot

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值