qa: update pcp-ipcs test archive to have all needed metrics
[pcp.git] / Makepkgs
bloba32c9af7b46fcfd433771477d7aa7666cf1ddc4c
1 #!/bin/sh
3 # Make whichever packages the system supports
5 # Copyright (c) 2012-2016 Red Hat.
6 # Copyright (c) 2004 Silicon Graphics, Inc. All Rights Reserved.
7 #
8 # This program is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by the
10 # Free Software Foundation; either version 2 of the License, or (at your
11 # option) any later version.
13 # This program is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 # for more details.
19 topdir=`pwd`
20 signed=false
21 verbose=false
22 srconly=false
23 dorpm=unknown
24 dodeb=unknown
25 parfait=false
26 vector=false
27 webjs=false
28 docker=false
30 if [ ! -d .git ]
31 then
32 echo "Error: can only be run from within the PCP git repository"
33 exit 1
36 if [ ! -f VERSION.pcp ]
37 then
38 echo "Error: can only be run from within the PCP source tree"
39 exit 1
42 # Find where a GNU tool is hiding, look for this line in the
43 # $gnutool --help output ...
44 # "Report bugs to <bug-$gnutool@gnu.org>"
45 # or lines like this:
46 # FreeBSD $gnutool
47 # NetBSD $gnutool
48 # OpenBSD $gnutool
49 # Apple $gnutool
50 # or these lines:
51 # *This* tar defaults to:
52 # --format=gnu ...
54 gnu_tool()
56 prefix="$1"
57 shift
58 envvar="$1"
59 shift
60 oldcmd="$1"
61 shift
63 # Not in the environment, go search for it in the known locations.
65 if [ -z "$envvar" ]
66 then
67 for command in $oldcmd $@
69 exec=`which $command 2>/dev/null`
70 if [ -n "$exec" ]
71 then
72 $command --help >$tmp.help 2>&1
73 if egrep "(bug-$oldcmd@gnu.org)|(FreeBSD $command)|(NetBSD $command)|(OpenBSD $command)|(Apple $command)" $tmp.help >/dev/null
74 then
75 echo $exec
76 return 0
78 awk <$tmp.help >$tmp.check '
79 BEGIN { want = 0 }
80 /This\** tar defaults to:/ { want=1; next }
81 want == 1 { print; exit }'
82 if grep '[-][-]format=gnu' <$tmp.check >/dev/null
83 then
84 echo $exec
85 return 0
87 # special cases
89 if [ "$target" = openbsd -a $command = gzip ]
90 then
91 echo $exec
92 return 0
95 done
96 echo >&2 "$prefix: can't find GNU $oldcmd in the commands $oldcmd or $@"
97 [ $prefix = Error ] && exit 1
98 return 1
101 # Use the environment request and ensure it is a full path (do not
102 # change this behaviour, it is required for backward-compatibility
103 # - QA failures will result if you choose to ignore this warning).
105 command=`which $envvar 2>/dev/null`
106 if [ -z "$command" ]
107 then
108 echo >&2 "$prefix: $oldcmd (from the environment) does not exist!"
109 [ $prefix = Error ] && exit 1
110 return 1
112 echo $command
113 return 0
116 target=`uname -s | tr 'A-Z' 'a-z'`
118 export MAKE=`gnu_tool Error "$MAKE" make gmake`
119 export TAR=`gnu_tool Warning "$TAR" tar gtar gnutar`
120 export ZIP=`gnu_tool Error "$ZIP" gzip gnuzip`
122 # check if tar supports --transform else we must use git-archive later on (e.g. RHEL5)
123 [ -n "$TAR" ] && $TAR --help | 2>&1 grep -q transform || USE_GIT_ARCHIVE=1
124 #debug# echo TAR=$TAR USE_GIT_ARCHIVE=$USE_GIT_ARCHIVE
126 tmp=`mktemp -d /tmp/pcp.XXXXXXXXX` || exit 1
127 trap "rm -rf $tmp $tmp.help" 0 1 2 3 15
129 configure=./configure
130 cmdline_configopts=''
132 for opt in $*
134 case "$opt" in
135 -clean|--clean)
136 # we always clean nowadays, so silently ignore
137 shift
139 -verbose|--verbose)
140 verbose=true
141 shift
143 --nonrpm)
144 dorpm=false
145 shift
147 --nondeb)
148 dodeb=false
149 shift
151 --signed)
152 signed=true
153 shift
155 --source)
156 srconly=true
157 shift
159 --target)
160 shift
161 target=$1
162 shift
164 --with-parfait)
165 cmdline_configopts="$cmdline_configopts $opt"
166 parfait=true
167 shift
169 --with-vector)
170 cmdline_configopts="$cmdline_configopts $opt"
171 vector=true
172 shift
174 --with-webjs)
175 cmdline_configopts="$cmdline_configopts $opt"
176 webjs=true
177 shift
179 --with-docker)
180 docker=true
181 shift
183 --with-make)
184 MAKE=$1
185 shift
187 --with-tar)
188 TAR=$1
189 shift
191 --with-zip)
192 ZIP=$1
193 shift
196 # Add remaining options to the ./configure command line
197 cmdline_configopts="$cmdline_configopts $opt"
198 shift
200 esac
201 done
203 if [ $dorpm = unknown ]
204 then
205 dorpm=false
206 [ -x /usr/bin/rpmbuild ] && dorpm=true
208 if [ $dodeb = unknown ]
209 then
210 dodeb=false
211 [ -x /usr/bin/dpkg-buildpackage ] && dodeb=true
214 # Hmm ...
216 if $dodeb && $dorpm
217 then
218 echo >&2 "Do not know how to build RPM and Debian packages at the same time!"
219 echo >&2 "Suggest --nonrpm or --nondeb on the command line."
220 exit 1
223 if $dodeb
224 then
225 # On Debian-based platforms, the debian/rules file already captures
226 # most of the required configure settings in $(configure_paths)
228 configopts=''
229 elif $dorpm
230 then
231 # On RPM-based platforms, rpm macros provide an excellent set of defaults.
232 # This set is based on Fedora 22 %configure macro from /usr/lib/rpm/macros,
233 # and is known to work as far back as RHEL5.
234 configopts="`rpmbuild --eval '--prefix=%{_prefix} --exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir}' 2>/dev/null`"
235 # rpmbuild clears the environment, so force these settings into the
236 # rpm build configure
238 configopts="$configopts --with-make=$MAKE --with-tar=$TAR --with-zip=$ZIP"
239 elif [ $target = darwin ]
240 then
241 # On Mac OS X platforms, we install away from /usr/bin, /usr/lib
242 # and so on because of security requirements in recent versions.
244 configopts="--prefix=/usr/local --sysconfdir=/etc --localstatedir=/var"
245 elif [ $target = netbsd ]
246 then
247 # Try to mimic where pkgsrc/pkgin place things
249 configopts="--prefix=/usr/pkg --exec-prefix=/usr/pkg --mandir=/usr/pkg/man --with-rcdir=/etc/rc.d --localstatedir=/usr/pkg --with-rundir=/var/run --with-tmpdir=/var/tmp --with-logdir=/var/log/pcp"
250 else
251 # Bog-standard options suitable for a package on any platform.
252 # Command line can be used to extend this set, and any unusual
253 # platform-specific requirements are also appended later on.
254 configopts="--prefix=/usr --sysconfdir=/etc --localstatedir=/var"
257 # Platform-specific variants ...
259 case "$target"
261 mingw|mingw64|windows)
262 target=mingw
263 dorpm=false
264 configopts="$configopts --disable-ssp"
265 export configure="/usr/bin/mingw64-configure"
266 export MAKE="/usr/bin/mingw64-make"
267 export QMAKE="/usr/bin/mingw64-qmake-qt4"
268 export PKG_CONFIG="/usr/bin/mingw64-pkg-config"
270 linux)
271 ARCH=`uname -m`
272 [ -f /etc/slackware-version -a "$ARCH" = x86_64 ] && configopts="$configopts --libdir=/usr/lib64"
274 sunos|SunOS)
275 ARCH=`isainfo -k`
276 [ "$ARCH" = amd64 -o "$ARCH" = sparcv9 ] && configopts="$configopts --libdir=/usr/lib/64"
277 export YACC=bison
278 export LEX=flex
280 esac
282 # now some specific QA/development hosts with special needs ...
284 case `hostname`
286 vm04|vm04.localdomain|vm11|vm11.localdomain)
287 # gcc -O2 is broken here (for the linux PMDA)
289 configopts="$configopts --with-optimization=no"
290 # over-ride the settings from dpkg-buildflags
292 export DEB_CFLAGS_SET=''
293 export DEB_CXXFLAGS_SET=''
295 esac
297 # and finally add in any from the command line
299 [ -n "$cmdline_configopts" ] && configopts="$configopts $cmdline_configopts"
301 . ./VERSION.pcp
302 VERSION=${PACKAGE_MAJOR}.${PACKAGE_MINOR}.${PACKAGE_REVISION}
304 LOGDIR=$topdir/Logs
305 rm -rf "$LOGDIR"
306 mkdir -p "$LOGDIR"
308 source=pcp-${VERSION}
309 SRCDIR="$topdir/$source"
310 SRCTREE="$topdir/$source"
311 SRCTAR=$topdir/build/tar/$source.src.tar.gz
312 SRCWEBJS=$topdir/build/tar/webjs.tar.gz
313 SRCVECTOR=$topdir/build/tar/vector.tar.gz
314 SRCPARFAIT=$topdir/build/tar/parfait.tar.gz
316 build_failure()
318 # only print in non-verbose mode, otherwise we see double
319 if ! $verbose ; then
320 echo $@ failed, see log in $LOGDIR/pcp
321 tail $LOGDIR/pcp
323 exit 1
326 clean_packaging()
328 echo
329 echo "== Cleaning build tree for packaging build"
330 rm -rf "$SRCDIR" "$SRCTAR" .gitcensus
333 fix_version()
335 if [ -f "$1" -a -f "$2" ]
336 then
337 # as expected, both present
338 if diff "$1" "$2" >/dev/null 2>&1
339 then
341 else
342 # must be using git-archive(1) and VERSION.pcp has been
343 # modified, e.g. by pcp-daily script ... use the modified
344 # one to bump the build number in the packages
346 cp "$1" "$2"
348 else
349 echo "Arrgh ... expect both these to exist ..."
350 ls -l "$1" "$2"
351 exit 1
355 # Download sources from external repositories that we might want
356 # to include with the PCP packages.
358 third_parties()
360 if $parfait
361 then
362 if [ ! -f "$SRCPARFAIT" ]
363 then
364 echo "== Downloading Parfait package"
365 url=https://github.com/performancecopilot/parfait/archive/master.zip
366 wget -H -q -O $tmp/java.zip "$url"
367 [ $? -eq 0 ] && ./scripts/zip2tar $tmp/java.zip "$SRCPARFAIT"
369 if [ -f "$SRCPARFAIT" ]
370 then
371 DESTPARFAIT="$SRCTREE/build/tar/"`basename "$SRCPARFAIT"`
372 cp "$SRCPARFAIT" "$DESTPARFAIT"
376 if $vector
377 then
378 DESTVECTOR="$SRCTREE/build/tar/"`basename "$SRCVECTOR"`
379 if [ ! -f "$SRCVECTOR" ]
380 then
381 echo "== Downloading Vector webapp"
382 url=https://bintray.com/artifact/download/netflixoss/downloads/vector.tar.gz
383 wget -H -q -O "$SRCVECTOR" "$url"
384 [ $? -eq 0 ] && echo "Wrote: $SRCVECTOR"
385 mkdir $tmp/vector && pushd $tmp/vector && $TAR -zxf "$SRCVECTOR"
386 $topdir/scripts/build-vector
387 [ $? -eq 0] || exit 1
388 cd dist && $TAR -czf "$DESTVECTOR" *
389 popd
390 else
391 cp "$SRCVECTOR" "$DESTVECTOR"
395 if $webjs
396 then
397 if [ ! -f "$SRCWEBJS" ]
398 then
399 echo "== Downloading webjs webapps"
400 url=https://github.com/performancecopilot/pcp-webjs/archive/master.zip
401 wget -H -q -O $tmp/js.zip "$url"
402 [ $? -eq 0 ] && ./scripts/zip2tar $tmp/js.zip "$SRCWEBJS"
404 if [ -f "$SRCWEBJS" ]
405 then
406 DESTWEBJS="$SRCTREE/build/tar/"`basename "$SRCWEBJS"`
407 cp "$SRCWEBJS" "$DESTWEBJS"
412 # Generate a list of all the files git knows about, create the
413 # source tarball and then unpack it. We'll then do the package
414 # build in a guaranteed pristine environment.
416 src_tar_build()
418 if [ -z "$TAR" -o ! -z "$USE_GIT_ARCHIVE" ]
419 then
420 # no suitable GNU tar is available, use git-archive(1) - no local changes
421 if git status -s src man | grep '^.M'
422 then
423 echo "Arrgh, modified src files and either no tar ($TAR) or no --transform"
424 echo "support in tar, so local changes would not be included in the build."
425 exit 1
427 git archive --format=tar --prefix=$source/ HEAD | $ZIP > $SRCTAR
428 else
429 # build git file list and make tarball by hand to pick up any changes
431 git ls-files > .gitcensus
433 # but first ensure a "build everything" debian/control has been
434 # recreated
436 cd debian
437 if ./pre-build
438 then
440 else
441 echo "Error: debian/pre-build failed when creating debian/control"
442 exit 1
444 cd ..
445 echo "debian/control" >> .gitcensus
447 $TAR -cz --transform="s,^,$source/," --files-from=.gitcensus \
448 --file=$SRCTAR
449 rm .gitcensus
451 echo "Wrote: $SRCTAR"
454 # On sanity checks :- this is sick, but I'm really tired of QA failing
455 # because of bad binaries being built from the Debian/Ubuntu toolchain
456 # for # i?86 platforms
457 # - Ken McDonell Apr 2010
459 sanity_check_settings()
461 OPT=false
462 ARCH=`uname -m | sed -e 's/i.86/ia32/'`
463 if [ "$ARCH" != "ia32" ]
464 then
465 OPT=true # no workarounds needed for non-i?86 platforms
466 elif [ -f /etc/lsb-release ]
467 then
468 if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release
469 then
470 eval `grep DISTRIB_RELEASE= /etc/lsb-release`
471 XDISTRIB_RELEASE=`echo $DISTRIB_RELEASE | sed -e 's/[^0-9]//g'`
472 [ -z "$XDISTRIB_RELEASE" ] && XDISTRIB_RELEASE=0000
473 if [ $XDISTRIB_RELEASE -gt 1110 ]
474 then
475 # Hope the problem is fixed after Ubuntu 11.10
476 OPT=true
479 $OPT || echo "Building without optimization for Ubuntu $DISTRIB_RELEASE"
480 elif [ -f /etc/debian_version ]
481 then
482 DISTRIB_RELEASE=`cat /etc/debian_version`
483 XDISTRIB_RELEASE=`echo $DISTRIB_RELEASE | sed -e 's/[^0-9]//g'`
484 [ -z "$XDISTRIB_RELEASE" ] && XDISTRIB_RELEASE=0000
485 if [ $XDISTRIB_RELEASE -ge 700 ]
486 then
487 # Hope the problem is fixed in Debian 7.0.0
488 OPT=true
490 $OPT || echo "Building without optimization for Debian $DISTRIB_RELEASE"
493 if ! $OPT
494 then
495 ok=true
496 if grep -q '^my $default_flags .*O2' /usr/bin/dpkg-buildpackage
497 then
498 echo 'dpkg-buildpackage: need to remove O2 from $default_flags'
499 ok=false
501 if grep -q '^[ ]*LDFLAGS.*-Bsymbolic-functions' /usr/bin/dpkg-buildpackage
502 then
503 echo 'dpkg-buildpackage: need to remove -Bsymbolic-function from LDFLAGS'
504 ok=false
506 if ! $ok
507 then
508 echo "Refer to Debian/Ubuntu notes in PCP's ./INSTALL"
509 exit 1
511 # as of Debian 6.0.1 and Ubuntu 10.10, build flags are hidden and
512 # extracted using dpkg-buildflags which fortunately honours some
513 # environment variable settings
515 export DEB_CFLAGS_SET=''
516 export DEB_CXXFLAGS_SET=''
517 export DEB_LDFLAGS_SET=''
521 # Build Debian packages using the dpkg-buildpackage utility which runs
522 # the complete build, from configure through to final deb preparation.
524 debian_buildpackage()
526 echo
527 echo "== Building deb packages using dpkg-buildpackage"
529 SUDO=${SUDO:-fakeroot}
530 # don't sign by default
531 sign='-us -uc'
532 # sign if --signed and $DEB_SIGN_KEYID set in the environment
533 $signed && [ -n "$DEB_SIGN_KEYID" ] && sign=''
534 rm -f $tmp/failed
535 if $verbose ; then
536 (dpkg-buildpackage $sign -r$SUDO || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
537 else
538 (dpkg-buildpackage $sign -r$SUDO || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
540 [ -f $tmp/failed ] && build_failure debian buildpackage
543 prepare_debian_sources()
545 # shortcut for dpkg-buildpackage which does everything itself from here
546 rm -rf "$SRCDIR"
547 mkdir -p "$SRCDIR" 2>/dev/null
549 cd "$SRCDIR" || exit 1
550 $TAR -zxf "$SRCTAR" || exit 1
552 cd "$SRCTREE" || exit 1
553 third_parties
555 fix_version ${topdir}/VERSION.pcp VERSION.pcp
558 prepare_debian_control()
560 echo
561 echo "== Preparing source tree for dpkg-buildpackage"
562 rm -f $tmp/failed debian/control
563 if $verbose ; then
564 ($MAKE -C debian control 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
565 else
566 ($MAKE -C debian control 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
568 [ -f $tmp/failed ] && build_failure debian control
571 debian_build()
573 SRCDIR="${topdir}/build/deb"
574 SRCTREE="${topdir}/build/deb/$source"
575 prepare_debian_sources
577 # Note: we need to run configure here to get things like builddefs
578 # created, but configure will be run _again_ from
579 # debian_buildpackage, but we need to make sure the same
580 # configure options are used in both places
582 export configure_opts="$configopts"
583 if [ ! -f debian/rules ]
584 then
585 echo "Botch: cannot find debian/rules"
586 exit 1
588 debian_opts=`sed -n <debian/rules -e '/^configure_paths/s/^[^=]*= *//p'`
589 if [ -z "$debian_opts" ]
590 then
591 echo "Botch: cannot get config options from configure_paths in debian/rules"
592 exit 1
594 configopts="$debian_opts $configopts"
595 configure_pcp
596 prepare_debian_control
597 sanity_check_settings
598 debian_buildpackage
600 # success!
601 if ! $verbose ; then
602 grep ^dpkg-deb $LOGDIR/pcp | \
603 sed -e 's,\.$,,g' -e "s,',,g" -e "s,\.\.,$topdir/build/deb,g" | \
604 awk '{ print "Wrote:", $NF }'
606 exit 0
609 prepare_build()
611 echo
612 echo "== Preparing fresh build tree for packaging build"
614 if [ ! -d "$SRCDIR" ]; then
615 # extract gzipped tar archive
616 $TAR -xz --file="$SRCTAR" || exit 1
617 fix_version VERSION.pcp $SRCDIR/VERSION.pcp
621 configure_pcp()
623 echo
624 echo "== Configuring pcp, log is in $LOGDIR/pcp ($configopts)"
626 rm -f $tmp/failed
627 if $verbose
628 then
629 ($configure $configopts 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
630 else
631 ($configure $configopts 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
633 [ -f $tmp/failed ] && build_failure Configure
636 default_build()
638 echo
639 echo "== Building pcp, log is in $LOGDIR/pcp"
641 rm -f $tmp/failed
642 if $verbose ; then
643 ($MAKE default_pcp 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
644 else
645 ($MAKE default_pcp 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
647 [ -f $tmp/failed ] && build_failure Make default_pcp
650 packaging_pcp()
652 echo
653 echo "== Packaging pcp, log is in $LOGDIR/pcp" | tee -a $LOGDIR/pcp
655 rm -f $tmp/failed
656 if $verbose ; then
657 ($MAKE -C build pack_pcp 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
658 else
659 ($MAKE -C build pack_pcp 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
661 [ -f $tmp/failed ] && build_failure Packaging via pack_pcp
664 packaging_rpm()
666 echo
667 echo "== Building rpm packages, log is in $LOGDIR/pcp" | tee -a $LOGDIR/pcp
669 rm -f $tmp/failed
670 export DIST_ROOT=${topdir}/build/rpm/${source}
671 # sign if --signed and $RPM_SIGN_KEYID set in the environment
672 $signed && [ -z "$RPM_SIGN_KEYID" ] && unset RPM_SIGN_KEYID
673 if $verbose ; then
674 ($MAKE -C build/rpm pack_pcp 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
675 else
676 ($MAKE -C build/rpm pack_pcp 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
678 [ -f $tmp/failed ] && build_failure Packaging RPMs via pack_pcp
681 packaging_docker()
683 echo
684 echo "== Building docker container images, log is in $LOGDIR/pcp" | tee -a $LOGDIR/pcp
685 rm -f $tmp/failed
687 if docker version >/dev/null 2>&1; then
688 v=`docker version | sed -e 's/\./ /g' | \
689 awk '/^Server/ {s=1; if($2 == "version:") {print 10*$3+$4; exit}}
690 /Version:/ {if (s) {print 10*$2+$3; exit}}'`
691 if [ -z "$v" -o "$v" -lt 14 ]; then
692 echo 'Error: docker version too old. Containers build skipped.'
693 touch $tmp/failed
695 else
696 echo 'Error: docker not enabled or not properly configured for non-root access.'
697 echo 'Check the docker service is enabled and running. You can allow non-root access'
698 echo 'as follows: edit /etc/sysconfig/docker and add OPTIONS="-G gid" where gid is a'
699 echo 'group name that you are a member of. Then restart the docker service.'
700 touch $tmp/failed
703 [ -f $tmp/failed ] && build_failure Packaging docker images, docker configuration
705 if $verbose ; then
706 ($MAKE -C build/containers pack_pcp 2>&1 || touch $tmp/failed) 2>&1 | tee -a $LOGDIR/pcp
707 else
708 ($MAKE -C build/containers pack_pcp 2>&1 || touch $tmp/failed) >>$LOGDIR/pcp 2>&1
711 [ -f $tmp/failed ] && build_failure Packaging docker containers via pack_pcp
714 # real build starts here
715 clean_packaging
716 src_tar_build
717 $srconly && exit 0
719 # short-circuit for performing builds with dpkg-buildpackage
720 $dodeb && debian_build
722 prepare_build
724 # download any requested third party sources we're packaging
725 third_parties
727 # shift into the clean packaging build tree from here onward
728 cd "$SRCDIR"
730 configure_pcp
732 # short-circuit for performing rpm-only builds with rpmbuild
733 # (skips over the default_build stage as rpmbuild does that).
734 if $dorpm
735 then
736 packaging_rpm
737 else
738 default_build # perform a complete build in-situ
739 packaging_pcp # create all known package formats
743 # --with-docker, currently only for RPM platforms with docker
744 if $docker
745 then
746 packaging_docker
749 # success!
750 if ! $verbose ; then
751 grep '^Wrote:' $LOGDIR/pcp | sed -e 's/\.\.\/\.\.\///'
753 exit 0