source: hybrid/trunk/nanobsd/tools/package-build.sh@ 10119

Last change on this file since 10119 was 10119, checked in by richardvm, 13 years ago

vpn, node, proxy and future other stuff

  • Property svn:eol-style set to LF
  • Property svn:executable set to *
File size: 4.6 KB
Line 
1#!/bin/sh
2# Install all required packages
3# XXX: Welcome to port hell, if /usr/ports has been updated, you actually want
4# to delete all installed packages and start over again, hence why people used
5# to run this stuff in jails, etc.
6
7. $(dirname $0)/package-build.inc.sh
8
9DEBUG=${DEBUG:-0}
10DEP_CHECK_ONLY=${DEP_CHECK_ONLY:-0}
11
12# make options, for package building
13LOGDIR=`mktemp -d "/tmp/$(basename $0 .sh)-$(date +%Y%m%d-%H:%M:%S).X"`
14TARGET=`dirname $NANO_PACKAGE_DIR`
15if [ ! -d "$TARGET" ]; then
16 p_err "'$TARGET' does not exists"; exit 1
17fi
18
19# Package target
20MAKE_ARGS="$MAKE_ARGS PACKAGES=$TARGET"
21MAKE_ARGS="$MAKE_ARGS BATCH=yes PACKAGE_BUILDING=yes"
22
23# www/py-cherrypy
24MAKE_ARGS="${MAKE_ARGS} WITH_APACHE=yes"
25# net-mgmt/net-snmp
26MAKE_ARGS="${MAKE_ARGS} WITHOUT_PERL=yes"
27# net-mgmt/nagios-plugins
28MAKE_ARGS="${MAKE_ARGS} WITH_FPING=yes"
29
30p_info Log directory ${LOGDIR}
31p_info Make options are:
32p_info $(p_list ${MAKE_ARGS})
33
34p_info Checking whether there are currently unmet dependencies
35RETVAL=0
36PKGS=`pkg_info | awk '{print $1}'`
37for PKG in ${PKGS} ; do
38 PKG_DEP_FAIL=""
39 for PKGDEP in `pkg_info -qr ${PKG} | awk '{print $2}'`; do
40 pkg_info -e ${PKGDEP}
41 if [ $? -eq 1 ]; then
42 PKG_DEP_FAIL="${PKG_DEP_FAIL} ${PKGDEP}"
43 fi
44 done
45 if [ -n "${PKG_DEP_FAIL}" ]; then
46 p_err Unmet dependencies found at $PKG, please fix manually:
47 p_err $(p_list ${PKG_DEP_FAIL})
48 RETVAL=1
49 fi
50done
51if [ $RETVAL -eq 1 ]; then
52 exit 1
53fi
54p_info Dependecy check ok
55
56if [ ${DEP_CHECK_ONLY} -eq 1 ]; then
57 exit 0
58fi
59echo ""
60
61
62if [ -d "${TARGET}/All" ]; then
63 p_warn "Deleted all (old) packages at ${TARGET}"
64 rm -R $TARGET/*
65fi
66p_info Created target dir ${TARGET}/All
67mkdir -p ${TARGET}/All
68
69PORTSDIR='/usr/ports'
70WL_PORTSDIR="`cd $(dirname $0);pwd -P`/../ports/"
71
72# XXX: Make file dynamic
73# Dirty quirk to allow comments in part below
74PACKAGE_LIST=`cat <<EOF | sed 's/#.*$//g'
75$PORTSDIR/dns/dnsmasq
76$PORTSDIR/www/tinyproxy
77$PORTSDIR/www/thttpd
78$PORTSDIR/editors/vim-lite
79
80$PORTSDIR/lang/python
81
82$PORTSDIR/net-mgmt/net-snmp
83$PORTSDIR/net-mgmt/nrpe2
84$PORTSDIR/benchmarks/iperf
85$PORTSDIR/net/pen
86$PORTSDIR/net/rsync
87
88$PORTSDIR/devel/py-yaml
89
90$PORTSDIR/sysutils/ucspi-tcp
91
92# Wireless Leiden ports at $WL_PORTSDIR
93$WL_PORTSDIR/net/lvrouted
94$WL_PORTSDIR/net/transproxy
95`
96
97MAKE="make ${MAKE_ARGS}"
98
99BUILD_LIST=''
100# Build required packages
101set ${PACKAGE_LIST}
102while [ "$1" ]; do
103 PACKAGE=$1; shift
104 BUILD_LIST="${BUILD_LIST} ${PACKAGE}"
105
106 # Build new one
107 LOGFILE="$LOGDIR/build$(echo $PACKAGE | tr '/' '_').log"
108 echo ""
109 p_info Packaging $PACKAGE
110 cd ${PACKAGE}
111
112
113 # Check for build dependencies
114 BUILDDEP_PKG=`${MAKE} build-depends-list | awk -F: '{print $2}'`
115 if [ -n "${BUILDDEP_PKG}" ]; then
116 p_info Build dependencies needed are:
117 p_info $(p_list ${BUILDDEP_PKG})
118 fi
119
120 # Check for run dependencies
121 PKGDEP_PKGS=`${MAKE} package-depends-list | awk '{print $2}'`
122 if [ -n "${PKGDEP_PKGS}" ]; then
123 p_info Package dependencies also packaged are:
124 p_info $(p_list ${PKGDEP_PKGS})
125 fi
126
127 # Check if package is already installed
128 VERSION=`${MAKE} clean generate-plist check-already-installed | awk '/is already/ {print $2}'`
129 if [ -n "${VERSION}" ]; then
130 VERSION=`echo ${VERSION} | sed 's/^.*-//g'`
131 p_info ${PACKAGE} already installed at ${VERSION}
132 MAKE_OPTION=''
133 elif [ "${VERSION}" = "An" ]; then
134 #XXX: Better way to detect whether a package needs updating
135 # An older version of lang/python26 is already installed (python26-2.6.2)
136 p_warn ${PACKAGE} outdated, updating...
137 p_warn re-run package-build.sh to check for unmet ones done using:
138 p_warn $0
139 MAKE_OPTION='deinstall reinstall'
140 else
141 p_info ${PACKAGE} not installed, installing...
142 MAKE_OPTION='install'
143 fi
144
145 if [ -n "${MAKE_OPTION}" ]; then
146 p_info Buildlog: $LOGFILE
147 ${MAKE} ${MAKE_OPTION} 2>>$LOGFILE 1>> $LOGFILE
148 if [ $? -ne 0 ]; then
149 p_err building ${PACKAGE} FAILED, logging at $LOGFILE
150 exit 1
151 fi
152 fi
153 ${MAKE} package-links
154 PKGNAME=`make extract-message | awk '{print $NF}'`
155 pkg_create -b $PKGNAME $TARGET/All/${PKGNAME}.tbz
156
157 p_info Checking dependencies
158 for PKG in $PKGDEP_PKGS; do
159 echo "${BUILD_LIST}" | grep -q "$PKG"
160 if [ $? -eq 0 ]; then
161 # Already packaged
162 p_info ${PKG} Already packaged
163 else
164 echo $@ | grep -q "${PKG}"
165 if [ $? -eq 0 ]; then
166 p_info ${PKG} Already planned
167 else
168 set $@ ${PKG}
169 fi
170 fi
171 done
172 p_info Packaging $PACKAGE succesfull
173done
174
175p_info $(echo ${BUILD_LIST} | wc -w) packages build succesfully
176
177if [ ${DEBUG} -eq 0 ]; then
178 rm -R ${LOGDIR}
179else
180 p_info Debugging enabled ${LOGDIR} saved
181fi
182
Note: See TracBrowser for help on using the repository browser.