文章目录
- [1. 制作尽可能小的Linux系统](#1. 制作尽可能小的Linux系统)
-
- [1.1. 环境准备](#1.1. 环境准备)
-
- [1.1.1 Linux内核编译相关](#1.1.1 Linux内核编译相关)
- [1.1.2. bash-static](#1.1.2. bash-static)
- [1.2. 具体步骤](#1.2. 具体步骤)
-
- [1.2.1. 编译内核镜像](#1.2.1. 编译内核镜像)
- [1.2.2. 加入bash-static](#1.2.2. 加入bash-static)
- 其他
-
- [fish shell](#fish shell)
-
- [fish shell相关依赖安装](#fish shell相关依赖安装)
- [静态编译fish shell](#静态编译fish shell)
1. 制作尽可能小的Linux系统
1.1. 环境准备
1.1.1 Linux内核编译相关
- 启用WSL2,安装Ubuntu24.04
- 下载Linux源码(版本:6.17.5)
官网:https://www.kernel.org/
国内镜像:https://mirrors.aliyun.com/linux-kernel/v6.x/linux-6.17.5.tar.xz
建议浏览器下载,然后复制到Ubuntu24.04中 - 安装编译依赖
bash
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev bc flex -y
- 安装qemu
bash
sudo apt install qemu-system-x86 -y
- 安装镜像构建依赖
bash
sudo apt install syslinux isolinux genisoimage -y
1.1.2. bash-static
bash
sudo apt install bash-static -y
1.2. 具体步骤
1.2.1. 编译内核镜像
- 解压文件
bash
tar -xvf linux-6.17.5.tar.xz
cd linux-6.17.5/
- 创建tinyconfig
bash
make tinyconfig
-
手动调整内核配置
bashmake menuconfig- 启用
- 64-bit kernel
- General setup > Initial RAM filesystem and RAM disk (initramfs/initrd) support
- 禁用
- Support initial ramdisk/ramfs compressed using gzip
- Support initial ramdisk/ramfs compressed using bzip2
- Support initial ramdisk/ramfs compressed using LZMA
- Support initial ramdisk/ramfs compressed using XZ
- Support initial ramdisk/ramfs compressed using LZO
- Support initial ramdisk/ramfs compressed using LZ4
- 禁用
- General setup > Configure standard kernel features (expert users) > Enable support for printk
- Device Drivers > Character devices > Enable TTY
- Executable file formats > Kernel support for ELF binaries
- 启用
-
编译内核
bash
make -j$(nproc)
- qemu使用编译的内核尝试启动可以发现缺少初始化模块
bash
qemu-system-x86_64 -kernel arch/x86/boot/bzImage

- 查看内核镜像大小
bash
ls -lh arch/x86/boot/bzImage

1.2.2. 加入bash-static
bash
cd ~
mkdir output
cd output
cp ~/linux-6.17.5/arch/x86/boot/bzImage .
cp /usr/bin/bash-static .
mv bash-static init
echo init | cpio -H newc -o > init.cpio
cd ~/linux-6.17.5
make isoimage FDARGS="initrd=/init.cpio" FDINITRD=~/output/init.cpio
qemu-system-x86_64 -cdrom arch/x86/boot/image.iso
其他
fish shell
fish shell相关依赖安装
-
下载fish shell linux源码:https://github.com/fish-shell/fish-shell/releases/download/4.1.2/fish-4.1.2.tar.xz
-
安装rust环境
- 设置镜像源
bashexport RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup- 下载安装脚本安装
bashcurl https://sh.rustup.rs -sSf | sh source "$HOME/.cargo/env.fish"- 检查cargo是否安装成功
bashcargo --version -
安装gettext(rust-pcre2的依赖)
bash
sudo apt install -y gettext
静态编译fish shell
- 解压文件
bash
tar -xvf fish-4.1.2.tar.xz
cd fish-4.1.2
-
替换GitHub源

-
静态编译
bash
mkdir build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXE_LINKER_FLAGS="-static" \
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a"
make -j$(nproc)