自制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 14:49
下一篇 2016-09-13 15:10

相关推荐

  • 硬链接和软链接的区别

    硬链接和软链接的区别 1、概念 在linux中,链接可分为两种:一种为硬链接,另一种为软链接。硬链接:ln 源文件 目标文件软链接:ln -s(soft)源文件 目标文件 硬链接 硬链接是指通过索引节点inode来进行链接。linux系统中每个文件对应一个inode,并且允许多个文件名指向用一个inode。这种情况的文件就成为硬链接。它的作用之一就是允许一个…

    Linux干货 2017-07-23
  • 缓存需知

    Edit Web缓存核心技术点需知 5.1 HTTP首部控制 5.2 基于新鲜度检测机制: 2.1 特征1:时间局部性 2.2 特征2:空间局部性 2.3 缓存的优点 2.4 哪类数据应该被缓存 2.5 哪类数据可缓存但不应该被缓存 2.6 缓存命中率决定缓存有效性 2.7 缓存数据生命周期 2.8 缓存处理步骤 2.9 缓存和普通数据读取的区别 1. 完整…

    Linux干货 2017-06-01
  • N25第三周总结

    linux   bassic The third week of blogging 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  ~]# who | cut -d' ' -f1 | uniqr…

    Linux干货 2016-12-17
  • 磁盘管理详解

    linux系统如何识别硬盘 硬盘类型:        按接口可划分为        并行             &nb…

    Linux干货 2016-08-29
  • PXE实践

    本篇只以记录个人部署pxe过程中所遇问题,至于原理,只做部分简单说明。 pxe部署必要软件: syslinux (用于提供引导中所必备文件) tftp(用于提供存放vmlinuz,initrd,syslinux.0等引导类文件) dhcp(用于自动获取IP包括指明去哪个主机获取syslinux.0文件) 最后还需要一个web或者ftp服务,已提供系统安装中所…

    Linux干货 2017-02-05