精简linux
精简linux是为了将linux系统使用固态盘等小容量存储设备来代替pc机上面的硬盘,简约成本,提高速率,延长使用寿命,方便移植。所以呢,那我们呢就来亲手打造一个属于自己的linux,体验一下其中的过程,更深层次的去了解linux系统启动的过程以及系统吧!!!
制作过程分以下几大步:
一. 准备阶段
需要一个宿主机,一个干净的硬盘(大概20G容量),由于实验条件限制,所以本人选用了虚拟机,在linux系统上多加一块硬盘,以sdb命名,完成后取出来即可
二.制作阶段
1.格式化新硬盘,并进行分区
命令如下:fdisk -l 查看硬盘和分区
fdisk /dev/sdb 进行分区 p 分为3个主分区
将第三个分区的id号改为82 t 82
对第一个分区执行 a
进行格式化 用到的命令 mkfs -t ext3 /dev/sdb1 (/dev/sdb2)
创建挂载点 mkdir /mnt/boot/ mkdir /mnt/sysroot/
挂载 mount /dev/sdb1 /mnt/boot mount /dev/sdb2 /mnt/sysroot
用mount 查看挂载状况
2.打造过程
(1).grub引导程序
安装grub引导程序时
命令 grub-install --root-directory=/mnt /dev/sdb
运行grub命令
进入/mnt/boot/ 查看是否有grub目录 有则成功 反之失败 然后进入grub目录
创建grub.conf文件
(2).linux内核
查看宿主机中/boot目录中的内容,
有这个文件 ,将这个文件拷贝到 我们linux的boot目录下就行了
cp /boot/vmlinux-2.6.18-164.e15 /mnt/boot
(3).linux的驱动initrd文件
宿主机boot目录下同样有这样一个文件
-rw------- 1 root root 2602252 Jul 20 00:22 initrd-2.6.18-164.el5.img
在~目录下创建一个目录 假设为abc
进入abc目录下 将initrd文件解压到该目录下 zcat /boot/initrd-2.6.18-164.el5.img |cpio -id
查看abc下的文件
利用vim init 将 resume LABEL=SWAP-sda3 注释掉 位于87行
重新将他打包 find . |cpio -o -H newc --quiet |gzip -9 -n >/mnt/boot/initrd.gz
编辑新的grub菜单 如上图
(3). 建立根目录
在sysroot下创建以下目录
Bin boot dev etc home lib media mnt misc net opt proc root sbin selinux srv
Sys tftpboot tmp usr var
Mkdir usr/bin
Mkdir usr/sbin
Mkdir etc/rc.d
用which 命令 查出 init的位置
将init 拷贝到sysroot/sbin 下 cp /sbin/init /mnt/sysroot/sbin
找到库文件 并拷贝到相应位置
执行ldd 命令 查出依赖的链接库文件
linux-gate.so.1 => (0x00626000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00585000)
libselinux.so.1 => /lib/libselinux.so.1 (0x005cd000)
libc.so.6 => /lib/libc.so.6 (0x003d5000)
libdl.so.2 => /lib/libdl.so.2 (0x00546000)
/lib/ld-linux.so.2 (0x003b7000)
除了不带lib的文件 只要带lib都要拷 需要拷的有 bash init ls cat
cp /lib/libsepol.so.1 /mnt/sysroot/lib/
其余的同上 一一拷贝 如果可以 自己可以编一个shell脚本 一次性拷贝
(4).创建Linux的/etc/inittab、/etc/rc.d/rc.sysinit文件
切换到sysroot/etc下
根据宿主机的inittab信息 创建新的inittab
需要以下文件 因为是简易的 故仅列出自己需要的
21si::sysinit:/etc/rc.d/rc.sysinit
22
23 l0:0:wait:/etc/rc.d/ sysshutdown
29 l6:6:wait:/etc/rc.d/sysreboot
在rc.d 目录下 创建两个脚本 一个是sysshutdown 一个是 sysreboot
Sysshutdown
#!/bin/bash
Exec /sbin/halt -p (拷贝)
Sysreboot
#!/bin/bash
Exec /sbin/reboot -f (强制)
为两个脚本文件加上可执行 a+x
同时把halt 和reboot 拷贝的/mnt/sysroot/sbin的相应目录下
进入rc.d目录下 创建一个rc.sysinit
#!/bin/bash
echo -e "\033[31m mylinux \033[0m"
/bin/bash
Chmod a+x rc.sysinit
将hostname ifconfig ping 拷贝到/mnt/sysroot/
怎么初始化你的主机名字呢
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
HOSTNAME=localhost
Fi
/bin/hostname $HOSTNAME
追加到rc.sysinit 在etc目录下创建sysconfig
执行 cp /etc/sysconfig/network sysconfig/ 将宿主机的sysconfig文件拷贝到我们linux的sysconfig下
想要设置网络,将以下模块考到 /mnt/sysroot/lib/modules
设置内核参数
Set -p
设置网络参数
/sbin/insmod /lib/moudules/mii.ko /sbin/insmod /lib/moudules/pcnet32.ko
/sbin/ifconfig eth0 192.168.1.44/24
/sbin/ifconfig lo 127.0.0.1/8
以上信息要追加到rc.sysinit中哦
然后是将 insmod ifconfig 拷贝到 /mnt/sysroot/etc
最后是 要想在启动的界面上有图片
需要先安装本地yum
先创建挂载点,挂载光盘 ,再进入/etc/yum.conf ,
编辑 yum.repos.d/rhel-debuginfo.repo 修改baseurl:file:///mnt/cdrom/Server
用yum安装 gimp
执行 gimp
将图片传到系统中 用gimp做图片 具体自己试试就知道 不再作介绍
Sync
Sync 把相关信息同步到他们要写入的磁盘设备上去
3.安装到其他机器上 将硬盘换成我们做的这个 启动
这个linux 还不完善 大家呢喜欢什么或者需要什吗 ,就添加什么 ,是我们的linux不断强大起来吧!!!
未完待续。。。。