4 # Automatic script to install Citadel on a target system.
5 # Copyright (C) 2004 Michael Hampton <error@citadel.org>
6 # Copyright (C) 2004 Art Cancro <ajc@uncensored.citadel.org>
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 # Reading this script? Here's some helpful hints:
24 # If you're seeing this in your browser, it's probably not what you want.
25 # You can either save it to disk and run it, or do it the easy way:
27 # wget -q -O - http://easyinstall.citadel.org/install | sh
29 # Note that this script installs software on your system and so it requires
30 # root privileges. Feel free to inspect the script to make sure we didn't
31 # do anything stupid...
33 # We have provided you the source code according to the terms of the respective
34 # software licenses included in the source code packages, even if you choose
35 # not to keep the source code around. You can always download it again later.
37 # We install the following versions in this release:
38 # Package Version Status
41 # libical 0.24.RC4 Latest
42 # Berkeley DB 4.3.21 Stable
43 # OpenLDAP 2.1.30 stable-20040329 Stable
46 ###############################################################################
48 # This is the general stuff we're going to do, in order:
50 # 1. Gather information about the target system
51 # 2. Present the installation steps (from 1 above) to the user
52 # 3. Present any pre-install customizations to the user
53 # 4. Do the installation
54 # A. Download any source code files or binary packages required
55 # B. For native packaging, call the native packaging system to install
56 # C. If we build our own, compile and install prerequisites then Citadel
57 # 5. Do post-installation setup
61 ###############################################################################
64 # Begin user customization area
66 # These two directories specify where Citadel and its private support
67 # libraries will be installed. This keeps them safely tucked away from
68 # the rest of your system. The defaults should be fine for most people.
69 # NB: When binary packages are installed, these settings are ignored!
70 SUPPORT=/usr/local/ctdlsupport
71 CITADEL=/usr/local/citadel
72 WEBCIT=/usr/local/webcit
74 BUILD=$WORKDIR/citadel-build.$$
75 LOG=$WORKDIR/citadel-install-log.txt
76 export SUPPORT CITADEL WEBCIT
80 # End user customization area
82 # We're now exporting a bunch of environment variables, and here's a list:
83 # CITADEL_INSTALLER Set to "web" to indicate this script
84 # CITADEL Directory where Citadel is installed
85 # WEBCIT Directory where WebCit is installed
86 # SUPPORT Directory where support programs are installed
87 # LDAP_CONFIG Location of the slapd.conf file
88 # SLAPD_BINARY Location of the slapd binary
89 # DISTRO_MAJOR Linux distribution name, if applicable
90 # DISTRO_MINOR Linux distribution name, if applicable
91 # DISTRO_VERSION Linux distribution version (major digit) if applicable
92 # CC C compiler being used
93 # MAKE Make program being used
94 # CFLAGS C compiler flags
95 # LDFLAGS Linker flags
96 # IS_UPGRADE Set to "yes" if upgrading an existing Citadel
97 # CTDL_DIALOG Where (if at all) the "dialog" program may be found
99 # Let Citadel setup recognize the Citadel installer
100 CITADEL_INSTALLER=web
101 export CITADEL_INSTALLER
103 DOWNLOAD_SITE=http://easyinstall.citadel.org
105 # Original source code packages.
106 DB_SOURCE=db-4.3.21.NC.tar.gz
107 # DB_PATCHES=db-x.x.x.patches
108 ICAL_SOURCE=libical-0.24.RC4.tar.gz
109 LDAP_SOURCE=openldap-stable-20040329.tgz
110 CITADEL_SOURCE=citadel-easyinstall.tar.gz
111 WEBCIT_SOURCE=webcit-easyinstall.tar.gz
113 SETUP="Citadel Easy Install"
116 ##### BEGIN Functions #####
119 echo Easy Install is aborting.
120 echo Please report this problem to the Citadel developers.
127 determine_distribution () {
128 # First look for Red Hat in general
129 if [ -x /bin/rpm ]; then
130 RELEASE_FILE=/dev/null
131 if /bin/rpm -q redhat-release >/dev/null 2>&1; then
133 RELEASE_FILE=/etc/redhat-release
135 if /bin/rpm -q whitebox-release >/dev/null 2>&1; then
136 DISTRO_MAJOR=WhiteBox
137 RELEASE_FILE=/etc/whitebox-release
139 if /bin/rpm -q fedora-release >/dev/null 2>&1; then
142 RELEASE_FILE=/etc/fedora-release
144 # Then look for specific version
145 ( cat $RELEASE_FILE | grep Enterprise ) >/dev/null 2>&1 && \
146 DISTRO_MINOR=Enterprise
147 DISTRO_VERSION=`tr -cd "[^0-9.]" < $RELEASE_FILE | cut -c 1`
151 if [ -f /etc/gentoo-release ]; then
156 # TODO: check for Debian
160 cd $BUILD 2>&1 >>$LOG || die
161 $WGET $DOWNLOAD_SITE/libical-easyinstall.sum
162 SUM=`cat libical-easyinstall.sum`
163 SUMFILE=$SUPPORT/etc/libical-easyinstall.sum
164 if [ -r $SUMFILE ] ; then
165 OLDSUM=`cat $SUMFILE`
166 if [ $SUM = $OLDSUM ] ; then
167 echo "* libical does not need updating."
171 echo "* Downloading libical..."
172 $WGET $DOWNLOAD_SITE/$ICAL_SOURCE 2>&1 >>$LOG || die
173 echo "* Installing libical..."
174 ( gzip -dc $ICAL_SOURCE | tar -xvf - ) 2>&1 >>$LOG || die
175 cd $BUILD/libical-0.24 2>&1 >>$LOG || die
176 ./configure --prefix=$SUPPORT 2>&1 >>$LOG || die
177 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
178 $MAKE install 2>&1 >>$LOG || die
181 rm -f $CITADEL/citadel-easyinstall.sum 2>/dev/null
182 rm -f $WEBCIT/webcit-easyinstall.sum 2>/dev/null
186 cd $BUILD 2>&1 >>$LOG || die
187 $WGET $DOWNLOAD_SITE/db-easyinstall.sum
188 SUM=`cat db-easyinstall.sum`
189 SUMFILE=$SUPPORT/etc/db-easyinstall.sum
190 if [ -r $SUMFILE ] ; then
191 OLDSUM=`cat $SUMFILE`
192 if [ $SUM = $OLDSUM ] ; then
193 echo "* Berkeley DB does not need updating."
197 echo "* Downloading Berkeley DB..."
198 $WGET $DOWNLOAD_SITE/$DB_SOURCE 2>&1 >>$LOG || die
199 echo "* Installing Berkeley DB..."
200 ( gzip -dc $DB_SOURCE | tar -xvf - ) 2>&1 >>$LOG || die
201 cd $BUILD/db-4.3.21.NC 2>&1 >>$LOG || die
202 #patch -p0 < ../$DB_PATCHES 2>&1 >>$LOG || die
203 cd $BUILD/db-4.3.21.NC/build_unix 2>&1 >>$LOG || die
204 ../dist/configure --prefix=$SUPPORT --disable-compat185 --disable-cxx --disable-debug --disable-dump185 --disable-java --disable-rpc --disable-tcl --disable-test --without-rpm 2>&1 >>$LOG || die
205 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
206 $MAKE install 2>&1 >>$LOG || die
209 rm -f $CITADEL/citadel-easyinstall.sum 2>/dev/null
213 cd $BUILD 2>&1 >>$LOG || die
214 $WGET $DOWNLOAD_SITE/ldap-easyinstall.sum
215 SUM=`cat ldap-easyinstall.sum`
216 SUMFILE=$SUPPORT/etc/ldap-easyinstall.sum
217 if [ -r $SUMFILE ] ; then
218 OLDSUM=`cat $SUMFILE`
219 if [ $SUM = $OLDSUM ] ; then
220 echo "* OpenLDAP does not need updating."
224 echo "* Downloading OpenLDAP..."
225 $WGET $DOWNLOAD_SITE/$LDAP_SOURCE 2>&1 >>$LOG || die
226 echo "* Installing OpenLDAP..."
227 CFLAGS="${CFLAGS} -I${SUPPORT}/include"
229 LDFLAGS="-L${SUPPORT}/lib -Wl,--rpath -Wl,${SUPPORT}/lib"
230 export CFLAGS CPPFLAGS LDFLAGS
231 cd $BUILD 2>&1 >>$LOG || die
232 ( gzip -dc $LDAP_SOURCE | tar -xvf - ) 2>&1 >>$LOG || die
233 cd $BUILD/openldap-2.1.29 2>&1 >>$LOG || die
234 ./configure --prefix=$SUPPORT --enable-bdb 2>&1 >>$LOG || die
235 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
236 LDAP_CONFIG=$SUPPORT/etc/openldap/slapd.conf
238 SLAPD_BINARY=$SUPPORT/libexec/slapd
240 $MAKE install 2>&1 >>$LOG || die
243 rm -f $CITADEL/citadel-easyinstall.sum 2>/dev/null
247 install_prerequisites () {
249 # Create the support directories if they don't already exist
251 mkdir $SUPPORT 2>/dev/null
252 mkdir $SUPPORT/bin 2>/dev/null
253 mkdir $SUPPORT/sbin 2>/dev/null
254 mkdir $SUPPORT/lib 2>/dev/null
255 mkdir $SUPPORT/libexec 2>/dev/null
256 mkdir $SUPPORT/include 2>/dev/null
257 mkdir $SUPPORT/etc 2>/dev/null
276 cd $BUILD 2>&1 >>$LOG || die
277 if [ -f $CITADEL/citadel.config ]
280 echo "* Upgrading your existing Citadel installation."
285 CFLAGS="${CFLAGS} -I${SUPPORT}/include"
287 LDFLAGS="-L${SUPPORT}/lib -Wl,--rpath -Wl,${SUPPORT}/lib"
288 export CFLAGS CPPFLAGS LDFLAGS
290 DO_INSTALL_CITADEL=yes
291 $WGET $DOWNLOAD_SITE/citadel-easyinstall.sum
292 SUM=`cat citadel-easyinstall.sum`
293 SUMFILE=$CITADEL/citadel-easyinstall.sum
294 if [ -r $SUMFILE ] ; then
295 OLDSUM=`cat $SUMFILE`
296 if [ $SUM = $OLDSUM ] ; then
297 echo "* Citadel does not need updating."
298 DO_INSTALL_CITADEL=no
302 if [ $DO_INSTALL_CITADEL = yes ] ; then
303 echo "* Downloading Citadel..."
304 $WGET $DOWNLOAD_SITE/$CITADEL_SOURCE 2>&1 >>$LOG || die
305 echo "* Installing Citadel..."
306 cd $BUILD 2>&1 >>$LOG || die
307 ( gzip -dc $CITADEL_SOURCE | tar -xvf - ) 2>&1 >>$LOG || die
308 cd $BUILD/citadel 2>&1 >>$LOG || die
311 ./configure --prefix=$CITADEL --with-db=$SUPPORT --with-pam --enable-autologin --with-ldap --with-libical --disable-threaded-client 2>&1 >>$LOG || die
313 ./configure --prefix=$CITADEL --with-db=$OK_DB --with-pam --enable-autologin --with-ldap --with-libical --disable-threaded-client 2>&1 >>$LOG || die
315 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
316 if [ $IS_UPGRADE = yes ]
318 echo "* Performing Citadel upgrade..."
319 $MAKE upgrade 2>&1 >>$LOG || die
321 echo "* Performing Citadel install..."
322 $MAKE install 2>&1 >>$LOG || die
323 useradd -c "Citadel service account" -d $CITADEL -s $CITADEL/citadel citadel 2>&1 >>$LOG
328 cd $BUILD 2>&1 >>$LOG || die
329 DO_INSTALL_WEBCIT=yes
330 $WGET $DOWNLOAD_SITE/webcit-easyinstall.sum
331 SUM=`cat webcit-easyinstall.sum`
332 SUMFILE=$WEBCIT/webcit-easyinstall.sum
333 if [ -r $SUMFILE ] ; then
334 OLDSUM=`cat $SUMFILE`
335 if [ $SUM = $OLDSUM ] ; then
336 echo "* WebCit does not need updating."
341 if [ $DO_INSTALL_WEBCIT = yes ] ; then
342 echo "* Downloading WebCit..."
343 $WGET $DOWNLOAD_SITE/$WEBCIT_SOURCE 2>&1 >>$LOG || die
344 echo "* Installing WebCit..."
345 cd $BUILD 2>&1 >>$LOG || die
346 ( gzip -dc $WEBCIT_SOURCE | tar -xvf - ) 2>&1 >>$LOG || die
347 cd $BUILD/webcit 2>&1 >>$LOG || die
348 ./configure --prefix=$WEBCIT --with-libical 2>&1 >>$LOG || die
349 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
350 $MAKE install 2>&1 >>$LOG || die
358 echo "* Configuring your system ..."
360 if [ x$IS_UPGRADE == xyes ] ; then
361 echo Upgrading your existing Citadel installation.
362 #$CITADEL/setup -q || die
363 $CITADEL/setup </dev/tty || die
365 echo This is a new Citadel installation.
366 $CITADEL/setup </dev/tty || die
369 $WEBCIT/setup </dev/tty || die
374 ##### END Functions #####
376 ##### BEGIN main #####
378 # 1. Gather information about the target system
380 [ -n "$MAKE" ] && [ -x `which gmake` ] && MAKE=`which gmake`
381 [ -z "$MAKE" ] && [ -x `which make` ] && MAKE=`which make`
386 #[ -n "$WGET" ] && [ -x `which wget` ] && WGET=`which wget`
387 #[ -z "$WGET" ] && [ -x `which curl` ] && WGET=`which curl`\ -O
389 [ -n "$WGET" ] && [ -x `which curl` ] && WGET=`which curl`\ -O
390 [ -z "$WGET" ] && [ -x `which wget` ] && WGET=`which wget`
395 # 1A. Do we use the native packaging system or build our own copy of Citadel?
397 if [ "$os" = "Linux" ]; then
398 determine_distribution
399 elif [ "$os" = "FreeBSD" ]; then
400 # TODO: We detect FreeBSD but the port is still out of date...
402 elif [ "$os" = "Darwin" ]; then
403 # TODO: Deal with Apple weirdness
413 # 2. Present the installation steps (from 1 above) to the user
415 if dialog --clear </dev/tty ; then
416 CTDL_DIALOG=`which dialog`
421 echo "$SETUP will perform the following actions:"
424 echo "* Download/install supporting libraries (if needed)"
425 echo "* Download/install Citadel (if needed)"
426 echo "* Download/install WebCit (if needed)"
428 echo "Configuration:"
429 echo "* Configure Citadel"
430 echo "* Configure WebCit"
432 echo -n "Perform the above installation steps now? "
435 if [ "`echo $yesno | cut -c 1 | tr N n`" = "n" ]; then
440 echo "Command output will not be sent to the terminal."
441 echo "To view progress, see the $LOG file."
444 # 3. Present any pre-install customizations to the user
446 # TODO: enter in the configuration dialogs
452 # 4. Do the installation
454 # 4A. Download any source code files or binary packages required
456 if [ "$prepackaged" ]; then
459 # 4B. For native packaging, call the native packaging system to install
464 # 4C. If we build our own, compile and install prerequisites then Citadel
466 install_prerequisites
470 # 5. Do post-installation setup