Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104573302
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-03-21 17:23:06

buildCompress、buildParse、buildArchive 这三个文件是制作 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 ),找到空目录的对应位置,在该目录后面加入你刚才创建的空文件。这样,你打包的文件中包含了一个空文件,但正好解决了空目录打包的问题。

二、关于多组件打包过程中的卸载脚本的编写问题:
    由于卸载脚本是在你卸载的过程中根据你选择的包文件触发执行的,那么你除了在相应的组件中包含你的卸载命令外,你还必须在你的整个包的最前沿部分加入卸载说有的文件的卸载脚本。

阅读(624) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~