从源码开始编译一个带有WEB服务器功能的小型LINUX(下)
?上接:從源碼開始編譯一個帶有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內核源碼外,均可在附件中獲得,內核源碼可以網上獲得~
轉載于:https://blog.51cto.com/eguys/482424
總結
以上是生活随笔為你收集整理的从源码开始编译一个带有WEB服务器功能的小型LINUX(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#的命令行参数
- 下一篇: 用vmware-converter4把l