天天看点

自制Linux

步 骤:

1、在线添加一块20G的硬盘

2、分两个分区/boot100M   / 剩下的全部分给根

3、格式化为ext4文件系统

4、挂载/boot 和/

5、生成/boot 下文件

6、用脚本复制命令和命令所使用的库文件

7、复制网卡设备到/下

8、创建根下目录

9、复制完成,拔掉硬盘,放在一个新的虚拟机上用硬盘启动。

10、配置自制linux的网络功能。

具体实现如下:

1、 添加一块20G的硬盘(自制linux很小,20G足够用了)

  (1)点击右键设置     

    建议:该块磁盘单独放在一个地方,命名方式尽量自己手动写,手动命名需要在后面主动加上后缀.vmdk

   (2) 在线加硬盘,不能立即识别,需要执行下面命令,如果第一条命令,不成功再执行第二条命令

             echo '- --'>/sys/class/scsi_host/host0/scan

           echo '- - -'>/sys/class/scsi_host/host2/scan

2、分区

    分两个主分区/boot 100M,剩下的全部分给/

      lsblk 查看自己所加的硬盘是sd#,我的是/dev/sde ,所以我对/dev/sde分区

   分区   

    lsblk查看分区

3、格式化文件系统

    mkfs.ext4 /dev/sde1

        mkfs.ext4 /dev/sde2

4、挂载两个分区

  mkdir /mnt/boot

      mkdir /mnt/sysroot

      mount /dev/sde1 /mnt/boot/

      mount /dev/sde2 /mnt/sysroot/

       df 查看挂载情况

5、生成/boot下文件

   /boot的启动系统文件,所以非常重要   

    进入当前linux的/boot下 

    那么新建的硬盘的/mnt/boot下也应当有相应的文件

   (1)cp /boot/initramfs-2.6.32-696.el6.x86_64.img  /mnt/boot/

    (2)cp /boot/vmlinuz-2.6.32-696.el6.x86_64  /mnt/boot/

    (3)生成grub

            grub-install --root-directory=/mnt /dev/sde    

            解释:--root-directory=/mnt   指定boot所在的目录下

                    /mnt/boot ,所以boot所在的目录为/mnt

        已生成grub文件 

       (4) grub目录下的文件还少了grub.conf,需手动写

            经对比,可以看出/mnt/boot/grub 下与当前系统相比少了grub.conf文件                      

vim  /mnt/boot/grub/grub.conf      

<code>default=0</code>

<code>timeout=5</code>

<code>title linux-mini</code>

<code>kernel </code><code>/vmlinuz-2</code><code>.6.32-696.el6.x86_64 root=UUID=8dea6d66-5374-4f21-9388-6b721be4fd80 init=</code><code>/bin/bash</code> <code>selinux=0</code>

<code>initrd </code><code>/initramfs-2</code><code>.6.32-696.el6.x86_64.img</code>

<code>#第一行 0 表示默认选择第一个内核</code>

<code>#第二行 开机倒计时时间</code>

<code>#第三行 linux的名称,可以自己命名</code>

<code>#第四行 内核文件     root=XXX 写出自己的根所在的硬盘,UUID一般不会变</code>

<code>#如果写成/dev/sde2 ,当在新的系统中的时候就不一定是/dev/sde2,</code>

<code>#可能就是/dev/sda2,所以写UUID最可靠,第一个进程init 改为/bin/bash</code>

<code>#第五行 ramdisk</code>

        到此/boot 下的文件已全部生成

6、用脚本复制命令和命令所使用的库文件  

<code>#!/bin/bash</code>

<code># ---------------------------------------------------------------</code>

<code># Filename:     copycmd.sh</code>

<code># Revision:     1.0</code>

<code># Date:         2017-09-14</code>

<code># Author:       gm</code>

<code># Website:</code>

<code># Description:cope file </code>

<code># -------------------------------------------------------------</code>

<code>clear</code>

<code>#复制命令从操作</code>

<code>cp1(){</code>

<code>                </code><code>local</code> <code>order=`</code><code>which</code> <code>$1|</code><code>tail</code> <code>-n 1`</code>

<code>                </code><code>local</code> <code>dir</code><code>=`</code><code>dirname</code> <code>$order`</code>

<code>                </code><code>mkdir</code> <code>-p </code><code>/mnt/sysroot/</code><code>$</code><code>dir</code><code>&amp;&gt;</code><code>/dev/null</code>

<code>                </code><code>cp</code> <code>$order </code><code>/mnt/sysroot/</code><code>$</code><code>dir</code><code>&amp;&gt;</code><code>/dev/null</code>

<code>                </code><code>echo</code> <code>-n $order</code>

<code>                </code><code>echo</code>  <code>-e </code><code>"\033[1;32m     ------&gt;     \033[0m\c"</code>

<code>                </code><code>echo</code> <code>-n </code><code>"/mnt/sysroot"</code><code>$order</code>

<code>                </code><code>echo</code> <code>-e </code><code>"\033[1;32m            复制成功\033[0m"</code>

<code>                </code><code>}</code>

