omnibus 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +9 -0
- data/.rspec +1 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +9 -0
- data/LICENSE +201 -0
- data/NOTICE +9 -0
- data/README.md +186 -0
- data/Rakefile +7 -0
- data/bin/makeself-header.sh +401 -0
- data/bin/makeself.sh +407 -0
- data/bin/omnibus +11 -0
- data/lib/omnibus.rb +280 -0
- data/lib/omnibus/build_version.rb +281 -0
- data/lib/omnibus/builder.rb +323 -0
- data/lib/omnibus/clean_tasks.rb +30 -0
- data/lib/omnibus/cli.rb +35 -0
- data/lib/omnibus/cli/application.rb +136 -0
- data/lib/omnibus/cli/base.rb +112 -0
- data/lib/omnibus/cli/build.rb +66 -0
- data/lib/omnibus/cli/cache.rb +60 -0
- data/lib/omnibus/config.rb +186 -0
- data/lib/omnibus/exceptions.rb +54 -0
- data/lib/omnibus/fetcher.rb +184 -0
- data/lib/omnibus/fetchers.rb +22 -0
- data/lib/omnibus/fetchers/git_fetcher.rb +212 -0
- data/lib/omnibus/fetchers/net_fetcher.rb +191 -0
- data/lib/omnibus/fetchers/path_fetcher.rb +65 -0
- data/lib/omnibus/fetchers/s3_cache_fetcher.rb +42 -0
- data/lib/omnibus/health_check.rb +260 -0
- data/lib/omnibus/library.rb +70 -0
- data/lib/omnibus/overrides.rb +69 -0
- data/lib/omnibus/project.rb +566 -0
- data/lib/omnibus/reports.rb +99 -0
- data/lib/omnibus/s3_cacher.rb +136 -0
- data/lib/omnibus/software.rb +430 -0
- data/lib/omnibus/templates/Berksfile.erb +3 -0
- data/lib/omnibus/templates/Gemfile.erb +4 -0
- data/lib/omnibus/templates/README.md.erb +102 -0
- data/lib/omnibus/templates/Vagrantfile.erb +95 -0
- data/lib/omnibus/templates/gitignore.erb +8 -0
- data/lib/omnibus/templates/omnibus.rb.example.erb +5 -0
- data/lib/omnibus/templates/package_scripts/makeselfinst.erb +27 -0
- data/lib/omnibus/templates/package_scripts/postinst.erb +17 -0
- data/lib/omnibus/templates/package_scripts/postrm.erb +9 -0
- data/lib/omnibus/templates/project.rb.erb +21 -0
- data/lib/omnibus/templates/software/c-example.rb.erb +42 -0
- data/lib/omnibus/templates/software/erlang-example.rb.erb +38 -0
- data/lib/omnibus/templates/software/ruby-example.rb.erb +24 -0
- data/lib/omnibus/util.rb +61 -0
- data/lib/omnibus/version.rb +20 -0
- data/omnibus.gemspec +34 -0
- data/spec/build_version_spec.rb +228 -0
- data/spec/data/overrides/bad_line.overrides +3 -0
- data/spec/data/overrides/good.overrides +5 -0
- data/spec/data/overrides/with_dupes.overrides +4 -0
- data/spec/data/software/erchef.rb +40 -0
- data/spec/overrides_spec.rb +114 -0
- data/spec/software_spec.rb +71 -0
- data/spec/spec_helper.rb +28 -0
- metadata +239 -0
data/Rakefile
ADDED
@@ -0,0 +1,401 @@
|
|
1
|
+
cat << EOF > "$archname"
|
2
|
+
#!/bin/sh
|
3
|
+
# This script was generated using Makeself $MS_VERSION
|
4
|
+
|
5
|
+
CRCsum="$CRCsum"
|
6
|
+
MD5="$MD5sum"
|
7
|
+
TMPROOT=\${TMPDIR:=/tmp}
|
8
|
+
|
9
|
+
label="$LABEL"
|
10
|
+
script="$SCRIPT"
|
11
|
+
scriptargs="$SCRIPTARGS"
|
12
|
+
targetdir="$archdirname"
|
13
|
+
filesizes="$filesizes"
|
14
|
+
keep=$KEEP
|
15
|
+
|
16
|
+
print_cmd_arg=""
|
17
|
+
if type printf > /dev/null; then
|
18
|
+
print_cmd="printf"
|
19
|
+
elif test -x /usr/ucb/echo; then
|
20
|
+
print_cmd="/usr/ucb/echo"
|
21
|
+
else
|
22
|
+
print_cmd="echo"
|
23
|
+
fi
|
24
|
+
|
25
|
+
unset CDPATH
|
26
|
+
|
27
|
+
MS_Printf()
|
28
|
+
{
|
29
|
+
\$print_cmd \$print_cmd_arg "\$1"
|
30
|
+
}
|
31
|
+
|
32
|
+
MS_Progress()
|
33
|
+
{
|
34
|
+
while read a; do
|
35
|
+
MS_Printf .
|
36
|
+
done
|
37
|
+
}
|
38
|
+
|
39
|
+
MS_diskspace()
|
40
|
+
{
|
41
|
+
(
|
42
|
+
if test -d /usr/xpg4/bin; then
|
43
|
+
PATH=/usr/xpg4/bin:\$PATH
|
44
|
+
fi
|
45
|
+
df -kP "\$1" | tail -1 | awk '{print \$4}'
|
46
|
+
)
|
47
|
+
}
|
48
|
+
|
49
|
+
MS_dd()
|
50
|
+
{
|
51
|
+
blocks=\`expr \$3 / 1024\`
|
52
|
+
bytes=\`expr \$3 % 1024\`
|
53
|
+
dd if="\$1" ibs=\$2 skip=1 obs=1024 conv=sync 2> /dev/null | \\
|
54
|
+
{ test \$blocks -gt 0 && dd ibs=1024 obs=1024 count=\$blocks ; \\
|
55
|
+
test \$bytes -gt 0 && dd ibs=1 obs=1024 count=\$bytes ; } 2> /dev/null
|
56
|
+
}
|
57
|
+
|
58
|
+
MS_Help()
|
59
|
+
{
|
60
|
+
cat << EOH >&2
|
61
|
+
Makeself version $MS_VERSION
|
62
|
+
1) Getting help or info about \$0 :
|
63
|
+
\$0 --help Print this message
|
64
|
+
\$0 --info Print embedded info : title, default target directory, embedded script ...
|
65
|
+
\$0 --lsm Print embedded lsm entry (or no LSM)
|
66
|
+
\$0 --list Print the list of files in the archive
|
67
|
+
\$0 --check Checks integrity of the archive
|
68
|
+
|
69
|
+
2) Running \$0 :
|
70
|
+
\$0 [options] [--] [additional arguments to embedded script]
|
71
|
+
with following options (in that order)
|
72
|
+
--confirm Ask before running embedded script
|
73
|
+
--noexec Do not run embedded script
|
74
|
+
--keep Do not erase target directory after running
|
75
|
+
the embedded script
|
76
|
+
--nox11 Do not spawn an xterm
|
77
|
+
--nochown Do not give the extracted files to the current user
|
78
|
+
--target NewDirectory Extract in NewDirectory
|
79
|
+
--tar arg1 [arg2 ...] Access the contents of the archive through the tar command
|
80
|
+
-- Following arguments will be passed to the embedded script
|
81
|
+
EOH
|
82
|
+
}
|
83
|
+
|
84
|
+
MS_Check()
|
85
|
+
{
|
86
|
+
OLD_PATH="\$PATH"
|
87
|
+
PATH=\${GUESS_MD5_PATH:-"\$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
|
88
|
+
MD5_ARG=""
|
89
|
+
MD5_PATH=\`exec <&- 2>&-; which md5sum || type md5sum\`
|
90
|
+
test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which md5 || type md5\`
|
91
|
+
test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which digest || type digest\`
|
92
|
+
PATH="\$OLD_PATH"
|
93
|
+
|
94
|
+
MS_Printf "Verifying archive integrity..."
|
95
|
+
offset=\`head -n $SKIP "\$1" | wc -c | tr -d " "\`
|
96
|
+
verb=\$2
|
97
|
+
i=1
|
98
|
+
for s in \$filesizes
|
99
|
+
do
|
100
|
+
crc=\`echo \$CRCsum | cut -d" " -f\$i\`
|
101
|
+
if test -x "\$MD5_PATH"; then
|
102
|
+
if test \`basename \$MD5_PATH\` = digest; then
|
103
|
+
MD5_ARG="-a md5"
|
104
|
+
fi
|
105
|
+
md5=\`echo \$MD5 | cut -d" " -f\$i\`
|
106
|
+
if test \$md5 = "00000000000000000000000000000000"; then
|
107
|
+
test x\$verb = xy && echo " \$1 does not contain an embedded MD5 checksum." >&2
|
108
|
+
else
|
109
|
+
md5sum=\`MS_dd "\$1" \$offset \$s | eval "\$MD5_PATH \$MD5_ARG" | cut -b-32\`;
|
110
|
+
if test "\$md5sum" != "\$md5"; then
|
111
|
+
echo "Error in MD5 checksums: \$md5sum is different from \$md5" >&2
|
112
|
+
exit 2
|
113
|
+
else
|
114
|
+
test x\$verb = xy && MS_Printf " MD5 checksums are OK." >&2
|
115
|
+
fi
|
116
|
+
crc="0000000000"; verb=n
|
117
|
+
fi
|
118
|
+
fi
|
119
|
+
if test \$crc = "0000000000"; then
|
120
|
+
test x\$verb = xy && echo " \$1 does not contain a CRC checksum." >&2
|
121
|
+
else
|
122
|
+
sum1=\`MS_dd "\$1" \$offset \$s | CMD_ENV=xpg4 cksum | awk '{print \$1}'\`
|
123
|
+
if test "\$sum1" = "\$crc"; then
|
124
|
+
test x\$verb = xy && MS_Printf " CRC checksums are OK." >&2
|
125
|
+
else
|
126
|
+
echo "Error in checksums: \$sum1 is different from \$crc"
|
127
|
+
exit 2;
|
128
|
+
fi
|
129
|
+
fi
|
130
|
+
i=\`expr \$i + 1\`
|
131
|
+
offset=\`expr \$offset + \$s\`
|
132
|
+
done
|
133
|
+
echo " All good."
|
134
|
+
}
|
135
|
+
|
136
|
+
UnTAR()
|
137
|
+
{
|
138
|
+
tar \$1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 \$$; }
|
139
|
+
}
|
140
|
+
|
141
|
+
finish=true
|
142
|
+
xterm_loop=
|
143
|
+
nox11=$NOX11
|
144
|
+
copy=$COPY
|
145
|
+
ownership=y
|
146
|
+
verbose=n
|
147
|
+
|
148
|
+
initargs="\$@"
|
149
|
+
|
150
|
+
while true
|
151
|
+
do
|
152
|
+
case "\$1" in
|
153
|
+
-h | --help)
|
154
|
+
MS_Help
|
155
|
+
exit 0
|
156
|
+
;;
|
157
|
+
--info)
|
158
|
+
echo Identification: "\$label"
|
159
|
+
echo Target directory: "\$targetdir"
|
160
|
+
echo Uncompressed size: $USIZE KB
|
161
|
+
echo Compression: $COMPRESS
|
162
|
+
echo Date of packaging: $DATE
|
163
|
+
echo Built with Makeself version $MS_VERSION on $OSTYPE
|
164
|
+
echo Build command was: "$MS_COMMAND"
|
165
|
+
if test x\$script != x; then
|
166
|
+
echo Script run after extraction:
|
167
|
+
echo " " \$script \$scriptargs
|
168
|
+
fi
|
169
|
+
if test x"$copy" = xcopy; then
|
170
|
+
echo "Archive will copy itself to a temporary location"
|
171
|
+
fi
|
172
|
+
if test x"$KEEP" = xy; then
|
173
|
+
echo "directory \$targetdir is permanent"
|
174
|
+
else
|
175
|
+
echo "\$targetdir will be removed after extraction"
|
176
|
+
fi
|
177
|
+
exit 0
|
178
|
+
;;
|
179
|
+
--dumpconf)
|
180
|
+
echo LABEL=\"\$label\"
|
181
|
+
echo SCRIPT=\"\$script\"
|
182
|
+
echo SCRIPTARGS=\"\$scriptargs\"
|
183
|
+
echo archdirname=\"$archdirname\"
|
184
|
+
echo KEEP=$KEEP
|
185
|
+
echo COMPRESS=$COMPRESS
|
186
|
+
echo filesizes=\"\$filesizes\"
|
187
|
+
echo CRCsum=\"\$CRCsum\"
|
188
|
+
echo MD5sum=\"\$MD5\"
|
189
|
+
echo OLDUSIZE=$USIZE
|
190
|
+
echo OLDSKIP=`expr $SKIP + 1`
|
191
|
+
exit 0
|
192
|
+
;;
|
193
|
+
--lsm)
|
194
|
+
cat << EOLSM
|
195
|
+
EOF
|
196
|
+
eval "$LSM_CMD"
|
197
|
+
cat << EOF >> "$archname"
|
198
|
+
EOLSM
|
199
|
+
exit 0
|
200
|
+
;;
|
201
|
+
--list)
|
202
|
+
echo Target directory: \$targetdir
|
203
|
+
offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
|
204
|
+
for s in \$filesizes
|
205
|
+
do
|
206
|
+
MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | UnTAR t
|
207
|
+
offset=\`expr \$offset + \$s\`
|
208
|
+
done
|
209
|
+
exit 0
|
210
|
+
;;
|
211
|
+
--tar)
|
212
|
+
offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
|
213
|
+
arg1="\$2"
|
214
|
+
shift 2
|
215
|
+
for s in \$filesizes
|
216
|
+
do
|
217
|
+
MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | tar "\$arg1" - \$*
|
218
|
+
offset=\`expr \$offset + \$s\`
|
219
|
+
done
|
220
|
+
exit 0
|
221
|
+
;;
|
222
|
+
--check)
|
223
|
+
MS_Check "\$0" y
|
224
|
+
exit 0
|
225
|
+
;;
|
226
|
+
--confirm)
|
227
|
+
verbose=y
|
228
|
+
shift
|
229
|
+
;;
|
230
|
+
--noexec)
|
231
|
+
script=""
|
232
|
+
shift
|
233
|
+
;;
|
234
|
+
--keep)
|
235
|
+
keep=y
|
236
|
+
shift
|
237
|
+
;;
|
238
|
+
--target)
|
239
|
+
keep=y
|
240
|
+
targetdir=\${2:-.}
|
241
|
+
shift 2
|
242
|
+
;;
|
243
|
+
--nox11)
|
244
|
+
nox11=y
|
245
|
+
shift
|
246
|
+
;;
|
247
|
+
--nochown)
|
248
|
+
ownership=n
|
249
|
+
shift
|
250
|
+
;;
|
251
|
+
--xwin)
|
252
|
+
finish="echo Press Return to close this window...; read junk"
|
253
|
+
xterm_loop=1
|
254
|
+
shift
|
255
|
+
;;
|
256
|
+
--phase2)
|
257
|
+
copy=phase2
|
258
|
+
shift
|
259
|
+
;;
|
260
|
+
--)
|
261
|
+
shift
|
262
|
+
break ;;
|
263
|
+
-*)
|
264
|
+
echo Unrecognized flag : "\$1" >&2
|
265
|
+
MS_Help
|
266
|
+
exit 1
|
267
|
+
;;
|
268
|
+
*)
|
269
|
+
break ;;
|
270
|
+
esac
|
271
|
+
done
|
272
|
+
|
273
|
+
case "\$copy" in
|
274
|
+
copy)
|
275
|
+
tmpdir=\$TMPROOT/makeself.\$RANDOM.\`date +"%y%m%d%H%M%S"\`.\$\$
|
276
|
+
mkdir "\$tmpdir" || {
|
277
|
+
echo "Could not create temporary directory \$tmpdir" >&2
|
278
|
+
exit 1
|
279
|
+
}
|
280
|
+
SCRIPT_COPY="\$tmpdir/makeself"
|
281
|
+
echo "Copying to a temporary location..." >&2
|
282
|
+
cp "\$0" "\$SCRIPT_COPY"
|
283
|
+
chmod +x "\$SCRIPT_COPY"
|
284
|
+
cd "\$TMPROOT"
|
285
|
+
exec "\$SCRIPT_COPY" --phase2 -- \$initargs
|
286
|
+
;;
|
287
|
+
phase2)
|
288
|
+
finish="\$finish ; rm -rf \`dirname \$0\`"
|
289
|
+
;;
|
290
|
+
esac
|
291
|
+
|
292
|
+
if test "\$nox11" = "n"; then
|
293
|
+
if tty -s; then # Do we have a terminal?
|
294
|
+
:
|
295
|
+
else
|
296
|
+
if test x"\$DISPLAY" != x -a x"\$xterm_loop" = x; then # No, but do we have X?
|
297
|
+
if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
|
298
|
+
GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
|
299
|
+
for a in \$GUESS_XTERMS; do
|
300
|
+
if type \$a >/dev/null 2>&1; then
|
301
|
+
XTERM=\$a
|
302
|
+
break
|
303
|
+
fi
|
304
|
+
done
|
305
|
+
chmod a+x \$0 || echo Please add execution rights on \$0
|
306
|
+
if test \`echo "\$0" | cut -c1\` = "/"; then # Spawn a terminal!
|
307
|
+
exec \$XTERM -title "\$label" -e "\$0" --xwin "\$initargs"
|
308
|
+
else
|
309
|
+
exec \$XTERM -title "\$label" -e "./\$0" --xwin "\$initargs"
|
310
|
+
fi
|
311
|
+
fi
|
312
|
+
fi
|
313
|
+
fi
|
314
|
+
fi
|
315
|
+
|
316
|
+
if test "\$targetdir" = "."; then
|
317
|
+
tmpdir="."
|
318
|
+
else
|
319
|
+
if test "\$keep" = y; then
|
320
|
+
echo "Creating directory \$targetdir" >&2
|
321
|
+
tmpdir="\$targetdir"
|
322
|
+
dashp="-p"
|
323
|
+
else
|
324
|
+
tmpdir="\$TMPROOT/selfgz\$\$\$RANDOM"
|
325
|
+
dashp=""
|
326
|
+
fi
|
327
|
+
mkdir \$dashp \$tmpdir || {
|
328
|
+
echo 'Cannot create target directory' \$tmpdir >&2
|
329
|
+
echo 'You should try option --target OtherDirectory' >&2
|
330
|
+
eval \$finish
|
331
|
+
exit 1
|
332
|
+
}
|
333
|
+
fi
|
334
|
+
|
335
|
+
location="\`pwd\`"
|
336
|
+
if test x\$SETUP_NOCHECK != x1; then
|
337
|
+
MS_Check "\$0"
|
338
|
+
fi
|
339
|
+
offset=\`head -n $SKIP "\$0" | wc -c | tr -d " "\`
|
340
|
+
|
341
|
+
if test x"\$verbose" = xy; then
|
342
|
+
MS_Printf "About to extract $USIZE KB in \$tmpdir ... Proceed ? [Y/n] "
|
343
|
+
read yn
|
344
|
+
if test x"\$yn" = xn; then
|
345
|
+
eval \$finish; exit 1
|
346
|
+
fi
|
347
|
+
fi
|
348
|
+
|
349
|
+
MS_Printf "Uncompressing \$label"
|
350
|
+
res=3
|
351
|
+
if test "\$keep" = n; then
|
352
|
+
trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; /bin/rm -rf \$tmpdir; eval \$finish; exit 15' 1 2 3 15
|
353
|
+
fi
|
354
|
+
|
355
|
+
leftspace=\`MS_diskspace \$tmpdir\`
|
356
|
+
if test \$leftspace -lt $USIZE; then
|
357
|
+
echo
|
358
|
+
echo "Not enough space left in "\`dirname \$tmpdir\`" (\$leftspace KB) to decompress \$0 ($USIZE KB)" >&2
|
359
|
+
if test "\$keep" = n; then
|
360
|
+
echo "Consider setting TMPDIR to a directory with more free space."
|
361
|
+
fi
|
362
|
+
eval \$finish; exit 1
|
363
|
+
fi
|
364
|
+
|
365
|
+
for s in \$filesizes
|
366
|
+
do
|
367
|
+
if MS_dd "\$0" \$offset \$s | eval "$GUNZIP_CMD" | ( cd "\$tmpdir"; UnTAR x ) | MS_Progress; then
|
368
|
+
if test x"\$ownership" = xy; then
|
369
|
+
(PATH=/usr/xpg4/bin:\$PATH; cd "\$tmpdir"; chown -R \`id -u\` .; chgrp -R \`id -g\` .)
|
370
|
+
fi
|
371
|
+
else
|
372
|
+
echo
|
373
|
+
echo "Unable to decompress \$0" >&2
|
374
|
+
eval \$finish; exit 1
|
375
|
+
fi
|
376
|
+
offset=\`expr \$offset + \$s\`
|
377
|
+
done
|
378
|
+
echo
|
379
|
+
|
380
|
+
cd "\$tmpdir"
|
381
|
+
res=0
|
382
|
+
if test x"\$script" != x; then
|
383
|
+
if test x"\$verbose" = xy; then
|
384
|
+
MS_Printf "OK to execute: \$script \$scriptargs \$* ? [Y/n] "
|
385
|
+
read yn
|
386
|
+
if test x"\$yn" = x -o x"\$yn" = xy -o x"\$yn" = xY; then
|
387
|
+
eval \$script \$scriptargs \$*; res=\$?;
|
388
|
+
fi
|
389
|
+
else
|
390
|
+
eval \$script \$scriptargs \$*; res=\$?
|
391
|
+
fi
|
392
|
+
if test \$res -ne 0; then
|
393
|
+
test x"\$verbose" = xy && echo "The program '\$script' returned an error code (\$res)" >&2
|
394
|
+
fi
|
395
|
+
fi
|
396
|
+
if test "\$keep" = n; then
|
397
|
+
cd \$TMPROOT
|
398
|
+
/bin/rm -rf \$tmpdir
|
399
|
+
fi
|
400
|
+
eval \$finish; exit \$res
|
401
|
+
EOF
|
data/bin/makeself.sh
ADDED
@@ -0,0 +1,407 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# Makeself version 2.1.x
|
4
|
+
# by Stephane Peter <megastep@megastep.org>
|
5
|
+
#
|
6
|
+
# $Id: makeself.sh,v 1.64 2008/01/04 23:52:14 megastep Exp $
|
7
|
+
#
|
8
|
+
# Utility to create self-extracting tar.gz archives.
|
9
|
+
# The resulting archive is a file holding the tar.gz archive with
|
10
|
+
# a small Shell script stub that uncompresses the archive to a temporary
|
11
|
+
# directory and then executes a given script from withing that directory.
|
12
|
+
#
|
13
|
+
# Makeself home page: http://www.megastep.org/makeself/
|
14
|
+
#
|
15
|
+
# Version 2.0 is a rewrite of version 1.0 to make the code easier to read and maintain.
|
16
|
+
#
|
17
|
+
# Version history :
|
18
|
+
# - 1.0 : Initial public release
|
19
|
+
# - 1.1 : The archive can be passed parameters that will be passed on to
|
20
|
+
# the embedded script, thanks to John C. Quillan
|
21
|
+
# - 1.2 : Package distribution, bzip2 compression, more command line options,
|
22
|
+
# support for non-temporary archives. Ideas thanks to Francois Petitjean
|
23
|
+
# - 1.3 : More patches from Bjarni R. Einarsson and Francois Petitjean:
|
24
|
+
# Support for no compression (--nocomp), script is no longer mandatory,
|
25
|
+
# automatic launch in an xterm, optional verbose output, and -target
|
26
|
+
# archive option to indicate where to extract the files.
|
27
|
+
# - 1.4 : Improved UNIX compatibility (Francois Petitjean)
|
28
|
+
# Automatic integrity checking, support of LSM files (Francois Petitjean)
|
29
|
+
# - 1.5 : Many bugfixes. Optionally disable xterm spawning.
|
30
|
+
# - 1.5.1 : More bugfixes, added archive options -list and -check.
|
31
|
+
# - 1.5.2 : Cosmetic changes to inform the user of what's going on with big
|
32
|
+
# archives (Quake III demo)
|
33
|
+
# - 1.5.3 : Check for validity of the DISPLAY variable before launching an xterm.
|
34
|
+
# More verbosity in xterms and check for embedded command's return value.
|
35
|
+
# Bugfix for Debian 2.0 systems that have a different "print" command.
|
36
|
+
# - 1.5.4 : Many bugfixes. Print out a message if the extraction failed.
|
37
|
+
# - 1.5.5 : More bugfixes. Added support for SETUP_NOCHECK environment variable to
|
38
|
+
# bypass checksum verification of archives.
|
39
|
+
# - 1.6.0 : Compute MD5 checksums with the md5sum command (patch from Ryan Gordon)
|
40
|
+
# - 2.0 : Brand new rewrite, cleaner architecture, separated header and UNIX ports.
|
41
|
+
# - 2.0.1 : Added --copy
|
42
|
+
# - 2.1.0 : Allow multiple tarballs to be stored in one archive, and incremental updates.
|
43
|
+
# Added --nochown for archives
|
44
|
+
# Stopped doing redundant checksums when not necesary
|
45
|
+
# - 2.1.1 : Work around insane behavior from certain Linux distros with no 'uncompress' command
|
46
|
+
# Cleaned up the code to handle error codes from compress. Simplified the extraction code.
|
47
|
+
# - 2.1.2 : Some bug fixes. Use head -n to avoid problems.
|
48
|
+
# - 2.1.3 : Bug fixes with command line when spawning terminals.
|
49
|
+
# Added --tar for archives, allowing to give arbitrary arguments to tar on the contents of the archive.
|
50
|
+
# Added --noexec to prevent execution of embedded scripts.
|
51
|
+
# Added --nomd5 and --nocrc to avoid creating checksums in archives.
|
52
|
+
# Added command used to create the archive in --info output.
|
53
|
+
# Run the embedded script through eval.
|
54
|
+
# - 2.1.4 : Fixed --info output.
|
55
|
+
# Generate random directory name when extracting files to . to avoid problems. (Jason Trent)
|
56
|
+
# Better handling of errors with wrong permissions for the directory containing the files. (Jason Trent)
|
57
|
+
# Avoid some race conditions (Ludwig Nussel)
|
58
|
+
# Unset the $CDPATH variable to avoid problems if it is set. (Debian)
|
59
|
+
# Better handling of dot files in the archive directory.
|
60
|
+
# - 2.1.5 : Made the md5sum detection consistent with the header code.
|
61
|
+
# Check for the presence of the archive directory
|
62
|
+
# Added --encrypt for symmetric encryption through gpg (Eric Windisch)
|
63
|
+
# Added support for the digest command on Solaris 10 for MD5 checksums
|
64
|
+
# Check for available disk space before extracting to the target directory (Andreas Schweitzer)
|
65
|
+
# Allow extraction to run asynchronously (patch by Peter Hatch)
|
66
|
+
# Use file descriptors internally to avoid error messages (patch by Kay Tiong Khoo)
|
67
|
+
#
|
68
|
+
# (C) 1998-2008 by St�phane Peter <megastep@megastep.org>
|
69
|
+
#
|
70
|
+
# This software is released under the terms of the GNU GPL version 2 and above
|
71
|
+
# Please read the license at http://www.gnu.org/copyleft/gpl.html
|
72
|
+
#
|
73
|
+
|
74
|
+
MS_VERSION=2.1.5
|
75
|
+
MS_COMMAND="$0"
|
76
|
+
unset CDPATH
|
77
|
+
|
78
|
+
for f in "${1+"$@"}"; do
|
79
|
+
MS_COMMAND="$MS_COMMAND \\\\
|
80
|
+
\\\"$f\\\""
|
81
|
+
done
|
82
|
+
|
83
|
+
# Procedures
|
84
|
+
|
85
|
+
MS_Usage()
|
86
|
+
{
|
87
|
+
echo "Usage: $0 [params] archive_dir file_name label [startup_script] [args]"
|
88
|
+
echo "params can be one or more of the following :"
|
89
|
+
echo " --version | -v : Print out Makeself version number and exit"
|
90
|
+
echo " --help | -h : Print out this help message"
|
91
|
+
echo " --gzip : Compress using gzip (default if detected)"
|
92
|
+
echo " --bzip2 : Compress using bzip2 instead of gzip"
|
93
|
+
echo " --compress : Compress using the UNIX 'compress' command"
|
94
|
+
echo " --nocomp : Do not compress the data"
|
95
|
+
echo " --notemp : The archive will create archive_dir in the"
|
96
|
+
echo " current directory and uncompress in ./archive_dir"
|
97
|
+
echo " --copy : Upon extraction, the archive will first copy itself to"
|
98
|
+
echo " a temporary directory"
|
99
|
+
echo " --append : Append more files to an existing Makeself archive"
|
100
|
+
echo " The label and startup scripts will then be ignored"
|
101
|
+
echo " --current : Files will be extracted to the current directory."
|
102
|
+
echo " Implies --notemp."
|
103
|
+
echo " --nomd5 : Don't calculate an MD5 for archive"
|
104
|
+
echo " --nocrc : Don't calculate a CRC for archive"
|
105
|
+
echo " --header file : Specify location of the header script"
|
106
|
+
echo " --follow : Follow the symlinks in the archive"
|
107
|
+
echo " --nox11 : Disable automatic spawn of a xterm"
|
108
|
+
echo " --nowait : Do not wait for user input after executing embedded"
|
109
|
+
echo " program from an xterm"
|
110
|
+
echo " --lsm file : LSM file describing the package"
|
111
|
+
echo
|
112
|
+
echo "Do not forget to give a fully qualified startup script name"
|
113
|
+
echo "(i.e. with a ./ prefix if inside the archive)."
|
114
|
+
exit 1
|
115
|
+
}
|
116
|
+
|
117
|
+
# Default settings
|
118
|
+
if type gzip 2>&1 > /dev/null; then
|
119
|
+
COMPRESS=gzip
|
120
|
+
else
|
121
|
+
COMPRESS=Unix
|
122
|
+
fi
|
123
|
+
KEEP=n
|
124
|
+
CURRENT=n
|
125
|
+
NOX11=n
|
126
|
+
APPEND=n
|
127
|
+
COPY=none
|
128
|
+
TAR_ARGS=cvf
|
129
|
+
HEADER=`dirname $0`/makeself-header.sh
|
130
|
+
|
131
|
+
# LSM file stuff
|
132
|
+
LSM_CMD="echo No LSM. >> \"\$archname\""
|
133
|
+
|
134
|
+
while true
|
135
|
+
do
|
136
|
+
case "$1" in
|
137
|
+
--version | -v)
|
138
|
+
echo Makeself version $MS_VERSION
|
139
|
+
exit 0
|
140
|
+
;;
|
141
|
+
--bzip2)
|
142
|
+
COMPRESS=bzip2
|
143
|
+
shift
|
144
|
+
;;
|
145
|
+
--gzip)
|
146
|
+
COMPRESS=gzip
|
147
|
+
shift
|
148
|
+
;;
|
149
|
+
--compress)
|
150
|
+
COMPRESS=Unix
|
151
|
+
shift
|
152
|
+
;;
|
153
|
+
--encrypt)
|
154
|
+
COMPRESS=gpg
|
155
|
+
shift
|
156
|
+
;;
|
157
|
+
--nocomp)
|
158
|
+
COMPRESS=none
|
159
|
+
shift
|
160
|
+
;;
|
161
|
+
--notemp)
|
162
|
+
KEEP=y
|
163
|
+
shift
|
164
|
+
;;
|
165
|
+
--copy)
|
166
|
+
COPY=copy
|
167
|
+
shift
|
168
|
+
;;
|
169
|
+
--current)
|
170
|
+
CURRENT=y
|
171
|
+
KEEP=y
|
172
|
+
shift
|
173
|
+
;;
|
174
|
+
--header)
|
175
|
+
HEADER="$2"
|
176
|
+
shift 2
|
177
|
+
;;
|
178
|
+
--follow)
|
179
|
+
TAR_ARGS=cvfh
|
180
|
+
shift
|
181
|
+
;;
|
182
|
+
--nox11)
|
183
|
+
NOX11=y
|
184
|
+
shift
|
185
|
+
;;
|
186
|
+
--nowait)
|
187
|
+
shift
|
188
|
+
;;
|
189
|
+
--nomd5)
|
190
|
+
NOMD5=y
|
191
|
+
shift
|
192
|
+
;;
|
193
|
+
--nocrc)
|
194
|
+
NOCRC=y
|
195
|
+
shift
|
196
|
+
;;
|
197
|
+
--append)
|
198
|
+
APPEND=y
|
199
|
+
shift
|
200
|
+
;;
|
201
|
+
--lsm)
|
202
|
+
LSM_CMD="cat \"$2\" >> \"\$archname\""
|
203
|
+
shift 2
|
204
|
+
;;
|
205
|
+
-h | --help)
|
206
|
+
MS_Usage
|
207
|
+
;;
|
208
|
+
-*)
|
209
|
+
echo Unrecognized flag : "$1"
|
210
|
+
MS_Usage
|
211
|
+
;;
|
212
|
+
*)
|
213
|
+
break
|
214
|
+
;;
|
215
|
+
esac
|
216
|
+
done
|
217
|
+
|
218
|
+
if test $# -lt 1; then
|
219
|
+
MS_Usage
|
220
|
+
else
|
221
|
+
if test -d "$1"; then
|
222
|
+
archdir="$1"
|
223
|
+
else
|
224
|
+
echo "Directory $1 does not exist."
|
225
|
+
exit 1
|
226
|
+
fi
|
227
|
+
fi
|
228
|
+
archname="$2"
|
229
|
+
|
230
|
+
if test "$APPEND" = y; then
|
231
|
+
if test $# -lt 2; then
|
232
|
+
MS_Usage
|
233
|
+
fi
|
234
|
+
|
235
|
+
# Gather the info from the original archive
|
236
|
+
OLDENV=`sh "$archname" --dumpconf`
|
237
|
+
if test $? -ne 0; then
|
238
|
+
echo "Unable to update archive: $archname" >&2
|
239
|
+
exit 1
|
240
|
+
else
|
241
|
+
eval "$OLDENV"
|
242
|
+
fi
|
243
|
+
else
|
244
|
+
if test "$KEEP" = n -a $# = 3; then
|
245
|
+
echo "ERROR: Making a temporary archive with no embedded command does not make sense!" >&2
|
246
|
+
echo
|
247
|
+
MS_Usage
|
248
|
+
fi
|
249
|
+
# We don't really want to create an absolute directory...
|
250
|
+
if test "$CURRENT" = y; then
|
251
|
+
archdirname="."
|
252
|
+
else
|
253
|
+
archdirname=`basename "$1"`
|
254
|
+
fi
|
255
|
+
|
256
|
+
if test $# -lt 3; then
|
257
|
+
MS_Usage
|
258
|
+
fi
|
259
|
+
|
260
|
+
LABEL="$3"
|
261
|
+
SCRIPT="$4"
|
262
|
+
test x$SCRIPT = x || shift 1
|
263
|
+
shift 3
|
264
|
+
SCRIPTARGS="$*"
|
265
|
+
fi
|
266
|
+
|
267
|
+
if test "$KEEP" = n -a "$CURRENT" = y; then
|
268
|
+
echo "ERROR: It is A VERY DANGEROUS IDEA to try to combine --notemp and --current." >&2
|
269
|
+
exit 1
|
270
|
+
fi
|
271
|
+
|
272
|
+
case $COMPRESS in
|
273
|
+
gzip)
|
274
|
+
GZIP_CMD="gzip -c9"
|
275
|
+
GUNZIP_CMD="gzip -cd"
|
276
|
+
;;
|
277
|
+
bzip2)
|
278
|
+
GZIP_CMD="bzip2 -9"
|
279
|
+
GUNZIP_CMD="bzip2 -d"
|
280
|
+
;;
|
281
|
+
gpg)
|
282
|
+
GZIP_CMD="gpg -ac -z9"
|
283
|
+
GUNZIP_CMD="gpg -d"
|
284
|
+
;;
|
285
|
+
Unix)
|
286
|
+
GZIP_CMD="compress -cf"
|
287
|
+
GUNZIP_CMD="exec 2>&-; uncompress -c || test \\\$? -eq 2 || gzip -cd"
|
288
|
+
;;
|
289
|
+
none)
|
290
|
+
GZIP_CMD="cat"
|
291
|
+
GUNZIP_CMD="cat"
|
292
|
+
;;
|
293
|
+
esac
|
294
|
+
|
295
|
+
tmpfile="${TMPDIR:=/tmp}/mkself$$"
|
296
|
+
|
297
|
+
if test -f $HEADER; then
|
298
|
+
oldarchname="$archname"
|
299
|
+
archname="$tmpfile"
|
300
|
+
# Generate a fake header to count its lines
|
301
|
+
SKIP=0
|
302
|
+
. $HEADER
|
303
|
+
SKIP=`cat "$tmpfile" |wc -l`
|
304
|
+
# Get rid of any spaces
|
305
|
+
SKIP=`expr $SKIP`
|
306
|
+
rm -f "$tmpfile"
|
307
|
+
echo Header is $SKIP lines long >&2
|
308
|
+
|
309
|
+
archname="$oldarchname"
|
310
|
+
else
|
311
|
+
echo "Unable to open header file: $HEADER" >&2
|
312
|
+
exit 1
|
313
|
+
fi
|
314
|
+
|
315
|
+
echo
|
316
|
+
|
317
|
+
if test "$APPEND" = n; then
|
318
|
+
if test -f "$archname"; then
|
319
|
+
echo "WARNING: Overwriting existing file: $archname" >&2
|
320
|
+
fi
|
321
|
+
fi
|
322
|
+
|
323
|
+
USIZE=`du -ks $archdir | cut -f1`
|
324
|
+
DATE=`LC_ALL=C date`
|
325
|
+
|
326
|
+
if test "." = "$archdirname"; then
|
327
|
+
if test "$KEEP" = n; then
|
328
|
+
archdirname="makeself-$$-`date +%Y%m%d%H%M%S`"
|
329
|
+
fi
|
330
|
+
fi
|
331
|
+
|
332
|
+
test -d "$archdir" || { echo "Error: $archdir does not exist."; rm -f "$tmpfile"; exit 1; }
|
333
|
+
echo About to compress $USIZE KB of data...
|
334
|
+
echo Adding files to archive named \"$archname\"...
|
335
|
+
exec 3<> "$tmpfile"
|
336
|
+
(cd "$archdir" && ( tar $TAR_ARGS - . | eval "$GZIP_CMD" >&3 ) ) || { echo Aborting: Archive directory not found or temporary file: "$tmpfile" could not be created.; exec 3>&-; rm -f "$tmpfile"; exit 1; }
|
337
|
+
exec 3>&- # try to close the archive
|
338
|
+
|
339
|
+
fsize=`cat "$tmpfile" | wc -c | tr -d " "`
|
340
|
+
|
341
|
+
# Compute the checksums
|
342
|
+
|
343
|
+
md5sum=00000000000000000000000000000000
|
344
|
+
crcsum=0000000000
|
345
|
+
|
346
|
+
if test "$NOCRC" = y; then
|
347
|
+
echo "skipping crc at user request"
|
348
|
+
else
|
349
|
+
crcsum=`cat "$tmpfile" | CMD_ENV=xpg4 cksum | sed -e 's/ /Z/' -e 's/ /Z/' | cut -dZ -f1`
|
350
|
+
echo "CRC: $crcsum"
|
351
|
+
fi
|
352
|
+
|
353
|
+
if test "$NOMD5" = y; then
|
354
|
+
echo "skipping md5sum at user request"
|
355
|
+
else
|
356
|
+
# Try to locate a MD5 binary
|
357
|
+
OLD_PATH=$PATH
|
358
|
+
PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
|
359
|
+
MD5_ARG=""
|
360
|
+
MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
|
361
|
+
test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
|
362
|
+
test -x $MD5_PATH || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
|
363
|
+
PATH=$OLD_PATH
|
364
|
+
if test `basename $MD5_PATH` = digest; then
|
365
|
+
MD5_ARG="-a md5"
|
366
|
+
fi
|
367
|
+
if test -x "$MD5_PATH"; then
|
368
|
+
md5sum=`cat "$tmpfile" | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
|
369
|
+
echo "MD5: $md5sum"
|
370
|
+
else
|
371
|
+
echo "MD5: none, MD5 command not found"
|
372
|
+
fi
|
373
|
+
fi
|
374
|
+
|
375
|
+
if test "$APPEND" = y; then
|
376
|
+
mv "$archname" "$archname".bak || exit
|
377
|
+
|
378
|
+
# Prepare entry for new archive
|
379
|
+
filesizes="$filesizes $fsize"
|
380
|
+
CRCsum="$CRCsum $crcsum"
|
381
|
+
MD5sum="$MD5sum $md5sum"
|
382
|
+
USIZE=`expr $USIZE + $OLDUSIZE`
|
383
|
+
# Generate the header
|
384
|
+
. $HEADER
|
385
|
+
# Append the original data
|
386
|
+
tail -n +$OLDSKIP "$archname".bak >> "$archname"
|
387
|
+
# Append the new data
|
388
|
+
cat "$tmpfile" >> "$archname"
|
389
|
+
|
390
|
+
chmod +x "$archname"
|
391
|
+
rm -f "$archname".bak
|
392
|
+
echo Self-extractible archive \"$archname\" successfully updated.
|
393
|
+
else
|
394
|
+
filesizes="$fsize"
|
395
|
+
CRCsum="$crcsum"
|
396
|
+
MD5sum="$md5sum"
|
397
|
+
|
398
|
+
# Generate the header
|
399
|
+
. $HEADER
|
400
|
+
|
401
|
+
# Append the compressed tar data after the stub
|
402
|
+
echo
|
403
|
+
cat "$tmpfile" >> "$archname"
|
404
|
+
chmod +x "$archname"
|
405
|
+
echo Self-extractible archive \"$archname\" successfully created.
|
406
|
+
fi
|
407
|
+
rm -f "$tmpfile"
|