免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 5296 | 回复: 44
打印 上一主题 下一主题

这个脚本可能对批量安装solaris操作系统有用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-11-26 22:29 |只看该作者 |倒序浏览
[这个贴子最后由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&#59;ufsdump 0f root.dump / &#59;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&#59;mount /dev/dsk/c1t0d0s1 /a
## ifconfig eri0 192.168.1.24 netmask 255.255.255.0 up
#从PC上把root.dump.Z和此脚本上传到/a目录下
## cd /a&#59;ftp 192.168.1.1
## chmod +x install.sh;
#V880的要求配置的主机名是www;IP地址是172.16.23.11&#59;掩码是255.255.255.0&#59;执行:
## ./install.sh  c1t0d0 www 172.16.23.11 255.255.255.0 172.16.23.0
#安装提示回答2个问题后就可以等待系统安装结束,大约需要40分钟。
#
#第一次启动新安装的系统时会有报错:
#savecore: open("/dev/dsk/c0t0d0s1&quot: 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&#59;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 &quotlease 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 ]
then
echo "/dev/dsk/${rootdisk}s${BB}\t/dev/rdsk/${rootdisk}s${BB}\t${AA}\tufs\t1\tyes\t-">;>;vfstab.new
else
echo "/dev/dsk/${rootdisk}s${BB}\t/dev/rdsk/${rootdisk}s${BB}\t${AA}\tufs\t1\tno\t-">;>;vfstab.new
fi
else
sed &quot;s/c0t0d0s1/${rootdisk}s${BB}/g&quot;<vfstab >;vfstab.new
fi

if [ $AA = / ]
then
rootslice=$BB
sed &quot;s/c0t0d0s0/${rootdisk}s${BB}/g&quot; <vfstab >;vfstab.new
fi

cp vfstab.new vfstab

done < /tmp/slicetable.new

umount /tmp/${rootslice}
mount  /dev/dsk/${rootdisk}s${rootslice} /mnt
if test $? -ne 0
then
        echo &quot;Error when mounting /dev/rdsk/${rootdisk}s${rootslice}&quot;
        exit
fi

cd /a
echo &quot;\n\nuncompressing data...\n&quot;
uncompress /a/root.dump.Z
echo &quot;\n\nrestoring data...\n&quot;
cd /mnt&#59;ufsrestore -rf /a/root.dump
if test $? -ne 0
then
        echo &quot;Error when dumping data.&quot;
        exit
fi

rm /mnt/restore*
installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/${rootdisk}s${rootslice}

while read AA BB
do
if [ ! $AA = / -a ! $AA = swap ]
then

if [ -d /mnt/$AA ]
then
echo &quot;\n moving slice $AA&quot;
cd /mnt/$AA&#59; find . -print|cpio -pduVm /tmp/${BB}
cd /&#59;rm -r /mnt/$AA
fi
mkdir -p /mnt/$AA
cd /&#59;umount /tmp/${BB}
mount /dev/dsk/${rootdisk}s${BB} /mnt/$AA
fi
done < /tmp/slicetable.new
cp /a/vfstab.new /mnt/etc/vfstab
mv /mnt/etc/hostname.*0 /mnt/etc/hostname.${NetIf}

drvconfig -r /mnt -p /mnt/etc/path_to_inst
cd /devices
find . -print|cpio -pduVm /mnt/devices
rm -r /mnt/dsk
rm -r /mnt/rdsk
cd /dev
tar cvf - dsk|(cd /mnt/dev&#59;tar xvf -)
tar cvf - rdsk|(cd /mnt/dev&#59;tar xvf -)
disks -r /mnt
rm -r /mnt/pci@*
rm -r /mnt/memory*

OldHostname=`cat /mnt/etc/nodename`
OldIP=`grep $OldHostname /mnt/etc/hosts|awk '{print $1}'`

sed &quot;s/${OldHostname}/${HostName}/&quot; </mnt/etc/hosts >;/tmp/hosts.new
sed &quot;s/${OldIP}/${IP}/&quot; </tmp/hosts.new >;/tmp/hosts.new1
cp /tmp/hosts.new1 /mnt/etc/hosts

sed &quot;s/${OldHostname}/${HostName}/&quot; </mnt/etc/hostname.${NetIf} >;/tmp/hostname.new
cp /tmp/hostname.new /mnt/etc/hostname.${NetIf}

echo &quot;${Netaddr}\t${Netmask}&quot;>;>;/mnt/etc/netmasks

sed &quot;s/${OldHostname}/${HostName}/&quot; </mnt/etc/nodename >;/tmp/nodename.new
cp /tmp/nodename.new /mnt/etc/nodename

sed &quot;s/${OldHostname}/${HostName}/g&quot; </mnt/etc/net/ticlts/hosts >;/tmp/hosts.new
cp /tmp/hosts.new /mnt/etc/net/ticlts/hosts
cp /tmp/hosts.new /mnt/etc/net/ticots/hosts
cp /tmp/hosts.new /mnt/etc/net/ticotsord/hosts

rm /mnt/dev/fb*
rm /mnt/dev/fb0/*
touch /mnt/reconfigure

echo &quot;\t\t**********************************************&quot;
echo &quot;\t\t\tFinished!Please reboot system.&quot;
echo &quot;\t\t**********************************************&quot;

论坛徽章:
0
2 [报告]
发表于 2002-11-26 22:39 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

高啊!!!!!!!!~~~~~~~~~~~~~~~~~~~

论坛徽章:
0
3 [报告]
发表于 2002-11-26 22:50 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

好!

论坛徽章:
0
4 [报告]
发表于 2002-11-26 23:15 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

偶不清楚的地方刚刚问完,贴出来

主要是分区上的,例如:偶用u5的机器做了盘,一个硬盘

偶装的是V480,加了2个硬盘,

该怎么用,特别是分区

你V480加了2盘,可我这个脚本只要一个系统盘就成了,跟别的盘没关系

就是说可以自动安装系统盘并分区,别的盘日后再挂。不知道偶的理解对否??

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2002-11-26 23:46 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

很好,问题请教:

ifconfig $NetIf:11 plumb

为什么要“ :11” ?

先谢了。

论坛徽章:
0
6 [报告]
发表于 2002-11-26 23:50 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

明天再问吧!!他跑路了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2002-11-26 23:52 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

探讨一下,JUMPSTART 是否更适于此用途?所有配置都在SERVER
上控制,更集成化

论坛徽章:
0
8 [报告]
发表于 2002-11-27 00:00 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

偶是这么想的
1.如果有个大型的网络,中间有很多SUN的机器,并且每年要做固定的维护,有相当一部分需要重装系统,这时用jumpstat也许会方便很多。
2.如果要常常出差,并有时需要批量装N台机器的话,带几张光盘效率会比较高,而且中间不需要干预,速度也会快一些

论坛徽章:
0
9 [报告]
发表于 2002-11-27 00:13 |只看该作者

这个脚本可能对批量安装solaris操作系统有用

咦,你什么时候也这么厉害了?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2002-11-27 00:16 |只看该作者

这个脚本可能对批量安装solaris操作系统有用


你这小耗子很聪明啊,做我的鼠标吧,我家有一花猫陪你玩
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP