在X86平台安装Gentoo

基于X86的Gentoo安装

序言:首先这里我尝试避免污染宿主机的系统所以我在Ubuntu18.04上的虚拟机中安装Gentoo。然后由于组长要求,必须在物理机中进行实现,故而又将虚拟机中的系统挂载到物理机,然后继续配置。但是一直不能启动,本文将针对我所遇到的问题以及详细的安装过程会有一个清晰的说明。
安装的整个过程可以参考文档
https://www.cnblogs.com/duacai/p/9236575.html
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base/zh-cn
但是第一篇文档上有很多错误之处,这里我参考了官方的文档并将其改正

开始在VMware中安装Gentoo

首先我是在VMware中进行的安装
配置网络,一般在设置的时候,因为已经为NAT 的模式所以虚拟机中是有网络的。
不过还是要查看一下
首先准备一个硬盘进行分区

mkfs.vfat -F32 /dev/sdb1          // 尽量格式化成FAT32
mkfs.ext4 /dev/sdb2

mount /dev/sdb2 /mnt/gentoo
mkdir -p /mnt/gentoo/boot      
mount /dev/sdb1 /mnt/gentoo/boot

之后是在虚拟机中进行操作。
我用的iso文件地址为http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/找到最新的。
stage文件的地址http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/
下载最新的即可。
进入到虚拟机中的livecd中,然后进行后续操作。

ifconfig
ping baidu.com

如果ping不通,则要进行网络的设置

ifconfig enp2s0 inet 192.168.3.167 netmask 255.255.255.0 broadcast 192.168.3.255

如果这时再ping baidu.com还是ping不通的话,则应该是域名服务器的问题
将IP设置为114.114.114.114(公共IP)

nano -w /etc/resolv.conf
nameserver 114.114.114.114

之后是硬盘的分区,这里我选择的是UEFI分区的模式,因为我最后的目的是要在真实的物理机上安装好Gentoo,但是虚拟机的BIOS是MBR的,这里一定要做好区分。

  parted /dev/sda
  mklabel gpt
  unit mib
  mkpart primary 1 513  // 设置GPT磁盘ESP分区大小,我这里是513-1M
  name 1 boot
  mkpart primary 513 -1  // 设置根分区,如果你需要其它分区请自行解决,这里我没有设置/boot分区,-1表示到最后
  name 2 rootfs
  set 1 boot on
  print
  q

下载并解压根文件系统

cd /mnt/gentoo/  // 注意切换到新系统挂载点根目录,从现在起,你操作新系统的文件都要加上/mnt/gentoo/路径,否则只是操作安装CD的路径,重启就没了
wget "http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-20190923.tar.bz2"
tar xvjpf stage3-amd64-systemd-*.tar.bz2 --xattrs --numeric-owner  // 解压stage3,默认会解压到当前目录,所以你要确保执行了cd /mnt/gentoo/

注意这里不要按照文档上面的要求增加USE变量,因为在USE变量在make.defaults文件中已经存在,如果添加了文档中的USE,则下载grub时出现错误。

nano /mnt/gentoo/etc/portage/make.conf  // 这里使用nano编辑器,使用方向箭头移动,修改好后按ctrl+x退出,这时它会提示你是否保存,按y保存(按n就是不保存了),如果打开的是已有文件它会显示原有路径,直接回车即可保存到显示目录
-march=native   // 修改变量,CFLAGS="-O2 -pipe -march=native" -march=native是让它自己去识别cpu类型,你也可以设置成具体的cpu类型
MAKEOPTS="-j9"  // 增加变量,设置编译线程数,我的是intel 4核8线程的,所以设置成8+1

更新源地址
这里选择网易的163源即可

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

拷贝repos.conf和gentoo.conf到新系统

mkdir /mnt/gentoo/etc/portage/repos.conf/
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
cp -L /etc/resolv.conf /mnt/gentoo/etc/

至此,可以挂载到一个空文件下。

在物理机中安装

