更多分享内容可访问我的个人博客

https://www.niuiic.top/

Gentoo 教程目录


本文介绍 gentoo 基本系统的一般安装流程。图形界面的安装配置将在后面的文章中介绍。

刻录 gentoo 安装镜像

访问清华大学开源软件镜像站。选择合适的架构,下载 gentoo 安装镜像。

虚拟机不需要刻录。u 盘的刻录步骤很简单,不再赘述。

开启网络与 ssh

  • 有线网卡与虚拟机

直接dhcpcd即可

  • wifi
# 查看无限网卡名称及状态
ip a# 若无限网卡未打开,则开启
ip link set interface_name up# 查看可用的wifi
# 建议直接从其他设备上查看wifi名称,不必从本地扫描搜索# 生成wifi配置
wpa_passphrase 网络 密码 > 文件# 连接wifi
wpa_supplicant -c 文件 -i 接口 &# 自动分配ip地址
dhcpcd &
  • 开启 ssh
# 开启ssh
/etc/init.d/sshd start
# 设置livecd密码
passwd
# 注意远程连接时用户名不是livecd,而是root

磁盘分区

详见

gentoo wiki
gentoo handbook

由于此处分配分区将牵扯到后面 fstab 的配置,如果你对此完全不了解,建议按最常规的方式划分。如果你有一台现成的 linux,可以仿照其分区,可以帮助后面配置 fstab。

另外参考你的电脑配置。内存与交换空间之和(单位 G)最好大于 CPU 总线程数。

以下是 GPT 格式分区,引导方式为 EFI。

fdisk -l
# 注意以下磁盘名nvme0n1,对于不同规格的硬盘不同
fdisk /dev/nvme0n1
g
# 分区,具体操作略
w
# 注意以下分区格式将关系到部分软件,尤其是grub的安装配置。因此必须慎重选择。
# 制作引导分区
mkfs.fat -F32 /dev/nvme0n1p1
# 制作主分区
mkfs.ext4 /dev/nvme0n1p2
# 制作交换分区
mkswap /dev/nvme0n1p3
# 启用交换
swapon /dev/nvme0n1p3

分区完毕后将主分区挂在到 livecd 提供的挂载点上。

mount /dev/nvme0n1p2 /mnt/gentoo

获取基础编译环境

上述步骤已经为 gentoo 系统开辟了空间,下面将正式进入系统的编译安装阶段。

由于 gentoo livecd 并不携带完整的编译环境,因此我们需要先往系统空间中放一个现成的编译环境,即 gentoo 基础编译环境。

再次访问清华镜像站。

Gentoo 的 stage3 包囊括了整套编译环境以及绝大多数 gentoo 基础工具。

Gentoo stage3 包的类型包括但不限于以上几种。根据你所需要的桌面环境,查看其对应的 gentoo wiki,做出选择。其中无 systemd 表示使用 OpenRC。nomultilib 表示仅支持 64 位,一般不建议选择。

本教程以 systemd kde 为例,因此选择下载以下几个包至/mnt/gentoo

下载完毕后使用sha512sum -c stage3-amd64-*.tar.xz.DIGESTS校验文件,出现两个 ok 和两个 failed 为正常。并继续使用tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner解压文件。

设置编译选项

配置/mnt/gentoo/etc/portage/make.conf

这是整个安装过程中最核心、最重要的一步。详情参考Gentoo wiki以及gentoo doc。

此处不再对大部分配置进行说明,仅给出笔者第一次安装 gentoo 时的配置(虽不完美,但在当时不存在错误)。只可参考,不可照抄。

COMMON_FLAGS="-march=native -O2 -pipe"CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"CHOST="x86_64-pc-linux-gnu"CONFIG_PROTECT="/var/bind"PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"LC_MESSAGES=CMAKEOPTS="-j8"GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"PORTAGE_TMPDIR="/var/tmp"DISTDIR=/var/gentoo/distfilesACCEPT_LICENSE="*"VIDEO_CARDS="radeon"L10N="en_US en zh zh_CN"LINGUAS="en-US zh-CN en zh"AUTO_CLEAN="yes"GRUB_PLATFORMS="efi-64"EMERGE_DEFAULT_OPTS="--with-bdeps=y --ask --verbose=y --load-average --keep-going"INPUT_DEVICES="libinput synaptics evdev"USE="X alsa clang udev dbus polkit udisks vulkan vdpau vaapi glamor nls"KEYWORDS="amd64"

下面对其中的几个选项做简略介绍。

