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, version 2.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 # Reading this script? Here's some helpful hints:
23 # If you're seeing this in your browser, it's probably not what you want.
24 # You can either save it to disk and run it, or do it the easy way:
26 # curl http://easyinstall.citadel.org/install | sh
28 # Note that this script installs software on your system and so it requires
29 # root privileges. Feel free to inspect the script to make sure we didn't
30 # do anything stupid...
32 # We have provided you the source code according to the terms of the respective
33 # software licenses included in the source code packages, even if you choose
34 # not to keep the source code around. You can always download it again later.
36 # We install the following versions in this release:
44 ###############################################################################
46 # This is the general stuff we're going to do, in order:
48 # 1. Gather information about the target system
49 # 2. Present the installation steps (from 1 above) to the user
50 # 3. Present any pre-install customizations to the user
51 # 4. Do the installation
52 # A. Download any source code files or binary packages required
53 # B. For native packaging, call the native packaging system to install
54 # C. If we build our own, compile and install prerequisites then Citadel
55 # 5. Do post-installation setup
59 ###############################################################################
62 # Begin user customization area
64 # These two directories specify where Citadel and its private support
65 # libraries will be installed. This keeps them safely tucked away from
66 # the rest of your system. The defaults should be fine for most people.
67 # NB: When binary packages are installed, these settings are ignored!
68 SUPPORT=/usr/local/ctdlsupport
69 CITADEL=/usr/local/citadel
70 WEBCIT=/usr/local/webcit
72 BUILD=$WORKDIR/citadel-build.$$
73 LOG=$WORKDIR/citadel-install-log.txt
74 export SUPPORT CITADEL WEBCIT
78 # End user customization area
80 # We're now exporting a bunch of environment variables, and here's a list:
81 # CITADEL_INSTALLER Set to "web" to indicate this script
82 # CITADEL Directory where Citadel is installed
83 # WEBCIT Directory where WebCit is installed
84 # SUPPORT Directory where support programs are installed
85 # SLAPD_BINARY Location of the slapd binary
86 # DISTRO_MAJOR Linux distribution name, if applicable
87 # DISTRO_MINOR Linux distribution name, if applicable
88 # DISTRO_VERSION Linux distribution version (major digit) if applicable
89 # CC C compiler being used
90 # MAKE Make program being used
91 # CFLAGS C compiler flags
92 # LDFLAGS Linker flags
93 # IS_UPGRADE Set to "yes" if upgrading an existing Citadel
94 # IS_AUTOLOGIN Set to "yes" to force enabling autologin
95 # CTDL_DIALOG Where (if at all) the "dialog" program may be found
97 # Let Citadel setup recognize the Citadel installer
99 export CITADEL_INSTALLER
101 DOWNLOAD_SITE=http://easyinstall.citadel.org
103 # Original source code packages.
104 DB_SOURCE=db-4.3.29.NC.tar.gz
105 # DB_PATCHES=db-x.x.x.patches
106 ICAL_SOURCE=libical-0.26-6.aurore.tar.gz
107 CITADEL_SOURCE=citadel-easyinstall.tar.gz
108 WEBCIT_SOURCE=webcit-easyinstall.tar.gz
110 SETUP="Citadel Easy Install"
113 ##### BEGIN Functions #####
116 echo Easy Install is aborting.
117 echo Please report this problem to the Citadel developers.
126 if [ -x `which wget` ] ; then
127 wget $FILENAME >/dev/null 2>>$LOG || die
129 if [ -x `which curl` ] ; then
130 curl $FILENAME >$FILENAME 2>>$LOG || die
132 echo Unable to find a wget or curl command.
133 echo Easy Install cannot continue.
142 determine_distribution () {
143 # First look for Red Hat in general
144 if [ -x /bin/rpm ]; then
145 RELEASE_FILE=/dev/null
146 if /bin/rpm -q redhat-release >/dev/null 2>&1; then
148 RELEASE_FILE=/etc/redhat-release
150 if /bin/rpm -q whitebox-release >/dev/null 2>&1; then
151 DISTRO_MAJOR=WhiteBox
152 RELEASE_FILE=/etc/whitebox-release
154 if /bin/rpm -q fedora-release >/dev/null 2>&1; then
157 RELEASE_FILE=/etc/fedora-release
159 # Then look for specific version
160 ( cat $RELEASE_FILE | grep Enterprise ) >/dev/null 2>&1 && \
161 DISTRO_MINOR=Enterprise
162 DISTRO_VERSION=`tr -cd "[^0-9.]" < $RELEASE_FILE | cut -c 1`
166 if [ -f /etc/gentoo-release ]; then
171 # TODO: check for Debian
175 cd $BUILD 2>&1 >>$LOG || die
176 FILENAME=$DOWNLOAD_SITE/libical-easyinstall.sum ; download_this
177 SUM=`cat libical-easyinstall.sum`
178 SUMFILE=$SUPPORT/etc/libical-easyinstall.sum
179 if [ -r $SUMFILE ] ; then
180 OLDSUM=`cat $SUMFILE`
181 if [ $SUM = $OLDSUM ] ; then
182 echo "* libical does not need updating."
186 echo "* Downloading libical..."
187 FILENAME=$DOWNLOAD_SITE/$ICAL_SOURCE ; download_this
188 echo "* Installing libical..."
189 ( gzip -dc $ICAL_SOURCE | tar -xf - ) 2>&1 >>$LOG || die
190 cd $BUILD/libical-0.26 2>&1 >>$LOG || die
191 ./configure --prefix=$SUPPORT 2>&1 >>$LOG || die
192 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
193 $MAKE install 2>&1 >>$LOG || die
196 rm -f $CITADEL/citadel-easyinstall.sum 2>/dev/null
197 rm -f $WEBCIT/webcit-easyinstall.sum 2>/dev/null
201 cd $BUILD 2>&1 >>$LOG || die
202 FILENAME=$DOWNLOAD_SITE/db-easyinstall.sum ; download_this
203 SUM=`cat db-easyinstall.sum`
204 SUMFILE=$SUPPORT/etc/db-easyinstall.sum
205 if [ -r $SUMFILE ] ; then
206 OLDSUM=`cat $SUMFILE`
207 if [ $SUM = $OLDSUM ] ; then
208 echo "* Berkeley DB does not need updating."
212 echo "* Downloading Berkeley DB..."
213 FILENAME=$DOWNLOAD_SITE/$DB_SOURCE ; download_this
214 echo "* Installing Berkeley DB..."
215 ( gzip -dc $DB_SOURCE | tar -xf - ) 2>&1 >>$LOG || die
216 cd $BUILD/db-4.3.29.NC 2>&1 >>$LOG || die
217 #patch -p0 < ../$DB_PATCHES 2>&1 >>$LOG || die
218 cd $BUILD/db-4.3.29.NC/build_unix 2>&1 >>$LOG || die
219 ../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
220 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
221 $MAKE install 2>&1 >>$LOG || die
224 rm -f $CITADEL/citadel-easyinstall.sum 2>/dev/null
227 install_prerequisites () {
229 # Create the support directories if they don't already exist
231 mkdir $SUPPORT 2>/dev/null
232 mkdir $SUPPORT/bin 2>/dev/null
233 mkdir $SUPPORT/sbin 2>/dev/null
234 mkdir $SUPPORT/lib 2>/dev/null
235 mkdir $SUPPORT/libexec 2>/dev/null
236 mkdir $SUPPORT/include 2>/dev/null
237 mkdir $SUPPORT/etc 2>/dev/null
252 cd $BUILD 2>&1 >>$LOG || die
253 if [ -f $CITADEL/citadel.config ]
256 echo "* Upgrading your existing Citadel installation."
261 CFLAGS="-I${SUPPORT}/include"
263 LDFLAGS="-L${SUPPORT}/lib -Wl,--rpath -Wl,${SUPPORT}/lib"
264 export CFLAGS CPPFLAGS LDFLAGS
266 DO_INSTALL_CITADEL=yes
267 FILENAME=$DOWNLOAD_SITE/citadel-easyinstall.sum ; download_this
268 SUM=`cat citadel-easyinstall.sum`
269 SUMFILE=$CITADEL/citadel-easyinstall.sum
270 if [ -r $SUMFILE ] ; then
271 OLDSUM=`cat $SUMFILE`
272 if [ $SUM = $OLDSUM ] ; then
273 echo "* Citadel does not need updating."
274 DO_INSTALL_CITADEL=no
278 if [ $DO_INSTALL_CITADEL = yes ] ; then
279 echo "* Downloading Citadel..."
280 FILENAME=$DOWNLOAD_SITE/$CITADEL_SOURCE ; download_this
281 echo "* Installing Citadel..."
282 cd $BUILD 2>&1 >>$LOG || die
283 ( gzip -dc $CITADEL_SOURCE | tar -xf - ) 2>&1 >>$LOG || die
284 cd $BUILD/citadel 2>&1 >>$LOG || die
285 if [ x$IS_AUTOLOGIN = xyes ] ; then
286 AL="--enable-autologin"
292 ./configure --prefix=$CITADEL --with-db=$SUPPORT --with-pam $AL --with-libical --disable-threaded-client 2>&1 >>$LOG || die
294 ./configure --prefix=$CITADEL --with-db=$OK_DB --with-pam $AL --with-libical --disable-threaded-client 2>&1 >>$LOG || die
296 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
297 if [ $IS_UPGRADE = yes ]
299 echo "* Performing Citadel upgrade..."
300 $MAKE upgrade 2>&1 >>$LOG || die
302 echo "* Performing Citadel install..."
303 $MAKE install 2>&1 >>$LOG || die
304 useradd -c "Citadel service account" -d $CITADEL -s $CITADEL/citadel citadel 2>&1 >>$LOG
309 cd $BUILD 2>&1 >>$LOG || die
310 DO_INSTALL_WEBCIT=yes
311 FILENAME=$DOWNLOAD_SITE/webcit-easyinstall.sum ; download_this
312 SUM=`cat webcit-easyinstall.sum`
313 SUMFILE=$WEBCIT/webcit-easyinstall.sum
314 if [ -r $SUMFILE ] ; then
315 OLDSUM=`cat $SUMFILE`
316 if [ $SUM = $OLDSUM ] ; then
317 echo "* WebCit does not need updating."
322 if [ $DO_INSTALL_WEBCIT = yes ] ; then
323 echo "* Downloading WebCit..."
324 FILENAME=$DOWNLOAD_SITE/$WEBCIT_SOURCE ; download_this
325 echo "* Installing WebCit..."
326 cd $BUILD 2>&1 >>$LOG || die
327 ( gzip -dc $WEBCIT_SOURCE | tar -xf - ) 2>&1 >>$LOG || die
328 cd $BUILD/webcit 2>&1 >>$LOG || die
329 ./configure --prefix=$WEBCIT --with-libical 2>&1 >>$LOG || die
330 $MAKE $MAKEOPTS 2>&1 >>$LOG || die
331 $MAKE install 2>&1 >>$LOG || die
339 echo "* Configuring your system ..."
341 if [ x$IS_UPGRADE == xyes ] ; then
342 echo Upgrading your existing Citadel installation.
343 $CITADEL/setup </dev/tty || die
345 echo This is a new Citadel installation.
346 $CITADEL/setup </dev/tty || die
349 $WEBCIT/setup </dev/tty || die
354 ##### END Functions #####
356 ##### BEGIN main #####
358 # 1. Gather information about the target system
360 # Non-GNU make does not work.
361 # This probably ought to be fixed, but for now we will simply require GNU make.
364 if gmake -v 2>&1 | grep -i GNU ; then
367 if make -v 2>&1 | grep -i GNU ; then
372 if [ $MAKE == xx ] ; then
374 echo 'Easy Install requires GNU Make (gmake), which was not found.'
375 echo 'Please install gmake and try again.'
390 # 1A. Do we use the native packaging system or build our own copy of Citadel?
392 if [ "$os" = "Linux" ]; then
393 determine_distribution
394 elif [ "$os" = "FreeBSD" ]; then
395 # TODO: We detect FreeBSD but the port is still out of date...
397 elif [ "$os" = "Darwin" ]; then
398 # TODO: Deal with Apple weirdness
409 # 2. Present the installation steps (from 1 above) to the user
411 if dialog 2>&1 </dev/tty | grep gauge >/dev/null 2>&1 ; then
412 CTDL_DIALOG=`which dialog`
414 elif cdialog 2>&1 </dev/tty | grep gauge >/dev/null 2>&1 ; then
415 CTDL_DIALOG=`which cdialog`
420 echo "$SETUP will perform the following actions:"
423 echo "* Download/install supporting libraries (if needed)"
424 echo "* Download/install Citadel (if needed)"
425 echo "* Download/install WebCit (if needed)"
427 echo "Configuration:"
428 echo "* Configure Citadel"
429 echo "* Configure WebCit"
430 if [ x$IS_AUTOLOGIN = xyes ] ; then
431 echo 'NOTE: this is an autologin installation.'
432 echo ' Authentication against user accounts on the host system is enabled.'
435 echo -n "Perform the above installation steps now? "
438 if [ "`echo $yesno | cut -c 1 | tr N n`" = "n" ]; then
443 echo "Command output will not be sent to the terminal."
444 echo "To view progress, see the $LOG file."
447 # 3. Present any pre-install customizations to the user
449 # TODO: enter in the configuration dialogs
455 # 4. Do the installation
457 # 4A. Download any source code files or binary packages required
459 if [ "$prepackaged" ]; then
462 # 4B. For native packaging, call the native packaging system to install
467 # 4C. If we build our own, compile and install prerequisites then Citadel
469 install_prerequisites
473 # 5. Do post-installation setup