分类:
2007-04-23 20:05:44
这三个文件是制作 TAR 格式安装包的工具性文件,需要配合 SCO Unix 的 shell 命令来
使用,以下就给出一个简要说明。
SCO Unix 通过 custom 安装文件包时,有两种格式,一种为 CPIO 格式,这个格式的文
件建立,可以使用 SCO 提供的 CDMT 客户分布控制工具包来建立,一种为 TAR 格式,
使用本 BUILD 工具包来建立,这里讲解的是 BUILD 建立客户分布控制安装包的建立过
程。
以下,我将使用两个详细的例子来加以说明。
=================================================
[ 例一:只包含一个组件包的安装包的制作过程 ]
TAR 格式的安装包需要四个最基本的控制文件:
/tmp/init.包文件名
/tmp/perms/包文件名.perms
/usr/lib/custom/包文件名.rmv
/tmp/_lbl/prd=包文件名/typ=os版本/rel=软件包的版本号/vol=卷标
这四个文件的功能说明如下:
# -------------------------------
# /tmp/init.包文件名
# -------------------------------
这是安装脚本文件,该文件在安装程序拷贝其他的软件包后开始执行,主要完成程序包
运行环境的初始化工作。
# -------------------------------------------
# /tmp/perms/包文件名.perms
# -------------------------------------------
软件包的信息说明文件,该文件包含你要发布的软件包的文件,宿主关系,文件的执行
权限,每个文件分属于哪个安装卷,等等。也包含软件包名,软件包运行的环境,软件
包的版本等信息。
# -------------------------------------------
# /usr/lib/custom/包文件名.rmv
# ------------------------------------------
卸载该软件包的脚本文件。如果您由于某种原因要卸载该软件包,那么在卸载过程开始
之前,该文件被运行,它一般是执行的 “/tmp/init.包文件名” 文件的逆操作。
# ---------------------------------------------------------------------------------------------
# /tmp/_lbl/prd=包文件名/typ=os版本/rel=软件包的版本号/vol=卷标
# ---------------------------------------------------------------------------------------------
软件包的卷号,主要是确定软件发行介质是否真实有效。
以下就这四个文件的建立来加以说明,我们以 re2c-0.9.11 为例来加以说明。
假设,我们的 re2c 软件包文件安装以后的内容如下:
/usr/local/re2c/bin/re2c
/usr/local/re2c/usr/man/man1/re2c.1
首先,我们在一个大包用户下建立将来需要安装的文件系统和路径。如:我们可以建立
一个 work 用户,然后在该用户下操作。
进入 work 用户:
login:work
passwd:
创建需要制作安装包的文件在 work 用户下的相关目录。
$ mkdir re2c
$ cd re2c
创建卷标文件(这里,我们假定使用 sco3.2v5.0.x 系统)
$ mkdir -p tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11
$ cd tmp/_lbl_prd=re2c/typ=os50/rel=0.9.11
$ >vol=01
创建文件安装路径(我们假定安装到 /usr/local 目录下去)
$ cd /usr/work/re2c
$ mkdir -p usr/local
$ cd usr/local
拷贝需要安装的文件到该目录下。
$ cp /tmp/re2c/* .
创建系统安装和卸载时的脚本执行文件 init.re2c 和 re2c.rmv
$ cd /usr/work/re2c
$ mkdir -p usr/lib/custom
$ cd tmp
$ >init.re2c
$ cd /usr/work/re2c/usr/lib/custom
$ >re2c.rmv
创建包文件信息库文件 re2c.perms
$ cd /usr/work/re2c/tmp
$ mkdir perms
$ cd perms
$ >re2c.perms
创建文件内容信息文件
$ cd /usr/work/re2c
$ find . -print >re2c.files
经过此步骤后,你的文件包内容信息文件的内容可能如下。
./
./tmp
./tmp/_lbl
./tmp/_lbl/prd=re2c
./tmp/_lbl/prd=re2c/typ=os50
./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11
./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01
./tmp/init.re2c
./tmp/perms/re2c.perms
./usr
./usr/lib
./usr/lib/custom
./usr/lib/custom/re2c.rmv
./usr/local
./usr/local/re2c
./usr/local/re2c/bin
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr
./usr/local/re2c/usr/man
./usr/local/re2c/usr/man/man1
./usr/local/re2c/usr/man/man1/re2c.1
此时,我们将该文件备份 2 份,文件名可以自定,这里我定义为 build01.files 和
build02.files .
$ cp re2c.files build01.files
$ cp re2c.files build02.files
然后,我们修改 build01.files ,将其中的所有目录去掉(这样做的目的是为了压缩软件
包,减少发行介质的使用,如果你不想发布经过压缩的版本,本步骤可以不做)。
修改后的 build01.files 文件内容如下:
./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01
./tmp/init.re2c
./tmp/perms/re2c.perms
./usr/lib/custom/re2c.rmv
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr/man/man1/re2c.1
然后,我们生成压缩脚本文件。
$ buildCompress build01.files compress.files
下面,我们开始生成你要发布的软件包的信息文件,修改你的 build02.files 文件,将该
文件中的公共目录部分去掉,只保留你自己的私有目录和所有需要发布的文件。
修改后的文件内容如下:
./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01
./tmp/init.re2c
./tmp/perms/re2c.perms
./usr/lib/custom/re2c.rmv
./usr/local/re2c
./usr/local/re2c/bin
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr
./usr/local/re2c/usr/man
./usr/local/re2c/usr/man/man1
./usr/local/re2c/usr/man/man1/re2c.1
好了,我们开始生成信息包临时文件,我取名字为 perms.files。
$ buildParse build02.files perms.files RE2C bin bin 01
执行这个命令后,你就初步生成了你的软件包信息文件。该文件的大体内容如下。
RE2C F755 bin/bin 1 ./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01
01
RE2C F755 bin/bin 1 ./tmp/init.re2c 01
RE2C F755 bin/bin 1 ./tmp/perms/re2c.perms 01
RE2C F755 bin/bin 1 ./usr/lib/custom/re2c.rmv 01
RE2C F755 bin/bin 1 ./usr/local/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1/re2c.1 01
好了,我们可以开始编写完整的软件包信息文件 re2c.perms 了,我们使用 vi 编辑器打
开这个空文件开始编写。
首先,我们需要确定软件包的简称,使用的环境,版本,在安装时显示的软件包的名称
。
我们在 re2c.perms 文件中先输入如下内容:
#
#prd=re2c
#typ=os50
#rel=0.9.11
#set="Re2c For SCO OpenServer 5.0.X ( version 0.9.11)"
#
# User id's:
#
uid root 0
uid bin 3
#
# Group id's:
#
gid root 0
gid bin 3
#
#
#!RE2C 1350 Re2c For SCO OpenServer 5.0.X ( version 0.9.11)
然后,我们将前面得到的软件包信息文件的临时信息 perms.files 读入进来 得到完整的信
息包说明文件。
#
#prd=re2c
#typ=os50
#rel=0.9.11
#set="Re2c For SCO OpenServer 5.0.X ( version 0.9.11)"
#
# User id's:
#
uid root 0
uid bin 3
#
# Group id's:
#
gid root 0
gid bin 3
#
#
#!RE2C 1350 Re2c For SCO OpenServer 5.0.X ( version 0.9.11)
RE2C F755 bin/bin 1 ./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01
01
RE2C F755 bin/bin 1 ./tmp/init.re2c 01
RE2C F755 bin/bin 1 ./tmp/perms/re2c.perms 01
RE2C F755 bin/bin 1 ./usr/lib/custom/re2c.rmv 01
RE2C F755 bin/bin 1 ./usr/local/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1/re2c.1 01
然后,我们修改这个文件,将其中的文件属性修改正确。
比如:re2c 文件,我们可以修改成 X755 ,re2c.1 文件我们可以修改成
F644,./usr/local/re2c 我们可以修改成 D644 等。
好了,我们的软件包信息说明文件已经建立完毕了,下面我们开始编写安装脚本文件
re2c.init 这完全是一个脚本文件,这里,我们希望这个文件可以被任何用户自由使用,
那么,我希望它的链接存在于 /usr/bin 目录下,因此,我们在该文件中编写这样的内容
。
ln -s /usr/local/re2c/bin/re2c /usr/bin/re2c >/dev/null 2>&1 ;
由于,我们的软件在删除后,这个链接指向的文件将不存在,因此,我们还需要编写删
除脚本文件,用于在这个软件包卸载后,能自动清理创建的链接。
我们在 ./usr/lib/custom/re2c.rmv 文件中输入如下内容。
rm -rf /usr/bin/re2c >/dev/null 2>&1 ;
好了,到这里,我们就已经接近于成功了。
下面,我们将生成打包的 shell 脚本文件。这里文件名我们依然可以随意定义。我定义为
tar.sh 运行如下命令:
buildArchive build01.files tar.sh VOL.000.000
运行后生成的文件 tar.sh 的内容如下:
tar Cvf VOL.000.000 ./tmp/_lbl/prd=re2c/typ=os50/rel=0.9.11/vol=01 \
./tmp/init.re2c \
./tmp/perms/re2c.perms \
./usr/lib/custom/re2c.rmv \
./usr/local/re2c/bin/re2c \
./usr/local/re2c/usr/man/man1/re2c.1 \
我们将这个文件的最后以行的 \ 和后面的空格全部删除,然后执行它,得到我们的安装
包。最后,我们将所有生成的文件压缩:
$ sh compress.files
生成压缩安装包 VOL.000.000
$ sh tar.sh
好了,到这里,我们的制作过程全部完成。你可以使用 custom 来安装这个软件包了。
^_^.
[ 例一完 ]
[ 例二:包含有多个组件包的安装包的制作过程 ]
下面,我们说说多组件 tar 格式 custom 安装包的制作方法。
在这里,我们还以上面的 re2c 包为例,再加入本软件包 build 为蓝本来加以讲解。
同样的道理,TAR 格式的安装包至少需要五个(或者更多)最基本的控制文件:
/tmp/init.组件名简称 (你的软件包包含有几个组件,就有几个这样的文件)
/tmp/perms/包文件名.perms
/usr/lib/custom/包文件名.rmv
/usr/lib/custom/组件名.rmv
/tmp/_lbl/prd=包文件名/typ=os版本/rel=软件包的版本号/vol=卷标 (如果每个组件占用一
个软件介质发布的卷,那么有几个组件,就需要几个卷标文件。
这五个(或者更多)文件的功能说明如下。
# -------------------------------
# /tmp/init.组件名简称
# -------------------------------
这是安装脚本文件,该文件在安装程序拷贝其他的软件包后开始执行,主要完成程序包
运行环境的初始化工作。
# -------------------------------------------
# /tmp/perms/软件包简称.perms
# -------------------------------------------
软件包的信息说明文件,该文件包含你要发布的软件包的文件,宿主关系,文件的执行
权限,每个文件分属于哪个安装卷,等等。也包含软件包名,软件包运行的环境,软件
包的版本等信息。
# -------------------------------------------
# /usr/lib/custom/包文件名.rmv
# ------------------------------------------
卸载该软件包的脚本文件。如果您由于某种原因要卸载该软件包,那么在卸载过程开始
之前,该文件被运行,它一般是执行所有的 “/tmp/init.组件名简称” 文件的逆操作。
# -------------------------------------------
# /usr/lib/custom/组件名简称.rmv
# ------------------------------------------
卸载该组件包的脚本文件。如果您由于某种原因要卸载该组件包,那么在卸载过程开始
之前,该文件被运行,它一般是执行的本组件的 “/tmp/init.组件名简称” 文件的逆操作。
# ---------------------------------------------------------------------------------------------
# /tmp/_lbl/prd=包文件名/typ=os版本/rel=软件包的版本号/vol=卷标
# ---------------------------------------------------------------------------------------------
软件包的卷号,主要是确定软件发行介质是否真实有效。
以下就这五个(也许更多)文件的建立来加以说明,我们以 re2c-0.9.11 和 build 组成一
个软件包为例来加以说明。
这里我假设我们准备安装的软件包的文件名为 MyPackages ,版本为 1.0 。
假设,我们的 re2c 组件安装以后的内容如下:
/usr/local/re2c/bin/re2c
/usr/local/re2c/usr/man/man1/re2c.1
同时假设 我们的 build 组件安装以后的内容如下:
/usr/local/build/bin/buildCompress
/usr/local/build/bin/buildParse
/usr/local/build/bin/buildArchive
首先,我们在一个打包用户下建立将来需要安装的文件系统和路径。如:我们可以建立
一个 work 用户,然后在该用户下操作。
进入 work 用户:
login:work
passwd:
创建需要制作安装包的文件在 work 用户下的 Re2c 组件的相关目录。
$ mkdir re2c
$ cd re2c
创建卷标文件(这里,我们假定使用 sco3.2v5.0.x 系统)
$ mkdir -p tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0
$ cd tmp/_lbl_prd=MyPackages/typ=os50/rel=1.0
$ >vol=01
创建文件安装路径(我们假定安装到 /usr/local 目录下去)
$ cd /usr/work/re2c
$ mkdir -p usr/local
$ cd usr/local
拷贝需要安装的文件到该目录下。
$ cp /tmp/re2c/* .
创建系统安装和卸载时的脚本执行文件 init.re2c 和 re2c.rmv,以及整个软件包的卸载脚
本文件 MyPackages.rmv 。
$ cd /usr/work/re2c
$ mkdir -p usr/lib/custom
$ cd tmp
$ >init.re2c
$ cd /usr/work/re2c/usr/lib/custom
$ >re2c.rmv
$ >MyPackages.rmv
创建包文件信息库文件 MyPackages.perms。
$ cd /usr/work/re2c/tmp
$ mkdir perms
$ cd perms
$ >MyPackages.perms
创建 re2c 文件内容信息文件
$ cd /usr/work/re2c
$ find . -print >re2c.files
经过此步骤后,你的文件包内容信息文件 re2c.files 的内容可能如下。
./
./tmp
./tmp/_lbl
./tmp/_lbl/prd=MyPackages
./tmp/_lbl/prd=MyPackages/typ=os50
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01
./tmp/init.re2c
./tmp/perms/MyPackages.perms
./usr
./usr/lib
./usr/lib/custom
./usr/lib/custom/MyPackages.rmv
./usr/lib/custom/re2c.rmv
./usr/local
./usr/local/re2c
./usr/local/re2c/bin
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr
./usr/local/re2c/usr/man
./usr/local/re2c/usr/man/man1
./usr/local/re2c/usr/man/man1/re2c.1
此时,我们将该文件备份 2 份,文件名可以自定,这里我定义为 build01.files 和
build02.files .
$ cp re2c.files build01.files
$ cp re2c.files build02.files
然后,我们修改 build01.files ,将其中的所有目录去掉(这样做的目的是为了压缩软件
包,减少发行介质的使用,如果你不想发布经过压缩的版本,本步骤可以不做)。
修改后的 build01.files 文件内容如下:
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01
./tmp/init.re2c
./tmp/perms/MyPackages.perms
./usr/lib/custom/MyPackages.rmv
./usr/lib/custom/re2c.rmv
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr/man/man1/re2c.1
然后,我们生成压缩脚本文件,并执行该压缩文件来压缩你准备发布的软件。
$ buildCompress build01.files compress.files
下面,我们开始生成你要发布的软件包的信息文件,修改你的 build02.files 文件,将该
文件中的公共目录部分去掉,只保留你自己的私有目录和所有需要发布的文件。
修改后的文件内容如下:
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01
./tmp/init.re2c
./tmp/perms/MyPackages.perms
./usr/lib/custom/MyPackages.rmv
./usr/lib/custom/re2c.rmv
./usr/local/re2c
./usr/local/re2c/bin
./usr/local/re2c/bin/re2c
./usr/local/re2c/usr
./usr/local/re2c/usr/man
./usr/local/re2c/usr/man/man1
./usr/local/re2c/usr/man/man1/re2c.1
好了,我们开始生成信息包临时文件,我取名字为 perms.files。
$ buildParse build02.files perms.files RE2C bin bin 01
执行这个命令后,你就初步生成了你的软件包信息文件。该文件的大体内容如下。
RE2C F755 bin/bin 1
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01 01
RE2C F755 bin/bin 1 ./tmp/init.re2c 01
RE2C F755 bin/bin 1 ./tmp/perms/re2c.perms 01
RE2C F755 bin/bin 1 ./usr/lib/custom/MyPackages.rmv 01
RE2C F755 bin/bin 1 ./usr/lib/custom/re2c.rmv 01
RE2C F755 bin/bin 1 ./usr/local/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1/re2c.1 01
好了,我们可以开始编写完整的软件包信息文件 MyPackages.perms 了,我们使用 vi 编
辑器打开这个空文件开始编写。
首先,我们需要确定软件包的简称,使用的环境,版本,在安装时显示的软件包的名称
。
我们在 MyPackages.perms 文件中先输入如下内容:
#
#prd=MyPackages
#typ=os50
#rel=1.0
#set="MyPackages For SCO OpenServer 5.0.X ( version 1.0 )"
#
# User id's:
#
uid root 0
uid bin 3
#
# Group id's:
#
gid root 0
gid bin 3
#
#
#!ALL 1350 MyPackages For SCO OpenServer 5.0.X ( version 1.0)
然后,我们将前面得到的软件包信息文件的临时信息 perms.files 读入进来 得到完整的信
息包说明文件。
#
#prd=MyPackages
#typ=os50
#rel=1.0
#set="MyPackages For SCO OpenServer 5.0.X ( version 1.0 )"
#
# User id's:
#
uid root 0
uid bin 3
#
# Group id's:
#
gid root 0
gid bin 3
#
#
#!ALL 1350 MyPackages For SCO OpenServer 5.0.X ( version 1.0)
#
ALL F755 bin/bin 1 ./usr/lib/custom/MyPackages.rmv 01
#
PERM F755 bin/bin 1 ./tmp/perms/MyPackages.perms 01
#
#!RE2C 1350 Re2c For SCO OpenServer 5.0.X ( version 0.9.11)
RE2C F755 bin/bin 1
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01
01
RE2C F755 bin/bin 1 ./tmp/init.re2c 01
RE2C F755 bin/bin 1 ./usr/lib/custom/re2c.rmv 01
RE2C F755 bin/bin 1 ./usr/local/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1/re2c.1 01
然后,我们修改这个文件,将其中的文件属性修改正确。
比如:re2c 文件,我们可以修改成 X755 ,re2c.1 文件我们可以修改成
F644,./usr/local/re2c 我们可以修改成 D644 等。
这个地方应特别注意:以下文件内容的位置和所属于的组件特性:
如信息包文件 MyPackages.perms 的所属组件包围 PERM ,而所有软件包总的卸载脚本文
件 MyPackages.rmv 所属的组件范围为 ALL 。
PERM F755 bin/bin 1 ./tmp/perms/MyPackages.perms 01
ALL F755 bin/bin 1 ./usr/lib/custom/MyPackages.rmv 01
好了,我们的 re2c 组件包信息说明文件已经建立完毕了,下面我们开始编写安装脚本文
件 re2c.init ,这完全是一个脚本文件,这里,我们希望这个文件可以被任何用户自由使
用,那么,我希望它的链接存在于 /usr/bin 目录下,因此,我们在该文件中编写这样的
内容。
ln -s /usr/local/re2c/bin/re2c /usr/bin/re2c >/dev/null 2>&1 ;
由于,我们的软件在删除后,这个链接指向的文件将不存在,因此,我们还需要编写删
除脚本文件,用于在这个软件包卸载后,能自动清理创建的链接。
我们在 ./usr/lib/custom/re2c.rmv 文件中输入如下内容。
rm -rf /usr/bin/re2c >/dev/null 2>&1 ;
同时,由于我们需要在完整卸载所有的 MyPackages 组件的时候还需要触发卸载脚本,
因此我们还需要在 MyPackages.rmv 中加入卸载命令:
我们在 ./usr/lib/custom/MyPackages.rmv 文件中输入如下内容。
rm -rf /usr/bin/re2c >/dev/null 2>&1 ;
好了,到这里,我们的第一个软件包 VOL.000.000 就已经接近于成功了。
下面,我们将生成打包的 shell 脚本文件。这里文件名我们依然可以随意定义。我定义为
tar.sh 。
运行如下命令:
buildArchive build01.files tar.sh VOL.000.000
运行后生成的文件 tar.sh 的内容如下:
tar Cvf VOL.000.000 ./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01 \
./tmp/init.re2c \
./tmp/perms/MyPackages.perms \
./usr/lib/custom/MyPackages.rmv \
./usr/lib/custom/re2c.rmv \
./usr/local/re2c/bin/re2c \
./usr/local/re2c/usr/man/man1/re2c.1 \
我们将这个文件的最后一行的 \ 和后面的空格全部删除。
好了,到这里,我们的第一个组件 re2c 的安装包已经接近制作完成了,下面我们还要制
作安装 build 组件的软件包。
创建 build 组件的安装目录。
$ mkdir -p /usr/work/build
同样的道理,我们进入到 /usr/work/build 目录下:
$ cd /usr/work/build
创建卷标文件(这里,我们依然假定使用 sco3.2v5.0.x 系统)
$ mkdir -p tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0
$ cd tmp/_lbl_prd=MyPackages/typ=os50/rel=1.0
$ >vol=02
创建文件安装路径(我们假定安装到 /usr/local 目录下去)
$ cd /usr/work/build
$ mkdir -p usr/local
$ cd usr/local
拷贝需要安装的文件到该目录下。(我们假定你的 build 软件都放在 /tmp/build 目录下。
)
$ cp /tmp/build/* .
创建系统安装和卸载时的脚本执行文件 init.build 和 build.rmv。
$ cd /usr/work/build
$ mkdir -p usr/lib/custom
$ cd tmp
$ >init.build
$ cd /usr/work/build/usr/lib/custom
$ >build.rmv
创建文件内容信息文件
$ cd /usr/work/build
$ find . -print >build.files
经过此步骤后,你的文件包内容信息文件的内容可能如下。
./
./tmp
./tmp/_lbl
./tmp/_lbl/prd=MyPackages
./tmp/_lbl/prd=MyPackages/typ=os50
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=02
./tmp/init.build
./usr
./usr/lib
./usr/lib/custom
./usr/lib/custom/build.rmv
./usr/local
./usr/local/build
./usr/local/build/bin
./usr/local/build/bin/buildParse
./usr/local/build/bin/buildCompress
./usr/local/build/bin/buildArchiver
此时,我们将该文件备份 2 份,文件名可以自定,这里我定义为 build01.files 和
build02.files .
$ cp build.files build01.files
$ cp build.files build02.files
然后,我们修改 build01.files ,将其中的所有目录去掉(这样做的目的是为了压缩软件
包,减少发行介质的使用,如果你不想发布经过压缩的版本,本步骤可以不做)。
修改后的 build01.files 文件内容如下:
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=02
./tmp/init.build
./usr/lib/custom/build.rmv
./usr/local/build/bin/buildParse
./usr/local/build/bin/buildCompress
./usr/local/build/bin/buildArchiver
然后,我们生成压缩脚本文件。
$ buildCompress build01.files compress.files
下面,我们开始生成你要发布的软件包的信息文件,修改你的 build02.files 文件,将该
文件中的公共目录部分去掉,只保留你自己的私有目录和所有需要发布的文件。
修改后的文件内容如下:
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=02
./tmp/init.build
./usr/lib/custom/build.rmv
./usr/local/build
./usr/local/build/bin
./usr/local/build/bin/buildParse
./usr/local/build/bin/buildCompress
./usr/local/build/bin/buildArchiver
好了,我们开始生成信息包临时文件,我取名字为 perms.files。
$ buildParse build02.files perms.files BUILD bin bin 02
执行这个命令后,你就初步生成了你的软件包信息文件。该文件的大体内容如下。
BUILD F755 bin/bin 1 ./tmp/_lbl/prd=/MyPackages/typ=os50/rel=1.0/vol=02
02
BUILD F755 bin/bin 1 ./tmp/init.build 02
BUILD F755 bin/bin 1 ./usr/lib/custom/build.rmv 02
BUILD F755 bin/bin 1 ./usr/local/build 02
BUILD F755 bin/bin 1 ./usr/local/build/bin 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildParse 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildCompress 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildArchive 02
同样的,我们还要修改文件的属性和权限。
如 ./usr/local/build 我们将其属性 F755 修改为 D644 等,修改后的内容如下:
BUILD F755 bin/bin 1 ./tmp/_lbl/prd=/MyPackages/typ=os50/rel=1.0/vol=02
02
BUILD F755 bin/bin 1 ./tmp/init.build 02
BUILD F755 bin/bin 1 ./usr/lib/custom/build.rmv 02
BUILD D644 bin/bin 1 ./usr/local/build 02
BUILD D644 bin/bin 1 ./usr/local/build/bin 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildParse 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildCompress 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildArchive 02
同样的道理,我们希望其他的任何用户都可以调用它,那么我们还需要编写安装脚本
文件 init.build,在其中加入如下语句:
ln -s /usr/local/build/bin/buildParse /usr/bin/buildParse >/dev/null 2>&1;
ln -s /usr/local/build/bin/buildCompress /usr/bin/buildCompress >/dev/null 2>&1;
ln -s /usr/local/build/bin/buildArchive /usr/bin/buildArchive >/dev/null 2>&1;
同样,我们卸载后,还是要把这些空链接删除,我们修改 build.rmv 文件,在其中加入
如下语句:
rm -rf /usr/bin/buildParse >/dev/null 2>&1;
rm -rf /usr/bin/buildCompress >/dev/null 2>&1;
rm -rf /usr/bin/buildArchive >/dev/null 2>&1;
同样,当我们卸载所有的包的时候,这些动作也必须执行,因此我们还得在
MyPackages.rmv 中加入同样的语句:
修改后,Mypackages.rmv 文件的完整内容如下:
rm -rf /usr/bin/re2c >/dev/null 2>&1 ;
rm -rf /usr/bin/buildParse >/dev/null 2>&1;
rm -rf /usr/bin/buildCompress >/dev/null 2>&1;
rm -rf /usr/bin/buildArchive >/dev/null 2>&1;
下面,我们进入到前面的 re2c/tmp/perms 目录下,修改总的信息包信息说明文件
MyPackages.perms 文件,在这个文件的最后加入 build 组件包的总信息。
#
#!BUILD 1350 BUILD For SCO OpenServer 5.0.X ( version 1.0 )
#
然后在这行后面(也是这个文件的最后)读入 build/perms.files 文件。
这样修改后的软件包信息文件 MyPackages.perms 内容如下:
#
#prd=MyPackages
#typ=os50
#rel=1.0
#set="MyPackages For SCO OpenServer 5.0.X ( version 1.0 )"
#
# User id's:
#
uid root 0
uid bin 3
#
# Group id's:
#
gid root 0
gid bin 3
#
#
#!ALL 1350 MyPackages For SCO OpenServer 5.0.X ( version 1.0)
#
ALL F755 bin/bin 1 ./usr/lib/custom/MyPackages.rmv 01
#
PERM F755 bin/bin 1 ./tmp/perms/MyPackages.perms 01
#
#!RE2C 1350 Re2c For SCO OpenServer 5.0.X ( version 0.9.11)
#
RE2C F755 bin/bin 1
./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=01
01
RE2C F755 bin/bin 1 ./tmp/init.re2c 01
RE2C F755 bin/bin 1 ./usr/lib/custom/re2c.rmv 01
RE2C F755 bin/bin 1 ./usr/local/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin 01
RE2C F755 bin/bin 1 ./usr/local/re2c/bin/re2c 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1 01
RE2C F755 bin/bin 1 ./usr/local/re2c/usr/man/man1/re2c.1 01
#
#!BUILD 1350 BUILD For SCO OpenServer 5.0.X ( version 1.0 )
#
BUILD F755 bin/bin 1
./tmp/_lbl/prd=/MyPackages/typ=os50/rel=1.0/vol=02 02
BUILD F755 bin/bin 1 ./tmp/init.build 02
BUILD F755 bin/bin 1 ./usr/lib/custom/build.rmv 02
BUILD D644 bin/bin 1 ./usr/local/build 02
BUILD D644 bin/bin 1 ./usr/local/build/bin 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildParse 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildCompress 02
BUILD F755 bin/bin 1 ./usr/local/build/bin/buildArchive 02
好了,我们的信息包的信息文档已经准备完毕了,请仔细体会例子一和例子二的信息包
文件的不同之处,特别是 PERM 、ALL 等部分,已经增加的总的删除脚本文件
MyPackages.rmv 文件的意义。
好了,到这里,我们的第二个软件包 VOL.001.000 也已经接近于成功了。
下面,我们将生成 build 组件的打包 shell 脚本文件。这里文件名我们依然可以随意定义
。我定义为 tar.sh
运行如下命令:
buildArchive build01.files tar.sh VOL.001.000
运行后生成的文件 tar.sh 的内容如下:
tar Cvf VOL.001.000 ./tmp/_lbl/prd=MyPackages/typ=os50/rel=1.0/vol=02 \
./tmp/init.build \
./usr/lib/custom/build.rmv \
./usr/local/build/bin/buildParse \
./usr/local/build/bin/buildCompress \
./usr/local/build/bin/buildArchive \
我们将这个文件的最后一行的 \ 和后面的空格全部删除。
好了,现在我们再回头来在 /usr/work/re2c 目录下,执行 sh Compress.files
$ sh compress.files
然后,我们再将 /usr/work/build 目录下的所有文件也同样压缩,执行 sh Compress.files
$ sh compress.files
最后的工作:
我们进入 /usr/work/re2c 生成第一个安装包文件 VOL.000.000
$ cd /usr/work/re2c
$ sh tar.sh
进入 /usr/work/build 生成第二个安装包文件 VOL.001.000
$ cd /usr/work/build
$ sh tar.sh
现在,我们就将生成的这两个文件 VOL.000.000 和 VOL.001.000 拷贝到一个目录下,
如 /tmp 。
现在,你可以使用 custom 来安装这个软件包了。
^_^.
[ 例二 完 ]
最后:是 buildCompress、buildParse、buildArchive 这三个文件的用法和说明。
===============================================================
buildCompress 源文件名 目标文件名
用于生成压缩软件包内所有文件的 shell 脚本。
buildParse 源文件名 目标文件名 包文件简称(这里必须大写) 宿主用户名 宿主用户组
名 所属卷号用于生成临时软件包信息文件。这里的所属卷好入 01 、02 等 ... ...
buildArchive 源文件名 目标文件名 卷文件名
用于生成打包软件包的 shell 脚本文件,这里的卷文件名 如 VOL.000.000 或者是
VOL.001.000 等。
最后的说明:这个 TAR 格式的安装包,在我所实验的过程中,发现不能包含有链接文件
,否则打包文件将不能被正确安装。解决的办法是把生成链接文件的过程写入到 “init.软
件包简称” 文件中,然后在 “软件包简称.rmv” 文件中写入逆向操作的命令。
特别注意事项:
一、关于 tar 命令不能打包空目录问题的解决方案:
解决该问题可以在空目录下创建一个 0 字节的空文件 ( > 文件名),然后修改由
buildArchive 命令生成的打包 shell 脚本文件(如本文第一个例子中的 tar.sh ),找到空
目录的对应位置,在该目录后面加入你刚才创建的空文件。这样,你打包的文件中包含
了一个空文件,但正好解决了空目录打包的问题。
二、关于多组件打包过程中的卸载脚本的编写问题:
由于卸载脚本是在你卸载的过程中根据你选择的包文件触发执行的,那么你除了在
相应的组件中包含你的卸载命令外,你还必须在你的整个包的最前沿部分加入卸载说有
的文件的卸载脚本。