手动自制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-01
下一篇 2016-05-03

相关推荐

  • 文件的权限、扩展属性以及facl

    大纲: 一、前言 二、普通权限 三、特殊权限 四、ext文件的扩展属性 五、文件的访问控制列表(facl) 一、前言 linux中常见的权限有读(r)、写(w)、执行(x),还有3个特殊的权限。因此下面就从普通权限开始介绍起 二、普通权限 rwx:读 写 执行 rwxr-xr-x : 读写执行 读_执行 读_执行  (分别对应)属主 属组…

    Linux干货 2015-05-04
  • linux正则表达式和vim的详细解析!

    正则表达式: 元字符– [:upper:] 大写 [:lower:] 小写 [:digit:] 全数字 [:alpha:] 全字母 [:alnum:] 全字母数字 匹配次数– . 匹配任意单个字符 * 匹配前面字符任意次 \? 匹配前面字符0次或1次 \{n\} 匹配至少n次 \{m,m\} 匹配至少m次 最多n次 \{,n\} 匹配…

    Linux干货 2017-04-09
  • 通过Xshell 5连接VirtualBox的centos

    环境:VirtualBox  centos6.5 1、使用VirtualBox Host-Only Network模式 2、打开宽带连接,设置属性,选择VirtualBox Host-Only Network共享。(在这里虚拟机centos的IP地址是自动获得,并且可以上网。) 3、虚拟机centos需要     关闭防火墙 :…

    Linux干货 2015-11-07
  • N26-博客作业-week15

    1、总结sed和awk的详细用法 sed: 语法结构 sed [OPTION]…’script’ [input-file]…[action] -r:支持扩展正则表达式 -n:不输出模式空间中的内容至屏幕 -e script1 -e script2 -e script3:指定多脚本运行 -f /path/to/script_file:从指定的文件中读取…

    Linux干货 2017-07-14
  • 实验:配额、RAID、LVM

    实验:在centos7实现光盘yum源 1yum install autofs 2现在启动systemctl start autofs 3开机启动systemctl enable autofs 4 cat /etc/yum.repos.d/base.repo[centos7]name=centos7 repobaseurl=file:///misc/cdgp…

    Linux干货 2017-04-25
  • 正则表达式

    1、用正则表达式表示IP地址 扩展正表达式表示的: (\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\> 2、用正则表达式表示手机号 "^1[3578…

    Linux干货 2016-08-07

评论列表(2条)

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

    是在centos6.5环境下吗?

    • frameboy
      frameboy 2016-05-04 16:00

      @n18-judecentos 6.7