##请脚下留情。。。踩我的同学请告诉我原因,(二)刚发上去一上午被踩了10次。。。

##打造自己的专属Linux(二)的链接http://blog.csdn.net/deansrk/article/details/6664558

跟着马哥学Linux已经快一个月了,在前几天创建一个小型Linux,大小不足10M,萌生了一个想法:DIY一个自己的Linux,所以准备写一个系列篇,通过宿主机的方式,一步一步创建一个小型Linux,并慢慢增加它的功能模块:网络,服务,ssh,图形界面等等~如果你有兴趣,那么我们一起来学习吧!

如果你对linux的启动流程不熟悉的话可以读我的文章:
深入浅出:linux启动流程刨析    http://blog.csdn.net/deansrk/article/details/6659421

我的linux版本:redhat 5.4
虚拟机客户端:Vmware Workstation 6.5
我们分步骤来实现这个小型linux

第一步:在虚拟机上添加一块新硬盘到linux,大小20G (可以自定)

第二步:1)打开终端,使用fdisk格式化分区刚才挂载的新硬盘/dev/sdb,划分出一个50M大小的主分区和一个512M大小的主分区。

[root@server69 ~]# fdisk /dev/sdb
The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Command (m for help): pDisk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot      Start         End      Blocks   Id  System
/dev/sdb1               1           7       56196   83  Linux
/dev/sdb2               8          70      506047+  83  Linux
/dev/sdb3              71         102      257040   82  Linux swap / SolarisCommand (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Selected partition 4
First cylinder (103-2610, default 103):
Using default value 103
Last cylinder or +size or +sizeM or +sizeK (103-2610, default 2610): +50M  Command (m for help): w  

2)重读下分区表

[root@server69 ~]# partprobe /dev/sdb

格式化刚建立的分区为ext3文件系统

[root@server69 ~]# mke2fs -j /dev/sdb1
[root@server69 ~]# mke2fs -j /dev/sdb2

第三步:将刚格式化好的分区/dev/sdb1挂载到/mnt/boot  /dev/sdb2挂载到/mnt/sysroot,如果你没有这两个文件夹,请手动建立,如果你挂载了其他设备,可以换其他路径。

[root@server69 LX]# mount /dev/sdb1 /mnt/boot
[root@server69 LX]# mount /dev/sdb2 /mnt/sysroot

第四步:1)安装grub到/dev/sdb

[root@server69 mnt]# grub-install --root-directory=/mnt/ /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /mnt//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb2)修改/mnt/boot/grub/device.map
[root@server69 mnt]# vim /mnt/boot/grub/device.map
(fd0)   /dev/fd0                               //去掉这一行  fd指的是软盘
(hd0)   /dev/sda
(hd1)   /dev/sdb                            //去掉这一行

第五步:拷贝kernel和initrd到小linux里,如果对kernel和initrd没有概念的话也请看我的文章,里面有详细的说明
深入浅出:linux启动流程刨析

1)拷贝kernel文件,并且重命名方便记忆。

[root@server69 LX]# cp /boot/vmlinuz-2.6.18-164.el5 /mnt/boot/vmlinuz   

2)拷贝initrd文件,并且重命名方便记忆。

[root@server69 LX]# cp /boot/initrd-2.6.18-164.el5.img /mnt/boot/initrd

第六步:解压缩initrd, 编辑里面的init文件,然后重新压缩封装。

[root@server69 mnt]# mv initrd initrd.gz                                                  //刚其改名,否则gzip不识别
[root@server69 mnt]# gzip -d initrd.gz                                                     //解压
[root@server69 mnt]# cpio -id < initrd.gz                                                 //释放归档
14731 blocks
[root@server69 mnt]# ls
bin  boot  dev  etc  init   lib  proc    sbin  sys  sysroot
//看到了吗?initrd几乎具有所有的linux文件目录,简直就是一个小linux
[root@server69 mnt]# vim init99 mkrootdev -t ext3 -o defaults,ro /dev/vol0/root                               // 修改为  mkrootdev -t ext3 -o defaults,ro /dev/sda2
[root@server69 mnt]#find. | cpio -H newc -o quiet   | gzip -9              //重新归档并压缩