<code>#复制命令调用</code>

<code>cporder(){</code>

<code>                </code><code>if</code>  <code>cd</code> <code>/mnt/sysroot</code><code>&amp;&gt;</code><code>/dev/null</code><code>;</code><code>then</code>

<code>                        </code><code>cp1 $1</code>

<code>                </code><code>else</code>

<code>                        </code><code>mkdir</code> <code>/mnt/sysroot</code><code>&amp;&gt;</code><code>/dev/null</code>

<code>                </code><code>fi</code>

<code>        </code><code>}</code>

<code>#复制库文件</code>

<code>cplib(){</code>

<code>                </code><code>ldd $(</code><code>which</code> <code>$1|</code><code>tail</code> <code>-n1)|</code><code>egrep</code> <code>-o </code><code>"/.*/.*\.[0-9]+"</code><code>|</code><code>while</code> <code>read</code> <code>file</code><code>;</code><code>do</code>

<code>                </code><code>local</code> <code>dir</code><code>=`</code><code>dirname</code> <code>$</code><code>file</code> <code>` </code>

<code>                </code><code>cp</code> <code>$</code><code>file</code>  <code>/mnt/sysroot/</code><code>$</code><code>dir</code><code>&amp;&gt;</code><code>/dev/null</code>

<code>                </code><code>echo</code> <code>-n $</code><code>file</code>

<code>                </code><code>echo</code>  <code>-e </code><code>"\033[1;32m      ------&gt;     \033[0m\c"</code>

<code>                </code><code>echo</code> <code>-n </code><code>"/mnt/sysroot"</code><code>$</code><code>file</code>

<code>                 </code><code>echo</code> <code>-e </code><code>"\033[1;32m            复制成功\033[0m"</code>

<code>        </code> 

<code>        </code><code>done</code>    

<code>#提示信息</code>

<code>ec(){</code>

<code>        </code><code>echo</code> <code>'***************************************************************************</code>

<code>***************************************************************************</code>

<code>****************    请输入一个可执行的指令      ***************************</code>

<code>****************                                ***************************</code>

<code>****************    q 或quit   退出             ***************************</code>

<code>'</code>

<code>}</code>

<code>while</code> <code>true</code><code>;</code><code>do</code>

<code>        </code><code>ec</code>

<code>        </code><code>read</code> <code>-p </code><code>"请输入命令 : "</code> <code>ord</code>

<code>        </code><code>if</code> <code>[ -n $ord ];</code><code>then</code>

<code>                </code><code>case</code> <code>$ord </code><code>in</code>

<code>                </code><code>q|quit)</code>

<code>                        </code><code>exit</code>

<code>                        </code><code>;;</code>

<code>                </code><code>*)</code>

<code>                        </code><code>if</code> <code>which</code> <code>$ord&amp;&gt;</code><code>/dev/null</code> <code>;</code><code>then</code>

<code>                                </code><code>cporder $ord</code>

<code>                                </code><code>cplib $ord</code>

<code>                        </code><code>else</code> 

<code>                                </code><code>echo</code> <code>"没有这个命令存在或者是一个内部命令"</code>

<code>                        </code><code>fi</code>

<code>                </code><code>esac</code>

<code>        </code><code>fi</code>

<code>done</code>

    执行结果如下:

         复制命令:ls ,cp ,ping,insmod,ifconfig,ip,cat,vim,bash,hostname,reboot,lsmod ,rmmod,modprobe等

   想要自制的linux具有网络功能,需要复制网卡相关的文件

        locate e1000

          找到 /lib/modules-XXXX.e1000.ko

        cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib6

8、创建根下一级目录

    cd /mnt/sysroot

    mkdir{etc,bin,sbin,tmp,var,sys,proc,opt,home,root,boot,dev,mnt,media}        

    创建一个新的虚拟机,移除原来的硬盘,把刚刚创建的硬盘添加上,

        网络适配器 设置桥接模式

    开启虚拟机

    insmod  /lib64/e1000.ko

    ip a  a 172.17.100.100/16 dev eth0

    ip a 查看地址

    用另一台同网络的电脑ping 该地址,由于在bash下,所以,如果用这台主机ping的话,ctrl+c不会中断

本文转自 hawapple 51CTO博客,原文链接:http://blog.51cto.com/guanm/1968213

继续阅读