在Gentoo上运行Gentoo(容器)

Gentoo Docker 部署完成后,我期望运行一个非常精简的Gentoo系统底座,而将各种开发、测试等工作搬迁到Gentoo容器中完成:

  • 保持物理服务器操作系统尽可能精简稳定

  • 容器之间相互隔离

  • 方便不断重新实现完全一致的开发测试环境

Gentoo镜像

通过 Gentoo镜像 构建提供ssh服务并且能够安装不同开发环境的基础容器

Gentoo Docker 之后进入容器,首先按照 在MacBook Pro上安装Gentoo Linux 完成一些必要调整,也就是以下这些手工执行的命令。在完成验证之后,就可以按图索骥定制 Gentoo镜像

修改gentoo镜像地址

配置使用阿里云镜像网站
cat << EOF >> /etc/portage/make.conf
GENTOO_MIRRORS="http://mirrors.aliyun.com/gentoo http://distfiles.gentoo.org http://www.ibiblio.org/pub/Linux/distributions/gentoo"
EOF

这步对墙内用户非常重要,否则下载几乎难以完成

备注

为方便修改配置,此时可以先 emerge --ask app-editors/vim ,当然也可以在后续批量安装

选择profile

  • 查看系统当前使用的 profile :

检查当前使用的 profile
eselect profile list

可以看到Gentoo容器中默认的 profile 是最基本的配置:

Gentoo的Docker中默认profile是最基本配置
  [1]   default/linux/amd64/17.1 (stable) *
  [2]   default/linux/amd64/17.1/selinux (stable)
  [3]   default/linux/amd64/17.1/hardened (stable)
...

这里不用修改

更新 @world set

更新系统的 @world set ,以便建立 base ,这样系统可以应用自构建 stage3 以来出现的任何更新或 USE flag 更改以及任何配置文件选择:

更新 @world set
emerge --ask --verbose --update --deep --newuse @world

配置USE变量

备注

获取CPU特性,设置对应USE变量

  • 安装工具包:

安装 cpuid2cpuflags 工具包
emerge --ask app-portage/cpuid2cpuflags
  • 执行:

运行 cpuid2cpuflags
cpuid2cpuflags
  • 将输出结果添加到 package.use :

运行 cpuid2cpuflags 输出添加到 package.use
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

(可选)配置 ACCEPT_LICENSE 变量

考虑到容器内部暂时不需要编译特定私有代码,所以我暂时没有修订默认接受的licenses。不过,后续如果要支持 Gentoo NVIDIA驱动 来实现类似 Docker运行NVIDIA容器 可能还是需要接受厂商协议,可能需要执行以下命令:

配置接受特定licenses
cat << EOF >> /etc/portage/make.conf
ACCEPT_LICENSE="-* @FREE @BINARY-REDISTRIBUTABLE"
EOF

配置时区

配置时区写在 /etc/timezone 文件:

配置OpenRC的timezone配置
echo "Asia/Shanghai" > /etc/timezone

然后重新配置 sys-libs/timezone-data 软件包,这个软件包会更新 /etc/localtime :

重新配置 sys-libs/timezone-data
emerge --config sys-libs/timezone-data

配置本地化(语言支持)

  • 修订 /etc/locale.gen

在 /etc/locale.gen 中添加 UTF-8 支持
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
  • 根据 /etc/locale.gen 生成所有本地化支持:

运行 locale-gen 命令,根据 /etc/locale.gen 生成本地化支持
locale-gen

选择本地化

  • 显示可支持的 lcoale :

查看当前locale
eselect locale list
  • 修订本地化为 en_US.utf8 :

设置locale
eselect locale set 4
  • 重新加载环境:

更新加载环境
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

安装必要工具

安装可选工具
# 文件索引
emerge --ask sys-apps/mlocate

# 安装bind(DNS)客户端工具
emerge --ask bind-tools

# vim
emerge --ask app-editors/vim

# sudo
emerge --ask app-admin/sudo

升级Gentoo

在上述构建部署完成后,最后做一次仓库更新和系统整体升级:

  • 更新Gentoo仓库,这时需要使用工具 emaint :

使用emaint更新仓库
emaint -a sync
  • 完成仓库更新之后,使用 emerge 升级整个系统:

使用emerge升级整个系统(简化参数)
emerge -avuDN @world

构建 Gentoo镜像

以上完成一系列调整定制后,就可以参考上文步骤来定制 Gentoo镜像