自制Linux

简介:

步 骤:

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

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

3、格式化为ext4文件系统

4、挂载/boot 和/

5、生成/boot 下文件

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

7、复制网卡设备到/

8、创建根下目录

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

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


具体实现如下:

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

  (1)点击右键设置     

    wKioL1nHUubyhORQAABWuHPijhk551.png

    wKioL1nHUuajOo1bAACMf5xn26Q093.png

    wKiom1nHUyCSmDB5AAAu_ocPV0I920.png

    wKiom1nHU4PzSq-mAAA5iRqMfoU572.png

    wKioL1nHUubRA_g3AABFQB4ixfE084.png

    wKiom1nHU_yRjEV1AAAGwsCANqU409.png

    建议:该块磁盘单独放在一个地方,命名方式尽量自己手动写,手动命名需要在后面主动加上后缀.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分区

    wKiom1nHVfajZl3vAAATMgNB_0w237.png

   分区   

    wKiom1nHWJfA1R7vAADAM-ZHLi4002.png

    wKioL1nHWF3Tx8KiAABjQ9GYdNg397.png

    lsblk查看分区

    wKiom1nHWJew_gYDAAASb8BqDCw946.png

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 查看挂载情况

    wKioL1nHWwKzKCx1AAAc26jn4wo705.png

5、生成/boot下文件

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

    进入当前linux的/boot下 wKioL1nHXBfDHFzRAAAjNdMjgMc907.png

    那么新建的硬盘的/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文件 wKiom1nHYdnRRgqbAAAYrwoKlUQ464.png

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

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

vim  /mnt/boot/grub/grub.conf      

1
2
3
4
5
6
7
8
9
10
11
12
13
14
default=0
timeout=5
title linux-mini
kernel  /vmlinuz-2 .6.32-696.el6.x86_64 root=UUID=8dea6d66-5374-4f21-9388-6b721be4fd80 init= /bin/bash  selinux=0
initrd  /initramfs-2 .6.32-696.el6.x86_64.img
 
 
#第一行 0 表示默认选择第一个内核
#第二行 开机倒计时时间
#第三行 linux的名称,可以自己命名
#第四行 内核文件     root=XXX 写出自己的根所在的硬盘,UUID一般不会变
#如果写成/dev/sde2 ,当在新的系统中的时候就不一定是/dev/sde2,
#可能就是/dev/sda2,所以写UUID最可靠,第一个进程init 改为/bin/bash
#第五行 ramdisk

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash
# ---------------------------------------------------------------
# Filename:     copycmd.sh
# Revision:     1.0
# Date:         2017-09-14
# Author:       gm
# Website:
# Description:cope file 
# -------------------------------------------------------------
clear
#复制命令从操作
cp1(){
                 local  order=` which  $1| tail  -n 1`
                 local  dir =` dirname  $order`
                 mkdir  -p  /mnt/sysroot/ $ dir &> /dev/null
                 cp  $order  /mnt/sysroot/ $ dir &> /dev/null
                 echo  -n $order
                 echo   -e  "\033[1;32m     ------>     \033[0m\c"
                 echo  -n  "/mnt/sysroot" $order
                 echo  -e  "\033[1;32m            复制成功\033[0m"
                 }
#复制命令调用
cporder(){
                 if   cd  /mnt/sysroot &> /dev/null ; then
                         cp1 $1
                 else
                         mkdir  /mnt/sysroot &> /dev/null
                         cp1 $1
                 fi
         }
#复制库文件
cplib(){
                 ldd $( which  $1| tail  -n1)| egrep  -o  "/.*/.*\.[0-9]+" | while  read  file ; do
                 local  dir =` dirname  $ file 
                 mkdir  -p  /mnt/sysroot/ $ dir &> /dev/null
                 cp  $ file   /mnt/sysroot/ $ dir &> /dev/null
                 echo  -n $ file
                 echo   -e  "\033[1;32m      ------>     \033[0m\c"
                 echo  -n  "/mnt/sysroot" $ file
                  echo  -e  "\033[1;32m            复制成功\033[0m"
         
         
         
         done    
         }
#提示信息
ec(){
         echo  '***************************************************************************
***************************************************************************
****************    请输入一个可执行的指令      ***************************
****************                                ***************************
****************                                ***************************
****************                                ***************************
****************    q 或quit   退出             ***************************
***************************************************************************
***************************************************************************
'
}
 
 
while  true ; do
         ec
         read  -p  "请输入命令 : "  ord
         if  [ -n $ord ]; then
 
                 case  $ord  in
                 q|quit)
                         exit
                         ;;
                 *)
                         if  which  $ord&> /dev/null  ; then
                                 cporder $ord
                                 cplib $ord
                         else 
                                 echo  "没有这个命令存在或者是一个内部命令"
 
                         fi
                         ;;
                 esac
         fi
done

    执行结果如下:

        wKiom1nHZ9jhQLiCAACupHYHGxM066.png

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

7、复制网卡设备到/

   想要自制的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}        

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

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

    wKiom1nHa4OxDYTlAAAsGoYSr54526.png

    wKiom1nHa8yjFvnFAABECnkQiR4680.png

        网络适配器 设置桥接模式

    开启虚拟机

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

    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


相关文章
|
4月前
|
Linux KVM 云计算
云计算|OpenStack|社区版OpenStack安装部署文档(十三--- 自制镜像---Linux和Windows镜像)
云计算|OpenStack|社区版OpenStack安装部署文档(十三--- 自制镜像---Linux和Windows镜像)
77 0
|
应用服务中间件 Linux Shell
|
机器学习/深度学习 Linux Shell
自制Linux 终端 锁屏防窃助手
很多时候我们不能一直守护在自己的电脑旁边,而且有些文件并不想让别人知道。那么这时候来个锁屏,是再合适不过的了。今天分享一个自制的锁屏工具,如下。 准备 操作系统 : 我这里是ElementaryOS虚拟机 + XShell 远程登录工具 Shell语言 : 我使用的是默认的Bash Shell 其他小工具 : fortune:系统随机的从语库中选出一句英文成语。
1174 0