珠海市建设局官方网站,wordpress 注册 用户名,wordpress微信机器人下载,自己做网站要不要租服务器使用 busybox 构建 Mini Linux FS
构建目标
在 Linux 文件系统下构建一个 Mini 的文件系统#xff0c;构建目标如下#xff1a;
minilinux
├── bin
│ ├── ls
│ ├── top
│ ├── ps
│ ├── sh
│ └── …
├── dev
├── etc
│ ├── g…使用 busybox 构建 Mini Linux FS
构建目标
在 Linux 文件系统下构建一个 Mini 的文件系统构建目标如下
minilinux
├── bin
│ ├── ls
│ ├── top
│ ├── ps
│ ├── sh
│ └── …
├── dev
├── etc
│ ├── group
│ ├── localtime
│ ├── network
│ ├── passwd
│ └── shadow
├── home
├── proc
├── root
├── tmp
├── usr
│ └── sbin
└── var├── spool└── www构建成功后可以使用 chroot 命令进入其中、执行一些简单的命令例如 ls、cd 等。
2. 下载 编译 busybox
下载 busybox 源码版本自己选择下载之后进行解压操作随意位置都可以解压后进入
wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
tar xjf busybox-1.35.0.tar.bz2
cd busybox-1.35.03. 配置 BusyBox
cd 到 busybox-1.35.0 下以后需要进行一些步骤
首先生成默认的配置
make defconfig避免出现依赖动态链接库的情况需要进行一些配置的修改
sed -i s/^# CONFIG_STATIC is not set/CONFIG_STATICy/ .config4. 编译 BusyBox
执行以下命令进行编译
make -j45. 创建目标目录
在 BusyBox 源码根目录之外新建一个目标目录并创建必需的目录结构这里在 busybox 同级目录下创建一个 minilinux 的目录也可以自定义不过后续的相关命令也需要修改。
mkdir -p ../minilinux/{bin,dev,etc,home,proc,root,tmp,usr/sbin,var/spool,var/www}6. 安装 BusyBox
在 源码目录下执行如果第五步创建目标目录时修改过目录位置这里也需要进行对应的修改
make CONFIG_PREFIX../minilinux install7. 脚本示例
将以上的所有步骤集合到一个脚本中该脚本会自动完成下载、编译 BusyBox启用静态编译、构建自定义目录名的迷你 Linux 文件系统包括创建必要的目录、设备节点及基本的 /etc 文件。
#!/bin/bash
# 构建迷你 Linux 文件系统使用 BusyBox
#
# 使用方法
# ./build_minilinux.sh [target_directory]
#
# 如果未指定 target_directory则默认使用 minilinux 作为构建目录。
#
# 构建步骤
# 1. 下载 BusyBox默认为 1.35.0 版本
# 2. 解压并生成默认配置启用静态编译CONFIG_STATICy
# 3. 编译 BusyBox
# 4. 创建目标目录结构并安装 BusyBox 到目标目录中
# 5. 创建必要的设备节点/dev/console 与 /dev/null
# 6. 创建 minimal 的 /etc/passwd 和 /etc/group
# 7. 输出后续使用提示如何 mount /proc 及 chrootset -e# 默认目标目录为 minilinux可通过参数自定义
TARGET_DIR${1:-minilinux}
BUSYBOX_VERSION1.35.0
BUSYBOX_TARBALLbusybox-${BUSYBOX_VERSION}.tar.bz2
BUSYBOX_DIRbusybox-${BUSYBOX_VERSION}echo
echo 构建迷你 Linux 文件系统
echo 目标目录: ${TARGET_DIR}
echo BusyBox 版本: ${BUSYBOX_VERSION}
echo # 如果 BusyBox 压缩包不存在则下载
if [ ! -f ${BUSYBOX_TARBALL} ]; thenecho [1/7] 下载 BusyBox ${BUSYBOX_VERSION}...wget https://busybox.net/downloads/${BUSYBOX_TARBALL}
fi# 如果 BusyBox 源码目录不存在则解压
if [ ! -d ${BUSYBOX_DIR} ]; thenecho [2/7] 解压 BusyBox...tar xjf ${BUSYBOX_TARBALL}
fi# 进入 BusyBox 源码目录
cd ${BUSYBOX_DIR}echo [3/7] 生成默认配置并启用静态编译...
make defconfig# 启用静态编译将 # CONFIG_STATIC is not set 替换为 CONFIG_STATICy
if grep -q ^# CONFIG_STATIC is not set .config; thensed -i s/^# CONFIG_STATIC is not set/CONFIG_STATICy/ .config
fiecho [4/7] 编译 BusyBox...
make -j$(nproc)# 返回上层目录并创建目标文件系统目录结构
cd ..
echo [5/7] 创建目标目录结构 ${TARGET_DIR} ...
mkdir -p ${TARGET_DIR}/{bin,dev,etc,home,proc,root,tmp,usr/sbin,var/spool,var/www}echo [6/7] 安装 BusyBox 到 ${TARGET_DIR} ...
cd ${BUSYBOX_DIR}
make CONFIG_PREFIX../${TARGET_DIR} install
cd ..echo [7/7] 创建必要的设备节点...
# 创建 /dev/console 和 /dev/null需要 root 权限如果不是 root则使用 sudo
if [ $(id -u) -ne 0 ]; thenecho 当前非 root 用户尝试使用 sudo 创建设备节点...sudo mknod -m 600 ${TARGET_DIR}/dev/console c 5 1sudo mknod -m 666 ${TARGET_DIR}/dev/null c 1 3
elsemknod -m 600 ${TARGET_DIR}/dev/console c 5 1mknod -m 666 ${TARGET_DIR}/dev/null c 1 3
fiecho 创建 minimal 的 /etc/passwd 和 /etc/group 文件...
cat ${TARGET_DIR}/etc/passwd EOF
root:x:0:0:root:/root:/bin/sh
EOFcat ${TARGET_DIR}/etc/group EOF
root:x:0:
EOFecho
echo 迷你 Linux 文件系统已构建在目录: ${TARGET_DIR}
echo
echo 测试方法
echo 1. 挂载 /proc用于部分命令:
echo sudo mount -t proc proc ${TARGET_DIR}/proc
echo 2. 使用 chroot 进入新系统:
echo sudo chroot ${TARGET_DIR} /bin/sh
echo 3. 退出后请卸载 /proc:
echo sudo umount ${TARGET_DIR}/proc
echo 在创建完毕后就可以使用 chroot 命令进入 minilinux 目录中进行尝试了。