歡迎您光臨本站 註冊首頁

從源碼開始編譯一個帶有WEB伺服器功能的小型LINUX(下)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

上接:從源碼開始編譯一個帶有WEB伺服器功能的小型LINUX(上)

七、為新構建的ToyLinux啟用虛擬控制台

這個可以通過宿主機來實現,也可以直接啟動剛構建成功的小Linux進行配置.我們這裡採用通過宿主機的方式(重新啟動宿主機):

# cd /mnt/sysroot

etc/inittab

文件改為如下內容

::sysinit:/etc/init.d/rcS

tty1::askfirst:/bin/sh *************// askfirst 登陸前敲回車先

tty2::askfirst:/bin/sh

tty3::askfirst:/bin/sh

tty4::askfirst:/bin/sh

tty5::askfirst:/bin/sh

tty6::askfirst:/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

好了,接下來就可以測試驗正六個虛擬控制台的使用了.

八、儘管上述第七步已經實現了虛擬控制台,但其仍是直接進入系統,且系統沒有用戶帳號等安全設施,這將不利於系統的安全性.因此,接下來的這步實現為系統添加用戶帳號(這裡仍然基於宿主機實現).

1、為目標主機建立passwd帳號文件

# cd /mnt/sysroot

# vim etc/passwd

添加如下內容:

root:x:0:0::/root:/bin/sh

接下來為root用戶建立目錄:

# mkdir root

2、為目標主機建立group帳號文件

# vim etc/group

添加如下內容:

root:x:0:

3、為目標主機建立shadow影子口令文件,這裡採用直接複製宿主機的shadow文件中關於root口令行的行來實現

# grep "^root" /etc/shadow > etc/shadow

註:等目標主機啟動時,root用戶的口令也是宿主機的root用戶的口令.

4、將 etc/inittab文件改為如下內容:

::sysinit:/etc/init.d/rcS

::respawn:/sbin/getty 38400 tty1

::respawn:/sbin/getty 38400 tty2

::respawn:/sbin/getty 38400 tty3

::respawn:/sbin/getty 38400 tty4

::respawn:/sbin/getty 38400 tty5

::respawn:/sbin/getty 38400 tty6

::shutdown:/bin/umount -a -r

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

好了,接下來就可以重新啟動目標主機進行驗正了.

九、在系統登錄時提供banner信息

這個可以通過宿主機來實現,也可以直接在目標主機上進行配置.這裡採用直接在目標主機上配置的方式:

# vi /etc/issue

添加如下內容:

Welcome to ToyLinux(http://marion.cublog.cn)...

Kernel r

註:這裡的內容可以根據你的需要進行修改.

十、在系統啟動時為系統提供主機名稱:

這個可以通過宿主機來實現,也可以直接在目標主機上進行配置.這裡採用直接在目標主機上配置的方式:

1、創建保存主機名稱的配置文件

# mkdir /etc/sysconfig

# vi /etc/sysconfig/network

添加如下內容:

HOSTNAME=yourhostname.example.com

2、編輯系統初始化腳本,實現開機過程中設定主機名稱

# vi /etc/init.d/rcS

在文件尾部添加如下行:

HOSTNAME=

[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network

[ -z ${HOSTNAME} ] && HOSTNAME="localhost"

[ -x /bin/hostname ] && /bin/hostname ${HOSTNAME}

unset HOSTNAME

十一、移植宿主機的bash至目標主機,以實現在目標主機上使用bash

1、在宿主機上查看bash所依賴的庫文件件,並將這些庫文件複製到目標系統:

# cd /mnt/sysroot

# ldd /bin/bash (其顯示可能類似如下所示:)

linux-gate.so.1 => (0x003c0000)

libtermcap.so.2 => /lib/libtermcap.so.2 (0x00aa6000)

libdl.so.2 => /lib/libdl.so.2 (0x00604000)

libc.so.6 => /lib/libc.so.6 (0x008c8000)

/lib/ld-linux.so.2 (0x00bf8000)

2、此時,我們需要把除了第一行顯示的以外的餘下的所有庫文件複製到目標主機的lib

目錄中:

# cp /lib/libtermcap.so.2 lib/

# cp /lib/libdl.so.2 lib/

# cp /lib/libc.so.6 lib/

# cp /lib/ld-linux.so.2 lib/

3、而後再把bash程序複製到目標主機的bin目錄中即可:

# cp /bin/bash bin/

十二、設置root用戶的默認shell/bin/bash,並為其定義常用環境變數(本過程在目標主機上直接實現)

1、新建/etc/shells文件,標明當前系統所用可用shell類型:

# vi /etc/shells

添加如下內容:

/bin/sh

/bin/bash

2、編輯/etc/passwd,設置root用戶的默認shell/bin/bash

3、編輯/root/.bash_profile,定義PATH, PS1等環境變數

# vim /root/.bash_profile

添加如下內容:

PS1='[u@h W]$'

HISTSIZE=100

PATH=$PATH:/$HOME/bin

export PS1 HISTSIZE PATH

十三、定義名稱解析方式

完成上述第十二步以後,用戶的shell提示符中的用戶名很可能顯示為:”I have no name!“,這個主要是沒有配置名稱解析服務造成的.本步驟則來嘗試解決此問題,並嘗試實現為主機名稱解析定義其解析方式.

提示:本步驟需要在宿主機上實現

1、為名稱解析服務複製必要的庫文件:

# cd /mnt/sysroot

# cp /lib/libnss_files* lib/

# cp /lib/libnss_dns* lib/

2、為目標主機建立名稱解析文件nsswitch.conf

# vim etc/nsswitch.conf

添加如下內容:

passwd: files

group: files

shadow: files

hosts: files dns

3、為主機名稱解析建立etc/hosts文件,可根據需要添加其內容

# vim etc/hosts

添加如下內容(如果本機有IP地址,也可以在此配置)

127.0.0.1 localhost

十四、為目標主機提供一個web伺服器

嵌入式系統上可用的輕量級web伺服器有如Boa, thttpd, lighttpd, shttpd等.我們這裡選用thttpd,且只提供簡單的web服務.

1、在宿主機上編譯thttpd

# tar zxvf thttpd-2.25b.tar.gz

# cd thttpd-2.25b

# ./configure

# make

2、複製編譯好的thttpd至目標主機

# mkdir -pv /mnt/sysroot/usr/local/sbin

# cp -p thttpd /mnt/sysroot/usr/local/sbin/

3、複製thttpd依賴的庫文件至目標主機

# ldd thttpd

linux-gate.so.1 => (0x00e75000)

libcrypt.so.1 => /lib/libcrypt.so.1 (0x04f3a000)

libc.so.6 => /lib/libc.so.6 (0x00931000)

/lib/ld-linux.so.2 (0x0090e000)

請確保以上所依賴的庫文件均複製到了/mnt/sysroot/lib目錄中.

4、為目標主機上運行

thttpd進程建立一個有效用戶帳號(此用戶不需要目錄)

# echo "www:x:1000:1000:www::/bin/bash" >> /mnt/sysroot/etc/passwd

# echo "www:x:1000:" >> /mnt/sysroot/etc/group

5、接下來啟動目標主機系統,登錄后創建網站目錄,並創建一個測試頁面

# mkdir /var/www/html

# echo '<h1>A test page.</h1>' > /var/www/html/index.html

而後啟動thttpd進程:

# /usr/local/sbin/thttpd -u www -dd /var/www/html -l /var/log/thttpd.log &

接下來就可以進行測試訪問了.請確保此時目標主機有合適的IP地址.

文中所用到的文件,除linux內核源碼外,均可在附件中獲得,內核源碼可以網上獲得~

本文出自 「E-guys」 博客,請務必保留此出處http://eguys.blog.51cto.com/2517622/482424


[火星人 ] 從源碼開始編譯一個帶有WEB伺服器功能的小型LINUX(下)已經有479次圍觀

http://coctec.com/docs/linux/show-post-48097.html