Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(

在前面的《Linux系统-小倒腾之Linux DIY定制裁剪(附带简单网络功能)o_o(一)》博文中,我通过对一个Linux系统的裁剪,最终制作出来了一个带有网络功能的微型Linux系统;其实它就是由一个Kernel+根文件系统+外围的一些模块组成,将他们拼凑在一起而已,所以这些并不算什么高大上的事情,最终没目的还是为了更加了解Linux!所以大家看标题应该知道,本文将会再次对Linux进行裁剪,并实现nginx与dropbear这两个应用服务在我裁剪的Linux上面运行;下面我说一下实验的大概步骤(实验环境与上一次一样):

1.准备Target使用的磁盘

2.对磁盘分区格式化,并挂载

3.对Target磁盘安装grub程序

4.编译内核(选择一些必备的功能)提供bzImage

5.编译busybox应用程序(下面介绍)提供busybox应用程序

6. 为init提供配置文件

7.配置主机名和banner

8.基本测试

9.提供dropbear应用程序(另外一种SSH服务程序)

10.提供nginx应用程序

11.综合测试

以上是本文博客实验的大概步骤,其中前面的3步已经在《Linux系统-小倒腾之Linux DIY定制裁剪(附带简单网络功能)o_o(一)》中演示过了,再此我就不再贴出步骤啦,我直接从第4步开始;9-11步我将放在下篇博文中进行;如果各位看官有问题,请留言,Thanks!

前提条件:

以下实验中请提前安装好各开发包组,否则编译会报错!

[root@station10~]#yumgroupinstall-y"Developmenttools"[root@station10~]#yumgroupinstall-y"DesktopPlatformDevelopment"[root@station10~]#yumgroupinstall-y"ServerPlatformDevelopment"

================编译Linux kernel/提供bzImage================

1.解压kernel源码包

[root@station10~]#tar-xflinux-3.13.6.tar.xz-C/usr/src/[root@station10~]#cd/usr/src/[root@station10src]#ln-svlinux-3.13.6linux`linux'- `linux-3.13.6'[root@station10src]#cdlinux[root@station10linux]#makeallnoconfigHOSTCCscripts/basic/fixdepHOSTCCscripts/kconfig/conf.oSHIPPEDscripts/kconfig/zconf.tab.cSHIPPEDscripts/kconfig/zconf.lex.cSHIPPEDscripts/kconfig/zconf.hash.cHOSTCCscripts/kconfig/zconf.tab.oHOSTLDscripts/kconfig/confscripts/kconfig/conf--allnoconfigKconfig#configurationwrittento.config[root@station10linux]#makemenuconfig#→此命令执行后会会出现以下这些提示信息并马上会弹出一个Kernel配置界面出来[root@station10linux]#makemenuconfigHOSTCCscripts/kconfig/lxdialog/checklist.oHOSTCCscripts/kconfig/lxdialog/inputbox.oHOSTCCscripts/kconfig/lxdialog/menubox.oHOSTCCscripts/kconfig/lxdialog/textbox.oHOSTCCscripts/kconfig/lxdialog/util.oHOSTCCscripts/kconfig/lxdialog/yesno.oHOSTCCscripts/kconfig/mconf.oHOSTLDscripts/kconfig/mconfscripts/kconfig/mconfKconfig

通过该配置文件我选择了基本的一些功能(具体项请下载附件)

选定基本的项目后退出(系统提示会将选择的这些项目保存到该路径下的.config文件中)

2.cp该目录下的.config文件到/root/到/root目录下留作备份使

[root@station10linux]#cp.config/root/config-3.13.6-x86_64

3.执行make bzImage,编译开始

经过漫长的等待,编译完成;将生成的内核文件拷贝至Target的boot分区(即/mnt/boot)

注意:在前一次的博文中我只做了两个分区作为Target的boot分区以及根分区,此次我将多分出一个区作为swap分区

[root@station10linux]#cparch/x86_64/boot/bzImage/mnt/boot/

===============编译busybox应用程序提供busybox应用程序===============

什么是busybox?

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

BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。

下面就去动手操作一下吧

1.解压获取到的busybox压缩包

[root@station10~]#tar-xfbusybox-1.22.1.tar.bz2-C/usr/src/[root@station10~]#cd/usr/src/busybox-1.22.1/[root@station10busybox-1.22.1]#

2.执行make menuconfig(与内核编译时相似,会出现一个配置界面)

由于它需要手动改变的项目很少,所以只需要按照以下步骤去做即可:

#BusyboxSettings--- ##GeneralConfiguration--- ###[*]BuildBusyBoxasastaticbinary(nosharedlibs)

选择此项,是将该应用程序编译成静态二进制格式程序,这就意味着它所依赖的库文件不再以动态方式去链接,它也就没有库文件,因为在编译时直接就编译到自身了,这样就使得它的空间和性能得到很好的提升,故此这里选择该项.完成后退出

3.执行执行make

[root@station10busybox-1.22.1]#make

OH! make命令执行过程中报错了…

原因:上面在编译busybox时选择了静态编译模式;而在静态编译程序时就会用到glibc-static这个程序包,所以安装上这个包即可顺利通过(包位置在第二张系统盘内)

[root@station10busybox-1.22.1]#yuminstall-yglibc-static#再一次make[root@station10busybox-1.22.1]#make#完成后makeinstall

OK!编译完成后在当前目录的_install目录下就生成了一些文件

其中的三个目录中就提供包含了一个Linux系统应有的绝大多数常用命令

4.移植busybox应用程序

#将busybox应用程序文件copy至Target的根目录[root@station10busybox-1.22.1]#cp-a_install/*/mnt/sysroot/[root@station10busybox-1.22.1]#ls/mnt/sysroot/binlinuxrclost+foundsbinusr#补全所需的其他目录[root@station10busybox-1.22.1]#mkdir-petc/rc.dvar/{log,run}roothomelib64devprocsysbootmntmediatmpsrvusr/lib64[root@station10busybox-1.22.1]#cd/mnt/sysroot/[root@station10sysroot]#lsbinbootdevetchomelib64lost+foundmediamntprocrootsbinsrvsystmpusrvarbinlinuxrclost+foundsbinusr[root@station10sysroot]#rm-rflinuxrc[root@station10sysroot]#lssbin/acpidfbsplashhaltinsmodloadkmapmkfs.ext2poweroffstart-stop-daemonudhcpcadjtimexfdiskhdparmiplogreadmkfs.minixraidautorunsuloginvconfigarpfindfshwclockipaddrlosetupmkfs.vfatrebootswapoffwatchdogblkidfreeramdiskifconfigiplinklsmodmkswaprmmodswaponzcipblockdevfsckifdowniproutemakedevsmodinforouteswitch_rootbootchartdfsck.minixifenslaveiprulemdevmodproberunlevelsysctldepmodfstrimifupiptunnelmkdosfsnameifsetconsolesyslogddevmemgettyinitklogdmke2fspivot_rootslattachtunctl[root@station10sysroot]#

5.配置grub.conf引导文件

[root@station10sysroot]#vim../boot/grub/grub.confdefault=0timeout=2titleLarryLinux(1.0)root(hd0,0)kernel/bzImageroroot=/dev/sda2init=/sbin/initquiet[root@station10sysroot]#sync

6.第一次尝试启动(Target的创建我在这里就不说了请看上次博文第9步)

启动时

启动后

ok,busybox应用程序现在已经安装完成,再进一步的去完它

====================为定制Linux创建所需文件====================

1.为init提供配置文件

(1)创建/etc/rc.sysinit文件

[root@station10~]#cd/mnt/sysroot/etc/[root@station10etc]#vimrc.d/rc.sysinit#!/bin/sh#欢迎短语echo-e"\tWelcometo\033[34mLarry\033[0mLinux"#判断、设置主机名[-r/etc/sysconfig/network] source/etc/sysconfig/network[-z"$HOSTNAME"-o"$HOSTNAME"=="(none)"] HOSTNAME=localhost/bin/hostname$HOSTNAME#设置命令提示符str=$"(Repairfilesystem)"PS1="$str\##";exportPS1#挂载伪文件系统mount-tprocproc/procmount-tsysfssysfs/sysmdev-s#虚拟终端所需目录mkdir/dev/pts#在grub中根是只读的,将其重新挂载为读写mount-oremount,rw/#设置IP,实现初始化系统时配置上IP地址ifconfiglo127.0.0.1ifconfigeth0172.16.41.200mount-a[root@station10etc]#chmod+xrc.d/rc.sysinit

(2)创建/etc/inittab文件,提供虚拟终端

[root@station10etc]#viminittab::sysinit:/etc/rc.d/rc.sysinit::respawn:/sbin/getty19200tty1::respawn:/sbin/getty19200tty2::respawn:/sbin/getty19200tty3::respawn:/sbin/getty19200tty4::respawn:/sbin/getty19200tty5::respawn:/sbin/getty19200tty6::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount-a-r

2.为定制Linux系统提供passwd, group, shadow文件

#++++++++++++++++++++++++用户帐号文件++++++++++++++++++++++++[root@station10~]#head-1/etc/passwdroot:x:0:0:root:/root:/bin/bash[root@station10~]#head-1/etc/passwd /mnt/sysroot/etc/passwd[root@station10~]#tail-1/etc/passwdguomaoqiu:x:500:500::/home/guomaoqiu:/bin/bash[root@station10~]#tail-1/etc/passwd /mnt/sysroot/etc/passwd[root@station10~]#tail/mnt/sysroot/etc/passwdroot:x:0:0:root:/root:/bin/bashguomaoqiu:x:500:500::/home/guomaoqiu:/bin/bash[root@station10~]##++++++++++++++++++++++++用户组文件++++++++++++++++++++++++[root@station10~]#head-1/etc/grouproot:x:0:[root@station10~]#head-1/etc/group /mnt/sysroot/etc/group[root@station10~]#tail-1/etc/groupguomaoqiu:x:500:[root@station10~]#tail-1/etc/group /mnt/sysroot/etc/group[root@station10~]#tail/mnt/sysroot/etc/grouproot:x:0:guomaoqiu:x:500:[root@station10~]##++++++++++++++++++++++++用户密码文件++++++++++++++++++++++++[root@station10~]#head-1/etc/shadowroot:$6$BjOvO9nU$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZlVpn7hmQjKHGX8fCOANfCXjUSyL31.:16161:0:99999:7:::[root@station10~]#head-1/etc/shadow /mnt/sysroot/etc/shadow[root@station10~]#tail-1/etc/shadowguomaoqiu:$6$caU3ijAy$Mdb2bSG7km9mg4e5TwgJCkhnYMGcglXt4x90YBKwcLnq4Uw2iOBPBXIzvxY4Bz0Re3nBUYiAVaTlbnoqJEsHN/:16161:0:99999:7:::[root@station10~]#tail-1/etc/shadow /mnt/sysroot/etc/shadow[root@station10~]#tail/mnt/sysroot/etc/shadowroot:$6$BjOvO9nU$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZlVpn7hmQjKHGX8fCOANfCXjUSyL31.:16161:0:99999:7:::guomaoqiu:$6$caU3ijAy$Mdb2bSG7km9mg4e5TwgJCkhnYMGcglXt4x90YBKwcLnq4Uw2iOBPBXIzvxY4Bz0Re3nBUYiAVaTlbnoqJEsHN/:16161:0:99999:7:::[root@station10~]##由于busybox对于sha512的加密没有很好的兼容性,所以这里才用md5的加密密码去替换即可[root@station10~]#opensslpasswd-1#用openssl命令生成Password:Verifying-Password:$1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0[root@station10~]#vim/mnt/sysroot/etc/shadowroot:$1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0:16161:0:99999:7:::guomaoqiu:$1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0:16161:0:99999:7:::[root@station10~]#chmod400/mnt/sysroot/etc/shadow

3.为定制版Linux定义主机名文件

[root@station10etc]#mkdirsysconfig[root@station10etc]#vimsysconfig/networkHOSTNAME=statino20.example.com[root@station10etc]#

4.为定制版Linux定义banner

[root@station10etc]#vimissueLarryLinuxKernel\ronan\m[root@station10etc]#

Ok!现在我尝试启动一下,

还是老规矩啦,挂起宿主机,开启Target

Picture-1(登录界面)

Picture-2(登录后)

Picture-3(网络信息)

Picture-4(普通用户登录尝试)

OK! 至此一个定制版的Linux系统已经差不多搭建完成

接下来的内容我将完成从宿主机上面移植两个应用程序到Target的实验;有兴趣的请关注下篇博客!

附件:http://down.51cto.com/data/2364263

爱的力量大到可以使人忘记一切,却又小到连一粒嫉妒的沙石也不能容纳

Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(

相关文章:

你感兴趣的文章:

标签云: