从零开始安装Gentoo

前段时间搞过一次Gentoo,最终以失败告终,现在正好有时间卷土重来。
配置过程相当复杂,需要很强的耐心,但整个过程下来后,会学到很多东西。
官方文档 参考@Gary Wu

  • 准备工作
    • 下载minimal镜像
官方镜像地址:http://distfiles.gentoo.org/releases/
网易镜像地址:http://mirrors.163.com/gentoo/releases/
    
截止目前最新的是install-amd64-minimal-20180222T214502Z.iso

minimal镜像和stage3下载地址:
http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-stage3-amd64/

portage下载地址: 
http://mirrors.163.com/gentoo/releases/snapshots/current/portage-20180220.tar.bz2 

注:如果网络较好可以通过网络下载stage3和portage。如果提前下载需要拷贝到U盘里,需要的时候挂载解压。
我这边网络比较好,选择在安装的过程中从网上下载。

- 制作引导U盘

把iso刻录到U盘里,用来启动引导,这里推荐使用UltraISO,启动->写入硬盘镜像
- 记录服务器硬件配置
因为在安装的过程中要自己编译内核,需要配置一些硬件驱动信息,主要是CPU、显卡、网卡,可以自行查看,配置选好的话可以节省很多编译时间和内核资源。

- 安装基本系统
从U盘启动,在boot处输入: gentoo dopcmcia ,根据引导进入命令行模式,接下来安装基本系统。
- 分区
建议分区规划
bios_grub        BIOS启动分区,官方是2M,我这里给9M  
boot    300M     启动系统目录,挂载目录: /mnt/gentoo/boot
swap   8192M     
/     剩余All      挂载目录: /mnt/gentoo

注:系统使用BIOS引导方式,所以不需要EFI分区

分区格式(MBR或GPT)直接影响到后边的GRUB引导,本例是MBR分区(BIOS引导方式)
livecd # parted
select /dev/sda   #选择操作的磁盘
mklabel gpt    #分区格式使用MBR
mkpart primary 1M 10M   #BIOS启动分区必须有,否则grub安装出错
name 1 grub
set 1 bios_grub on   #设置BIOS分区可启动

mkpart primary 10M 310M   #boot系统分区
name 2 boot
set 2 boot on    #设置boot分区为可启动

mkpart primary 310M 8502M   #swap分区
name 3 swap
mkpart primary 8502M -1  #剩余全部给根分区
name 4 bootfs
p     查看分区
quit  退出parted
----------------------------------------------
格式化
mkfs.ext2  /dev/sda1  格式化预留空间分区
mkfs.ext2  /dev/sda2  格式化boot分区
mkswap /dev/sda3        格式化swap分区
mkfs.ext4 /dev/sda4     格式化根分区
----------------------------------------------
挂载到/mnt/下
mount /dev/sda4 /mnt/gentoo   先挂载根分区
mkdir -p /mnt/gentoo/boot  创建boot挂载目录
mount /dev/sda2 /mnt/gentoo/boot  挂载boot
swapon /dev/sda3   挂载swap
分区相关-知识点总结:

(1)如果是MBR分区的磁盘,使用以下方法创建ESP:
parted创建的boot_grub和boot分区, 使用mkfs.ext2格式化
-----------------------------------------------------------------------------------------------
(2)关于parted set命令的flag类型,可参考官方文档: https://www.gnu.org/software/parted/manual/html_node/set.html

- 配置网络
配置网络主要是用来下载portage和stage,如果已经下载到U盘里,直接挂载U盘拷贝到/mnt/gentoo/os目录下。
使用如下命令来配置网络:
ifconfig   查看网络标识
net-setup eno16777728  根据提示输入IP地址、broadcast、netmask、gateway、DNS和dns search suffix地址(如:qq.com)
使用ping qq.com来测试网络是否可用

官方网络配置参考:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Networking#Manual_network_configuration
开启ssh,配置后边的东西会方便很多,比如:命令粘贴或文件粘贴
/etc/init.d/sshd start  #启动ssh服务
passwd root   #修改root密码

此时就可以使用xshell连接了
使用links命令把portage和stage下载到/mnt/gentoo里
cd /mnt/gentoo/  #切换到挂载的根分区下载包(只有这个有大空间)
links mirrors.163.com/gentoo
注: stage在releases/x86/current-iso/目录下; portage在snapshots/目录下

