【容器技术01】使用 busybox 构建 Mini Linux FS

使用 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.0

3. 配置 BusyBox

cd 到 busybox-1.35.0 下以后,需要进行一些步骤

  1. 首先生成默认的配置:
make defconfig
  1. 避免出现依赖动态链接库的情况,需要进行一些配置的修改
sed -i 's/^# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config

4. 编译 BusyBox

执行以下命令进行编译:

make -j4

5. 创建目标目录

在 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 install

7. 脚本示例

将以上的所有步骤集合到一个脚本中,该脚本会自动完成下载、编译 BusyBox(启用静态编译)、构建自定义目录名的迷你 Linux 文件系统(包括创建必要的目录、设备节点及基本的 /etc 文件)。

#!/bin/bash
# 构建迷你 Linux 文件系统(使用 BusyBox)
#
# 使用方法:
#   ./build_minilinux.sh [target_directory]
#
# 如果未指定 target_directory,则默认使用 "minilinux" 作为构建目录。
#
# 构建步骤:
# 1. 下载 BusyBox(默认为 1.35.0 版本)
# 2. 解压并生成默认配置,启用静态编译(CONFIG_STATIC=y)
# 3. 编译 BusyBox
# 4. 创建目标目录结构,并安装 BusyBox 到目标目录中
# 5. 创建必要的设备节点(/dev/console 与 /dev/null)
# 6. 创建 minimal 的 /etc/passwd 和 /etc/group
# 7. 输出后续使用提示(如何 mount /proc 及 chroot)set -e# 默认目标目录为 "minilinux",可通过参数自定义
TARGET_DIR=${1:-minilinux}
BUSYBOX_VERSION="1.35.0"
BUSYBOX_TARBALL="busybox-${BUSYBOX_VERSION}.tar.bz2"
BUSYBOX_DIR="busybox-${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_STATIC=y"
if grep -q "^# CONFIG_STATIC is not set" .config; thensed -i 's/^# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .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 目录中进行尝试了。
chroot 命令测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

使用多模态大语言模型进行深度学习的图像、文本和语音数据增强

在过去的五年里&#xff0c;研究方向已从传统的机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;方法转向利用大语言模型&#xff08;LLMs&#xff09;&#xff0c;包括多模态方法&#xff0c;用于数据增强&#xff0c;以提高泛化能力&#xff0c;并在…

PCA9685舵机控制板使用

1. 概述 PCA9685 是一款由 NXP 半导体公司生产的 16 通道 PWM 驱动器&#xff0c;广泛应用于多个舵机、LED 灯带控制等场景。它通过 I2C 总线与主控芯片&#xff08;如 STM32&#xff09;通信&#xff0c;可以高效地控制多个舵机的运动和多通道 PWM 输出。该模块适用于多舵机控…

2025.2.6(c++杂项补充及qt基础介绍)

作业 1> 完善C的思维导图 2> 重新创建一个新的项目&#xff0c;将默认提供的代码进行注释 3> QT的思维导图 4> 刷2个 98 C 牛客网上的题 笔记&#xff08;后期复习补上&#xff09;

Postgresql的三种备份方式_postgresql备份

这种方式可以在数据库正在使用的时候进行完整一致的备份&#xff0c;并不阻塞其它用户对数据库的访问。它会产生一个脚本文件&#xff0c;里面包含备份开始时&#xff0c;已创建的各种数据库对象的SQL语句和每个表中的数据。可以使用数据库提供的工具pg_dumpall和pg_dump来进行…

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644

本文主要介绍在S4 HANA OP中S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644的后台配置及前台操作。具体请参照如下内容&#xff1a; 目录 Deferred Tax Transfer - S_AC0_52000644 1. 后台配置 1.1 Business Transaction Events激活- FIBF 2. 前台操作 …

Redis --- 使用GEO实现经纬度距离计算