第七步:创建小型linux的文件目录结构

[root@server69 mnt]# cd /mnt/sysroot/
[root@server69 sysroot]# mkdir -pv root bin sbin usr/{bin,sbin} lib dev tmp proc sys home mnt media boot 

第八步:拷贝命令到小型linux里去
1)怎么样拷贝命令?

[root@server69 sysroot]# which bash                                             //使用which命令查看命令所在路径
/bin/bash
[root@server69 sysroot]# ldd /bin/bash                                           //ldd 加命令路径可以显示出这个命令所依赖的库文件
linux-gate.so.1 =>  (0x008e6000)                                                      //这个文件不用拷贝
libtermcap.so.2 => /lib/libtermcap.so.2 (0x0041e000)
libdl.so.2 => /lib/libdl.so.2 (0x003ef000)
libc.so.6 => /lib/libc.so.6 (0x002a7000)
/lib/ld-linux.so.2 (0x00284000)
[root@server69 sysroot]# cp /lib/lidkl.so.2 /mnt/sysroot/lib/               //将上面的库文件都复制到小linux对应的目录

2)拷贝init 和bash ,mount , ls 这几个个命令去linux   注意,init和bash必须拷贝。

第九步:创建 /mnt/etc/fstab文件和/mnt/etc/inittab 文件,(这个文件的说明可以在我的启动流程文章里找到)

[root@server69 ~]# vim /mnt/sysroot/etc/fstab
/dev/sda2            /                          ext3               defaults                                  0   0
/dev/sda1            /boot                      ext3               defaults                                  0   0
sysfs                /sys                       sysfs              defaults                                  0   0
proc                 /proc                      proc               defaults                                  0   0
[root@server69 ~]# vim /mnt/sysroot/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit

第十步:创建/mnt/boot/grub/grub.conf 和 /etc/rc.d/rc.sysinit,并给rc,sysyinit 赋执行权限

[root@server69 ~]# vim /mnt/boot/grub/grub.conf
default=0
timeout=10
title Little Linux                                                                                           //grub的标题,可以自己写kernel /vmlinuz  ro  root=/dev/sda2 quiet                       //加载内核,只读方式挂载根文件系统initrd /initrd.gz                                                                       //加载内存文件系统[root@server69 ~]# vim /mnt/sysroot/etc/rc.d/rc.sysinit
#!/bin/bash
echo -e "\t\tWelcome to \033[31mLittle\033[0m Linux"                     //这里可以写自己想写的欢迎界面 ^^mount -n -o remount.rw /                                                                           //以读写方式重启挂载根文件系统
mount -n -a                                                                                                    //挂载所有设备,并不记录/bin/bash                                                                                                        //加载bash shell
 
[root@server69 ~]# chmod +x /etc/rc.d/rc.sysinit                //给rc.sysinit赋执行权限   


好了,大功告成,新建一个虚拟机,选择linux2.6xx ,挂载上这块硬盘看下效果吧~
这是我的grub界面很朴素吧~你可以自己更改背景哈
启动完成的效果,很简陋吧,注意Little
##更新:第十步最后要给rc.sysinit赋执行权限,否则可能系统加载时无法执行!

下篇预告:全自动脚本实现自动创建小linux和命令移植,让你的小linux健步如飞~

												