#解压(按照下面顺序解压)
xz -d stage3-amd64-20180225T214502Z.tar.xz && tar -xf stage3-amd64-20180225T214502Z.tar  
tar -xjf portage-20180220.tar.bz2 -C /mnt/gentoo/usr/
- 配置make.conf
为了优化Gentoo,必须在软件编译的时候指定某些参数,这样编译出来的程序运行效率将非常高,系统在编译用到的参数就在make.conf里,文件路径是/mnt/gentoo/etc/portage/make.conf.
Gentoo给了我们一个配置的sample在/mnt/gentoo/usr/share/portage/config/make.conf.example,他里面讲的很详细,下面的是我的make.conf。
vi /mnt/gentoo/etc/portage/make.conf

#USE用于控制软件的安装
USE="bindist mmx sse sse2"  
#这两个变量使用相同的值,这两个变量定义gcc和c++编译器的优化
CFLAGS="-march=native -mtune=native -O2 -pipe" 
CXXFLAGS="${CFLAGS}" 
#指定gcc同时编译的数量,一般是CPU个数(或核心数)+1
MAKEOPTS="-j9" 

注:"-march=native"参数,native意思是让系统自动检测cpu型号进行配置
- 进入新环境
接下来就可以进入新环境/mnt/gentoo, 在chroot进入新环境前需要做一些设备的挂载和DNS文件复制
cp -L /etc/resolv.conf /mnt/gentoo/etc/
mount -t proc none /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进入新环境,并更新环境变量
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile

为了使portage里的软件保持最新,最好同步一下
emerge --sync   
注:如果同步出错,需要检查/etc/portage/make.conf文件中的参数
Gentoo中除了USE和CFLAGS用于优化外还有一个重要的profile,这个是Gentoo自带的配置文件,我们只要选择合适的就行了。

eselect profile list   #列出所有的子版本(带*号的是默认选项)
  [1]   default/linux/amd64/13.0 (stable)*
  [2]   default/linux/amd64/13.0/selinux (dev)
  [3]   default/linux/amd64/13.0/desktop (stable)
  [4]   default/linux/amd64/13.0/desktop/gnome (stable)
  [5]   default/linux/amd64/13.0/desktop/gnome/systemd (stable)
  ......

eselect profile set 12  #选择对应版本

- 编译内核
选择一个内核并进行安装
emerge --ask sys-kernel/gentoo-sources

进入内核源码
cd /usr/src/linux

手动配置内核
make menuconfig

注:make menuconfig显示错误“Your display is too small to run Menuconfig!”
如果在终端执行 make menuconfig ,显示错误:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[1]: *** [menuconfig] Error 1
make: *** [menuconfig] Error 2
表示xshell终端窗口太小。把终端窗口适当的调大(或是直接最大化)就行了。


注:内核的配置可以参考官方文档:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Kernel

- 内核:启用devtmpfs支持
作用:用来挂载/dev,以便在启动过程中使用关键设备文件

Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
- 内核: 启用SCSI磁盘支持
Device Drivers --->
   SCSI device support  --->
      <*> SCSI disk support
- 内核: 选择必要的文件系统
建议常用的文件系统格式都选择上,免得用的时候抓瞎
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
- 内核: 选择PPPoE必要的驱动程序

Device Drivers --->
  Network device support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports
- 内核: 激活SMP支持
作用:用于支持多内核存在,用来在多个内核间进行切换

Processor type and features  --->
  [*] Symmetric multi-processing support
 - 内核: 启用输入设备的USB支持
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    <*>     OHCI HCD (USB 1.1) support

- 内核: 选择处理器类型和特点
Processor type and features  --->
   [ ] Machine Check / overheating reporting 
   [ ]   Intel MCE Features
   [ ]   AMD MCE Features
   Processor family (AMD-Opteron/Athlon64)  --->
      ( ) Opteron/Athlon64/Hammer/K8
      ( ) Intel P4 / older Netburst based Xeon
      ( ) Core 2/newer Xeon
      ( ) Intel Atom
      ( ) Generic-x86-64
Executable file formats / Emulations  --->
   [*] IA32 Emulation

- 内核: 启用对GPT的支持(用于支持GPT分区)
-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support
- 内核: 启用对UEFI方式引导系统的支持
注:如果不启用,则系统不能通过UEFI方式引导

Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    [*]     EFI mixed-mode support

Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs


编译并安装模块
make && make modules_install

内核编译完成后,使用如下命令将内核镜像复制到/boot/目录中
make install
- 配置系统
emerge app-editors/vim    #安装vim

