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 ~]# 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

wKiom1M64rHSOP51AAPckgCCUwU825.jpg

通過該配置文件我選擇了基本的一些功能(具體項請下載附件)

選定基本的項目後退出(系統提示會將選擇的這些項目保存到該路徑下的.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(與內核編譯時相似,會出現一個配置界面)

wKioL1M6-fuRf4xjAANvwZrpZYc350.jpg

由於它需要手動改變的項目很少,所以只需要按照以下步驟去做即可:

#Busybox Settings  --->
##General Configuration  --->
###[*] Build BusyBox as a static binary (no shared libs)

選擇此項,是將該應用程序編譯成靜態二進制格式程序,這就意味着它所依賴的庫文件不再以動態方式去鏈接,它也就沒有庫文件,因爲在編譯時直接就編譯到自身了,這樣就使得它的空間和性能得到很好的提升,故此這裏選擇該項.完成後退出

3.執行執行make

[root@station10 busybox-1.22.1]# make

OH! make命令執行過程中報錯了...

wKiom1M7AT3wxl3-AACiaDouDkY118.jpg

原因:上面在編譯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目錄下就生成了一些文件

wKioL1M9Y2-yVrjFAACZdUaCcZ8363.jpg

其中的三個目錄中就提供包含了一個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步)

啓動時

wKiom1M9a43jGClyAAFObBpcEzE119.jpg

啓動後

wKioL1M9awCzHSRqAANys1k6xJE673.jpg

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(登錄界面)

wKiom1M9k6iQl7xIAAELvES-5Z0036.jpg

Picture-2(登錄後)

wKiom1M9lUXDSTVIAADbNSYznWw675.jpg

Picture-3(網絡信息)

wKiom1M9lm3Qw7TIAALxI2Pt1q8014.jpg

Picture-4(普通用戶登錄嘗試)

wKiom1M9mJyA607jAADv2YuLnyo127.jpg

OK! 至此一個定製版的Linux系統已經差不多搭建完成

接下來的內容我將完成從宿主機上面移植兩個應用程序到Target的實驗;有興趣的請關注下篇博客!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章