如果您想根据自己的需要 自制linux系统、那首先呢 要了解linux系统都有什么组成:


Linux系统一般有4个主要部分内核、shell、文件系统和应用程序

     其中 内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。


那开机流程呢

1、开机自检 ,然后读取MBR的信息,启动Boot Manager 。
2、 加载系统内核,启动init进程 ,init进程是Linux的根进程,所有的系统进程都是它的子进程。

   3、init进程读取“/etc/inittab”文件中的信息,并进入预设的运行级别,按顺序运行该运行级别对应    文件夹下的脚本。

     脚本通常以“start”参数启动,并指向一个系统中的程序。

在通常情下,“/etc/rcS.d/”目录下的启动脚本首先被执行,然后是“/etc/rcN.d/”目录。

    假说设定的运行级别为3,那么它对应的启动目录为“/etc/rc3.d/”。

其中etc/rc.sysinit脚本、它是一个初始化的过程、无论进入哪个级别都要执行的

4、然后进入正常的系统,执行/etc/rc.d/rc.local开机脚本。

  最后启动出现登录终端,等待登录。


然后呢自做的系统呢,所以还要根据上面的系统组成自己规划一下里面都会需要有什么;自作的机器系统上包括些什么;

当然主机里需要有:内核驱动init因为系统工作时候也会调用inittab)、同时还应包括一些简易的命令和常用的指令及一些常用的库文件;可以的话还可以加一些简单的应用、像什么服务器之类的。

不过这里使用虚拟机做的;只是做一个简单的机器linux壳;根据linux的启动流程,这里也同样的也算是模仿着做、慢慢来总会很好;


首先呢:

在虚拟机里确定一台宿主机器

(起码要求是 功能完备的机器、把硬盘设置到这个机器里面)

把所需要的文件备齐了 、然后再转到新建机器中

再从虚拟机的设置里面添加一块硬盘、大小自定、不能太小

使保存成一个*.vmdk文件放到一个自定的目录;

(新添加的这个机器也就相当于新建的机器的硬盘 需要等下写入系统必要的信息)

等最后创建一个虚拟机时、再把这个创建的磁盘添加进去

(因为到最后的磁盘里 都会写入了我们创建linux系统 需要的配置信息)。

173221463.jpg


接下来创建好磁盘之后、来给这个新的磁盘 做下分区

执行fdisk /dev/sdb sdb表示这个新建的磁盘

121013458.jpg


因为每一个独立的系统都要有自己的引导分区、根分区;所以这里至少还要创建3个分区;

这里用 p 来显示一下磁盘分区信息、(因为还没开始分区 所以目前没有任何分区的)

然后再用 n 来创建新的分区;先建第一个分区:

( 第一个分区、内存 设 +100M  、是做引导分区)

121528513.jpg


然后再建第二个分区:( 因为做根分区 就大一些吧 +1G )

121538273.jpg


接下来 第三个分区

121542788.jpg


这第三个分区要作为 Swap ,即 交换分区

类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。)所以还要在这里设置一下:

121545950.jpg


第一个分区 刚说是作为 可引导分区、所以还是设置一下先;

做完之后、按w键 保存退出;

121549147.jpg


然后对前面的两个分区 做相应的使用权限 为超级使用者

-t : 给定档案系统的型式,Linux 的预设值为 ext2;但这里看到是 ext3 、其实都一样

121602570.jpg


然后再建立挂载点,把新建的磁盘 里相对应的硬盘分区 挂载到相应的位置:

121607712.jpg


要知道一个硬盘的引导 要得有自己的 MBR(Master Boot Record 叫做主引导记录/扇区)

另外还要有GRUB(启动引导程序)的第2阶段(即启动引导阶段);

之后当然还要有内核 等等;

(为了去创建第2 阶段 、这里可以直接执行 grub--install;)121614214.jpg


创建好之后再切换到目录下、看看有没有形成的有相关信息;

而在grub下面会看到一些说明文件 和描述文件;

但惟独 没有grub引导菜单的配置文件 grub.conf 文件);

121628526.jpg


所以在这就说明要手工创建:


121646857.jpg


在这同时指明也要它的内核

作为简便,即把 原来的内核拷到前面新建的硬盘的引导分区下。 )

