Sun Solaris安装包的反安装实现

工作中,有时需要移植一些已经安装过的Solaris包,或者对已经安装后的包进行修改,但一时又无法找到原来的安装包。系统升级时,有时也常常涉及到对原来系统的备份问题,这时需要一些能够对原来的安装包进行备份,又能够在新系统上进行安装的工具。Solaris本身并不提供直接的工具用于包的移植。

但Solaris在安装本身通用的PKG包时,会产生两个与安装包相关的文档/上录,分别在/var/sadm/pkg/下和/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 $5:$6 $PRO_DIR/$3
}
function cp_file
{
$CP -p $3 $PRO_DIR/$3
$CHMOD $4 $PRO_DIR/$3
$CHOWN $5:$6 $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 "Please 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

时间: 2024-11-26 17:26:16

Sun Solaris安装包的反安装实现的相关文章

ios开发中能不能用一个app去下载另一个app的安装包并自动安装

问题描述 ios开发中能不能用一个app去下载另一个app的安装包并自动安装 需求:有一个主APP,用来下载其他APP,比如下载完成后自行安装到主APP中(就像插件),然后会产生一个图标,点击这个图标就会启动新安装的APP,当安装这个APP后又返回到主APP中.---------有点像Iphone的桌面. 有没有大神知道类似的实现方法. 解决方案 你看看腾讯的qq农场,其中需要跳转到qq牧场的时候就和你的情况一样,ps:QQ农场和qq牧场是俩app 解决方案二: 一般来说都是跳到APP stor

ie9 离线安装包-IE9 离线安装问题 哪儿高手知道怎么解决呀

问题描述 IE9 离线安装问题 哪儿高手知道怎么解决呀 需要在WIN7 32位的电脑上安装IE9.由于条件限制不能联网安装. 我在网上搜了很多离线安装包,可是都安装不了. 有的说在微软官网上下载的适用于WIN7 32位的IE9安装包,在不联网的情况下,不检查安装更新可以直接安装,可是我的还是要联网检查更新,不知道什么原因. 有没有哪位高手知道怎么解决在WIN7 32位的电脑上离线安装IE9的问题.或者有IE9的离线安装包的呢?

SUN Solaris上RTL8139网卡的安装

OS:SOLARIS FOR SPARC 安装驱动前需要先安装下列工具: # wget libiconv-1.8-sol9-sparc-local.gz # wget libgcc-3.3-sol9-sparc-local.gz # wget gcc-3.3.2-sol9-sparc-local.gz # gzip -d *.gz # pkgadd -d libiconv-1.8-sol9-sparc-local # pkgadd -d libgcc-3.3-sol9-sparc-local #

.net安装包自动安装Mysql数据库

原文:.net安装包自动安装Mysql数据库 在制作.Net安装包的时候,如果项目有用到数据库,怎么能够把数据库打包安装呢?网上已经有很多自动安装Sql Server数据库的例子,但是自动安装mysql的例子似乎不多.本文就介绍一下如何在.Net安装包中自动安装Mysql数据库. 最终我们要实现的效果是,部署.Net桌面应用程序时,能够一键自动安装应用程序以及附带的MySql数据库,并初始化数据库. 实现步骤如下:   1.准备一个干净的MySql安装包 mysql本身是开源的,安装完mysql

数据库引擎安装失败-如何删除linux下的mariadb安装包

问题描述 如何删除linux下的mariadb安装包 我尝试安装mysql5.7.11,但在用rpm -ivh mysql下的common时已存在冲突,用rpm -qa|grep mariadb 时存在,可用rpm -e 删除时说找不到路径.用yum也没用,好像yun不能删除预装安装包. 我的系统是centos7. 求前辈帮忙. 解决方案 http://www.51ou.com/browse/MariaDB/51006.html 解决方案二: 我想说的是.恩,其实比较推荐用mariadb,而且m

LNMP一键安装包安装配置方法详解

系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 需要128MB以上内存(如果为128MB的小内存VPS,Xen的需要有SWAP,OpenVZ的至少要有128MB以上的vSWAP或突发内存),注意小内存请勿使用64位系统! 安装MySQL 5.6或5.7及MariaDB 10必须1G以上内存!. VPS或服务器必须已经联网,且必须设置的是网络源不能是光盘源,同时VPS/服务器 DNS要正常! Linux下区

《PHP、MySQL和Apache入门经典(第5版)》一第1章 安装QuickStart向导1.1 使用第三方的安装包

第1章 安装QuickStart向导 PHP.MySQL和Apache入门经典(第5版)为了帮助你快速起步,这个简单的第1章将帮助你熟悉整体的跨平台安装软件包XAMPP的安装过程.后续的第2.3.4章分别介绍了如何从互联网上获取并安装MySQL.Apache和PHP,从而可以确保软件版本是最新的.另外,这几章还展开说明了安装过程中的每一步,以及理解这些技术如何一起工作的其他重要信息. 你应该在接下来的三章中熟悉每一种技术的扩展信息.然而,如果你只是想要开始在本地机器上工作的话,本章也是很好的参考

基于InstallShield2013LimitedEdition的安装包制作

原文:基于InstallShield2013LimitedEdition的安装包制作 在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不多,但是处理还是有很大的不同,本文主要基于VS2013的基础上,介绍使用InstallShield2013LimitedEdition的安装包制作. 1.安装使用InstallShield2013LimitedEd

《PHP、MySQL和Apache入门经典(第5版)》一一1.1 使用第三方的安装包

1.1 使用第三方的安装包 PHP.MySQL和Apache入门经典(第5版) 第三方安装包是由最初创建者以外的公司或组织所提供的程序包.在本章中,我们将学习如何使用XAMPP安装包来同时安装PHP.MySQL和Apache,可以在我们将要使用的任何操作系统上(Linux/UNIX.Windows或Mac)完成安装. 除了因为我自己使用XAMPP数年了,我选择在本章中使用它的另一个原因是,其名称中带有X.X表示这是AMPP(Apache.MySQL.PHP和Perl)的一个跨平台安装程序(Per