GENTOO_MIRRORS:建议选清华源。虽然清华源的速度中规中矩,时不时还出点问题。但 gentoo 在中国境内的源很少,应该也只有清华源在及时更新。

EMERGE_DEFAULT_OPTS:建议添加,可大大减小 emerge 指令长度。

INPUT_DEVICES:绝不可缺。否则会引起键盘、觸控板、鼠标失效等等问题。

KEYWORDS:不要在这里开启测试分支。

MAKEOPTS:建议等于 CPU 线程数。这样计算机在编译软件时尚有余力编译另外的软件或者进行其他操作。

进一步配置

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
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

修改/mnt/gentoo/etc/portage/repos.conf/gentoo.conf配置 portage 镜像源

sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage

进入新系统

  • 挂载剩余文件系统
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
  • chroot 登陆新系统
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
  • 挂载 boot 分区
mount /dev/nvme0n1p1 /boot

配置 Portage

  • 下载数据库快照
emerge-webrsync
  • 选择 profile

profile 简单的说就是一系列 USE flag 等配置的集合。这将是新系统的主体配置。

# 先列出可用的profile,带星号是目前选择的
eselect profile list
# 选择你需要的profile(可以从gentoo wiki获得信息)。这里选择kde桌面对应的profile
eselect profile set default/linux/amd64/17.1/desktop/plasma/systemd

17.0 与 17.1 版本差距并不是非常大,如果不想深究,可以随意选择。

系统工具优化

所谓工欲善其事,必先利其器。因此在正式编译系统之前,先进行部分工具的完善。

编辑器

如果你不喜欢 stage3 中解压出来的 nano,可以优先安装一款自己喜欢的编辑器。

git

使用 git 同步 portage。

优点:大大提高同步速度。

缺点:略占用更多空间。

安装 git,不赘述。

修改当前系统的/etc/portage/repos.conf/gentoo.conf

[gentoo]
sync-type = git
sync-uri = https://github.com/gentoo-mirror/gentoo
# 移除之前同步的portage
rm -rf /var/db/repos/gentoo
# 同步portage
emerge --sync

gentoolkit

安装 gentoolkit,不赘述。

  • 常用指令
# 查看已经enable的USE flag
euse -a -g或者euse -a -l
# 激活USE flag
euse -E flagname
# 关闭USE flag
euse -D flagname
# 注意不可单独使用euse -D或者euse -E。这将作用到所有的USE flag。
# 查看指定包的use标志
equery --nocolor uses =gnumeric-1.12.31
# 清理源代码
eclean-dist
# 清理二进制包
eclean-pkg
  • eclean 说明

默认情况下当前存储库中的任何 ebuild 相对应的源文件和二进制包都不会被删除。

可以通过同时使用 --deep--package-names 选项指定删除当前存储库中 ebuild 对应的源文件和二进制包。

安装 layman

layman 是一个优秀的 gentoo overlay 管理工具。eix-sync 指令中也集成了layman -S指令。

详情见gentoo wiki。

  • layman 安装

建议开启的 USE flag 有 git、sync-plugin-portage。

emerge --ask app-portage/layman
mkdir /etc/portage/repos.conf
layman-updater -R
  • 相关指令
layman -L # 显示存储库列表
layman -a <name> # 从本地列表添加存储库
layman -o <url of repository xml file> -f -a <name> # 添加非官方存储库
layman -d <name> # 删除存储库
layman -s <name> # 更新存储库
layman -S # 更新所有存储库

安装 eix

详情见gentoo wiki。

eix 在教程的前面的内容中已经提及并作简要介绍。

  • eix 安装
emerge app-portage/eix
eix-update
eix-sync

使用eix-sync代替emerge --sync,可以在同步数据库后自动更新 eix 的缓存。

修改/etc/eix-sync.conf,写入*,以同步 ebuild 存储库。

  • 相关指令
# 搜索包
eix name
# 搜索本地包
eix -I name
# 在软件包描述文件中搜索,-c用于输出紧凑的结果
eix -S -c name
# 在包类别中搜索
eix -C name
# 搜索许可证
eix -Cc games-rpg -L "EULA"
# 排除结果
eix --not -L "EULA"
# 搜索过时的包
eix-test-obsolete

安装 ccache

ccache 原理是缓存编译时的中间结果,当重新编译时就可以大大减少编译时间。其应用场景主要为编译失败后修改配置,然后再次编译。此时之前编译的有效内容可以直接被利用,这部分将以极快的速度完成编译。但是第一次运行 ccache 时,会拖慢编译速度。

  • ccache 安装
emerge --ask ccache
mkdir -p /var/cache/ccache
chown root:portage /var/cache/ccache/
chmod 2775 /var/cache/ccache/

