summaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorSatoshi Asami <asami@FreeBSD.org>2000-05-08 07:37:28 +0000
committerSatoshi Asami <asami@FreeBSD.org>2000-05-08 07:37:28 +0000
commitd36051792dbe53894dfee4e2e5aba08506cd582c (patch)
treeb8bae04f4001266e01ba49956cbcbb8ea5ef156b /Tools
parentChange @dirrm to @unexec rmdir -- this directory is shared with other ports. (diff)
(1) Make this file callable in two phases (checksum, package) so distfiles
can be fetched even if the packaging fails. This is to ensure distfiles with correct checksums can be fetched and put on ftp.FreeBSD.org before they disappear from the original master sites. (2) Delete port and all dependencies after packaging, and print out list of (a) Security-related files (set[ug]id flag set or world-writable) (b) Extra files and directories Requested by: kris (2a only)
Notes
Notes: svn path=/head/; revision=28362
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/portbuild/scripts/buildscript141
1 files changed, 110 insertions, 31 deletions
diff --git a/Tools/portbuild/scripts/buildscript b/Tools/portbuild/scripts/buildscript
index 9b62d7ddc6df..3d2bc669942c 100755
--- a/Tools/portbuild/scripts/buildscript
+++ b/Tools/portbuild/scripts/buildscript
@@ -1,43 +1,122 @@
#!/bin/sh
-# usage: $0 DIRNAME
+# usage: $0 DIRNAME PHASE
+# PHASE is 1 (checksum) or 2 (package)
dir=$1
+phase=$2
-cd /tmp/depends
-if [ "$(echo $(/bin/ls | wc -c))" != 0 ]; then
- for i in *.tgz; do
- pkg_add -f $i >/dev/null 2>&1 || exit 1
- done
-fi
+if [ $phase = 1 ]; then
-cd $dir || exit 1
-echo "maintained by: $(make maintainer)"
-echo "build started at $(date)"
-echo "================================================================"
-
-xvfb=0
-if which -s Xvfb; then
- xvfb=1
- pid=$$
- X11BASE=$(which Xvfb | sed -e 's./bin/Xvfb..')
- Xvfb :${pid} -fp ${X11BASE}/lib/X11/fonts/misc &
- DISPLAY=:${pid}
- export DISPLAY
-fi
+ cd $dir || exit 1
+ echo "maintained by: $(make maintainer)"
+ echo "build started at $(date)"
+
+ cd /tmp/depends
+ if [ "$(echo $(/bin/ls | wc -c))" != 0 ]; then
+ echo "adding dependencies"
+ for i in *.tgz; do
+ echo "pkg_add -f $i"
+ if ! pkg_add -f $i; then
+ echo "error in dependency $i, exiting"
+ echo "1" > /tmp/status
+ exit 1
+ fi
+ done
+ fi
+
+ cd $dir || exit 1
+ echo "================================================================"
+ echo "====================<phase 1: make checksum>===================="
+
+ if make checksum; then
+ echo "0" > /tmp/status
+ else
+ echo "1" > /tmp/status
+ echo "================================================================"
+ echo -n "build ended at "
+ date
+ fi
-if make package; then
- echo "0" > /tmp/status
else
- echo "1" > /tmp/status
-fi
-if [ ${xvfb} = 1 ]; then
- kill $(jobid %1)
-fi
+ echo "====================<phase 2: make package>====================="
+ xvfb=0
+ if which -s Xvfb; then
+ xvfb=1
+ pid=$(echo $$ % 32768 | bc)
+ X11BASE=$(which Xvfb | sed -e 's./bin/Xvfb..')
+ Xvfb :${pid} -fp ${X11BASE}/lib/X11/fonts/misc &
+ DISPLAY=:${pid}
+ export DISPLAY
+ fi
+
+ cd $dir || exit 1
+ if make package; then
+ echo "0" > /tmp/status
+ pkgname=$(make package-name)
+ prefix=$(make -V PREFIX)
+ mtreefile=$(make -V MTREE_FILE)
+ echo "================================================================"
+ echo "checking installed files"
+ find ${prefix} -perm -2000 -o -perm -4000 -o -perm -0002 -ls | sort > /tmp/list1
+ echo "pkg_delete ${pkgname}"
+ pkg_delete ${pkgname}
+ find ${prefix} -perm -2000 -o -perm -4000 -o -perm -0002 -ls | sort > /tmp/list2
+ if ! diff -qb /tmp/list1 /tmp/list2 2>/dev/null; then
+ echo "================================================================"
+ echo "found set[ug]id or world-writable files and directories"
+ diff -b /tmp/list2 /tmp/list1 | grep '^>'
+ fi
+ cd /var/db/pkg
+ if [ $(echo $(echo * | wc -c)) != 2 ]; then
+ echo "================================================================"
+ echo "deleting dependencies"
+ prevlist=""
+ count=1
+ while [ $(echo $(echo * | wc -c)) != 2 -a $(echo $(echo * | wc -c)) != $(echo $(echo $prevlist | wc -c)) ]; do
+ echo "== phase $count =="
+ prevlist="$(echo *)"
+ for i in *; do
+ echo "pkg_delete $i"
+ pkg_delete $i
+ done
+ count=$(($count + 1))
+ done
+ if [ $(echo $(echo * | wc -c)) != 2 ]; then
+ echo "leftover packages:" *
+# for i in *; do
+# echo "pkg_delete -f $i"
+# pkg_delete -f $i
+# done
+ fi
+ fi
+ cd /var/db/pkg
+ if [ "x${mtreefile}" != "x" ]; then
+ mtree -f ${mtreefile} -p ${prefix} > /tmp/list3
+ if [ -s /tmp/list3 ]; then
+ echo "================================================================"
+ echo "list of extra files and directories in ${prefix}"
+ cat /tmp/list3
+ echo "list of all files and directories in ${prefix}"
+ cd ${prefix}
+ find . -exec echo -n 'path: ' \; -exec ls -1d \{} \; | sort
+ echo "ls -lR ${prefix}"
+ ls -lR ${prefix}
+ fi
+ fi
+ else
+ echo "1" > /tmp/status
+ fi
+
+ if [ ${xvfb} = 1 ]; then
+ kill $(jobid %1)
+ fi
-echo "================================================================"
-echo -n "build ended at "
-date
+ echo "================================================================"
+ echo -n "build ended at "
+ date
+
+fi
exit 0