#!/bin/sh # usage: $0 DIRNAME PHASE # PHASE is 1 (checksum) or 2 (package) dir=$1 phase=$2 if [ $phase = 1 ]; then cd $dir || exit 1 echo "maintained by: $(make maintainer)" echo "build started at $(date)" cd /tmp/depends export PKG_PATH=/tmp/depends if [ "$(echo $(/bin/ls | wc -c))" != 0 ]; then echo "adding dependencies" for i in *.t[bg]z; do echo "pkg_add $i" base=$(basename $i .tgz) base=$(basename $base .tbz) if pkg_info -q -e $base; then echo "skipping $base, already added" else if ! pkg_add $i; then echo "error in dependency $i, exiting" echo "1" > /tmp/status exit 1 fi fi done fi mtree -xcn -k uid,gid,mode -p / > /tmp/mtree cd $dir || exit 1 pkgname=$(make package-name) echo "================================================================" echo "========================================" if /pnohang $TIMEOUT /tmp/make.log1 ${pkgname} make checksum; then cat /tmp/make.log1 echo "0" > /tmp/status else cat /tmp/make.log1 echo "1" > /tmp/status echo "================================================================" echo -n "build ended at " date fi else echo "=========================================" 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 pkgname=$(make package-name) if /pnohang $TIMEOUT /tmp/make.log2 ${pkgname} make package; then cat /tmp/make.log2 echo "0" > /tmp/status prefix=$(make -V PREFIX) echo "================================================================" echo "checking installed files" find ${prefix} \( \( -perm -4000 -o -perm -2000 -a \! -type d \) -o \( -perm -0002 -o -perm -0020 \) \) -a \! -type l -ls | sort > /tmp/list1 echo "pkg_delete ${pkgname}" pkg_delete ${pkgname} find ${prefix} \( \( -perm -4000 -o -perm -2000 -a \! -type d \) -o \( -perm -0002 -o -perm -0020 \) \) -a \! -type l -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 mtree -x -f /tmp/mtree -p / | egrep -v '^(var/tmp|tmp/|var/db/pkg/)' > /tmp/list3 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 if [ -s /tmp/list3 ]; then echo "================================================================" echo "list of extra files and directories in /" 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 -alR ${prefix}" # ls -alR ${prefix} if [ "x${PLISTCHECK}" != "x" ]; then echo "1" > /tmp/status fi fi else cat /tmp/make.log2 echo "1" > /tmp/status fi if [ ${xvfb} = 1 ]; then kill $(jobid %1) fi if [ -e ${dir}/.keep ]; then cd ${dir} objdir=$(make -V WRKDIR) tar cvfjC /tmp/work.tbz ${objdir}/.. work fi echo "================================================================" echo -n "build ended at " date fi exit 0