手动自制Mini Linux

    linux系统内核非常的精简,而且基于一切皆文件的思想,使得我们可以再现有系统上挂载一个空硬盘,利用现有系统编译一个内核和相关程序文件并拷贝到空硬盘上。我们就可以用空硬盘来单独运行一个精简的linux系统,这对于依赖于注册表的windows系统来说是不可能实现的。本文简要介绍一下一个mini linux的安装制作过程

实现的基本换进:vmware workstation

实现的基本思想:kernel+busybox

软件包:kernel www.kernel.org        busybox www.busybox.net

      一、基本实现

        1、在现有系统上添加一块独立硬盘,以便装载mini linux

                        fdisk /dev/sdc

                        mke2fs -t ext4 /dev/sdc1

                        mke2fs -t ext4 /dev/sdc2

                         mkdir /mnt/{boot,fsroot}

                         mount /dev/sdc1 /mnt/boot

                        mount /dev/sdc2 /mnt/fsroot

         2、下载kernel/usr/src并解压包tar xf linux-4.5.2.tar.xz

                   3、make allnoconfig  先生成一个纯净的.config

            可能出错情况说明

                            [root@node1 linux]# make allnoconfig

                            make: Warning: File `arch/x86/Makefile' has modification time 2.7e+06 s in the future

                            make[1]: Warning: File `scripts/Makefile.host' has modification time 2.7e+06 s in the future

            这个是由于系统时间不对引起  date -s设置系统时间 或者使用ntpdate同步系统时间 netdate ntpserver

                     4、make menuconfig配置需要的编译项目

            可能出错情况说明

                            [root@node1 linux]# make menuconfig

                            scripts/kconfig/lxdialog/dialog.h:38:20: error: curses.h: No such file or directory

                            In file included from scripts/kconfig/mconf.c:23:

            这个是由于ncurses-devel模块,yum安装一下,ncurses提供字符终端处理库,包括面板和菜单。

                     5、选择基础的需要的配置项目:

                由于要在现有平台直接移植一些功能,所以基础平台需要选择一样的:

                64-bit kernel

    手动自制Mini Linux

                            cpu 类型

手动自制Mini Linux

手动自制Mini Linux

 

                支持多核心

手动自制Mini Linux

 

                支持pci

手动自制Mini Linux

 

 

                硬盘驱动编入:

手动自制Mini Linux

 

手动自制Mini Linux

                fusion mptscsi的中层驱动,等于是通讯层驱动,还要选择物理层驱动:

                scsi device support—scsi device support scsi disk support

手动自制Mini Linux

            输入设备驱动选择:

手动自制Mini Linux

 

            6、基础的功能都选择完毕,可以先编译一次看看:

                            make -j 4 bzImage  —-只编译内核

            编译完成后,会显示编译好的内核的大小和路劲

手动自制Mini Linux

 

            7、安装grub,以便新系统启动引导:

                                gurb-install –root-directory=/mnt /dev/sdc

手动自制Mini Linux

                编辑grub配置文件:

                                    vim /mnt/boot/grub/grub.conf

手动自制Mini Linux

              8、将编译好的文件拷贝到boot

手动自制Mini Linux

 

 

    至此,最基本的配置及文件准备完成,我们用此硬盘作为一个新虚拟机的硬盘启动系统,会发现如下提示:

手动自制Mini Linux

可以看到,虽然硬盘被识别,但是文件系统并未被识别驱动,为此我们需要选择内核支持的文件系统并重新编译。

 

            9、在file system中选择需要加载的文件系统的格式:

手动自制Mini Linux

 

            同时,选择支持的可执行程序的格式,因为我们加载文件系统,就需要运行上面的程序

手动自制Mini Linux

 

                10、编译完成后我们重新启动新的主机,发现文件系统可以识别了,但是没有init程序,系统还是无法正常启动。

手动自制Mini Linux

            我们可以查看/usr/src/linux2/init/main.c中查看系统默认启动时查找应用程序顺序:

手动自制Mini Linux

            我们还是先移一个bashsysroot中,以便启动系统。

            对于一个根文件系统,我们先创建基本的目录

