自制linux系统

自制linux系统
  需要为虚拟机新增一个硬盘,作为自制linux系统的载体。也可以用U盘、移动硬盘或其他设备作为载体
实验步骤:

(1)为虚拟机新增一个大小为20G的硬盘
(2)给新增的磁盘分区,划分/boot、swap、/三个分区
比如,将第一个分区当作boot,大小为500M;第二个分区当作swap分区,大小为2G;第三个分区用作/,大小为10G。其余空间保留

fdisk /dev/sdd

blob.png

partx -a /dev/sdd

(3)为创建的三个分区创建对应的文件系统。

mkfs.ext4 /dev/sdd1
mkswap /dev/sdd2
mkfs.ext4 /dev/sdd3

blob.png

(4)在/mnt/下创建boot目录,将要使用为boot分区的磁盘分区挂载至该目录。

mkdir -p /mnt/grub/boot
mkdir -p /mnt/grub/sysroot

blob.png

boot挂载至/mnt/grub/boot
/挂载至/mnt/grub/sysroot

mount /dev/sdd1 /mnt/grub/boot/mount /dev/sdd3 /mnt/grub/sysroot

blob.png

(5)安装grub

grub-install --root-directory=/mnt/mount /dev/sdd

(6)拷贝vmlinuz、initramfs文件至/mnt/mount/boot
blob.png(7)创建grub配置文件

default=0
timeout=5title 
Zmingbo (Test)
    root (hd0,0)    
    kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bash    
    initrd /initramfs.img

blob.png

(8)创建根文件系统(rootfs)
为/mnt/sysroot (新增硬盘被当作根分区的分区)创建root、home、dev、sys、proc、mnt、etc、tmp、lib、lib64、src、media、boot、bin、sbin、usr目录
blob.png

(9)通过脚本,拷贝bash,cp,vim,cat,less等命令至/mnt/mount/sysroot/目录下对应的目录中
脚本如下:

#!/bin/bash
#写一个脚本,完成如下功能(使用函数)
#1、提示用户输入一个可执行命令
#2、获取这个命令所依赖的所有库文件
#3、复制命令至/mnt/mount/sysroot对应的目录中
#        解释:假设,如果复制的程序路径是/bin/cat,那么要将/bin/cat复制到/mnt/mount/sysroot/bin目录下
#        如果复制的是/usr/bin/useradd,那么就要将其复制到/mnt/mount/sysroot/usr/bin目录中
#4、复制各库文件至/mnt/mount/sysroot对应的目录中。要求同复制命令。
#

f_dir=/mnt/mount/sysroot
input_cmd() {
  
     while true;do
     read -p "Please enter an excutable command (quit to exit) :" cmd
         if [[ -z $cmd ]];then
             echo "None option,try again..."
             continue
         elif [[ $cmd == "quit" ]];then
             exit 0
         elif ! which --skip-alias $cmd &>/dev/null;then
             echo "No such command,please enter a correct command"
             continue
         else
             break
         fi
     done
  
}
  
cmd_lib_name() {
  
     cmd_path=`which --skip-alias $cmd`
     for path in $cmd_path;do
         cmd_lib_name=`ldd $path | grep -o -E '/[^[:space:]]+\>'`
     done
  
}
  
cp_cmd() {
  
     cmd_dir=`dirname $cmd_path`
     mkdir -p $f_dir$cmd_dir &>/dev/null
     cp $cmd_path $f_dir$cmd_path
  
}
  
cp_lib() {
  
     cmd_lib_name
     for i in $cmd_lib_name;do
         lib_dir=`dirname $i`
         mkdir -p $f_dir$lib_dir &>/dev/null
         cp $i $f_dir$i
     done
  
}
   
main () {
  
     while true;do
         input_cmd
         cmd_lib_name
         cp_cmd
         cp_lib
     done
  
}
 main

blob.png

查看对应目录下是否有相应的命令和库文件
blob.png

也可以拷贝其他需要用的命令及其依赖的库文件分别至对应的目录
blob.png

(10)创建/etc/fstab文件
blob.png

(11)chroot至该目录,查看是否可用
blob.png

测试,系统可以正常使用。
(12)查看自定义linux系统的磁盘存放路径,并关闭制作系统的虚拟机
blob.png

(13)创建一个新的虚拟系统,在选择磁盘时选择现有的虚拟磁盘,将自定义系统的磁盘存放路径加载至虚拟机的配置中
blob.png

blob.png

(14)启动虚拟机做测试。
blob.png

blob.png

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/46127

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-09-13
下一篇 2016-09-13

相关推荐

  • PHP SOCKET编程

    1. 预备知识        一直以来很少看到有多少人使用php的socket模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实php的socket模块可以做很多事情,包括做ftplist,http post提交,smtp提交,组包并进行特殊报文的交互(如smpp协议),whois查询。这些都是比较常见…

    Linux干货 2015-04-10
  • 关于shell脚本编程基础第三篇

                          关于shell脚本编程基础第三篇   本章主要内容:循环的特殊用法;while;for;select 循环与菜单       &nbsp…

    系统运维 2016-08-21
  • 马哥教育网络班22期+第5周课程练习

    1、显示当前系统上root、fedora或user1用户的默认shell;     cat /etc/passwd | grep -E '^(root|fedora|user1)\>' | awk -F …

    Linux干货 2016-10-17
  • 计算机组成及Linux入门知识

    计算机的基本组成: 存储器:     实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器:     负责数据的算术运算和逻辑运算即数据的加工处理 控制器:     负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问 输入设备:    实现计算程序和原始数据的输入 输出设备:    实现计算结果输出 组成的联系: 图一 图二 计算…

    Linux干货 2016-09-16
  • sed对比grep之理解

    sed对比grep之理解 很多时候回车按下,没有结果,或是报错。 检查发现都是低级错误,关键是习惯刚学完grep,有写习惯没改过来。 sed语法很重要。script语法写对了,就成功了一大半,剩下的就是正则表达式的问题了。 sed与grep的区别是 grep是个行过滤器,筛选符合条件的行。也可以只显示每行匹配到的文本(-o选项),不对文本进行编辑,只是显示查…

    Linux干货 2016-08-10
  • 第十七周作业

    1、结合图形描述LVS的工作原理; 工作方式: LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根…

    2017-05-27