内核他只包含了系统最核心的部分,不会因为硬件的不同而做必需的改动;

这宿主机上的内核、在这 新建的机器上也能用

(先放到磁盘里、一会建linux系统新机器时候 ,添加磁盘进去就行了);

拷贝完之后 ;另外还有一个驱动,先到切换到管理员的家目录下;

随意建一个文件:mkdir log,

为什么呢 因为可以把 宿主机原来的驱动就解压缩到log目录下;)


然后在这查看其中有一个关键的目录叫lib ;

里面都是系统启动 在引导的时候加载一些需要的内核驱动模块(是以*.ko 结尾、 这里就没截图)。

121654677.jpg


然后再在这个log目录下重新编辑 init;

原因里面都是init程序所调用的一些相关信息(例如模块驱动)

我在这只是稍微更改一下:

121656260.jpg

121706708.jpg


对上面 init 进程文件改完之后、再重新进行打包

-o 表示输出这个文件,

 -H 格式 newc格式、

 -9压缩的最佳压缩模式,

 -n输入成一个文件放到挂载点的boot目录下 ;也即是新的硬盘的引导分区下


完成之后再编辑 新的机器的grub 菜单;

121717679.jpg


这里编辑grub.conf 可以寻求些便捷的方法;

所以打开 vim 编辑后、先输入前三行;


default=0                                ---- 默认第一个操作系统;

  timeout=5                                ---- 启动的等待时间5秒

  title  redhat enterprise linux  5.4      ---- 启动后显示标签

  root (hd0,0)                             ---- 要指明的引导分区


然后再底行直接输入:!!ls /mnt/boot/vmlinux-2.6.18-164.e15  initrd.gz

就能直接 显示出 4 -6 行的信息,就可以直接更改了

121722666.jpg


然后在根分区下,建立一些目录必需的文件;

也可以根据宿主机上 来参考创建:如下:

121752379.jpg


其实此刻还需要在一些目录下 建子目录;简单的建两个:

{ usr/bin   ;  usr/sbin ;   etc/rc.d ;}


完成之后:接着 做


因为linux在启动的时候第一个进程是init 也是始进程;

查看它的目录存放位置,也要把它拷贝到新建磁盘相应的 sbin 和 bin 目录下:

121805518.jpg

其实这里还可以自己提前先准备好一些脚本文件、用到的时候就拉过去、比如 init bash 等 脚本就行了,这样比较方便;)


然后查看一下已拷贝过的 bin和sbin 下的目录文件:(这里是直接拷贝的)


165637186.jpg



查看一下已拷贝过的 lib下的目录文件:

121807870.jpg


然后 切换到etc目录下:

编辑inittab文件

初始化进程用到的配置文件,文件负责设置init初始化程序初始化脚本在哪里、7个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令):

121812113.jpg


其实这里是查看原来的inittab文件、然后再模仿更改的:只要21到29行就可以了;

便于操作使用指令 :21,29 w inittab 这样就直接保存到当前这个inittab目录下了

155929668.jpg

第1行是无论启动哪个级别都会进行初始化所以还要建 rc.sysinit文件

下面是1-6 的级别

0:关机
  1:单用户字符界面
  2:不具备网络文件系统(NFS)功能的多用户字符界面
  3:具有网络功能的多用户字符界面
  4:保留不用
  5:具有网络功能的图形用户界面

  6:重新启动系统


运行级别可以全部保留、也可以只保留一两个,这样这个文件就创好了、查看一下是不是:

121825430.jpg


在inittab文件编译之后,

还应该在rc.d的目录下重建这个rc.sysinit脚本文件;这可以创建一个简单的、因为本来也就是一个简单的bash脚本;

可以这样编写两句:


#!/bin/bash                             ------ bash 脚本

echo -e "\033[31m MY LINUX \033[0m"      ------ 字体颜色的输出红色的 my linux


然后就直接执行/bin/bash  就行了;(颜色可以根据偏好自行设置)

  例如:

echo -e "\033[1;40;30m color \033[0m"#黑色

   echo -e "\033[1;40;31m color \033[0m"#红色

   echo -e "\033[1;40;32m color \033[0m"#绿色

   echo -e "\033[1;40;33m color \033[0m"#×××

   echo -e "\033[1;40;34m color \033[0m"#蓝色

   echo -e "\033[1;40;35m color \033[0m"#紫色

   echo -e "\033[1;40;36m color \033[0m"#青色

   echo -e "\033[1;40;37m color \033[0m"#白色

   echo -e "\033[1;40;37m color \033[0m"#高亮

   echo -e "\033[5;40;37m color \033[0m"#闪烁


到这里创建的也只是个简易的linux系统,所以只要启动能时显示当时设置的【 MY LINUX 】就可以了,步骤流程也就是这样的:


121838968.jpg


(执行的命令: chmod a+x rc.sysinit;把权限改为可执行的脚本文件)

然后再执行 sync 表示是把 以上这些相关的信息同步写入到磁盘设备中去;

121842781.jpg


做了这也就是完成系统的内核及启动进程;所以那把宿主机先暂停;新建一个虚拟机。


创建时:

----【创建一个虚拟空白磁盘

---- 选择操作系统linux 及你所用的 版本

----【存放位置根据自己定

----【然后把新建这个虚拟机的默认硬盘删除;再从虚拟机设置中添加硬盘

   (这个硬盘是最初建的那个有写入linux系统内核及其他配置信息的

----【启动虚拟机

    如下 简单的截图操作:

173305613.jpg


这里添加的磁盘呢 就是最初创建的那个 *.vmdk


174033700.jpg


到此就算完成了一个自制的简易linux系统、也相当于一个linux空壳;

接下来就启动试试吧:

173242238.jpg


看到上面显示 grub的引导菜单已经出来了;再看 :

sda 表示 磁盘已经能被识别出来了并显示了 MY LINUX ;

说明已自制的linux经算成功了

191020879.jpg



至此还只是一个的简单linux空系统、没有任何应用、也就相当于一个linux壳;只是简单的简述概括自制 linux 系统的简要过程;也即是一个linux的平台、在里面还是需要好多需要去添加的一系列的应用;然后根据需要添加应用和服务,设置成一个功能强大的精简linux。



密码忘记还有5种操作


如果你既没做系统启动软盘,同时多系统的引导LILO GRUB 又被删除,那么只能使用Linux 系统安装盘来恢复root的密码,步骤如下。

lilo引导

1. 在出现 lilo: 提示时键入 linux single

Boot: linux single

2. 回车可直接进入linux单用户模式3. vi /etc/passwd

删除root项中的密码

(这里也可以直接使用passwd命令重新设置root的密码)

4. reboot重启,root密码为空

.grub引导

1. 在出现grub画面时,选择linux引导项,然后按e2. 选择以kernel开头的一行,再按e 键,在此行的末尾,按空格键后输入single,以回车键来退出编辑模式;3. 回车返回,然后按b键启动,即可直接进入linux单用户模式4. vi /etc/passwd

删除root项中的密码

(这里也可以直接使用passwd命令重新设置root的密码)

5reboot重启,root密码为空

三、可以使用linux启动软盘引导

出现boot后,输入linux single

可进入单用户模式;

修改或删除root密码;

四、使用Linux系统安装盘

如果你既没做系统启动软盘,同时多系统的引导LILO GRUB 又被删除,那么只能使用Linux 系统安装盘来恢复root的密码。

用第一张Linux 系统安装盘启动,出现boot 提示符后输入:

oot: linux rescue

此时系统进入救援模式,然后根据提示完成:1.选择语言和键盘格式;2.选择是否配置网卡,一般系统因网络不需要,所以可以选择否跳过网卡配置;3 . 选择是否让系统查找硬盘上的Redhat Linux 系统,选择继续;4.系统显示硬盘上的系统已经被找到,并挂载在/mnt/sysp_w_picpath ;5.进入拯救状态,可重新设置root 的密码:

# chroot/mnt/sysp_w_picpath (让系统成为根环境)

# cd /mnt/sysp_w_picpath

# passwd root

五、如果不怕麻烦的话,还可以把安装linux的硬盘卸下后挂到其他系统环境下

同样是去修改/etc/passwd文件,修改过后保存即可;

注:

1、在不同的linux系统下输入single的方式和方法可能有区别,希望能自己去尝试;2、除了需要修改/etc/passwd文件外,可能也需要修改/etc/shadow文件,这是/etc/passwd密码文件的投影文件