在前面的《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 allnoconfigHOSTCC  scripts/basic/fixdepHOSTCC  scripts/kconfig/conf.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/zconf.lex.cSHIPPED scripts/kconfig/zconf.hash.cHOSTCC  scripts/kconfig/zconf.tab.oHOSTLD  scripts/kconfig/conf
scripts/kconfig/conf --allnoconfig Kconfig
#
# configuration written to .config
#
[root@station10 linux]# make menuconfig #→此命令执行后会会出现以下这些提示信息并马上会弹出一个Kernel配置界面出来
[root@station10 linux]# make menuconfigHOSTCC  scripts/kconfig/lxdialog/checklist.oHOSTCC  scripts/kconfig/lxdialog/inputbox.oHOSTCC  scripts/kconfig/lxdialog/menubox.oHOSTCC  scripts/kconfig/lxdialog/textbox.oHOSTCC  scripts/kconfig/lxdialog/util.oHOSTCC  scripts/kconfig/lxdialog/yesno.oHOSTCC  scripts/kconfig/mconf.oHOSTLD  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$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZl***7hmQjKHGX8fCOANfCXjUSyL31.: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$D8yuO9WIByQTEoKlUyFeCx9DWrkWNWzmHg4uUvarpE47nrHheJlOUNeZl***7hmQjKHGX8fCOANfCXjUSyL31.: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的实验;有兴趣的请关注下篇博客!

转载于:https://blog.51cto.com/maoqiu/1390908

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

  1. 安装win7后怎么装linux系统,小编教你如何使用u盘安装Linux系统

    第二步:u盘安装Linux 1,U盘插到要安装Linux的电脑上后,启动电脑,在启动时,一直按F2键,就能进入到主板的BIOS控制界面,按左右键移动到boot选项.然后按上下键到removeable ...

  2. linux系统有哪些版本 linux系统哪个版本好用

    l   inux最早由Linus Benedict Torvalds在1991年开始编写.在这之前,RichardStallman创建了Free SoftwareFoundation(FSF)组织以及 ...

  3. linux系统charp命令,操作系统 Linux系统

    Linux操作系统 预备知识(Operating System): 1.GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台. 2.操作系统:管理计算机硬件和软件资 ...

  4. 用u盘装linux系统分区怎么画,linux安装教程,U盘安装Linux详细步骤图解。

    linux是免费开源的系统,经过多年的发展linux在应用方面已经有了很大的提升,很多工作都可以在linux下完成~如果你想要学习linux或是在linux下工作,那么需要把电脑安装成linux,如何 ...

  5. php 登录 linux服务器,如何实现linux系统远程登录到linux服务器

    linux系统登录到远程linux服务器: 有多种不同的协议可供选择,也许SSH是"最好"的.SSH是secure shell的简写,意为"安全的shell". ...

  6. Linux系统磁状态检测,检测Linux硬件状态

    计算机系统是由软件系统和硬件系统共同组成的.检测硬件状态对于保障整个系统的稳定是非常重要的.不论操作系统是使用Linux.还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了.这里我们主要 ...

  7. git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...

    ## 总结 - 学会使用基本的git命令 管理源代码 - 学会去github创建仓库 并将代码上传到github的仓库 (有待完成 回家有网再push) - 了解本地的.git和服务器github的. ...

  8. 如何查看linux系统的存储空间大小,linux 如何查看硬盘大小,存储空间大小等系统信息及硬件信息...

    一.linux CPU大小 [root@idc ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpui ...

  9. linux设置sfq队列参数,Linux系统运维之Linux高级流量控制工具TC使用方法

    Linux系统运维之Linux高级流量控制工具TC使用方法 本文标签: 运维 流量劫持 Linux系统运维之Linux高级流量控制工具TC使用方法, 在做MHA测试的时候,有一个重要的环节就是测试MH ...

最新文章

  1. 给年轻程序员的几句话
  2. wxWidgets:显示 wxDebugReport 和相关类的最小示例
  3. 服务器站点解密出错,修改域超级管理员密码后站点复制出错。
  4. 数据结构与算法之选择排序
  5. 四维空间和五维空间N维空间遐想
  6. CLOUD信用管理设置
  7. IT网络通信大变革时代来临 2016中国极客大奖为您找到风向标
  8. 加州大学黑科技:激光使电子设备不再依赖半导体材料
  9. python怎样画动态文字_Python制作动态字符图的实例
  10. 北航|北京航空航天大学|介绍|简介
  11. 第29章:字符串编辑距离
  12. QTTabBar——Windows多功能标签软件
  13. JAVA:实现解析纯真IP数据库
  14. Net-speed 一键安装脚本
  15. 手机满信号无法连接服务器,手机信号满格却不能连接网络,为什么会出现这种状况?...
  16. NLP自然语言处理实战(一):利用分词器构建词汇表
  17. GPS 车辆导航定位的应用前景
  18. 语法最简单的微博通用爬虫weibo_crawler
  19. WRAP验厂咨询,WRAP认证证书是受到广泛认可的符合社会和道德标准的象征
  20. 【JavaSE】基础语法练习---减肥计划(流程控制)

热门文章

  1. 网络运维常见交换机故障
  2. 在windows系统安装nginx
  3. #9 shell脚本的函数运用
  4. 基于SaltStack完成LVS的配置管理
  5. 《数位板这样玩——Photoshop+Painter数码手绘必修课(第2版)》目录—导读
  6. PHP的类中的常量,静态变量的问题。
  7. 微信公众平台小程序(应用号)开始内测了
  8. 计算从1970年到现在累计的秒数
  9. Leetcode 58 之反向迭代器的使用
  10. 内存:DDR2与DDR