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
cpu 类型
支持多核心
支持pci
硬盘驱动编入:
fusion mpt是scsi的中层驱动,等于是通讯层驱动,还要选择物理层驱动:
scsi device support—scsi device support scsi disk support
输入设备驱动选择:
6、基础的功能都选择完毕,可以先编译一次看看:
make -j 4 bzImage —-只编译内核
编译完成后,会显示编译好的内核的大小和路劲
7、安装grub,以便新系统启动引导:
gurb-install –root-directory=/mnt /dev/sdc
编辑grub配置文件:
vim /mnt/boot/grub/grub.conf
8、将编译好的文件拷贝到boot中
至此,最基本的配置及文件准备完成,我们用此硬盘作为一个新虚拟机的硬盘启动系统,会发现如下提示:
可以看到,虽然硬盘被识别,但是文件系统并未被识别驱动,为此我们需要选择内核支持的文件系统并重新编译。
9、在file system中选择需要加载的文件系统的格式:
同时,选择支持的可执行程序的格式,因为我们加载文件系统,就需要运行上面的程序
10、编译完成后我们重新启动新的主机,发现文件系统可以识别了,但是没有init程序,系统还是无法正常启动。
我们可以查看/usr/src/linux2/init/main.c中查看系统默认启动时查找应用程序顺序:
我们还是先移一个bash到sysroot中,以便启动系统。
对于一个根文件系统,我们先创建基本的目录
下面我们要复制程序,复制程序除了复制程序本身,还要复制程序文件所依赖的库文件,我们需要建立一个脚本,以实现程序的复制
vim cpcmd.sh
通过此脚本将bash,ls拷贝到/mnt/sysroot,可以通过chroot来测试一下
此时bash已经拷贝完成,我们编辑一下/mnt/boot/grub/grub.conf,明确告诉系统init程序
再启动新主机,会发现系统已经可以运转
到此,我们实现了一个简单的MINI LINUX。
二、下面我们将演示如何使用busybox构建。
BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。
为了方便我们拷贝使用,我们采用静态编译的方式编译busybox,而不是采用共享库方式。
要实现静态编译,我们要依赖于glibc库中的glibc-static支持,首先需要安装glibc-static
busybox的编译方法和内核的编译方法类似,可以采用make menuconfig配置编译选项
在Busybox Settings-build options中选择采用静态编译方式:
busybox settings-installation options中可以选择采用什么样的链接安装,默认采用软链接方式
执行make && make install,默认安装在当前目录的_install目录下。
清空原有的/mnt/sysroot目录
拷贝安装后的busybox到/mnt/sysroot/目录中
cp -a _install/* /mnt/sysroot/
可以看到,ash已经可以运行
修改grub的conf文件:
由于目前sysroot目录下只有bin,sbin,usr目录,我们再创建相关目录补全(少了boot)
目前系统依赖于init,所以我们需要编辑inittab,告知系统如何初始化:
vim /mnt/sysroot/etc/inittab
第一项:说明系统初始化脚本
第二项:说明控制台
第三项:说明重启
第四项:说明关机时卸载所有挂载文件
再创建rc.sysinit脚本
mkdir /mnt/sysroot/etc/rc.d
vim /mnt/sysroot/etc/rc.d/rc.sysinit
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
至此,我们可以尝试启动新的mini linux
(注意,如果系统提示没有/dev/console文件,则编译内核需要选择:
device drivers–Generic device option中自动装在devtmpfs到dev目录
)
三、我们对上述的简单的Mini Linux做相应的补充:
1、创建fstab文件以开机自动挂载文件系统:
vim etc/fstab
2、在rc.sysinit中指明执行mount -a(mount -a就是挂载fstab文件中所有的文件)
3、启动时候我们只是采用了控制台console,我们可以使用虚拟终端,编辑inittab文件:
完成以上几步后我们再启动Mini Linux,可以看到我们可以通过ctrl+alt+F123里切换中断了。
同时可以看到开机要求的挂载的系统也都已经自动挂载上
4、我们用模块方式加载网卡的驱动:
lspci 查看网卡类型
我们要重新编译内核,首先编译网络支持模块打开网络功能
networking support–networking options中:
在编译网卡驱动:
上面我们是将网卡编译进了内核,那么我们如何用模块编译呢?
修改内核编译配置 ethernet driver support
此时我们对内核编译就拆除了对网卡驱动的支持
我们对单独的网卡驱动模块编译:
网卡模块所在位置:由于我们之前编译进内核过,所以现在只有.O的文件,一般来说都是.c的文件:
单独编译内核模块:
make M=path/to/somedir/
#make M=drivers/net/ethernet/intel/e1000/
然后将编译好的ko文件拷贝到/mnt/sysroot/lib/modules目录下:
完成后我们进入Mini Linux中会发现网卡已经没有了,需要手动装在网卡模块
如果要自动装在,需要写脚本自动扫描所有硬件并安装合适的驱动。
简单一点我们可以在rc.sysinit中用命令实现开机自动装载
5、我们还可以为系统创建登录
创建passwd,group,shadow文件:
chroot到minilinux中采用useradd添加root,并对文件作相应修改
vim etc/passwd
vim etc/group
将目前系统的root密码传递过来
修改inittab文件
以上配置即可
6、配置为minilinux提供ssh服务支持
vim etc/issue—显示ssh登录的提示
编译安装dropbear
tar xf dropbear-2016.72.tar.bz2
cd dropbear-2016.72
./configure(需要openssl-devel包支持)
make && make install
使用命令复制脚本将dropbear,dropbearkey,dbclient
为目标系统的dropbear生成密钥文件
注意:key文件放的位置可以查看options.h获得(在编译路径下)
通过远程ssh登录时,登陆者使用的shell必须为安全shell,在etc/shells文件中定义:
系统上nsswitch服务支持(dropbear在登录认证是需要将用户名转换成对应的用户id号)
vim etc/nsswitch.conf
将相关的库文件拷贝到对应目录下
注意:可以将passwd文件中用户最后对应的shell修改为该用户想启用的shell
编辑/root/.bash_profile(只争对bash有效)
创建/vra/run目录 (创建pid file需要)
启动dropbear :dropbear -E -F
发现dropbear已经可以正常启动(注:新版本dropbear禁止使用root登录)
以上就是mini linux制作的全部内容,可以加深对于linux操作系统的理解。
原创文章,作者:frameboy,如若转载,请注明出处:http://www.178linux.com/15814
评论列表(2条)
是在centos6.5环境下吗?
@n18-jude:centos 6.7