首页 > 代码库 > diy自己的linux
diy自己的linux
准备一台liunx的机器,我用的是liunx虚拟机
单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。
mkdir /mnt/boot
mkdir /mnt/sdc2
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sdc2
4.执行grub-install命令,黄色箭头是指将来要作为/ 的目录,红色箭头是表示将grub相关文件写入/sdb磁盘中(grub相关文件是用来引导启动内核的关键文件)
5.拷贝内核文件和文件系统文件到/boot
6.编辑/mnt/boot/grub/grub.conf文件
第一行:出现列表时,背景图片的路径(图片的制作方法请看我相关的文章)
第二行:内核的名字
第三行:将来从第一块硬盘第一个扇区启动
第四行:启动内核文件,只读,/目录在/dev/sda2分区 此时selinux关闭 init程序读取/bin/bash
第五行:根目录可用前的一个临时文件系统,initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。
7.写挂载文件
8.在/mnt/sdc2/下建根目录中的文件夹
9.利用脚本拷一些命令到新的目录下(在/mnt/sdc2下执行此命令)
脚本内容如下:
#!/bin/bash
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
ch_root="/mnt/sdc2"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which --skip-alias $1` | grep -Eo ‘/[^[:space:]]+‘)
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
10.我们此时可以将此块硬盘取下,挂载到一个新的liunx系统中去,测试是否能正常启动
新虚拟机
11.启动新的虚拟机
此时,我们可以看到内核的名字是zebralinux,也就是我们在/mnt/boot/grub/grub.conf中title所对应的行,背景图片也被换了,说明暂时系统是好的,可以继续进行
因为我们制定init=/bin/bash,所有开机后执行的第一个程序就进入到bash中,在此界面中我们可以测试其他命令,有些命令应该可用,有些有依赖其他文件的命令或许此刻或用不了,我们只是做了个简单linux。
我们第一次mount时,sda1没有被挂载上。当我们挂载时,会报错,但仍能被挂载上。之后,我们就可以进入到/下的目录和/boot目录中了
本文出自 “zebra930” 博客,请务必保留此出处http://zebra930.blog.51cto.com/11736340/1851442
diy自己的linux