怎样制作自己的linux
要制作一个linux系统,首先我们要了解它的原理,启动的时候,首先是加电自检,
我们先格式化一个磁盘,并分区,这里分两个区,sdb1和sdb2
首先,创建目录/mnt/boot,并把设备sdb1挂载到/mnt/boot下面
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
下面先安装grub,(其实上篇已经介绍如何安装了,这里仅简述命令)
mkdir /mnt/boot/grub
cp /usr/share/grub/i386-redhat/* /mnt/boot/grub
grub
grub> root (hd1,0)
grub> setup (hd1)
再创建/mnt/sysroot目录,用来装载内核
mkdir /mnt/sysroot (这里我们随便起一个目录名,然后把新的分区挂载到上面)
mount /dev/sdb2 /mnt/sysroot/
ls /mnt/sysroot 查看是否已经挂载好,如有lost+found则表明挂在好新分区
Ls /boot/ 可以看到内核在里面,拷贝内核到/mnt/boot下
cp /boot/vmlinuz-$(uname -r) /mnt/boot/vmlinuz (后缀名可以自己写)
mkdir /tmp/linux 在临时目录里创建一个目录,用来寄存initrd文件
cd /tmp/linux
zcat /boot/initrd-$(uname –r).img | cpio –id 这个文件是归档压缩的文件,是用cpioy归档的,所以解压后,必须用cpio -id 才能打开,
vim init 编辑打开后的init文件
找到/dev/vol0/root 换成/dev/sda2
我们知道,本地磁盘sdb 可以当做另一个新主机的磁盘sda,所以grub已经在sda1上了,内核要在第二个磁盘分区上,所以在init文件中,要把/dev/vol0/root 修改为/dev/sda2
格式化第二个磁盘分区。mkfs –t ext3 /dev/sdb2
然后再将其归档到指定目录下:
find . | cpio –o –H newc –quiet | gzip -9 > /mnt/boot/initrd.gz(最后的归档名可以自拟)
下面我们可以创建一些目录:
cd /mnt/sysroot
mkdir –pv ./{etc/rc.d,bin,sbin,usr,proc,sys,var,tmp,lib,mnt,media,misc,opt,dev}
内核与grub已经有了,下面我们把init和bash也拷贝过来
cp /sbin/init sbin/
cp /bin/bash bin/
这时候, bash,init,grub,initrd都有了,你是不是以为大功告成了?我们可以用chroot这个命令测试一下,chroot /mnt/sysroot 此命令是将后面的目录作为根来调用,可以在/mnt/sysroot环境下试验命令,结果…………嘿嘿!不行吧!
那是因为少了命令所依赖的库文件,可以用ldd 这个命令查看可执行文件依赖的库文件
ldd /bin/bash
ldd /sbin/init
然后将以/lib开头的库文件拷贝到/mnt/sysroot/lib下,
下面还要配置一些文件:
先编辑inittab文件,此文件里定义的有:
1 默认运行级别,2 系统初始化脚本指定 3特定级别目录下脚本指定 4定义ctrl+alt+del组合键的功能 5 定义USP电源故障或电源重新恢复是执行的进程 6启动虚拟终端 7 初始化图形界面
Vim etc/inittab
Id :3:initdefault 默认运行级别是3
Si::sysinit:/etc/rc.d/rc,sysinit si是id,运行级别省略是指所有级别,sysinit是系统初始化, 后面是所要运行的脚本,一般格式为:id:runlevels:action:process
编辑系统初始化脚本,这里我们可以随便写点
Vim etc/rc.d/rc.sysinit
#!/bin/bash
Echo –e “\t Welcome to mylinux”
/bin/bash
保存退出后,修改权限:chmod +x etc/rc.d/rc.sysinit
最后别忘了,还有一个grub的配置文件呢!
Cd grub/
V im grub.conf
default=0
timeout=5
title mylinux
root(hd0)
kernel /vmlinuz ro root=/dev/sda2
initrd /initrd.gz
保存退出,然后sync ,同步到磁盘数据这时候,算是完成了,可以启动你那个新的linux了。
怎么样,是不是有种小小的成就感了,其实这只是小试牛刀,如果你想了解更多有关linux的knowledge,请继续关注我的博客,会不断更新哦!