- 配置fstab

vim /etc/fstab
/dev/sda4  /    ext4  defaults 1 1             #配置挂载根分区
/dev/sda3  none  swap  sw  0 0                 #配置挂载swap
/dev/sda2  /boot ext2  noauto,noatime    1 2    #配置挂载boot分区

注: 生产环境下,最前面的/dev/sda1、sda2、sda3要通过blkid命令替换成对应的UUID
- 配置主机名
vim /etc/conf.d/hostname

hostname =“gentoo”  #将主机名变量设置为所选主机名
- 配置网络
这次是配置的系统网络,而非LiveCD的网络
emerge --ask --noreplace net-misc/netifrc


vi /etc/conf.d/net   #配置静态IP
config_eth0="10.0.10.100 netmask 255.255.255.0 brd 10.0.10.255"
routes_eth0="default via 10.0.10.1"

注:如果系统自动获取IP则进行如下配置
config_eth0="dhcp"
- 系统启动时激活网卡配置
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

排错
如果在启动系统后,我们发现有关网络接口名称(目前记录为eth0)的假设是错误的,那么执行以下步骤来解决这个问题:
使用正确的接口名称更新/etc/conf.d/net文件(enp3s0而不是eth0)。
创建新的符号链接(如/etc/init.d/net.enp3s0)。
删除旧的符号链接(rm /etc/init.d/net.eth0)。
将新的添加到默认运行级别。
使用rc-update del net.eth0默认值删除旧的。
- 定义hosts文件
vim  /etc/hosts
127.0.0.1 gentoo.homenetwork gentoo localhost   #这定义了当前系统并且必须设置

- 系统信息

使用passwd命令设置root密码。

- 配置rc.conf文件
作用: Gentoo使用/etc/rc.conf来配置系统的服务,启动和关闭。

打开/etc/rc.conf并享受文件中的所有注释。查看设置并在需要的地方进行更改。
- 中文语言支持
vim /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
#把需要的项前面的#号去掉

执行
locale-gen

- 修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone

#设置硬件时间为本地,不然会多8个小时
hwclock -w --localtime
- 安装系统日志记录器
作用:提供传统的系统日志守护进程
emerge --ask app-admin/sysklogd  
rc-update add sysklogd default

- 安装crond定时任务
作用:cron守护进程执行预定的命令。如果需要定期执行某些命令(例如每天,每周或每月),这非常方便。
emerge --ask sys-process/cronie
rc-update add cronie default

如果使用dcron或fcron,则需要执行额外的初始化命令:
crontab /etc/crontab

- 远程访问
rc-update add sshd default     #添加ssh开机自启动
- 文件索引
作用:为了索引文件系统以提供更快的文件位置功能
emerge --ask sys-apps/mlocate

- 文件系统工具

作用: 用于检查文件系统完整性,创建其他文件系统等,按需安装

emerge     sys-fs/e2fsprogs     用于管理Ext2, Ext3, EXT4
emerge  sys-fs/xfsprogs      用于管理XFS
emerge  sys-fs/reiserfsprogs 用于管理ReiserFS
emerge  sys-fs/jfsutils      用于管理JFS
emerge  sys-fs/dosfstools    用于管理VFAT(如:FAT32、NTFS等)
emerge  sys-fs/btrfs-progs   用于管理Btrfs
- 配置GRUB引导
(1)修改vim /etc/portage/make.conf
添加:
# Both UEFI and PC
GRUB_PLATFORMS="efi-64 pc"

(2)MBR分区-BIOS方式引导
emerge --ask sys-boot/grub:2

(3)安装到MBR。假定第一个(系统引导的)磁盘是/dev/sda
grub-install /dev/sda

(4)自动生成grub2配置
grub-mkconfig -o /boot/grub/grub.cfg   

(5)保险起见再次执行一次这个命令
   grub-install /dev/sda
  • 现在基本系统安装完成,卸载分区,重启。
exit
umount -l /mnt/gentoo/dev
umount -l /mnt/gentoo/proc
umount -l /mnt/gentoo/sys
umount -l /mnt/gentoo
reboot
  • 故障处理
Grub引导正常,但启动系统过程中,出现 LFS kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)
原因:
(1)进入LiveCD,挂载根和boot分区,然后修改修改/etc/fstab文件
注:一律使用uuid替代/dev/sdx

(2)内核编译的时候没有添加相应的硬件模块,建议只增不减。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容