gentoo
刚好最近搞android 系统,对于内核编译一知半解, bootloader, grub, fstab, 这些都重新再学习一遍, 所以, 搞一搞gentoo, 一是巩固, 而是为mokee 移植, 打下基础.
安装gentoo 的感觉: linux就是一个文件系统, 有了内核, 安装了正确的驱动, U盘里的系统也是可以玩的. 这就需要grub 来负责引导加载, 或通过BIOS 来控制.
到了这一步, 系统安装的思路就清晰了, 既然, 也可以直接从U盘加载系统, 那就说明, 只要相应的文件结构存在, 那么这个系统就是可以运行的.
所以, 一个系统启动盘, 就是一个简易的可运行的操作系统环境, 先通过加载这个系统, 然后操作磁盘, 安装一个新的系统环境到磁盘里, 然后再从磁盘启动就OK了, 所以, 当然也可以从本地磁盘中去安装系统, 一个磁盘, 当然也可以存在多个系统.
winpe是如此, recovery 是如此, gentoo 的最简单U盘镜像也是如此.
先将磁盘分区格式化, 然后挂载, chroot, 这可能就是在当前的系统环境下, 临时增加一个新的用户, 不仅仅是新用户这么简单, 连安装文件, 新的系统环境也变成了新的挂载点. 具体的技术细节, 还有待学习.
后续的安装过程: 安装/替换内核, 生成 ram 文件系统. 安装系统工具及软件, 继续完善系统环境.
具体流程:
安装gentoo 确实是一个折腾的过程, 有用不呢? 现在还不清楚, 但是自我感觉还是挺开兴, 挺感兴趣的.
开始按官方的教程安装完, 一切都正常, 再安openbox, awesome, 也能正常, 但是挂载不了ntfs 的磁盘
我的磁盘里还有一些存货, 当然不想直接就格式化了, 而且这个坑也必须填了.
因此打开fuse, ntfs 支持, 重新编译了内核, 然后并不起作用, 连xwindow 也打不开了, ntfs 挂载不上, 桌面打不开, 搞得犯恶心, 7天没有碰电脑.
10月13号经过一番纠结, 要不要换到archlinux? 最终选择继续刚下去. 换archlinux就会更好了吗? gentoo本来也是符合我的口味的, 下载源码, 下载软件, 都是小问题. 所以继续肝吧.
先排个优先级, xwindow 并不是必须的. 那就先解决ntfs 碰盘挂载的问题, 先将有用的资料拉出来备份, 再继续整xorg的问题.
内核打开了新特性, 也编译成功了, 按道理, make && make modules_install, cp bzImage 到 /boot, 再make install, reboot 就OK了. 之前/boot 一直未挂载成功, 也没当个事, 最终 make install 并没有让新的内核起作用.
因此接下来的问题是, 如何应用重新编译的内核? 这里就涉及到 grub 与 efi 的引导问题, 之前一直是用grub.efi 引导的, 照关 gentoo efi install wiki 上的操作, 果然没有出乎意料的启动不起来, 找到不root device.
能到这一步提示, 说明内核是加载成功了. 但是进入不了系统, 目前查找的可能原因, 一个是编译的内核没有加上nvme 的硬盘驱动, 别一个就是 制作的 efi 引导启动不行. 接下来还是要通过U盘, 通过 chroot 来解决, 是不是还有可能是rootfs 没有重新编译适配, 这个并不是可选的, 对于我这种情况就是必选的.
通过这一番捣鼓, 可以发现, gentoo 不管折腾到哪一步, 都是可控的. 分区一定, 即使是再重装系统, 硬盘上下载好的源码, 都还可以再用.
其实再重装系统, 也只是在 /boot, /root 分区工作. 这里也体现了一切皆文件的哲学了. 只有能启动内核, 启动一个系统, 内核特性支持, 驱动支持, 所有的设备都可以 mount, umount, 每个设备都是独立的. 所以就将影响解耦隔离开了.
一切皆文件的哲学可以再验证验证的. 理论上, 编译完内核, 想转移系统也方便了. 虽然每个主机都有自己的特性. 但是, 内核至少有一部分通用的特性. 当然, 除了下载慢些, 再安装也没啥困难了.
夜晚接着刚, 生产环境这一关还就得过去. 可能得一个月之久, 但是这个时间得花, 刚好也熟悉linux, 对于unix的高级编程学习肯定有帮助.
学习gentoo的另一个意义, 也是使用vim 开发c/c++ 与 IDE 的优缺点, 使用IDE 对于大部分中等项目来说是有好处的. 但是对于小型项目(工具), 超大型项目, vim 更加灵活一些, 而小型项目, 工具, 更加便利于生活.
引导的过程, grub的学习, efi 还得主板bios支持.
磁盘分区挂载, fdisk, parted, 先将磁盘分区, 再用mkfs.ext4 格式化. 然后修改/etc/fstab 创建挂载点, 修改文件权限, 即可操作了. 磁盘就在那里, 使用工具操作即可, 磁盘也是作为一个独立的个体, 放在任一个系统, 只要支持此磁盘, 都可以使用, 后续还有磁盘raid 可玩.
chroot, rootfs, nvme驱动, grub, efi, 就那么多知识点, 一样样来, 并没有浪费多少时间, 顶多花一个月撑死了.
重编译内核, 一直被卡住, 新内核并没有应用起来, 是因为没有引导起来, 使用了genkernel all 命令后, 现在连 内核的make install就不成功了. 再生成 initramfs, grub-mkconfig 后, 依然启动不起来.
是因为genkernel all 的原因, 还是因为改了 make.conf 的原因? 修改makeconf, 还要重新更新一下portage 才可以生效?
不是genkernel 原因, 还是因为挂载 /boot分区错误, 所以没有真正挂载/dev/sda2.
通过近两个月的时间, gentoo 的环境终于算是搞定了, 目前可以正常使用nvidia 进入图形界面, 可以打开浏览器正常上网. 仍存在的问题, 没有声音, 没有输入法. 还不能直接在当前系统环境下编译内核, 直接替换内核, 这是由于在 stock system 中不能正常挂载vfat 磁盘.
通过这段时间的折腾, 内核编译不存在问题, 手动配置内核驱动, 还需要时间积累. grub2配置 bios, uefi, initramfs, xorg的配置, de, wm, 后续的kde, gnome, 如果能满足开发, 并不想再安装de, 只需安装库文件即可.
打通了fcitx, 需要安装3个库才可用, fcitx, fcitx-rime, fcitx-large-table 然后使用gtk3 支持的fcitx-configtool来改变输入法.
接下来就是挂载/boot的问题, 在/boot下, 本来就有一些文件, 但这只是initramfs创建的一些挂载点而己. 在挂载点下挂载什么, 接下来就操作磁盘上对应的block.
必须得解决 /boot挂载的问题, 因为, 想完美打造一个好的操作系统, 必须得编译内核, 每次都要修改bios, 显然是在额外增加工作量.
每次滚动更新, 具体每个命令, 步骤的逻辑需要搞明白. gentoo 就先用起来, 尽管这两次 emerge -e @world 每次都要一天的时间. 后续chromium等不需要源码编译的版本都换成预编译的, cmake, chromium 这些编译都太耗时了. 所以, gentoo 相对来说, 比arch 更加灵活一些? 感觉还是要安装一下kde, 或者自己打造一个kde出来, 将kde集成的每个软件都安装了, 理论上是可以的, 那么选择 kde profile又是做了什么工作呢?
还有很多知识不懂,
内核编译的其他方面,如在android上还要改 dtsi 什么的, 系统的日志, 如何替换prebuild binary install version. 切换profile 安装 dm, 与我现在的配置有何冲突; 卸载安装包, 如何清除残留依赖.
网络配置中的域名, 用处也很大. 没有还就不让上网
vim 环境配置, Plug 插件安装
vim的环境好好配置, 大神已经将工具写好了. 所以呀, 开源的精神, 真得是让人心旷神怡.
接下来就是搞一搞声音, 要重新编译内核, 继续解决一下挂载的问题, 然后就投入正常的开发.
翻墙的事, 也等搬家后再搞, 现在的网络, 即使有了vps, 也是没有用的.
vfat 挂载OK了, codepage=437, iocharset=iso8859-1,utf8, 就可以挂载上了。
vlsa 声卡驱动不了, 怎么没有realtak, 声卡现在是 pch, nvidia的hdmi, 没有声音会不会是转接头的问题呢? 官方文档得啃明白, 慢慢熬吧.
vlsa-plugins 与 mplayer 都对ffmpeg 依赖的问题, 单独安装ffmpeg, 其他的库就mask ffmpeg, 这样, 同样也可以共享, 最终安装是将lib, bin填满文件. 所以, 肯定是公用的.
但是即使是这样, 还是不可以驱动起来声音, 接下来搞明白配置.asound.rc, 为何surround, a52, 相关的库都没有作用呢?
声音的问题解决了, 还有网络的配置, 无线和蓝牙, 基本上正常的使用都不存在问题了.
现在awesome使用体验并不太好, 虚拟桌面添加不了terminal, terminal 的主题, 文字的大小, 快捷启动应用
开发环境也并没有搞好, 只搞了android的, vim 下的c/c++开发没有, 下载一个clion开发, vim作为辅助. 后续调试的时候, 同样可以使用makefile, gdb的形式.
接下来就是要干实事啦, 读书, 做自己的东西, 现在年轻, 不抗一抗, 再过20年, 同样还是会问这个问题, 不能只将想法存在大脑里, 以前几个简单的文字, 就给以后续可以实现的假象, 完全不是一回事.
vim8.1 的python3 python2 支持, 在gentoo里安装, 配置文件主要是在ebuild里,开始网上搜索的方法都过时了, 但是也算是一个提示,通过查看ebuild里的脚本, 可以看到是如何解析的, 所以, 再添加python, python3 支持就容易得多了,并不是python, 而是pythoninterp, python3interp
整个portage都是使用python3的, 所以, portage的一切细节都是公开的。
alsa 配置
alsa卡在这里也有个把月了, 不能听歌, 不能看电影,到底是哪里不对了呢?
内核按照要求, 也都配置了, 只不过有些选项, 只能选择M, 而wiki上说的是*, 难道还要再手动加载模块吗?
音箱是好的, 按配置文件配置好, 找不到相关的so库, 要安装哪个库呢?
主要还是hdmi的输出带音频, 所以接在主机箱后面是不行的, 得接在屏幕后面。
尝试了一下, 错误是没有了, 但是还是不能播放出声音
滚动更新命令
# 更新软件仓库
emerge --sync # 调用 rsync 增量更新
emerge-webrsync # 使用web请求方式更新, 针对防火墙阻止了rsync更新的方式
# 更新 portage树
emerge --update --deep --with-bdeps=y --newuse --ask @world
同步更新 ebuild
更新portage
abstract
portage
并不是移植的意思, 是一个软件包管理系统, 使用 emerge software-name 安装
ebuild 脚本, portage 可执行脚本, 用来安装软件包
USE 配置, portage 安装软件的配配置
stage3
基本库环境, 不同的架构, 不同的平台, 大小不一样.
OpenRC, systemd
[OpenRC](https://wiki.gentoo.org/wiki/OpenRC)
OpenRC 是一个基于依赖项的 init 系统,它维护与提供系统兼容的init 程序,通常位于 /sbin/init 中。它不作为 /sbin/init 文件的替换。OpenRC 与 Gentoo init 脚本 100% 兼容,这意味着可以找到一种解决方案来运行主 Gentoo 存储库中的数十个守护进程。然而,OpenRC 并非设计为由 Gentoo Linux 专用使用,可用于其他发行版和 BSD 系统。
cgroups 支持, 进程管理, 并行启动服务, 硬件启动脚本运行.
[systemd](https://wiki.gentoo.org/wiki/Systemd)
systemd 是一种现代的 SysV 风格的 init 和 rc 替代 Linux 系统。它在 Gentoo 中作为替代 init 系统支持。
systemd 比openrc 还要先进一些, 流行一些? 那为何gentoo默认的是openrc呢?
gnome 是依赖 openrc 的, 有了一定的技术基础, 再学起操作系统, 那种感觉是爽的. 可以根据已有的知识, 主动思考去解决问题, 而不是一遇到问题就google. 所以有一种跟随着前人再创造的氛围.
profile
换profile需要做哪些工作, 代价大不大?
复盘
gentoo 的安装, 系统的启动已不成问题, 现在就是日常使用的软件安装会有问题, 刚好可以借着这个机会, 整理一下linux相关的知识.
gentoo 的开发与使用环境, 很有必要搞一搞, 并记录下来, 打一个包, 是不是直接解压不可以用了呢?
不管是对于自己后续换机的参考, 还是有相同需要的同行, 或者下一代的教育, 都有必要用心做这个事情.
日常使用gentoo:
操作系统安装
内核的编译, 网络配置, grub 引导, initramfs, 这些搞定, 一个可正常跑起来的tty 环境就可以用了.
桌面环境安装
浏览器, 视频播放, 必须得有桌面环境, awesome, openbox 还没有搞定. nvidia 的驱动安装
如果能在命令行下完成浏览工作, 播放工作, 那么桌面环境是没有必要的可能了. 便是多终端终究是不方便. 而且UI 风格也是要的. 所以桌面环境必须搞.
不想使用systemd, 那么kde就是原配了. 先使用kde试试. kde 配合 openbox, awesome 这些应该是如虎添翼的.
openrc 了解了, 有精力再去了解systemd
开发环境安装
开发环境对于gentoo来说是天生的, 没有啥难度, emerge 配合 use, mask 可以搞定
vim 开发环境. 搞定这些, 基本上是没啥问题了.
自带源码, 看源码也是天生优势.
基本软件安装
中文环境, 五笔输入法, emerge 使用, portage 使用.
至此, 后续的问题才方便记录, 主要是在家里的网络太慢了, windows上的wsl环境, 也并没有那么麻烦, 所以, 这本也是记录问题的一个方式,在家里主要还是懒得原因.
杂思
不管在做什么事, 思想总会跑神, 有时候跑神的还很兴奋, 因此记录之, 暂不管有多大的价值.
一个人做一个人的事, 一代人做一代人的事
折腾gentoo的过程, 是一个成长的过程, 看着手中的系统, 逐步地完善, 心里还是有成就感的, 虽然现在还有很多知识不懂.
在家里打字,还是有一些限制, 现在系统可以记录一些想法了. 先将开发环境搭起来, 至少要可以正常工作. 要做的事情还很多. 系统只是最根本的. 搞定了正常的开发环境, 后续的系统学习就是在使用过程中解决问题.
家里的进度已经耽搁了一个多月, 但是搞定了gentoo的感觉还是很好的. 有些时候, 看日志很重要, 关键日志搜索不到解决方案, 那就看完整的日志自己思考去解决.
wsl 现在还不能进行网络连接. 不用每次都保存的, vim 本就做了缓存, 所以不用每次都保存, 这样除了增加打字频率, 并不会带来多少好处, 反而会让手指更加得累了. 但是下意识地打字的冲动还是控制不了, 这样的打字效果也确实爽.
搞gentoo的过程, 更是说明了, 事情是一点一点的做出来的, 一天的精力, 时间都有限, 不可能强求太多, 没有状态的时候, 一天能完成一个任务,, 对于一件事来说, 也是前进了一步, 而一件事的步骤又能有多少呢? 做成一件事是迟早的事.
虽然周期持续近2个月, 但是中间有很多个夜晚是恶心了, 提不起精神, 就都搁置了. 只要不放弃, 终究是再次搞定了, 而且对linux 理解更深了一些. 现在的问题是, 如何将所学的表达出来. 输出文字仍旧是一个耗时的过程, 不可能一天就完成, 一天写一点, 也是一个常态.
使用gentoo的好处, 我并不认同, 使用稳定的de, 更省心一些,我认为gentoo的好处是, 一切都有源码, 想研究的时候, 有环境研究, 更加方便, 不想研究的时候, 也可以在github上找别人开源的配置,用起来也是爽歪歪, 所以, 这样的折腾是有好处的, 一切更加随心, 追求的不就是都在掌控之中的感觉么
后续
gentoo也就折腾折腾体验一下,真正使用的过程中, 需要一台好的配置的计算机和网络环境。
而国内的网络环境,各种墙,源码编译加上网络环境,非常考验心态。 现改成折腾archlinux。