【Linux】定制Linux系统

文章目录

  • [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系统

参考资料:https://www.bilibili.com/video/BV1gtfbYWEui

1.1. 环境准备

1.1.1 Linux内核编译相关

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
  • 手动调整内核配置

    bash 复制代码
    make 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环境

    • 设置镜像源
    bash 复制代码
    export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
    export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
    • 下载安装脚本安装
    bash 复制代码
    curl https://sh.rustup.rs -sSf | sh
    source "$HOME/.cargo/env.fish"
    • 检查cargo是否安装成功
    bash 复制代码
    cargo --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)
相关推荐
邪修king2 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
2301_777998342 小时前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
运维行者_3 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
考虑考虑7 小时前
nginx路由重写
运维·后端·自动化运维
Zenova EdgeOS9 小时前
Linux 内核日志 dmesg 进阶实战:从现场过滤到持久化闭环
linux·运维·服务器
郝亚军9 小时前
ec_private.pem的生成方法
linux·运维·服务器
NendoZen10 小时前
Arch Linux解决Grub无法SAVEDEFAULT问题(uki启动问题)
linux·运维·服务器
Elastic 中国社区官方博客11 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌11 小时前
进程控制管理
linux·运维·服务器
Escalating_xu11 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip