#!/bin/sh # Copyright 1994, Patrick Volkerding, Moorhead, Minnesota USA # 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. # make_install_script() { COUNT=1 LINE="`sed -n "$COUNT p" $1`" while [ ! "$LINE" = "" ]; do LINKGOESIN="`echo "$LINE" | cut -f 1 -d " "`" LINKGOESIN="`dirname $LINKGOESIN`" LINKNAMEIS="`echo "$LINE" | cut -f 1 -d ' '`" LINKNAMEIS="`basename "$LINKNAMEIS"`" LINKPOINTSTO="`echo "$LINE" | cut -f 3 -d ' '`" echo "( cd $LINKGOESIN ; rm -rf $LINKNAMEIS )" echo "( cd $LINKGOESIN ; ln -sf $LINKPOINTSTO $LINKNAMEIS )" COUNT=`expr $COUNT + 1` LINE="`sed -n "$COUNT p" $1`" done } usage() { cat << EOF Usage: makepkg package_name.tgz Makes a Slackware compatible "*.tgz" package containing the contents of the current and all subdirectories. If symbolic links exist, they will be removed and an installation script will be made to recreate them later. This script will be called "install/doinst.sh". You may add any of your own ash-compatible shell scripts to this file and rebuild the package if you wish. EOF } # These tests, while by no means exhaustive, will give a usage message # and exit with a wide range of bad input. if [ ! $# = 1 -a ! $# = 0 ]; then usage; exit fi echo echo "Slackware package maker, version 1.0." if [ $# = 0 ]; then usage; echo "You have not provided a name for this package." echo -n "What would you like to call it? " read PACKAGE_NAME; else PACKAGE_NAME=$1 fi TARGET_NAME="`dirname $PACKAGE_NAME`" PACKAGE_NAME="`basename $PACKAGE_NAME`" TAR_NAME="`basename $PACKAGE_NAME .tgz`" echo echo "Searching for symbolic links:" find . -type l -exec ls -l {} \; | cut -b58- | tee /tmp/iNsT-a.$$ if [ ! "`filesize /tmp/iNsT-a.$$`" = "0" ]; then echo echo "Making symbolic link creation script:" make_install_script /tmp/iNsT-a.$$ | tee doinst.sh fi echo if [ ! "`filesize /tmp/iNsT-a.$$`" = "0" ]; then if [ -r install/doinst.sh ]; then echo "Unless your existing installation script already comtains the code" echo "to create these links, you should append these lines to your existing" echo "install script. Now's your chance. :^)" echo echo "Would you like to add this stuff to the existing install script and" echo -n "remove the symbolic links ([y]es, [n]o)? " else echo "It is recommended that you make these lines your new installation script." echo echo "Would you like to make this stuff the install script for this package" echo -n "and remove the symbolic links ([y]es, [n]o)? " fi read SCRIPTADD; if [ "$SCRIPTADD" = "y" ]; then if [ -r install/doinst.sh ]; then UPDATE="t" cat doinst.sh >> install/doinst.sh else mkdir install cat doinst.sh > install/doinst.sh fi echo echo "Removing symbolic links:" find . -type l -exec rm -v {} \; echo if [ "$UPDATE" = "t" ]; then echo "Updating your ./install/doinst.sh..." else echo "Creating your new ./install/doinst.sh..." fi fi else echo "No symbolic links were found, so we won't make an installation script." echo "You can make your own later in ./install/doinst.sh and rebuild the" echo "package if you like." fi rm -f doinst.sh /tmp/iNsT-a.$$ echo echo "This next step is optional - you can set the directories in your package" echo "to some sane permissions. If any of the directories in your package have" echo "special permissions, then DO NOT reset them here!" echo echo "Would you like to reset all directory permissions to 755 (drwxr-xr-x) and" echo -n "directory ownerships to root.root ([y]es, [n]o)? " read PERMS; echo if [ "$PERMS" = "y" ]; then find . -type d -exec chmod -v 755 {} \; find . -type d -exec chown -v root.root {} \; fi echo echo "Creating tar file $TAR_NAME.tar..." echo tar -cvf $TAR_NAME.tar . echo echo "Gzipping $TAR_NAME.tar..." gzip -9 $TAR_NAME.tar echo echo "Renaming $TAR_NAME.tar.gz to $PACKAGE_NAME..." mv $TAR_NAME.tar.gz $PACKAGE_NAME if [ ! "$TARGET_NAME" = "." ]; then echo echo "Moving $PACKAGE_NAME to $TARGET_NAME..." mv $PACKAGE_NAME $TARGET_NAME fi echo echo "Package creation complete." echo