【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)
相关推荐
Wang's Blog8 分钟前
RabbitMQ: 消息发送、连接管理、消息封装与三种工程方案
linux·ubuntu·rabbitmq
The star"'27 分钟前
04-管理变量和事实
运维·云计算·ansible
Vect__30 分钟前
初识操作系统
linux
若风的雨31 分钟前
pcie bar 地址对齐规则
linux
LRX_19892734 分钟前
华为设备配置练习(七)VRRP 配置
服务器·网络·华为
林疏safe42 分钟前
灯塔部署云服务器docker 部署方式,以及忘记密码如何查找
运维·服务器·docker
CQ_YM1 小时前
Linux线程控制
linux·c语言·开发语言·线程
zengxiaobai1 小时前
客户端 address 不足
linux
云和数据.ChenGuang1 小时前
openEuler系统下安装MongoDB的技术教程
运维·数据库·mongodb·压力测试·运维工程师·运维技术
广东大榕树信息科技有限公司1 小时前
如何实现动环监控系统的国产化与智能化?
运维·网络·物联网·国产动环监控系统·动环监控系统