#!/bin/sh # $Id: wpa_supplicant.SlackBuild,v 1.9 2006/09/20 22:15:23 root Exp root $ # Copyright (c) 2006 Eric Hameleers # Distributed under the terms of the GNU General Public License, Version 2 # ------------------------------------------------------------------------------ # # Slackware SlackBuild script # =========================== # By: Eric Hameleers # For: wpa_supplicant # URL: http://hostap.epitest.fi/wpa_supplicant/ # Descr: WPA/WPA2/IEEE 802.1X Supplicant # Requires: 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.4.9-1: * 2006-09-29 by Patrick Volkerding # Chopped out a bunch of logging in $CWD, which could be # a CD or DVD that can't be written to. Wished this looked # like a traditional SlackBuild so that I could understand # it better, but beggars can't be choosers (as the saying # goes...) # Things like downloading sources, logging progress (use # 'script' for "bob's" sake!), and other fluff doesn't # belong in a SlackBuild. Just my MHO as the one who # interprets the SlackBuild specifications. Take it or # leave it... # Backed the $BUILD up to -1, since this is the first # appearance of this package in Slackware. # Make the conf file only rw to root. I figured since this # contains a secret key that it might be a good idea. # # ------------------------------------------------------------------------------ # # Run 'sh SlackBuild --cleanup' to build a Slackware package. # The package (.tgz) plus descriptive .txt file and a .md5 file with # the md5sum are created in /tmp . # Install the package using 'installpkg '. # # ------------------------------------------------------------------------------ # --- INIT --- # Set initial variables: SNAPSHOT="" # set to "yes" if you're building from CVS SRCNAM=hostap PRGNAM=wpa_supplicant VERSION=${VERSION:-0.4.9} ARCH=${ARCH:-i486} BUILD=1 DOC="ChangeLog COPYING README* 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="" if [ -z $SNAPSHOT ]; then # build a stable release SOURCE="${PRGNAM}-${VERSION}.tar.gz" SRCURL="http://hostap.epitest.fi/releases/${PRGNAM}-${VERSION}.tar.gz" fi # 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} # Exit the script on errors: set -e trap 'echo "$0 FAILED!"' ERR # Catch unitialized variables: set -u P1=${1:-1} ## ## --- with a little luck, you won't have to edit below this point --- ## ## # 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 if [ ! -d $TMP/tmp-$PRGNAM ]; then mkdir -p $TMP/tmp-$PRGNAM # location to build the source elif [ "$P1" != "--oldbuild" ]; then # If the "--oldbuild" parameter is present, we keep # the old build files and continue; # By default we remove the remnants of previous build and continue: rm -rf $TMP/tmp-$PRGNAM/* fi if [ "$PKG" = "" -o "$PKG" = "/" ] ; then echo "Please provide a sane value for the variable 'PKG'." exit 1 elif [ ! -d $PKG ]; then mkdir -p $PKG # place for the package to be built else rm -rf $PKG/* # We always erase old package's contents: fi if [ ! -d $OUTPUT ]; then mkdir -p $OUTPUT # place for the package to be saved fi # --- SOURCE FILE AVAILABILITY --- if [ -z $SNAPSHOT ]; then # download stable release if ! [ -f ${SRCDIR}/${SOURCE} ]; then if ! [ "x${SRCURL}" == "x" ]; then echo "Source '${SOURCE}' not available yet... will download now:" wget -O "${SRCDIR}/${SOURCE}" "${SRCURL}" || true if [ $? -ne 0 ]; then echo "Downloading '${SOURCE}' failed... aborting the build." mv -f "${SRCDIR}/${SOURCE}" "${SRCDIR}/${SOURCE}".FAIL exit 1 fi else echo "File '${SOURCE}' not available... aborting the build." exit 1 fi fi fi if [ "$P1" == "--download" ]; then echo "Download complete." exit 0 fi # --- PACKAGE BUILDING --- echo "++" echo "|| $PRGNAM-$VERSION" echo "++" # Explode the package framework: if [ -e $SRCDIR/_$PRGNAM.tar.gz ]; then (cd $PKG && explodepkg $SRCDIR/_$PRGNAM.tar.gz ) fi cd $TMP/tmp-$PRGNAM # # Extract the source archive, patch and modify # if ! [ -f $SRCDIR/${PRGNAM}-${VERSION}.defconfig ]; then echo "Could not find ${PRGNAM}-${VERSION}.defconfig!" echo "You need to create that file using ${SRCNAM}-${VERSION}/${PRGNAM}/defconfig as example." exit 1 fi if [ -z "$SNAPSHOT" ]; then tar -xzvf $SRCDIR/${PRGNAM}-${VERSION}.tar.gz cd ${PRGNAM}-${VERSION} else tar -xzvf $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 wpa_supplicant: cat $SRCDIR/${PRGNAM}-${VERSION}.defconfig > .config if [ ! -z $MADWIFI_INCLUDES -a -d $MADWIFI_INCLUDES ]; then echo "Adding madwifi driver (Atheros) support" 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" 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" cat <<-EOT >> .config CONFIG_DRIVER_BROADCOM=y CFLAGS += -I${BROADCOM_INCLUDES} EOT fi chown -R root:root . make || exit 1 # Build the GUI client make wpa_gui || exit 1 # Make man pages if needed ( cd doc/docbook if ! ls *.? >/dev/null 2>&1 ; then make man || exit 1 fi ) # Do not build the developer docs #PATH=".:$PATH" make docs 2>&1 || exit 1 # This goes in the doc directory later on: cp wpa_supplicant.conf wpa_supplicant.conf.sample # Install binaries mkdir -p $PKG/usr/sbin $PKG/usr/X11R6/bin cp wpa_supplicant wpa_passphrase wpa_cli $PKG/usr/sbin/ cp wpa_gui/wpa_gui $PKG/usr/X11R6/bin/ # 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 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. # You'll need a recent version of wireless-tools for this! network={ ssid="any" key_mgmt=NONE priority=2 } _EOT_ # This should only be read/write by root: chmod 600 $PKG/etc/wpa_supplicant.conf.new # Strip binaries and libs, fix ownership: chown -R root:root $PKG chmod -R o-w $PKG ( 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 ) # --- 'doinst.sh' script: ------ mkdir -p $PKG/install 2>/dev/null || true 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 EOINS # --- DOCUMENTATION --- # Copy the documentation: mkdir -p $PKG/usr/doc/${PRGNAM}-${VERSION} cp -a $DOC $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}/* # Compress the man page(s) [ -d $PKG/usr/man ] && \ find $PKG/usr/man -type f -name "*.?" -exec gzip -9f {} \; # --- PACKAGE DESCRIPTION --- mkdir -p $PKG/install 2>/dev/null || true cat $SRCDIR/slack-desc > $PKG/install/slack-desc # --- PACKAGE CREATION --- # Build the package and compute its md5 checksum: cd $PKG makepkg --linkadd y --chown n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.tgz #cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD.txt #(cd $OUTPUT && md5sum $PRGNAM-$VERSION-$ARCH-$BUILD.tgz > $PRGNAM-$VERSION-$ARCH-$BUILD.tgz.md5) # --- CLEANUP --- # Clean up the extra stuff: if [ "$P1" = "--cleanup" ]; then rm -rf $TMP/tmp-$PRGNAM rm -rf $PKG fi