建立具有網路功能的小linux
先將需要的網路基礎命令拷貝到小linux下
然後拷貝 ping和ifconfig
要添加網路功能就必須由網卡驅動,網卡驅動pcnet32
但是pcnet32有一個依存的模組是mii,mii沒有依存的模組,
那所以我們就只需拷貝這兩個模組到我們的
小linux下即可,拷貝前先查看一下這兩個模組所在的路徑,使用modinfo來查看,
查看完之後,我們發現需要在/mnt/sysroot/lib下建立一個目錄叫modules,
那麼我們先切換到這個目錄下,然後建立
modules這個目錄,在目前的目錄下拷貝以上兩個模組,
cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko ./cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/mii.ko ./
完成之後,我們需要讓這兩個模組在小linux啟動時掛載使用,
系統啟動載入額外的裝置驅動在,/etc/rc.d/rc.sysinit
指令碼中實現,並賦予IP地址,那麼接下來就是編輯這個指令碼
在裡面加入一下內容:
[ -d /lib/modules/mii.ko ] && /sbin/insmod /lib/modules/mii.ko [ -d /lib/modules/pcnet32.ko ] && /sbin/insmod /lib/modules/pcnet32.ko echo "Load The ethernet card drivers ok"
在這個指令碼中此時還沒有bash的環境變數,所以必須使用命令的全路徑,牢記
echo "set address for lo..." /sbin/ifconfig 127.0.0.1/8 echo "set address for eth0..." /sbin/ifconfig 192.168.0.188/24
####################################################################
讓小linux實現使用/etc/sysctl.conf來實現配置核心參數:
配置linux系統的核心參數是在哪一步完成的呢?在/etc/rc.d/rc.sysinit指令碼中完成的,它用來設定核心參數
if [[ -x /sbin/sysctl && -r /etc/sysctl.conf ]] ; then echo {1}quot;configuring kernel parameters............." /sbin/sysctl -p /etc/sysctl.conf echo {1}quot;...........kernel parameters done."fi
將這一段指令碼添加到/etc/rc.d.rc.sysinit內即可實現小linux啟動時來配置核心的參數
然後我們也會發現我們的小linux下沒有這個檔案/etc/sysctl.conf
所以我們需要在其下面建立這個檔案,格式按照如下寫,寫你需要的而並不是全部複製!!!
# Kernel sysctl configuration file for Red Hat Linux## For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and# sysctl.conf(5) for more details.# Controls IP packet forwardingnet.ipv4.ip_forward = 0# Controls source route verificationnet.ipv4.conf.default.rp_filter = 1# Do not accept source routingnet.ipv4.conf.default.accept_source_route = 0# Controls the System Request debugging functionality of the kernelkernel.sysrq = 0# Controls whether core dumps will append the PID to the core filename# Useful for debugging multi-threaded applicationskernel.core_uses_pid = 1# Controls the use of TCP syncookiesnet.ipv4.tcp_syncookies = 1# Controls the maximum size of a message, in byteskernel.msgmnb = 65536# Controls the default maxmimum size of a mesage queuekernel.msgmax = 65536# Controls the maximum shared segment size, in byteskernel.shmmax = 4294967295# Controls the maximum number of shared memory segments, in pageskernel.shmall = 268435456
###########################################################
怎樣使小linux切換到runlevel 1
定義系統預設運行層級是在/etc/inittab 中定義的,
id:3:initdefault: 定義預設運行層級# System initialization. 這裡還有七個層級下所需要指令碼的定義si::sysinit:/etc/rc.d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0 在這個層級下需要開啟任何服務,只需要關閉所有服務l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3 當預設選定層級3,就會運行寫的目錄下的指令碼,以開啟該層級下的服務l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6
層級0 1 6 都是特殊的層級
在小linux的/etc/inittab裡添加一行
# for runlevell1:1:wait:/sbin/init -t1 S
有了這一行不當緊,你的小linux就可以切換到層級1 了
################################################################
可以使小linux關機
雖然使用init 0 可以關機 但實際上它是調用 halt 來實現的
那麼只需要定義/etc/inittab就可以了,
# for runlevell0:0:wait:/etc/rc.d/rc.shutdown
為了實現關機,你還應該做的是任何在記憶體內還沒有同步到磁碟的資料都同步到磁碟,
這樣就要使用sync命令了,記得將sync命令拷貝到小linux上
同步到磁碟以後還要卸載所有檔案系統,卸載完以後再實現關機,但是這時候是否能
找到這個關機命令呢?
我們現在/etc/rc.d/建立rc.shutdown這個指令碼【記得將chmod也拷貝到小linux內】
在這個指令碼內寫入如下內容:
#!/bin/bash#sync 同步記憶體內沒有同步到磁碟的資料sleep 1 讓其睡一秒 是資料完全同步完全umount /dev/sda1 在你的系統如上在/etc/mtab這個檔案你可以直接使用 umount -a這個命令來卸載全部umount /dev/sda2swapoff -a 關閉所有被標示為swap的檔案系統exec /sbin/halt -p 目的是避免開啟子shell關不了機
這樣就可以實現真正意義上得關機了,
記得在你的大指令碼中添加這些東西,以實現自動完善
#####################################################################
使小linux使用帳號和密碼登陸:
cp -d 如果是連結 就拷貝連結
1,、啟動至少一個終端
2.列印登陸提示使用者
3、/etc/passwd ,/etc/shadow,/etc/group,/etc/gshadow最起碼的檔案
光有以上這些可以嗎?
系統在識別使用者的時候是靠ID號來識別的,使用者的帳號和ID號的對應關係是在/etc/passwd內的
但是如果不把這些資訊放在此處,那麼系統是不是就不知道這個對應關係了吧
這樣系統就必須提供一種機制,讓系統知道,當我們需要去把使用者的帳號轉換成ID時到什麼地方
去找,並不是login就知道到這裡去找,而是login調用庫檔案將使用者的帳號和密碼轉換過來,
而這些庫檔案和login並沒有緊密的耦合關係,調用哪個庫檔案不是login說了算得,為是由我們定義的
一種機制實現的,這種機制叫做名稱服務開關,即nsswitch,它什麼都沒有只有一個設定檔在/etc/nsswitch.conf
只需要將這個設定檔提供給login,當login接受使用者輸入的帳號,就必須到一個位置去驗證ID號
此時這個設定檔內就定義了它要按照那種機制去找,如果定義了是按照檔案去尋找,login就會
查到相應的庫檔案,然後由庫檔案尋找到使用者的ID號,這樣就使用者可以更換這種機制
因此這些庫檔案分別對應一種機制就會有一個超找方法
一般,這些庫檔案會再/lib下
實際在/usr/lib也有,
可以ls -l /usr/lib | grep libnss
可以看到許多連結檔案
其中libnss_files.so就是到passwd裡尋找的
對我們來說我們只需要files就可以了,當然files要想發揮機制必須結合主庫檔案
主庫檔案是libnss3.so,libnssckbi.so等,需要將他們留下,同時files想要工作就必須結合
compat來實現,因此也要將它留住,
我們拷貝庫檔案時拷貝是連結,但是實際拷貝的是源檔案,所以我們就要用到cp的新命令
cp -d 保留連結,
這樣可以應付升級後找不到檔案,添加連結就不會有這樣的問題了
cp /usr/lib/libnss3.so /mnt/sysroot/usr/lib libnssckbi.so libnssutil3.socp -d libnss_files.so libnss_compat.so
當然最後兩個拷過去之後是個死連結,你還要拷貝他倆所指向的檔案
這些檔案在/lib下,ls -l /lib | grep libnss
然後拷貝files和compat四個檔案到相應的目錄下即可
然後就是啟動至少一個終端:
編輯/mnt/sysroot/etc/inittab加上就可以了
# Run gettys in standard runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6
此時我們啟動時,/etc/rc.d/rc.sysinit已經直接啟動了一個/bin/bash 使用者登入的時候是
不允許再啟動的,此時我們應該將我們小linux下的這個檔案重新編輯一下,去掉那個”/bin/bash“
然後該列印登入提示了,我們此時需要一個login,我們需要將這個login放在我們小linux對應的目錄下即/bin/login
但是此時這個login是有依賴的庫檔案的,所以我們應該將對應的庫檔案拷過來,即cp -d /lib/libcrypt.so.1
cp -d /lib/libcrypt-2.5.socp /lib/libm.so.6這樣就可以實現了sync記得多敲幾下
然後你需要使用者的相關資訊,如果你不嫌麻煩的話,就自己定義這個檔案,或者直接把原有的拷貝過來
cp -p保留原許可權
然後再拷貝 /etc/nsswith.conf 到小linux下就準備完畢了接下來就是啟用層級一,編輯小linux下的/etc/inittab,在裡面加入l1:1:wait:/sbin/init -t1 S
此時就可以見證奇蹟了
################################################################
顯示主機名稱,以及登入資訊
在linux啟動流程中我們知道有一個指令碼有給主機命名的功能,那就是/etc/rc.d/rc.sysinit
還有主機名稱是放在/etc/sysconfig/network裡面的,所以我們應該再其下面建立這個檔案
在這個檔案內寫入HOSTNAME=little.linux.org就可以了
然後我們改編輯rc.sysinit指令碼了,在指令碼內寫上
[ -r /etc/sysconfig/network ] && source /etc/sysconfig/network[ -z $HOSTNAME ] && HOSTNAME = localhostecho "$HOSTNAME" > /proc/sys/kernel/hostname
想列印登入資訊都在/etc/issue內那我們就自己建立以下,在裡面編輯
welcome to little.linux.org.
然後在切換到小linux下,在root下建立一個檔案叫bash_profile在裡面寫入
PS='[\u@\h \W]\
即可,
然後執行以下source ~/.bash_profile即可生效