红联Linux门户
Linux帮助

一键安装Linux(附带各种命令,登录欢迎界面,用户登录模块。)

发布时间:2014-12-17 15:02:46来源:linux网站作者:wei2856059

我们最终写好了一键制作Linux的脚本。这次真的是一键了,附带了常用的命令,以及欢迎界面,外加提示符等等。

明天加入网络模块,让其能够上网!

宿主机:RedHat Enterprise 5 (2.6.18)

目标机器:256内存,8G硬盘。


#!/bin/bash  
#: Title: All_Mini_Linux.sh  
#: Synopsis:  
#: DateTime: 2011-08-04 12:33:02  
#: Version: 0.2  
#: Author: weiyan  
#: Options:
#  
#  
read -p "The target disk: " DSK 
 
if fdisk -l $DSK | grep "^/dev" &> /dev/null ; then
fdisk -l $DSK | grep "^/dev" 
PARTS=`fdisk -l $DSK | grep "^/dev" | awk '{print $1}'` 
for I in $PARTS; do 
if mount | grep "$I" &> /dev/null; then 
mount | grep "$I" 
else
echo "$I is not mounted." 
fi 
done 
fi 
 
SPART() { 
read -p "Warning !!!!! Next you do it will wipe your disk !!!! Continue(y/N)?" CHOICE 
case $CHOICE in 
y|Y) 
for I in $PARTS; do 
if mount | grep "$I" &> /dev/null; then 
fuser -km $I 
umount $I 
fi 
done 
 
dd if=/dev/zero of=$DSK bs=512 count=1 &> /dev/null 
 
echo '  
n
p

 
+50M 



 
+512M 



 
+256M 


82 
w' | fdisk $DSK &> /dev/null 
sleep 1 
 
mke2fs -j ${DSK}1 &> /dev/null 
mke2fs -j ${DSK}2 &> /dev/null
mkswap ${DSK}3 &> /dev/null 
return 0 
;; 
n|N) 
return 1 
;; 
*) 
return 2 
;; 
esac 

SPART 
[ $? -eq 0 ] && echo "The Disk wipe success !!!!!!!" || echo "Failure" 
 
