免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2483 | 回复: 4

[原创]如何实现Solaris安装包的反安装? [复制链接]

论坛徽章:
0
发表于 2004-03-04 11:33 |显示全部楼层
工作中,有时需要移植一些已经安装过的Solaris包,或者对已经安装后的包进行修改,但一时又无法找到原来的安装包。系统升级时,有时也常常涉及到对原来系统的备份问题,这时需要一些能够对原来的安装包进行备份,又能够在新系统上进行安装的工具。Solaris本身并不提供直接的工具用于包的移植。

但Solaris在安装本身通用的PKG包时,会产生两个与安装包相关的文档/上录,分别在/var/sadm/pkg/<pkgname>;下和/var/sadm/install/contents中,通过对这两个文档进行解析,可以实现对Solaris包的反安装,这在实现系统升级时尤其有用。

以下脚本会在当前的运行目录下产生压缩的系统安装包,Copy/Paste本脚本到Solaris机上,运行后输入需要反安装的包名即可。欢迎大家测试。

#!/bin/ksh

##########################################################
#
# Copyright (c) 2002 Chinaunix.net -- Solaris
#
# Module Description ::
# Script to create Sun packages from existing installation
#
##########################################################

# [Global Parameters]
#===============================================

MAIN_DIR=`pwd`
PRO_DIR=$MAIN_DIR/process
PKG_DIR=$MAIN_DIR/package
SYS_DIR=/var/sadm/pkg
CNT_FILE=/var/sadm/install/contents
ID=`/usr/bin/id | awk -F= '{print $2}' | awk -F\( '{print $1}'`
VER=sol`uname -r | cut -d. -f2,2`

GREP=/bin/grep
# awk can not handle long line with many fileds.
# In Solaris, use 'nawk' or 'gawk' instead.
AWK=/bin/nawk
GZIP=/bin/gzip
MKDIR=/bin/mkdir
CHMOD=/bin/chmod
CHOWN=/bin/chown
CP=/bin/cp
MV=/bin/mv
PKGMK=/bin/pkgmk
PKGTRANS=/bin/pkgtrans

# [Functions]
#==================================================================

function mk_dir
{
$MKDIR -p $PRO_DIR/$3
$CHMOD $4 $PRO_DIR/$3
$CHOWN $56 $PRO_DIR/$3
}

function cp_file
{
$CP -p $3 $PRO_DIR/$3
$CHMOD $4 $PRO_DIR/$3
$CHOWN $56 $PRO_DIR/$3
}

# [Main]
#==================================================================

if [ ${ID} != 0 ]
then
echo ""
echo "Only Root User allow to run this script. Exit...."
sleep 1
echo ""
exit 1
fi

echo ""
echo "lease enter package name you want to create, then press Enter: "
echo "Enter Package name: \c"
read pkgname

PKG_NAME=$pkgname

if [ ! -d $SYS_DIR/$PKG_NAME ]; then
echo ""
echo "This Package doesn't exist!!! Please check the name and try again!"
echo ""
exit 1
fi

if [ ! -d $PRO_DIR ]; then
$MKDIR $PRO_DIR
fi

if [ ! -d $PKG_DIR ]; then
$MKDIR $PKG_DIR
fi

# Producing part of Prototype file

$GREP $PKG_NAME $CNT_FILE | $GREP -v ^#.* >; $PRO_DIR/cnt_pkg
$AWK '{print $2,$3,$1,$4,$5,$6}' $PRO_DIR/cnt_pkg >; $PRO_DIR/Prototmp
$GREP ^d $PRO_DIR/Prototmp >; $PRO_DIR/Protodir
$GREP ^f $PRO_DIR/Prototmp >;>; $PRO_DIR/Protofile

rm -f $PRO_DIR/Prototmp
rm -f $PRO_DIR/cnt_pkg

# Producing pkginfo file

cp $SYS_DIR/$PKG_NAME/pkginfo $PRO_DIR

# Making directory with permission

i=0
while IFS=' ' read line
do
t[$i]=$line
((i=i+1))
mk_dir $line
done < $PRO_DIR/Protodir

# Copying file to Spool directory

i=0
while IFS=' ' read line
do
t[$i]=$line
((i=i+1))
cp_file $line
done < $PRO_DIR/Protofile

# Producing Prototype file

cat $PRO_DIR/Protodir >; $PRO_DIR/Prototype
cat $PRO_DIR/Protofile >;>; $PRO_DIR/Prototype
(echo "i pkginfo"; cat $PRO_DIR/Prototype ) >; $PRO_DIR/Prototmp
mv $PRO_DIR/Prototmp $PRO_DIR/Prototype

rm -f $PRO_DIR/Protodir
rm -f $PRO_DIR/Protofile

# Now let's make the package

$PKGMK -o -r $PRO_DIR -d $PRO_DIR -f $PRO_DIR/Prototype
$PKGTRANS -s $PRO_DIR $PKG_DIR/$PKG_NAME-$VER-pkg $PKG_NAME
$GZIP -f $PKG_DIR/$PKG_NAME-$VER-pkg

rm -rf $PRO_DIR

论坛徽章:
0
发表于 2004-03-05 11:09 |显示全部楼层

[原创]如何实现Solaris安装包的反安装?

Solaris 8
测试通过

论坛徽章:
0
发表于 2004-03-05 17:04 |显示全部楼层

[原创]如何实现Solaris安装包的反安装?

大家多发一些这样的贴子吧,我喜欢!呵呵!

论坛徽章:
0
发表于 2004-03-05 20:19 |显示全部楼层

[原创]如何实现Solaris安装包的反安装?

支持原创。

论坛徽章:
0
发表于 2004-03-05 20:45 |显示全部楼层

[原创]如何实现Solaris安装包的反安装?

虽然看不懂,但还是给鼓鼓掌!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP