#!/bin/bash # Slackware build script for SystemGraph # http://www.decagon.de/sw/systemgraph/ # Copyright 2008 Leonardo Roman (leoroman@gmail.com) # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS 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 AUTHOR 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. # Retorna el nombre del archivo sin la extecion de empaquetado: # .tar.gz, .tgz , .bz2 ... get_basename() { # $1 Archivo comprimido del cual se quiere eliminar la extencion BASE=$(basename $1 .tgz) [[ "$BASE" != "$1" ]] || BASE=$(basename $1 .tar.gz) [[ "$BASE" != "$1" ]] || BASE=$(basename $1 .tar.bz2) echo $BASE } # $1 DIR donde se encuentra la instalacion a emaquetar # $2 Nombre del Paquete a crear # $3 Destino donde MOVER el paquete creado create_package() { echo "Creando el paquete $2 ..." 1>&2 cd $1 || \ # && \ Por ahora el sig bloque se omite... { find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : \ | xargs strip --strip-unneeded 2> /dev/null || true find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : \ | xargs strip --strip-unneeded 2> /dev/null || true } && \ # Compress the man page(s): find usr/man -type f -name "*.?" -exec gzip -9f '{}' \; &> /dev/null makepkg --linkadd y --chown n $3/$2 &>/dev/null \ || echo "Error empaquetando: $2" 1>&2 # && exit 1 #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 echo "Eliminando directorio de instalacion temporal: $1" cd - 1>/dev/null rm -rf $1 } # Analiza el string $1 separandolo por '-' y retorna todo # lo anterior a la primer porcion que es un numero + # la primer porcion que ES un numero. # es decir: nombre-packete-1.0 get_package_name() { IFS+='-' ; PN='' PV='' for I in $1 ; do if [ ! $PV ]; then echo $I | grep ^[[:digit:]] >/dev/null && PV=$I && continue #|| echo $I (( ${#PN} != 0 )) && PN=$PN'-' PN+=$I else PV+="_$I" fi done IFS=''; echo $PN-$PV } # Reotrna el string usado para las optimizaciones del compilador. # @param $1 : $ARCH . Ejemplo: i486 get_compiler_optimizations() { # 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 echo "$SLKCFLAGS" } # Cambia un algo de la forma: /var/tmp -> \/var\/tmp quote_for_sed() { echo $1 | sed "s/\//\\\\\//g" ; } if [ $(whoami) != 'root' ] ; then echo "ERROR: You need to be root for create packages..." exit 1 fi # Set initial variables: #Archivo comprimido con el source del programa: SRC_FILE=$1 SRC_DIR=$(get_basename $SRC_FILE) # Nombre del programa + version: PKG_NAME_AND_VERSION=$(get_package_name $SRC_DIR) # Nombre del programa PGM_NAME=${PKG_NAME_AND_VERSION%-*} # Version: VERSION=${PKG_NAME_AND_VERSION##*-} ARCH=${ARCH:-"noarch"} BUILD=${BUILD:-"1leo"} ACTUAL_DIR=$(pwd) BUILD_DIR=${BUILD_DIR:-$ACTUAL_DIR} PACKAGE_NAME=$PKG_NAME_AND_VERSION-$ARCH-$BUILD.tgz INSTALL_TMP_DIR="/tmp/$SRC_DIR" # Optimizaciones de compilacion dependientes de la arquitectura: COMP_OPTIONS=$(get_compiler_optimizations $ARCH) # Convertir en Absoluto el path a los Fuentes: [ "${SRC_DIR:0:1}" == "." ] && SRC_DIR=${ACTUAL_DIR}/${SRC_DIR} #echo "SRC_FILE =$SRC_FILE" #echo "SRC_DIR =$SRC_DIR" #echo "PKG_NAME_AND_VERSION=$PKG_NAME_AND_VERSION" #echo "PKG_NAME =$PKG_NAME" #echo "VERSION =$VERSION" #echo "ARCH =$ARCH" #echo "BUILD =$BUILD" #echo "ACTUAL_DIR =$ACTUAL_DIR" #echo "BUILD_DIR =$BUILD_DIR" #echo "PACKAGE_NAME =$PACKAGE_NAME" #echo "INSTALL_TMP_DIR =$INSTALL_TMP_DIR" #echo "COMP_OPTIONS =$COMP_OPTIONS" #USR="smmsp" #GRP="smmsp" #ETCDIR="etc/rrdtool" tar -xjf $SRC_FILE && \ { # try to apply patchs... ls *.patch &>/dev/null && { cat *.patch |patch -p0 -d $SRC_DIR || exit 1 ;} || true } && \ cd $SRC_DIR || { echo "Error descompresion del codigo fuente: $SRC_FILE" 1>&2 && exit 1 ; } rm -rf $INSTALL_TMP_DIR &> /dev/null # Patch the iptraf path: sed -i -re 's#(my\s+\$iptraf\s*=\s*\S+)/bin/(.*)#\1/sbin/\2#' rrd_iptraf.pl # Copy executable scripts: mkdir -p $INSTALL_TMP_DIR/usr/bin && \ mv *.sh *.pl $INSTALL_TMP_DIR/usr/bin # Copy config: mkdir -p $INSTALL_TMP_DIR/etc/sysconfig && \ mv systemgraph.sysconfig $INSTALL_TMP_DIR/etc/sysconfig/systemgraph.sysconfig.new # RRD Dir: mkdir -p $INSTALL_TMP_DIR/var/lib/systemgraph # WWW cgi: mkdir -p $INSTALL_TMP_DIR/var/www/systemgraph && \ mv systemgraph.cgi $INSTALL_TMP_DIR/var/www/systemgraph # Later we'll create the apache config file ;) # Add documentation: mkdir -p $INSTALL_TMP_DIR/usr/doc/$PKG_NAME_AND_VERSION cp -r * \ $INSTALL_TMP_DIR/usr/doc/$PKG_NAME_AND_VERSION cp ../*.SlackBuild $INSTALL_TMP_DIR/usr/doc/$PKG_NAME_AND_VERSION chown -R root:root $INSTALL_TMP_DIR/usr/doc/$PKG_NAME_AND_VERSION cd $INSTALL_TMP_DIR && \ ## Preparar los archivos de configuracion... #( cd $ETCDIR && \ # echo "Preparando los archivos de configuracion para upgrades..." # for I in * ; do # mv $I $I.new # done #) # --- OWNERSHIP, RIGHTS --- chmod -R o-w * chown -R root:root usr/bin etc var 2>/dev/null # Apache Setup... ( mkdir -p etc/httpd/vhosts && \ cd etc/httpd/vhosts && \ cat <<_EOF >> systemgraph.conf Alias /systemgraph "/var/www/systemgraph" # Honor .htaccess files: AllowOverride None DirectoryIndex index.php index.html systemgraph.cgi Options +ExecCGI AddHandler cgi-script .cgi .pl Order allow,deny Allow from all # Allow from 127.0.0.1 # Allow from your-workstation.com _EOF ) # Add a post-install script: mkdir -p install &&\ ( cd install && \ cat < slack-desc |-----handy-ruler------------------------------------------------------| $PGM_NAME: $PGM_NAME $VERSION (graphical system statistics) $PGM_NAME: $PGM_NAME: Nice graphical system statistics RRDTool frontend which produces $PGM_NAME: graphs of various system data. It doesn't require snmp. It consists of $PGM_NAME: some shell and perl scripts. You can query graph for personalized last $PGM_NAME: time. $PGM_NAME: $PGM_NAME: $PGM_NAME: Sitepage: http://www.decagon.de/sw/systemgraph/index.html $PGM_NAME: $PGM_NAME: EOINS #' cat < doinst.sh # Handle the incoming configuration files: config() { NEW="\$1" OLD="\$(dirname \$NEW)/\$(basename \$NEW .new)" # If there's no config file by that name, mv it over: if [ ! -f \$OLD ]; then mv \$NEW \$OLD elif [ ! -s \$NEW -o "\$(cat \$OLD | md5sum)" = "\$(cat \$NEW | md5sum)" ]; then # toss the redundant copy rm -f \$NEW fi } config etc/sysconfig/systemgraph.sysconfig.new # Add the crontab entris grep -v ^# /usr/doc/$PKG_NAME_AND_VERSION/systemgraph.cron.d \ | sed -re 's/(\*)\s+root/\1/' | while read LINE ; do CMD=\$(echo "\$LINE"|sed -re 's/.*\s+(\S+)$/\1/') #' grep -q "\$CMD" /var/spool/cron/crontabs/root \ || echo "\$LINE" >> /var/spool/cron/crontabs/root done # Tell to crond that this file has changed echo "root" >> /var/spool/cron/crontabs/cron.update #echo "REMEMBER to reload the cron daemon." EOINS ) ############## create_package $INSTALL_TMP_DIR $PACKAGE_NAME $BUILD_DIR && \ #exit 0 cd $ACTUAL_DIR && rm -rf $SRC_DIR || { echo "Terminado con Error" 1>&2 && exit 1 ;}