七步制作Solaris软件包

来源:互联网 发布:手机软件分类的软件 编辑:程序博客网 时间:2024/04/29 21:22

1. 从www.lua.org下载lua5.1的源码,配置好编译器,直接使用它自带的Makefile编译。
#make solaris
make使用的是/usr/ccs/bin/make
gcc使用的是/usr/sfw/bin/gcc

2. 将需要打包的文件重新组织到一个新目录,例子中我们使用/Documents/lua5.1这个目录。
-bash-3.00# find lua5.1 -type f
lua5.1/bin/lua
lua5.1/bin/luac
lua5.1/include/lua.h
lua5.1/include/luaconf.h
lua5.1/include/lualib.h
lua5.1/include/lauxlib.h
lua5.1/include/lua.hpp
lua5.1/lib/liblua.a
lua5.1/man/lua.1
lua5.1/man/luac.1
lua5.1/demo/hello.lua
lua5.1/copyright


3. 制作pkginfo文件,这是最主要的软件包信息文件。
-bash-3.00# more lua5.1/pkginfo
PKG=lua51
NAME=Lua Enviroment and Applications Package, Lua website is: www.lua.org
ARCH=i386
VERSION=5.1
CATEGORY=application
BASEDIR=/opt
CLASSES=none


我们将软件包package的名字取为lua51。不能使用lua5.1因为package名字不能带有“.“字符。
Name是对这个软件包的一个详细解释;Arch是针对的平台,我们这里使用x86;Version是版本号;
CATEGORY选择应用程序application,还有一个选择是system;BASEDIR则是安装的目标目录,
Class我们这里不使用。

4. 接下来制作request文件,该文件会在安装时候(pkgadd)执行,
这个例子的request文件会提问用户在哪个目录安装lua软件包,如果不满意默认的目录(/opt)话。
假如你不需要这个功能的话,可以略过这个步骤。
-bash-3.00# more lua5.1/request
trap 'exit 3' 15
CLASSES="none"
BASEDIR=`ckpath -d $BASEDIR -aoy
-p "Where should this package be installd</opt>?"
` || exit $?
echo BASEDIR=$BASEDIR >> $1


5. 制作prototype文件,这个文件用来指定软件包的实际内容。
-bash-3.00# more lua5.1/prototype
i pkginfo
i request
d none lua51=/Documents/lua5.1 0755 root sys
d none lua51/bin=/Documents/lua5.1/bin 0755 root bin
f none lua51/bin/lua=/Documents/lua5.1/bin/lua 0755 root bin
f none lua51/bin/luac=/Documents/lua5.1/bin/luac 0755 root bin
d none lua51/include=/Documents/lua5.1/include 0755 root bin
f none lua51/include/lua.h=/Documents/lua5.1/include/lua.h 0644 root bin
f none lua51/include/luaconf.h=/Documents/lua5.1/include/luaconf.h 0644 root bin
f none lua51/include/lualib.h=/Documents/lua5.1/include/lualib.h 0644 root bin
f none lua51/include/lauxlib.h=/Documents/lua5.1/include/lauxlib.h 0644 root bin
f none lua51/include/lua.hpp=/Documents/lua5.1/include/lua.hpp 0644 root bin
d none lua51/lib=/Documents/lua5.1/lib 0755 root bin
f none lua51/lib/liblua.a=/Documents/lua5.1/lib/liblua.a 0644 root bin
d none lua51/man=/Documents/lua5.1/man 0755 root bin
f none lua51/man/lua.1=/Documents/lua5.1/man/lua.1 0644 root bin
f none lua51/man/luac.1=/Documents/lua5.1/man/luac.1 0644 root bin
d none lua51/demo=/Documents/lua5.1/demo 0755 root bin
f none lua51/demo/hello.lua=/Documents/lua5.1/demo/hello.lua 0644 root bin
f none lua51/copyright=/Documents/lua5.1/copyright 0644 root bin

第一列表明该文件的属性,
i - 用于安装使用的文件
d - 软件包中的目录directory
f - 软件包中的文件file

第二列是class的定义,我们这里不使用, 就用none。

第三列指明软件包目标文件的源文件从哪里可以获得。

后面几列是说明文件的属性和权限。

该文件我们也可用命令的方式得到一个简单的模板,不过还需要再加工。^_^
find . -print | pkgproto > prototype

6. 最后我们在lua5.1目录下执行pkgmk
-bash-3.00# pkgmk
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: parameter <PSTAMP> set to "vmsolaris20060409071532"
## Attempting to volumize 18 entries in pkgmap.
part 1 -- 1052 blocks, 19 entries
## Packaging one part.
/var/spool/pkg/lua51/pkgmap
/var/spool/pkg/lua51/pkginfo
/var/spool/pkg/lua51/reloc/lua51/bin/lua
/var/spool/pkg/lua51/reloc/lua51/bin/luac
/var/spool/pkg/lua51/reloc/lua51/copyright
/var/spool/pkg/lua51/reloc/lua51/demo/hello.lua
/var/spool/pkg/lua51/reloc/lua51/include/lauxlib.h
/var/spool/pkg/lua51/reloc/lua51/include/lua.h
/var/spool/pkg/lua51/reloc/lua51/include/lua.hpp
/var/spool/pkg/lua51/reloc/lua51/include/luaconf.h
/var/spool/pkg/lua51/reloc/lua51/include/lualib.h
/var/spool/pkg/lua51/reloc/lua51/lib/liblua.a
/var/spool/pkg/lua51/reloc/lua51/man/lua.1
/var/spool/pkg/lua51/reloc/lua51/man/luac.1
/var/spool/pkg/lua51/install/request
## Validating control scripts.
## Packaging complete.
好了打包完成,制作好的软件包是在/var/spool/pkg/lua51

7. 最后我们再将该软件包制作成单个文件:
-bash-3.00# pkgtrans -s /var/spool/pkg/ /tmp/lua51.pkg

The following packages are available:
1 lua51 Lua Enviroment and Applications Package, Lua website is: www.lua.org
(i386) 5.1

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all
Transferring <lua51> package instance



好了,我们的lua51软件包制作完成,软件包使用方式如下:
安装:pkgadd -d /tmp/lua51.pkg
检查是否安装成功可以用:pkginfo lua51 或者 pkgchk -v lua51
卸载lua51软件包则用:pkgrm lua51

这里只是个简单的例子,如果需要定制更多功能,比如修改crontab文件,使用class,可以参考
Sun公司官方文档 Application Packaging Developer's Guide

http://blog.gceclub.sun.com.cn/index.php?op=ViewArticle&articleId=827&blogId=503