从零构建属于自己的小linux

本文讲述的是利用一个宿主机一步步根据自己喜好构建属于自己的一个小型linux系统。

直接切入正题开始构建属于自己的linux系统。

准备工作:

本次制是在VMware 9 上实现的

宿主机:redhat5.8 ; 内核2.6.18-308.el5

一块10G大小IDE硬盘,10G 已经完全足够

业务不是很熟练在, 在做裁剪linux  有写错或者使用不当的地方希望各位技术达人和博友 批评指正,也希望此博文能给大家带来帮助,更希望达人们给予指导。
                              !!!!在此先谢过!!!!

制作过程:

  1. 制作过程:
  2. 1,添加两块磁盘格式化并挂载
  3. #mkdir -pv /mnt/{boot,sysroot}
  4. #mke2fs -j /dev/hda1
  5. #mke2fs -j /dev/hda2
  6. #mount /dev/hda1 /mnt/boot/
  7. #mount /dev/hda2 /mnt/sysroot/
  8. ################# 添加内核和grub阶段##################
  9. 2,#cp /boot/vmlinuz-2.6.18-308.el5  /mnt/boot/vmlinuz
  10. 3, #mkdir test
  11. 4, #cd test/
  12. 5, #zcat /boot/initrd-2.6.18-308.el5.img | cpio -id                   #展开initrd 文件
  13. 6, #vim init
  14. 找到: mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
  15. 改为 mkrootdev -t ext3 -o defaults,ro /dev/hda2                  #
  16. 7, #cd test/lib/
  17. rm -f dm-*
  18. 8, #cd ..
  19. 9, #find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz   #把当前目录下所有东西打包压缩
  20. 10, #grub-instasll -root-directory=/mnt /dev/hda                       #生成grub目录
  21. 11, #ls /mnt/boot
  22. 12, #vim /mnt/boot/grub/grub.conf                                      #手动配置grub引导内核和initrd
  23. default=0
  24. timeout=3
  25. title mageedu linux(2.6.18)
  26. root(hd0,0)
  27. kernel /vmlinuz
  28. initrd /initrd.gz
  29. 14, #cd /mnt/sysroot
  30. 15, #mkdir etc/{rc.d/init.d} bin sbin proc sys dev lib root mnt media  var/{log,run,lock/subsys,tmp} usr/{bin,sbin,local} tmp home boot opt -pv
  31. 16, #vim /etc/inittab                                                 #创建系统启动等级 和初始化环境执行脚本
  32. id:3:initdefault:
  33. si::sysinit:/etc/rc.d/rc.sysinit
  34. 17, #vim /etc/rc.d/rc.sysinit                                         #配置系统初始化内容 和脚本
  35. #!/bin/bash
  36. echo -e "\tWelcome to \033[34mMageEdu\033[0m linux"
  37. /bin/bash
  38. 18, #chmod +x /etc/rc.d/rc.sysinit
  39. 19, #cd
  40. ############################# 此脚本作用是拷贝小linux上所用到的各种系统命令和依赖包##################
  41. 20, 新建 bincp.sh 脚本  复制命令
  42. #!/bin/bash
  43. #
  44. DEST=/mnt/sysroot
  45. libcp() {
  46. LIBPATH=${1%/*}
  47. [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
  48. [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
  49. }
  50. bincp() {
  51. CMDPATH=${1%/*}
  52. [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
  53. [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
  54. for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
  55. libcp $LIB
  56. done
  57. }
  58. read -p "Your command: " CMD
  59. until [ $CMD == 'q' ]; do
  60. ! which $CMD && echo "Wrong command" && read -p "Input againe" CMD && continue
  61. COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
  62. bincp $COMMAND
  63. echo "copy $COMMAND finished."
  64. read -p "Continue: " CMD
  65. done
  66. 21, 运行 ./bincp.sh 复制 init  bash ls
  67. 22, #sync
  68. 21, # chroot /mnt/sysroot                     #切换到小linux上测试一下利用脚本复制的命令
  69. 22,创建一个新的虚拟机 测试一下
  70. 23,运行 bincp.sh 拷贝命令
  71. 24,#mkdir rm mv cp cat mount umount vi vim chmod chown ping ifconfig insmod modprobe rmmod route halt reboot shutdown hostname
  72. #以上就是添加小linux所用的到的命令
  73. 25, #sync
  74. 26, 重新切换到小系统 测试 cp过来的命令 这里的切换时把宿主机挂起,添加一个新的虚拟机,在把硬盘挂载上去
  75. 27,#mount -n -o remount,rw /               #重新以读写方式挂载 根文件系统
  76. 28,切换到宿主机
  77. ###################################### 添加关机功能################################
  78. 29,#cd /mnt/sysroot/
  79. 30, #vim etc/rc.d/rc.sysdone                 #添加关机功能脚本
  80. #!/bin/bash
  81. sync
  82. sleep 2
  83. exec /sbin/halt -p
  84. 31, #chmod + etc/rc.d/rc.sysdone
  85. 31, # ./bincp.sh  启动脚本拷贝 sync 命令
  86. 32,#cd /mnt/sysroot/
  87. 33, #vim etc/inittab                         #指定切换到0级别下的关机动作
  88. 添加: l0:0:wait:/etc/rc.d/rc.sysdone
  89. 34, #sync                                    #同步一下数据
  90. 35, 切换到小系统上测试 是否可以正常关机 (切换的时候先把宿主机挂起)
  91. 36, #init 0  或者 halt
  92. 37, 关闭小linux  切换到宿主机 添加重启功能
  93. ##################################添加重启功能#####################
  94. 38, #cd /mnt/sysroot
  95. 39, #vim etc/inittab                         #添加6级别下重启脚本
  96. l6:6:wait:/etc/rc.d/rc.reboot
  97. 40, #vim etc/rc.d/rc.reboot  定义重启脚本
  98. #!/bin/bash
  99. sync
  100. sleep 1
  101. sync
  102. exec /sbin/reboot
  103. 41, #chmod +x etc/rc.d/rc.reboot
  104. 42, #sync
  105. 43, #cd
  106. 44, 挂起宿主机 切换到小linux
  107. 45, #init 6   测试重启
  108. 46, 关闭小linux  切换到 宿主机
  109. 47, 规范小linux的关机和重启功能,把init 0 和init 6 整合到一起
  110. #################, 规范小linux的关机和重启功能,把init 0 和init 6 整合到一起############
  111. 48, #cd /mnt/sysroot
  112. 49, #vim /etc/rc.d/init.d/halt  整合关机和重启脚本
  113. #!/bin/bsha
  114. case $0 in
  115. *reboot)
  116. COMMAND='/sbin/reboot' ;;
  117. *halt)
  118. COMMAND='/sbin/halt -p' ;;
  119. esac
  120. case $1 in
  121. start)
  122. ;;
  123. stop)
  124. ;;
  125. *)
  126. echo "Usage: `basename $0` {start|stop}"
  127. esac
  128. exec $COMMAND
  129. 50, #chmod +x etc/rc.d/init.d/halt
  130. 51,  创建符号链接 方便使用脚本里的 *reboot  *halt  调用
  131. 52, #cd etc/rc.d/
  132. 53, #mkdir rc0.d rc6.d
  133. 54, # cd rc0.d/
  134. 55, # ln -sv ../init.d/halt  S99halt
  135. 56, # ll 查看一下链接是否创建
  136. 57, # cd ..
  137. 58, # cd rc6.d/
  138. 59, # ln -sv ../init.d/halt S99reboot
  139. 60, # cd ..
  140. 61, # rm -rf rc.reboot rc.sysdone                       #删除这两个脚本现在已经不需要了
  141. 62,  创建rc 脚本 功能是把所有 S开头的开启  把所有K 开头的都关闭
  142. 63, # vim rc
  143. #!/bin/bash
  144. RUNLEVEL=$1
  145. for I in /etc/rc.d/rc$RUNLEVEL.d/K*;do
  146. $I stop
  147. done
  148. for I in /etc/rc.d/rc.$RUNLEVEL.d/S*;do
  149. $I start
  150. done
  151. 64, # chmod +x rc
  152. 65, # cd ..
  153. 66, # vim inittab                                       #修改启动参数
  154. l0:0:wait:/etc/rc.d/rc 0
  155. l6:6:wait:/etc/rc.d/rc 6
  156. 67, # sync
  157. 68,  挂起宿主机 切换到小linux  测试
  158. 69, # init 0
  159. 70, # init 6
  160. 80,  切换回宿主机
  161. 90,  添加 init 3 级别
  162. 91, # cd /mnt/sysroot
  163. 92, # vim etc/inittab   添加:
  164. l3::wait:/etc/rc.d/rc 3
  165. 93, # cd  etc/rc.d/
  166. 94, # mkdir rc3.d
  167. 95, # vim init.d/tserver
  168. #!/bin/bash
  169. # chkconfig: 35 66 33
  170. # description: test service script
  171. prog=`basename $0`
  172. lockfile=/var/lock/subsys/$prog
  173. start(){
  174. echo "starting $prog..."
  175. touch $lockfile
  176. }
  177. stop() {
  178. echo "stopping $prog..."
  179. rm -f $loclfile
  180. }
  181. status(){
  182. if [ -f $lockfile ]; then
  183. echo "Running..."
  184. else
  185. echo"Stopped..."
  186. fi
  187. }
  188. usage() {
  189. echo "Usage:$prog {start|stop|status|restart}"
  190. }
  191. case $1 in
  192. start)
  193. start ;;
  194. stop)
  195. stop ;;
  196. restart)
  197. stop
  198. start
  199. ;;
  200. status)
  201. status
  202. ;;
  203. *)
  204. usage
  205. exit 1
  206. ;;
  207. esac
  208. 96, # chmod +x init.d/tserver
  209. 97, # init.d/tserver start                       测试脚本
  210. 98, # ls /var/lock/subsys                        查看此目录下是否有 tserver 文件
  211. 99, # init.d/tserver stop                        查看是否删除 tserver 文件
  212. 100,# cd rc3.d/
  213. 101,# ln -sv ../init.d/tserver S66tserver
  214. 102,# cd ..
  215. 103,# cd rc0.d/
  216. 104,# ln -sv ../init.d/tserver K33tserver
  217. 105,# sync
  218. 此处加一步如下:
  219. 1, cd
  220. 2,  stty -F /dev/console speed  查看屋里终端速率
  221. ##################实现tty终端########
  222. 106,# cd /mnt/sysroot/etc/
  223. 107,# vim inittab
  224. 1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1
  225. 1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
  226. 108,# vim rc.d/rc.sysinit
  227. #!/bin/bash
  228. echo -e "\tWelcome to \033[34mMageEdu\033[0m linux"
  229. /bin/bash   ## 去掉此行
  230. 109,# cd
  231. 110,# ./bincp.sh   移植 agetty  basename  seq  stty
  232. 111,# syuc
  233. 112,# cd /mnt/sysroot
  234. 113,# ln -sv bash sh
  235. 114,# sync
  236. 115, 挂起 宿主机 开启小linux   测试
  237. 如果文件系统错乱 修复方法如下:
  238. 切换到宿主机上
  239. 1,# cd /mnt/sysroot/
  240. 2,# find . | cpio -H newc --quiet -o | gzip > /root/sysroot.gz
  241. 3,# cd
  242. 4,# umount /dec/hda2
  243. 5,# fuser -km /dev/hda2
  244. 6,# umount /dev/hda2
  245. 7,# mke2fs -j /dev/hda2  或者用 e2fsck -f /dev/hda2
  246. 8,# mount /dev/hda2 /mnt/sysroot
  247. 9,# cd /mnt/sysroot
  248. 10,# zcat /root/sysroot.gz |cpio -id
  249. 11,# sync
  250. 116,  ###################实现让根文件系统能自动挂载#############
  251. 117,# cd /mnt/sysroot
  252. 118,# vim etc/fstab  创建fstab 文件
  253. /dev/hda2   /         ext3     defaults  0 0
  254. /dev/hda1   /boot     ext3     defaults  0 0
  255. proc        /proc     ext3     defaults  0 0
  256. sysfs       /sys      sysfs    defaults  0 0
  257. 119,# mkdir etc/sysconfig
  258. ####################### 添加主机名###############
  259. 120,# vim etc/sysconfig/network     设置主机名
  260. HOSTNAME=minilinux.magedu.com
  261. 121,# vim etc/rc.d/rc.sysinit   让开机以读写方式挂载根文件系统,并设置主机名
  262. echo "Remount rootfs"
  263. mount -n -o  remount,rw  /
  264. echo "set the hostname..."
  265. [ -f /etc/sysconfig/network ] && /etc/sysconfig/network
  266. [ -z $HOSTNAME -o  "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
  267. /bin/hostname  $HOSTNAME
  268. 122,# sync
  269. 123,# 切换到 小linux 测试
  270. 124,# 切换到宿主机  添加系统启动时 显示的 绿色OK 和 红色报错
  271. ###################添加系统启动时 显示的 绿色OK 和 红色报错#############################
  272. 125,# cd /mnt/sysroot
  273. 126,# vim  etc/rc.d/init.d/functions              #定义启动时候的绿色 [ OK ]  和红色 [FAILED]
  274. SCREEN=`stty -F /dev/console size 2> /dev/null`
  275. COLUMNS=${SCREEN#*}
  276. [ -z $COLUMNS ] && COLUMNS=80
  277. SPA_COL=$[COLUMNS-14]
  278. RED='\033[31m'
  279. GREEN='\033[32m'
  280. YELLOW='\033[33m'
  281. BLUE='\033\34m'
  282. NORMAL='\033[0m'
  283. success() {
  284. string=$1
  285. RT_SPA=$[$SPA_COL-${#string}]
  286. echo -n "$string"
  287. for I in `seq 1 $RT_SPA`;do
  288. echo -n " "
  289. done
  290. echo -e "[   ${GREEN}OK${NORMAL}   ]"
  291. }
  292. failure() {
  293. string=$1
  294. RT_SPA=$[$SPA_COL-${#string}]
  295. echo -n "$string"
  296. for I in `seq 1 $RT_SPA`;do
  297. echo -n " "
  298. done
  299. echo -e "[ $[RED]FAILED${NORMAL}]"
  300. }
  301. 127,# vim etc/rc.d/init.d/tserver  修改成如下内容:
  302. #!/bin/bash
  303. # chkconfig: 35 66 33
  304. # description: test service script
  305. . /etc/rc.d/init.d/functions
  306. prog=tserver
  307. lockfile=/var/lock/subsys/$prog
  308. start(){
  309. touch $lockfile
  310. [ $? -eq 0 ] && success "Starting $prog" || failure "Staring $prog"
  311. }
  312. stop() {
  313. rm -f $loclfile
  314. [ $? -eq 0 ] && success "Stoppting $prog" || failure "Stopping $prog"
  315. }
  316. status(){
  317. if [ -f $lockfile ]; then
  318. echo "Running..."
  319. else
  320. echo"Stopped..."
  321. fi
  322. }
  323. usage() {
  324. echo "Usage:$prog {start|stop|status|restart}"
  325. }
  326. case $1 in
  327. start)
  328. start ;;
  329. stop)
  330. stop ;;
  331. restart)
  332. stop
  333. start
  334. ;;
  335. status)
  336. status
  337. ;;
  338. *)
  339. usage
  340. exit 1
  341. ;;
  342. esac
  343. 128,# sync
  344. 129, 切换到下linux 下测试 启动信息是否 显示 绿色 [ OK ]
  345. 130, 切换到 宿主机  添加 ip地址功能
  346. #########################实现网卡功能#####################
  347. 131,# cd /mnt/sysroot
  348. 132,# mkdir lib/modules
  349. 133,# modinfo pcnet32   查看网卡模块都有那些依赖块
  350. 134,# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules
  351. 135,# modinfo mii
  352. 136,# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules
  353. 137,#  vim etc/rc.d/rc.sysinit  让系统启动自动装载网卡模块
  354. echo "Initializing network device..."
  355. /sbin/insmod  /lib/modules/mii.ko
  356. /sbin/insmod  /lib/modeles/pcnet32.ko
  357. 138,# mkdir etc/sysconfig/network-scripts  创建网卡目录
  358. 139,# vim etc/sysconfig/network-scripts/ifcfg-eth0
  359. DEVICE=eth0
  360. BOOTPROTO=static
  361. IPADDR=172.16.100.5
  362. NETMASK=255.255.0.0
  363. GATEWAY=172.16.0.1
  364. ONBOOT=yes
  365. 140,# vim etc/rc.d/init.d/network   让ip能在服务启动脚本自动启动
  366. #!/bin/bash
  367. # chkconfig: 35 09 90
  368. prog=network
  369. . /etc/rc.d/init.d/functions
  370. CONF=/etc/sysconfig/network-scripts/ifcfg-eth0
  371. . $CONF
  372. NETMASK=16
  373. start() {
  374. ifconfig eth0 $IPADDR/$NETMASK up
  375. [ -z $GATEWAY ] && route add default gw $GATEWAY
  376. }
  377. stop() {
  378. ifconfig eth0 down
  379. }
  380. status() {
  381. ifconfig eth0
  382. }
  383. usage() {
  384. echo "$prog: {start|stop|restart|status}"
  385. }
  386. case $1 in
  387. start)
  388. start
  389. success "Config network eth0"
  390. ;;
  391. stop)
  392. stop
  393. success "Config network card eth0"
  394. ;;
  395. restart)
  396. stop
  397. start
  398. success "Restart network card eth0"
  399. ;;
  400. status)
  401. status
  402. return 0
  403. ;;
  404. *)
  405. usage
  406. exit 1
  407. ;;
  408. esac
  409. 141,# chmod +x etc/rc.d/init.d/network
  410. 142, 让网卡能在级别3 开启  级别6 和 0 关闭
  411. 143,# cd et/rc.d/rc0.d/
  412. 144,# ln -sv ../init.d/network K90network
  413. 145,# cd ../rc6.d
  414. 146,# ln -sv ../init.d/network K90network
  415. 147,# cd ../rc3.d
  416. 148,# ln -sv ../init.d/network S09network
  417. 149,# sync
  418. 150, 测试一下网卡是否可以启动
  419. 151,# chroot /mnt/sysroot   在宿主机上切换到小linux
  420. 152,# /etc/rc.d/init.d/network start
  421. 到此为止 以个简小的linux 制作完成。 由于初次做裁剪linux  有写错或者使用不当的地方希望各位技术达人和博友 批评指正。
  422. !!!!在此先谢过!!!!

转载于:https://blog.51cto.com/linuxnx/1167675

手把手教你从零构建属于自己的小linux相关推荐

  1. 手把手教你在windows虚拟机安装带网络的Linux系统

    手把手教你在windows上虚拟机安装带网络Linux系统 目录 1.Linux的几个发行版本 2. 虚拟机 2.1 虚拟机是什么 2.2 弹性计算 2.3VMware12 2.3.1 安装VMwar ...

  2. 手把手教你用Python构建自己的「王二狗」

    题图 | 智能二狗聊天机器人 导读 在人手N部智能手机的时代,我们对聊天机器人早已不陌生.这两年很火的游戏群聊天机器人「王二狗」更是用它的机智幽默征服了很多人. 今天,我们将手把手教你用Python从 ...

  3. 手把手教你搭建网盘系统,给小姐姐换个新家可好​?

    在数据时代,我们每天都在互联网上生成大量数据,同时也接收着大量数据.随着图片.音乐.影视.课程越来越多,不管是手机.iPad 还是电脑,空间根本不够用,所以很多人会把文件存在各种网盘里. 但近几年,网 ...

  4. 手把手教你用Python改造一款外星人入侵小游戏

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 为学应须毕生力,攀高贵在少年时. ...

  5. 手把手教你从零到一搭建深度学习项目(附PDF下载)

    来源:机器之心 作者:Jonathan Hui 本文约14000字,建议阅读10+分钟. 本文将会从第一步开始,告诉你如何解决深度学习项目开发中会遇到的各类问题. 在学习了有关深度学习的理论之后,很多 ...

  6. 手把手教你从零搭建深度学习项目(附链接)

    简介: 在学习了有关深度学习的理论之后,很多人都会有兴趣尝试构建一个属于自己的项目.本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题. 本文由六大部分组成,涵盖深度学习 ( DL ) 项 ...

  7. 手把手教你从零搭建深度学习项目(可下载PDF版)

    源 | 机器之心   作者 | Jonathan Hui 点我调转公号推荐 下载方式:后台回复 20180531 在学习了有关深度学习的理论之后,很多人都会有兴趣尝试构建一个属于自己的项目.本文将会从 ...

  8. 独家 | 手把手教你用Python构建你的第一个多标签图像分类模型(附案例)

    翻译:吴金笛 校对:郑滋 本文约4600字,建议阅读12分钟. 本文明确了多标签图像分类的概念,并讲解了如何构建多标签图像分类模型. 介绍 你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情 ...

  9. 手把手教你从零上手Python(付安装地址、代码)

    来源:大数据文摘 本文共3974字,建议阅读7分钟. 通过本文带给大家从零开始学习Python应该怎么做! 数据科学团队在持续稳定的发展壮大,这也意味着经常会有新的数据科学家和实习生加入团队.我们聘用 ...

最新文章

  1. 怎样使用Spring Boot项目的单元测试
  2. 【Linux 操作系统】 Secure CRT 终端配置 -- 配置语法高亮 光标 和 字体
  3. Contest Leaderboard(分组、聚合、连接)
  4. python数据库操作封装_Python 封装一个操作mysql的类
  5. 关键词组合工具_8大工具组合出击,解决扩量难题
  6. 我爱你——再高级一点
  7. 使用python+ffmpeg批量将ts文件转为mp4
  8. 电脑如何安装鸿蒙系统win双系统,电脑怎么装双系统|电脑双系统安装教程
  9. 从动物科学到乐队鼓手,腾讯技术小哥的开源人生
  10. 时间序列 工具库学习(5) Darts模块-多个时间序列、预训练模型和协变量的概念和使用
  11. 高级远程办公解决方案 ETX ,用于桌面虚拟化和远程访问图形要求苛刻的应用程序
  12. 十字军之王3Crusader Kings III mac中文
  13. 【Pandas分组聚合】 groupby()、agg() 方法的使用
  14. VS2016 发布项目提示 CS0006 C# Metadata file 'xxxxxxx.dll' could not be found
  15. Cisco综合配置实验——二层、三层交换机、路由器
  16. Vue全家桶+Socket.io+Koa2打造一个智能聊天室 接口已开放
  17. AutoDock Vina 全套软件安装教程(Linux)
  18. Cube和Kylin创建Cube的过程
  19. 哪些原因比较容易诱发胆囊炎?
  20. 计算机视觉第2章:图像采集

热门文章

  1. struts2.2.1.1 类型转换问题 (传递Date类型参数)
  2. 为什么会出现 java.util.ConcurrentModificationException 异常?
  3. flex 图片旋转(解决公转和自转问题)
  4. ywy_c_asm题
  5. html5判断设备的动作
  6. 基于DataTabel的增删改查
  7. 书评:卓有成效的ThoughtWorks程序员的45个习惯
  8. datagrid中使用dropdownlist编辑模版时遇到问题
  9. Hadoop 同步集群时间ntp
  10. java 高效批量插入 sqlserver 数据库