Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427412
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1101
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-20 19:29
个人简介

http://meetbill.github.io/

文章分类

全部博文(121)

我的朋友

分类: LINUX

2015-04-13 20:58:27

启动流程介绍:

制作Linux小系统之前,我们有必要再了解一下Linux的启动流程:

1、首先Linux要通过POST自检,检查硬件设备有没有故障

2、如果有多块启动盘的话,需要在BIOS中选择启动磁盘

3、启动MBR中的bootloader引导程序

4、加载内核文件

5、执行所有进程的父进程、老祖宗init

6、打印欢迎界面

在Linux的启动流程中,加载内核文件时还需要借助别外两个文件:

1)initrd,是CentOS5上用内存模拟的磁盘设备

2)initramfs,是CentOS6上用内存模拟的文件系统

在启程的流程中,init主要是用来做哪些操作的呢?

init通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本

启发

到Linux打印欢迎界面后,就说明系统已经启动成功,如果我们要制作一个Linux小系统,我们只需要把它在开机流程中用到的各文件都装载到一起,就可以点亮属于我们自己的系统了,而Linux是一个模块化的操作系统,好多功能组件都是通过模块化的工具来实现的,而且支持动态装载和卸载,我们要是想实现某种功能,只需加载相应的模块即可,就可以实现我们的Linux操作系统大瘦身了。


点击(此处)折叠或打开

  1. #!/bin/bash
  2. #拷贝系统安装所需的软件包
  3. SYSTEM_DIR=/home/centos
  4. SYSTEM_NAME=itnihaoOS
  5. ISO_MOUNT_POIONT1=/mnt/cd1
  6. ISO_MOUNT_POIONT2=/mnt/cd2
  7. mount_ISO (){
  8. mkdir ${ISO_MOUNT_POIONT1}
  9. mkdir ${ISO_MOUNT_POIONT2}
  10. mkdir ${SYSTEM_DIR}/Packages -p
  11. mkdir /home/source
  12. echo "请确保光驱里面有ISO文件,且可以被挂载"
  13. echo "请输入Y/y继续,任意键则退出运行"
  14. read ret
  15. [ ${ret} != "Y" -a ${ret} != "y" ] && exit 1
  16. echo "echo 默认情况,挂载的是/dev/cdrom到${ISO_MOUNT_POIONT1}"
  17. ls ${ISO_MOUNT_POIONT1} |grep Packages
  18. if [ "$?" == 0 ]
  19. then
  20. echo "光驱已经挂载"
  21. else
  22. echo "正在尝试挂载本地光驱到/mnt/cd1,请稍等片刻"
  23. mount /dev/cdrom ${ISO_MOUNT_POIONT1}
  24. ls ${ISO_MOUNT_POIONT1} |grep Packages
  25. if [ "$?" != 0 ]
  26. then
  27. echo "光盘挂载不成功,请手动重新挂载,或者尝试本地ISO挂载"
  28. echo "请输入本地ISO的路径:"
  29. read ret
  30. ls ${ret}
  31. [ "$?" != 0 ] && echo "本地ISO不存在或者路径错误,退出运行" && exit 1
  32. [ "$?" == 0 ] && mount -o loop ${ret} ${ISO_MOUNT_POIONT1}
  33. fi
  34. fi
  35. }
  36. copy_ISO_file (){
  37. awk '{print $2}' install.log |sed -e '/^$/d' -e 's/^ //g'|grep -v FINISHED|grep -v ":" >/home/source/packges.list
  38. for packges in $(cat /home/source/packges.list)
  39. do
  40. cp ${ISO_MOUNT_POIONT1}/Packages/$packges* ${SYSTEM_DIR}/Packages
  41. [ $? != 0 ] && echo "copy $packges is faied!"&& cp ${ISO_MOUNT_POIONT2}/Packages/$packges* ${SYSTEM_DIR}/Packages
  42. [ $? != 0 ] && echo "$packges is not exist in ${ISO_MOUNT_POIONT2}/Packages/"
  43. done
  44. rsync -a --exclude=Packages ${ISO_MOUNT_POIONT1}/ ${SYSTEM_DIR}
  45. }
  46. rebuild_repo_xml (){
  47. yum -y install createrepo mkisofs
  48. cd ${SYSTEM_DIR}
  49. declare -x discinfo=$(head -1 .discinfo)
  50. ##########################centos6.3_X64###############################
  51. #mv ${SYSTEM_DIR}/repodata/*x86_64-comps.xml ${SYSTEM_DIR}/repodata/comps.xml
  52. #createrepo -g ${SYSTEM_DIR}/repodata/comps.xml ${SYSTEM_DIR}
  53. #createrepo -u "media://$discinfo" -g ${SYSTEM_DIR}/repodata/comps.xml ${SYSTEM_DIR}
  54. ######################################################################
  55. ##########################centos6.4_X64###############################
  56. mv ${SYSTEM_DIR}/repodata/*x86_64-comps.xml ${SYSTEM_DIR}/repodata/c6-x86_64-comps.xml
  57. createrepo -g ${SYSTEM_DIR}/repodata/c6-x86_64-comps.xml ${SYSTEM_DIR}
  58. createrepo -u "media://$discinfo" -g ${SYSTEM_DIR}/repodata/c6-x86_64-comps.xml ${SYSTEM_DIR}
  59. #mkisofs -o ${SYSTEM_NAME}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -V itnihao -T ${SYSTEM_DIR}
  60. }
  61. isolinux_cfg (){
  62. cat > ${SYSTEM_DIR}/isolinux/isolinux.cfg <
  63. default auto
  64. timeout 600
  65. #default vesamenu.c32
  66. #prompt 1
  67. display boot.msg
  68. menu background splash.jpg
  69. menu title Welcome to SucunOS 6.6!
  70. menu color border 0 #ffffffff #00000000
  71. menu color sel 7 #ffffffff #ff000000
  72. menu color title 0 #ffffffff #00000000
  73. menu color tabmsg 0 #ffffffff #00000000
  74. menu color unsel 0 #ffffffff #00000000
  75. menu color hotsel 0 #ff000000 #ffffffff
  76. menu color hotkey 7 #ffffffff #ff000000
  77. menu color scrollbar 0 #ffffffff #00000000
  78. label auto
  79. menu label ^Auto Install system
  80. menu default
  81. kernel vmlinuz
  82. append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
  83. label linux
  84. menu label ^Install or upgrade an existing system
  85. kernel vmlinuz
  86. append initrd=initrd.img
  87. label vesa
  88. menu label Install system with ^basic video driver
  89. kernel vmlinuz
  90. append initrd=initrd.img xdriver=vesa nomodeset
  91. label rescue
  92. menu label ^Rescue installed system
  93. kernel vmlinuz
  94. append initrd=initrd.img rescue
  95. label local
  96. menu label Boot from ^local drive
  97. localboot 0xffff
  98. label memtest86
  99. menu label ^Memory test
  100. kernel memtest
  101. append -
  102. EOF
  103. }
  104. ks_file(){
  105. cat > ${SYSTEM_DIR}/isolinux/ks.cfg <
  106. # Kickstart file automatically generated by anaconda.
  107. #Itnihao OS
  108. #date 2012-04-24
  109. #date 2013-06-28
  110. #version=V1.1
  111. install
  112. text
  113. cdrom
  114. lang en_US.UTF-8
  115. keyboard us
  116. skipx
  117. #network --onboot yes --device eth0 --bootproto static --ip 192.168.122.20 --netmask 255.255.255.0 --gateway 192.168.122.1 --noipv6 --nameserver 114.114.114.114
  118. network --onboot yes
  119. rootpw itnihao
  120. firewall --service=ssh --port=80:tcp
  121. authconfig --enableshadow --passalgo=sha512
  122. selinux --enforcing
  123. timezone Asia/Shanghai
  124. bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto quiet"
  125. # The following is the partition information you requested
  126. # Note that any partitions you deleted are not expressed
  127. # here so unless you clear all partitions first, this is
  128. # not guaranteed to work
  129. #clearpart --none
  130. clearpart --all --initlabel
  131. zerombr
  132. #part /boot --fstype=ext4 --size=2000
  133. #part swap --size=5000
  134. #part / --fstype=ext4 --grow --size=200
  135. reboot
  136. #repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
  137. %packages
  138. @base
  139. @core
  140. @mysql
  141. @server-policy
  142. @workstation-policy
  143. @parted
  144. @gcc
  145. @gcc-c++
  146. @cmake
  147. @ncurses-devel
  148. @perl
  149. @perl-devel
  150. @bc
  151. @boost-thread
  152. @boost-devel
  153. @gbd
  154. @createrepo
  155. @mysql
  156. @sysstat
  157. @screen
  158. EOF
  159. }
  160. build_new_ISO (){
  161. cd ${SYSTEM_DIR}
  162. mkisofs -o ${SYSTEM_NAME}.iso -input-charset utf-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -V itnihao -T ${SYSTEM_DIR}
  163. }
  164. main (){
  165. mount_ISO
  166. copy_ISO_file
  167. isolinux_cfg
  168. ks_file
  169. rebuild_repo_xml
  170. build_new_ISO
  171. }
  172. main

阅读(646) | 评论(0) | 转发(0) |
0

上一篇:yum本地源

下一篇:Django(安装)第一天

给主人留下些什么吧!~~