<a>55人閱讀</a>
本文接上篇,假設mini linux挂載在主控端的/mnt/boot和/mnt/sysroot下,本文的一些腳本都是簡化的,隻求達到我們的目的,linux的工作流程比想象中複雜的多
現在我們有一個可用的mini linux,讓我們對它進行一些擴充
重新挂載根檔案系統為讀寫
首先給minlinux提供個fstab配置檔案,内容如下:
<a href="http://s5.51cto.com/wyfs02/M00/84/45/wKiom1eLJ8_RsolJAACDw4M-VWo164.png-wh_500x0-wm_3-wmp_4-s_2946706722.png" target="_blank"></a>
在rc.sysinit裡面添加mount -o remount,rw /
如果此時mini linux 的etc目錄下沒有mstab檔案,則使用 mount -o -n remount,rw /指令,否則報錯
2.設定主機名
<1>移植hostname指令,并給mini linux 提供個配置檔案
echo "HOSTNAME=mylinux" > /mnt/sysroot/etc/sysconfig/network
<2>在rc.sysinit中添加以下内容
echo -e "set up HOSTNAME..."
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
HOSTNAME=localhost
hostname $HOSTNAME
3.關機和重新開機
首先編輯級别服務腳本,(linux關機重新開機halt、reboot等指令會跳到對應啟動級别去執行服務腳本)必須在對應級别下執行關機重新開機指令,否則無法執行成功。 這裡還需要用到一個内建指令exec,bash執行某個指令的時候,會fork一個子程序去執行,使用exec指令後,直接替換父程序去執行。簡單地講,不用exec時候,halt 關機的子程序結束後,bash這個父程序不會自己結束,不能完全關機。
腳本内容如下:
[root@test sysroot]# cat etc/rc.d/init.d/halt
#!/bin/bash
case $0 in
*halt)
COMMAND="halt -p";;
*reboot)
COMMAND="reboot";;
*)
esac
exec $COMMAND
建立軟連接配接:
ln /mnt/sysroot/etc/rc.d/init.d/halt /mnt/sysroot/etc/rc0.d/K99halt -sv
ln /mnt/sysroot/etc/rc.d/init.d/halt /mnt/sysroot/etc/rc6.d/K99reboot -sv
編輯etc/rc.d/下的rc和配置檔案inittab
rc 内容如下:
RUNLEVEL=$1
for i in /etc/rc${RUNLEVEL}.d/K*
do
$i stop;
done
for i in /etc/rc${RUNLEVEL}.d/S*
$i start;
inittab追加下面幾行:
l0:0:wait:/etc/rc.d/rc 0
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
服務腳本和rc都要授予執行權限,到這裡就可以在mini linux中使用init 0和init 6關機重新開機了。
4.各級别服務腳本
服務腳本格式參考linux啟動流程篇。
5.啟動終端
這裡系統預設的mingetty不能隻指定bash,它會一直調用login程式,而且也依賴/bin/sh,是以這裡采用agetty替代。
移植agetty,并在inittab裡面追加以下兩行:
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1
2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
-n 要與-l 一起用,-n指不使用使用者名登陸,-l指使用的shell 38400指的是螢幕顯示速率可以用
stty -F /dev/console speed得出
6.定義function函數
這裡隻定義兩個函數,為的是使開機流程看起來更像centos,内容如下:
success(){
STRING=$1
OK="[ \033[32m ok \033[0m ]"
ALL=`stty -F /dev/console size|awk '{print $2}'`
SPA=$[$ALL-${#STRING}-${#OK}]
echo -n "$STRING"
for i in `seq 1 $SPA`
echo -n " "
echo -e "$OK"
}
failed(){
FAILED="[\033[31m failed \033[0m]"
SPA=$[$ALL-${#STRING}-${#FAILED}]
echo -e "$FAILED"
err_check(){
if [ $? -eq 0 ];then
success $1
else
failed $1
修改rc.sysinit如下:
. /etc/init.d/functions
echo "remount / ..."
mount -o remount,rw /
err_check "remount / ..."
err_check "set up HOSTNAME..."
echo -e "Welcome to \033[31m linzb\033[0m's mini linux"
效果如下圖:
<a href="http://s4.51cto.com/wyfs02/M02/84/50/wKioL1eMp8GT2MFkAAAm3CPokHc369.png-wh_500x0-wm_3-wmp_4-s_2020855575.png" target="_blank"></a>
6. 給mini linux配置網絡功能
首先要裝載網卡驅動子產品,因為實在虛拟機操作的,網卡類型為pcnet32,pcnet32又依賴于mii子產品(可以用modinfo pcnet32檢視),是以要裝載兩個子產品
編輯/mnt/sysroot/etc/sysconfig/network-scripts/ifcfg-eth0 檔案内容如下:
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0C:29:5B:58:99
ONBOOT=yes
IPADDR=192.168.2.224
GATEWAY=192.168.2.1
NETMASK=255.255.255.0
編輯啟動腳本/mnt/sysroot/etc/init.d/network,内容如下:
#chkconfig:3 20 79
#description:network config
#
. /etc/sysconfig/network-scripts/ifcfg-eth0
LOCK_FILE=/var/lock/subsys/network
start(){
echo "starting network config ... "
touch $LOCK_FILE
insmod /lib/modules/mii.ko
insmod /lib/modules/pcnet32.ko
ifconfig $DEVICE $IPADDR netmask $NETMASK up
route add default gw $GATEWAY
err_check "network starting.."
stop(){
echo "stopping network ...."
rm $LOCK_FILE
modprobe -r pcnet32.ko
modprobe -r mii.ko
err_check "network stopping.."
status(){
if [ -f $LOCK_FILE ] ;then
echo "network working ..."
echo "network stopped.."
case $1 in
start)
start ;;
stop)
stop ;;
restart)
stop
start;;
status)
status;;
echo "Usage: $0 [start|stop|status|restart]";;
chmod +x給network執行權限,并用chkconfig建立啟動級别軟連接配接(這個要chroot 到/mnt/sysroot再執行,自己手動會有錯),最終效果如下:
注:
如果啟動過程包device no found 看看是否有挂載網卡,這個network腳本是stop不了的,子產品無法解除安裝會報modprobe: FATAL: Could not load /lib/modules/2.6.8.custem/modules.deb的錯,把modprobe -r改成rmmod指令後成功解決
本文轉自biao007h51CTO部落格,原文連結: http://blog.51cto.com/linzb/1827840,如需轉載請自行聯系原作者