修改/etc/portage/make.conf

FEATURES="ccache"
CCACHE_DIR="/var/cache/ccache"
CCACHE_SIZE="16G"

开启 32 位库支持

Gentoo 官方并不建议使用纯 64 位模式。其最现实的原因是几乎无法改回兼容 32 位的模式。因此对于新手而言,强烈建议选择兼容 32 位的模式。

然而之前下载 stage3 包虽不是 nomultilib,但并不完全适配 32 位编译环境,需要手动修复。

emerge --ask --verbose db# 编辑/etc/portage/package.use/abi_x86_32,写入sys-libs/zlib abi_x86_32# 编辑/etc/portage/make.conf,写入ABI_X86="32 64"emerge --ask --verbose zlib

局域网编译与打包分发

Gentoo 可以联合局域网下的多台主机一起编译,也可以将本地编译好的包打包分发。

考虑到一般个人用户不太会用到这些功能,此处不赘述。详情见gentoo handbook,gentoo doc以及gentoo wiki。

配置时间和区域

  • 时区
echo Asia/Shanghai > /etc/timezone emerge --config sys-libs/timezone-data
  • 区域

# 生成中英文 locale.genecho 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen
echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
locale-gen# 列出可用的区域eselect locale list# 选择英文区域的编号eselect locale set 3# 重新加载环境变量env-update && source /etc/profile && export PS1="(chroot) \${PS1}"

注意上述操作可能导致系统时间发生错误,可以手动纠正。但这可能导致/usr/bin/git 时间错误,致于无法安装 systemd。重装 git 可解决上述问题。

  • 时间修正
# 查看时间是否正确hwclock
date
date -s 2020/03/09
date -s 11:50:30
hwclock -w# 自动更新,但此时暂不可用timedatectl set-ntp true

重新编译 gcc

为获取最适配本机的编译器,必须先配置并重新编译 gcc。即使你选择 clang 作为主编译器,也应当重新编译 gcc 的稳定分支。

警告:此处配置编译需要万分小心。一旦出现不当,损坏编译器,就会很麻烦。如果真的遇到这种情况,也无需慌张。通过直接安装已编译完成的正常的 gcc 二进制包救场即可。

  • USE flag

根据需求配置,以下仅为参考。

fortran nls nptl openmp pch sanitize ssp lto
  • 编译 gcc
# 更新Portage
eix-sync
# 编译安装gcc
emerge --ask gcc
# 如果编译了新版本的gcc,继续进行下列操作。
# 查看可用gcc版本
gcc-config --list-profiles
# 选择新编译出来的gcc
gcc-config 2
source /etc/profile
export PS1="(chroot) ${PS1}"
emerge --ask --oneshot --usepkg=n sys-devel/libtool
# 检查当前gcc版本
gcc -v
# 如果需要拆卸旧版本
emerge --ask --depclean =sys-devel/gcc-9.3.0
# 验证系统完整性
revdep-rebuild
# 重新编译部分包
emerge --ask --oneshot --usepkg=n --verbose sys-devel/llvm sys-devel/clang
# 如果有问题可以重新构建系统
emerge --ask --emptytree --usepkg=n @system

安装 clang

笔者使用 clang 作为主编译器。即使你使用 gcc 作为主编译器,也可以选择安装 clang 解决部分编译错误问题(这在Gentoo Compile Error Handling一文中已作介绍)。

重新编译整个系统。如果你不使用 clang 作为主编译器或者觉得没有必要,可以跳过此步。

emerge --ask --emptytree --usepkg=n @system

更新配置

# 将数据库更新到最近一小时
eix-sync
emerge --oneshot sys-apps/portage

至此,所有准备工作都已进行完毕。

更新@world

编译安装所有在配置中需要的软件。但在此之前,需要先安装内核源代码提供内核版本信息。

emerge sys-kernel/gentoo-sources
emerge --deep --with-bdeps=y --changed-use --update --ask --verbose --keep-going @world

配置 fstab

fstab 简单的说就是系统启动时挂载文件系统的配置文件。

由 fstab 引起的常见错误有文件系统挂载为只读模式,无法写入任何文件等。

这里不介绍 fstab 的具体配置方法。有需要的参考gentoo wiki。

前面提到,如果有现成的 linux 系统,完全可以仿照其分区方式。主要就是为了 copy 现成的/etc/fstab

比如获得的文件如下

UUID=e5bc0d97-ac5c-400c-b26e-137cefe6ae68       /               ext4            rw,relatime     0 1UUID=B320-B5C7          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro       0 2UUID=c4b396e5-cb87-42dc-b44e-4b26661e5cc0       none            swap            defaults        0 0

