精简linux

精简linux是为了将linux系统使用固态盘等小容量存储设备来代替pc机上面的硬盘,简约成本,提高速率,延长使用寿命,方便移植。所以呢,那我们呢就来亲手打造一个属于自己的linux,体验一下其中的过程,更深层次的去了解linux系统启动的过程以及系统吧!!!

      制作过程分以下几大步:

一. 准备阶段 

     需要一个宿主机,一个干净的硬盘(大概20G容量),由于实验条件限制,所以本人选用了虚拟机,在linux系统上多加一块硬盘,以sdb命名,完成后取出来即可

二.制作阶段

     1.格式化新硬盘,并进行分区

      命令如下:fdisk -l   查看硬盘和分区

                fdisk  /dev/sdb   进行分区   p   分为3个主分区

                 将第三个分区的id号改为82   t  82

                 对第一个分区执行 a

精简 linux_成本

进行格式化   用到的命令  mkfs  -t  ext3  /dev/sdb1 (/dev/sdb2)

创建挂载点    mkdir /mnt/boot/    mkdir   /mnt/sysroot/

挂载     mount /dev/sdb1   /mnt/boot    mount   /dev/sdb2   /mnt/sysroot

用mount 查看挂载状况 

精简 linux_虚拟机_02

  2.打造过程

(1).grub引导程序  

安装grub引导程序时 

命令    grub-install --root-directory=/mnt  /dev/sdb  

运行grub命令

精简 linux_成本_03

进入/mnt/boot/  查看是否有grub目录 有则成功  反之失败    然后进入grub目录

精简 linux_命名_04

创建grub.conf文件

 

精简 linux_命名_05 

 

 

(2).linux内核

查看宿主机中/boot目录中的内容

精简 linux_虚拟机_06

有这个文件 ,将这个文件拷贝到 我们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下的文件

精简 linux_成本_07

利用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脚本   一次性拷贝

精简 linux_简约_08

 

(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

 

精简 linux_成本_09

设置内核参数

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不断强大起来吧!!!

 

未完待续。。。。