标签:自制linux
手把手带你自制Linux系统之二 简易Linux制作
本文利用CentOS5.5自带内核制作一个Mini Linux。
打开准备工作中创建的CentOS,为另一个虚拟机MiniLinux添加一个最小Linux所需要的文件。
1. 创建分区
为准备好的磁盘创建两个主分区,大小分别为20M和512M。
使用fdisk命令创建分区详细过程:
fdisk /dev/hda
创建第一个20M分区依次输入:
n --> p --> 1 --> <Enter> --> +20M
这几个输入代表的意思分别为:
n: add a new partition
p: primary partition
1: Partition number (1-4)
<Enter>: Enter键,选择起始柱面,First cylinder (1-44384, default 1)
+20M: 选择结柱面,可以是使用+size表示希望创建的磁盘大小,Last cylinder or +size or +sizeM or +sizeK (1-44384, default 44384):
创建第二个512M分区依次输入:
n --> p --> 2 --> <Enter> --> +512M
保存分区表退出
w
w: write table to disk and exit
保存后,让操作系统重新读取分区表
partprobe /dev/hda
2. 格式化分区
格式化两个分区为etx3格式
mke2fs -j /dev/hda1 mke2fs -j /dev/hda2
3. 挂载分区
/mnt下创建两个目录,分别用来挂载/dev/hda1/和/dev/hda2/
mkdir /mnt/{boot,sysroot} mount /dev/hda1 /mnt/boot/ mount /dev/hda2 /mnt/sysroot/
4. 添加Linux内核文件
拷贝/boot/目录下CentOS自带内核
cp /boot/vmlinuz-2.6.18-194.el5 /mnt/boot/vmlinuz
5. 添加initrd文件
利用/boot/目录下initrd文件,制作自己的initrd
initrd文件是一个gzip压缩的cpio归档文件,完全解压需要分别使用gzip和cpio命令,经过两步得到最终文件。
gzip和cpio命令的使用点击此处
首先,使用file命令查看/boot/initrd-2.6.18-194.el5.img文件:
[root@localhost~]# file /boot/initrd-2.6.18-194.el5.img /boot/initrd-2.6.18-164.el5.img: gzip compressed data, from Unix, last modified: Thu Jul 23 18:46:14 2015, max compression
使用gzip解压initrd-2.6.18-194.el5.img文件,得到initrd-2.6.18-194.el5.img
cp /boot/initrd-2.6.18-194.el5.img /boot/initrd-2.6.18-194.el5.img.gz gzip -d initrd-2.6.18-194.el5.img.gz
然后,gzip解压得到的initrd-2.6.18-194.el5.img文件是一个cpio归档文件,使用file查看:
[root@localhost~]# file initrd-2.6.18-194.el5.img initrd-2.6.18-194.el5.img: ASCII cpio archive (SVR4 with no CRC)
使用cpio解归档
cd /root mkdir tmp cd tmp cpio -id < ../initrd-2.6.18-164.el5.img
上面两步可以合并为一步,一步到位压缩得到文件
cp /boot/initrd-2.6.18-194.el5.img /boot/initrd-2.6.18-194.el5.img.gz cd /root mkdir tmp cd tmp zcat /root/initrd-2.6.18-194.el5.img.gz | cpio -id
编辑initrd中的init文件
vi init
将其中的
mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00
修改为
mkrootdev -t ext3 -o defaults,ro /dev/hda2
将/root/tmp下所有文件打包压缩,放在/mnt/boot/下
find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz
6. 安装grub
使用grub-install 命令安装
grub-install --root-directory=/mnt /dev/hda
编辑grub配置文件
vi /mnt/boot/grub/grub.conf
内容为:
default=0 timeout=5 title MiniLinux root (hd0,0) kernel /vmlinuz initrd /initrd.gz
7. 添加init和bash
创建根目录下需要的目录
cd /mnt/sysroot mkdir proc dev lib bin sbin home root etc/rc.d usr/{lib,bin,sbin} var/{log,run,lock} tmp mnt sys -pv
复制init和bash
cp /sbin/init /mnt/sysroot/sbin/ cp /bin/bash /mnt/sysroot/bin/
查看init依赖的库文件
[root@localhost sysroot]# ldd /sbin/init linux-gate.so.1 => (0x00d7d000) libsepol.so.1 => /lib/libsepol.so.1 (0x00531000) libselinux.so.1 => /lib/libselinux.so.1 (0x00579000) libc.so.6 => /lib/libc.so.6 (0x00380000) libdl.so.2 => /lib/libdl.so.2 (0x004c8000) /lib/ld-linux.so.2 (0x0035d000)
复制这几个依赖的库文件
cp /lib/libsepol.so.1 lib/ cp /lib/libselinux.so.1 lib/ cp /lib/libc.so.6 lib/ cp /lib/libdl.so.2 lib/ cp /lib/ld-linux.so.2 lib/
查看bash依赖的库文件
[root@localhost sysroot]# ldd /bin/bash linux-gate.so.1 => (0x0071d000) libtermcap.so.2 => /lib/libtermcap.so.2 (0x033a8000) libdl.so.2 => /lib/libdl.so.2 (0x004c8000) libc.so.6 => /lib/libc.so.6 (0x00380000) /lib/ld-linux.so.2 (0x0035d000)
复制这几个依赖的库文件
cp /lib/libtermcap.so.2 lib/ cp /lib/libdl.so.2 lib/ cp /lib/libc.so.6 lib/ cp /lib/ld-linux.so.2 lib/
使用chroot测试一下,如果可以正常切换,说明上面的步骤没有问题
chroot /mnt/sysroot/
8. 编辑init配置文件
vi /mnt/sysroot/etc/inittab
添加内容:
id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit
inittab文件格式可以man 5 inittab查看,也可以参考这里
9. 编辑rc.sysinit文件
vi /mnt/sysroot/etc/rc.d/rc.sysinit
内容为:
#!/bin/bash # echo -e "\t Welcome to \033[31mMy MiniLinux\033[0m." /bin/bash
为rc.sysinit添加可执行权限
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
10. 同步对文件系统的修改到磁盘
sync
11. 验证MiniLinux
将正在使用的CentOS虚拟机挂起,打开虚拟机中的MiniLinux。
首先,会看到grub选择界面
系统启动后启动bash,进入bash命令提示符后,说明系统可以正常启动
总结
至此,一个可以正常启动的linux就算完成了。但是这个系统除了bash没有其他命令,甚至连关机和重启命令都没有。今后将会逐步对这个mini linux进行完善,添加上你想要的功能,最终定制一个你需要的linux。
附录
如果开启MiniLinux后提示启动失败,如图所示
那么就检查一下硬盘是否连接在 IDE 0:0节点
本文出自 “我的学习笔记” 博客,请务必保留此出处http://toormi.blog.51cto.com/10512055/1681035
标签:自制linux
原文地址:http://toormi.blog.51cto.com/10512055/1681035