blob: 6e6b5707c255aef404d14bc771a2918a37344d4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
#! /bin/csh -ef
set prog = `/usr/bin/basename $0`
set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
set noglob
if (-x /usr/bin/mkbom) then
set mkbom=/usr/bin/mkbom
set lsbom=/usr/bin/lsbom
else
set mkbom=/usr/etc/mkbom
set lsbom=/usr/etc/lsbom
endif
if (-x /usr/bin/awk) then
set awk=/usr/bin/awk
else
set awk=/bin/awk
endif
set gnutar=/usr/bin/gnutar
set tar=/usr/bin/tar
set pax=/bin/pax
# gather parameters
if ($#argv == 0) then
echo $usage
exit(1)
endif
while ( $#argv > 0 )
switch ( $argv[1] )
case -d:
if ( $?destDir ) then
echo ${prog}: dest-dir parameter already set to ${destDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -d option requires destination directory.
echo $usage
exit(1)
else
set destDir = $argv[2]
shift; shift
breaksw
endif
case -f:
if ( $?rootDir ) then
echo ${prog}: root-dir parameter already set to ${rootDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -f option requires package root directory.
echo $usage
exit(1)
else
set rootDir = $argv[2]
set fflag
shift; shift
breaksw
endif
case -r:
if ( $?resDir ) then
echo ${prog}: resource-dir parameter already set to ${resDir}.
echo $usage
exit(1)
else if ( $#argv < 2 ) then
echo ${prog}: -r option requires package resource directory.
echo $usage
exit(1)
else
set resDir = $argv[2]
shift; shift
breaksw
endif
case -traditional:
set usetar
unset usegnutar
unset usepax
breaksw
case -gnutar:
set usegnutar
unset usepax
unset usetar
case -B:
# We got long file names, better use bigtar instead
#set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar
echo 2>&1 ${prog}: -B flag is no longer relevant.
shift
breaksw
case -*:
echo ${prog}: Unknown option: $argv[1]
echo $usage
exit(1)
case *.info:
if ( $?info ) then
echo ${prog}: info-file parameter already set to ${info}.
echo $usage
exit(1)
else
set info = "$argv[1]"
shift
breaksw
endif
case *.tiff:
if ( $?tiff ) then
echo ${prog}: tiff-file parameter already set to ${tiff}.
echo $usage
exit(1)
else
set tiff = "$argv[1]"
shift
breaksw
endif
default:
if ( $?rootDir ) then
echo ${prog}: unrecognized parameter: $argv[1]
echo $usage
exit(1)
else
set rootDir = "$argv[1]"
shift
breaksw
endif
endsw
end
# check for mandatory parameters
if ( ! $?rootDir ) then
echo ${prog}: missing root-dir parameter.
echo $usage
exit(1)
else if ( ! $?info) then
echo ${prog}: missing info-file parameter.
echo $usage
exit(1)
endif
# destDir gets default value if unset on command line
if ( $?destDir ) then
/bin/mkdir -p $destDir
else
set destDir = .
endif
# derive the root name for the package from the root name of the info file
set root = `/usr/bin/basename $info .info`
# create package directory
set pkg = ${destDir}/${root}.pkg
echo Generating Installer package $pkg ...
if ( -e $pkg ) /bin/rm -rf $pkg
/bin/mkdir -p -m 755 $pkg
# (gnu)tar/pax and compress root directory to package archive
echo -n " creating package archive ... "
if ( $?fflag ) then
set pkgTop = ${rootDir:t}
set parent = ${rootDir:h}
if ( "$parent" == "$pkgTop" ) set parent = "."
else
set parent = $rootDir
set pkgTop = .
endif
if ( $?usetar ) then
set pkgArchive = $pkg/$root.tar.Z
(cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive
else if ( $?usegnutar ) then
set pkgArchive = $pkg/$root.tar.gz
(cd $parent; $gnutar zcf $pkgArchive $pkgTop)
else
set pkgArchive = $pkg/$root.pax.gz
(cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive
endif
/bin/chmod 444 $pkgArchive
echo done.
# copy info file to package
set pkgInfo = $pkg/$root.info
echo -n " copying ${info:t} ... "
/bin/cp $info $pkgInfo
/bin/chmod 444 $pkgInfo
echo done.
# copy tiff file to package
if ( $?tiff ) then
set pkgTiff = $pkg/$root.tiff
echo -n " copying ${tiff:t} ... "
/bin/cp $tiff $pkgTiff
/bin/chmod 444 $pkgTiff
echo done.
endif
# copy resources to package
if ( $?resDir ) then
echo -n " copying ${resDir:t} ... "
# don't want to see push/pop output
pushd $resDir > /dev/null
# get lists of resources. We'll want to change
# permissions on just these things later.
set directoriesInResDir = `find . -type d`
set filesInResDir = `find . -type f`
popd > /dev/null
# copy the resource directory contents into the package directory
foreach resFile (`ls $resDir`)
cp -r $resDir/$resFile $pkg
end
pushd $pkg > /dev/null
# Change all directories to +r+x, except the package
# directory itself
foreach resFileItem ($directoriesInResDir)
if ( $resFileItem != "." ) then
chmod 555 $resFileItem
endif
end
# change all flat files to read only
foreach resFileItem ($filesInResDir)
chmod 444 $resFileItem
end
popd > /dev/null
echo done.
endif
# generate bom file
set pkgBom = $pkg/$root.bom
echo -n " generating bom file ... "
/bin/rm -f $pkgBom
if ( $?fflag ) then
$mkbom $parent $pkgBom >& /dev/null
else
$mkbom $rootDir $pkgBom >& /dev/null
endif
/bin/chmod 444 $pkgArchive
echo done.
# generate sizes file
set pkgSizes = $pkg/$root.sizes
echo -n " generating sizes file ... "
# compute number of files in package
set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l`
# compute package size when compressed
@ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'`
@ compressedSize += 3 # add 1KB each for sizes, location, status files
@ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'`
@ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'`
if ( $?tiff ) then
@ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'`
else
@ tiffSize = 0
endif
@ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'`
@ installedSize += $infoSize + $bomSize + $tiffSize + 3
# echo size parameters to sizes file
echo NumFiles $numFiles > $pkgSizes
echo InstalledSize $installedSize >> $pkgSizes
echo CompressedSize $compressedSize >> $pkgSizes
echo done.
echo " ... finished generating $pkg."
exit(0)
# end package
|