天天看點

redhat 5 系列 diy mini linux 之二

<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.設定主機名

    &lt;1&gt;移植hostname指令,并給mini linux 提供個配置檔案

    echo "HOSTNAME=mylinux" &gt; /mnt/sysroot/etc/sysconfig/network

    &lt;2&gt;在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,如需轉載請自行聯系原作者

繼續閱讀