怎么自建一个Linux系统
如题,本文讲解如何自己制作一个小型Linux系统
先贴一下大概步骤:
- 准备一块硬盘
- fdisk给硬盘分区(/boot一个,/一个)、格式化
- 挂载/boot分区
- grub-install安装grub文件
- 生成vmlinuz、initramfs
- 建grub.conf文件
- 挂载根,创建文件系统
- 复制其他脚本及依赖文件、驱动
首先,在现有的centos6中添加一块虚拟硬盘(当然,你也可以用U盘代替),
楼主用的vm,这里叫8.0是为了做标记,等做完后找得到。
ok,然后启动,上图中也可以看出,我原来就一块硬盘,所以新添加的这块默认就是/dev/sdb了。执行lsblk指令看也确实是
接下来对sdb进行分区,至少需要两个分区,一个/boot存放系统引导信息,一个/。
保存退出,lsblk再看一下
然后需要对新建的分区进行格式化,# mkfs.ext4 /dev/sdb1
对sdb1和sdb2执行相应格式化。
格式化完就要挂载分区了,此时也可以执行blkid检查分区:
新建目录,安装grub,子目录最后一级必须为/boot,因为grub-install生成grub stage2文件时默认会找boot目录。
# mkdir -p /mnt/boot
# mount /dev/sdb1 /mnt/boot
# grub-install --root-directory=/mnt/ /dev/sdb
现在/boot/grub/有了,但是/boot下还缺内核文件vmlinuz和伪文件盘initramfs,这个时候可以直接从当前系统中拷贝:
# cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/boot/vmlinuz
# cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/boot/initramfs.img
此时grub stage2还差一个0配置文件grub.conf,手动新建一个(当然,复制过去修改也行)
# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title centos6.9 made by yiyu
root (hd0,0)
kernel /vmlinuz ro root=UUID="e9895eea-04e9-4617-8ce9-64e88426cc7d" quiet selinux=0 init=/bin/bash
initrd /initramfs.img
#
对这个文件做一下说明:title是启动选择的时候显示的,root (hd0,0),这个root指的/boot所在分区,(hd0,0)代表第一块硬盘的第一个分区,kernel和initrd就是上面生成的那两个grub关键文件了,ro是只读的意思,这里的root=就是指定真正的根分区了,selinux=0是为了让引导时selinux不打标签,这样启动快一些,原来的centos6默认启动的第一个程序是init,但它附带加载的脚本太多,所以这里用init=来指定第一个启动程序为bash。
linux=kernel+tools,现在kernel已经做好了,还差根文件系统和命令工具,一步一步来:
# mkdir /mnt/rootfs
# mount /dev/sdb2 /mnt/rootfs/
# mkdir -pv /mnt/rootfs/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
再复制工具和工具依赖包,例如bash、ls、ps、wc、ping
注:bash一定要复制过去!
这里我自己写的一个用来复制command的脚本,在这里贴一下吧:
#!/bin/bash
#
#复制指定命令到指定目录
todir=/mnt/rootfs
while true;do
read -p "please input an excutable command: " cmd
if [ "$cmd" == "quit" ];then
break
fi
commd=`which $cmd`
fix=`echo "$commd" |sed -r 's/(^.*)\/[[:alpha:]]+$/\1/'`
cd ${todir}${fix} &>/dev/null || mkdir -p ${todir}${fix}
cp -pf $commd ${todir}${fix}
ldd $commd |sed -r 's/.*[[:space:]](\/+.*)[[:space:]].*/\1/'|grep / | \
while read line;do
libfix=`echo "$line" |sed -r 's/(^.*)\/[[:alpha:]]+$/\1/'`
cd ${todir}${libfix} &>/dev/null || mkdir -p ${todir}${libfix}
cp -pf "$line" ${todir}${libfix}
done
done
echo finished
最后用tree看一下:
也可以把网卡驱动添加进去,
# modinfo e1000 ##查看filename得到驱动地址
# cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/rootfs/lib/
# sync
# sync
# poweroff
创建完成了,现在来测试一下,找到这个磁盘文件
然后新建一个虚拟机,现在刚刚找到的那个磁盘
一路走下去,完成后开机
现在就看到了之前建的title了,进去之后是这样子的
到这里,一个简单的linux系统就完成了。