#!/bin/sh # $Id: wpa_supplicant.SlackBuild,v 1.15 2008/02/15 15:47:58 root Exp root $ # Copyright (c) 2004-2008 Eric Hameleers # Permission to use, copy, modify, and distribute this software for # any purpose with or without fee is hereby granted, provided that # the above copyright notice and this permission notice appear in all # copies. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ----------------------------------------------------------------------------- # # Slackware SlackBuild script # =========================== # By: Eric Hameleers # For: wpa_supplicant # Descr: WPA/WPA2/IEEE 802.1X Supplicant # URL: http://hostap.epitest.fi/wpa_supplicant/ # Needs: Source code for supported wireless card drivers # openssl >= 0.9.7 # Changelog: # 20040923CVS-1: * 23/sep/2004 by Eric Hameleers # First release. # 0.3.8-1: * 09/apr/2005 by Eric Hameleers # Update # 0.3.8-2: * 09/apr/2005 by Eric Hameleers # Enabled support for ndiswrapper. # Parametrized the location for the madwifi driver sources. # 20050415-1: * 15/apr/2005 by Eric Hameleers # Switched from 'stable' to 'development'. # The development branch has support for the 'any' ESSID, needed # to connect to 'any open' WiFi network (think: hotel/airport). # 20050806-1: * 06/aug/2005 by Eric Hameleers # This snapshot uses a madwifi-20050707 snapshot. # Make snapshot version visible in the program output. # 20050809-1: * 09/aug/2005 by Eric Hameleers # New snapshot, uses a madwifi-20050809 snapshot for testing # reportedly, tha last madwifi CVS snapshot to work with new # wpa_supplicant snapshots is 20050707. # 20050913-1: * 13/sep/2005 by Eric Hameleers # New snapshot from hostap cvs. Also, make the docs. # 20051005-1: * 05/oct/2005 by Eric Hameleers # New snapshot from hostap cvs, to test against today's madwifi # snapshot. # 20051007-1: * 07/oct/2005 by Eric Hameleers # New snapshot from hostap cvs, to test against today's madwifi. # This time, also incorporate a patch found here: # http://hostap.epitest.fi/bugz/show_bug.cgi?id=63 , which should # make madwifi/WPA work again. # 20051008-1: * 08/oct/2005 by Eric Hameleers # Looks like the patch made it into CVS! We can remove out patch. # 20051014-1: * 14/oct/2005 by Eric Hameleers # Update. # 0.4.7-1: * 31/jan/2006 by Eric Hameleers # Try a "stable" version for the madwifi-ng (Atheros driver) code # Also, get rid of the developer docs. # 0.4.8-1: * 17/feb/2006 by Eric Hameleers # Upgrade. This SlackBuild will now by default delete the # remainders of a previous compile in /tmp/tmp-$PRGNAM/. # 0.4.9-1: * 31/may/2006 by Eric Hameleers # Upgrade. This time, build the wpa_gui and man pages too. # Also, made support for madwifi/hermes/broadcom drivers # configurable using three *_INCLUDES variables. # 0.4.9-2: * 20/sep/2006 by Eric Hameleers # Changed the SlackBuild for Slackware 11.0 compatibility # 0.5.7-1: 29/Jan/2007 by Eric Hameleers # * Update, remove GPL license from the script. # 0.5.8-1: 29/Jan/2007 by Eric Hameleers # * Update # 0.5.9-1: 15/feb/2008 by Eric Hameleers # * Update. Enable DBUS support. # # Run 'sh wpa_supplicant.SlackBuild --cleanup' to build a Slackware package. # The package (.tgz) plus descriptive .txt file are created in /tmp . # Install using 'installpkg'. # # ----------------------------------------------------------------------------- # Set initial variables: SNAPSHOT="" # set to "yes" if you're building from CVS SRCNAM=hostap PRGNAM=wpa_supplicant VERSION=${VERSION:-0.5.10} ARCH=${ARCH:-i486} BUILD=${BUILD:-1} DOCS="ChangeLog COPYING README* *.txt examples wpa_supplicant.conf.sample" # Support for some of the wireless drivers needs the header files of those # drivers. # Change these *_INCLUDES variables to where _your_ driver include directory # is located. If any of these directories is found, support for the driver # will be added to wpa_supplicant. # My madwifi package for Slackware installs the headers here: MADWIFI_INCLUDES="/usr/include/madwifi" HERMES_INCLUDES="" BROADCOM_INCLUDES="" # Where do we look for sources? CWD=`pwd` SRCDIR=`dirname $0` [ "${SRCDIR:0:1}" == "." ] && SRCDIR=${CWD}/${SRCDIR} # Place to build (TMP) package (PKG) and output (OUTPUT) the program: TMP=${TMP:-/tmp/build} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ -z $SNAPSHOT ]; then # build a stable release SOURCE="$SRCDIR/${PRGNAM}-${VERSION}.tar.bz2" SRCURL="http://hostap.epitest.fi/releases/${PRGNAM}-${VERSION}.tar.gz" else SOURCE="" SRCURL="" fi ## ## --- with a little luck, you won't have to edit below this point --- ## ## # Exit the script on errors: set -e trap 'echo "$0 FAILED at line $LINENO!" | tee $OUTPUT/error-${PRGNAM}.log' ERR # Catch unitialized variables: set -u P1=${1:-1} # Slackware 11 and up need other option (gcc > 3.3.x) if [ `gcc -dumpversion | tr -d '.' |cut -c 1-2` -gt 33 ]; then MOPT=tune else MOPT=cpu fi case "$ARCH" in i386) SLKCFLAGS="-O2 -march=i386 -m${MOPT}=i686" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; i486) SLKCFLAGS="-O2 -march=i486 -m${MOPT}=i686" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; s390) SLKCFLAGS="-O2" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; powerpc) SLKCFLAGS="-O2" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; x86_64) SLKCFLAGS="-O2 -fPIC" SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64" ;; athlon-xp) SLKCFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer" SLKLDFLAGS=""; LIBDIRSUFFIX="" ;; esac # Create working directories: mkdir -p $TMP/tmp-$PRGNAM # location to build the source rm -rf $TMP/tmp-$PRGNAM/* # By default we remove the remnants of previous build mkdir -p $PKG # place for the package to be built rm -rf $PKG/* # We always erase old package's contents: mkdir -p $OUTPUT # place for the package to be saved # Source file availability: if [ -z $SNAPSHOT ]; then # download stable release if ! [ -f ${SOURCE} ]; then if ! [ "x${SRCURL}" == "x" ]; then # Check if the $SRCDIR is writable at all - if not, download to $OUTPUT [ -w "$SRCDIR" ] || SOURCE="$OUTPUT/`basename $SOURCE`" echo "Source '`basename ${SOURCE}`' not available yet..." echo "Will download file to `dirname $SOURCE`" wget -nv --connect-timeout=20 -O "${SOURCE}" "${SRCURL}" || true if [ $? -ne 0 ]; then echo "Downloading '`basename ${SOURCE}`' failed... aborting the build." mv -f "${SOURCE}" "${SOURCE}".FAIL exit 1 fi else echo "File '`basename ${SOURCE}`' not available... aborting the build." exit 1 fi fi fi if [ "$P1" == "--download" ]; then echo "Download complete." exit 0 fi # Package building process starts here: echo "++" echo "|| $PRGNAM-$VERSION" echo "++" cd $TMP/tmp-$PRGNAM if ! [ -f $SRCDIR/${PRGNAM}.defconfig ]; then echo "Could not find ${PRGNAM}.defconfig!" exit 1 fi echo "Extracting the source archive(s) for $PRGNAM..." if [ -z "$SNAPSHOT" ]; then tar -xvf ${SOURCE} cd ${PRGNAM}-${VERSION} else tar -xvf $SRCDIR/${SRCNAM}-${VERSION}.tar.gz cd ${SRCNAM}-${VERSION}/${PRGNAM} sed -i -e \ "s/^#define VERSION_STR \"\(.*\)\"/#define VERSION_STR \"\1_$VERSION\"/" \ version.h fi # Create the configuration file for building wpa_supplicant: cat $SRCDIR/${PRGNAM}.defconfig > .config if [ ! -z $MADWIFI_INCLUDES -a -d $MADWIFI_INCLUDES ]; then echo "Adding madwifi driver (Atheros) support" | tee -a $OUTPUT/configure-${PRGNAM}.log cat <<-EOT >> .config CONFIG_DRIVER_MADWIFI=y CFLAGS += -I${MADWIFI_INCLUDES} EOT fi if [ ! -z $HERMES_INCLUDES -a -d $HERMES_INCLUDES ]; then echo "Adding hermes driver (Agere) support" | tee -a $OUTPUT/configure-${PRGNAM}.log cat <<-EOT >> .config CONFIG_DRIVER_HERMES=y CFLAGS += -I${HERMES_INCLUDES} EOT fi if [ ! -z $BROADCOM_INCLUDES -a -d $BROADCOM_INCLUDES ]; then echo "Adding broadcom driver support" | tee -a $OUTPUT/configure-${PRGNAM}.log cat <<-EOT >> .config CONFIG_DRIVER_BROADCOM=y CFLAGS += -I${BROADCOM_INCLUDES} EOT fi chown -R root:root . chmod -R u+w,go+r-w,a-s . # Build the binaries: echo Building ... make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log # Build the GUI client make wpa_gui 2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log # Make man pages if needed pushd doc/docbook if ! ls *.? >/dev/null 2>&1 ; then make man 2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log fi popd # Do not build the developer docs: #PATH=".:$PATH" make docs 2>&1 | tee -a $OUTPUT/make-${PRGNAM}.log # This goes into the doc directory later on: cp wpa_supplicant.conf wpa_supplicant.conf.sample # Install binaries: mkdir -p $PKG/usr/sbin $PKG/usr/bin cp wpa_supplicant wpa_passphrase wpa_cli $PKG/usr/sbin/ cp wpa_gui/wpa_gui $PKG/usr/bin/ # Install dbus configuration file: mkdir -p $PKG/etc/dbus-1/system.d/ cp dbus-wpa_supplicant.conf $PKG/etc/dbus-1/system.d/dbus-wpa_supplicant.conf.new # Install a .desktop file for wpa_gui: mkdir -p $PKG/usr/share/applications cat < $PKG/usr/share/applications/wpa_gui.desktop [Desktop Entry] Name=wpa_gui Comment[en]=Wpa_supplicant management Exec=kdesu wpa_gui Icon=network-config Type=Application Categories=Qt;Network; EOT # Install man pages: for m in 5 8; do mkdir -p $PKG/usr/man/man${m} cp doc/docbook/*.${m} $PKG/usr/man/man${m}/ done # Install a default configuration file: mkdir -p $PKG/etc cat <<-_EOT_ > $PKG/etc/wpa_supplicant.conf.new # See /usr/doc/${PRGNAM}-${VERSION}/wpa_supplicant.conf.sample # for many more options that you can use in this file. # This line enables the use of wpa_cli which is used by rc.wireless # if possible (to check for successful association) ctrl_interface=/var/run/wpa_supplicant # By default, only root (group 0) may use wpa_cli ctrl_interface_group=0 eapol_version=1 ap_scan=1 fast_reauth=1 # WPA protected network, supply your own ESSID and WPAPSK here: network={ scan_ssid=0 ssid="your_essid_here" proto=WPA key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 psk=your_psk_here } # Plaintext connection (no WPA, no IEEE 802.1X), # nice for hotel/airport types of WiFi network. network={ key_mgmt=NONE priority=0 } _EOT_ # Create the 'doinst.sh' script: mkdir -p $PKG/install 2>/dev/null cat < $PKG/install/doinst.sh # Handle the incoming configuration files: config() { for infile in \$1; do NEW="\$infile" OLD="\`dirname \$NEW\`/\`basename \$NEW .new\`" # If there's no config file by that name, mv it over: if [ ! -r \$OLD ]; then mv \$NEW \$OLD elif [ "\`cat \$OLD | md5sum\`" = "\`cat \$NEW | md5sum\`" ]; then # toss the redundant copy rm \$NEW fi # Otherwise, we leave the .new copy for the admin to consider... done } config etc/wpa_supplicant.conf.new config etc/dbus-1/system.d/dbus-wpa_supplicant.conf.new EOINS # Add the documentation: mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION || true cp -a $SRCDIR/README.slackware $PKG/usr/doc/${PRGNAM}-${VERSION}/ || true chmod -R a-w $PKG/usr/doc/$PRGNAM-$VERSION/* chown -R root:root $PKG/usr/doc/$PRGNAM-$VERSION/* # This should only be read/write by root: chmod 600 $PKG/etc/wpa_supplicant.conf.new # Compress the man page(s): find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \; # Strip binaries: ( 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 ) # Add a package description: mkdir -p $PKG/install cat $SRCDIR/slack-desc > $PKG/install/slack-desc if [ -f $SRCDIR/doinst.sh ]; then cat $SRCDIR/doinst.sh >> $PKG/install/doinst.sh fi # Build the package: cd $PKG makepkg --linkadd y --chown n $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz 2>&1 | tee $OUTPUT/makepkg-${PRGNAM}.log (cd $OUTPUT && md5sum ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz > ${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.tgz.md5) cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txt # Clean up the extra stuff: if [ "$P1" = "--cleanup" ]; then rm -rf $TMP/tmp-$PRGNAM rm -rf $PKG fi