从源码开始编译一个带有WEB服务器功能的小型LINUX(下)
?上接:從源碼開始編譯一個帶有WEB服務(wù)器功能的小型LINUX(上)
?
?
七、為新構(gòu)建的ToyLinux啟用虛擬控制臺
這個可以通過宿主機來實現(xiàn),也可以直接啟動剛構(gòu)建成功的小Linux進行配置。我們這里采用通過宿主機的方式(重新啟動宿主機):
#?cd?/mnt/sysroot
將?etc/inittab文件改為如下內(nèi)容:??
::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
好了,接下來就可以測試驗正六個虛擬控制臺的使用了。
八、盡管上述第七步已經(jīng)實現(xiàn)了虛擬控制臺,但其仍是直接進入系統(tǒng),且系統(tǒng)沒有用戶帳號等安全設(shè)施,這將不利于系統(tǒng)的安全性。因此,接下來的這步實現(xiàn)為系統(tǒng)添加用戶帳號(這里仍然基于宿主機實現(xiàn))。
1、為目標主機建立passwd帳號文件
#?cd?/mnt/sysroot
#?vim?etc/passwd
添加如下內(nèi)容:
root:x:0:0::/root:/bin/sh
接下來為root用戶建立“家”目錄:
#?mkdir??root
2、為目標主機建立group帳號文件
#?vim??etc/group
添加如下內(nèi)容:
root:x:0:
3、為目標主機建立shadow影子口令文件,這里采用直接復(fù)制宿主機的shadow文件中關(guān)于root口令行的行來實現(xiàn)
#?grep??"^root"??/etc/shadow??>?etc/shadow
注:等目標主機啟動時,root用戶的口令也是宿主機的root用戶的口令。
4、將?etc/inittab文件改為如下內(nèi)容:
::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
好了,接下來就可以重新啟動目標主機進行驗正了。
九、在系統(tǒng)登錄時提供banner信息
這個可以通過宿主機來實現(xiàn),也可以直接在目標主機上進行配置。這里采用直接在目標主機上配置的方式:
#?vi??/etc/issue
添加如下內(nèi)容:
Welcome?to?ToyLinux(http://marion.cublog.cn)...
Kernel?\r
注:這里的內(nèi)容可以根據(jù)你的需要進行修改。
十、在系統(tǒng)啟動時為系統(tǒng)提供主機名稱:
這個可以通過宿主機來實現(xiàn),也可以直接在目標主機上進行配置。這里采用直接在目標主機上配置的方式:
1、創(chuàng)建保存主機名稱的配置文件
#?mkdir?/etc/sysconfig
#?vi??/etc/sysconfig/network
添加如下內(nèi)容:
HOSTNAME=yourhostname.example.com
2、編輯系統(tǒng)初始化腳本,實現(xiàn)開機過程中設(shè)定主機名稱
#?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至目標主機,以實現(xiàn)在目標主機上使用bash
1、在宿主機上查看bash所依賴的庫文件件,并將這些庫文件復(fù)制到目標系統(tǒng):
#?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、此時,我們需要把除了第一行顯示的以外的余下的所有庫文件復(fù)制到目標主機的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程序復(fù)制到目標主機的bin目錄中即可:
#?cp?/bin/bash??bin/
十二、設(shè)置root用戶的默認shell為/bin/bash,并為其定義常用環(huán)境變量(本過程在目標主機上直接實現(xiàn))
1、新建/etc/shells文件,標明當前系統(tǒng)所用可用shell類型:
#?vi?/etc/shells
添加如下內(nèi)容:
/bin/sh
/bin/bash
2、編輯/etc/passwd,設(shè)置root用戶的默認shell為/bin/bash
3、編輯/root/.bash_profile,定義PATH,?PS1等環(huán)境變量
#?vim??/root/.bash_profile
添加如下內(nèi)容:
PS1='[\u@\h?\W]\$'
HISTSIZE=100
PATH=$PATH:/$HOME/bin
export?PS1?HISTSIZE?PATH
十三、定義名稱解析方式
完成上述第十二步以后,用戶的shell提示符中的用戶名很可能顯示為:”I?have?no?name!“,這個主要是沒有配置名稱解析服務(wù)造成的。本步驟則來嘗試解決此問題,并嘗試實現(xiàn)為主機名稱解析定義其解析方式。
提示:本步驟需要在宿主機上實現(xiàn)
1、為名稱解析服務(wù)復(fù)制必要的庫文件:
#?cd?/mnt/sysroot
#?cp?/lib/libnss_files*??lib/
#?cp?/lib/libnss_dns*??lib/
2、為目標主機建立名稱解析文件nsswitch.conf
#?vim?etc/nsswitch.conf
添加如下內(nèi)容:
passwd: files
group: files
shadow:? files
hosts: files?dns
3、為主機名稱解析建立etc/hosts文件,可根據(jù)需要添加其內(nèi)容
#?vim??etc/hosts
添加如下內(nèi)容(如果本機有IP地址,也可以在此配置):
127.0.0.1 localhost
十四、為目標主機提供一個web服務(wù)器
嵌入式系統(tǒng)上可用的輕量級web服務(wù)器有如Boa,?thttpd,?lighttpd,?shttpd等。我們這里選用thttpd,且只提供簡單的web服務(wù)。
1、在宿主機上編譯thttpd
#?tar?zxvf?thttpd-2.25b.tar.gz
#?cd??thttpd-2.25b
#?./configure
#?make
2、復(fù)制編譯好的thttpd至目標主機
#?mkdir?-pv?/mnt/sysroot/usr/local/sbin
#?cp?-p?thttpd??/mnt/sysroot/usr/local/sbin/
3、復(fù)制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)
請確保以上所依賴的庫文件均復(fù)制到了/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、接下來啟動目標主機系統(tǒng),登錄后創(chuàng)建網(wǎng)站目錄,并創(chuàng)建一個測試頁面
#?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內(nèi)核源碼外,均可在附件中獲得,內(nèi)核源碼可以網(wǎng)上獲得~
轉(zhuǎn)載于:https://blog.51cto.com/eguys/482424
總結(jié)
以上是生活随笔為你收集整理的从源码开始编译一个带有WEB服务器功能的小型LINUX(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#的命令行参数
- 下一篇: 用vmware-converter4把l