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 |
|
---|
9 | DEBUG=${DEBUG:-0}
|
---|
10 | DEP_CHECK_ONLY=${DEP_CHECK_ONLY:-0}
|
---|
11 |
|
---|
12 | # make options, for package building
|
---|
13 | LOGDIR=`mktemp -d "/tmp/$(basename $0 .sh)-$(date +%Y%m%d-%H:%M:%S).X"`
|
---|
14 | TARGET=`dirname $NANO_PACKAGE_DIR`
|
---|
15 | if [ ! -d "$TARGET" ]; then
|
---|
16 | p_err "'$TARGET' does not exists"; exit 1
|
---|
17 | fi
|
---|
18 |
|
---|
19 | # Package target
|
---|
20 | MAKE_ARGS="$MAKE_ARGS PACKAGES=$TARGET"
|
---|
21 | MAKE_ARGS="$MAKE_ARGS BATCH=yes PACKAGE_BUILDING=yes"
|
---|
22 |
|
---|
23 | # www/py-cherrypy
|
---|
24 | MAKE_ARGS="${MAKE_ARGS} WITH_APACHE=yes"
|
---|
25 | # net-mgmt/net-snmp
|
---|
26 | MAKE_ARGS="${MAKE_ARGS} WITHOUT_PERL=yes"
|
---|
27 | # net-mgmt/nagios-plugins
|
---|
28 | MAKE_ARGS="${MAKE_ARGS} WITH_FPING=yes"
|
---|
29 |
|
---|
30 | p_info Log directory ${LOGDIR}
|
---|
31 | p_info Make options are:
|
---|
32 | p_info $(p_list ${MAKE_ARGS})
|
---|
33 |
|
---|
34 | p_info Checking whether there are currently unmet dependencies
|
---|
35 | RETVAL=0
|
---|
36 | PKGS=`pkg_info | awk '{print $1}'`
|
---|
37 | for 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
|
---|
50 | done
|
---|
51 | if [ $RETVAL -eq 1 ]; then
|
---|
52 | exit 1
|
---|
53 | fi
|
---|
54 | p_info Dependecy check ok
|
---|
55 |
|
---|
56 | if [ ${DEP_CHECK_ONLY} -eq 1 ]; then
|
---|
57 | exit 0
|
---|
58 | fi
|
---|
59 | echo ""
|
---|
60 |
|
---|
61 |
|
---|
62 | if [ -d "${TARGET}/All" ]; then
|
---|
63 | p_warn "Deleted all (old) packages at ${TARGET}"
|
---|
64 | rm -R $TARGET/*
|
---|
65 | fi
|
---|
66 | p_info Created target dir ${TARGET}/All
|
---|
67 | mkdir -p ${TARGET}/All
|
---|
68 |
|
---|
69 | PORTSDIR='/usr/ports'
|
---|
70 | WL_PORTSDIR="`cd $(dirname $0);pwd -P`/../ports/"
|
---|
71 |
|
---|
72 | # XXX: Make file dynamic
|
---|
73 | # Dirty quirk to allow comments in part below
|
---|
74 | PACKAGE_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 |
|
---|
97 | MAKE="make ${MAKE_ARGS}"
|
---|
98 |
|
---|
99 | BUILD_LIST=''
|
---|
100 | # Build required packages
|
---|
101 | set ${PACKAGE_LIST}
|
---|
102 | while [ "$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
|
---|
173 | done
|
---|
174 |
|
---|
175 | p_info $(echo ${BUILD_LIST} | wc -w) packages build succesfully
|
---|
176 |
|
---|
177 | if [ ${DEBUG} -eq 0 ]; then
|
---|
178 | rm -R ${LOGDIR}
|
---|
179 | else
|
---|
180 | p_info Debugging enabled ${LOGDIR} saved
|
---|
181 | fi
|
---|
182 |
|
---|