#!/bin/bash # # Build and package an EAPI-enabled Apache on Slackware. # (libmm is also installed with this package) # by: David Cantrell # Maintained by: Patrick Volkerding # Small changes by rhatto # CWD="`pwd`" if [ -f ~/.slackbuildrc ]; then source ~/.slackbuildrc elif [ -f /etc/slackbuildrc ]; then source /etc/slackbuildrc fi APACHE_VER=${APACHE_VER:=1.3.37} MM_VER=${MM_VER:=1.3.1} MODSSL_VER=${MODSSL_VER:=2.8.28-1.3.37} PACKAGE="apache" ARCH=${ARCH:=i486} BUILD=${BUILD:=1rha} TMP=${TMP:=/tmp} SRC_DIR=${SRC:=$CWD} REPOS=${REPOS:=$TMP} if [ "$ARCH" == "x86_64" ]; then LIBDIR=/usr/lib64 else LIBDIR=/usr/lib fi RTOOL="wget" PACKAGE_EXT="gz" SRC="$PACKAGE"_"$APACHE_VER.tar.$PACKAGE_EXT" URL="http://ftp.unicamp.br/pub/apache/httpd/$SRC" MM="mm-$MM_VER.tar.gz" MM_URL="ftp://ftp.ossp.org/pkg/lib/mm/$MM" MODSSL="mod_ssl-$MODSSL_VER.tar.gz" MODSSL_URL="http://www.modssl.org/source/$MODSSL" if [ "$PACKAGE_EXT" == "bz2" ]; then tarflag="j" else tarflag="z" fi SRC_DIR="$SRC_DIR/$PACKAGE" mkdir -p $SRC_DIR if [ "$RTOOL" == "wget" ]; then if [ ! -f "$SRC_DIR/$SRC" ]; then wget "$URL" -O "$SRC_DIR/$SRC" fi if [ ! -f "$SRC_DIR/$MM" ]; then wget "$MM_URL" -O "$SRC_DIR/$MM" fi if [ ! -f "$SRC_DIR/$MODSSL" ]; then wget "$MODSSL_URL" -O "$SRC_DIR/$MODSSL" fi fi TMP="$TMP/$PACKAGE" rm -rf $TMP mkdir -p $TMP cd $TMP PKG=$TMP/package-$PACKAGE mkdir -p $PKG ( cd $PKG ; explodepkg $CWD/_apache.tar.gz ) cd $TMP rm -rf mm-$MM_VER apache_$APACHE_VER mod_ssl-$MODSSL_VER tar xvzf $SRC_DIR/$MM tar xvzf $SRC_DIR/$SRC tar xvzf $SRC_DIR/$MODSSL # build libmm cd $TMP/mm-$MM_VER chown -R root.root . ./configure \ --prefix=/usr \ --enable-static \ --libdir=$LIBDIR \ --enable-shared make -j3 # EAPI is not part of Apache by default, it comes from mod_ssl. It # allows us to build and package mod_ssl seperately. We pull out the # EAPI patch and apply it to Apache so that our build will have that # support enabled. We also apply a few other patches from mod_ssl. ( cd $TMP/apache_$APACHE_VER cat $TMP/mod_ssl-$MODSSL_VER/pkg.eapi/eapi.patch | patch -p0 cat $TMP/mod_ssl-$MODSSL_VER/pkg.addon/addon.patch | patch -p0 ) ( cd $TMP/mod_ssl-$MODSSL_VER/pkg.eapi cp -a *.h $TMP/apache_$APACHE_VER/src/include cp -a *.c $TMP/apache_$APACHE_VER/src/ap ) ( cd $TMP/mod_ssl-$MODSSL_VER/pkg.addon cp -a *.c $TMP/apache_$APACHE_VER/src/modules/extra cp -a *.html $TMP/apache_$APACHE_VER/htdocs/manual/mod ) # build apache cd $TMP/apache_$APACHE_VER # Stop using old obsolete DB1. zcat $CWD/apache.dbm.diff.gz | patch -p1 --verbose || exit 1 if [ "$APACHE_VER" == "1.3.35" ]; then # Clearly 1.3.35 got minimal testing... zcat $CWD/apache_1.3.35.stupid.include.bug.diff.gz | patch -p1 --verbose || exit 1 fi chown -R root.root . cat $CWD/config.layout.slack >> config.layout EAPI=SYSTEM \ ./configure \ --with-layout=Slackware \ --enable-module=most \ --enable-shared=max \ --manualdir=/var/www/htdocs/manual \ --enable-rule=eapi make -j3 # install libmm cd $TMP/mm-$MM_VER make DESTDIR=$PKG install chmod 755 $PKG/usr/lib/libmm.so.* mkdir -p $PKG/usr/doc/mm-$MM_VER cp -a \ ChangeLog INSTALL LICENSE PORTING README THANKS \ $PKG/usr/doc/mm-$MM_VER # install apahe cd $TMP/apache_$APACHE_VER make install root=$PKG mkdir -p $PKG/usr/doc/apache-$APACHE_VER cp -a \ ABOUT_APACHE Announcement INSTALL KEYS LICENSE README README.configure \ $PKG/usr/doc/apache-$APACHE_VER cp -a \ $TMP/mod_ssl-$MODSSL_VER/pkg.eapi/README.EAPI \ $PKG/usr/doc/apache-$APACHE_VER # we do not want these in the package, if they don't exist on the system # then we copy the default one in place as the real file ( cd $PKG/etc/apache rm -rf access.conf httpd.conf magic mime.types srm.conf ) # we add a block to the end of httpd.conf and touch zero length files # for the SSL and PHP module packages cat << EOF >> $PKG/etc/apache/httpd.conf.default # By default, all external Apache modules are disabled. To enable a particular # module for Apache, make sure the necessary packages are installed. Then # uncomment the appropriate Include line below, save the file, and restart # Apache. Note that some modules may need additional configuration steps. For # example, mod_ssl requires a site certificate which you may need to generate. # # Lastly, if you remove a module package, be sure to edit this file and comment # out the appropriate Include line. # ==> mod_php configuration settings <== # # PACKAGES REQUIRED: openssl-solibs (A series) and/or openssl (N series), # mysql (AP series), gmp (L series), mhash (L series), # and apache (N series) # #Include /etc/apache/mod_php.conf # ==> mod_ssl configuration settings <== # # PACKAGES REQUIRED: apache (N series) and openssl (N series) # #Include /etc/apache/mod_ssl.conf EOF # some housekeeping ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) gzip -9 $PKG/usr/man/*/* chown -R root.bin $PKG/usr/bin chown -R root.bin $PKG/usr/sbin # This is a point of overlap with the mod_ssl package, so we'll make it # a symlink so that it's less of a trap for the unsuspecting admin: ( cd $PKG/usr/sbin mv apachectl apachectl-standard # Better to use some custom code in doinst.sh. #ln -sf apachectl-standard apachectl ) # Add slack-desc: mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc # make the package cd $PKG makepkg -l y -c n $REPOS/apache-$APACHE_VER-$ARCH-$BUILD.tgz if [ "$CLEANUP" == "yes" ]; then rm -rf $TMP fi