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

评论列表(2条)

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

    是在centos6.5环境下吗?

    • frameboy
      frameboy 2016-05-04 16:00

      @n18-judecentos 6.7