手动自制Mini Linux

            下面我们要复制程序,复制程序除了复制程序本身,还要复制程序文件所依赖的库文件,我们需要建立一个脚本,以实现程序的复制

                        vim cpcmd.sh

手动自制Mini Linux

 

            通过此脚本将bashls拷贝到/mnt/sysroot,可以通过chroot来测试一下

手动自制Mini Linux

 

         此时bash已经拷贝完成,我们编辑一下/mnt/boot/grub/grub.conf,明确告诉系统init程序

手动自制Mini Linux

            再启动新主机,会发现系统已经可以运转

手动自制Mini Linux

     到此,我们实现了一个简单的MINI LINUX。

 

 

二、下面我们将演示如何使用busybox构建。 

BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如lscatecho等等,还包含了一些更大、更复杂的工具,例grepfindmount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell

 

为了方便我们拷贝使用,我们采用静态编译的方式编译busybox,而不是采用共享库方式。

要实现静态编译,我们要依赖于glibc库中的glibc-static支持,首先需要安装glibc-static

手动自制Mini Linux

busybox的编译方法和内核的编译方法类似,可以采用make menuconfig配置编译选项

手动自制Mini Linux

Busybox Settings-build options中选择采用静态编译方式:

手动自制Mini Linux

busybox settings-installation options中可以选择采用什么样的链接安装,默认采用软链接方式

手动自制Mini Linux

执行make && make install,默认安装在当前目录的_install目录下。

清空原有的/mnt/sysroot目录

拷贝安装后的busybox/mnt/sysroot/目录中

