[这个贴子最后由jxbcpp在 2002/12/20 02:36pm 编辑]

#!/bin/sh
#文档名:install.sh
#
#作者:jxbcppQQ:589210
#测试环境:solaris 8 for sparc
#使用说明:这个脚本是用于简化操作系统的安装。原理是先安装一个操作系统,然
# 后用ufsdump把这个操作系统做成dump文档后用compress压缩做成母盘,等
# 到用户现场安装时只要从solaris引导盘单用户模式启动(boot
# cdrom -s),用format把待安装的系统盘分区,并newfs并mount待安装的系
# 统盘的swap分区,用于临时存放母盘的dump文档;然后配置这台机器
# 的IP地址,从某台PC把母盘的dump文档和本脚本上传到临时分区中,
# 然后执行此脚本就能够完成系统的安装。
#
#几个注意点:1、待安装的系统盘swap用于临时存放空间,必须挂接在/a目录
# 2、制作母盘的的需要:任何文档系统不单独分区,放在同一个分区中
# 3、母盘dump文档压缩后的文档名应是:root.dump.Z
# 4、制作母盘的硬件环境能够和待安装的机器的硬件环境不相同,
#甚至能够是不同机型
#
#例子:比如我在一台ultra 5上安装了solaris 8,分区表为:
#PartitionMount Directory
# 0/
# 1swap
# 7/export/home
#我打上了最新的patch,然后制作母盘:
##cd /export/home;ufsdump 0f root.dump / ;compress root.dump
#(压缩的原因是root.dump文档太大,有1G多,压缩后只有不到600M)
#
#过了几天,我需要去用户那里安装2台V880,我只需要把solaris 8的引导光盘放进v880
#光驱中,然后:
#ok boot cdrom -s
#...
#...
## format
#给待安装盘分区,比如待安装硬盘是c1t0d0,分区表是:
#PartitionMount Directory
# 0/
# 1swap
# 3/var
# 4/usr
# 7/export/home
#
#
## echo y|newfs /dev/rdsk/c1t0d0s1;mount /dev/dsk/c1t0d0s1 /a
## ifconfig eri0 192.168.1.24 netmask 255.255.255.0 up
#从PC上把root.dump.Z和此脚本上传到/a目录下
## cd /a;ftp 192.168.1.1
## chmod x install.sh;
#V880的需要配置的主机名是www;IP地址是172.16.23.11;掩码是255.255.255.0;执行:
## ./install.sh c1t0d0 www 172.16.23.11 255.255.255.0 172.16.23.0
#安装提示回答2个问题后就能够等待系统安装结束,大约需要40分钟。
#
#第一次启动新安装的系统时会有报错:
#savecore: open("/dev/dsk/c0t0d0s1": No such device or address
#dumpadm: cannot use /dev/dsk/c0t0d0s1 as dump device: 无此设备或地址
#再重新启动一次后就正常了,系统自动更改了配置文档




if test $# -lt 5
then
echo "\n\tUsage :$0 rootdisk hostname IP netmask netaddress"
echo "\tExample: $0 c1t0d0 www 172.16.23.12 255.255.255.0 172.16.23.0"
exit
fi

rootdisk=$1
HostName=$2
IP=$3
Netmask=$4
Netaddr=$5

TERM=vt100;export TERM

hostname $HostName
if test $? -ne 0
then
echo "\nhostname is invalid."
exit
fi

NetIf=`ifconfig -a|grep -v LOOPBACK|grep MULTI|awk -F":" '{print $1}'|grep 0|head -1`
ifconfig $NetIf:11 plumb
ifconfig $NetIf:11 $IP netmask $Netmask
Err=$?
ifconfig $NetIf:11 unplumb
if test $Err -ne 0
then
echo "\nIP or netmask is invalid."
exit
fi



echo "\nrootdisk=${rootdisk}\nhostname=${HostName}\nIP=${IP}\nnetmask=${Netmask}\nnetaddress=${Netaddr}\n"
answer=`/usr/bin/ckyorn -d n -p "Are These correct?[Y/N]"`
if [ ! $answer = Y -a ! $answer = y ]
then
exit
fi

echo "# Mounted_on\tSlice_number" >slicetable
echo "/\t\t0">>slicetable
echo "swap\t\t1">>slicetable
echo "/var\t\t3">>slicetable
echo "/usr\t\t4">>slicetable

echo "Please edit slice mount table."
sleep 1
vi slicetable
more slicetable

answer=`/usr/bin/ckyorn -d n -p "Are you sure to continue?[Y/N]"`
if [ ! $answer = Y -a ! $answer = y ]
then
exit
fi

grep -v "#" slicetable >/tmp/slicetable.new

rootslice=0
cd /a

echo "#device\t\tdevice\t\tmount\t\tFS\tfsck\tmount\tmount">vfstab
echo "#to mount\tto fsck\t\tpoint\t\ttype\tpass\tat boot\toptions">>vfstab
echo "#">>vfstab
echo "#/dev/dsk/c1d0s2\t/dev/rdsk/c1d0s2\t/usr\tufs\t1\tyes\t-">>vfstab
echo "fd\t-\t/dev/fd\tfd\t-\tno\t-">>vfstab
echo "/proc\t-\t/proc\tproc\t-\tno\t-">>vfstab
echo "/dev/dsk/c0t0d0s1\t-\t-\tswap\t-\tno\t-">>vfstab
echo "/dev/dsk/c0t0d0s0\t/dev/rdsk/c0t0d0s0\t/\tufs\t1\tno\t-">>vfstab
echo "swap\t-\t/tmp\ttmpfs\t-\tyes\t-">>vfstab


cp vfstab vfstab.new
while read AA BB
do
if [ ! $AA = swap ]
then
echo y|newfs /dev/rdsk/${rootdisk}s${BB}
if test $? -ne 0
then
echo "Error when newfsing /dev/rdsk/${rootdisk}s${BB}"
exit
fi

mkdir /tmp/${BB}
mount /dev/dsk/${rootdisk}s${BB} /tmp/${BB}
if test $? -ne 0
then
echo "Error when mounting /dev/rdsk/${rootdisk}s${BB}"
exit
fi

if [ ! $AA = /var -a ! $AA = /usr ]

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!