用Shell脚本实现自动化完成属于自己的微型Linux!(二)
2011-08-04 19:32
751 查看
刚才我们已经完成了前三步的工作。我们再次对整个Shell脚本的实现方式进行一次分析:
实现过程分析:
1.分区,按照用户所选的盘,将其格式化,分区
2.挂载,按照用户设定的的分区好的盘分别挂载在我们宿主机的一个目录上。方便对微型linux进行编辑。
3.对微型Linux进行写入各项配置信息
4.将微型Linux中我们需要用到的Bash等命令放进去
5.放入内核,和启动必须加载的配置文件
6.对用户的硬盘安装引导程序。
----------------------------------------------------------------------------------------------------------
好的,刚才那算是帮助大家整理思路,算是“上集回顾”吧~接下来我们继续!将Shell脚本进行到底!
第四步:移植各种各样我们需要的命令进去:
脚本分析:
为了移植命令,我们就要先将我们宿主系统上的命令复制过去。
但是仅仅复制命令是不够的,我们还要将命令所对应的库文件复制过去。
那么,不同的命令有不同的样式,也有不同/相同的库文件。
我们就要辨别到底复制哪些库文件,复制到哪,有没有重复~
最后,我们要知道,不是仅仅复制一个命令就好,我们要循环的让用户选择到底需要什么命令。直到都复制结束~
好的,分析OK,我们按照计划着手去做吧!
OK~这样一来,我们的小linux里也有了各种各样我们所输入的命令啦~接下来,就要往里添加内核了!
让我们的linux运行起来!!!!!
--------------------------------------------------------------------------------------------
第五步:弄个内核!让我们的Linux拥有心脏!
在手动打造属于自己的linux的时候,我们已经知道,我们的内核是直接用Redhat的内核文件。
然后再修改initrd这个能在内存中虚拟出一个小linux方便加载根目录系统的文件。
之后,我们将其移植进去就好。
接下来,我们开始做吧~!
ok~我们小linux的心脏也有了~接下来,就是最后一步了!!!给硬盘一个引导,让他知道自己该如何运行!!!!
---------------------------------------------------------------------------------------------------------
第六步:引导文件!
那么,既然需要引导,就又要提到我们伟大的 Grub了~ 它能直接给硬盘安装一个MBR进去~让其拥有boot loader~
这样一来,硬盘在开机启动之后就自己知道自己要做些什么了~~!
当然,我们的系统我们做主,所以里面要加上你自己的东西哟!!
开始动手吧!
OK~~!!!! 一切搞定~
接下来我们就去测试把~
按照这样的写下来,我们可以说基本实现了一键安装linux,并且是你自己制定的哟!!!!!
~
嗯~
看懂了么?会了么-。-那么,自己做做吧~~
当然,还是那样,如果发现有什么不同,或者各种意见,欢迎与我交流~
共同切磋才能共同进步嘛!!!!
weiyan
2011.8.4
实现过程分析:
1.分区,按照用户所选的盘,将其格式化,分区
2.挂载,按照用户设定的的分区好的盘分别挂载在我们宿主机的一个目录上。方便对微型linux进行编辑。
3.对微型Linux进行写入各项配置信息
4.将微型Linux中我们需要用到的Bash等命令放进去
5.放入内核,和启动必须加载的配置文件
6.对用户的硬盘安装引导程序。
----------------------------------------------------------------------------------------------------------
好的,刚才那算是帮助大家整理思路,算是“上集回顾”吧~接下来我们继续!将Shell脚本进行到底!
第四步:移植各种各样我们需要的命令进去:
脚本分析:
为了移植命令,我们就要先将我们宿主系统上的命令复制过去。
但是仅仅复制命令是不够的,我们还要将命令所对应的库文件复制过去。
那么,不同的命令有不同的样式,也有不同/相同的库文件。
我们就要辨别到底复制哪些库文件,复制到哪,有没有重复~
最后,我们要知道,不是仅仅复制一个命令就好,我们要循环的让用户选择到底需要什么命令。直到都复制结束~
好的,分析OK,我们按照计划着手去做吧!
function COPYLIB { # 我们依然使用函数,方便以后的调用工作。 #copy command if which $1 &> /dev/null ;then # 判断用户输入的命令是否真的是个命令,总不能我们输入1,也复制1进去吧~=。= AA=`which $1 | tail -1 | awk '{print $1}'` cp "$AA" $2"$AA" # 如果判断成功,则复制~ else echo "$1 is not exist" fi #copy lib # 开始复制命令对应的lib库文件 for LIB in `ldd "$AA" | grep "/lib/" | sed '1,$s@^[[:space:]]/lib@aaa=> /lib@g' | awk -F"=> " '{print $2}' | cut -d" " -f1`;do LIBPATH=`echo $LIB | sed 's@\(.*\)/[^[:space:]]\{1,\}@\1@g'` # 我们用了一个for循环,来判断我们输入的命令所含的lib,并且将他们对齐,列表 [ -d ${2}$LIBPATH ] || mkdir ${2}$LIBPATH # 判断我们即将复制过去的目录是否存在,万一不存在则创建 [ ! -e $2/$LIB ] && cp -f $LIB ${2}$LIBPATH && echo "$LIB done" # 开始复制~并提示 复制的效果~~ done } # 到这里,这个函数就结束了,下面我们准备调用。首先要知道,有两个命令是必须复制的,一个是bash ,一个是 init ,两个都是非常非常重要的命令。 echo "==========================================================" echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!" read -p "COMMAND you want?(Quit for 'q') :" CMD1 # 就是因为太重要,所以我们用上一条语句红色警示用户,必须先复制这两条。 # 然后我们制造一个循环,方便用户反复的加入各种各样的命令。 until [ $CMD1 == 'q' ]; do # 当然,不能总是输入吧,所以我们只需要按 ‘q’ COPYLIB $CMD1 /mnt/sysroot # 执行函数 并且传递我们所输入的命令。 echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!" read -p "Which COMMAND you want use ?(Quit for 'q') :" CMD1 done
OK~这样一来,我们的小linux里也有了各种各样我们所输入的命令啦~接下来,就要往里添加内核了!
让我们的linux运行起来!!!!!
--------------------------------------------------------------------------------------------
第五步:弄个内核!让我们的Linux拥有心脏!
在手动打造属于自己的linux的时候,我们已经知道,我们的内核是直接用Redhat的内核文件。
然后再修改initrd这个能在内存中虚拟出一个小linux方便加载根目录系统的文件。
之后,我们将其移植进去就好。
接下来,我们开始做吧~!
function YDFQ { # 依然是函数-。- TMPDIR=`mktemp -d /tmp/little.XX` # 创建一个临时文件夹,一会儿我们要解压initrd.*.img 用哦~ cd $TMPDIR zcat /boot/initrd-`uname -r`.img | cpio -id &> /dev/null ## 在临时文件夹中解压并展开我们的initrd文件,准备修改。 sed -i 's@^echo Scanning and configuring dmraid supported devices@#&@g' init sed -i 's@^echo Scanning logical volumes@#&@g' init sed -i 's@^lvm vgscan --ignorelockingfailure@#&@g' init sed -i 's@^echo Activating logical volumes@#&@g' init sed -i 's@^lvm vgchange -ay --ignorelockingfailure vol0@#&@g' init sed -i 's@^resume LABEL=SWAP-sda3@#&@g' init # 在init文件中注释掉我们没用的行~ sed -i "s@\(mkrootdev.*\) /.*@\1 sda2@" init # 改变init文件中有用的,比如我们要判断到时候执行哪个盘。 find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz # 重新归档并压缩成initrd.gz文件~ cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz # 将我们整理好的文件复制到我们的分区中去! } YDFQ /mnt/sysroot # 函数执行的开始-。- 好吧,请原谅我总是将它写在后面
ok~我们小linux的心脏也有了~接下来,就是最后一步了!!!给硬盘一个引导,让他知道自己该如何运行!!!!
---------------------------------------------------------------------------------------------------------
第六步:引导文件!
那么,既然需要引导,就又要提到我们伟大的 Grub了~ 它能直接给硬盘安装一个MBR进去~让其拥有boot loader~
这样一来,硬盘在开机启动之后就自己知道自己要做些什么了~~!
当然,我们的系统我们做主,所以里面要加上你自己的东西哟!!
开始动手吧!
## 这里我们要传递四个值到我们的函数中 ## $1=我们要安装对哪个硬盘安装bootloader ## $2=我们的主分区,就是内核文件等所在的分区 ## $3=内核的名字 ## $4=initrd 的名字~ ## function GRUB { ## 好吧,各种各样的函数-。- if [ `basename $2` == boot ];then ## 判断用户输入的主分区是否是我们需要的主分区,不过这个肯定是了,因为下面我们手动指定了-。- grub-install --root-directory=/mnt $1 &> /dev/null # 安装grub,到我们的分区去,这样我们就有了bootloader了! cat >>$2/grub/grub.conf<< EOF # 制定我们自己的开机方式~~ default=0 timeout=10 title Little Linux root (hd0,0) kernel /${3} ro root=/dev/sda2 quiet initrd /${4} EOF else echo "It's not boot !Exit & Please set it again !" fi } GRUB $DSK /mnt/boot vmlinuz initrd.gz # 好吧,函数开始执行了-。- echo "Congratulation ! Your Mini Linux is install OK !" # 显示庆祝信息!告诉用户我们已经安装好了!
OK~~!!!! 一切搞定~
接下来我们就去测试把~
按照这样的写下来,我们可以说基本实现了一键安装linux,并且是你自己制定的哟!!!!!
~
嗯~
看懂了么?会了么-。-那么,自己做做吧~~
当然,还是那样,如果发现有什么不同,或者各种意见,欢迎与我交流~
共同切磋才能共同进步嘛!!!!
weiyan
2011.8.4
相关文章推荐
- 用Shell脚本实现自动化完成属于自己的微型Linux!(一)
- 用Shell脚本实现自动化完成属于自己的微型Linux!(二)
- 用Shell脚本实现自动化完成属于自己的微型Linux!(一)
- 在linux下使用shell脚本自动化完成hadoop集群搭建
- 通过shell脚本实现自动化安装LINUX
- 新手学习Linux——rsync+shell脚本完成自动化备份
- shell脚本实现linux系统文件完整性检测
- Linux使用Shell脚本实现ftp的自动上传下载
- Linux基础之-利用shell脚本实现自动监控系统服务
- Linux使用Shell脚本实现ftp的自动上传下载
- linux脚本自动化实现远程登陆操作和传输文件(scp ssh expect)
- linux shell awk实现实时监控网卡流量脚本
- 使用 Shell 脚本自动化 Linux 系统维护任务
- Linux学习-->如何通过Shell脚本实现发送邮件通知功能?
- Hive结合shell脚本实现自动化业务
- Hive结合shell脚本实现自动化业务
- Linux下实现SNMP一键安装的Shell脚本
- linux系统shell脚本实现 恶意扫描服务器密码 自动屏蔽
- Linux使用Shell脚本实现ftp的自动上传下载
- Shell脚本实现自动化安装