自制小型linux系统
Linux开机流程
开机自检:程序post
MBR引导:硬盘上的mbr 主引导记录由bootloader 446字节(grub引导程序第一个阶段读内核)、分区表(64字节)、id标示magic(2字节)
GRUB菜单:在硬盘里/boot/grub为grub第二个阶段,引导到硬盘,选择要加载的操作系统
加载内核(kernel):加载操作系统的内核并运行init进程
运行init进程:需要一个inittab
Inittab中各个级别的配置文件对应的初始化脚本rc.sysinit
Rc.sysinit脚本:(初始化脚本)
(功能:设置主机名、启动网络功能、设置时钟、设置键盘)
选择级别后传一个数字传给rc脚本进入/etc/rc0.d/* /etc/rc1.d/* /etc/rc2.d/* /etc/rc3.d/* /etc/rc4.d/* /etc/rc5.d/* /etc/rc6.d/*中执行相应脚本,带k的按顺序杀死带s的按顺序启动。
执行开机脚本/etc/rc.d/rc.local
通过mingetty进程启动一些终端也就是开机啦
通过宿主机来建立自制的linux小系统(我这里用vm)
*创建一块儿新的硬盘把硬盘挂到完整的宿主机上并对硬盘分区并从完整宿主机上整理相应的内核文件和应用文件,等一切所需准备完成时把硬盘移动到缺少硬盘的虚拟机上进行测试。
*对新的硬盘建立分区:先建立三个主分区sdb1:100m sdb2:1g sdb3:500m
建立完主分区后把sdb3类型改为82即swap分区
(图为各个分区硬盘大小20G)
*对磁盘进行格式化mkfs –t ext3 /dev/sdb1 mkfs -t ext3 /dev/sdb2
/dev/sdb1作为引导分区/dev/sdb2作为根分区
*对磁盘进行挂载
*构建MBR:即构建grub,第一阶段在mbr内部里第二阶段在硬盘里(自动找到/mnt/boot、指向/dev/sdb而不是某个分区)
*找到boot目录后自动创建grub
*Grub缺少一个菜单建立grub.conf文件(里面是内核文件和一些驱动和一些开机默认项引导项)
*建立菜单前先把宿主机器的内核拷贝过来
*由于宿主机和新建硬盘的不同,有关驱动的initrd-2.6.18-164.e15.img内的信息也会不同,所以我们应该首先更改该文件的信息。
*展开后的文件里的init文件在启动中是会被执行的,应更改该文件的内部信息
*因为我们创建的新硬盘中swap分区并没有格式化不能被应用所以把87行注释掉,更改完成后对文件进行重新打包,并把打包后的文件拷到/mnt/boot/下
*前几个阶段结束后,写一个grub菜单
*接下来是init进程:在新建硬盘sysroot目录下创建所需要的目录并把每个目录的配置内容以及所要用的库拷贝过去
*写inittab:
*把宿主机/etc/inittab中的21 si::sysinit:/etc/rc.d/rc.sysint行拷贝到/mnt/sysroot/etc/inittab中
*在新建rc.d中没有rc.Sysinit所以我们要自己创建,rc.sysinit是一个shell脚本
*由于要运行shell文件应加入bash的配置
*为了方便把库加入到每个指令文件内,编写一个cp.sh
基本指令链接库导入之后就可以进入系统进行简单操作
*在/mnt/sysroot/etc/inittab文件下修改内容实现init 0 init 6的应用
*Init 6
*启动界面添加背景图片/mnt/boot/grub/grub.conf文件下
图片大小640*480 14位色 格式xmp.gz
安装yum源 修改/etc/yum.repos.d/rhel-debuginfo.repo
安装完成后在图形化界面下运行gimp可以对图片进行修改
*添加网络功能
模块:
*Eth0只是个别名,真正叫pcnet
*网卡pcnet32
*Mii被pcnet32所依赖
*Modinfo查看模块儿详细信息
*Rmmod模块儿卸载
*Modprobe 名称 加模块儿(inmod 必须要加完整路径)
*在新硬盘里建放模块儿的文件并把网络模块拷贝过去
*由于pcnet32依赖于mii所以要把mii拷贝过来
*调用模块
*把要用的pcnet32.ko和mii.Ko模块儿拷贝过来,,编辑rc.sysinit来调用模块儿并未网卡配上地址
*已经实现网络功能
*实现ftp功能: *安装ftp服务
*加入vsftpd指令
*把宿主机内的vsftpd下的文件拷贝到新建硬盘相应位置去,在相对应的var目录下建立ftp/pub
*因为ftp安装完之后会形成一个ftp用户,用来登录ftp,需要把该ftp账号拷贝过来
*由于登陆name与id需要一种nsswhich机制,机制需要nesswitch.conf文件,conf文件依赖于几个链接库,这里我们只做个别链接库的拷贝
*ftp需要有一个日志log目录所以要么创建log要么禁用掉
进入/mnt/sysroot/etc/vsftd/vsftpd.conf把39和56有关log的句子禁用掉
*再把userlist那一行禁用掉 *手工创建一个/mnt/sysroot/etc/usr/share/empty目录 *实现ftp
简单功能已经能够实现,如需更多功能还得大家自己慢慢研究学习!!!