## ==============2========================  
function GUAZAI { 
[ -d /mnt/boot ] ||  mkdir -p /mnt/boot 
umount /mnt/boot &> /dev/null 
mount $1 /mnt/boot 
[ -d /mnt/sysroot ] || mkdir -p /mnt/boot 
umount /mnt/sysroot &> /dev/null 
mount $2 /mnt/sysroot 

 
GUAZAI ${DSK}1 ${DSK}2 
 
## =============3=========================  
 
# firstblood ! rootfs  $1 = /mnt/sysroot  
function ROOTFS { 
if [ -d $1 ];then 
if mount | grep "$1" &> /dev/null ; then 
cd $1 
chmod 1777 tmp/ 
 
# create /etc/inittab  
cat >>$1/etc/inittab<< EOF 
id:3:initdefault: 
si::sysinit:/etc/rc.d/rc.sysinit 
 
l0:0:wait:/etc/rc.d/rc.shutdown 
l1:1:wait:/sbin/init -t1 S 
l3:3:wait:/sbin/init -t1 3 
 
#mingetty  
1:2345:respawn:/sbin/mingetty tty1 
2:2345:respawn:/sbin/mingetty tty2 
3:2345:respawn:/sbin/mingetty tty3 
4:2345:respawn:/sbin/mingetty tty4 
5:2345:respawn:/sbin/mingetty tty5 
6:2345:respawn:/sbin/mingetty tty6 
EOF 
 
# create /etc/rc.d/rc.shutdown  
cat >>$1/etc/rc.d/rc.shutdown<< EOF 
#!/bin/bash  
sync 
sleep 1 
sync 
sleep 1 
umount /dev/sda1 
umount /dev/sda2 
 
exec /sbin/halt -p 
EOF 
 
# create rc.sysinit  
cat >>$1/etc/rc.d/rc.sysinit<< EOF 
#!/bin/bash  
echo -e "\t\tWelcome to \033[031;1mLittle\033[0m Linux..." 
 
mount -n -o remount,rw / 
mount -n -a 
 
# set HOSTNAME  
[ -f /etc/sysconfig/network ] && source /etc/sysconfig/network 
[ -z $HOSTNAME ] && HOSTNAME=localhost 
echo $HOSTNAME > /proc/sys/kernel/hostname 
EOF 
 
# create /etc/sysconfig/network  
cat >>$1/etc/sysconfig/network<< EOF 
HOSTNAME=weiyan 
EOF 
 
# create /etc/sysctl.conf  
cat >>$1/etc/sysctl.conf<< EOF 
 
EOF 
 
# create /etc/issue  
cat >>$1/etc/issue<< EOF 
Welcome to Little.Linux.org 
Username : root Password : NiCai? 
EOF 
 
#create /root/.bash_profile  
cat >>$1/root/.bash_profile<< EOF 
PS1='[\u@\h \W]\ 
<pre class="cpp" name="code">EOF 
 
chmod +x etc/rc.d/rc.shutdown 
# create fstab  
cat >>$1/etc/fstab<< EOF 
/dev/sda2   /ext3defaults  0 0 
/dev/sda1   /bootext3defaults  0 0 
sysfs   /sys sysfs   defaults  0 0 
proc/procprocdefaults  0 0 
EOF 
else 
read -p "Error,the $1 still mount ! Contiune(y|N)?" MOT 
case $MOT in 
*) 
echo "Exit......" 
return 5 
;; 
esac 
  fi 
fi 

 
ROOTFS /mnt/sysroot 
 
##====================4========================  
# copy lib to your sys .  $1= COMMAND  $2 = /mnt/sysroot  
 
function COPYLIB { 
#copy command  
if which $1 &> /dev/null ;then 
AA=`which $1 | tail -1 | awk '{print $1}'` 
cp "$AA" $2"$AA"
else 
echo "$1 is not exist" 
fi 
 
#copy lib  
LIBPATH=`echo $LIB | sed 's@\(.*\)/[^[:space:]]\{1,\}@\1@g'
[ -d ${2}$LIBPATH ] || mkdir ${2}$LIBPATH 
[ ! -e $2/$LIB ] && cp -f $LIB ${2}$LIBPATH 
done 
 
echo "$1 has cp done." 

echo "==========================================================" 
 
# zhijie jia ru ming ling
 
COPYLIB $CMDD /mnt/sysroot 
done 
 
#ln bash & sh !!!!!  
ln -sv bash sh &> /dev/null 
 
# copy lib/libnss*. with nsswitch  
cp /usr/lib/libnss3.so /mnt/sysroot/usr/lib/ 
cp /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib/ 
cp /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/ 
cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/ 
cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/ 
 
cp -d /lib/libnss_files* /mnt/sysroot/lib/ 
cp -d /lib/libnss_compat* /mnt/sysroot/lib/ 
 
## copy login !  
cd /mnt/sysroot/bin/ 
wget ftp://192.168.0.254/pub/login &> /dev/null  
chmod +x login 
cp /lib/libcrypt.so.1 /mnt/sysroot/lib/ 
cp /lib/libm.so.6 /mnt/sysroot/lib/ 
cd ~ 
 
## copy passwd .... nsswitch.conf  
cp /etc/{passwd,shadow,group,gshadow} /mnt/sysroot/etc/ 
cp /etc/nsswitch.conf /mnt/sysroot/etc/ 
 
#########until xunhuan let user input ##########################  
#  
#echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!"  
#read -p "COMMAND you want?(Quit for 'q') :" CMD1
#until [ $CMD1 == 'q' ]; do  
#  COPYLIB $CMD1 /mnt/sysroot  
#  read -p "Which COMMAND you want use ?(Quit for 'q') :" CMD1
#done  
###############################################################  
 
echo "==========================================================" 
##==========================5===================================  
# $1 = /mnt/sysroot  
function YDFQ { 
TMPDIR=`mktemp -d /tmp/little.XX` 
cd $TMPDIR 
zcat /boot/initrd-`uname -r`.img | cpio -id  &> /dev/null ## zhankai bing songgei 
sed -i 's@^echo Scanning and configuring dmraid supported devices@#&@g' init 
sed -i 's@^echo Scanning logical volumes@#&@g' init 
sed -i 's@^lvm vgscan --ignorelockingfailure@#&@g' init 
sed -i 's@^echo Activating logical volumes@#&@g' init 
sed -i 's@^lvm vgchange -ay --ignorelockingfailure  vol0@#&@g' init 
sed -i 's@^resume LABEL=SWAP-sda3@#&@g' init 
 
sed -i "s@\(mkrootdev.*\) /.*@\1 sda2@" init 
find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz 
cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz 

YDFQ /mnt/sysroot 
 
##==============================6================================  
 
## $1 = /dev/sdc  $2=/mnt/boot $3=kernel'name  $4 initrd's name  
function GRUB { 
if [ `basename $2` == boot ];then 
grub-install --root-directory=/mnt $1  &> /dev/null 
cat >>$2/grub/grub.conf<< EOF 
default=0 
timeout=10 
title Little Linux 
root (hd0,0) 
kernel /${3} ro root=/dev/sda2 quiet 
initrd /${4} 
EOF 
 
else 
echo "It's not boot !Exit & Please set it again !"  
fi 

 
GRUB $DSK /mnt/boot vmlinuz initrd.gz 

sync 
sync 
sync 
sync 
sync 
 
sleep 10 
 
echo "Congratulation ! Your Mini Linux is install OK !"


当所有都运行完之后。

OK,万事搞定!