ubuntu系统debootstrap的使用

debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是“基本的系统”。

fedora下(centos亦可用)有类似功能的工具:febootstrap。观察这两个工具名称,可以看到debootstrap使用debian前缀“de”,而febootstrap使用fedora前缀“fe”,bootstrap含义为“引导”,并如果做过LFS的话,对它了解会比较多,而在编译gcc编译器时也有涉及到这个概念。不过debootstrap或febootstrap似乎没有表达出“引导”的意思。

制作根文件系统,在PC上最全面的莫过于LFS(linux form scratch,从头做一个linux系统),而嵌入式中,busybox是不二之选。当然,随着芯片的强大及一些linux发行版本的进化,也有桌面系统直接用于嵌入式领域中,比如ubuntu,就有支持硬件浮点的工具直接下载。

ubuntu默认没有安装debootstrap,安装十分简单,执行下列命令即可:

# sudo apt-get install debootstrap

使用也十分简单,命令格式为:

sudo debootstrap --arch [平台] [发行版本代号] [目录]

比如下面的命令

sudo debootstrap --arch i386 trusty /mnt

即是构建x86(32位)平台ubuntu最新发行版14.04(代号为trusty)的基本系统,存放到/mnt目录下。

当前debootstrap支持的发行版本可以在/usr/share/debootstrap/scripts查看,而各发行版代号,可以到http://en.wikipedia.org/wiki/List_of_Ubuntu_releases查看。比如gutsy是7.10的代号,precise是12.04的代号,等等。

输入上述命令后,就会从网络下载相关的文件,当看到

I: Configuring python-central... I: Configuring ubuntu-minimal... I: Configuring libc-bin... I: Configuring initramfs-tools... I: Base system installed successfully.

即表示成功。如果看到

E: Failed getting release file http://archive.ubuntu.com/ubuntu/dists/trusty/Release

或卡在

I: Retrieving Release

则可能是网络原因。

下载的文件在/mnt/var下,如:

$ tree . ├── debootstrap │ ├── debootstrap.log │ └── debpaths └── var ├── cache │ └── apt │ └── archives │ ├── adduser_3.113+nmu3ubuntu3_all.deb │ ├── apt_1.0.1ubuntu2_i386.deb

其中adduser_3.113是14.04对应的adduser。从这里也可以确认其下载的是哪一发行版的软件。

下面使用chroot进入/mnt目录,并查看linux版本。

latelee@ubuntu:~$ cd /mnt/ latelee@ubuntu: /mnt$ ls bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var latelee@ubuntu: /mnt$ sudo -s [sudo] password for latelee: root@ubuntu: /mnt# chroot . root@ubuntu:/# ls bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var root@ubuntu:/# cat etc/issue Ubuntu 14.04 LTS \n \l root@ubuntu:/# ls /proc/ -l total 0 root@ubuntu:/# ifconfig Warning: cannot open /proc/net/dev (No such file or directory). Limited output. root@ubuntu:/# uname -a Linux ubuntu 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014 i686 i686 i686 GNU/Linux

因为当然系统使用的并不这个新的系统,因此/proc并没有内容,而内核依然是当前系统所用的版本。

使用光盘不成功

W: Failure trying to run: chroot /home/latelee/test_sys mount -t proc proc /proc W: See /home/latelee/test_sys/debootstrap/debootstrap.log for details

 

### 如何裁剪 Ubuntu 系统以减少占用空间并实现定制化 裁剪 Ubuntu 系统可以显著减少其磁盘占用和内存消耗,从而适应特定的应用场景或嵌入式设备需求。以下是关于如何裁剪 Ubuntu 的方法: #### 1. 使用 `debootstrap` 创建最小化的基础系统 可以通过工具如 `debootstrap` 来创建一个最精简的基础 Ubuntu 环境。该工具会安装必要的软件包而不包含任何额外的功能模块。 ```bash sudo debootstrap --variant=minbase focal /path/to/chroot http://archive.ubuntu.com/ubuntu/ ``` 上述命令中的参数说明: - `--variant=minbase`: 表示只安装最基本的依赖关系。 - `focal`: 是目标发行版本代号(此处为 Focal Fossa, 即 20.04 LTS)。可以根据需要替换为目标版本名称[^1]。 #### 2. 配置 APT 源列表优化下载速度与存储效率 编辑 `/etc/apt/sources.list` 文件,移除不必要的源地址或者切换至更接近地理位置的镜像站点,这样不仅可以加快更新过程还能节省网络带宽资源。 另外还可以启用APT缓存清理功能,在完成所有必需组件安装之后运行以下脚本来释放临时文件所占的空间: ```bash apt-get clean && apt-get autoclean ``` #### 3. 移除非必要服务和服务守护进程 许多默认的服务可能并不适合所有的部署情况。例如对于一些服务器角色而言图形界面完全没有意义,则可以直接禁用GDM/Xorg等相关显示管理器及其关联库;同样道理也适用于其他类型的后台程序比如CUPS打印服务、蓝牙支持等。 查看当前正在运行的服务状态可执行如下指令: ```bash systemctl list-units --type=service --state=running ``` 停止不需要的服务并通过设置开机自启属性来永久生效: ```bash sudo systemctl stop <servicename>.service sudo systemctl disable <servicename>.service ``` #### 4. 利用编译选项进一步缩小二进制尺寸 当重新编译某些应用程序时,可以考虑采用合适的编译标志去除调试信息(-g),关闭未使用的特性开关(--disable-*), 并开启高级别的优化级别(-O2 或者更高)[^4]. 例如在构建BusyBox这样的多功能小型实用工具集合的时候就可以指定这些参数达到最佳效果. --- ### 示例代码片段展示如何调整GCC编译参数 ```c gcc -Wall -Wextra -Os -ffunction-sections -fdata-sections \ -flto -march=native -mtune=cortex-a7 -mfpu=vfpv3-d16 \ -o myprogram main.c util.c common.h ld -gc-sections -o final_program myprogram.o ``` 此段落展示了通过 GCC 编译器传递多个选项组合起来的方式尽可能压缩最终生成的目标文件大小的同时保持良好的性能表现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值