Solaris下制作软件包

 
Solaris制作软件包

注:此文章译自sunfreeware的一篇文章,个人认为原文有些地方说得不清楚,根据实际理解进行极少的改动。
原文地址: http://www.sunfreeware.com/pkgadd.html


注意:某些步骤需要root权限


·选择你的软件
找到你要编译的软件的源代码,并仔细阅读所有安装说明和其他指南。特别是,要查看Makefile文件,明白那些可执行文件将被创建,它们链接到哪些可执行文件和库文件。同时,要知道运行该程序需要哪些已经编译的代码、库文件、头文件、数据文件等。某些程序依赖于其他程序才能正常运行,你必须找到它所依赖的程序,并将它们打包。搜集文档、README、Copyright、手册和其他你认为对最终用户有用的文件。


·阅读相关手册
一件既困难也不开心的事是,至少阅读以下命令的手册:pkgadd,pkginfo,pkgmk,pkgparam,pkgproto,pkgtrans,pkgrm。除了下面将描述的命令的使用外,你可能还需要了解更多的选项和命令的一些具体细节。


·设置好相关目录结构
一般情况下,我会建一个类似/opt/SOURCES的目录去放置源文件。大多数情况下,软件的默认安装路径是/usr/local。为了便于解释,我们将会安装一个虚构的prog程序到/usr/local目录。当然,你实际安装的目录名和程序可能会有所不同。每一个包需要一个类似SCprog的名称,SC是用来指出创建该程序的作者或者组织。


·编译程序并安装到/usr/local或其他地方
你现在必须已经得到你要编译和运行的程序。转到包含源文件的目录,阅读相关指南。多数程序都有诸如README、INSTALL、或其他类似文件的详细安装指南。程序编译完后,你需要运行类似“make install”的命令,这将根据Makefile的规定把文件安装到/usr/local或其他地方。往往你已经有一个/usr/local目录在你的系统中,当你运行“make install”时,新的文件将会与其他文件混在一起。我通常建一个包含所有其他程序的/opt/SOURCES/local.full目录,还有一些软链接:
ln -s /opt/SOURCES/local.full /opt/SOURCES/local
ln -s /opt/SOURCES/local /usr/local
通常编译时,相关链接就像上面那样。但当我要运行“make install”时,我先运行下列命令:
cd /opt/SOURCES
rm local
mkdir local
然后,运行“make install”,将文件安装到/usr/local/bin等目录。我还将创建一些诸如/usr/local/doc/prog的目录保存所有源文件。一旦将所有文件安装到/usr/local(实际上是/opt/SOURCES/local)后,我将进行下面描述的打包过程。


·创建prototype和pkginfo文件
进入/usr/local目录:
cd /usr/local
运行下面的命令:
find . -print | pkgproto > prototype
这将在/usr/local目录创建prototype文件。用你的编辑器修改prototype文件,在第一行加上:
i pkginfo=./pkginfo
最后,转换文件原来的用户权限和组权限为bin和bin(或者其他,请看下面的红色标注)。下面是一个例子:
i pkginfo=./pkginfo
d none bin 0755 bin bin
f none bin/prog 0755 bin bin
d none doc 0755 bin bin
f none doc/doc1 0644 bin bin
d none lib 0755 bin bin
f none lib/lib1 0644 bin bin
d none man 0755 bin bin
d none man/man1 0644 bin bin
f none man/man1/prog.1 0444 bin bin
改变文件拥有者权限这一步非常重要,如果文件为其他用户所有,程序将可能不能运行。没有修改这些属性是我们遇到的最常见的问题。 但是,有些读者指出,某些情况下,有些文件需要由root用户或者其他有这种权限的用户或组拥有。你需要仔细研究一下安装指南,看看是否需要某些特殊的用户权限。现在在/usr/local目录下创建内容类似下面这样的pkginfo文件:
PKG="SCprog"
NAME="prog"
ARCH="sparc"
VERSION="1.00"
CATEGORY="application"
VENDOR="Christensen and Associates, Inc."
EMAIL=" steve@smc.vnet.net"
PSTAMP="Steve Christensen"
BASEDIR="/usr/local"
CLASSES="none"
这些变量的值都很浅显明白,他们是指:
PKG= 包的名称
NAME=程序的名称
ARCH=系统的结构
VERSION=程序的版本
CATEGORY=程序属于哪一类,“application”或者“system”
VENDOR=程序的供应商
EMAIL=email联系地址
PSTAMP=进行打 包的作者名
BASEDIR=软件安装的目录
CLASSES=填上none就可以了


·运行pkgmk
在/usr/local目录下,运行:
pkgmk -r `pwd`
这将在/var/spool/pkg下创建名为SCprog的文件


·运行pkgtrans
cd /var/spool/pkg
pkgtans -s `pwd` /tmp/prog-1.00
你需要回答 制作哪个包,选择包名(如SCprog)的数字,然后就会在/tmp下创建/prog-1.00文件


·gzip prog-1.00得到prog-1.00.gz文件
在/tmp目录下运行gzip prog-1.00,得到gzip压缩的prog-1.00.gz文件,你可以移到任何你想存放该文件的地方。打包过程完成。用脚本来实现以上过程相当比较容易。


·测试包
我通常用全新安装的方法测试prog-1.00.gz文件。备份/usr/local后,删除该目录。我将gzip压缩的包放在/opt/SOURCES/PKG目录,进入/opt/SOURCES/PKG目录,运行:gunzip prog-1.00.gz解压,然后以root用户身份运行pkgadd -d prog-1.00,按照指示安装SCprog。把/usr/local加到UNIX的PATH路径中,让可执行文件和手册像平常那样方便地正常使用。测试完后,把软件 包的安装文件移到其他目录,重新建立/usr/local链接:
cd /opt/SOURCES
mv local local.prog
ln -s /opt/SOURCES/local.full /opt/SOURCES/local


·安装后的脚本
程序安装的文件可能并不是全部都放到/usr/local一个目录下,下面简单介绍怎样把文件放到其他地方。假设我有些文件要放到/etc而不是/usr/local目录下,我将在/usr/local下创建目录,如:/usr/local/etc。将需要最终放到/etc的文件放到上面那个目录中,然后在/usr/local目录下创建一个postinstall文件,加上这一行:
mv /usr/loca/etc/* /etc
这将包含我所需要的命令(你可能需要在postinstall文件加入一些测试语句,检查你所移动的文件是否会覆盖现存的文件)。一系列(与/bin/sh兼容的)命令可以加入到该文件中。这些命令在pkgadd将文件安装到/usr/local后执行。为了能使postinstall文件被执行,在prototype文件中加入i postinstall=./postinstall一行到i pkginfo该行下面。除此以外,没有其他包含postinstall的行可以放到prototype文件中。


另注:文章最后包含一位读者创建包和chroot环境的两个perl脚本,有兴趣的可以查看原文,在此不作翻译。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值