什么是GEO&#xff1f; Spring Boot 项目中可以通过 Spring Data Redis 来使用 Redis GEO 功能&#xff0c;主要通过 RedisTemplate 和 GeoOperations 接口来操作地理位置数据。 Service public class GeoService {Autowiredprivate RedisTemplate<String, Object> red…

【中间件】 Kafka

1.先导知识&#xff1a; 消息队列MQ(Message Queue): 将需要传输的数据临时(设置有效期)存放在队列中,进行存取消息消息队列中间件&#xff1a; 用来存储消息的中间件(组件) 2.消息队列的应用场景 异步处理 为什么要使用消息队列&#xff1f; 比较耗时的操作放在其他系统中…

android 打包AAR-引入资源layout-安卓封包

Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_cyberwin_devicescanner);mListView (ListView) this.findViewById(R.id.result);mListView.setAdapter(mListAdapter);

问卷数据分析|SPSS之分类变量描述性统计

1.点击分析--描述统计--频率 2. 选中分类变量&#xff0c;点击中间箭头 3.图表选中条形图&#xff0c;图表值选择百分比&#xff0c;选择确定 4.这里显示出了描述性统计的结果 5.下面就是图形&#xff0c;但SPSS画的图形都不是很好啊看&#xff0c;建议用其他软件画图&#xff…

【Gitlab】虚拟机硬盘文件丢失,通过xx-flat.vmdk恢复方法

前言 由于近期过年回家&#xff0c;为了用电安全直接手动关闭了所有的电源&#xff0c;导致年后回来商上电开机后exsi上的虚拟机出现了问题。显示我的gitlab虚拟机异常。 恢复 开机之后虚拟机异常&#xff0c;通过磁盘浏览发现gitlab服务器下面的虚拟机磁盘文件只有一个xxx-f…

Python aiortc API

本研究的主要目的是基于Python aiortc api实现抓取本地设备媒体流&#xff08;摄像机、麦克风&#xff09;并与Web端实现P2P通话。本文章仅仅描述实现思路&#xff0c;索要源码请私信我。 1 demo-server解耦 1.1 原始代码解析 1.1.1 http服务器端 import argparse import …

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…

基于Hexo实现一个静态的博客网站

原文首发&#xff1a;https://blog.liuzijian.com/post/8iu7g5e3r6y.html 目录 引言1.初始化Hexo2.整合主题Fluid3.部署评论系统Waline4.采用Nginx部署 引言 Hexo是中国台湾开发者Charlie在2012年创建的一个开源项目&#xff0c;旨在提供一个简单、快速且易于扩展的静态博客生…

足球俱乐部管理系统的设计与实现

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 足…

tolua[一]框架搭建,运行example

一.安装tolua https://github.com/topameng/tolua 下载LuaFramework_UGUI的zip 将Assets目录拷贝到项目根目录下 提示确认注册&#xff0c;遇到这个对话框点确定即可 生成如下目录 二.LuaFramework->Build Windows Resource 接下来的目标是将这个main场景跑起来 需要先执行…

JVM图文入门

往期推荐 【已解决】redisCache注解失效&#xff0c;没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练

文章目录 第二节 串串的基本概念串的模式匹配朴素的模式匹配算法(BF算法)算法最坏时间复杂度O(n x m) 改进的模式匹配算法(KMP算法)特征向量next&#xff0c;来确定k值特征向量next的算法实现 算法最坏时间复杂度O(n)进一步改进next值的计算&#xff0c;简化步骤 第四章真题真题…

GPU-Z重磅更新,Blackwell架构全面支持

由TechPowerUp倾力打造的GPU-Z&#xff0c;是一款集显卡信息查看、实时监控与深度诊断于一体的强大工具。它以其轻巧灵便的体积、完全免费的使用模式以及极其友好的操作界面&#xff0c;赢得了全球无数用户的青睐与信任&#xff0c;成为PC硬件领域中不可或缺的软件。 GPU-Z不仅…