RHEL6 Tiny Linux 製作

###################RHEL6TinyLinux#################
以Linux的啓動流程來製作,預備條件:宿主機,獨立硬盤(也可以用鏡像文件)
第一步:分區,掛載,以下是分區腳本
#!/bin/bash
#DifinedVariable
#
BootPart=500M
RootPart=2G
read-p"Inputyourdiskthatneedtoformat:"Disk







#Partitons
(
/sbin/fdisk$Disk<<EOF
n
p
1




+$BootPart
n
p
2


+$RootPart
w
EOF
)&>/dev/null


sleep3
mkfs.ext4${Disk}1&>/dev/null
mkfs.ext4${Disk}2&>/dev/null
mkdir/mnt/{boot,sysroot}&>/dev/null
mount${Disk}1/mnt/boot

第二步:安裝GRUB及其配置文件,以下是處理腳本
#!/bin/bash
#
GrubRD=/mnt
read-p"Inputyourdiskforinstallinggrub:"Gbdisk
grub-install--root-directory=$GrubRD$Gbdisk
cd$GrubRD/boot/grub
cat>grub.conf<<EOF
timeout=5
default=0
titleWelcometousetinylinux(2.6.32)
root(hd0,0)
kernel/vmlinuzroroot=/dev/sda2selinux=0
initrd/initramfs.img
EOF












#copykernelandinitrdfromcurrentsystem
cp/boot/vmlinuz*/$GrubRD/boot/vmlinuz
cp/boot/initramfs*/$GrubRD/boot/initramfs.img





第三步:建立根文件系統下的相關目錄以及初始化腳本
#!/bin/bash
#
read-p"inputrealrootfs'spathfortinylinux:"Sysroot
cd${Sysroot:-/mnt/sysroot}
mkdir-pprocsysdevetc/{init,rc.d}lib/moduleslib64binsbinusr/{lib,lib64}var/{log,run,lock}
cat>./etc/init/rcS.conf<<EOF
startonstartup





stoponrunlevel
task
consoleoutput
exec/etc/rc.d/rc.sysinit
EOF


cat>./etc/rc.d/rc.sysinit<<EOF
#!/bin/bash
#
echo-e"\tWelcometocome\033[5;31mTinyLinux\033[0m"
/bin/bash
EOF
chmod+x./etc/rc.d/rc.sysinit









