自制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

相关推荐

  • vim编辑器

    导读:      本章将主要介绍Linux中的一种常用文本编辑器vim,具体内容如下:       □使用vi和vim的三种主要模式       移动光标,进入插入模式       改变、删除、复制文本     &n…

    Linux干货 2016-08-15
  • ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能

    ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能 本文是继上一篇文章“CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}”的补充,上篇文章http://www.178linux.com/38812主要介绍了yum安装软件的方法以及归纳了详细的yum命令。本文继续介绍基于本地file、远程…

    Linux干货 2016-08-24
  • N22-妙手-第三周博客作业

    1、列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | uniq -c     &nb…

    Linux干货 2016-09-19
  • Linux进程查看及管理(2)

     Linux进程查看及管理的工具:pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup  vunt]] mstat命令: vmstat [options] [delay [co procs: r:…

    Linux干货 2015-09-28
  • zabbix监控Hadoop的实现

            Hadoop日常运行过程中一些参数需要进行实时监控,如:Map、Reduce任务数量,HDFS磁盘使用情况,namenode、datanode在线数量及健康情况,以便更好的掌握整个Hadoop集群架构的运行情况。         下面结合最近工作中的一些…

    Linux干货 2015-03-08
  • TCP 的那些事儿(上)

       TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另…

    Linux干货 2015-04-01