linux组建

一个小的linux的初步组建,可以使用命令ls。

先是grub的创建。因为grub是分为两个段实现的第一个段放在mbr当中,第二个段放在/boot/grub当中
我们在现有的系统上放个新的磁盘,我这里把它分成了两个区/dev/sdb1 /dev/sdb2 并且我都把他们格式化成了ext3的文件系统
mke2fs -j /dev/sdb1
mke2fs -j /dev/sdb2
接下来把他们都挂载上,当然挂载的时候我们要新建两目录。
mkdir -p /mnt/boot
mkdir -p /mnt/sysroot
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot

cd /mnt/boot
grub-install --root-directory=/mnt /dev/sdb (这个命令就是我们把grub安装到dev/)
更改grub配置文件:grub.conf
cd /mnt/boot/grub
vim grub.conf
 default=0
 timeout=33
 title hello linux
 root(hd0,0)
 kernel /vmlinuz ro root=/dev/sda2
 initrd /initrd.gz
以上表示grub完成了

现在开始复制内核
cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz
然后是initrd这个文件,它的作用就是相当于一个假根,通过它来完成真根的替换
它本身是一个归档压缩文件所以我们先复制原文件到tmp下来,对/tmp下的这份文件进行相关的操作,以免照成对原文件的损坏
cp /boot/initrd-2.6.18-308.el5.img  /tmp
cd /tmp
然后对其进行重命名成压缩文件(注意这里是gzip)
mv /initrd-2.6.18-308.el5.img initrd-2.6.18-308.el5.gz
gzip -d initrd-2.6.18-308.el5.gz
因为是归档文件的缘故,所以里面会有许多的文件,所以我们是在一个空目录里面把这个文档打开
mkdir /tmp/linux
cpio -id < initrd-2.6.18-308.el5 (拆档)
ls /tmp/linux 就会发现linux下面有了以下的文件
bin  dev  etc  init  lib  proc  sbin  sys  sysroot
这个init文件里面有一行是定义了真正的系统在哪个分区上。所以我们要打开这个文件修改下这一行
vim init
ro root=/dev/sda2(这里要和配置文件grub.conf里面的kernel /vmlinuz ro root=/dev/sda2是一致的,)
已经把这个initrd修改成我们想要的了,所以我们还是得把它们归档压缩,然后放到/mnt/boot下面
find /tmp/linux | cpio -o --quiet -H newc| gzip -9 > /mnt/boot/initrd.gz(即将目录linux 下面所有的东西通通归档并压缩)
cd /mnt/sysroot
mk -pv mkdir -pv etc/rc.d bin sbin dev bash home media tmp sys boot usr root mnt var lib proc opt srv net(在根下创建目录)
虽然我们的目录创建好了,但是如果想用还得有文件啊
init这个进程要执行,靠的就是/sbin/init
所以我们要把它拷贝过来
cp /sbin/init /mnt/sysroot/sbin
当然这就需要配置文件了。我们这里自己建个配置文件
cd /mnt/sysroot/etc
vim inittab
id:3:initdefault (设置3级别为我们的默认级别)
si::sysinit:/etc/rc.d/rc.sysinit(这句话的意思对系统进行初始化,但是我们还没rc.sysinit文件啊,所以我们还得创建这个文件呢)
cd /mnt/sysroot/etc/rc.d
vim rc.sysinit (这个脚本我们什么工作也不做只是用一下bash)
#!/bin/bash
echo“just test”
/bin/bash

然后还得给它一个执行权限chmod +x etc/rc.d/rc.sysinit
用到了/bin/bash当然得给它在当前目录下做个链接咯
cd /mnt/sysroot/bin
ln -sv bash sh

既然用到了/bin/bash我们还得看看它是依赖于哪些数据库的,我们必须连同这些数据库一同复制过去(对应复制)
ldd /bin/bash
[root@localhost /]# ldd /bin/bash
 linux-gate.so.1 =>  (0x00a9d000)
 libtermcap.so.2 => /lib/libtermcap.so.2 (0x003c5000)
 libdl.so.2 => /lib/libdl.so.2 (0x00393000)
 libc.so.6 => /lib/libc.so.6 (0x00237000)
 /lib/ld-linux.so.2 (0x00218000)
开始复制这些库
cp /lib/libsepol.so.1 /mnt/sysroot/lib
cp /lib/libselinux.so.1 /mnt/sysroot/lib
cp /lib/libc.so.6  /mnt/sysroot/lib
cp /lib/libdl.so.2 /mnt/sysroot/lib
如果我们还想用ls这个命令的话我们要连同ls并且以及它依赖的数据库一起挪过来!
先看下ls在哪里存放
[root@localhost /]# which ls
alias ls='ls --color=tty'
 /bin/ls
cp /bin/ls /mnt/sysroot/bin
[root@localhost /]# ldd /bin/ls
 linux-gate.so.1 =>  (0x00dcb000)
 librt.so.1 => /lib/librt.so.1 (0x003f6000)
 libacl.so.1 => /lib/libacl.so.1 (0x003e1000)
 libselinux.so.1 => /lib/libselinux.so.1 (0x00c88000)
 libc.so.6 => /lib/libc.so.6 (0x00237000)
 libpthread.so.0 => /lib/libpthread.so.0 (0x003c5000)
 /lib/ld-linux.so.2 (0x00218000)
 libattr.so.1 => /lib/libattr.so.1 (0x00d05000)
 libdl.so.2 => /lib/libdl.so.2 (0x00393000)
 libsepol.so.1 => /lib/libsepol.so.1 (0x00ca2000)
开始复制库,已经存在的就不要复制了
为方便起见,所以我们直接进入lib这个目录里cd /mnt/sysroot/lib 

cp /lib/librt.so.1 .
cp /lib/libacl.so.1 .
cp /lib/libpthread.so.0 .
然后我们ls一下我们的库看下
[root@localhost /]# ls /mnt/sysroot/lib
ld-linux.so.2  libattr.so.1  libdl.so.2       librt.so.1       libsepol.so.1
libacl.so.1    libc.so.6     libpthread.so.0  libselinux.so.1  libtermcap.so.2
然后我们在命令好输入sync同步下(多来几次)
[root@localhost /]# sync
[root@localhost /]# sync
[root@localhost /]# sync
[root@localhost /]# sync
[root@localhost /]#
我们的工作就完成了,我们现在本机测试下,我们这个小的系统到底能不能用,用命令chroot切换根,看下我们的ls能不能用。
[root@localhost /]# chroot /mnt/sysroot
bash-3.2# ls
bash  bin  boot  dev  etc  home  lib  lost+found  media  mnt  net  opt proc  root  sbin  srv  sys  tmp  usr  var
bash-3.2#

嘿嘿,是可以用的,现在我们就可以把这个盘安到一个新的机器上面了。一个初步的Linux形成了
【还记得我吗写配置文件grub.conf里面是有一行kernel /vmlinuz ro root=/dev/sda2我们挂载的是sdb1和sdb2,并且很明确的我们的grub以及我们创建的小的系统都是在sdb上创建没错啊,况且我们真正的根式放在/dev/sdb2上的,那这里应该是root=/dev/sdb2啊,那怎么这里会冒出个sda2呢?
(*^__^*) 嘻嘻……这是因为,这块磁盘在现在操作的机器上时被认为是/dev/sdb 但是当我们把它放到一个新的机器上的时候它就是/dev/sda 啊,所以我们这里是kernel /vmlinuz ro root=/dev/sda2。下面的init文件里面那行要改成root=/dev/sda2是同样的道理)】

你可能感兴趣的:(linux,配置文件)