tip: Gentoo 的 wiki 写的非常好,边折腾边学习。
安装
启动
先找个镜像站下载iso文件。然后直接创建个虚拟机
启动。这时会显示一个启动提示符。 此时按Enter键将使用默认的启动选项启动。如果要使用自定义引导选项引导安装媒介,请按照启动选项指定一个内核,然后按Enter键。 在启动提示符下,用户可以按 F1 键显示可用的内核,按 F2 按键显示可用的启动选项。
直接boot: gentoo
Enter
然后显示lived ~ #
说明启动成功
如果网络已配置,lived ~ # ifconfig
命令应该会列出一个或多个网络接口
准备磁盘
分区方案将被使用:
Partition | Description |
---|---|
/dev/sda1 | BIOS boot partition 给bios下grub留的空间 |
/dev/sda2 | Boot partition EFI分区 格式化成fat32格式,不然装gurb出错 |
/dev/sda3 | Swap partition 交换分区 |
/dev/sda4 | Root partition 根分区 |
注意 parted 不像fdisk 不能撤销
root # parted -a optimal /dev/sda /*对这块磁盘分区并优化分区对齐*/
(parted)mklabel gpt /*设置标签,相对于msdos*/
(parted)rm 2 /*删除一个分区*/
(parted)unit mib /*设置操作单位为MB*/
(parted)mkpart primary 1 3 /*创建一个从1mb开始到3mb结束的分区*/
(parted)name 1 grub /*设置第一个分区名字*/
(parted)set 1 bios_grub on /*设置标志*/
(parted)print /*打印当前*/
(parted)mkpart primary 3 131
(parted)name 2 boot
(parted)set 2 boot on /*有这个标志是EFI分区 在UEFI安装时,引导标志将出现在引导分区(ESP)*/
parted)mkpart primary 131 643
(parted)name 3 swap
(parted)mkpart primary 643 -1 /*剩余所有空间*/
(parted)name 4 rootfs
(parted)print
(parted)exit
安装文件系统
root #mkfs.vfat -F 32 /dev/sda2
root #mkfs.ext4 /dev/sda4
初始化并激活swap分区
root #mkswap /dev/sda3
root #swapon /dev/sda3
挂载root分区
root #mount /dev/sda4 /mnt/gentoo /*目录自己建*/
(可选)如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:
root #chmod 1777 /mnt/gentoo/tmp
睡觉去了
安装stage包
在/mnt/gentoo/目录下
root #wget http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/stage3-amd64-20181211T214502Z.tar.xz
root #tar xpvf stage3-*.tar.bz2 --xattrs-include='*.*' --numeric-owner /*解压并保持权限*/
确保你使用了同样的参数 ( xpf 和 --xattrs-include='.')。 x表示解开(Extract),v表示详细信息(Verbose)可以用来查看解压缩时发生了什么(可选参数), j 表示使用bzip2解压缩,p 表示保留权限(Preserve permissions),还有f 表示我们要解开一个文件,而不是标准输入。最后,--numeric-owner 被用于确保从tarball中提取的文件的用户和组ID与Gentoo发布工程团队预期的保持一致,即使大胆的用户使用的不是Gentoo官方安装媒介。
配置编译选项
为了优化Gentoo,可以设置一些影响Portage的变量,Gentoo官方支持包管理器。 所有这些变量可以设置为环境变量(使用export),但这不是永久的。 为了保留设置,Portage读入/etc/portage/make.conf文件 ,一个用于Portage的配置文件。
root #nano -w /mnt/gentoo/etc/portage/make.conf
CFLAGS
和 CXXFLAGS
变量分别定义了GCC C和C ++编译器的优化标志。
#CODE CFLAGS 和 CXXFLAGS 变量示例
CFLAGS="-march=native -O2 -pipe"
# Use the same settings for both variables
CXXFLAGS="${CFLAGS}"
chrooting
复制DNS信息,确保即使进入到新环境后网络仍然可以使用。
root #cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ /*--dereference可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己*/
挂载必要的文件系统
Linux的根将变更到新的位置。为了确保新环境正常工作,需要确保一些文件系统可以正常使用。
需要提供的文件系统是:
/proc/ 一个pseudo文件系统(看起来像是常规文件,事实上却是实时生成的),由Linux内核暴露的一些环境信息
/sys/ 一个pseudo文件系统,像要被取代的/proc/一样,比/proc/更加有结构
/dev/ 是一个包含全部设备文件的常规文件系统,一部分由Linux设备管理器(通常是udev)管理
/proc/位置将要挂载到/mnt/gentoo/proc/,而其它的两个都是绑定挂载。字面上的意思是,例如/mnt/gentoo/sys/事实上就是/sys/(它只是同一个文件系统的第二个条目点),而/mnt/gentoo/proc/是(可以说是)文件系统的一个新的挂载。
root #mount --types proc /proc /mnt/gentoo/proc
root #mount --rbind /sys /mnt/gentoo/sys
root #mount --make-rslave /mnt/gentoo/sys
root #mount --rbind /dev /mnt/gentoo/dev
root #mount --make-rslave /mnt/gentoo/dev /*--make-rslave操作是稍后安装systemd支持时所需要的。*/
进入新环境
完成chroot有三个步骤:
- 使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
- 使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
- 更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
root #chroot /mnt/gentoo /bin/bash
root #source /etc/profile
root #export PS1="(chroot) ${PS1}"
挂载 boot 分区
现在已经进入新的环境,必须创建并挂载 /boot 分区。 当编译内核并安装引导加载程序时,这将非常重要:
root #mkdir /boot
root #mount /dev/sda2 /boot
配置portage
# nano etc/portage/make.conf
其中添加内容(此处使用网易开源镜像站):
GENTOO_MIRRORS="http://mirrors.163.com/gentoo/"
从网站安装ebuild 数据库快照
这个快照包含一组文件,包括通知Portage中有关可用软件的标题(用于安装),系统管理员可以选择哪些配置文件,软件包或 profile 特定新闻 (news) 项目等。
root #emerge-webrsync
选择正确的配置文件
root #eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/13.0 *
[2] default/linux/amd64/13.0/desktop
[3] default/linux/amd64/13.0/desktop/gnome
[4] default/linux/amd64/13.0/desktop/kde
...
root #eselect profile set 10
那些想使用systemd作为他们的init系统就应该选择一个在其某个部分中包含了systemd字样的配置文件
更新@world集合老慢了
root #emerge --ask --verbose --update --deep --newuse @world
啥时候能完事啊,我自闭了 4个小时+
配置USE变量
USE是Gentoo为用户提供的最具威力的变量之一。很多程序通过它可以选择编译或者不编译某些可选的支持。例如,一些程序可以在编译时加入对 GTK+或是对Qt的支持。其它的程序可以在编译时加入或不加入对于SLL的支持。有些程序甚至可以在编译时加入对framebuffer的支持(svgalib)以取代X11(X服务器)。
最简单的检查当前活动的USE标记的办法是运行emerge --info并选择以USE开头的那一行:
root #emerge --info | grep ^USE
可以在系统的/usr/portage/profiles/use.desc中找到可用的USE标记的完整描述。
作为示例,我们展示一个支持DVD、ALSA,以及CD录制的基于KDE系统的USE设置:
/etc/portage/make.conf
USE="-gtk -gnome qt5 kde dvd alsa cdr"
时区
为系统选择时区。在/usr/share/zoneinfo/中查找可用的时区,然后写进/etc/timezone文件。
`root #``ls /usr/share/zoneinfo`
假设要选择的时区是Asia/Shanghai:
`root #``echo "Asia/Shanghai" > /etc/timezone`
请避免使用/usr/share/zoneinfo/Etc/GMT*时区,它们的名字并不意味着想要的时区。例如,GMT-8实际上是GMT+8。
接下来,重新配置sys-libs/timezone-data包,将会为我们基于/etc/timezone条目更新/etc/localtime文件。/etc/localtime文件用于让系统的C类库知道系统在什么时区。
root #emerge --config sys-libs/timezone-data
配置地区
大多数用户只想在他们的系统上使用一或两个地区。
Locales 不只是指定用户应该使用与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。
系统应该支持的地区应该在/etc/locale.gen中提到。
root #nano -w /etc/locale.gen
下面的地区是一个示例,展示了同时使用英语(美国)和中文(中国)及附加字符格式(如UTF-8)。
FILE /etc/locale.gen启用US和CN地区及附加字符格式
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK
zh_CN.UTF-8 UTF-8
警告
我们强烈建议使用至少一个UTF-8格式的地区设置,因为有些应用程序可能需要它。
下一步是运行locale-gen。它将生成/etc/locale.gen文件中指定的所有地区。
root #locale-gen
要验证所选择的地区当前可用,运行locale -a
。
等完成后,我们就来设定系统级别的区域设置。我们又一次使用eselect来做这件事,现在使用locale模块。
通过eselect locale list可显示可用的目标:
root #eselect locale list
Available targets for the LANG variable:
[1] C
[2] en_US
[3] en_US.iso88591
[4] en_US.utf8
[5] POSIX
[6] zh_CN
[7] zh_CN.gbk
[8] zh_CN.utf8
[ ] (free form)
通过eselect locale set VALUE可以设定正确的地区:
root #eselect locale set 8
这个还可以通过人工编辑/etc/env.d/02locale文件来完成:
FILE /etc/env.d/02locale手动设置系统地区定义
LANG="zh_CN.UTF-8"
确保设定了一个地区,不然系统会在后面安装中的内核编译和部署其他软件时显示警告和错误。
重新加载环境:
root #env-update && source /etc/profile && export PS1="(chroot) $PS1"
配置Linux内核
安装源码
inux内核是所有发行版的核心。它位于用户程序和系统硬件之间。Gentoo提供给用户一些可选的内核源码。完整的带描述的列表在内核概述页面。
针对基于amd64-系统的Gentoo,建议使用包 sys-kernel/gentoo-sources。
选择一个合适的内核并使用emerge来安装它。
root #emerge --ask sys-kernel/gentoo-sources
这将在/usr/src/中安装Linux内核源码,并有一个符号连接叫作linux将指向安装的内核源码:
root #ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo
现在是时候来配置和编译内核源代码了。有两种方法:
- 手动配置并生成内核。移步wiki
- 一个叫作genkernel的工具用来自动化生成并安装Linux内核。
使用genkernel。它将自动配置并编译内核。
genkernel配置内核的工作原理几乎和安装CD配置的内核完全一致。也就是说当使用genkernel建立内核,系统通常将在引导时检测全部硬件,就像安装CD所做的。因为genkernel不需要任何手动内核配置,它对于那些不能轻松的编译他们自动内核的用户来说是一个理想的解决方案。
现在,我们来看看如何使用genkernel。首先emerge sys-kernel/genkernel这个ebuild:
root #emerge --ask sys-kernel/genkernel
这一步出错了尝试#dispatch-conf
,注意上面命令的输出会教你该做什么
接下来,编辑/etc/fstab文件来使包含有第二个值为/boot/的那条的第一个值指向到正确的设备。如果是按照本手册的分区示例,则这个设备非常像使用ext2文件系统的/dev/sda2。这将使文件中的这一条目看起来像是:
root #nano -w /etc/fstab
/dev/sda2 /boot fat32 defaults 0 2
现在,运行genkernel all来编译内核源码。值得注意的是,使用genkernel编译一个内核将支持几乎全部的硬件,这将使编译过程需要一阵子来完成!
root #genkernel all
...又是漫长等待
一旦genkernel完成,将创建一个内核、全部的模块和初始化内存文件(initramfs)。我们将在文档后面配置引导器的时候使用这个内核和initrd。记下内核和initrd名字作为编辑引导器配置文件的信息。initrd将在后执行硬件检测之后、“真实”系统启动之前立即启动。
root #ls /boot/kernel* /boot/initramfs*
initramfs-genkernel-x86_4.14.83-gentoo
kernel-genkernel-x86_64-4.14.83-gentoo
配置模块
要查看所有可用模块,运行下面的find命令。不要忘记替换“<kernel version>”为刚刚编译的内核版本:
root #find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less
例如,为了自动加载3c59x.ko
模块(它是特定3Com网卡系列的驱动程序),编辑/etc/.-load.d/network.conf
文件并在其中输入模块名称。实际的文件名对于加载程序来说无关紧要。
root #mkdir -p /etc/modules-load.d
root #nano -w /etc/modules-load.d/network.conf
配置系统
文件系统信息
创建/etc/fstab
文件
/etc/fstab
文件使用一种特殊语法格式。每行都包含六个字段。这些字段之间由空白键(空格键,tab键,或者两者混合使用)分隔。每个字段都有自己的含意:
第一个字段显示要挂载的特殊 block 设备或远程文件系统。 有几种设备标识符可用于特殊块设备节点,包括设备文件路径,文件系统标签,UUID,分区标签以及UUID。
第二个字段是分区挂载点,也就是分区应该挂载到的地方
第三个字段给出分区所用的文件系统
第四个字段给出的是挂载分区时mount命令所用的挂载选项。由于每个文件系统都有自己的挂载选项,我们建议你阅读mount手册(man mount)以获得所有挂载选项的列表。多个挂载选项之间是用逗号分隔的。
第五个字段是给dump使用的,用以决定这个分区是否需要dump。一般情况下,你可以把该字段设为0(零)。
第六个字段是给fsck使用的,用以决定系统非正常关机之后文件系统的检查顺序。根文件系统应该为1,而其它的应该为2(如果不需要文件系统自检的话可以设为0)。
Gentoo 提供默认的/etc/fstab不是有效的fstab
root #nano -w /etc/fstab
分区表和UUIDs
MBR(BIOS)和GPT都支持“文件系统”标签和“文件系统”的UUID。
文件系统标签和UUID由LABEL和UUID前缀标识,并且可以通过blkid命令查看:
root #blkid
/dev/sda2 | /boot | fat32 | defaults,noatime | 0 2 |
---|---|---|---|---|
/dev/sda3 | none | swap | sw | 0 0 |
/dev/sda4 | / | ext4 | noatime | 0 1 |
/dev/cdrom | /mnt/cdrom | auto | noauto,user | 0 0 |
配置网络
在Gentoo Linux安装时,网络已经配置。然而,这是安装的安装光盘本身的配置,并不是新的系统环境的网络配置。现在你所要设置的是Gentoo系统的永久网络配置。
具体这里好多繁琐的查看wiki
配置引导加载程序
移步wiki更详细。。。。
完成就装好了
不更了就到这吧