diy自己的linux

  1. 准备一台liunx的机器,我用的是liunx虚拟机,Centos6.8的镜像。

  2. 单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。

  3. mkdir /mnt/boot

    mkdir /mnt/sdc2

    mount /dev/sdb1 /mnt/boot

    mount /dev/sdb2 /mnt/sdc2

    wKioL1fT4zWRWZhsAABMXri2n-Q444.jpg

4.执行grub-install命令,黄色箭头是指将来要作为/ 的目录,红色箭头是表示将grub相关文件写入/sdb磁盘中(grub相关文件是用来引导启动内核的关键文件)

wKioL1fT5YnwHc9RAAASxJCMQNQ554.jpg

5.拷贝内核文件和文件系统文件到/boot

wKiom1fT58Cxsv0CAAAaYZZ4cMM678.jpg

6.编辑/mnt/boot/grub/grub.conf文件

wKiom1fT6S-AnlWEAAAoy9TbgIo778.jpg

第一行:出现列表时,背景图片的路径(图片的制作方法请看我相关的文章)

第二行:内核的名字

第三行:将来从第一块硬盘第一个扇区启动

第四行:启动内核文件,只读,/目录在/dev/sda2分区 此时selinux关闭 init程序读取/bin/bash

第五行:根目录可用前的一个临时文件系统,initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。

7.写挂载文件

wKiom1fT7QjC6H5IAAAbvfupWqs499.jpg

8.在/mnt/sdc2/下建根目录中的文件夹

wKioL1fT8Z6C9lbvAAAcynQndHg665.jpg

9.利用脚本拷一些命令到新的目录下(在/mnt/sdc2下执行此命令)

wKioL1fT8pmjB_ewAABi41IjshU563.jpg

脚本内容如下:


#!/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系统中去,测试是否能正常启动

wKiom1fT86LSN4LHAACkVmE8E00759.jpg

新虚拟机

wKioL1fT9FTASiA3AAB7G9-yGXg617.jpg

11.启动新的虚拟机

wKiom1fT9LTzV6DbAADcGxP6Tkk264.jpg

此时,我们可以看到内核的名字是zebralinux,也就是我们在/mnt/boot/grub/grub.conf中title所对应的行,背景图片也被换了,说明暂时系统是好的,可以继续进行

wKiom1fT9ZPAaCWIAAAcuaLhJAg278.jpg

因为我们制定init=/bin/bash,所有开机后执行的第一个程序就进入到bash中,在此界面中我们可以测试其他命令,有些命令应该可用,有些有依赖其他文件的命令或许此刻或用不了,我们只是做了个简单linux。

wKioL1fT9xbgVaO9AADLtiIkPGc875.jpg我们第一次mount时,sda1没有被挂载上。当我们挂载时,会报错,但仍能被挂载上。之后,我们就可以进入到/下的目录和/boot目录中了

原创文章,作者:zebra930,如若转载,请注明出处:http://www.178linux.com/45213

(0)
zebra930zebra930
上一篇 2016-09-13 15:19
下一篇 2016-09-13 15:19

相关推荐

  • Linux中/etc目录下常用的配置文件及其含义总结

         在linux中有一个很重要的思想就是一切皆文件,也就是说所有的系统参数的配置都是保存在各种各样的配置文件当中的,这点Linux和Windows有很大的差别。      因为Linux中有众多配置文件,学习起来难免会不容易记忆,所以在此把一些常用的配置文件记录下来,做一个归纳总结。根据FHS…

    Linux干货 2017-03-26
  • openvpn安装配置过程

    前言     之前为了方便远程办公时访问公司的内部系统,如:svn、OA、wiki、禅道等等;通通在防火墙上做了端口映射。然后有个内部系统被黑了,各种弱口令没办法。果断关闭端口映射,看来还是得搭建个VPN服务器,vpn设备感觉大材小用。马上就想到了开源的openvpn,下面就来介绍openvpn的安装配置过程。 ope…

    Linux干货 2015-05-11
  • vim编辑器及练习题

    命令用法: vim [OPTION]… FILE…  +#: 打开文件后,直接让光标处于第#行的行首                   &nbs…

    Linux干货 2016-08-11
  • Linux初探

    1.计算机组成: CPU:运算器(指令集)、控制器、寄存器、缓存; 存储器:内存,RAM; Input:下指令,提供数据; Ouput:输出数据加工的结果 一般来说,从磁盘中读取程序和数据放到内存中排队,由cpu从内存中读取执行。由于cpu处理速度远大于磁盘的I/O速度,因此引入缓存。在计算机中有缓存为王这个说法。 2.操作系统的背景: 1.统一规范 2.由…

    Linux干货 2016-10-30
  • 一起学WINS系列(二)安装、配置

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/159128  此系列第二节:安装服务端、配置客户端。          完整的WINS系统…

    Linux干货 2015-03-25
  • N28-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作其默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
    (1)、创建组distro,其GID为2016;
    (2)、创建用户mandriva, 其ID号为1005;基本组为distro;
    (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
    (4)、给用户mageia添加密码,密码为mageedu;
    (5)、删除mandriva,但保留其家目录;
    (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
    (7)、修改slackware的默认shell为/bin/tcsh;
    (8)、为用户slackware新增附加组admins;

    2017-12-17