【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)
相关推荐
Fcy64814 分钟前
Linux下 进程控制(一) —— 进程的创建、终止和等待
linux·运维·elasticsearch·进程控制·进程创建、终止、等待
万象.5 小时前
Linux传输层TCP,UDP相关内容
linux·tcp/ip·udp
耀耀_很无聊6 小时前
09_Jenkins安装JDK环境
java·运维·jenkins
MaximusCoder6 小时前
等保测评命令——Centos Linux
linux·运维·经验分享·python·安全·centos
万象.6 小时前
Linux数据链路层通信原理及报文格式
linux·网络·网络协议
卷Java6 小时前
Linux服务器Docker部署OpenClaw:腾讯云/阿里云/VPS安装避坑指南
linux·运维·服务器
原来是猿8 小时前
Linux-【动静态库】
linux·运维·服务器
深圳市恒讯科技9 小时前
云服务器怎么选?从CPU、内存到IOPS的零基础选型手册
运维·服务器
艾莉丝努力练剑10 小时前
【脉脉】AI创作者崛起:掌握核心工具,在AMA互动中共同成长
运维·服务器·c++·人工智能·安全·企业·脉脉
九皇叔叔10 小时前
CentOS 7.5/RHEL 7.x 配置 YUM 源(阿里云镜像+本地源双方案)
linux·阿里云·centos