在前面的《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 ~]# yum groupinstall -y "Development tools" [root@station10 ~]# yum groupinstall -y "Desktop Platform Development" [root@station10 ~]# yum groupinstall -y "Server Platform Development"
================编译Linux kernel/提供bzImage================
1.解压kernel源码包
[root@station10 ~]# tar -xf linux-3.13.6.tar.xz -C /usr/src/ [root@station10 ~]# cd /usr/src/ [root@station10 src]# ln -sv linux-3.13.6 linux `linux‘ -> `linux-3.13.6‘ [root@station10 src]# cd linux [root@station10 linux]# make allnoconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf --allnoconfig Kconfig # # configuration written to .config # [root@station10 linux]# make menuconfig #→此命令执行后会会出现以下这些提示信息并马上会弹出一个Kernel配置界面出来 [root@station10 linux]# make menuconfig HOSTCC scripts/kconfig/lxdialog/checklist.o HOSTCC scripts/kconfig/lxdialog/inputbox.o HOSTCC scripts/kconfig/lxdialog/menubox.o HOSTCC scripts/kconfig/lxdialog/textbox.o HOSTCC scripts/kconfig/lxdialog/util.o HOSTCC scripts/kconfig/lxdialog/yesno.o HOSTCC scripts/kconfig/mconf.o HOSTLD scripts/kconfig/mconf scripts/kconfig/mconf Kconfig
通过该配置文件我选择了基本的一些功能(具体项请下载附件)
选定基本的项目后退出(系统提示会将选择的这些项目保存到该路径下的.config文件中)
2.cp该目录下的.config文件到/root/到/root目录下留作备份使
[root@station10 linux]# cp .config /root/config-3.13.6-x86_64
3.执行make bzImage,编译开始
经过漫长的等待,编译完成;将生成的内核文件拷贝至Target的boot分区(即/mnt/boot)
注意:在前一次的博文中我只做了两个分区作为Target的boot分区以及根分区,此次我将多分出一个区作为swap分区
[root@station10 linux]# cp arch/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 -xf busybox-1.22.1.tar.bz2 -C /usr/src/ [root@station10 ~]# cd /usr/src/busybox-1.22.1/ [root@station10 busybox-1.22.1]#
2.执行make menuconfig(与内核编译时相似,会出现一个配置界面)
由于它需要手动改变的项目很少,所以只需要按照以下步骤去做即可:
#Busybox Settings ---> ##General Configuration ---> ###[*] Build BusyBox as a static binary (no shared libs)
选择此项,是将该应用程序编译成静态二进制格式程序,这就意味着它所依赖的库文件不再以动态方式去链接,它也就没有库文件,因为在编译时直接就编译到自身了,这样就使得它的空间和性能得到很好的提升,故此这里选择该项.完成后退出
3.执行执行make
[root@station10 busybox-1.22.1]# make
OH! make命令执行过程中报错了...
原因:上面在编译busybox时选择了静态编译模式;而在静态编译程序时就会用到glibc-static这个程序包,所以安装上这个包即可顺利通过(包位置在第二张系统盘内)
[root@station10 busybox-1.22.1]# yum install -y glibc-static #再一次make [root@station10 busybox-1.22.1]# make #完成后make install
OK!编译完成后在当前目录的_install目录下就生成了一些文件
其中的三个目录中就提供包含了一个Linux系统应有的绝大多数常用命令
4.移植busybox应用程序
#将busybox应用程序文件copy至Target的根目录 [root@station10 busybox-1.22.1]# cp -a _install/* /mnt/sysroot/ [root@station10 busybox-1.22.1]# ls /mnt/sysroot/ bin linuxrc lost+found sbin usr #补全所需的其他目录 [root@station10 busybox-1.22.1]# mkdir -p etc/rc.d var/{log,run} root home lib64 dev proc sys boot mnt media tmp srv usr/lib64 [root@station10 busybox-1.22.1]# cd /mnt/sysroot/ [root@station10 sysroot]# ls bin boot dev etc home lib64 lost+found media mnt proc root sbin srv sys tmp usr var bin linuxrc lost+found sbin usr [root@station10 sysroot]# rm -rf linuxrc [root@station10 sysroot]# ls sbin/ acpid fbsplash halt insmod loadkmap mkfs.ext2 poweroff start-stop-daemon udhcpc adjtimex fdisk hdparm ip logread mkfs.minix raidautorun sulogin vconfig arp findfs hwclock ipaddr losetup mkfs.vfat reboot swapoff watchdog blkid freeramdisk ifconfig iplink lsmod mkswap rmmod swapon zcip blockdev fsck ifdown iproute makedevs modinfo route switch_root bootchartd fsck.minix ifenslave iprule mdev modprobe runlevel sysctl depmod fstrim ifup iptunnel mkdosfs nameif setconsole syslogd devmem getty init klogd mke2fs pivot_root slattach tunctl [root@station10 sysroot]#
5.配置grub.conf引导文件
[root@station10 sysroot]# vim ../boot/grub/grub.conf default=0 timeout=2 title Larry Linux (1.0) root (hd0,0) kernel /bzImage ro root=/dev/sda2 init=/sbin/init quiet [root@station10 sysroot]# sync
6.第一次尝试启动(Target的创建我在这里就不说了请看上次博文第9步)
启动时
启动后
ok,busybox应用程序现在已经安装完成,再进一步的去完它
====================为定制Linux创建所需文件====================
1.为init提供配置文件
(1)创建/etc/rc.sysinit文件
[root@station10 ~]# cd /mnt/sysroot/etc/ [root@station10 etc]# vim rc.d/rc.sysinit #!/bin/sh # #欢迎短语 echo -e "\tWelcome to \033[34mLarry\033[0m Linux" #判断、设置主机名 [ -r /etc/sysconfig/network ] && source /etc/sysconfig/network [ -z "$HOSTNAME" -o "$HOSTNAME" == "(none)" ] && HOSTNAME=localhost /bin/hostname $HOSTNAME #设置命令提示符 str=$"(Repair filesystem)" PS1="$str \# # "; export PS1 #挂载伪文件系统 mount -t proc proc /proc mount -t sysfs sysfs /sys mdev -s #虚拟终端所需目录 mkdir /dev/pts #在grub中根是只读的,将其重新挂载为读写 mount -o remount,rw / #设置IP,实现初始化系统时配置上IP地址 ifconfig lo 127.0.0.1 ifconfig eth0 172.16.41.200 mount -a [root@station10 etc]# chmod +x rc.d/rc.sysinit
(2)创建/etc/inittab文件,提供虚拟终端
[root@station10 etc]# vim inittab ::sysinit:/etc/rc.d/rc.sysinit ::respawn:/sbin/getty 19200 tty1 ::respawn:/sbin/getty 19200 tty2 ::respawn:/sbin/getty 19200 tty3 ::respawn:/sbin/getty 19200 tty4 ::respawn:/sbin/getty 19200 tty5 ::respawn:/sbin/getty 19200 tty6 ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r
2.为定制Linux系统提供passwd, group, shadow文件
#++++++++++++++++++++++++用户帐号文件++++++++++++++++++++++++ [root@station10 ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash [root@station10 ~]# head -1 /etc/passwd > /mnt/sysroot/etc/passwd [root@station10 ~]# tail -1 /etc/passwd guomaoqiu:x:500:500::/home/guomaoqiu:/bin/bash [root@station10 ~]# tail -1 /etc/passwd >> /mnt/sysroot/etc/passwd [root@station10 ~]# tail /mnt/sysroot/etc/passwd root:x:0:0:root:/root:/bin/bash guomaoqiu:x:500:500::/home/guomaoqiu:/bin/bash [root@station10 ~]# #++++++++++++++++++++++++用户组文件++++++++++++++++++++++++ [root@station10 ~]# head -1 /etc/group root:x:0: [root@station10 ~]# head -1 /etc/group > /mnt/sysroot/etc/group [root@station10 ~]# tail -1 /etc/group guomaoqiu:x:500: [root@station10 ~]# tail -1 /etc/group >> /mnt/sysroot/etc/group [root@station10 ~]# tail /mnt/sysroot/etc/group root:x:0: guomaoqiu:x:500: [root@station10 ~]# #++++++++++++++++++++++++用户密码文件++++++++++++++++++++++++ [root@station10 ~]# head -1 /etc/shadow root:$6$BjOvO9nU$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZlVpn7hmQjKHGX8fCOANfCXjUSyL31.:16161:0:99999:7::: [root@station10 ~]# head -1 /etc/shadow > /mnt/sysroot/etc/shadow [root@station10 ~]# tail -1 /etc/shadow guomaoqiu:$6$caU3ijAy$Mdb2bSG7km9mg4e5TwgJCkhnYMGcglXt4x90YBKwcLnq4Uw2iOBPBXIzvxY4Bz0Re3nBUYiAVaTlbnoqJEsHN/:16161:0:99999:7::: [root@station10 ~]# tail -1 /etc/shadow >> /mnt/sysroot/etc/shadow [root@station10 ~]# tail /mnt/sysroot/etc/shadow root:$6$BjOvO9nU$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZlVpn7hmQjKHGX8fCOANfCXjUSyL31.:16161:0:99999:7::: guomaoqiu:$6$caU3ijAy$Mdb2bSG7km9mg4e5TwgJCkhnYMGcglXt4x90YBKwcLnq4Uw2iOBPBXIzvxY4Bz0Re3nBUYiAVaTlbnoqJEsHN/:16161:0:99999:7::: [root@station10 ~]# #由于busybox对于sha512的加密没有很好的兼容性,所以这里才用md5的加密密码去替换即可 [root@station10 ~]# openssl passwd -1 #用openssl命令生成 Password: Verifying - Password: $1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0 [root@station10 ~]# vim /mnt/sysroot/etc/shadow root:$1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0:16161:0:99999:7::: guomaoqiu:$1$44JNhWzY$dvFrjxxOHgdA7O2Rz9c0Z0:16161:0:99999:7::: [root@station10 ~]# chmod 400 /mnt/sysroot/etc/shadow
3.为定制版Linux定义主机名文件
[root@station10 etc]# mkdir sysconfig [root@station10 etc]# vim sysconfig/network HOSTNAME=statino20.example.com [root@station10 etc]#
4.为定制版Linux定义banner
[root@station10 etc]# vim issue Larry Linux Kernel \r on an \m [root@station10 etc]#
Ok!现在我尝试启动一下,
还是老规矩啦,挂起宿主机,开启Target
Picture-1(登录界面)
Picture-2(登录后)
Picture-3(网络信息)
Picture-4(普通用户登录尝试)
OK! 至此一个定制版的Linux系统已经差不多搭建完成
接下来的内容我将完成从宿主机上面移植两个应用程序到Target的实验;有兴趣的请关注下篇博客!
本文出自 “一叶知秋” 博客,请务必保留此出处http://maoqiu.blog.51cto.com/8570467/1390908
Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(二),布布扣,bubuko.com