使用blkid获取文件系统的 UUID,替换文件中的 UUID 即可。

内核编译

Gentoo 内核复杂点主要在于各选项的配置。此处不会介绍相关具体内容,只是提供一种投机取巧的方法。

具体的内核选项配置,参考gentoo wiki。

自动编译内核

自动编译内核会开启大部分选项。不过如果不是对性能与简洁有极致的要求,着实是可以接受的。

  • 安装内核编译工具
emerge sys-kernel/genkernel
  • 选择内核版本
# 查看源代码列表
eselect kernel list
# 选择
eselect kernel set number
  • 自动编译内核
genkernel all

手动编译内核

  • 安装内核配置工具
emerge --ask sys-apps/pciutils
  • 查看功能

通过lsmod命令来查看当前所处的 Gentoo Live 镜像开启的功能,这可以作为我们在配置内核时的重要参考。

  • 配置
# 进入源码菜单
cd /usr/src/linux
# 打开配置工具
make menuconfig

按需求配置即可。

把上面所有必选项都配置好之后,选择 save 保存配置文件,然后 exit 退出。默认配置文件名是.config,但是最好手动复制一个备份,有时候默认名称的配置文件会莫名丢失,只能重头再配置一次。然后就可以开始编译和安装。

  • 编译安装内核
make
make modules_install
make install
  • 投机取巧的方法

先自动编译内核,等到输出信息显示配置完毕后打断进程,进入源码菜单,修改配置文件即可。这至少将提供一份正确的配置方案,在此基础上修改将节省大量时间。

安装 firmware 和 initrampfs

emerge --ask sys-kernel/linux-firmware
# 如果是自动安装内核,则不需要下一步
genkernel --install initramfs

配置系统

此处的系统配置基于 Systemd,如果你使用的是 OpenRC,部分配置将不适用。

网络配置

  • 修改/etc/hostname

设置主机名

yourname
  • 修改/etc/hosts
# 定义的是现在系统,假设主机名为tux
127.0.0.1     localhost
::1           localhost
127.0.1.1     name.localdomain name
  • 网络工具的安装

如果你想在安装完毕基础系统后不再使用 livecd,就需要先安装基础网络工具。之后等桌面环境安装完毕后,最终将采用 NetworkManager 作为 wifi 配置连接工具。

emerge net-wireless/wpa_supplicant dhcpcd

设置密码

passwd

需要 8 字符及以上。

也可以修改/etc/pam.d/system-auth,将min=8,8,8,8,8 retry=3中所有的 8 改为 1。

部分系统工具的安装

  • 日志工具
emerge --ask app-admin/syslog-ng
systemctl enable syslog-ng@default
  • 远程登录
systemctl enable sshd
  • 文件系统工具
emerge --ask sys-fs/dosfstools sys-fs/e2fsprogs

添加用户

useradd -m -G users,wheel,audio -s /bin/bash username
passwd username # 需要三个单词,总长度大于8个字符

磁盘清理

rm /stage3-*.tar.*

安装系统引导器

  • 安装 grub
emerge --ask --verbose sys-boot/grub:2
  • 将 grub 安装到系统中

注意如果你不是 efi 引导,需要修改下列命令。

grub-install --target=x86_64-efi --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg

安装配置 sudo

emerge --ask sudo
nvim /etc/sudoers
# 在root ALL=(ALL) ALL下添加新的用户

配置 sshd

修改/etc/ssh/sshd_config,做以下修改。

Port 22
PermitRootLogin yes
PasswordAuthentication yes

开启 SysRq

修改/etc/sysctl.conf

kernel.sysrq = 1

至此,Gentoo 基础系统已经安装完毕。退出 chroot,重启检查是否有误。

下一篇:Gentoo Kool Desktop Environment Installation

Gentoo 教程:基本系统安装相关推荐

  1. Gentoo 教程:编译错误解决方案

    更多分享内容可访问我的个人博客 https://www.niuiic.top/ Gentoo教程目录 本文介绍软件编译错误的常用解决方案.仅限于 gentoo 系统提供的操作,不涉及源代码层面的 bu ...

  2. 计算机硬件 系统安装维护教程 04系统安装-Win-04:Windows To Go便携式系统U盘制作

    文章目录 什么是Windows To Go WTG支持哪些系统 WTG设备性能判定 WTG设备选择 制作WTG [推荐]使用WTGA 使用Dism++ 使用Rufus 什么是Windows To Go ...

  3. java jdk安装教程win10_win10系统安装java的详细步骤(图文)

    Java是一门面向对象编程语言,平常使用电脑基本用不到,不过也有一些环境的搭建可能是基于java运行的,这就需要安装java了.那么win10系统怎么安装java?电脑小白对此操作不是很熟悉,为帮助大 ...

  4. archbang linux安装教程,ArchLinux系统安装教程

    前言 以前一直听说Arch在Linux的各大发行版本中是对新手最不友好的一个,前几天安装了一下果然如此,一步没弄好就得重新安装,考验我的耐心.没办法,谁让Arch是最有逼格的那一个呢.小编呕心沥血安装 ...

  5. oracle ebs 安装教程,Oracle_EBS_系统安装以及维护.doc

    信息技术最佳实践 ORACLE核心应用技术 E-Business Suite 系统安装与维护 Author:黄建华 Creation Date:July 5, 2007 Last Updated:Ma ...

  6. crt安装mysql教程_Centos系统安装MySQL详细图文教程

    1.查找系统是否已安装MySQL 安装MySQL之前要先检查系统是否已自带或已安装MySQL,若检查出来系统已存在MySQL并运行正常,则可以甭管接下来的操作,除非是像更换版本或体验安装过程. 查找系 ...

  7. Gentoo 教程:目录

    更多分享内容可访问我的个人博客 https://www.niuiic.top/ Gentoo Preface Gentoo Package Management Gentoo Compiler Sel ...

  8. 计算机硬件 系统安装维护教程 04系统安装-Win-03:OOBE设置

    文章目录 OOBE设置 OOBE设置(Win 7) OOBE设置(Win 8 / 8.1) OOBE设置(Win 10) OOBE设置 OOBE设置(Win 7) 本OOBE是基于个人优化的系统,下载 ...

  9. 安卓模拟器安装教程_XP系统安装安卓模拟器失败原因解决

    XP系统中安卓模拟器安装失败的原因是什么?想要在电脑上玩手机游戏一般都是需要安装安卓模拟器的,而在安装的过程中常常会遇到一些问题,近段时间就由XP系统的用户反映说安装安卓模拟器失败的情况,具体该怎么解 ...

  10. linux ultraedit安装教程,Linux系统安装最新版本Vim编辑器的简单方法整理

    Vi编辑器已经存在了很长时间,它是在1976年左右开发使用的,Vi编辑器为用户提供了传统而强大的功能,例如有效的编辑界面,终端控制等. 但是,Vi编辑器缺少某些吸引人的功能,例如多个屏幕,语法高亮显示 ...

最新文章

  1. mysql 主主同步配置_MySQL 主主同步配置
  2. Unity5 官方教程笔记(2D Rogue Like)07 —— GUI
  3. 摘要注释_论文摘要怎么写,小编来帮你
  4. Python3之logging输出写入日志
  5. Buffer对象与JSON对象相互转换
  6. 选什么专业?找什么样的工作?教你四个维度
  7. (转)Linux中的screen命令使用
  8. JAVA版的IntHashMap的多个源码
  9. 丁可以组什么词_“一”可以组什么词?落语读书会学期总结
  10. MIUI9线刷包精简
  11. 0成本截流的三种方法,挣钱从引流开始
  12. keil工具中fromelf生成汇编代码lst文件(armcc)
  13. 阿里内部Redis宝典遭外泄极致经典:源码+实战+理论
  14. 案例分享 | 某券商利用AI技术进行告警关联分析(上)
  15. New-Age 目录 (2005.03.22/ 整理和使用ShitMp3 修改MP3信息)
  16. session里保存什么信息
  17. 关于Java字符串中拼接换行符
  18. 中软国际赴黔参加大数据国际年会,规划产业布局
  19. 黑金壁纸小程序 二开修复版源码
  20. 一次全国竞赛笔试时的试题

热门文章

  1. Cannot find module ‘node-sass‘问题解决
  2. Moya、RxMoya基本使用
  3. 报错 AttributeError: ‘scipy.spatial.transform._rotation.Rotation‘ object has no attribute ‘as_dcm‘
  4. 专访绿色和平:互联网科技公司,最好通过100%可再生能源实现直接减碳
  5. 玩转Redis-8种数据淘汰策略及近似LRU、LFU原理
  6. Python基础作业:百钱百鸡问题、求最大公倍数和最小公约数、判断回文数
  7. ptp输出内容包含什么_PTP技术及其应用分析
  8. 在uni-app中使用腾讯视频插件播放视频
  9. web网站测试点整理
  10. 编写README文档(Markdown)