cp -a _install/*  /mnt/sysroot/

手动自制Mini Linux

可以看到,ash已经可以运行

修改grubconf文件:

手动自制Mini Linux

由于目前sysroot目录下只有binsbinusr目录,我们再创建相关目录补全(少了boot

手动自制Mini Linux

目前系统依赖于init,所以我们需要编辑inittab,告知系统如何初始化:

vim /mnt/sysroot/etc/inittab

手动自制Mini Linux

第一项:说明系统初始化脚本

第二项:说明控制台

第三项:说明重启

第四项:说明关机时卸载所有挂载文件

 

再创建rc.sysinit脚本

mkdir /mnt/sysroot/etc/rc.d

vim /mnt/sysroot/etc/rc.d/rc.sysinit

手动自制Mini Linux

 

chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit

至此,我们可以尝试启动新的mini linux

(注意,如果系统提示没有/dev/console文件,则编译内核需要选择:

device drivers–Generic device option中自动装在devtmpfsdev目录

                                              手动自制Mini Linux 

 

三、我们对上述的简单的Mini Linux做相应的补充:

1、创建fstab文件以开机自动挂载文件系统:

            vim etc/fstab

 

手动自制Mini Linux

 

2、rc.sysinit中指明执行mount -amount  -a就是挂载fstab文件中所有的文件)

手动自制Mini Linux

3、启动时候我们只是采用了控制台console,我们可以使用虚拟终端,编辑inittab文件:

手动自制Mini Linux

 

完成以上几步后我们再启动Mini Linux,可以看到我们可以通过ctrl+alt+F123里切换中断了。

同时可以看到开机要求的挂载的系统也都已经自动挂载上

 

4、我们用模块方式加载网卡的驱动:

lspci 查看网卡类型

手动自制Mini Linux

 

我们要重新编译内核,首先编译网络支持模块打开网络功能

networking support–networking options中:

手动自制Mini Linux

 

在编译网卡驱动:

手动自制Mini Linux

 

上面我们是将网卡编译进了内核,那么我们如何用模块编译呢?

    修改内核编译配置 ethernet driver support

手动自制Mini Linux

此时我们对内核编译就拆除了对网卡驱动的支持

我们对单独的网卡驱动模块编译:

网卡模块所在位置:由于我们之前编译进内核过,所以现在只有.O的文件,一般来说都是.c的文件:

手动自制Mini Linux

单独编译内核模块:

make M=path/to/somedir/

#make M=drivers/net/ethernet/intel/e1000/

手动自制Mini Linux

然后将编译好的ko文件拷贝到/mnt/sysroot/lib/modules目录下:

手动自制Mini Linux

完成后我们进入Mini Linux中会发现网卡已经没有了,需要手动装在网卡模块

手动自制Mini Linux

如果要自动装在,需要写脚本自动扫描所有硬件并安装合适的驱动。

简单一点我们可以在rc.sysinit中用命令实现开机自动装载

 

 

5、我们还可以为系统创建登录

    创建passwdgroupshadow文件:

         手动自制Mini Linux

    chrootminilinux中采用useradd添加root,并对文件作相应修改

         手动自制Mini Linux

         vim etc/passwd

手动自制Mini Linux

    vim etc/group

手动自制Mini Linux

 

    将目前系统的root密码传递过来

手动自制Mini Linux

    修改inittab文件

手动自制Mini Linux

以上配置即可

 

6、配置为minilinux提供ssh服务支持

vim etc/issue—显示ssh登录的提示

手动自制Mini Linux

        编译安装dropbear

                tar xf dropbear-2016.72.tar.bz2

                cd dropbear-2016.72

                ./configure(需要openssl-devel包支持)

                make && make install

        使用命令复制脚本将dropbeardropbearkeydbclient

 

手动自制Mini Linux

手动自制Mini Linux

    为目标系统的dropbear生成密钥文件

手动自制Mini Linux

            注意:key文件放的位置可以查看options.h获得(在编译路径下)

 

    通过远程ssh登录时,登陆者使用的shell必须为安全shell,在etc/shells文件中定义:

手动自制Mini Linux

 

    系统上nsswitch服务支持(dropbear在登录认证是需要将用户名转换成对应的用户id号)

            vim etc/nsswitch.conf

手动自制Mini Linux

            将相关的库文件拷贝到对应目录下

手动自制Mini Linux

 

            注意:可以将passwd文件中用户最后对应的shell修改为该用户想启用的shell

 

            编辑/root/.bash_profile(只争对bash有效)

手动自制Mini Linux

 

                创建/vra/run目录 (创建pid file需要)

                启动dropbear dropbear -E -F

                发现dropbear已经可以正常启动(注:新版本dropbear禁止使用root登录)

 

以上就是mini linux制作的全部内容,可以加深对于linux操作系统的理解。

 

 

 

 

原创文章,作者:frameboy,如若转载,请注明出处:http://www.178linux.com/15814

(0)
frameboyframeboy
上一篇 2016-05-03 09:28
下一篇 2016-05-03 09:28

相关推荐

  • mysql.主从复制.读写分离.高可用.集群实战

    架构图如下: 1.按照架构图所示,准备机器,做好时间同步,主机名解析 192.168.42.150 node1 [proxySQL keepalived]192.168.42.151 node2 [proxySQL keepalived]192.168.42.152 node3 [mysql-master wha]192.168.42.153 node4 […

    Linux干货 2017-07-14
  • 马哥教育网络班22期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 &> /dev/null [root@localhost ~]# chmod -R go= /home/tus…

    Linux干货 2016-09-07
  • grep,egrp,fgrep 命令与正则表达式

    一 简介     grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep…

    Linux干货 2016-01-19
  • 马哥教育网络班21期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash  declare -i loginable=0 declare -i unloginable=0  &n…

    Linux干货 2016-09-07
  • 推荐-Corosync + Pacemaker 搭建高可用Httpd服务

    Corosync + Pacemaker 搭建高可用Httpd服务 实验描述 1.两个测试节点,分别为node5.redhat.com和node6.redhat.com地址分别为172.16.100.5和172.16.100.62.集群服务为httpd,利用nfs做共享存储,NFS地址为172.16.0.254,NFS已经共享出了一个/www/htdocs目…

    系统运维 2016-04-05
  • 一位老it工程师的忠告,新手进来学习,老手进来体会,收获很大。

    诸位,咱当电子工程师也是十余年了,不算有出息,环顾四面,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强! [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐…

    Linux干货 2015-02-26

评论列表(2条)

  • n18-jude
    n18-jude 2016-05-04 15:37

    是在centos6.5环境下吗?

    • frameboy
      frameboy 2016-05-04 16:00

      @n18-judecentos 6.7