第四步:拷貝要使用的程序命令到根目錄
#!/bin/bash
#
DEST=/mnt/sysroot
libcp(){
LIBPATH=${1%/*}
[!-d$DEST$LIBPATH]&&mkdir-p$DEST$LIBPATH
[!-e$DEST${1}]&&cp-a$1*$DEST$LIBPATH&&echo"copylib$1finished."
}







bincp(){
CMDPATH=${1%/*}
[!-d$DEST$CMDPATH]&&mkdir-p$DEST$CMDPATH
[!-e$DEST${1}]&&cp$1$DEST$CMDPATH


forLIBin`ldd$1|grep-o"/.*lib\(64\)\{0,1\}/[^.]\{1,\}"`;do
if["$LIB"="/lib64/ld-linux-x86-64"];then
LIB=`echo$LIB|grep-o"/.*lib\(64\)\{0,1\}/[^-]\{1,\}"`
fi
libcp$LIB
done
}





read-p"Yourcommand:"CMD
until[$CMD=='q'];do
!which$CMD&&echo"Wrongcommand"&&read-p"Inputagain:"CMD&&continue
COMMAND=`which$CMD|grep-v"^alias"|grep-o"[^[:space:]]\{1,\}"`
bincp$COMMAND
echo"copy$COMMANDfinished."
read-p"Continue:"CMD
done










第五步:添加運行級別0和6,使系統可以正常關機重啓
1.cp-a/etc/init/rc.conf.
2.建立rc腳本
#!/bin/bash
#
#creatercscript
#
Tiny_etc_dir=/mnt/sysroot/etc
[-d${Tiny_etc_dir}/rc.d]||mkdir-p${Tiny_etc_dir}/rc.d
cat>${Tiny_etc_dir}/rc.d/rc<<EOF
#!/bin/bash
#
RunLevel_Dir=/etc/rc.d/rc$1
foriin${RunLevel_Dir}/K*;do
if[-x$i];then
$istop
fi
done
















foriin${RunLevel_Dir}/S*;do
if[-x$i];then
$istart
fi
done
EOF
chmod+x${Tiny_etc_dir}/rc.d/rc





3.建立init.d目錄和rcN.d目錄,以及對應的動作腳本和鏈接。
mkdir-p/mnt/sysroot/etc/{init.d,rc0.d,rc6.d}
4.編寫halt,用作關機和重啓
vim/mnt/sysroot/etc/init.d/halt
#!/bin/bash
#
case$0in
*halt)
echo"haltingthesystem......."
/sbin/halt-p
;;
*reboot)
echo"rebootingthesystem......"
/sbin/reboot
;;
*)
;;
esac
chmod+x/mnt/sysroot/etc/init.d/halt















5.使用第四部的腳本,來移動halt、reboot命令以及依賴庫
6.將halt腳本分別鏈接到rc0.d和rc6.d目錄下
cdrc0.d
ln-sv../init.d/haltS01halt
cdrc6.d
ln-sv../init.d/haltS01reboot



7.建立/etc/passwd文件,並在其中加入root用戶條目:
cat>/mnt/sysroot/etc/passwd<<EOF
root:x:0:0:root:/root:/bin/bash
EOF


8.拷貝/etc/passwd的依賴庫
cp-a/lib64/libnss_files*/mnt/sysroot/lib64/




第六步:添加登陸終端
1.拷貝init程序處理過程中與終端有關的配置文件
cp-a/etc/init/{tty.conf,start-ttys.conf,prefdm.conf}/mnt/sysroot/etc/init/

2.建立於登錄有關的目錄
mkdir/mnt/sysroot/etc/{pam.d,security,sysconfig}
3.拷貝與登錄有關的配置文件
cp/etc/pam.d/{login,system-auth}/mnt/sysroot/etc/pam.d
cp/etc/security/{limits.conf,namespace.conf}/mnt/sysroot/etc/security/
cp/etc/sysconfig/init/mnt/sysroot/etc/sysconfig


4.建立存放與登錄pam相關的功能庫文件目錄
mkdir/mnt/sysroot/lib64/security
5.拷貝login中依賴的pam庫文件
foriin`awk'grep-o'pam.*so'/etc/pam.d/login`;docp-a/lib64/security/$i/mnt/sysroot/lib64/security/;done
6.拷貝system-auth中依賴的pam庫文件
foriin`awk'$3~"so$"{print$3}'/etc/pam.d/system-auth`;docp-a/lib64/security/$i/mnt/sysroot/lib64/security/;done
7.cp-a/lib64/libnsl*/mnt/sysroot/lib64
8.grep^root/etc/shadow>>/mnt/sysroot/etc/shadow
9.egrep'^(passwd|shadow)'/etc/nsswitch.conf>>/mnt/sysroot/etc/nsswitch.conf(注:沒有nsswitch.conf也可以)
10.使用第四步腳本,拷貝login命令及其庫文件。
11.修改rc.sysinit文件,如下:
#!/bin/bash
#
#sethostname
./etc/sysconfig/network



[-z"$HOSTNAME"-o"$HOSTNAME"=="(none)"]&&HOSTNAME=tiny.linux
/bin/hostname$HOSTNAME
#remountrootfs
mount-n-oremount,rw/
echo-e"\tWelcometocome\033[5;31mTinyLinux\033[0m"
#/bin/bash


12.使用第四步腳本,拷貝mount和hostname命令及其庫文件。

第七步:添加單用戶模式
1.建立運行級別"1"的目錄
mkdir/mnt/sysroot/etc/rc.d/rc1.d
2.拷貝宿主機的/etc/rc.d/init.d/single
cp/etc/rc.d/init.d/single/mnt/sysroot/etc/rc.d/init.d
cp/etc/rc.d/rc1.d/S99single/mnt/sysroot/etc/rc.d/rc1.d




3.cd/mnt/sysroot/etc/rc.d/rc1.d&&ln-sv../init.d/tserverK33tserver
4.拷貝單用戶配置文件(被init程序使用的)
cp/etc/init/rcS-sulogin.conf/mnt/sysroot/etc/init/

5.使用第四步腳本,拷貝rcS-sulogin.conf文件中出現的命令及其庫文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章