打造自己的专属Linux(一):快速建立一个小型Linux相关推荐

  1. 微型linux系统测试网卡,自制一个小型Linux(附带网络功能)

    我们这次讲述一下Linux启动的启动流程以及制作一个附带网络功能的mini linux 一.叙述 在制作一个小型的Linux之前,首先你得明白Linux系统的启动过程,我们用一张图来进行说明 二.为什 ...

  2. 如何快速建立一个网络爬虫(初学者指南)

    作为一个采集新手,我搭建了一个网络爬虫,成功的从Amazon Career 网站中提取了20000条数据.如何建立一个网络爬虫并导出到数据库,最终可以将数据无成本地转变成你的财富? 跟着我我往下看吧. ...

  3. linux添加hello驱动,Linux驱动之建立一个hello模块

    目标:在开发板上执行insmod hello.ko能在控制台打印出hello init:接着执行rmmod会在控制台打印出hello exit 建立一个hello模块的步骤如下: 1.建立一个hell ...

  4. 使用cubemx快速建立一个串口通信程序

    使用cubemx快速建立一个串口通信工程 序言 建立工程 配置cubemx 添加串口部分代码 添加printf打印代码 添加接收代码 附件--->下载 序言 st官方已经停止更新标准库了,而且新 ...

  5. 教你们如何快速建立一个完美的python项目

    当开始一个新的 Python 项目时,大家很容易一头扎进去就开始编码.其实花一点时间选择优秀的库,将为以后的开发节省大量时间,并带来更快乐的编码体验. 在理想世界中,所有开发人员的关系是相互依赖和关联 ...

  6. 手把手教(超详细):个人如何快速建立一个网站

    很多不是程序员的朋友总是理解不了网站到底是什么,它到底是怎么存在和运行的,也总是以为建一个网站很复杂.其实建网站并不难,也不需要花费太大资金,只需要以下6个步骤即可做出一个网站. 第一步:注册域名并实 ...

  7. Google Earth Engine(GEE)——快速建立一个10km的格网

    本文的主要目的是如何快速实现区域的一个网格的建立,主要过程是获取影像的经纬度,然后分别获取经纬度乘以一个数然后转化为整型,并将长宽相乘转化为一个矢量,然后对每一个歌王进行边界的坐标的获取与,最后返回一 ...

  8. 制作一个小型linux

    1:为宿主机添加一块磁盘让小型Linux使用 快 2:查看宿主机有两块磁盘sdb未进行使用 3:对sdb进行分区 4:将sdb1与sdb2分别挂载到/mnt/boot与/mnt/sysroot如果没有 ...

  9. 如何建立一个小型的局域网,来实现电脑与电脑之间的通信

    小编给大家介绍两种简单的连接方法 方法一:通过网线直接建立一个有线局域网的步骤(此方法最好至少有一台电脑是Win7的操作系统) 第一步:用一根普通的网线把两台需要连接的电脑连接起来(如连接成功,可直接 ...

最新文章

  1. LoadRunner12使用教程(三)——Action迭代
  2. Java编程思想 第十三章:字符串
  3. MySQL事务,这篇文章就够了
  4. java的编译代码混淆
  5. 最简单的matplotlib写法
  6. 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...
  7. 老罗直播——只要给你一个机会,你就伸双手去接!
  8. CDH 5.13.0 集成 Phoenix
  9. freecodecamp_freeCodeCamp论坛的未来
  10. nginx cocos2dx and so on
  11. 当主数据库挂掉的时候,一个可行的备份方法
  12. 测试低频噪音软件,设计制作并验证0.1Hz10Hz超低频微弱噪音检测放大器要点
  13. 获取 TUniConnection.SpecificOptions默认值和下拉框列表值
  14. KEIL4文件无法正常使用
  15. 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
  16. C51单片机引脚名词英文全称
  17. python多元非线性回归模型_Python 非线性回归 - 树懒学堂
  18. 前端个人博客案例模仿
  19. 世界杯ing~这不来个实时数据可视化?(结尾附源码)
  20. 段码屏配套的背光源怎么设计?

热门文章

  1. 用Disk Genius检测和修复硬盘坏道
  2. stm32f429ig usbvcp故障排除
  3. EXT combobox赋值
  4. Highcharts 江湖就这样
  5. SDRAM学习(二)——自动刷新,读写操作
  6. 华为ensp搭建习题
  7. 云运维 linux centos7.2 LAMP环境搭建 一键全解析
  8. OS实验:进程管理与死锁
  9. 【软件篇】~ 为什么打开谷歌浏览器就是360导航页面呢?
  10. wxpython中表格顶角怎么设置_46-wxpython 4 使用 grid 展示表格