关闭虚拟机并在设置中将其挂载到宿主机的一个文件夹下,然后进行打包操作,然后卸载,并将硬盘挂载到该文件夹然后将之前打包好的文件在文件夹中进行解压即可,最后再尝试看是否可以进入chroot,如果可以,则证明制作的文件系统没有问题。
我的硬盘分区如下:
在这里插入图片描述
在这里插入图片描述
因为BIOS是UEFI ,所以在格式化的时候要注意,区分是UEFI还是MBR要在BIOS 中查看,一般BIOS会有明确的说明UEFI或者有UEFI这个选项

fdisk /dev/sdb
n   增加新的分区
t   设置分区类型
mkfs.fat -F 32 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3

在这里插入图片描述在这里插入图片描述

tar -jcvf /home/cao/Desktop/gentoo.tar.gz ./*
umount /mnt
mount /dev/sdb1 /media/cao/gentoo/boot
mount /dev/sdb2 /media/cao/gentoo
cd /media/cao/gentoo
cp /home/cao/Desktop/gentoo.tar.gz .  //把压缩好的包拷贝到当前文件夹下。
tar -xf gentoo.tar.gz

之后看是否可以进入chroot

cd .. //要返回gentoo的上一级
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
chroot /gentoo /bin/bash 

在这里插入图片描述
如果网络不能使用

ifconfig enp2s0 inet 192.168.3.167 netmask 255.255.255.0 broadcast 192.168.3.255
vim /etc/resolv.conf 
将nameserver 改为114.114.114.114

更新软件库

emerge-webrsync

设置profile

eselect profile list
默认选择default/linux/amd64/17.1/systemd (stable) *
如果不是则
eselect profile set 

更新系统

emerge --ask --update --deep --newuse @world 

在配置make.conf文件时,不要添加USE变量,不然在下载grub时会一直提示错误,然后在make.conf文件后进行如下操作,保证genkernel下载成功

nano -w /etc/portage/make.conf
末尾添加
ACCEPT_LICENSE="*"

设置时区

ls /usr/share/zoneinfo          // 可以使用该命令查看有哪些时区
echo "Asia/Shanghai" > /etc/timezone   // 设置时区为上海
emerge --config sys-libs/timezone-data  // 更新时区配置

后面不用设置字符集,用它默认的即可
更新环境

env-update

安装内核,并查看

emerge --ask sys-kernel/gentoo-sources
eselect kernel list

在这里插入图片描述
编译内核,这里有两种方式,一种是手动编译,另外一种是自动编译,官方提供了两种方式,并且更加支持手动编译,这里只需要参考官方的文档即可。而我采用的是手动编译。
首先编译内核的时候,要收集一些安装的信息,这个要通过安装lspci命令的

emerge --ask sys-apps/pciutils

之后要进入内核的源码目录进行操作

cd /usr/src/linux
make menuconfig

激活一些必要的选项,这里直接参考官方的文档中的设置选项进行操作即可。注意这里不应该参考第一篇文档中的内核配置,更不能使用它的config文件,因为不同的人的需求是不同的,如果盲目使用它的很可能导致错误,故而使用,直接参考官方的文档即可。
设置完成之后编译安装

make -j4 && make modules_install
make install //这个操作会将内核的镜像拷贝到/boot中

为了保证安装的系统可以正常启动必须还要安装一个内存初始化的文件系统initramfs
所以必须要下载genkernel

emerge --ask sys-kernel/genkernel
genkernel --install initramfs
ls /boot/initramfs*

如果按照上述要求装完之后,安装genkernel时提示use changes问题
在这里插入图片描述
采用
dispatch-conf
进入后键入u即可,然后重新执行。
在这里插入图片描述如上图所示,这是genkernel下载失败时候的提示信息,这里我们只需要按照我上面讲的在/etc/portage/make.conf的文件中末尾添加ACCEPT_LICENSE="*"即可,这个语句会禁用portage LICENSE的检查。
只后修改fstab文件

nano -w /etc/fstab

在这里插入图片描述之后可以选择安装一些软件比如vim等等

emerge app-editors/vim
emerge --ask sys-process/cronie
emerge --ask sys-apps/mlocate
emerge --ask net-misc/dhcpcd
emerge --ask net-dialup/ppp
emerge --ask net-misc/ntp
hwclock --show                 // 显示硬件时间
hwclock --hctosys               // 硬件时间同步到系统
hwclock --systohc               // 系统时间同步到硬件

之后配置引导加载工具grub,官方文档提供了多个加载工具但是我们这里使用的是大多是情况下引导工具grub2
这里经常出现的问题我在前面也有解释,就是不要随意添加USE变量。否则会有use flags:…一大堆错误。而且注意这里要根据你的BIOS 的类型来进行有针对的安装,我的是UEFI的所以安装如下,而且注意我这里所有的操作都是建立在你在进行任何命令之前都要保证挂载成功,不然还是会提示错误

echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge --ask --verbose sys-boot/grub:2
grub-install --target=x86_64-efi --efi-directory=/boot

如果是MBR类型

emerge --ask --verbose sys-boot/grub:2
grub-install /dev/sdb

再一次配置
接下来,基于用户在/etc/default/grub文件和/etc/grub.d中特别配置的脚本文件来生成GRUB2。在大多数场景中,不需要由用户来配置,GRUB2就可以自动检测出哪个内核用于引导(位于/boot/中最高的那一个)以及根文件系统是什么

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

至此安装过程全部完成
然后设置密码进行登录

passwd //设置root用户的密码
useradd -m -G users,wheel,audio -s /bin/bash cao //添加自己的用户
root #passwd cao

Password: (输入cao的密码)
Re-enter password: (重复输入密码)

最后

exit //退出chroot
umount /dev/sdb1
umount /dev/sdb2
umount /dev/sdb3
reboot

在BIOS中设置以你的硬盘作为启动盘进行启动,这样就可以进入到Gentoo中。
Gentoo系统安装成功。

附录:常见的一些问题

启动不起来的原因:
缺少initramfs
initrd
以及相应的模块,应为之前进行内核的编译的时候并没有模块编译进内核,所以必须要将相应的模块写在initramfs中。
主要使用的是
在Ubuntu的grub.cfg文件中添加一个选项,这个选项只需要修改名字以及设备号即可。
相关命令

blkid

之后即可进入Gentoo
但是此时Gentoo任然无法使用这时需要Ubuntu的module来启动Gentoo
且Gentoo没有网络,进行网络配置

nano -w /etc/resolv.conf

将nameserver改为114.114.114.114(开放的一个域名)
然后ifconfig enp2s0 本机的一个IP ,网关,

ifconfig enp2s0 down 
ifconfig enp2s0 up 
ifconfig 
dhcpcd

最后尝试ping baidu.com发现可以ping通,网络配置成功。
借用Ubuntu的模块

cp -r 5.0.0-29-generic/ /lib/modules

之后下载genkernel,下载中出现下载不成功的问题,要将其中

nano -w /etc/portage/make.conf
ACCEPT_LICENSE="*"

有时候,将安装好的系统盘,接入到其他的电脑上不一定,能够进入系统,大多数情况昂下,进入了grub rescue模式。碰见此类问题:
1.可以借助另一个系统,chroot进入要修复系统的,然后只需要重新升级或安装grub即可。
2.如果上述问题仍然无法解决,说明系统BIOS识别不了,引导的文件系统格式,比如我的是用UEFI来引导的,故而我就需要采用UEFI的格式。但是当我接入到其他比较老的电脑上的时候,它们的BIOS也支持UEFI但是无法正常启动。原因是由于我的boot分区是FAT32的格式,故而我就采用MBR的方式BIOS无法识别。最后成功进入系统。
修改方式如下:
1.在重新格式化boot分区之前,将里面的内核拷贝到其他文件中备用,只需要拷贝vmlinuz,System.以及另一个文件忘了。但不要拷贝grub,EFI文件。
2.之后重新格式化,并把刚才拷贝出的内核放回。
3.安装grub,注意这里采用MBR的方式。
4.安装成功之后即可进行正常的启动。

由于文件系统错误导致安装grub失败

我的BIOS 是UEFI的,采用MBR的安装方式失败
在这里插入图片描述
一下是我的文件系统本来的格式
在这里插入图片描述
随后我用efi的方式安装grub,但是还是失败原因,是由于UEFI 支持的文件系统的格式为FAT32
在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值