手動編譯內核+busybox+dropbear+nginx

我們需要先在宿主機上添加一個磁盤,然后,把這個磁盤做好分區和文件系統:

fdisk /dev/sdb

創建第一個分區:

n

p

1

+512M

創建第二個分區:

n

p

2

+10G

保存退出:

w

為分區提供文件系統:

kpartx /dev/sdb

為分區提供文件系統:

mke2fs -t ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb2

為他們在宿主機上提供目錄掛載:

mkdir /mnt/boot
mkdir /mnt/sysroot

把分區掛載上:

mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot

然后,我們需要提供內核了,這時,我需要把內核進行手工編譯,這個編譯只是基于虛擬機上的硬件,日后需要編譯,要根據自己主機的硬件情況進行選擇驅動和功能模塊:

tar xf linux-3.13.6.tar.xz -C /usr/src
cd /usr/src

為這個源碼做上軟連接:

ln -sv linux-3.13.6 linux
cd linux 
make allnoconfig(把內核編譯的大多選項去掉,剩下一些基本的選項)
make menuconfig

然后,我們會進入對內核的功能和驅動進行選擇:

(1)[*]64-bit kernel

(2)[*]Enable loadable module support

(3)-*-Eable the block layer

(4)Processsor type and features–>[*]Symmetric multi-processing support

                                                          [*]Multi-core scheduler support

                                                              Processor family(Core 2/newer Xeon)

(5)Bus options(PCI etc.)–>[*]PCI support

(6)Executable file formats / Emulations –> [*]Kernel support for ELF binaries

                                                                         [*]Write ELF core dumps with partial segments

                                                                        <*> Kernel support for scripts starting with #!

(7)-*-Networking support –> Networking options –> <*>Unix domain sockets (這個選項,我們過后啟動nginx需要)

                                                                                            [*] TCP/IP networking

(8)Device Drivers –> SCSI device support —>[*] SCSI device support

                                                                             [*] SCSI target support

                                                                             [*] SCSI disk support 

                                                                             [*] SCSI tape support

                                    Generic Driver Options –> [*] Maintain a devtmpfs filesystem to mount at /dev

                                                                                  [*] Automount devtmpfs at /dev,after the kernel mounted the rootfs

                                    [*]Fusion MPT device support –> <*> Fusion MPT ScsiHost drivers for SPI

                                                                                             <*> Fusion MPT ScsiHost drivers for FC 

                                                                                             <*> Fusion MPT ScsiHost drivers for SAS

                                    [*] Network devcie support —>  [*] Network core driver support 

                                                                                            [*]Ethernet driver support –> [*]Intel devcies

                                                                                                                                             <*> Intel(R) PRO/1000 Gigabit Ethernet support

                                                                                                                                             <*> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

                                         Input device support —>  [*] Mouse interface

                                                                                      [*]Keyboards

                                                                                      [*]mice

                                       [*]USB support —>  [*] Support for Host-side USB

                                                                         <*> EHCI HCD (USB 2.0) support

                                                                         <*> OHCI HCD (USB 1.1) support

                                                                          <*>OHCI support for PCI-bus USB controllers

(9)File systems –> <*> The Extended 4 (ext4) filesystem

                                [*] Use ext4 for ext2/ext3 file systems

這些選項弄好之后,退出并把這些選項設置保存下來!

編譯壓縮內核:

make -j 4

把編譯好的內核放到移植的boot目錄下

cp arch/x86_64/boot/bzImage /mnt/boot/

好了,我們開始進行把移植的主機生成bootloder和grub

grub-install --root-directory=/mnt/ /dev/sdb
cd /mnt/boot/grub/
vim grub.conf
timeout=5
defaults=0
title bwei linux 
            root (hd0,0)
            kernel /bzImage ro root=/dev/sda2 init=/sbin/init
:wq

為移植的系統提供需要的目錄:

cd /mnt/sysroot
mkdir -p bin  boot  dev  etc  home  lib64 media  mnt  proc  root  sbin  sys  usr

用busybox提供移植的系統init程序和個程序:

tar xf busybox-1.22.1.tar.bz2 -C /usr/src
cd /usr/src/busybox-1.22.1
make menuconfig
busybox settings --> Build Options --> [*]Bulid BusyBox as a static binary (no share libs)
然后我們保存設置選項!
make -j 4
make install

安裝完成之后,我們把_install/中sbin bin usr目錄和目錄下的文件都復制到需要移植的系統的目錄下:

cp _install/sbin /mnt/sysroot
cp _install /bin /mnt/sysroot
cp _install/usr /mnt/sysroot

提供/etc下的目錄:

mkdir /mnt/sysroot/etc/rc.d
mkdir /mnt/sysroot/etc/rc.start
mkdir /mnt/sysroot/etc/init.d

提供inittab文件:

cd /mnt/sysroot/
vim etc/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
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -r -a 
(getty終端程序會把login程序調用,然后,進行用戶名和密碼進行驗證)
:wq

提供/etc/profile給移植系統提供環境變量:

vim etc/profile 
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PS1='[\u@\h\W]\$'

:wq

給移植的系統掛載文件系統的配置文件:

vim etc/fstab
/dev/sda2       /       ext4    defaults        1 1
sysfs   /sys    sysfs   defaults        0 0
proc    /proc   proc    defaults        0 0
devpts  /dev/pts        devpts  defaults        0 0
/dev/sda1       /boot   ext4    defaults        0 0

:wq

為移植系統提供主機名:

mkdir etc/sysconfig
vim etc/sysconfig/network
HOSTNAME=www.bwei.com

提供系統初始化的腳本:

vim etc/init.d/rc.sysinit

#!/bin/bash
echo -e "\033[35mbwei linux\033[00m"
mount -n -o remount,rw /dev/sda2 /
mdev -s
mkdir /dev/pts
mount -a
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network
[ -z "$HOSTNAME" -o "$HOSTNAME" == '(none)' ] && hostname localhost
hostname $HOSTNAME
ifconfig eth0 172.16.100.2 netmask 255.255.255.0 up
ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
for i in /etc/rc.start/S*
do
        $i start
done
:wq

給登錄用戶提供passwd shadow group文件:

etc/passwd:
root:x:0:0:root:/root:/bin/bash
bwei:x:501:501:bwei:/home/bwei:/bin/bash
nginx:x:498:498:nginx:/home/nginx:/bin/bash
etc/shadow:
(里面的密碼加密是用這個命令寫的:openssl passwd -salt `openssl rand -hex 8` -1 bwei)
root:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
bwei:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
nginx:$1$15a442a4$.N192u6UQi6hAJDFC1RTp0:16674:0:99999:7:::
etc/group:
root:x:0:
bwei:x:501:
nginx:x:498:

由于login程序依賴于nsswitch庫文件,驗證用戶名,把庫文件復制一份到移植的系統上:

cp /lib64/libnss* lib64/
cp /usr/lib64/libnss* usr/lib64/

為用戶提供家目錄:

mkdir home/nginx
mkdir home/bwei

我們需要使用一個程序移植腳本:

cp.sh腳本:
#!/bin/bash
read -p 'plz input a bin name:' bin
binname=`which $bin`
bincp()
{
        [ ! -d /mnt/sysroot`dirname $binname` ] && mkdir -p /mnt/sysroot`dirname $binname`
        cp $binname /mnt/sysroot`dirname $binname`
}
libcp()
{
        for i in `ldd $binname | grep -o '/[^[:space:]]\{1,\}'`;do
        [ ! -d /mnt/sysroot`dirname $i` ] && mkdir /mnt/sysroot`dirname $i`
        cp $i /mnt/sysroot`dirname $i`
        done
}
while true
do
        bincp
        libcp
        read -p 'do you want to cp again:' bin
        if [ $bin == 'quit' -o $bin == 'q' ];then
        exit 0
        fi
done

我們用bash ~/cp.sh

             bash

我們把bash移植過去.


然后,我們遠程登錄時,還要提供安全shell的配置文件:

vim etc/shells
/bin/bash
/bin/sh

我們開始編譯和安裝dropbear:

tar xf ~/dropbear-2013.58.tar.bz2
cd dropbear-2013.58
./configure
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

好了,當dropbear編譯和安裝完成后,我們需要把他的生成的程序移植

使用上面的cp.sh的腳本來進行移植:

bash ~/cp.sh

dbclient

dropbearkey

dropbear

把上面三個程序都移植后,需要提供一個啟動dropbear的腳本:

vim /mnt/sysroot/etc/init.d/dropbear
#!/bin/bash
dbkeypath=/etc/dropbear
dsskey()
{
        [ ! -d $dbkeypath ] && mkdir $dbkeypath
        [ ! -f $dbkeypath/dropbear_dss_host_key ] && dropbearkey -t dss -f $dbkeypath/dropbear_dss_host_key
}
rsakey()
{
        [ ! -d $dbkeypath ] && mkdir $dbkeypath
        [ ! -f $dbkeypath/dropbear_rsa_host_key ] && dropbearkey -t rsa -s 2048 -f $dbkeypath/dropbear_rsa_host_key
}
start()
{
        dsskey
        rsakey
        pidof dropbear &> /dev/null
        if [ $? -eq 0 ];then
        echo "dropbear already start !!"
        else
        /usr/local/sbin/dropbear -p 22
        if [ $? -ne 0 ];then
        echo "dropbear start false !!"
        else
        echo "dropbear is starting !!"
        fi
        fi
}
stop()
{
        pidof dropbear &> /dev/null
        if [ $? -ne 0 ];then
        echo "dropbear alreay stop !!"
        esle
        killall dropbear
        if [ $? -ne 0 ];then
        echo "dropbear stop false !!"
        else
        echo "dropbear is stopping !!"
        fi
        fi
}
case "$1" in
"start")
        start
        ;;
"stop")
        stop
        ;;
"restart")
        stop
        start
        ;;
*)
        echo "plz input start|stop|restart"
esac
chmod +x /mnt/sysroot/init.d/dropbear
cd /mnt/sysroot/rc.start

為該腳本提供鏈接啟動文件:

ln -sv ../init.d/dropbear ./S01dropbear

我們再來實現編譯和安裝nginx:

groupadd -r nginx
useradd -r -g nginx nginx
tar xf nginx-1.6.1.tar.gz
cd nginx-1.6.1
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --without-prce --without-http_rewrite_module
make 
make install

我們安裝后,先在自己的機子上進行測試,成功后,才進行移植:

/usr/local/nginx/sbin/nginx
netstat -tnlp
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1681/nginx

我們看到這個記錄,證明我們的nginx成功開啟了,我們移植開始:

cp -a /usr/local/nginx /mnt/sysroot/usr/local

最后,我們可以為其提供腳本啟動的,這個腳本只要修改一下上面的dropbear腳本就可以了!


我們還可以對我們的做好的目錄一個備份,以免我們的我們的磁盤壞了,到時我們之前做的都沒有了:

cd /mnt/sysroot/
find . | cpio -H newc -o | gzip -9 -n > /root/sysroot.gz

當我們需要把這個解壓時,可以這樣做:

gunzip /root/sysroot.gz
cpio -i < /root/sysroot



原創文章,作者:13-廣州-楊過,如若轉載,請注明出處:http://www.www58058.com/8255

(0)
13-廣州-楊過13-廣州-楊過
上一篇 2015-09-23
下一篇 2015-09-25

相關推薦

  • Apache配置壓縮優化時報錯——undefined symbol: inflateEnd

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1345264    圣誕都過了,好久沒來51發博文了。最近一直在忙考試和其他一些私人事務,感覺長期不發博文,有點不好。不是不發,實在是最近…

    Linux干貨 2016-08-15
  • linux 加密和證書

    安全目標:機密性:明文傳輸的ftp, http,telnet 不安全數據完整性:身份驗證:可用性:安全技術:認證,授權,安全通信,審計密碼算法和協議:對稱加密,公鑰加密,單向加密,認證協議 1、對稱加密:加密,解密使用同一個秘鑰,效率高 DES:Data Encrption Standard, 56bit3DES:AES:AdvancedBlowfish缺點…

    2017-09-11
  • 8.1作業

    創建用戶gentoo,附加組為bin和root,默認shell為/bin/csh,注釋信息為“Gentoo Distribution” [root@localhost wang]# useradd -G bin,root -s /bin/csh -c "Gentoo&n…

    Linux干貨 2016-08-02
  • Linux命令date命令詳解

    在linux環境中,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便,下面是詳細的使用說明和示例 在linux環境中,不管是編程還是其他維護,時間是必不可少的,也經常會用到時間的運算,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便。 1.命令格式:date[參數]… [+格式] 2.命…

    2017-07-18
  • Linux的終端類型

    一、了解終端   在早期的年代,主機不是很多,都是一系列的大型主機,簡單來說就是用戶很多,但主機很少,不可能做到人手一臺,但可以在主機上連接一個分屏器,在分屏器上可以連接鼠標鍵盤以及顯示器,這些東西是沒有計算能力的,僅僅擔任輸入和輸出的工作,運算和處理都是由主機來完成的。   簡單來說終端是用戶與主機交互,是必然用到的…

    Linux干貨 2016-10-14
  • 第一周作業

    1. 描述計算機的組成及其功能。
    2. 按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3. 描述Linux的哲學思想,按照自己的理解對其解釋性描述。
    4. 說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、……等命令使用,配合相應實例闡述。
    5. 如何獲取幫助信息,描述man文檔章節劃分。
    6. 羅列發行版基礎目錄名稱命名法則及功用規定。

    Linux干貨 2017-12-03
欧美性久久久久