如果您想根据自己的需要 自制linux系统、那首先呢 要了解linux系统都有什么组成:
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。
其中 内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
那开机流程呢:
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系统 需要的配置信息)。
接下来创建好磁盘之后、来给这个新的磁盘 做下分区:
执行fdisk /dev/sdb (sdb表示这个新建的磁盘)
因为每一个独立的系统都要有自己的引导分区、根分区;所以这里至少还要创建3个分区;
这里用 p 来显示一下磁盘分区信息、(因为还没开始分区 所以目前没有任何分区的)
然后再用 n 来创建新的分区;先建第一个分区:
( 第一个分区、内存 设 +100M 、是做引导分区)
然后再建第二个分区:( 因为做根分区 就大一些吧 +1G )
接下来 第三个分区:
这第三个分区要作为 Swap ,即 交换分区;
(类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。)所以还要在这里设置一下:
第一个分区 刚说是作为 可引导分区、所以还是设置一下先;
做完之后、按w键 保存退出;
然后对前面的两个分区 做相应的使用权限 为超级使用者;
( -t : 给定档案系统的型式,Linux 的预设值为 ext2;但这里看到是 ext3 、其实都一样 )
然后再建立挂载点,把新建的磁盘 里相对应的硬盘分区 挂载到相应的位置:
要知道一个硬盘的引导 要得有自己的 MBR(Master Boot Record 叫做主引导记录/扇区);
另外还要有GRUB(启动引导程序)的第2阶段(即启动引导阶段);
之后当然还要有内核 等等;
(为了去创建第2 阶段 、这里可以直接执行 grub--install;)
创建好之后再切换到目录下、看看有没有形成的有相关信息;
而在grub下面会看到一些说明文件 和描述文件;
但惟独 没有grub引导菜单的配置文件( grub.conf 文件);
所以在这就说明要手工创建:
在这同时指明也要它的内核;
(作为简便,即把 原来的内核拷到前面新建的硬盘的引导分区下。 )
内核他只包含了系统最核心的部分,不会因为硬件的不同而做必需的改动;
这宿主机上的内核、在这 新建的机器上也能用
(先放到磁盘里、一会建linux系统新机器时候 ,添加磁盘进去就行了);
拷贝完之后 ;另外还有一个驱动,先到切换到管理员的家目录下;
随意建一个文件:mkdir log,
(为什么呢 因为可以把 宿主机原来的驱动就解压缩到log目录下;)
然后在这查看其中有一个关键的目录叫lib ;
里面都是系统启动 在引导的时候加载一些需要的内核驱动模块(是以*.ko 结尾、 这里就没截图)。
然后再在这个log目录下重新编辑 init;
原因里面都是init程序所调用的一些相关信息(例如模块驱动);
我在这只是稍微更改一下:
对上面 init 进程文件改完之后、再重新进行打包;
(-o 表示输出这个文件,
-H 格式 newc格式、
-9压缩的最佳压缩模式,
-n输入成一个文件放到挂载点的boot目录下 ;也即是新的硬盘的引导分区下)
完成之后再编辑 新的机器的grub 菜单;
这里编辑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 行的信息,就可以直接更改了
然后在根分区下,建立一些目录必需的文件;
也可以根据宿主机上 来参考创建:如下:
其实此刻还需要在一些目录下 建子目录;简单的建两个:
{ usr/bin ; usr/sbin ; etc/rc.d ;}
完成之后:接着 做
因为linux在启动的时候第一个进程是init 也是始进程;
查看它的目录存放位置,也要把它拷贝到新建磁盘相应的 sbin 和 bin 目录下:
(其实这里还可以自己提前先准备好一些脚本文件、用到的时候就拉过去、比如 init bash 等 脚本就行了,这样比较方便;)
然后查看一下已拷贝过的 bin和sbin 下的目录文件:(这里是直接拷贝的)
查看一下已拷贝过的 lib下的目录文件:
然后 切换到etc目录下:
编辑inittab文件
(初始化进程用到的配置文件,文件负责设置init初始化程序初始化脚本在哪里、7个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令):
其实这里是查看原来的inittab文件、然后再模仿更改的:只要21到29行就可以了;
(便于操作使用指令 :21,29 w inittab 这样就直接保存到当前这个inittab目录下了)
第1行是无论启动哪个级别都会进行初始化(所以还要建 rc.sysinit文件) ;
下面是1-6 的级别:
6:重新启动系统
运行级别可以全部保留、也可以只保留一两个,这样这个文件就创好了、查看一下是不是:
在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 】就可以了,步骤流程也就是这样的:
(执行的命令: chmod a+x rc.sysinit;把权限改为可执行的脚本文件);
然后再执行 sync 表示是把 以上这些相关的信息同步写入到磁盘设备中去;
做了这也就是完成系统的内核及启动进程;所以那把宿主机先暂停;新建一个虚拟机。
创建时:
----【创建一个虚拟空白磁盘】
---- 选择操作系统【linux 及你所用的 版本】
----【存放位置根据自己定】
----【然后把新建这个虚拟机的默认硬盘删除;再从虚拟机设置中添加硬盘】
(这个硬盘是最初建的那个有写入linux系统内核及其他配置信息的)
----【启动虚拟机】
如下 简单的截图操作:
这里添加的磁盘呢 就是最初创建的那个 *.vmdk;
到此就算完成了一个自制的简易linux系统、也相当于一个linux空壳;
接下来就启动试试吧:
看到上面显示 grub的引导菜单已经出来了;再看 :
sda 表示 磁盘已经能被识别出来了;并显示了 MY LINUX ;
说明已自制的linux经算成功了。
至此还只是一个的简单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引导项,然后按e键2. 选择以kernel开头的一行,再按e 键,在此行的末尾,按空格键后输入single,以回车键来退出编辑模式;3. 回车返回,然后按b键启动,即可直接进入linux单用户模式4. vi /etc/passwd
删除root项中的密码
(这里也可以直接使用passwd命令重新设置root的密码)
5、reboot重启,root密码为空
三、可以使用linux启动软盘引导
出现boot后,输入linux single
可进入单用户模式;
修改或删除root密码;
四、使用Linux系统安装盘
如果你既没做系统启动软盘,同时多系统的引导LILO 和GRUB 又被删除,那么只能使用Linux 系统安装盘来恢复root的密码。
用第一张Linux 系统安装盘启动,出现boot 提示符后输入:
oot: linux rescue
此时系统进入救援模式,然后根据提示完成:1.选择语言和键盘格式;2.选择是否配置网卡,一般系统因网络不需要,所以可以选择否跳过网卡配置;3 . 选择是否让系统查找硬盘上的Redhat Linux 系统,选择继续;4.系统显示硬盘上的系统已经被找到,并挂载在/mnt/sysimage 下;5.进入拯救状态,可重新设置root 的密码:
# chroot/mnt/sysimage (让系统成为根环境)
# cd /mnt/sysimage
# passwd root
五、如果不怕麻烦的话,还可以把安装linux的硬盘卸下后挂到其他系统环境下
同样是去修改/etc/passwd文件,修改过后保存即可;
注:
1、在不同的linux系统下输入single的方式和方法可能有区别,希望能自己去尝试;2、除了需要修改/etc/passwd文件外,可能也需要修改/etc/shadow文件,这是/etc/passwd密码文件的投影文件。