.. _after_lfs_config: ==================== LFS之后的配置 ==================== :ref:`lfs` 提供了一个基础系统,不过实际使用时,需要在完成LFS安装部署后,继续做一些补充配置 Firmware =========== Linux系统要能够在真实硬件上良好运行,需要安装不同厂商提供的硬件firmware: - CPU微码(microcode): 用于修复CPU漏洞 - GPU firmware: 典型的是三家GPU厂商 - AMD, Intel, Nvidia - 有线网卡firmware: 通常能够修复问题提升性能 - 其他设备firmware: 例如无线网卡需要特定firmware驱动才能工作 .. _blfs_micorcode: CPU microcode ----------------- - 检查CPU信息: .. literalinclude:: after_lfs_config/cpuinfo :caption: 检查CPU信息 - 检查当前微码(还没有更新之前): .. literalinclude:: after_lfs_config/microcode_before :caption: 更新前的CPU微码 - 从 `Intel-Linux-Processor-Microcode-Data-Files `_ 下载最新微码 .. note:: 在执行 构建 ``microcode.img`` 前,先完成 :ref:`blfs_cpio` 安装 - 构建 ``microcode.img`` : .. literalinclude:: after_lfs_config/microcode.img :caption: 构建 ``microcode.img`` - Intel发布的微码 ``releasenote.md`` 中有说明可检查 .. csv-table:: Intel微码 ``releasenote.md`` 更新 Xeon E5 v3 :file: after_lfs_config/microcode.csv :widths: 10,10,20,10,10,40 :header-rows: 1 .. note:: 在执行 ``/boot/grub/grub.cfg`` 中添加 ``initrd`` 配置 前,先查看一下 :ref:`blfs_initramfs` 是否有必要一起完成。 目前我还没有使用 ``initramfs`` ,仅加载 CPU microcode : 后续有需要在补充添加 :ref:`blfs_initramfs` (可以补充在cpu microcode 的 ``initrd`` 后面加载 另外,如果 ``intel-ucode`` 微码目录完整复制到 ``/lib/firmware`` 目录下,那么 **也可以** 不用执行下面一步 在 ``/boot/grub/grub.cfg`` 中添加 ``initrd`` 配置 ,直接执行 :ref:`blfs_initramfs` 中 ``mkinitramfs`` 会自动添加cpu microcode。 - 在 ``/boot/grub/grub.cfg`` 中添加 ``initrd`` 配置: .. literalinclude:: after_lfs_config/grub.cfg :caption: 配置 grub.cfg :emphasize-lines: 4 - 重启系统,然后检查: .. literalinclude:: after_lfs_config/dmesg :caption: 检查启动系统输出 由于我的系统CPU在之前 :ref:`ubuntu_linux` 安装运行时已经自动更新过CPU microcode,所以这里没有更新信息,还是 ``0x00000049`` (也是之前检查 ``releasenote.md`` 可以看到最高版本) .. literalinclude:: after_lfs_config/dmesg_output :caption: 检查启动系统输出显示CPU微码更新情况 网卡firmware --------------- 待补充... Bash Shell启动文件 ====================== 有关bash的一些环境设置: - 交互式登录 shell 在成功登录后通过读取 ``/etc/passwd`` 文件使用 ``/bin/login`` 启动 - shell通常读取 ``/etc/profile`` 和用户私有等效 ``~/.bash_profile`` 或 ``~/.profile`` - 在 私有等效 ``~/.bash_profile`` 或 ``~/.profile`` 调用读取 ``~/.bashrc`` - 通常自己 **定制内容** 应该存放在 ``~/.bashrc`` - ``~/.bash_logout`` 在用户推出交互式登陆 shell 时被读取和执行(类似退出清理动作可以在这里设置) - 很多发行版使用 ``/etc/bashrc`` 进行非登陆shell的系统范围初始化,该文件通常还会从用户的 ``~/.bashrc`` 文件中调用而不是直接内置在bash本身中 - 创建 ``/etc/profile`` .. literalinclude:: after_lfs_config/profile :caption: ``/etc/profile`` - 创建 ``/etc/profile.d`` 目录 .. literalinclude:: after_lfs_config/profile.d :caption: ``/etc/profile.d`` 目录 - ``/etc/profile.d/bash_completion.sh`` .. note:: 以下bash补全脚本会在bash环境中添加许多行(通常超过1000行),并且很难用 ``set`` 命令检查简单的环境变量。省略词脚本不会映像bash使用tab键进行文件名补全的能力。 **我没有添加这个脚本** .. literalinclude:: after_lfs_config/bash_completion.sh :caption: ``bash_completion.sh`` 确保目录存在: .. literalinclude:: after_lfs_config/bash_completion.d :caption: 确保 ``/etc/bash_completion.d`` 目录存在 - ``/etc/profile.d/dircolors.sh`` 这个脚本使用 ``~/.dircolors`` 和 ``/etc/dircolors`` 文件夹来控制目录列表中文件的颜色。可以控制 ``ls --color`` 等命令的色彩输出 .. literalinclude:: after_lfs_config/dircolors.sh :caption: ``/etc/profile.d/dircolors.sh`` - ``/etc/profile.d/extrapaths.sh`` 这个脚本向 ``PATH`` 添加了一些用用的路径,并可用于定制所有用户可能需要的其他 ``PATH`` 相关环境变量(例如 ``LD_LIBRARY_PATH`` 等) .. literalinclude:: after_lfs_config/extrapaths.sh :caption: ``/etc/profile.d/extrapaths.sh`` - ``/etc/profile.d/readline.sh`` 这个脚本设置默认的 ``inputrc`` 配置文件 .. literalinclude:: after_lfs_config/readline.sh :caption: ``/etc/profile.d/readline.sh`` - ``/etc/profile.d/umask.sh`` 设置 ``umask`` 值对于安全非常重要,这里对系统用户及当前用户名和组名不同时,默认组写权限关闭。 .. literalinclude:: after_lfs_config/umask.sh :caption: ``/etc/profile.d/umask.sh`` - ``/etc/profile.d/i18n.sh`` 这个脚本设置本地语言支持所需的环境变量 .. literalinclude:: after_lfs_config/i18n.sh :caption: ``/etc/profile.d/i18n.sh`` - ``/etc/bashrc`` 基础 ``/etc/bashrc`` ,请阅读文件中的注释 .. literalinclude:: after_lfs_config/bashrc :caption: ``/etc/bashrc`` - ``~/.bash_profile`` 以下时一个基础的 ``~/.bash_profile`` ,如果希望每个新用户自动拥有这个文件,只需要将命令输出更为为 ``/etc/skel/.bash_profile`` ,并在运行命令后检查权限。然后可以将 ``/etc/.skel/.bash_profile`` 复制到现有用户(包括root)的祝目录,并是饿到甚至所有者和组 .. literalinclude:: after_lfs_config/bash_profile :caption: ``~/.bash_profile`` - ``~/.bsashrc`` .. literalinclude:: after_lfs_config/home_bashrc :caption: ``~/.bashrc`` - ``~/.bash_logout`` 这里是空白的 ``~/.bash_logout`` 模版。注意基本的 ``~/.bash_logout`` 并不包含 ``clear`` 命令,这是因为 ``clear`` 是由 ``/etc/issue`` 文件处理的 .. literalinclude:: after_lfs_config/bash_logout :caption: ``~/.bash_logout`` - ``/etc/dircolors`` 如果要使用 ``dircolors`` 能力,则执行以下命令 也可以在 ``/etc/skel`` 目录下添加同样的 ``.colors`` ,这样新用户就会自动拥有 ``~/.dircolors`` 文件以便用户自己定制目录颜色 .. literalinclude:: after_lfs_config/dircolors :caption: ``/etc/dircolors`` ``/etc/vimrc`` 和 ``~/.vimrc`` 文件 ===================================== - 基本的 ``/etc/vimrc`` 和 ``~/.vimrc`` 文件 .. literalinclude:: after_lfs_config/vimrc :caption: 基本的 ``/etc/vimrc`` 和 ``~/.vimrc`` 随机数生成 =============== 通过 ``blfs-bootscripts-20240416`` 软件包安装 ``/etc/rc.d/init.d/random`` 初始化脚本 .. literalinclude:: after_lfs_config/random :caption: 安装 ``/etc/rc.d/init.d/random`` 初始化脚本 串口控制台 ============= .. note:: 这部分似乎在BLFS中没有涉及,但是我主要在服务器 :ref:`hpe_dl380_gen9` 上使用LFS,需要有一个串口控制台方便通过 :ref:`ipmitool` 管理 这部分设置主要参考 :ref:`debian` ,也就是在 :ref:`debian_init_vm` 中设置的方法。在 debian 中,虽然配置采用了 ``/usr/sbin/getty`` ,但实际上 ``getty`` 是 ``agetty`` 的一个软链接,而 ``agetty`` 已经在 :ref:`lfs` 部署中安装了,所以只需要配置即可 - 为 ``agetty`` 创建一个软链接 ``getty`` ( :ref:`debian` 系统就是如此 ): .. literalinclude:: after_lfs_config/getty :caption: 为 ``agetty`` 创建一个软链接 ``getty`` ,后续配置就可以继续使用 ``getty`` - 创建一个 ``/etc/init/ttyS0.conf`` : .. literalinclude:: ../ubuntu_linux/admin/ubuntu_serial_console/ttyS0.conf :caption: ``/etc/init/ttyS0.conf`` 配置getty - 修订 ``/boot/grub/grub.cfg`` 添加内核参数 ``console=tty0 console=ttyS0,115200n8`` (这里的案例在 :ref:`run_debian_gpu_passthrough_in_qemu` 基础上完成,所以内核参数还有一部分是 :ref:`iommu` 配置 ): .. literalinclude:: after_lfs_config/grub.cfg :caption: 内核参数添加 ``console=tty0 console=ttyS0,115200n8`` :emphasize-lines: 8 .. warning:: 这里我搬运了 :ref:`ubuntu_linux` 配置GRUB serail输出的配置部分(参考 `archlinux: Working with the serial console `_ ): .. literalinclude:: after_lfs_config/grub.cfg :caption: GRUB配置serial输入输出 :emphasize-lines: 2-4 上述参数是从 :ref:`ubuntu_linux` 的 ``/etc/default/grub`` 配置通过 ``update-grub`` 命令生成的, ``/etc/default/grub`` 在Ubuntu中配置如下: .. literalinclude:: after_lfs_config/ubuntu_grub :caption: Ubuntu ``/etc/default/grub`` 配置GRUB串口 但是非常奇怪没有效果,待后续再排查 参考 ===== - `After LFS Configuration Issues `_