自己动手制作简单的linux.docx
- 文档编号:30392572
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:16
- 大小:583.68KB
自己动手制作简单的linux.docx
《自己动手制作简单的linux.docx》由会员分享,可在线阅读,更多相关《自己动手制作简单的linux.docx(16页珍藏版)》请在冰豆网上搜索。
自己动手制作简单的linux
Linux操作系统已成为当今服务器操作系统的主力了,也有越来越多的同志们对linux感性趣了,当然我也不例外,linux的功能很多很强大,但是对于不同的需求可能不需要那么完整的功能,同时linux很灵活,可以选择性的去定制适合需求的linux操作系统,那么今天我们就来自己定制一个小的linux操作系统来练练手。
自己DIYlinux操作系统之前,你需要对linux操作系统有所理解并能熟练的使用,网上有很多关于linux的书籍及视频,可以去学习。
一、准备工作:
a.理论基础
b.软硬件平台
1.理论基础
a.linux的启动流程,这是必须要了解的,因为我们是按照启动流程来模拟定制操作系统的,启动流程分几步:
1.加在BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备
2.读取并执行第一个启动设备内的MBR的bootLoader(grub,spfdisk等程序,很重要)
3.依据bootloader的设置加载Kernel,Kernel会开始检测硬件和加载驱动(内核是可以自己定制的,后面会讲到)
4.在硬件驱动加载成功后,Kernel会主动去调用init进程,而init会获取run-level信息
5.init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(我们可以选择性的将想要的功能实现添加进这个脚本里)
6.init执行run-level的各个服务的启动(脚本形式)
7.init执行/etc/rc.d/rc.loacl文件(里面包含了一下用户自定义的开机启动项,类似windows)
8.init执行终端机模拟程序mingetty来启动login进程,最后就等待用户启动
启动流程就是这样,但是我们自己定制的操作系统可能没有这么强大所以并不是每个流程都会经过,可以后期随着自己的能力的增强去自己修改
b.要懂得如何去看脚本和编写脚本,这是必须的,不然后续的任务无法完成
2.软硬件平台
a.软件平台:
你需要有一个完整的linux镜像,我们要模仿着做官方的操作系统做,我用的是rhel-server-5.4-i386-dvd.iso,网上可以下载的到,当然因为我的硬件有限,我使用的是虚拟机(vm)来完成各项操作
b.因为有了虚拟机,所以不用太考虑硬件的。
二、开始我们的DIYlinux之旅至于上述不懂得可以去问问度娘,反正我是很喜欢度娘啦
1.需要新建两个虚拟机,其中一个不需要硬盘,以后作为测试用,另一个是一个完整的Linux5.4系统(我的是5.4的),不会安装虚拟机的去自己找找教程,安装完成之后要新添加一块硬盘(大概20个G),作为移植硬盘,移植到那个没有硬盘的虚拟机上做测试,在测试过程中可以使用vm的supend功能,可以省去很多的时间,同时还要注意在Server1上修改Server2硬盘的数据时记得要使用sync指令去同步到硬盘中
做完以上之后的截图下图:
1-1,1-2(注Server1是配置机,Server2是验证主机就是开始那个没硬盘的主机)
1-1
1-2
2.Server1启动之后先对那块新硬盘进行分区、格式化和挂载,下面是我的磁盘情况
[root@localhost~]#fdisk-l
Disk/dev/sda:
42.9GB,42949672960bytes
255heads,63sectors/track,5221cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBootStartEndBlocksIdSystem
/dev/sda1*11310439183Linux
/dev/sda214131810482412+83Linux
/dev/sda3131914491052257+82Linuxswap/Solaris
Disk/dev/sdb:
21.4GB,21474836480bytes
255heads,63sectors/track,2610cylinders
Units=cylindersof16065*512=8225280bytes
Disk/dev/sdbdoesn'tcontainavalidpartitiontable
a.其中/dev/sdb就是我们的那块新硬盘,先分区
使用fdisk/dev/sdb,将硬盘分一个100MB的作为boot分区,一个10G的作为根分区,一个1G的作为swap分区(注:
swap的ID号为82,需要修改一下)
分区玩之后就是下面这个样子了图2-1
保存退出并使用partprobe指令更新一下分区表
b.格式化分区mkfs指令将/dev/sdb1和/dev/sdb2格式化为ext3文件系统
c.挂载分区到mnt目录下,我建立了/mnt/boot和/mnt/sysroot
mount/dev/sdb1/mnt/boot/
mount/dev/sdb2/mnt/sysroot/
d.安装grub到新硬盘的boot分区下
grub-install--root-directory=/mnt//dev/sdb注:
这里一定要是硬盘而不是分区
e.将内核和小的驱动镜像考到新分区的boot目录
[root@localhost~]#cp/boot/vmlinuz-2.6.18-164.el5/mnt/boot/
[root@localhost~]#cp/boot/initrd-2.6.18-164.el5.img/mnt/boot/
f.对于小的驱动镜像我们还要做出一定的修改,不然会出错
[root@localhost~]#cd/mnt/boot/
[root@localhostboot]#mkdirtmp
[root@localhostboot]#cpinitrd-2.6.18-164.el5.img./tmp/
[root@localhostboot]#cdtmp/
[root@localhosttmp]#zcatinitrd-2.6.18-164.el5.img|cpio-id
11832blocks
[root@localhosttmp]#ll
total2605
drwx------2rootroot1024Mar1615:
34bin
drwx------3rootroot1024Mar1615:
34dev
drwx------2rootroot1024Mar1615:
34etc
-rwx------1rootroot2703Mar1615:
34init
-rw-------1rootroot2644455Mar1615:
32initrd-2.6.18-164.el5.img
drwx------3rootroot1024Mar1615:
34lib
drwx------2rootroot1024Mar1615:
34proc
lrwxrwxrwx1rootroot3Mar1615:
34sbin->bin
drwx------2rootroot1024Mar1615:
34sys
drwx------2rootroot1024Mar1615:
34sysroot
[root@localhosttmp]#viminit
将93行禁用掉,这个是有关swap的使用,有可能在新主机上的使用有问题
[root@localhosttmp]#rminit
initinitrd-2.6.18-164.el5.img
[root@localhosttmp]#rminitrd-2.6.18-164.el5.img
rm:
removeregularfile`initrd-2.6.18-164.el5.img'?
y
[root@localhosttmp]#find.|cpio-o-Hnewc--quiet|gzip-9>initrd.gz
cpio:
File./initrd.gzgrew,2048000newbytesnotcopied
[root@localhosttmp]#ll
total4704
drwx------2rootroot1024Mar1615:
34bin
drwx------3rootroot1024Mar1615:
34dev
drwx------2rootroot1024Mar1615:
34etc
-rwx------1rootroot2704Mar1615:
39init
-rw-r--r--1rootroot4785507Mar1615:
40initrd.gz
drwx------3rootroot1024Mar1615:
34lib
drwx------2rootroot1024Mar1615:
34proc
lrwxrwxrwx1rootroot3Mar1615:
34sbin->bin
drwx------2rootroot1024Mar1615:
34sys
drwx------2rootroot1024Mar1615:
34sysroot
[root@localhosttmp]#cpinitrd.gz..
g.重建grub.conf
/****************************grub内容
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
titleRedHatEnterpriseLinuxServer(2.6.18-164.el5)
root(hd0,0)
kernel/vmlinuz-2.6.18-164.el5roroot=LABEL=/rhgbquiet
initrd/initrd-2.6.18-164.el5.img
*************************************************/
上述是原有grub.conf的内容,我们只能用到部分现在不需要的我们可以注释掉,建成之后我们的grub.conf的内容如下:
default=0
timeout=5
#splashimage=(hd0,0)/grub/splash.xpm.gz该项在后续过程中还可以启用
hiddenmenu
titleRedHatEnterpriseLinuxServer(2.6.18-164.el5)
root(hd0,0)
kernel/vmlinuz-2.6.18-164.el5rwroot=/dev/sda2rhgbquiet这里我修改为rw方便后续的操作
initrd/initrd.gz
h.移植init进程
首先仿照已有系统的目录结构,在新硬盘的根分区(/mnt/sysroot)下建立相应的目录,这一点很重要(最好是全部目录都建立)
bin,etc,lib,sbin,usr,var等等
[root@localhostsysroot]#cp/sbin/init./sbin/
当然还要把相关的链接库移植到新的分区init进程需要一下链接库,可以使用ldd来查看需要的链接库,这个指令在后面会经常的用到
如果一个一个的移动会相当的费事,我这里写了一个小的脚本来帮助实现,对以后要使用的功能相当的实用,一下便是脚本的内容
[root@localhost~]#shfastmove.sh
Pleaseinputacommandthatyouwanttomove:
init
Pleaseinputacommandthatyouwanttomove:
之后有关init的内容变迁移到我们的新系统中了,当然我们还可以把一下常用的指令都移过去,比如:
ls、vi、grep、mkdir、cd、rm、useradd、reboot、halt等等
新建inittab文件
新建rc.sysinit
当然这里用到了bash,所以要通过fastmove脚本将其移植到新系统中
做到这里我就可以测试一下是否能够启动我们的新系统
I.添加关机重启功能
在inittab文件下添加如下条目
l0:
0:
wait:
/etc/rc.d/rc.shutdown
l6:
6:
wait:
/etc/rc.d/rc.reboot
之后在rc.d目录下建立rc.shutdown文件和rc.reboot文件
rc.shutdown文件的内容为
rc.reboot文件的内容为
之后将文件权限加上可执行
chmoda+x/mnt/sysroot/etc/rc.d/rc.reboot
chmoda+x/mnt/sysroot/etc/rc.d/rc.shutdown
J.添加hostname
在rc.sysinit脚本中添加一下代码但是要在Setshell之前
#Sethostname
if[-f/etc/sysconfig/network];then
./etc/sysconfig/network
fi
if[-z$HOSTNAME];then
/bin/hostnamelocalhost
else
/bin/hostname$HOSTNAME
fi
添加/mnt/sysroot/etc/sysconfig/network文件,内容如下
NETWORKING=yes
HOSTNAME=
K.自定义开机背景图片
这个要用到linux下得gimp软件进行图片处理
图片要求最好是分辨率640x480,16位图片的扩展名为xpm.gz
我的yum配置好了,使用的yum源是光盘,我事先把光盘挂载到/mnt/cdrom目录下了,可以很方便的安装,我的yum配置文件如下
"/etc/yum.repos.d/rhel-debuginfo.repo"
[rhel-server]
name=RedHatEnterpriseLinuxserver
baseurl=file:
///mnt/cdrom/Server
enabled=1
gpgcheck=1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
安装gimp
yuminstallgimp
先使用gimp软件将图片改成上述要求的xpm格式,然后使用gzip工具打包
将文件考入/mnt/boot/grub目录下我的文件名为linux.xpm.gz
最后修改/nmt/boot/grub/grub.conf
splashimage=(hd0,0)/grub/linux.xpm.gz
效果如下
(*^__^*)嘻嘻……还不错吧
L.添加网络功能
添加网络功能需要加入相关的模块,网卡用的模块有pcnet32,它依赖与mii,开机加载模块需要相应的指令
lsmod|grep-ipcnet
modinfoname查看模块信息可以看到模块的路径
rmmodname卸载模块
ismod查看所有模块
modprobename添加模块
insmodname也可以添加模块
同时还要有网络管理命令来设置网络参数如service,ifconfig,ping,sysctl等,我们可以使用fastmove.sh来将指令移植到我们的新系统中
将模块移植到新的系统中
cp/lib/modules/2.6.18-164.el5/kernel/drivers/net/mii.ko/lib/modules
cp/lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko/mnt/sysroot/lib/modules
之后修改rc.sysinit文件,在setshell前加入
#Addnet
/sbin/sysctl-p&>/dev/null
/sbin/insmod/lib/modules/mii.ko
/sbin/insmod/lib/modules/pcnet32.ko
/sbin/ifconfigeth0192.168.101.250/24
/sbin/ifconfiglo127.0.0.1/8
测试
Windows主机ping虚拟机
M.添加ftp服务器
首先确保你的Server1上有vsftpd,如果没有的话可以使用yum安装,我的Server1上有vsftpd程序,下面我们来进行移植
拷贝Server1系统的vsftpd的目录结构及配置文件到我们的新系统中去
[root@localhost~]#mkdir/mnt/sysroot/etc/vsftpd
[root@localhost~]#cp/etc/vsftpd/*/mnt/sysroot/etc/vsftpd/
[root@localhost~]#ll/mnt/sysroot/etc/vsftpd/
total36
-rw-------1rootroot120Mar1620:
04ftpusers
-rw-------1rootroot120Mar1620:
04ftpusers.rpmsave
-rw-------1rootroot356Mar1620:
04user_list
-rw-------1rootroot356Mar1620:
04user_list.rpmsave
-rw-------1rootroot4579Mar1620:
04vsftpd.conf
-rw-------1rootroot4580Mar1620:
04vsftpd.conf.rpmsave
-rwxr--r--1rootroot338Mar1620:
04vsftpd_conf_migrate.sh
[root@localhost~]#
用fastmove.sh将vsftpd指令拷贝到新的文件系统中
[root@localhost~]#shfastmove.sh
Pleaseinputacommandthatyouwanttomove:
vsftpd
拷贝相关用户账号passwd,shadow,group等文件到/mnt/sysroot/etc目录下
[root@localhost~]#cp/etc/passwd/mnt/sysroot/etc/
[root@localhost~]#cp/etc/group/mnt/sysroot/etc/
[root@localhost~]#cp/etc/shadow/mnt/sysroot/etc/
拷贝文件/etc/nsswitch.conf到新系统的相对目录下/mnt/sysoot/etc
拷贝类库到新系统的相对目录下cp-df/lib/libnss_compat*/mnt/sysroot/lib/
cp–df/lib/libnss_files*/mnt/sysroot/lib/
修改vsftpd.conf配置文件禁止掉下面两项
#pam_service_name=vsftpd目前无法开启该功能
#userlist_enable=YES(原因是我们目前没有可用的账户)
建立/mnt/sysroot/var/log/xferlog日志文件或者禁用日志功能,在vsftpd.conf文件中可以修改在39行,可以注释掉
建立mkdir–p/mnt/sysroot/usr/share/empty目录
建立mkdir-p/mnt/sysroot/var/ftp/pub目录
上述的操作是经过错误后的改良版,并非一次成功,所以当遇到错误的时候根据提示修改就是了,没事问度娘
接下来就是测试工作
服务器启动ftp
在windows下以匿名方式登录
N.建立www服务器
第一步使用fastmove.sh将httpd和lib移动到新系统中去
在新系统中建立相应的目录结构如/etc/httpd/,/var/log/httpd/并且将原有目录结构中的东西拷贝到新系统中
拷贝文件/etc/mime.types到相同的目录结构
接下来就是启动了
然后在windows上进行测试
测试成功,当然也可以将vsftpd的启动服务加在rc.sysinit文件中,这样就可以不用每次都去启动了,我是成功了,接下来就看你了朋友,需要你有耐心的去调试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自己动手 制作 简单 linux
![提示](https://static.bdocx.com/images/bang_tan.gif)