今天我带大家做一下简单的linux小系统,属于自己定制的系统哦。

    实验环境:centos6.9虚拟机系统

    首先,我们在VMware上给虚拟机添加一个新的硬盘,不需要太大的空间,20G就妥妥够了,我们只是能把系统跑动,有简单的基本命令就行了,然后把硬盘的位置保存在我们便于找到的地方,我放在了我的文档之中,取名为linux,当然名字是随便起的,然后我们开启此虚拟机。

    由于我的虚拟机开始上面就有两块硬盘,很好分辨出我们20G的小硬盘,是/dev/sdc,我们先使用lsblk来查看一下是否硬盘已经被启用

wKioL1nAxF7x4aOeAABBzbIp-_Y775.png    然后我们一顿分区格式化(基本操作就是fdisk /dev/sdc--->mkfs.ext4 /dev/sdc),这里我们就分出了两个区,sdc1,sdc2,其中sdc1只有100M,剩下的全都分给了sdc2,如下图

wKioL1nAxWqjmxRLAABJ4ioR2-Q949.png    然后就是把这两个分区挂载到目录上,就可以在该磁盘上添加东西了,我分别挂载/dev/sdc1--->/mnt/boot/,/dev/sdc2--->/system,然后我们先针对/mnt/boot/下的目录开始搞事情,我们知道,我们的boot下都有什么呢?initramfsxxx,伪根系统,vmlinuzxxxx,linux内核,grub,启动相关的文件。我们可以使用mkinitrd initramfs-`uname -r` `uname -r`生成我们需要的initramfs文件,而vmlinuz文件呢,在我们挂载的光盘的下isolinux下也有vmlinuz或者自己手动强制安装在/mnt/boot目录,为省事我们直接从光盘挂载(mount /dev/sr0 /media)的目录下cp过来,然后就剩grub了,生成grub的方法有很多种,最简单的就是grub-install --root-directory=/mnt /dev/sdc 这种!

 

    至此我们的boot文件基本解决,然后就缺grub.conf这个文件了,而这个配置文件也不是很复杂,就是一些默认开机选项,等待时间自动进入,内核信息,伪根信息

wKiom1nAycvh1EBUAAAbmqX89rc566.png    有人会好奇了,那么长一串的UUID,是怎么弄上去?只是利用了我们vim的一些小技巧,我们:之后会进入模式,然后r!COMMAND就行了,比如,我们的UUID,:r! blkid /dev/sdc2然后回车就会自动显示在我们的屏幕上。

    然后就是我们的/system这个目录,这个目录相当于我们在系统中的根目录,目录中有很多的文件夹命令函数库啥的,而我们需要从现有的系统中拷贝一些常用的命令,和对应的函数库。我们编写了以一个shell脚本来实现,而这个脚本我是直接拿来同学的直接用了,代码如下:

#!/bin/bash

#===============================================================

#作者:cheyue

#文件名:copycmd.sh

#版本:

#作用: 

#===============================================================

cjlu () {

        if [ -f $2 ];then

                echo " $1   已存在 "

        else

                mulu $1 $2

        fi

}

mulu () {

        mdmulu=$(echo $2 |sed -r "s/(.*\/)[^\/]*$/\1/")

        if [ -d $mdmulu ];then

                cp $1 $2 

        else

                mkdir -p $mdmulu

                cp $1 $2

        fi

}

i=0;sys=/system

while [ $i == 0 ];do

        while [ $i == 0 ];do

                read -p "请输入一个命令: " cmd

                which $cmd &>/dev/null

                pd=$(echo $?)

                if [ $pd -ne 0 ];then 

                        echo "你输入的是内部命令或不是命令。"

                        read -p "输入no退出不退出回车: " b

                        if [[ $b =~ n ]];then

                                exit

                        fi

                else

                        let i+=1

                fi

        done

        cmdlj=$(which $cmd |tail -1 |grep -o "[^[:space:]]\+")

        cjlu $cmdlj $sys$cmdlj

        for i in $(ldd $cmdlj |sed -nr "s/.*[[:space:]](\/.*) .*/\1/p");do

                cjlu $i $sys$i

        done

        i=0

done

    然后我大约拷贝了,ls、ifconfig、ip、mount、cat、vi、insmod、modprobe、bash、ping.....还有一个网卡驱动模块通过locate e1000查找到的以.ko结尾的文件拷贝到这里。

    接着就是完善整个目录体系,mkdir {etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

wKiom1nAzQmQeSeVAAASj6pMtuQ117.png    检查一下没有问题,我们就关闭此虚拟机,然后把硬盘放到另一个空白的虚拟机中,点击使用现有磁盘,开机。

    wKiom1nAzqSwNzY3AACYh7HSfPQ656.png    再然后成功制作成功第一个linux。

    今天分享到此结束,请大家多多指教。