aboutsummaryrefslogtreecommitdiff
path: root/branches/0.6/src
diff options
context:
space:
mode:
authorrhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>2007-04-13 21:46:27 +0000
committerrhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>2007-04-13 21:46:27 +0000
commitf76d87c78ade79c700b6dd48aeb6b8bbef60cf34 (patch)
treea64bfb20225c12ec13001a2ba7a4e3f381532c06 /branches/0.6/src
parentaa280bb3fbf166e31b939342c1d956848a801780 (diff)
downloadsimplepkg-f76d87c78ade79c700b6dd48aeb6b8bbef60cf34.tar.gz
simplepkg-f76d87c78ade79c700b6dd48aeb6b8bbef60cf34.tar.bz2
created 0.6 branch
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@341 04377dda-e619-0410-9926-eae83683ac58
Diffstat (limited to 'branches/0.6/src')
-rw-r--r--branches/0.6/src/createpkg511
-rwxr-xr-xbranches/0.6/src/jail-commit170
-rwxr-xr-xbranches/0.6/src/jail-update61
-rwxr-xr-xbranches/0.6/src/lspkg132
-rwxr-xr-xbranches/0.6/src/mkbuild1196
-rwxr-xr-xbranches/0.6/src/mkjail113
-rwxr-xr-xbranches/0.6/src/rebuildpkg87
-rwxr-xr-xbranches/0.6/src/repos87
-rwxr-xr-xbranches/0.6/src/simplaret1045
-rwxr-xr-xbranches/0.6/src/templatepkg959
10 files changed, 4361 insertions, 0 deletions
diff --git a/branches/0.6/src/createpkg b/branches/0.6/src/createpkg
new file mode 100644
index 0000000..03612a9
--- /dev/null
+++ b/branches/0.6/src/createpkg
@@ -0,0 +1,511 @@
+#!/bin/bash
+#
+# createpkg: package builder using http://slack.sarava.org/slackbuilds scripts
+# feedback: rhatto at riseup.net | gpl
+#
+# createpkg is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# createpkg is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+# /etc/simplepkg/slackbuildrc parameters:
+#
+# SLACKBUILDS_DIR="/folder/to/place/slackbuilds", defaults to /var/slackbuilds
+# SVN="svn://repository", defaults do svn://slack.sarava.org/slackbuilds
+# SYNC="yes|no", whether to always update the repository
+#
+# TODO
+#
+# - optionally show a dependency tree before create the package
+# - in function solve_dep: resolve program versions
+# - mkdir source directory - error... (please check!)
+
+#---------------------------------------------------
+# Createpkg functions
+#---------------------------------------------------
+
+CREATEPKG_VERSION="1.0.5"
+
+function error_codes {
+
+ # Slackbuilds error codes
+ ERROR_WGET=31 # wget error
+ ERROR_MAKE=32 # make source error
+ ERROR_INSTALL=33 # make install error
+ ERROR_MD5=34 # md5sum error
+ ERROR_CONF=35 # ./configure error
+ ERROR_HELP=36 # dasable
+ ERROR_TAR=37 # tar error
+ ERROR_MKPKG=38 # makepkg error
+ ERROR_GPG=39 # gpg check error
+ ERROR_PATCH=40 # patch error
+ ERROR_VCS=41 # cvs error
+ ERROR_MKDIR=42 # make directory error
+
+ # Createpkg error codes
+ ERROR_INSTPKG=200 # installpkg error
+ ERROR_DEPEN=201 # dependency error
+ SCRIPT_OR_PACKAGE_NOT_FOUND=202 # Script or package not found
+}
+
+function eecho {
+
+ # echoes a message
+ # usage: eecho <message-type> <message>
+ # message-type can be: commun, messag, error, normal
+
+ echo -e "${1}${2}${normal}"
+
+}
+
+function handle_error {
+
+ # This function deals with internal createpkg errors
+ # and also with non-zero exit codes from slackbuilds
+ # Input: $1 - error code
+ # Output: Error mensage
+ #
+ # check slackbuild exit status are:
+ #
+ # ERROR_WGET=31; ERROR_MAKE=32; ERROR_INSTALL=33
+ # ERROR_MD5=34; ERROR_CONF=35; ERROR_HELP=36
+ # ERROR_TAR=37; ERROR_MKPKG=38 ERROR_GPG=39
+ # ERROR_PATCH=40; ERROR_VCS=41; ERROR_MKDIR=42
+ #
+ # thanks to rudsonalves at yahoo.com.br for this spec.
+
+ # we don't want to process when exit status = 0
+ [ "$1" == "0" ] && return
+
+ # Exit codes
+ case $1 in
+ 2) usage ;;
+ 3) eecho $alert "$BASENAME: could not update the repository $2" ;;
+ 4) eecho $alert "$BASENAME: could not create folder $2" ;;
+ 5) eecho $alert "$BASENAME: script not found for $2" ;;
+ $ERROR_WGET)
+ eecho $error "$BASENAME: error downloading source/package for $2" ;;
+ $ERROR_MAKE)
+ eecho $error "$BASENAME: error compiling $2 source code" ;;
+ $ERROR_INSTALL)
+ eecho $error "$BASENAME: error installing $2" ;;
+ $ERROR_MD5)
+ eecho $error "$BASENAME: error on source code integrity check for $2" ;;
+ $ERROR_CONF)
+ eecho $error "$BASENAME: error configuring the source code for $2" ;;
+ $ERROR_HELP)
+ exit 0 ;; # its supposed to never happen here :P
+ $ERROR_TAR)
+ eecho $error "$BASENAME: error decompressing source code for $2" ;;
+ $ERROR_MKPKG)
+ eecho $error "$BASENAME: error creating package $2" ;;
+ $ERROR_GPG)
+ eecho $error "$BASENAME: error verifying GPG signature the source code for $2" ;;
+ $ERROR_PATCH)
+ eecho $error "$BASENAME: error patching the source code for $2" ;;
+ $ERROR_VCS)
+ eecho $error "$BASENAME: error downloading $2 source from version control system" ;;
+ $ERROR_MKDIR)
+ eecho $error "$BASENAME: make directory $2 error, aborting" ;;
+ $ERROR_INSTPKG)
+ eecho $error "$BASENAME: install package $2 error, aborting" ;;
+ $ERROR_DEPEN)
+ eecho $error "$BASENAME: dependency solve error, aborting" ;;
+ *) eecho $error "$BASENAME: unknown error or user interrupt" ;;
+ $SCRIPT_OR_PACKAGE_NOT_FOUND)
+ eecho $error "$BASENAME: SlackBuild or package not found" ;;
+ esac
+
+ exit $1
+
+}
+
+function build_repo {
+
+ # Checkout a new slackbuild working copy
+ BASEDIR="`dirname $SLACKBUILDS_DIR`"
+ mkdir -p $BASEDIR || handle_error 4 $BASEDIR
+ cd $BASEDIR
+ svn checkout $SVN
+ cd $SLACKBUILDS_DIR
+
+}
+
+function usage {
+
+ # Help mensage
+ eecho $commun "Createpkg version $CREATEPKG_VERSION\n"
+ eecho $commun "Usage: createpkg [--install/-i] package-name"
+ eecho $commun " createpkg --no-deps/-np package-name"
+ eecho $commun " createpkg --search/-s package-name"
+ eecho $commun " createpkg --info/-f package-name"
+ eecho $commun " createpkg --list/-l"
+ eecho $commun " createpkg --sync"
+ eecho $commun " createpkg --help/-h"
+}
+
+function check_config {
+
+ # check the configuration
+ TMP=${TMP:=/tmp};
+ REPOS=${REPOS:=$TMP};
+ # Create $TMP and $REPOS if need
+ [ ! -e $TPM ] && mkdir $TMP
+ [ ! -e $REPOS ] && mkdir $REPOS
+ #
+ SLACKBUILDS_DIR=${SLACKBUILDS_DIR:=/var/slackbuilds}
+ SVN=${SVN:=svn://slack.sarava.org/slackbuilds}
+ SYNC=${SYNC:=no}
+ BASEDIR="`dirname $SLACKBUILDS_DIR`"
+
+}
+
+function solve_dep {
+
+ # Solve dependency
+ local PACK="$1"
+ local COND="$2"
+ local VER="$3"
+
+ # Check package in local system
+ PACK="`echo $PACK | sed -e 's/\+/\\\+/'`"
+ INSTALLED=`eval "ls /var/log/packages/ | egrep -E '^$PACK-[^-]+-[^-]+-[^-]+$'"`
+ CHECK=$?
+
+ # TODO: Make check version procedures
+ if [ -z "$INSTALLED" ]; then
+ if [ $CHECK -ne 0 ]; then
+ # Check package in SlackBuilds tree
+ eecho $messag "$BASENAME: processing $PACKAGE dependency $PACK"
+ SYNC=no CREATEPKG_CHILD=$CREATEPKG_CHILD createpkg --install $PACK
+
+ # check if the package was built and installed
+ EXIT_CODE="$?"
+
+ if [ "$EXIT_CODE" == "5" ]; then
+
+ # exit code 5 == slackbuild not found
+ # try to use simplaret
+ ARCH=$DEFAULT_ARCH simplaret --update
+ ARCH=$DEFAULT_ARCH simplaret --install $PACK
+ EXIT_CODE="$?"
+ if [ "$EXIT_CODE" != "0" ]; then
+ handle_error $SCRIPT_OR_PACKAGE_NOT_FOUND $PACK
+ fi
+
+ elif [ "$EXIT_CODE" != "0" ]; then
+ handle_error $EXIT_CODE $PACK
+ fi
+
+ fi
+ fi
+
+}
+
+function check_repo {
+
+ # Verify if repository exist
+ [ ! -d "$SLACKBUILDS_DIR" ] && build_repo
+
+}
+
+function sync_repo {
+
+ # Synchronize repository
+ cd $SLACKBUILDS_DIR
+ svn update || build_repo
+ #simplaret --update
+
+}
+
+function find_slackbuild {
+
+ # Find SlackBuild script in the repository
+ find $SLACKBUILDS_DIR -iname $1.SlackBuild
+
+}
+
+function info_builds {
+
+ # Show packages info
+ if [ "$PKG_PATH" != "" ]; then
+ for i in $PKG_PATH; do
+ PACKAGE=`basename $i .SlackBuild`
+ NAME_UP=`echo $PACKAGE | tr [a-z] [A-Z]`
+ eecho $commun "$NAME_UP: "
+
+ PKG_DIR=`dirname $i`
+ if [ -e $PKG_DIR/slack-desc ]; then
+ eval "cat $PKG_DIR/slack-desc | grep '^$PACKAGE:' | cut -f2- -d:"
+ eecho $normal
+ else
+ eval "cat $i | grep '^$PACKAGE:' | cut -f2- -d:"
+ eecho $normal
+ fi
+
+ if [ -e $PKG_DIR/slack-required ]; then
+ eecho $commun "slack-required"
+ cat $PKG_DIR/slack-required | sed 's/^/ /'
+ fi
+ done
+ fi
+
+}
+
+function list_builds {
+
+ # List all available SlackBuilds
+ cd $SLACKBUILDS_DIR
+ echo "Sarava SlackBuilds list"
+ # level 1
+ for i in *; do
+ if [ -d $i ]; then
+ echo -e " $i: "
+ (
+ cd $i
+ # level 2
+ for j in *; do
+ if [ -d $j ]; then
+ eecho $commun " $j"
+ (
+ cd $j
+ BUILD="`ls *.SlackBuild 2>/dev/null`"
+ if [ "$BUILD" != "" ]; then
+ # level 3
+ for k in $BUILD; do
+ eecho $messag " $k"
+ done
+ else
+ BUILD=""
+ fi
+ for k in *; do
+ if [ -d $k ]; then
+ eecho $messag " $k.SlackBuild"
+ fi
+ done
+ )
+ fi
+ done
+ )
+ fi
+ done
+
+}
+
+function color_select {
+
+ # Select color mode: gray, color or none (*)
+ # commun - Communication
+ # messag - Commum messages
+ # error - Error messages
+ # normal - turn off color
+ case "$1" in
+ 'gray')
+ commun="\033[37;1m"
+ messag="\033[37;1m"
+ error="\033[30;1m"
+ alert="\033[37m"
+ normal="\033[m"
+ ;;
+ 'color')
+ commun="\033[34;1m" # green
+ messag="\033[32;1m" # blue
+ error="\033[31;1m" # red
+ alert="\033[33;1m" # yellow
+ normal="\033[m" # normal
+ ;;
+ *)
+ commun=""
+ messag=""
+ error=""
+ alert=""
+ normal=""
+ ;;
+ esac
+
+}
+
+#---------------------------------------------------
+# Starting createpkg
+#---------------------------------------------------
+# Common functions
+COMMON="/usr/libexec/simplepkg/common.sh"
+SIMPLEPKG_CONF="/etc/simplepkg/simplepkg.conf"
+
+# Loading error codes
+error_codes
+
+# First load simplepkg helper functions
+source $COMMON && source $SIMPLEPKG_CONF
+if [ $? -ne 0 ]; then
+ eecho $error "error: file $COMMON not found, check your $BASENAME installation"
+ exit 1
+fi
+
+# Load slackbuildrc definitions
+if [ -f ~/.slackbuildrc ]; then
+ source ~/.slackbuildrc
+else
+ source /etc/slackbuildrc 2>/dev/null
+fi
+
+# Select color mode: gray, color or none (*)
+color_select $COLOR
+
+# This is used to show how many children process we have
+if [ -z "$CREATEPKG_CHILD" ]; then
+ CREATEPKG_CHILD="1"
+else
+ let CREATEPKG_CHILD++
+fi
+
+BASENAME="`basename $0`[$CREATEPKG_CHILD]"
+
+check_config
+check_repo
+
+case $1 in
+ '--search'|'-s')
+ [ $# -ne 2 ] && handle_error 2 # two parameters is required
+ find_slackbuild $2
+ exit
+ ;;
+ '--info'|'-f')
+ [ $# -ne 2 ] && handle_error 2 # two parameters is required
+ PKG_PATH=`find_slackbuild $2`
+ info_builds
+ exit
+ ;;
+ '--install'|'-i')
+ [ $# -ne 2 ] && handle_error 2 # two parameters is required
+ PACKAGE="$2"
+ INSTALL="1"
+ ;;
+ '--no-deps'|'-nd')
+ [ $# -ne 2 ] && handle_error 2 # two parameters is required
+ NO_DEPS="1"
+ PACKAGE="$2"
+ ;;
+ '--sync')
+ sync_repo
+ exit 0
+ ;;
+ '--help'|'-h'|'')
+ usage
+ exit 0
+ ;;
+ '--list'|'-l')
+ list_builds
+ exit 0
+ ;;
+ *)
+ if [ "${1:0:1}" != "-" ]; then
+ PACKAGE="$1"
+ else
+ handle_error 2
+ fi
+ ;;
+esac
+
+# Synchronize repository
+[ "$SYNC" == "yes" ] && sync_repo
+
+# Get SlackBuild script
+BUILD_SCRIPT="`find_slackbuild $PACKAGE`"
+
+# Check SlackBuild script found
+if [ -z "$BUILD_SCRIPT" ]; then
+ handle_error 5 $PACKAGE
+fi
+
+# Select one SlackBuild
+if [ "`echo $BUILD_SCRIPT | wc -w`" -gt 1 ]; then
+ AUX="$PS3"
+ PS3="Choice: "
+ LIST=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | sed -r 's/.*\/(.*)\.SlackBuild$/\1/'`" EXIT"
+
+ select PACKAGE in `echo $LIST`; do
+ break
+ done
+
+ if [ "$PACKAGE" = "EXIT" ]; then
+ eecho $error "error: None package select"
+ exit 1
+ fi
+
+ # Select only one SlackBuild in BUILD_SCRIPT
+ BUILD_SCRIPT=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | grep "/$PACKAGE.SlackBuild"`
+ PS3="$AUX"
+else
+ #PACKAGE=`echo $BUILD_SCRIPT | sed -r 's/.*\/(.*)\.SlackBuild$/\1/'`
+ PACKAGE=`basename $BUILD_SCRIPT .SlackBuild`
+fi
+
+# Get dirname and script name from slackbuild
+SCRIPT_BASE="`dirname $BUILD_SCRIPT`"
+SCRIPT_NAME="`basename $BUILD_SCRIPT`"
+eecho $messag "$BASENAME: found script $PACKAGE.SlackBuild, now checking for dependencies"
+
+# Sets the package's slack-required
+if [ -f "$SCRIPT_BASE/$PACKAGE.slack-required" ]; then
+ SLACK_REQUIRED="$SCRIPT_BASE/$PACKAGE.slack-required"
+elif [ -f "$SCRIPT_BASE/slack-required" ]; then
+ SLACK_REQUIRED="$SCRIPT_BASE/slack-required"
+fi
+
+if [ ! -z "$SLACK_REQUIRED" -a "$NO_DEPS" != "1" ]; then
+ # this routine checks for dependencies in package's slack-required
+ ( grep '^[^#]' $SLACK_REQUIRED | while read dep; do
+ if [ ! -z "$dep" ]; then
+ PROGRAM="`echo $dep | awk '{ print $1 }'`"
+ CONDITION="`echo $dep | awk '{ print $2 }' | tr [=\>\<] [egl]`"
+ VERSION="`echo $dep | awk '{ print $3 }' | tr -dc '[:digit:]'`"
+ solve_dep $PROGRAM $CONDITION $VERSION
+ fi
+ true
+ done )
+ if [ $? -ne 0 ]; then
+ eecho $messag "$BASENAME: dependency solve error"
+ exit 1
+ fi
+ eecho $messag "$BASENAME: done checking for $PACKAGE dependencies"
+else
+ eecho $messag "$BASENAME: no unmet dependencies for $PACKAGE"
+fi
+
+eecho $messag "$BASENAME: processing $SCRIPT_NAME"
+
+# Change to script base directory
+cd $SCRIPT_BASE
+
+# Select repository directory
+NEW_REPOS=$REPOS/$( echo ${SCRIPT_BASE#$SLACKBUILDS_DIR/} )
+
+# Create repository directory
+[ ! -e $NEW_REPOS ] && mkdir -p $NEW_REPOS 2>/dev/null
+
+
+# Remove old-versions
+rm $NEW_REPOS/$PACKAGE-*-*-*.tgz 2>/dev/null
+
+# Execute SlackBuild script with variables protection
+( INTERACT=no REPOS=$NEW_REPOS sh ./$SCRIPT_NAME )
+
+# Check if package was built
+handle_error $? $PACKAGE
+
+PKG_TGZ="`ls -1 -c $NEW_REPOS/$PACKAGE-*-*-*.tgz | head -n 1`"
+
+if [ "$INSTALL" == "1" ]; then
+ # as we dont have the full package file name, we'll
+ # use the newer file name that matches our wildcard:
+
+ upgradepkg --install-new $PKG_TGZ
+fi
diff --git a/branches/0.6/src/jail-commit b/branches/0.6/src/jail-commit
new file mode 100755
index 0000000..f2695d7
--- /dev/null
+++ b/branches/0.6/src/jail-commit
@@ -0,0 +1,170 @@
+#!/bin/bash
+#
+# jail-commit: update config files from a jail to a template
+# feedback: rhatto@riseup.net | gpl
+#
+# Jail-commit is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Jail-commit is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+BASENAME="`basename $0`"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+ eval_config $BASENAME
+else
+ echo "error: file $COMMON found, check your $BASENAME installation"
+ exit 1
+fi
+
+function usage {
+
+ echo $BASENAME: commit a jail configuration into a template
+ echo "usage: \"$BASENAME [<jail-path> [template]]\""
+ echo " \"$BASENAME --all\" to commit all templates"
+ echo " \"$BASENAME --help\" for help"
+
+}
+
+function template_merge {
+
+ # copy differences between the jail
+ # and the template in the template folder
+
+ # usage: template_merge <jail-path>
+
+ if [ -z "$1" ] || [ ! -d "$TEMPLATE_BASE.d" ]; then
+ return 1
+ fi
+
+ echo "" > $TEMPLATE_BASE.perms.tmp
+ cd $TEMPLATE_BASE.d
+
+ for file in `find | grep -v -e "/.svn$" | grep -v -e "/.svn/" | grep -v -e "^\.$"`; do
+
+ if [[ -e "$file" && -e "$1/$file" ]]; then
+
+ if [ ! -d "$file" ] && [ ! -h "$file" ]; then
+ if ! diff $file $1/$file; then
+ echo Updating $file
+ cp -af $1/$file $file
+ fi
+ elif [ -h "$file" ]; then
+ if [ "`readlink $file`" != "`readlink $1/$file`" ]; then
+ rm -f $file
+ ln -s `readlink $1/$file` $file
+ fi
+ fi
+
+ perms="`numeric_perm $1/$file`"
+ owner="`get_owner $1/$file`"
+ group="`get_group $1/$file`"
+ echo "$file;$owner;$group;$perms" >> $TEMPLATE_BASE.perms.tmp
+
+ else
+ if [ ! -e "$1/$file" ]; then
+ echo $BASENAME: warning: missing file `slash $1/$file`
+ fi
+ fi
+
+ done
+
+ cat $TEMPLATE_BASE.perms.tmp | sed '/^$/d' > $TEMPLATE_BASE.perms
+ rm -f $TEMPLATE_BASE.perms.tmp
+
+ if ! svn_check $TEMPLATE_BASE,perms; then
+ svn add $TEMPLATE_BASE,perms
+ fi
+
+}
+
+function template_svn_commit {
+
+ # issue a svn_commit from a template folder
+ # usage: template_svn_commit <template-folder>
+
+ if use_svn && [ -d "$1/.svn" ]; then
+ cd $1
+ echo First checking out from the repository...
+ svn update
+ echo Commiting changes to the repository...
+ svn commit -m "changes for `date`"
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: commit error
+ fi
+ fi
+
+}
+
+function do_commit {
+
+ # commit jail changes to a repository
+ # usage: do_commit <jailpath> [template]
+
+ local jailpath template
+
+ jailpath="$1"
+ jail="`basename $jailpath`"
+
+ if [ ! -z "$2" ]; then
+ template="$2"
+ else
+ template="$jail"
+ fi
+
+ search_template $template --update
+ if [ "$?" == "0" ] && ! echo "$TEMPLATE_UPDATE_LIST" | grep -q " `basename $TEMPLATE_BASE` "; then
+ TEMPLATE_UPDATE_LIST=" $TEMPLATE_UPDATE_LIST `basename $TEMPLATE_BASE` " # the spaces are important
+ if [ "$jailpath" == "/" ]; then
+ echo Updating main installation...
+ else
+ echo Updating $jailpath...
+ fi
+ if [ -d "$TEMPLATE_BASE.d" ] || [ -a "$TEMPLATE_BASE.template" ]; then
+ SILENT=yes templatepkg -u $template $jailpath
+ template_merge $jailpath
+ fi
+ else
+ if [ -z "$SILENT" ]; then
+ echo $BASENAME: template $template not found
+ fi
+ return 1
+ fi
+
+}
+
+TEMPLATE_UPDATE_LIST=""
+
+if [ "$1" == "--help" ]; then
+ usage
+elif [ "$1" == "--all" ]; then
+ template_svn_commit $BASE_CONF/templates
+elif echo $1 | grep -q -e "^--"; then
+ usage
+elif [ ! -z "$1" ]; then
+ do_commit $1 $2
+ if [ "$?" == "0" ]; then
+ template_svn_commit `dirname $TEMPLATE_BASE`
+ fi
+else
+ SILENT="yes"
+ if [ -e $JAIL_LIST ]; then
+ for jailpath in `cat $JAIL_LIST`; do
+ do_commit $jailpath
+ done
+ fi
+ # main jail
+ do_commit / main
+ template_svn_commit $BASE_CONF/templates
+fi
+
diff --git a/branches/0.6/src/jail-update b/branches/0.6/src/jail-update
new file mode 100755
index 0000000..c5a008f
--- /dev/null
+++ b/branches/0.6/src/jail-update
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+# jail-update: update config files from a jail to a template
+# feedback: rhatto@riseup.net | gpl
+#
+# Jail-update is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Jail-update is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+BASENAME="`basename $0`"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+ eval_config $BASENAME
+else
+ echo "error: file $COMMON found, check your $BASENAME installation"
+ exit 1
+fi
+
+function usage {
+
+ echo "$BASENAME: update a jail configuration from a template"
+ echo "usage: $BASENAME <jail-path> [template]"
+
+}
+
+if [ -z "$1" ] || [ "$1" == "--help" ] || echo $1 | grep -q -e "^--"; then
+ usage
+ exit 1
+fi
+
+if [ -z "$2" ]; then
+ template_name="`basename $1`"
+else
+ template_name="$2"
+fi
+
+search_template $template_name --update
+
+if [ "$?" != "0" ]; then
+ echo $BASENAME: template $template_name not found
+ exit 1
+elif [ ! -d "$1" ]; then
+ echo $BASENAME: jail $1 not found
+ exit 1
+fi
+
+update_template_files
+copy_template_files $1
+set_jail_perms $1
+
diff --git a/branches/0.6/src/lspkg b/branches/0.6/src/lspkg
new file mode 100755
index 0000000..01900f2
--- /dev/null
+++ b/branches/0.6/src/lspkg
@@ -0,0 +1,132 @@
+#!/bin/bash
+#
+# lspkg v0.3: view installed and contents of slackware packages
+#
+# feedback: rhatto at riseup.net | gpl
+#
+# Lspkg is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Lspkg is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+else
+ echo "error: file $COMMON not found, check your `basename $0` installation"
+ exit 1
+fi
+
+function head_line {
+ echo "usage: [ROOT=/otherroot] `basename $0` [option expression]"
+}
+
+function usage {
+ head_line
+ echo "
+options are:
+
+ -v, --view: view installed package contents
+ -p, --print: print the contents of a package file
+ -r, --remove: remove matching packages
+ -s, --search: search a file under installed packages
+ -d, --description: show matching packages' descriptions
+"
+}
+
+# -----------------------------------------------------
+# lspkg
+# -----------------------------------------------------
+
+if [ $# -eq 2 ]; then
+ LIST_PKGS="`ls /$ROOT/var/log/packages/$2-[0-9]* 2> /dev/null`"
+ if [ -z "$LIST_PKGS" ]; then
+ LIST_PKGS="`ls /$ROOT/var/log/packages/$2* 2> /dev/null`"
+ fi
+elif [ $# -eq 1 ]; then
+ LIST_PKGS="`ls /$ROOT/var/log/packages/$1-[0-9]* 2> /dev/null`"
+ if [ -z "$LIST_PKGS" ]; then
+ LIST_PKGS="`ls /$ROOT/var/log/packages/$1* 2> /dev/null`"
+ fi
+else
+ LIST_PKGS="`ls /$ROOT/var/log/packages/ 2> /dev/null`"
+fi
+
+LIST_PKGS="`slash $LIST_PKGS`"
+
+case $1 in
+ "-h"|"--help")
+ usage
+ ;;
+ "-v"|"--view")
+ if [ ! -z "$2" ]; then
+ if [ ! -z "$LIST_PKGS" ]; then
+ for file in $LIST_PKGS; do
+ less $file
+ done
+ else
+ if [ ! -z "$ROOT" ]; then
+ echo "$2: package not found on /$ROOT/var/log/packages"
+ else
+ echo "$2: package not found on /var/log/packages"
+ fi
+ fi
+ else
+ head_line
+ exit 1
+ fi
+ ;;
+ "-p"|"--print")
+ if [ -f "$2" ]; then
+ tar ztvf $2
+ else
+ echo $2: file not found
+ fi
+ ;;
+ "-r"|"--remove")
+ if [ ! -z "$2" ]; then
+ if [ ! -z "$LIST_PKGS" ]; then
+ removepkg /$ROOT/var/log/packages/$1-[0-9]*
+ fi
+ fi
+ ;;
+ "-s"|"--search")
+ if [ ! -z "$2" ]; then
+ eval "grep -l '\/$2$' /$ROOT/var/log/packages/*"
+ fi
+ ;;
+ "-d"|"--description")
+ if [ ! -z "$2" ]; then
+ for file in $LIST_PKGS; do
+ pack="`package_name $file`"
+ echo -e " Package description for $file:\n"
+ sed -n "/^$pack:/ { s/$pack://; p; }" $file
+ done
+ else
+ head_line
+ exit 1
+ fi
+ ;;
+ *)
+ if [ ! -z "$LIST_PKGS" ]; then
+ for pack in $LIST_PKGS; do
+ echo $pack
+ done
+ else
+ if [ ! -z "$ROOT" ]; then
+ echo "$1: package not found on /$ROOT/var/log/packages"
+ else
+ echo "$1: package not found on /var/log/packages"
+ fi
+ fi
+ ;;
+esac
diff --git a/branches/0.6/src/mkbuild b/branches/0.6/src/mkbuild
new file mode 100755
index 0000000..cae7224
--- /dev/null
+++ b/branches/0.6/src/mkbuild
@@ -0,0 +1,1196 @@
+#!/bin/bash -x
+#
+# Script para gerar SlackBuild
+# Por Rudson R. Alves
+#
+# Este script auxilia a criação de SlackBuilds, com o modelo
+# do Luiz do Sarava Linux
+#
+# SlackBuilds são scripts utilizados no Slackware para gerar
+# pacotes tgz.
+#
+# Turn off debug
+set +x
+#
+# Version 0.9.18
+PROG_VERSION=0.9.18
+
+#--------------------------------------------------------------------
+# Functions
+#--------------------------------------------------------------------
+# Show ./configure --help
+function config_help()
+{
+ view_file "Check ./configure --help" $CONFIG_HELP
+}
+
+# Show file
+# INPUT: $1 string textbox
+# $2 file
+function view_file()
+{
+ [ $# -ne 2 ] && return 1
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " $1 " --textbox $2 20 75
+}
+
+# Exit function
+function mk_exit()
+{
+ clean_all
+ clear
+ exit $1
+}
+
+# Clear all temp files
+function clean_all()
+{
+ [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required
+
+ rm $AUX_TMP 2>/dev/null
+ rm $SLACKDESC_TMP 2>/dev/null
+ rm $SLACKBUILD.test 2>/dev/null
+ rm $DEPENDENCY_LIST 2>/dev/null
+ if [ ! -z $MK_PKGNAME ]; then
+ rm $BASEDIR/*_$MK_PKGNAME.mkbuild 2>/dev/null
+ rm -rf /tmp/$MK_PKGNAME 2>/dev/null
+ rm $CONFIG_HELP 2>/dev/null
+ fi
+}
+
+# Print from file $2, the lines betwen <$1> and </$1> lines
+function print_lines()
+{
+ [ $# -ne 2 ] && mk_exit 1
+ eval "sed -n '/<$1>/,/<\/$1>/ { /<$1>/ b; /<\/$1>/ b; p; }' $2"
+}
+
+# Print from file $2, the lines betwen <$1> and $2 lines
+function print_lines_to()
+{
+ [ $# -ne 3 ] && mk_exit 1
+ eval "sed -n '/<$1>/,/$2/ { /<$1>/ b; /$2/ b; p; }' $3"
+}
+
+# Make slack-desc file
+function mk_slackdesc()
+{
+ print_lines_to "slackdesc" "|-----" $SB_MODEL
+ echo -n $MK_PKGNAME | tr [a-z+\-] " "
+ echo -n "|-----handy-ruler"
+ let N=18+${#MK_PKGNAME}
+ for i in `seq $N $SLACKDESC_LEN`; do
+ echo -n "-"
+ done
+ echo -en "|\n"
+
+ for i in `seq 1 11`; do
+ echo -en "$MK_PKGNAME: \n"
+ done
+ print_lines "slackdesc" $SB_MODEL | sed '1,/\]\]/ d'
+}
+
+# Get label status from SlackBuild model
+function get_status()
+{
+ [ $# -ne 2 ] && mk_exit 1
+ eval "sed -n '/<$1>/ p' $2 | sed 's/.*> \([a-z]\+\)/\1/'"
+}
+
+# Get status from edited SlackBuild
+# input: $1 -> section name
+# output: section status and section number
+function mk_status()
+{
+ for i in `seq 0 $MAXSECTION`;do
+ if [ "${SECTION_NAME[i]}" = "$1" ]; then
+ echo "${SECTION_FLAG[i]} $i"
+ return 0
+ fi
+ done
+ return 1
+}
+
+# Edit file $3, by change string [[$1]] to $2
+function edit_file()
+{
+ local STR_OLD
+ local STR_NEW
+
+ [ $# -ne 3 ] && mk_exit 1
+ STR_OLD=$( echo $1 | sed 's/\//\\\//g' )
+ STR_NEW=$( echo $2 | sed 's/\//\\\//g' )
+ eval "sed 's/\[\[$STR_OLD\]\]/$STR_NEW/' $3 > $AUX_TMP"
+ mv $AUX_TMP $3
+}
+
+# Unpackage source
+function unpkg_source()
+{
+ # FIXME: if MK_DECOMPRESSOR -ne bunzip2 or gunzip...
+ if [ $MK_DECOMPRESSOR = "bunzip2" -o $MK_DECOMPRESSOR = "gunzip" ]; then
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Main Menu" --title "$MK_TITLE" --infobox "Uncompress source in /tmp/$MK_PKGNAME. Wait" 3 45
+ [ $? -ne 0 ] && return 100
+ mkdir /tmp/$MK_PKGNAME/ 2>/dev/null
+ tar xvf $MK_SOURCE -C /tmp/$MK_PKGNAME/ 1>/dev/null
+ [ $? -ne 0 ] && mk_exit 1
+ MK_TMPSRC="/tmp/$MK_PKGNAME/`ls /tmp/$MK_PKGNAME/`"
+
+ DOC_FILES=`find $MK_TMPSRC -type f -maxdepth 1 -name "[A-Z]*" | sed 's/.*\/\(.*\)$/\1/'`
+ else
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --msgbox "$MK_DECOMPRESSOR not configurated..." 5 45
+ fi
+}
+
+# Download source
+function download_url()
+{
+ clear
+ mkdir -p $MK_SOURCEDIR/$MK_PKGNAME 2>/dev/null
+ wget --continue --limit-rate=$MK_LIMITRATE $MK_URL -P $MK_SOURCEDIR/$MK_PKGNAME/
+ if [ $? -ne 0 ]; then
+ echo "URL error"
+ return 0
+ fi
+ MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME
+}
+
+# Select source file
+function select_source()
+{
+ MK_SOURCE=$BASEDIR
+ while [ ! -f $MK_SOURCE ]; do
+ MK_SOURCE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Main Menu" --title " Select source file name (use spaces to select): " --fselect "$MK_SOURCE" 10 70`
+ [ $? -ne 0 ] && return 100
+ if [ ! -f $MK_SOURCE ]; then
+ MK_SOURCE="$MK_SOURCE/"
+ fi
+ done
+
+ MK_SRCNAME=`basename $MK_SOURCE`
+ MK_SOURCEDIR=`dirname $MK_SOURCE`
+}
+
+#--------------------------------------------------------------------
+# Edit functions
+#--------------------------------------------------------------------
+# Edit authot, Initials and editor
+function edit_author()
+{
+ MK_AUTHOR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with author complite name:" 8 60 "$MK_AUTHOR"`
+ edit_file "AUTHOR NAME" "$MK_AUTHOR" ~/.mkslackbuild
+
+ MK_AUTHOR_INITIALS=`echo $MK_AUTHOR | sed 's/ /\n/g' | sed 's/^\([A-Z]\).*/\1/' | sed ':i; $!N; s/\n//; ti' | tr [A-Z] [a-z]`
+ MK_AUTHOR_INITIALS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with author assignature:" 8 60 "$MK_AUTHOR_INITIALS"`
+ edit_file "AUTHOR INITIALS" "$MK_AUTHOR_INITIALS" ~/.mkslackbuild
+
+ MK_EDITOR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with editor command:" 8 60 "pico"`
+ edit_file "EDITOR" "$MK_EDITOR" ~/.mkslackbuild
+
+ MK_SOURCEDIR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with sources directory:" 8 60 "\`pwd\`"`
+ edit_file "SOURCE DIR" "$MK_SOURCEDIR" ~/.mkslackbuild
+
+ if [ "$USER" != "root" ]; then
+ SLACKBUILDRC=`[ -e ~/.slackbuildrc ] && echo ~/.slackbuildrc || echo /etc/slackbuildrc`
+ MK_REPOS=`grep 'REPOS=' $SLACKBUILDRC | sed 's/REPOS=\(.*\)/\1/'`
+ else
+ SLACKBUILDRC=`su -c "[ -e ~/.slackbuildrc ] && echo ~/.slackbuildrc || echo /etc/slackbuildrc" 2>/dev/null`
+ MK_REPOS=`su -c "grep 'REPOS=' $SLACKBUILDRC | sed 's/REPOS=\(.*\)/\1/'" 2>/dev/null`
+ fi
+
+ MK_REPOS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with binary repository directory:" 8 60 "$MK_REPOS"`
+ edit_file "REPOS DIR" "$MK_REPOS" ~/.mkslackbuild
+
+ MK_SLACKBUILD_DIR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with binary repository directory:" 8 60 "$MK_SLACKBUILD_DIR"`
+ edit_file "SLACKBUILD DIR" "$MK_SLACKBUILD_DIR" ~/.mkslackbuild
+
+ MK_ARCH=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter default architecture to SlackBuild:" 8 60 "i468"`
+ edit_file "DEFAULT ARCH" "$MK_ARCH" ~/.mkslackbuild
+
+ MK_LIMITRATE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter wget limit rate:" 8 60 "120k"`
+ edit_file "LIMIT RATE" "$MK_LIMITRATE" ~/.mkslackbuild
+}
+
+# Edit source URL
+function edit_url()
+{
+ MK_URL=${MK_URL:="http://downloads.sourceforge.net/"}
+ MK_URL=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Enter with complite URL from source:" 8 60 "$MK_URL"`
+ [ $? -ne 0 ] && return 100
+}
+
+# Edit source name
+function edit_source_name()
+{
+ # Carrega nome do arquivo
+ MK_SRCNAME=`basename $MK_URL`
+ MK_SRCNAME=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Enter with source file name:" 8 60 "$MK_SRCNAME"`
+ [ $? -ne 0 ] && return 100
+}
+
+# Edit MK_PKGNAME, MK_VERSION and MK_EXTENSION
+function edit_pkgname()
+{
+ # Remove nome, versão e extensão do nome da fonte
+ MK_SRC_NAME=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\1/'`
+ MK_PKGNAME=`echo $MK_SRC_NAME | tr [A-Z_] [a-z\-]`
+ MK_VERSION=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\2/'`
+ MK_EXTENSION=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\3/'`
+
+ # Configura nome, versão e extensão do pacote
+ ANS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Main Menu" --title "$MK_TITLE" \
+ --form "Check information below:" 14 52 7 \
+ "Source name:" 1 1 "$MK_SRC_NAME" 1 15 30 60 \
+ "Package name:" 3 1 "$MK_PKGNAME" 3 15 30 60 \
+ "Version:" 5 1 "$MK_VERSION" 5 15 30 60 \
+ "Extension:" 7 1 "$MK_EXTENSION" 7 15 30 60`
+ [ $? -ne 0 ] && return 100
+
+ MK_SRC_NAME=`echo $ANS | awk '{print $1}'`
+ MK_PKGNAME=`echo $ANS | awk '{print $2}'`
+ MK_VERSION=`echo $ANS | awk '{print $3}'`
+ MK_EXTENSION=`echo $ANS | awk '{print $4}'`
+}
+
+# Edit MK_DECOMPRESSOR and MK_DECOMPRESSOR_TEST_FLAG
+function edit_decompress_arg()
+{
+ # Remove nome, versão e extensão do nome da fonte
+ MK_DECOMPRESSOR=""
+ MK_DECOMPRESSOR_TEST_FLAG=""
+
+ # Configura nome, versão e extensão do pacote
+ ANS3=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Main Menu" --title "$MK_TITLE" \
+ --form "Check information below:" 10 55 3 \
+ "Uncompress program:" 1 1 "$MK_DECOMPRESSOR" 1 23 25 60 \
+ "Uncompress test flag:" 3 1 "$MK_DECOMPRESSOR_TEST_FLAG" 3 23 25 100`
+ [ $? -ne 0 ] && return 100
+
+ MK_DECOMPRESSOR=`echo $ANS3 | awk '{print $1}'`
+ MK_DECOMPRESSOR_TEST_FLAG=`echo $ANS3 | awk '{print $2}'`
+}
+
+# Edit configure options
+function edit_configure()
+{
+ CONFIG_HELP=`mktemp -p /tmp/ config_$MK_PKGNAME.XXXXXX`
+
+ $MK_TMPSRC/configure --help > $CONFIG_HELP
+ config_help
+ #[ "$( cat $CONFIG_HELP | egrep '/usr/local')" != "" ] && MK_PREFIX=/usr || MK_PREFIX=/opt/kde
+ MK_PREFIX="/usr"
+ MK_OPTIONS=""
+ local ANS0=1
+
+ while [ $ANS0 -eq 1 ]; do
+ local ANS1="7"
+ while [ $ANS1 -ne 0 ]; do
+ ANS1=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Continue" --title "$MK_TITLE" \
+ --menu "Select one option" 0 0 0 \
+ 1 "View ./configure --help" \
+ 2 "View documentations" \
+ 3 "PREFIX=$MK_PREFIX" \
+ 4 "OPTIONS=$MK_OPTIONS" \
+ 0 "Continue"`
+
+ case $ANS1 in
+ '1')
+ config_help
+ ;;
+ '2')
+ view_docs
+ ;;
+ '3')
+ MK_PREFIX=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with prefix for install $MK_PKGNAME" 8 60 "$MK_PREFIX"`
+ ;;
+ '4')
+ MK_OPTIONS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with configure options for compile $MK_PKGNAME" 8 60 "$MK_OPTIONS"`
+ ;;
+ *)
+ ANS1=0
+ ;;
+ esac
+ done
+
+ # Configure
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " Execute ./configure below? " --yesno "./configure --prefix=$MK_PREFIX $MK_OPTIONS" 6 70
+ if [ $? -eq 0 ]; then
+ (
+ cd $MK_TMPSRC
+ ./configure --prefix=$MK_PREFIX $MK_OPTIONS
+ )
+
+ echo -en "\nPress ENTER to continue"
+ read ANS0
+ fi
+
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " Configure line is ok? " --yesno "./configure --prefix=$MK_PREFIX $MK_OPTIONS" 6 70
+
+ ANS0=$?
+ done
+}
+
+# Show Documentations files
+function view_docs()
+{
+ local MENU=""
+ local SELECT=""
+ local ANS2=0
+
+ for i in $DOC_FILES; do
+ MENU="$MENU \"$i\" \"\" "
+ done
+
+ while [ $ANS2 -eq 0 ]; do
+ SELECT=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Continue\" --title \"$MK_TITLE\" --menu \"Select doc-file below:\" 20 45 13 $MENU"`
+ ANS2=$?
+ [ $ANS2 -eq 0 ] && view_file "File: $SELECT" $MK_TMPSRC/$SELECT
+ done
+}
+
+# Edit documentations files
+function edit_docfiles()
+{
+ [ -z $MK_TMPSRC ] && return 0
+
+ if [ -e $MK_TMPSRC ]; then
+ LIST=`( cd $MK_TMPSRC; find . -type f -maxdepth 1 | cut -c3- )`
+ DOCMENU=""
+ for i in $LIST; do
+ if [ "`echo NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING | grep $i`" != "" ]; then
+ DOCMENU="$DOCMENU $i \"\" on"
+ else
+ DOCMENU="$DOCMENU $i \"\" off"
+ fi
+ done
+ SELECTDOCS=`eval "dialog --stdout --separate-output --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \"$MK_TITLE\" --cancel-label \"Continue\" --checklist \"Select documentation files below:\" 20 45 13 $DOCMENU"`
+ fi
+
+ MK_DOCFILES="`echo $SELECTDOCS | sed ':i; N; s/\n/ /; bi'`"
+}
+
+# Edit compiler architecture
+function edit_arch()
+{
+ MK_ARCH=`dialog --stdout --backtitle "Make SlackBuild documentation files below:" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Set an architecture to compiler:" 8 45 $MK_ARCH`
+ [ $? -ne 0 ] && return 100
+}
+
+#--------------------------------------------------------------------
+# Mount files
+#--------------------------------------------------------------------
+# Change string $1 to $2 in all files in the current directory
+function change_strings()
+{
+ [ $# -ne 2 ] && mk_exit 1
+ #[ -z "$2" ] && return 0
+ eval "grep -l \"\[\[$1\]\]\" *" | while read FILE; do
+ edit_file "$1" "$2" $FILE
+ done
+}
+
+# Build initial sections
+function start_build()
+{
+ change_strings "SLACKBUILD AUTHOR" "$MK_AUTHOR"
+ change_strings "SLACKBUILD AUTHOR INITIALS" $MK_AUTHOR_INITIALS
+ change_strings "SOURCE NAME" "$MK_SRC_NAME"
+ change_strings "PROGRAM NAME" "$MK_PKGNAME"
+ change_strings "PACKAGE NAME" "$MK_PKGNAME"
+ change_strings "DECOMPRESSOR" "$MK_DECOMPRESSOR"
+ change_strings "DECOMPRESSOR TEST FLAG" "$MK_DECOMPRESSOR_TEST_FLAG"
+ change_strings "PROGRAM URL" "${MK_URL//$MK_SRCNAME}"
+ change_strings "ARCH" "$MK_ARCH"
+ change_strings "VERSION" $MK_VERSION
+ change_strings "SOURCE EXTENSION" ${MK_EXTENSION#tar.}
+ change_strings "DOWNLOAD FOLDER URL" "`dirname $MK_URL`"
+ if [ -z $MK_OPTIONS ]; then
+ change_strings "OTHER CONFIGURE ARGS" "\"\""
+ else
+ change_strings "OTHER CONFIGURE ARGS" "$MK_OPTIONS"
+ fi
+ change_strings "DOCUMENTATION FILES" "$MK_DOCFILES"
+ change_strings "PREFIX" "$MK_PREFIX"
+}
+
+# Mount final SlackBuild
+function mount_slackbuild()
+{
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD" 5 45
+
+ rm $SLACKBUILD 2>/dev/null
+# [ ! -e `dirname $SLACKBUILD` ] && mkdir `dirname $SLACKBUILD`
+ for i in `seq 0 $MAXSECTION`; do
+ if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then
+ cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $SLACKBUILD
+ echo "" >> $SLACKBUILD
+ fi
+ done
+ chmod +x $SLACKBUILD
+}
+
+# Mount SlackBuild to section $1
+function mount_slackbuild_to()
+{
+ if [ $# -eq 1 ]; then
+ END_SECTION=$1
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD.test" 5 45
+
+ rm $SLACKBUILD.test 2>/dev/null
+ let i=0
+ while [ $i -le $END_SECTION ]; do
+ if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then
+ cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $SLACKBUILD.test
+ echo "" >> $SLACKBUILD
+ fi
+ let i++
+ done
+ echo "" >> $SLACKBUILD
+ fi
+}
+
+# Make files section
+function make_file_sections()
+{
+ THIS_MODEL=$1
+
+ # Create SlackBuilds-sections files
+ rm *_$MK_PKGNAME.mkbuild 2>/dev/null
+
+ # Make files section
+ INDEX=0
+ while read ITEM; do
+ SECTION_NAME[INDEX]="$ITEM"
+
+ AUX=${SB_SECTION[$INDEX,0]}_${MK_PKGNAME}
+ SECTION_FILE=${SECTION_NAME[INDEX]}_${MK_PKGNAME}.mkbuild
+ rm $SECTION_FILE 2>/dev/null
+
+ STRING=$ITEM
+ # Save section status flag
+ SECTION_FLAG[INDEX]=`get_status "$STRING" $THIS_MODEL`
+
+ # Create sections files
+ print_lines "$STRING" $THIS_MODEL > $SECTION_FILE
+ let INDEX++
+ done < <( cat $THIS_MODEL | grep '^<[a-z_0-9]\+>' | sed 's/<\(.*\)>.*$/\1/' )
+
+ let INDEX--
+ MAXSECTION=$INDEX
+ md5sum *.mkbuild > md5sum
+}
+
+function get_source_dialog()
+{
+ if [ ! -e $MK_SOURCE ]; then
+ dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --yesno " Download $MK_SRCNAME? " 5 50
+ if [ $? -eq 0 ]; then
+ download_url
+ else
+ select_source
+ [ $? -eq 100 ] && return 100
+ fi
+ fi
+}
+
+
+function test_source()
+{
+ local TEST=1
+ local ANS=0
+
+ while [ $TEST -ne 0 ]; do
+ dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "Test source with $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG $MK_SOURCE" 5 50
+ $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG $MK_SOURCE
+ TEST=$?
+ if [ $TEST -ne 0 ]; then
+ dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --yesno "Source uncompress error. Download source again?" 6 50
+ if [ $? -eq 0 ]; then
+ rm $MK_SOURCE
+ get_source_dialog
+ [ $? -eq 100 ] return 100
+ else
+ TEST=0
+ fi
+ fi
+ done
+}
+
+# Configure test source variables
+function set_source_test()
+{
+ MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME
+ if [ "$MK_EXTENSION" = "tar.gz" -o "$MK_EXTENSION" = "gz" -o "$MK_EXTENSION" = "tgz" ]; then
+ MK_DECOMPRESSOR=gunzip
+ MK_DECOMPRESSOR_TEST_FLAG="-t"
+ elif [ "$MK_EXTENSION" = "tar.bz2" -o "$MK_EXTENSION" = "bz2" ]; then
+ MK_DECOMPRESSOR=bunzip2
+ MK_DECOMPRESSOR_TEST_FLAG="-t"
+ else
+ edit_decompress_arg
+ [ $? -eq 100 ] && return 100
+ fi
+}
+
+# Enable MD5 or GPG signature check
+function edit_signature()
+{
+ # GPG and MD5 test
+ local ANS=0
+
+ ANS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --menu "Select code validate type:" 0 0 0 \
+ "1" "gpg signature" \
+ "2" "md5sum" \
+ "0" "none"`
+
+ case $ANS in
+ 1)
+ edit_gpg
+ ;;
+ 2)
+ edit_md5sum
+ ;;
+ esac
+}
+
+# Enable GPG signature check
+function edit_gpg()
+{
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --msgbox "Enter with gpg minimized signing key." 5 50
+ $EDITOR $MK_GPGFILEKEY
+}
+
+# Enable MD5SUM signature check
+function edit_md5sum()
+{
+ echo "none"
+}
+
+#--------------------------------------------------------------------
+# Main functions
+#--------------------------------------------------------------------
+# Create new SlackBuild
+function create_slackbuild()
+{
+ # Config package URL
+ edit_url
+ [ $? -eq 100 ] && return 100
+
+ # Source Name
+ edit_source_name
+ [ $? -eq 100 ] && return 100
+
+ # Package name, version and extension
+ edit_pkgname
+ [ $? -eq 100 ] && return 100
+
+ # Compile arch
+ edit_arch
+ [ $? -eq 100 ] && return 100
+
+ # Set source test variables
+ set_source_test
+ [ $? -eq 100 ] && return 100
+
+ # Get source file
+ MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME
+ get_source_dialog
+ [ $? -eq 100 ] && return 100
+
+ # Test source
+ test_source
+ [ $? -eq 100 ] && return 100
+
+ # Uncompress source
+ unpkg_source
+ [ $? -eq 100 ] && return 100
+
+ # GPG and MD5 test
+# edit_signature
+
+ # Configure compiler options if exist
+ if [ -e $MK_TMPSRC/configure ]; then
+ edit_configure
+ fi
+
+ # Edit documentation list
+ edit_docfiles
+
+ # Create files sections
+ make_file_sections $SB_MODEL
+
+ # SlackBuild script name
+ SLACKBUILD=$BASEDIR/$MK_PKGNAME.SlackBuild
+
+ # mkSlackBuild script name
+ # FIXME: make an MODELDIR???
+ MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild
+
+ mk_slackdesc > slackdesc_$MK_PKGNAME.mkbuild
+
+ # Edit builds sections
+ start_build
+
+ # Main-Menu
+ edit_menu
+}
+
+# Open mkslackbuild dialog input
+function open_mkslackbuild_dialog()
+{
+ MKSLACKBUILD=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title " Select source file name: " \
+ --fselect "$BASEDIR/" 10 70`
+ [ $? -ne 0 ] && return 100
+
+ open_mkslackbuild
+ [ $? -eq 100 ] || return 100
+}
+
+# Open mkslackbuild
+function open_mkslackbuild()
+{
+ if [ -f $MKSLACKBUILD ]; then
+ # Start defaults variables
+ source $MKSLACKBUILD
+
+ # SlackBuild scrit name
+ SLACKBUILD=$BASEDIR/$MK_PKGNAME.SlackBuild
+
+ # Create files sections
+ make_file_sections $MKSLACKBUILD
+
+ [ -e $BASEDIR/slack-required ] && ( cp $BASEDIR/slack-required $DEPENDENCY_LIST )
+
+ else
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --msgbox "$MKSLACKBUILD most be a mkslackbuild file" 6 45
+ return 100
+ fi
+
+ # CHECK:
+ # Set source test vadiables
+ set_source_test
+ [ $? -eq 100 ] && return 100
+
+ # Get source file
+ get_source_dialog
+ [ $? -eq 100 ] && return 100
+
+ # Test source
+ test_source
+
+ # Uncompress source
+ unpkg_source
+}
+
+# Save mkSlackBuild
+function save_mkslackbuild()
+{
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "mkSlackBuild save in $MKSLACKBUILD" 5 30
+
+ rm $MKSLACKBUILD 2>/dev/null
+ echo '#!/bin/bash' > $MKSLACKBUILD
+ echo -e "# mkSlackBuild version $MK_VERSION\n" >> $MKSLACKBUILD
+ echo "MK_SRC_NAME=\"$MK_SRC_NAME\"" >> $MKSLACKBUILD
+ echo "MK_SRCNAME=\"$MK_SRCNAME\"" >> $MKSLACKBUILD
+ echo "MK_PKGNAME=\"$MK_PKGNAME\"" >> $MKSLACKBUILD
+ echo "MK_URL=\"$MK_URL\"" >> $MKSLACKBUILD
+ echo "MK_AUTHOR=\"$MK_AUTHOR\"" >> $MKSLACKBUILD
+ echo "MK_AUTHOR_INITIALS=\"$MK_AUTHOR_INITIALS\"" >> $MKSLACKBUILD
+ echo "MK_VERSION=\"$MK_VERSION\"" >> $MKSLACKBUILD
+ echo "MK_EXTENSION=\"$MK_EXTENSION\"" >> $MKSLACKBUILD
+ echo "MK_DECOMPRESSOR=\"$MK_DECOMPRESSOR\"" >> $MKSLACKBUILD
+ echo "MK_DECOMPRESSOR_TEST_FLAG=\"$MK_DECOMPRESSOR_TEST_FLAG\"" >> $MKSLACKBUILD
+ echo "MK_DOCFILES=\"$MK_DOCFILES\"" >> $MKSLACKBUILD
+ echo "MK_OPTIONS=\"$MK_OPTIONS\"" >> $MKSLACKBUILD
+ echo "MK_PREFIX=\"$MK_PREFIX\"" >> $MKSLACKBUILD
+ echo "MK_MD5SUM_EXT=\"$MK_MD5SUM_EXT\"" >> $MKSLACKBUILD
+ echo -e "return 0\n\n" >> $MKSLACKBUILD
+
+ for i in `seq 0 $MAXSECTION`; do
+ echo "<${SECTION_NAME[i]}> ${SECTION_FLAG[i]}" >> $MKSLACKBUILD
+ cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $MKSLACKBUILD
+ echo "</${SECTION_NAME[i]}>" >> $MKSLACKBUILD
+ echo "" >> $MKSLACKBUILD
+ done
+
+ [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required
+}
+
+# Edit Menu
+function edit_menu()
+{
+ ANSE=0
+ while [ $ANSE -ne 1 ]; do
+ # Create main-menu string
+ EDITMENU=""
+ for i in `seq 0 $MAXSECTION`; do
+ #echo "${SECTION_NAME[i]} ${SECTION_FLAG[i]} ${SECTION_FILE[i]}"
+ EDITMENU="$EDITMENU ${SECTION_NAME[i]} ${SECTION_FLAG[i]}"
+ done
+
+ SELECT=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --ok-label \"Edit\" --cancel-label \"Main Menu\" --title \"$MK_TITLE\" --menu \"Select one section to edit\" 20 40 13 $EDITMENU"`
+ ANSE=$?
+ if [ $ANSE -ne 1 ]; then
+ STATUS=`mk_status $SELECT`
+ if [ $? -ne 0 ]; then
+ echo "Section name error..."
+ mk_exit 1
+ fi
+ FLAG=`echo $STATUS | awk '{print $1}'`
+ INDEX=`echo $STATUS | awk '{print $2}'`
+ if [ "$FLAG" = "on" ]; then
+ SECTION_FLAG[$INDEX]=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Change $SELECT status?" 0 0 0 "on" "enable section" "on" "off" "desable section" "off"`
+ elif [ "$FLAG" = "off" ]; then
+ SECTION_FLAG[$INDEX]=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Change $SELECT status?" 0 0 0 "on" "enable section" "off" "off" "desable section" "on"`
+ fi
+ if [ $? -eq 0 ]; then
+ if [ "${SECTION_FLAG[$INDEX]}" = "on" -o "${SECTION_FLAG[$INDEX]}" = "all" ]; then
+ if [ "$SELECT" = "md5sum_download_and_check" ]; then
+ md5sum_edit ${SELECT}_${MK_PKGNAME}.mkbuild
+# elif [ "$SELECT" = "gpg_signature_check" ]; then
+# gpg_edit
+ else
+ $MK_EDITOR ${SELECT}_${MK_PKGNAME}.mkbuild
+ fi
+ fi
+ else
+ SECTION_FLAG[$INDEX]=$FLAG
+ fi
+ fi
+ done
+}
+
+# Edit md5sum
+function md5sum_edit()
+{
+ local SELECT=0
+ local FILE=$1
+
+ if ( grep '\[\[MD5SUM EXTENSION\]\]' $FILE &>/dev/null ); then
+ SELECT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Select one option" 0 0 0 "1" "$MK_SRC_NAME-$MK_VERSION.[[MD5SUM EXT]]" on "2" "$MK_SRCNAME.[[MD5SUM EXT]]" off "3" "MK5SUM CODE" off`
+
+ case $SELECT in
+ 1)
+ MK_MD5SUM_EXT="md5sum"
+ MK_MD5SUM_EXT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_EXT`
+ edit_file "MD5SUM EXTENSION" "$MK_MD5SUM_EXT" $FILE
+ ;;
+ 2)
+ MK_MD5SUM_EXT="md5"
+ MK_MD5SUM_EXT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_EXT`
+ eval "sed 's/^MD5SUM_FILE.*$/MD5SUM_FILE=\$SRC.$MK_MD5SUM_EXT/' $FILE > $AUX_TMP"
+ cp $AUX_TMP $FILE
+ ;;
+ 3)
+ MK_MD5SUM_CODE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_CODE`
+ sed '1! d' $FILE > $AUX_TMP
+ sed -n '2, /^fi/ p' $FILE | while read LINE; do echo "#$LINE" >> $AUX_TMP; done
+ sed -n '/^fi/, $ { /^fi/ b; p; }' $FILE >> $AUX_TMP
+ eval "sed 's/^MD5SUM_SRC.*/MD5SUM_SRC=\"$MK_MD5SUM_CODE\"/' $AUX_TMP > $FILE"
+ ;;
+ esac
+ fi
+
+ $MK_EDITOR $FILE
+}
+
+# Test Menu
+function test_menu()
+{
+ local ANST=0
+ local SECTION=0
+ local EDITMENU=""
+
+ # Create main-menu string
+ for i in `seq 0 $MAXSECTION`; do
+ if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then
+ EDITMENU="$EDITMENU $i ${SECTION_NAME[i]}"
+ fi
+ done
+
+ EDITMENU="all \"SlackBuild\" $EDITMENU"
+
+ while [ "$ANST" != "1" ]; do
+ SECTION=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Exit\" --title \"$MK_TITLE\" --menu \"Select section to test end\" 20 40 13 $EDITMENU"`
+ ANST=$?
+
+ if [ $ANST -ne 1 ]; then
+ [ "$SECTION" = "all" ] && SECTION=$MAXSECTION
+ mount_slackbuild_to $SECTION
+
+ # FIXME: -> sintaxe check
+ clear
+ echo "---------------------------------------------------------"
+ echo " --= SINTAX CHECK =--"
+ sh -n $SLACKBUILD.test
+ if [ $? -eq 0 ]; then
+ echo " --= 0K =--"
+ DEBUG=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "no debug" --title "$MK_TITLE" \
+ --menu "Select debug level" 10 35 3 \
+ "-x" "Simple debug" \
+ "-xv" "More information" \
+ "none" "No debug"`
+
+ [ $? -ne 0 -o "$DEBUG" = "none" ] && DEBUG=""
+
+ clear
+ echo "---------------------------------------------------------"
+ echo " --= START BUILDING =--"
+ if [ "$USER" != "root" ]; then
+ su -c "( sh $DEBUG $SLACKBUILD.test )"
+ else
+ ( sh $DEBUG $SLACKBUILD.test )
+ fi
+ echo "---------------------------------------------------------"
+ echo " --= END =--"
+
+ echo -n "Enter 1 to end test: "
+ read ANST
+ else
+ echo "Script error..."
+ read ANST
+ fi
+ fi
+ done
+}
+
+# Dependency Menu
+function menu_dependency()
+{
+ local ANSD=11
+ while [ $ANSD -ne 0 ]; do
+ ANSD=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Main Menu" --title "$MK_TITLE" --menu "Main Menu:" 0 0 0 \
+ "1" "Edit dependency list" \
+ "2" "Test dependency list"`
+
+ [ $? -ne 0 ] && ANSD=0
+
+ case $ANSD in
+ 1)
+ edit_dependency
+ ;;
+ 2)
+ test_dependency
+ ;;
+ esac
+ done
+}
+
+# Dependency list edit
+function edit_dependency()
+{
+ if [ ! -s $DEPENDENCY_LIST ]; then
+ echo -e "# Dependency list to $MK_PKGNAME\n# \n# dependency [condition] [version]]\n" > $DEPENDENCY_LIST
+ fi
+
+ $MK_EDITOR $DEPENDENCY_LIST
+}
+
+# Check dependency and comment not found dependencies
+function test_dependency()
+{
+ local DEP_LIST=""
+
+ if [ -s $DEPENDENCY_LIST ]; then
+ for i in `grep '^[^#]' $DEPENDENCY_LIST | awk '{print $1}' | sort | uniq`; do
+ if [ `ls /var/log/packages/$i-[0-9]* 2>/dev/null` ]; then
+ DEP_LIST="$DEP_LIST $i \"intalled\" off"
+ else
+ DEP_LIST="$DEP_LIST $i \"unintalled\" on"
+ fi
+ done
+
+ DEP_SELECT=`eval "dialog --stdout --separate-output --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \"$MK_TITLE\" --checklist \"Select packages to remove from dependency list:\" 0 0 0 $DEP_LIST"`
+ # 20 45 13
+
+ for i in $DEP_SELECT; do
+ eval "sed 's/$i$/#$i/' $DEPENDENCY_LIST > $AUX_TMP "
+ eval "sed 's/$i /#$i /' $AUX_TMP > $DEPENDENCY_LIST"
+ eval "sed 's/$i\t/#$i\t/' $DEPENDENCY_LIST > $AUX_TMP"
+ cp $AUX_TMP $DEPENDENCY_LIST
+ done
+ fi
+}
+
+# Add/commit one SlackBuild
+function commit_SlackBuild()
+{
+ # Mount SlackBuild
+ mount_slackbuild
+ MK_TITLE="Commit SlackBuild"
+
+ # Find SlackBuild
+ SB_PATH=`find $MK_SLACKBUILD_DIR -iname $MK_PKGNAME`
+
+ # Change to SlackBuild directory
+ cd $MK_SLACKBUILD_DIR
+
+ # Check for new SlackBuild
+ if [ -z $SB_PATH ]; then
+ # New SlackBuild
+ AUX=""
+ while [ -z $AUX ]; do
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --infobox "lynx -dump http://gentoo-portage.com/Search?search=$MK_PKGNAME. Wait..." 0 0
+ AUX=`lynx -dump http://gentoo-portage.com/Search?search=$MK_PKGNAME | sed -n '/Results:/,+1 { /Results:/ b ; p }' | head --lines=1 | tr -d " "`
+ # Default directory
+ if [ -z $AUX ]; then
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --yesno "Net search error. Try again?" 0 0
+ if [ $? -ne 0 ]; then
+ AUX="/others/unclass"
+ SB_PATH=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter dir-name to SlackBuild from $MK_PKGNAME:" 8 60 "$AUX"`
+ fi
+ else
+ SB_PATH="`dirname $AUX | tr - /`/`basename $AUX`"
+ fi
+ done
+ # Make directory and add SlackBuild to svn
+ svn mkdir $SB_PATH
+ cp $BASEDIR/$MK_PKGNAME.SlackBuild $SB_PATH/
+ svn add $SB_PATH/$MK_PKGNAME.SlackBuild
+ if [ -e $BASEDIR/slack-required ]; then
+ cp $BASEDIR/slack-required $SB_PATH/
+ svn add $SB_PATH/slack-required
+ fi
+ else
+ echo "cp $BASEDIR/$MK_PKGNAME.SlackBuild $SB_PATH/"
+ if [ -e $BASEDIR/slack-required ]; then
+ cp $BASEDIR/slack-required $SB_PATH/
+ fi
+ fi
+
+ # Commit SlackBuild
+ MK_MSG=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter message do commit command:" 8 60`
+ svn commit -m "$MK_PKGNAME: $MK_MSG"
+
+ cd $BASEDIR
+
+ echo -e "\nPress ENTER to continue."
+ read ANS1
+}
+
+# Compile SlackBuild and install
+function compile_install()
+{
+ local ANS=""
+ # Mount SlackBuild
+ mount_slackbuild
+
+ # Clean temporary file
+ echo " " > $AUX_TMP
+
+ if [ "$USER" = "root" ]; then
+ # Root user
+ # Compile pid
+ PID=`exec-slackbuild $SLACKBUILD $AUX_TMP`
+
+ # Tail messages
+ tail -s .1 --pid=$PID -f $AUX_TMP
+
+ # Package name
+ PACKAGE=`tail -10 $AUX_TMP | grep "^Moving $MK_PKGNAME-[0-9].*\.\.\.$" | awk '{ print $2 }' | grep "$MK_PKGNAME-.*\.tgz$"`
+
+ # Install package
+ if [ ! -z $PACKAGE ]; then
+ installpkg $MK_REPOS/$PACKAGE
+ else
+ echo -e "\nBuild error!"
+ fi
+ else
+ # Commum users
+ # Compile pid
+ PID=`su -c "exec-slackbuild $SLACKBUILD $AUX_TMP"`
+
+ # Tail messages
+ tail -s .1 --pid=$PID -f $AUX_TMP
+
+ # Package name
+ PACKAGE=`tail -10 $AUX_TMP | grep "^Moving $MK_PKGNAME-[0-9].*\.\.\.$" | awk '{ print $2 }' | grep "$MK_PKGNAME-.*\.tgz$"`
+
+ # Install package
+ if [ ! -z $PACKAGE ]; then
+ su -c "installpkg $MK_REPOS/$PACKAGE"
+ else
+ echo -e "\nBuild error!"
+ fi
+ fi
+
+ echo -e "\nPress ENTER to continue."
+ read ANS
+}
+
+#
+#--------------------------------------------------------------------
+# Start Program
+#--------------------------------------------------------------------
+#
+# Start variables
+LANG=en_US
+BASEDIR=`pwd`
+AUX_TMP=`mktemp -p /tmp/ aux_tmp.XXXXXX`
+SLACKDESC_TMP=`mktemp -p /tmp/ slackdesc_tmp.XXXXXX`
+SLACKDESC_LEN=77
+DEPENDENCY_LIST=`mktemp -p /tmp/ slack-required.XXXXXX`
+if [ -z $SB_MODEL ]; then
+ if [ -e ~/.generic.mkSlackBuild ]; then
+ SB_MODEL=~/.generic.mkSlackBuild
+ elif [ -e /etc/simplepkg/generic.mkSlackBuild ]; then
+ SB_MODEL=/etc/simplepkg/generic.mkSlackBuild
+ else
+ echo "SlackBuild model (generic.mkSlackBuild) not found"
+ mk_exit 0
+ fi
+fi
+[ $# -ne 0 ] && MKSLACKBUILD=${1//.*}.mkslackbuild
+
+# Clear dialog
+dialog --clear
+
+# Load/create personal definitions
+if [ ! -e ~/.mkslackbuild ]; then
+ ( cat << EOF > ~/.mkslackbuild
+#!/bin/bash
+# mkslackbuild definitions
+#
+MK_AUTHOR="[[AUTHOR NAME]]"
+MK_AUTHOR_INITIALS="[[AUTHOR INITIALS]]"
+MK_EDITOR=[[EDITOR]]
+MK_REPOS=[[REPOS DIR]]
+MK_LIMITRATE=[[LIMIT RATE]]
+MK_SOURCEDIR=[[SOURCE DIR]]
+MK_ARCH=[[DEFAULT ARCH]]
+MK_SLACKBUILD_DIR=[[SLACKBUILD DIR]]
+#SB_MODEL="my_model"
+EOF
+)
+fi
+source ~/.mkslackbuild
+MK_SOURCEDIR=${MK_SOURCEDIR:=$BASEDIR}
+MK_ARCH=${MK_ARCH:="i486"}
+
+# Config Author
+if [ "$MK_AUTHOR" = "[[AUTHOR NAME]]" ]; then
+ MK_TITLE=" Personal Config "
+ edit_author
+ MK_TITLE=""
+fi
+
+if [ ! -z $MKSLACKBUILD ]; then
+ MK_TITLE=" Open mkSlackBuild "
+ open_mkslackbuild
+fi
+
+MK_TITLE=""
+
+ANS0=11
+while [ $ANS0 -ne 0 ]; do
+ if [ -z $MK_PKGNAME ]; then
+ ANS0=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \
+ "1" "Create New SlackBuild" \
+ "2" "Open mkSlackBuild" \
+ "0" "Exit"`
+
+ if [ $? -ne 0 ]; then
+ ANS0=0
+ fi
+
+ case $ANS0 in
+ 1)
+ MK_TITLE=" Create SlackBuild "
+ create_slackbuild
+ [ $? -eq 100 ] && MK_PKGNAME=""
+ ;;
+ 2)
+ MK_TITLE=" Open mkSlackBuild "
+ open_mkslackbuild_dialog
+ [ $? -eq 100 ] && MK_PKGNAME=""
+ ;;
+ *)
+ echo "Exit..."
+ ANS0=0
+ ;;
+ esac
+ MK_TITLE=""
+ else
+ ANS0=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \
+ "1" "Edit SlackBuild sections" \
+ "2" "Edit dependency list" \
+ "3" "Test SlackBuild script" \
+ "4" "View Doc-Files" \
+ "5" "Save SlackBuild and mkslackbuild" \
+ "6" "Compile/install package" \
+ "7" "Remove package" \
+ "8" "Commit SlackBuild to Sarava"`
+
+ if [ $? -ne 0 ]; then
+ ANS0=0
+ fi
+ case $ANS0 in
+ 1) # Edit Sections
+ MK_TITLE=" Edit Menu "
+ edit_menu
+ ;;
+ 2) # Dependency Menu
+ MK_TITLE=" Dependency Menu "
+ menu_dependency
+ ;;
+ 3) # Test Script
+ MK_TITLE=" Test Menu "
+ test_menu
+ ;;
+ 4) # View Doc-Files
+ MK_TITLE=" View Docs "
+ view_docs
+ ;;
+ 5) # Save SlackBuild
+ save_mkslackbuild
+ mount_slackbuild
+ ;;
+ 6) # Compile/install package
+ compile_install
+ ;;
+ 7) # Remove package
+ if [ "$USER" = "root" ]; then
+ removepkg $MK_PKGNAME
+ else
+ su -c "( removepkg $MK_PKGNAME )"
+ fi
+ echo -e "\nPress ENTER to continue."
+ read ANS1
+ ;;
+ 8) # Commit SlackBuild to Sarava
+ commit_SlackBuild
+ ;;
+ 0) # Exit
+ ANS0=0
+ ;;
+ esac
+ MK_TITLE=""
+ fi
+done
+
+# Check changes
+if [ ! -z $MK_PKGNAME ]; then
+ md5sum -c md5sum
+ if [ $? -ne 0 ]; then
+ MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild
+ save_mkslackbuild
+ mount_slackbuild
+ fi
+fi
+
+mk_exit 0
+# _________________________________END_______________________________
diff --git a/branches/0.6/src/mkjail b/branches/0.6/src/mkjail
new file mode 100755
index 0000000..f6c935c
--- /dev/null
+++ b/branches/0.6/src/mkjail
@@ -0,0 +1,113 @@
+#!/bin/bash
+#
+# mkjail v0.4: chroot jail maker
+#
+# feedback: rhatto at riseup.net | GPL
+#
+# Mkjail is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Mkjail is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+BASENAME="`basename $0`"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+else
+ echo "error: file $COMMON found, check your `basename $0` installation"
+ exit 1
+fi
+
+function usage {
+
+ echo "usage: [ARCH=arch] [VERSION=version] [ROOT=/otherroot] $BASENAME <jail-name> [template]"
+ exit 1
+
+}
+
+function exec_post_install_scripts {
+
+ # exec post installation scripts
+ # usage: exec_post_install_script <jail-root> <jail-name>
+
+ local list
+
+ if [ -z "$2" ]; then
+ return 1
+ fi
+
+ echo "$BASENAME: executing template scripts..."
+ if [ -d "$TEMPLATE_BASE.s" ]; then
+ for file in $TEMPLATE_BASE.s/*; do
+ if [ -x "$file" ]; then
+ $file $1 $2
+ fi
+ done
+ fi
+
+}
+
+function jailist_update {
+
+ # update the jail list file
+ # usage: jailist_update <jail-path>
+
+ if [ "$ADD_TO_JAIL_LIST" == "1" ]; then
+ touch $JAIL_LIST
+ if ! grep -q -e "^$1\$" $JAIL_LIST; then
+ echo $1 >> $JAIL_LIST
+ fi
+ fi
+
+}
+
+if [ -z "$1" ]; then
+ usage
+else
+ server="$1"
+ eval_config $BASENAME -u
+fi
+
+if [ ! -z "$2" ]; then
+ search_template $2
+ result="$?"
+else
+ search_default_template
+ result="$?"
+fi
+
+if [ "$result" != "0" ]; then
+ exit 1
+fi
+
+TEMPLATE="$TEMPLATE_BASE.template"
+
+if [ ! -d "$JAIL_ROOT/$server" ]; then
+ mkdir -p $JAIL_ROOT/$server
+else
+ if [ ! -z "`ls $JAIL_ROOT/$server | grep -v 'lost+found'`" ]; then
+ echo $BASENAME: error: folder $JAIL_ROOT/$server already exists and seens to be not empty
+ echo $BASENAME: probably the jail $1 already exists
+ exit 1
+ fi
+fi
+
+echo "$BASENAME: instaling packages into $JAIL_ROOT/$server using $TEMPLATE..."
+
+install_packages
+copy_template_files $JAIL_ROOT/$server
+set_jail_perms $JAIL_ROOT/$server
+jailist_update $JAIL_ROOT/$server
+exec_post_install_scripts $JAIL_ROOT $server
+
+echo $BASENAME: done creating $server jail
+
diff --git a/branches/0.6/src/rebuildpkg b/branches/0.6/src/rebuildpkg
new file mode 100755
index 0000000..6d3d10c
--- /dev/null
+++ b/branches/0.6/src/rebuildpkg
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# rebuildpkg: build a package from a /var/log/packages entry
+#
+# feedback: rhatto at riseup.net | gpl
+#
+# Rebuildpkg is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Rebuildpkg is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+TMP="/tmp"
+
+function usage {
+ echo "usage: ROOT=/otherroot `basename $0` <package-name>"
+}
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+else
+ echo "error: file $COMMON found, check your `basename $0` installation"
+ exit 1
+fi
+
+if [ -z "$1" ]; then
+ usage
+ exit 1
+fi
+
+pack="$1"
+
+for file in `ls $ROOT/var/log/packages/$pack*`; do
+ if [[ "`package_name $file.tgz`" == "$pack" ]]; then
+ package_file="$file"
+ break
+ fi
+done
+
+if [ -z "$package_file" ]; then
+ echo error: package $pack does not exist
+ exit 1
+fi
+
+if [ -d "$TMP/package-$pack" ]; then
+ rm -rf $TMP/package-$pack
+fi
+
+mkdir $TMP/package-$pack
+cd $TMP/package-$pack
+
+for file in `grep -v -e "^PACKAGE NAME:" -e "^UNCOMPRESSED PACKAGE SIZE:" \
+ -e "^COMPRESSED PACKAGE SIZE:" -e "^PACKAGE LOCATION:" \
+ -e "^PACKAGE DESCRIPTION:" -e "^$pack:" -e "^FILE LIST:" $package_file`; do
+
+ if [ "$file" != "install" ] && [ "$file" != "install/slack-desc" ] && [ "$file" != "install/doinst,sh" ]; then
+ if [ -d /$file ]; then
+ mkdir -p $TMP/package-$pack/$file
+ elif [ -f /$file ]; then
+ cp /$file $TMP/package-$pack/$file
+ else
+ echo file /$file was not found, please add it manually, exploding and making the package again
+ fi
+ fi
+
+done
+
+mkdir $TMP/package-$pack/install
+grep "^$pack:" $package_file > $TMP/package-$pack/install/slack-desc
+
+package_name="`grep "PACKAGE NAME:" $package_file | awk '{ print $3 }'`"
+
+if [ -f "$ROOT/var/log/scripts/$package_name" ]; then
+ cp $ROOT/var/log/scripts/$package_name $TMP/package-$pack/install/doinst.sh
+fi
+
+makepkg $package_name.tgz
+mv $package_name.tgz $TMP/
+echo "done: package rebuilt and stored at $TMP/$package_name.tgz"
diff --git a/branches/0.6/src/repos b/branches/0.6/src/repos
new file mode 100755
index 0000000..e4a17ee
--- /dev/null
+++ b/branches/0.6/src/repos
@@ -0,0 +1,87 @@
+#!/bin/bash
+#
+# repos script got from
+# http://software.jaos.org/BUILD/slapt-get/FAQ.html#slgFAQ17
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# any later version.
+#
+# Changes by rhatto at riseup.net to fit http://slack.sarava.org needs
+#
+
+BASENAME="`basename $0`"
+REPOS_CONF="/etc/simplepkg/repos.conf"
+COMMON="/usr/libexec/simplepkg/common.sh"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+else
+ echo "error: file $COMMON found, check your $BASENAME installation"
+ exit 1
+fi
+
+function usage {
+
+ echo "`basename $0` [pkg [file]|all|new|svnmeta|PACKAGESTXT|FILELIST|MD5]"
+
+}
+
+function do_all {
+
+ for pkg in `find . -type f -name '*.tgz' -print`; do
+ gen_meta $pkg
+ done
+ $0 PACKAGESTXT
+ $0 FILELIST
+ $0 MD5
+
+}
+
+# ---------------------------------
+# main
+# ---------------------------------
+
+case "$1" in
+ pkg)
+ if [ -n "$2" ]; then
+ gen_meta $2
+ else
+ usage
+ fi
+ ;;
+ all)
+ do_all
+ ;;
+ new)
+ for pkg in `find . -type f -name '*.tgz' -print`; do
+ if [ ! -f ${pkg%tgz}meta ]; then
+ gen_meta $pkg
+ fi
+ done
+ ;;
+ svnmeta)
+ svn_add_meta
+ ;;
+ PACKAGESTXT)
+ gen_packages_txt .
+ gen_packages_txt patches
+ ;;
+ FILELIST)
+ gen_filelist
+ gen_patches_filelist patches
+ ;;
+ MD5)
+ gen_md5_checksums .
+ gen_md5_checksums patches
+ ;;
+ usage)
+ usage
+ ;;
+ *)
+ do_all
+ svn_add_meta
+ ;;
+esac
+
diff --git a/branches/0.6/src/simplaret b/branches/0.6/src/simplaret
new file mode 100755
index 0000000..00b0c25
--- /dev/null
+++ b/branches/0.6/src/simplaret
@@ -0,0 +1,1045 @@
+#!/bin/bash
+#
+# simplaret v0.2: simplepkg's retrieval tool
+# feedback: rhatto at riseup.net | gpl
+#
+# Simplaret is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Simplaret is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+BASENAME="`basename $0`"
+REPOS_CONF="/etc/simplepkg/repos.conf"
+COMMON="/usr/libexec/simplepkg/common.sh"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+else
+ echo "error: file $COMMON found, check your $BASENAME installation"
+ exit 1
+fi
+
+function simplaret_usage {
+
+ echo "usage: [ARCH=otherarch] [VERSION=otherversion] $BASENAME <OPTION> package-name"
+ echo -e "\t OPTIONS: --install, --update, --upgrade, --search, --get, --get-patches, --purge, --remove"
+ exit 1
+
+}
+
+function simplaret_get_index {
+
+ for file in `simplaret_metafiles`; do
+ simplaret_download $1 $file $2 --no-verbose
+ done
+
+}
+
+function simplaret_backup_index {
+
+ for file in `simplaret_metafiles`; do
+ if [ -f "$1/$file" ]; then
+ mv $1/$file $1/$file.old
+ fi
+ done
+
+}
+
+function simplaret_check_index {
+
+ for file in `simplaret_metafiles`; do
+ if [ ! -f "$1/$file" ] && [ -f "$1/$file" ]; then
+ echo restoring old $file to $1...
+ mv $1/$file.old $1/$file
+ else
+ rm -f $1/$file.old
+ fi
+ done
+
+}
+
+function simplaret_download {
+
+ # download a file from a repo to a folder
+ # usage: simplaret <repository_url> <package> <destination-folder> [--no-verbose]
+
+ local protocol file
+ local wget_timeout wget_passive_ftp wget_verbose
+ local curl_timeout curl_passive_ftp curl_verbose
+ local ncftpget_timeout ncftpget_passive_ftp
+
+ protocol="`echo $1 | cut -d : -f 1`"
+ file="`basename $2`"
+
+ if [ ! -d "$3" ]; then
+ mkdir -p $3
+ fi
+
+ if [ ! -z "$CONNECT_TIMEOUT" ] || [ "$CONNECT_TIMEOUT" != "0" ]; then
+ wget_timeout="--timeout $CONNECT_TIMEOUT"
+ ncftpget_timeout="-t $CONNECT_TIMEOUT"
+ curl_timeout="--connect-timeout $CONNECT_TIMEOUT"
+ fi
+
+ if [ "$4" == "--no-verbose" ]; then
+ wget_verbose="--no-verbose"
+ curl_verbose="-#"
+ echo ""
+ fi
+
+ if [ "$protocol" == "http" ]; then
+
+ echo Getting $1/$file:
+ if [ "$HTTP_TOOL" == "wget" ]; then
+ wget $wget_timeout $wget_verbose $1/$2 -O $3/$file
+ elif [ "$HTTP_TOOL" == "curl" ]; then
+ curl $curl_timeout $curl_verbose $1/$2 > $3/$file
+ else
+ echo $BASENAME: error: invalid value for config variable HTTP_TOOL: $HTTP_TOOL
+ echo $BASENAME: please check your config file $CONF
+ exit 1
+ fi
+
+ elif [ "$protocol" == "ftp" ]; then
+ echo Getting $1/$file:
+
+ if [ "$PASSIVE_FTP" == "1" ]; then
+ wget_passive_ftp="--passive-ftp"
+ ncftpget_passive_ftp="-F"
+ curl_passive_ftp="--ftp-pasv"
+ fi
+
+ if [ "$FTP_TOOL" == "ncftpget" ]; then
+ ncftpget -c $ncftpget_timeout $ncftpget_passive_ftp $1/$2 > $3/$file
+ elif [ "$FTP_TOOL" == "wget" ]; then
+ wget $wget_timeout $wget_passive_ftp $wget_verbose $1/$2 -O $3/$file
+ elif [ "$FTP_TOOL" == "curl" ]; then
+ curl $curl_timeout $curl_passive_ftp $curl_verbose $1/$2 > $3/$file
+ else
+ echo $BASENAME: error: invalid value for config variable FTP_TOOL: $FTP_TOOL
+ echo $BASENAME: please check your config file $CONF
+ exit 1
+ fi
+
+ elif [ "$protocol" == "file" ]; then
+
+ url="`echo $1 | sed -e 's/file:\/\///'`"
+ if [ -f "$3/$file" ]; then
+ rm -f $3/$file
+ fi
+ echo -n "Copying $url/$2..."
+ if [ -f "$url/$2" ]; then
+ cp $url/$2 $3/$file 2> /dev/null
+ fi
+ if [ -f "$3/$file" ]; then
+ echo " done."
+ else
+ echo " failed."
+ fi
+
+ else
+
+ echo $BASENAME error: invalid protocol $protocol
+
+ fi
+
+}
+
+function simplaret_repository {
+
+ # return a repository definition from $REPOS_CONF file
+ # usage: simplaret_repository [root|repos|noarch|patches]
+
+ local definition
+
+ if [ -z "$1" ]; then
+ definition="ROOT"
+ else
+ definition="`echo $1 | tr '[:lower:]' '[:upper:]'`"
+ fi
+
+ if [ "$definition" == "REPOS" ] || [ "$definition" == "PATCHES" ]; then
+ definition="$definition-$ARCH-$VERSION"
+ elif [ "$definition" == "ROOT" ]; then
+ definition="$definition-$ARCH"
+ fi
+
+ grep -e "^$definition=" $REPOS_CONF | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | cut -d "#" -f 1
+
+}
+
+function simplaret_repository_name {
+
+ # return a repository name according the value of $repository
+
+ if [ -z "$repository" ]; then
+ false
+ elif echo $repository | grep -qe %; then
+ repository_name="`echo $repository | cut -d % -f 1`"
+ if [ -z "$repository_name" ]; then
+ echo $BASENAME: you should set a name for the repository $repository
+ echo $BASENAME: please correct your $REPOS_CONF
+ exit 1
+ fi
+ else
+ echo $BASENAME: you should set a name for the repository $repository
+ echo $BASENAME: please correct your $REPOS_CONF
+ exit 1
+ fi
+
+}
+
+function simplaret_repository_url {
+
+ # return a repository url according the value of $repository
+
+ if echo $repository | grep -qe %; then
+ repository_url="`echo $repository | cut -d % -f 2`"
+ if [ -z "$repository_url" ]; then
+ echo $BASENAME: you should set a url for the repository $repository
+ echo $BASENAME: please correct your $REPOS_CONF
+ exit 1
+ fi
+ else
+ echo $BASENAME: you should set a url for the repository $repository
+ echo $BASENAME: please correct your $REPOS_CONF
+ exit 1
+ fi
+
+ if [ "$repos_type" == "root" ]; then
+ simplaret_distro_folder
+ repository_url="$repository_url/$DISTRO_FOLDER/$EXTRA_FOLDER"
+ fi
+
+}
+
+function simplaret_set_storage_folder {
+
+ storage="$STORAGE/$ARCH/$VERSION/$repos_type"
+ if [ "$repos_type" == "noarch" ]; then
+ storage="$STORAGE/noarch"
+ elif [ "$repos_type" == "patches" ]; then
+ storage="$PATCHES_DIR/$ARCH/$VERSION"
+ fi
+
+}
+
+function simplaret_update {
+
+ local storage
+
+ echo Updating package information for arch $ARCH and version $VERSION...
+
+ for repos_type in patches root repos noarch; do
+
+ simplaret_set_storage_folder
+
+ for repository in `simplaret_repository $repos_type`; do
+
+ simplaret_repository_name
+ simplaret_repository_url
+
+ if [ ! -d "$storage/$repository_name" ]; then
+ mkdir -p $storage/$repository_name
+ else
+ simplaret_backup_index $storage/$repository_name
+ fi
+
+ simplaret_get_index $repository_url $storage/$repository_name
+ simplaret_check_index $storage/$repository_name
+
+ unset repository_name repository_url repository_protocol
+
+ done
+ done
+
+}
+
+function simplaret_find_package {
+
+ # grep packages in a repository's file list
+ # usage: simplaret_find_package <package-name|-all> <repository-folder>
+
+ if [ "$1" == "-all" ]; then
+ grep -e ".tgz$" $2/`simplaret_filelist` | awk '{ print $8 }'
+ else
+ grep $1 $2/`simplaret_filelist` | awk '{ print $8 }' | grep -e ".tgz$"
+ fi
+
+}
+
+function simplaret_show_package {
+
+ # print a package result
+ # usage: simplaret_show_package <package-file-name> [--basename-only|--filename-only|--formatted]
+
+ if [ "$2" == "--basename-only" ]; then
+ echo `basename $1`
+ elif [ "$2" == "--filename-only" ]; then
+ echo $1
+ elif [ "$2" == "--formatted" ]; then
+ echo $1,$repos_type,$repository
+ else
+ if echo $1 | grep -q "/patches/"; then
+ patch="(patch)"
+ fi
+ if [ "$repos_type" == "noarch" ]; then
+ echo $name repository $repository_name: `basename $1` $patch
+ else
+ echo $name repository $repository_name, arch: $ARCH, version: $VERSION: `basename $1` $patch
+ fi
+ fi
+ unset patch
+
+}
+
+function simplaret_filelist {
+
+ if [ "$repos_type" == "patches" ]; then
+ echo FILE_LIST
+ else
+ echo FILELIST.TXT
+ fi
+
+}
+
+function simplaret_metafiles {
+
+ echo `simplaret_filelist` CHECKSUMS.md5
+
+}
+
+function simplaret_search {
+
+ # search packages
+ # usage: simplaret_search [package-name] [-display_mode]
+ # display_mode can be any accepted by simplaret_show_package
+
+ local priority priority_match message pattern mode
+
+ if [ ! -z "$1" ] && ! echo $1 | grep -q -e "^-"; then
+ pattern="$1"
+ mode="$2"
+ else
+ pattern="-all"
+ mode="$1"
+ fi
+
+ for repos_type in patches root repos noarch; do
+
+ name="`echo $repos_type | tr '[:lower:]' '[:upper:]'`"
+ simplaret_set_storage_folder
+
+ for repository in `simplaret_repository $repos_type`; do
+
+ simplaret_repository_name
+
+ if [ ! -f "$storage/$repository_name/`simplaret_filelist`" ]; then
+ if [ "$WARNING" != "0" ] || [ ! -z "$SILENT" ]; then
+ if [ "$repos_type" == "noarch" ]; then
+ message=""
+ else
+ message="on arch $ARCH version $VERSION"
+ fi
+ echo warning: no file list for $repository_name repository $repository_name $message
+ echo please do a simplaret --update
+ fi
+ else
+
+ if [ "$repos_type" == "root" ]; then
+ # root repositories has ROOT_PRIORITY
+ for priority in $ROOT_PRIORITY; do
+ for file in `simplaret_find_package $pattern $storage/$repository_name | grep "/$priority/"`; do
+ simplaret_show_package $file $mode
+ done
+ priority_match="$priority_match|/$priority/"
+ done
+ # now we should return all matches that are not part of ROOT_PRIORITY
+ priority_match="`echo $priority_match | sed -e 's/^|//'`"
+ for file in `simplaret_find_package $pattern $storage/$repository_name | egrep -v $priority_match`; do
+ simplaret_show_package $file $mode
+ done
+ priority_match=""
+ elif [ "$repos_type" == "repos" ]; then
+ # repos repositories has REPOS_PRIORITY
+ for priority in $REPOS_PRIORITY; do
+ for file in `simplaret_find_package $pattern $storage/$repository_name | grep "/$priority/"`; do
+ simplaret_show_package $file $mode
+ done
+ priority_match="$priority_match|/$priority/"
+ done
+ # now we should return all matches that are not part of REPOS_PRIORITY
+ priority_match="`echo $priority_match | sed -e 's/^|//'`"
+ for file in `simplaret_find_package $pattern $storage/$repository_name | egrep -v $priority_match`; do
+ simplaret_show_package $file $mode
+ done
+ priority_match=""
+ else
+ for file in `simplaret_find_package $pattern $storage/$repository_name`; do
+ simplaret_show_package $file $mode
+ done
+ fi
+
+ fi
+
+ done
+ done
+
+}
+
+function simplaret_purge {
+
+ # purge simplaret package cache
+ # usage: simplaret_purge [-w N]
+
+ local mtime mtime_message which and_patches
+
+ if [ "$2" == "-w" ] && [ ! -z "$3" ]; then
+ mtime="-mtime +`echo "$3*7" | bc -l`"
+ mtime_message="older than $3 weeks"
+ elif [ "$SIMPLARET_PURGE_WEEKS" != "0" ]; then
+ mtime="-mtime +`echo "$SIMPLARET_PURGE_WEEKS*7" | bc -l`"
+ mtime_message="older than $SIMPLARET_PURGE_WEEKS weeks"
+ else
+ mtime=""
+ mtime_mesage=""
+ fi
+
+ which="root repos noarch"
+ and_patches=""
+
+ if [ "$SIMPLARET_PURGE_PATCHES" == "1" ]; then
+ which="patches $which"
+ and_patches="including patches"
+ fi
+
+ if [ -z "$SILENT" ]; then
+ echo "$BASENAME: purging all packages $mtime_message for:"
+ echo -e "\t- Arch $ARCH and version $VERSION $and_patches"
+ echo -e "\t- Noarch folder"
+ fi
+
+ for repos_type in $which; do
+
+ simplaret_set_storage_folder
+
+ for file in `find $storage/ $mtime 2> /dev/null`; do
+ for extension in tgz asc meta txt slack-required; do
+ if echo $file | grep -qe ".$extension$"; then
+ rm $file
+ fi
+ done
+ done
+
+ done
+
+ if [ -z "$SILENT" ]; then
+ echo $BASENAME: done purging simplaret cache
+ echo $BASENAME: please run $BASENAME --update to retrieve new package listings on this arch and version
+ fi
+
+}
+
+function simplaret_search_and_delete {
+
+ local file candidate place basename
+
+ for file in `find $2/ -name $1*tgz 2> /dev/null`; do
+ candidate="`basename $file`"
+ if [ "`package_name $candidate`" == "$1" ]; then
+ # check if has the same version and build number, otherwise erase the old one
+ for result in `simplaret_search $(package_name $candidate) --basename-only`; do
+ if [ "`package_name $candidate`" == "`package_name $result`" ]; then
+ if [ "`package_version $candidate`" == "`package_version $result`" ] && \
+ [ "`package_build $candidate`" == "`package_build $result`" ]; then
+ LAST_DOWNLOADED_PACKAGE="$file"
+ if [ "$3" != "--silent" ]; then
+ echo Package $candidate already downloaded
+ # echo Package $candidate stored at `dirname $file`
+ else
+ true
+ # echo $file
+ fi
+ return 1
+ else
+ place="`dirname $file`"
+ basename="`basename $file tgz`"
+ rm -f $file
+ rm -f $place/$candidate.slack-required
+ rm -f $file.asc $place/$basename.meta $place/$basename.txt
+ break
+ fi
+ fi
+ done
+ fi
+ done
+
+}
+
+function simplaret_get {
+
+ # get a package
+ # usage: simplaret_get <package-name> [--silent]
+
+ local silent generate_patches search search_results
+
+ # prevent user to stay in $storage
+ cd
+
+ # first search for an already downloaded package
+ for repos_type in patches root repos noarch; do
+
+ simplaret_set_storage_folder
+ simplaret_search_and_delete $1 $storage $2
+
+ if [ "$?" == "1" ]; then
+ return 0
+ fi
+
+ done
+
+ # then search for the package in the repositories
+ search="`simplaret_search $1 --formatted`"
+ search_results="`echo "$search" | wc -l`"
+
+ for result in $search; do
+
+ # remaining search results
+ let search_results--
+
+ file="`echo $result | cut -d , -f 1`"
+ repos_type="`echo $result | cut -d , -f 2`"
+ repository="`echo $result | cut -d , -f 3`"
+
+ simplaret_set_storage_folder
+ simplaret_repository_name
+
+ candidate="`basename $file`"
+ if [ "`package_name $candidate`" == "$1" ]; then
+ simplaret_repository_url
+
+ # if repos_type == root, the package is a patch and
+ # STORE_ROOT_PATCHES_ON_PATCHES_DIR config parameter is enabled, then
+ # save it on $PATCHES_DIR/root-$repository_name, so all patches
+ # are placed in the same tree
+ if [ "$repos_type" == "root" ] && \
+ [ "$STORE_ROOT_PATCHES_ON_PATCHES_DIR" == "1" ] && echo $file | grep -q "patches"; then
+ folder="$PATCHES_DIR/$ARCH/$VERSION/root-$repository_name"
+ generate_patches="1"
+ else
+ folder="$storage/$repository_name"
+ fi
+
+ # download the package
+ simplaret_download $repository_url $file $folder
+
+ if [ -f "$folder/$candidate.asc" ]; then
+ rm $folder/$candidate.asc
+ fi
+
+ if [ -f "$folder/$1.slack-required" ]; then
+ rm $folder/$1.slack-required
+ fi
+
+ # download the signature, if exist
+ if simplaret_check_url $repository_url/$file.asc; then
+ simplaret_download $repository_url $file.asc $folder
+ fi
+
+ # download slack-required, if exist
+ if simplaret_check_url $repository_url/`dirname $file`/$1.slack-required; then
+ simplaret_download $repository_url `dirname $file`/$1.slack-required $folder
+ fi
+
+ if [ ! -f "$folder/$candidate" ]; then
+ LAST_DOWNLOADED_PACKAGE="0"
+ if [ "$2" != "--silent" ]; then
+ echo Error downloading $candidate from $repos_type repository $repository_url, please check your settings
+ fi
+ # check if there's also more repositories to try
+ if [ "$SIMPLARET_DOWNLOAD_FROM_NEXT_REPO" != "1" ]; then
+ return 1
+ else
+ if [ "$2" != "--silent" ]; then
+ echo Trying to fetch $candidate from the next repository...
+ fi
+ if (($search_results <= 0)); then
+ return 1
+ fi
+ fi
+ else
+ LAST_DOWNLOADED_PACKAGE="$folder/$candidate"
+ if [ "$2" != "--silent" ]; then
+ silent=""
+ echo Package $candidate stored at $folder
+ else
+ # echo $folder/$candidate
+ silent="--silent"
+ fi
+ if [ -f "$folder/$candidate.asc" ] || [ "$SIGNATURE_CHECKING" == "1" ]; then
+ gpg --verify $folder/$candidate.asc $folder/$candidate
+ fi
+ # generate the patches FILE_LIST and PACKAGES.TXT if needed
+ if [ "$generate_patches" == "1" ]; then
+ gen_patches_filelst $folder
+ gen_packages_txt $folder
+ gen_md5_checksums $folder
+ fi
+ simplaret_checksum $storage/$repository_name/CHECKSUMS.md5 $folder/$candidate $silent
+ return $?
+ fi
+
+ fi
+
+ done
+
+}
+
+function simplaret_search_and_process_patch {
+
+ local package_version package_build installed_version
+ local installed_build repos_type get is_patch package_match
+
+ # get the repository type
+ repos_type="`echo $sugested | cut -d , -f 2`"
+
+ # get just the file name
+ sugested="`echo $sugested | cut -d , -f 1`"
+
+ if echo $sugested | grep -q "patches"; then
+ is_patch="yes"
+ else
+ is_patch="no"
+ fi
+
+ # now split the file name into pieces
+ package_version="`package_version $sugested`"
+ package_build="`package_build $sugested`"
+ sugested="`package_name $sugested`"
+
+ # check if the patch was already downloaded
+ if echo "$DOWNLOADED_PATCHES" | grep -q " $ARCH:$VERSION:$sugested "; then
+ if [ "$IS_UPGRADE" != "1" ]; then
+ echo Package $sugested already downloaded
+ # echo "Jail $root needs package $sugested (already downloaded, skipping)"
+ return
+ fi
+ fi
+
+ # search if its installed in the jail
+ installed_packs="`ls /$root/var/log/packages/$sugested* 2> /dev/null`"
+ if [ ! -z "$installed_packs" ]; then
+
+ for installed in $installed_packs; do
+ if [[ "$sugested" == "`package_name $installed.tgz`" ]]; then
+ package_installed="1"
+ installed_version="`package_version $installed.tgz`"
+ installed_build="`package_build $installed.tgz`"
+ break
+ fi
+ done
+
+ get="no"
+
+ # if the package is installed, download the patch
+ if [ "$package_installed" == "1" ]; then
+ if [ "$repos_type" == "patches" ]; then
+
+ if [ "$package_version" != "$installed_version" ] || [ "$package_build" != "$installed_build" ]; then
+ get="yes"
+ package_match="no"
+ elif [ "$DOWNLOAD_EVEN_APPLIED_PATCHES" == "1" ]; then
+ get="yes"
+ fi
+
+ elif [ "$repos_type" == "root" ] && [ "$is_patch" == "yes" ]; then
+
+ if [ "$package_version" != "$installed_version" ] || [ "$package_build" != "$installed_build" ]; then
+ get="yes"
+ package_match="no"
+ elif [ "$DOWNLOAD_EVEN_APPLIED_PATCHES" == "1" ]; then
+ get="yes"
+ fi
+
+ else
+ # here, we're dealing with repositories other than ROOT and REPOS,
+ # so we need to check if either version or build number are different,
+ # otherwise all installed packages would be downloaded
+ if [ "$package_version" != "$installed_version" ] || [ "$package_build" != "$installed_build" ]; then
+ get="yes"
+ package_match="no"
+ fi
+ fi
+ fi
+
+ # finally, get the package
+ if [ "$get" == "yes" ]; then
+ if [ "$IS_UPGRADE" == "1" ]; then
+ if [ "$package_match" == "no" ]; then
+ simplaret_install $sugested
+ else
+ simplaret_get $sugested
+ fi
+ else
+ simplaret_get $sugested
+ fi
+ if [ "$?" == "0" ]; then
+ DOWNLOADED_PATCHES="$DOWNLOADED_PATCHES $ARCH:$VERSION:$sugested " # the ending space is important
+ fi
+ fi
+
+ fi
+
+ unset package_installed get
+
+}
+
+function simplaret_get_jail_patches {
+
+ # get patches from a jail
+ # usage: simplaret_get_jail_patches <jail-folder>
+
+ local oldarch oldversion
+
+ if [ ! -z "$1" ]; then
+ root="$1"
+ else
+ root="/"
+ fi
+
+ # save current arch and version
+ oldarch="$ARCH"
+ oldversion="$VERSION"
+
+ ARCH="`default_arch $root`"
+ VERSION="`default_version $root`"
+
+ # in case there's something wrong with the jail, abort
+ if [ -z "$VERSION" ] || [ -z "$ARCH" ]; then
+ return
+ fi
+
+ # we need to do that for each arch/version pairs, but just once for each pair
+ if ! echo "$DISTRO_UPDATED" | grep -q " $ARCH:$VERSION "; then
+ simplaret_update
+ DISTRO_UPDATED="$DISTRO_UPDATED $ARCH:$VERSION " # the ending space is important
+ echo ""
+ fi
+
+ echo Fetching patches for arch $ARCH and version $VERSION for jail $root
+
+ # list all available patches from PATCHES and ROOT repositories
+ for sugested in `simplaret_search --formatted | grep patches | grep -v ",repos," | grep -v ",noarch,"`; do
+ simplaret_search_and_process_patch
+ done
+
+ # grab patches from every other places
+ if [ "$CONSIDER_ALL_PACKAGES_AS_PATCHES" == "1" ]; then
+
+ for sugested in `simplaret_search --formatted | grep patches | grep ",repos," | grep ",noarch,"`; do
+ simplaret_search_and_process_patch
+ done
+
+ for sugested in `simplaret_search --formatted | grep -v patches`; do
+ simplaret_search_and_process_patch
+ done
+
+ fi
+
+ # restore arch and version
+ ARCH="$oldarch"
+ VERSION="$oldversion"
+
+}
+
+function simplaret_get_patches {
+
+ local jailpath
+
+ if [ "$1" == "--upgrade" ]; then
+ IS_UPGRADE="1"
+ fi
+
+ if [ ! -z "$ROOT" ]; then
+ simplaret_get_jail_patches $ROOT
+ return $?
+ fi
+
+ # first get patches from the root system
+ simplaret_get_jail_patches
+
+ # then get the needed patches for each installed jail
+ if [ -s "$JAIL_LIST" ]; then
+ for jailpath in `cat $JAIL_LIST`; do
+ if [ -d "$jailpath/var/log/packages" ]; then
+ ROOT="$jailpath"
+ simplaret_get_jail_patches $jailpath
+ fi
+ done
+ fi
+
+ ROOT=""
+
+}
+
+function simplaret_checksum {
+
+ # simplaret_checksum <md5file> <file-name> [--silent]
+
+ if [ ! -f "$1" ] || [ ! -f "$2" ]; then
+ if [ "$3" != "--silent" ]; then
+ echo Checksum error: file not found
+ fi
+ return 1
+ fi
+
+ pack="`basename $2`"
+ checksum="`grep -e "$pack\$" $1 | awk '{ print $1 }'`"
+
+ if [ -z "$checksum" ]; then
+ echo file $2 not in checksum $1
+ return 1
+ elif [ "$checksum" != "`md5sum $2 | awk '{ print $1 }'`" ]; then
+ if [ "$3" != "--silent" ]; then
+ echo Checksum mismatch for file `basename $file`
+ fi
+ return 1
+ else
+ if [ "$3" != "--silent" ]; then
+ echo Checksum ok for file `basename $file`
+ fi
+ return 0
+ fi
+
+}
+
+function simplaret_install {
+
+ # download and install a package
+ # usage: simplaret_install <package-name> [--skip-checks]
+
+ local package root jail_arch jail_version slack_required dep dependency tmp
+
+ root="/$ROOT"
+ mkdir -p $root/var/log/setup/tmp
+
+ if [ "`echo $1 | sed -e 's/\(..\).*/\1/g'`" == "--" ]; then
+ echo $BASENAME: install: syntax error: expected package name
+ return 1
+ fi
+
+ # now we check if ARCH and VERSION from the
+ # repository are the same of the jail
+ if [ "$2" != "--skip-checks" ]; then
+ jail_arch="`default_arch $root`"
+ jail_version="`default_version $root`"
+ if [ "$ARCH" != "$jail_arch" ]; then
+ echo "$BASENAME: requested repository arch ($ARCH) doesn't match jail arch ($jail_arch)"
+ echo "$BASENAME: please use \"$BASENAME --get $1 --skip-checks\" to ignore this warning and install anyway"
+ return
+ elif [ "$VERSION" != "$jail_version" ]; then
+ echo "$BASENAME: requested repository version ($VERSION) doesn't match jail version ($jail_version)"
+ echo "$BASENAME: please use \"$BASENAME --get $1 --skip-checks\" to ignore this warning and install anyway"
+ return 1
+ fi
+ fi
+
+ # package="`simplaret_get $1 --silent`"
+ simplaret_get $1 --silent
+ package="$LAST_DOWNLOADED_PACKAGE"
+
+ if [ "$package" != "0" ] && [ ! -z "$package" ]; then
+ slack_required="`dirname $package`/$1.slack-required"
+ if [ -f "$package" ]; then
+
+ if [ -f "$slack_required" ] && [ "$DEPENDENCY_CHECKING" == "1" ]; then
+ # this routine checks for dependencies in package's slack-required
+ # procedure adapted from createpkg script
+ ( cat $slack_required | while read dep; do
+ if [ ! -z "$dep" ]; then
+ dependency="`echo $dep | awk '{ print $1 }'`"
+ simplaret_solve_dep $1 $dependency $root
+ fi
+ true
+ done )
+ fi
+
+ ROOT=$root upgradepkg --install-new $package
+ LAST_DOWNLOADED_PACKAGE="0"
+
+ else
+ echo "Error: could not install package $1: file not found"
+ LAST_DOWNLOADED_PACKAGE="0"
+ return 1
+ fi
+ else
+ echo "Error: could not install package $1"
+ LAST_DOWNLOADED_PACKAGE="0"
+ return 1
+ fi
+
+}
+
+function simplaret_distro_folder {
+
+ # first we point to the correct arch
+ simplaret_set_arch
+
+ # then we set the distro folder
+ if [ "$ARCH" == "i386" ]; then
+ DISTRO="slackware"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ elif [ "$ARCH" == "x86_64" ]; then
+ # EXTRA_FOLDER="tree"
+ DISTRO="slamd64"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ elif [ "$ARCH" == "s390" ]; then
+ DISTRO="slack390"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ elif [ "$ARCH" == "x86_uclibc" ]; then
+ DISTRO="ucslack"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ elif [ "$ARCH" == "arm" ]; then
+ DISTRO="armedslack"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ elif [ "$ARCH" == "powerpc" ]; then
+ DISTRO="slackintosh"
+ DISTRO_FOLDER="$VERSION"
+ elif [ "$ARCH" == "sparc" ]; then
+ DISTRO="splack"
+ DISTRO_FOLDER="tree-$VERSION"
+ else
+ DISTRO="$ARCH"
+ DISTRO_FOLDER="$DISTRO-$VERSION"
+ fi
+
+}
+
+function simplaret_set_arch {
+
+ # set correct value for ARCH
+
+ local repos_type new_arch
+
+ # any arch defined in ARCH_i386 that hasn't an entry
+ # on $REPOS_CONF will be mapped to i386
+
+ ARCH_i386=" nocona prescott pentium4m pentium4 pentium-m pentium3m pentium3 "
+ ARCH_i386="$ARCH_i386 pentium2 i686 pentium-pro i586 pentium-mmx pentium i486 "
+ ARCH_i386="$ARCH_i386 athlon-mp athlon-xp athlon4 athlon-tbird athlon k6 k6-2 "
+ ARCH_i386="$ARCH_i386 k6-3 winchip-c6 winchip2 c3 c3-2 i386 "
+
+ # any arch defined in ARCH_x86_64 that hasn't an entry
+ # on $REPOS_CONF will be mapped to x86_64
+
+ ARCH_x86_64=" k8 opteron athlon64 athlon-fx x86_64 "
+
+ for repos_type in patches root repos noarch; do
+ if [ -z "`simplaret_repository $repos_type`" ]; then
+ # there's no repository definition for that arch
+ if echo "$ARCH_i386" | grep -q " $ARCH "; then
+ new_arch="i386"
+ elif echo "$ARCH_x86_64" | grep -q " $ARCH "; then
+ new_arch="x86_64"
+ else
+ echo "$BASENAME: error: no repository definition for arch $ARCH"
+ echo "$BASENAME: please check your $CONF and $REPOS_CONF config files"
+ exit 1
+ fi
+ else
+ return
+ fi
+ done
+
+ echo "$BASENAME: changing arch from $ARCH to $new_arch"
+
+ ARCH="$new_arch"
+
+}
+
+function simplaret_check_url {
+
+ # check if a given url exist, use just with small files
+ # usage: simplaret_check_url <url>
+
+ if [ -z "$1" ]; then
+ return 1
+ fi
+
+ if [ ! -z "$CONNECT_TIMEOUT" ] || [ "$CONNECT_TIMEOUT" != "0" ]; then
+ curl_timeout="--connect-timeout $CONNECT_TIMEOUT"
+ fi
+
+ if [ "`curl $curl_timeout -I $1 2> /dev/null | head -n 1 | awk '{ print $2 }'`" == "200" ]; then
+ # server gave a 200 response, so the url exist
+ return 0
+ else
+ # the url is missing
+ return 1
+ fi
+
+}
+
+function simplaret_solve_dep {
+
+ # solve dependency for a package
+ # this function was adapted from createpkg script
+ # usage: simplaret_solve_dep <package-name> <package-depencency-name> [root-folder]
+
+ local installed check exit_code
+
+ local package="$1"
+ local pack="$2"
+ local root="/$3"
+
+ pack="`echo $pack| sed -e 's/\+/\\\+/'`"
+ installed=`eval "ls $root/var/log/packages/ | egrep -E '^$pack-[^-]+-[^-]+-[^-]+$'"`
+ check=$?
+
+ if [ -z "$installed" ]; then
+ if [ $check -ne 0 ]; then
+ echo "$BASENAME: processing $1 dependency $pack"
+ # simplaret_install $pack
+ SIMPLARET_CHILD=$SIMPLARET_CHILD ROOT=$root ARCH=$ARCH VERSION=$VERSION \
+ simplaret --install $pack
+ fi
+ fi
+
+}
+
+if [ -z "$1" ]; then
+ simplaret_usage
+ exit 1
+else
+ eval_config $BASENAME
+fi
+
+# This is used to show how many children process we have
+if [ -z "$SIMPLARET_CHILD" ]; then
+ SIMPLARET_CHILD="1"
+else
+ let SIMPLARET_CHILD++
+fi
+
+BASENAME="`basename $0`[$SIMPLARET_CHILD]"
+
+case $1 in
+ "--update" | "update") simplaret_update ;;
+ "--search" | "search") shift ; simplaret_search $* ;;
+ "--get" | "get") shift ; simplaret_get $* ;;
+ "--get-patches" | "get-patches") simplaret_get_patches ;;
+ "--purge" | "purge") shift ; simplaret_purge $* ;;
+ "--install" | "install") shift ; simplaret_install $* ;;
+ "--upgrade" | "upgrade") simplaret_get_patches --upgrade ;;
+ "--remove" | "remove") ROOT=/$ROOT removepkg $2 ;;
+ *) simplaret_usage ;;
+esac
+
diff --git a/branches/0.6/src/templatepkg b/branches/0.6/src/templatepkg
new file mode 100755
index 0000000..048ac22
--- /dev/null
+++ b/branches/0.6/src/templatepkg
@@ -0,0 +1,959 @@
+#!/bin/bash
+#
+# templatepkg v0.3: template maintenance script from simplepkg suite
+#
+# feedback: rhatto at riseup.net | gpl
+#
+# Templatepkg is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# Templatepkg is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+COMMON="/usr/libexec/simplepkg/common.sh"
+BASENAME="`basename $0`"
+
+if [ -f "$COMMON" ]; then
+ source $COMMON
+ eval_config $BASENAME
+else
+ echo "error: file $COMMON found, check your $BASENAME installation"
+ exit 1
+fi
+
+function usage_summary {
+
+ echo "options are:"
+ echo ""
+ echo " -c | --create: create a template from a jail or existing template"
+ echo " -u | --update: update a template from a jail"
+ echo " -a | --add: add files into a template"
+ echo " -d | --delete: delete files or folders from a template"
+ echo " -s | --sync: sync $TEMPLATE_FOLDER working copy"
+ echo " -e | --export: export $TEMPLATE_FOLDER to a svn repository"
+ echo " -i | --import: grab $TEMPLATE_FOLDER from a svn repository"
+ echo " -r | --remove: remove a template"
+ echo " -l | --list: list templates"
+ echo " -b | --batch-edit: add or edit post-installation scripts"
+ echo " -p | --pack: create a package from a template"
+ echo " -t | --template-edit: edit template package list"
+ echo " -h | --help: display this summary"
+ echo ""
+
+}
+
+function display_help {
+
+ # display help
+ # usage: help [help-topic]
+
+ local option
+
+ if [ -z "$1" ]; then
+ echo "type $BASENAME --help <option> for aditional help"
+ usage_summary
+ exit
+ fi
+
+ option="$1"
+
+ if ! echo $option | grep -q -e "^-"; then
+ option="-`echo $option | sed -e 's/--/-/' -e 's/\(.\).*/\1/'`"
+ else
+ option="`echo $option | sed -e 's/--/-/' -e 's/\(..\).*/\1/'`"
+ fi
+
+ usage_summary | grep -e "^ $option"
+
+ echo ""
+ case $option in
+
+ "-c" | "--create")
+ echo " $BASENAME $option <template> [jail-root|template-name]"
+ ;;
+ "-u" | "--update")
+ echo " $BASENAME $option <template> [jail-root]"
+ ;;
+ "-a" | "--add")
+ echo " $BASENAME $option <template> <file-name> [jail-root]"
+ echo ""
+ echo " file-name: the file or directory to be added"
+ echo " jail-root: the jail under file-name is located"
+ ;;
+ "-d" | "--delete")
+ echo " $BASENAME $option <template> <file-name>"
+ ;;
+ "-s" | "--sync")
+ echo " $BASENAME $option"
+ ;;
+ "-e" | "--export")
+ echo " $BASENAME $option <svn-repository>"
+ ;;
+ "-i" | "--import")
+ echo " $BASENAME $option <svn-repository>"
+ ;;
+ "-r" | "--remove")
+ echo " $BASENAME $option <template-name>"
+ ;;
+ "-l" | "--list")
+ echo " $BASENAME $option [template-name]"
+ ;;
+ "-b" | "--batch-edit")
+ echo " $BASENAME $option <template-name> <script-name>"
+ ;;
+ "-p" | "--pack")
+ echo " $BASENAME $option <template-name> [version] [build] [arch]"
+ ;;
+ "-t" | "--template-edit")
+ echo " $BASENAME $option <template-name>"
+ ;;
+ "-h" | "--help")
+ echo " -h | --help: display this help."
+ ;;
+ *)
+ echo $BASENAME: invalid help option $option
+ esac
+
+ case $option in
+ "-c" | "-u" | "-a")
+ echo ""
+ echo " if ommited, jail-root defaults to /"
+ ;;
+ esac
+
+ echo ""
+
+}
+
+function usage {
+
+ echo "usage: $BASENAME <option> [<template> [arguments]]"
+ usage_summary
+ exit
+
+}
+
+function check_svn_repo {
+
+ # check a svn repository URL
+ # usage: set_svn_repo <repository>
+
+ if [ ! -z "$1" ]; then
+ if echo $1 | grep -q -v -e "^svn://"; then
+ if echo $1 | grep -q -v -e "^svn+ssh://"; then
+ if echo $1 | grep -q -v -e "^file://"; then
+ echo $BASENAME: invalid repository URL $1
+ return 1
+ fi
+ fi
+ fi
+ else
+ echo $BASENAME: no repository defined
+ return 1
+ fi
+
+}
+
+function import_export_templates {
+
+ # import from or export to $TEMPLATE_FOLDER in a svn repository
+ # usage: template_export <import|export> <repository>
+
+ local templates templates_folder basedir repository mode preposition
+
+ if [ "$?" != 0 ]; then
+ usage
+ exit 1
+ elif ! use_svn; then
+ echo $BASENAME: simplepkg not configured to use svn
+ exit 1
+ fi
+
+ templates_folder="$TEMPLATE_FOLDER"
+ templates="`basename $TEMPLATE_FOLDER`"
+ basedir="`dirname $templates_folder`"
+ mode="$1"
+ repository="$2"
+ preposition="from"
+
+ check_svn_repo $repository
+
+ if [ ! -z "$2" ]; then
+
+ if [ ! -d "$templates_folder/.svn" ]; then
+
+ cd $basedir
+
+ if [ "$mode" == "export" ]; then
+ preposition="to"
+ echo Exporting templates to $repository...
+ svn import $templates/ $repository/ -m "initial import"
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: export failed
+ exit 1
+ fi
+ fi
+
+ if [ -d "templates" ]; then
+ mv $templates $templates.old
+ fi
+
+ echo Checking out templates from $repository...
+ svn checkout $repository $templates
+
+ if [ "$?" == "0" ]; then
+ rm -rf $templates.old
+ else
+ rm -rf $templates
+ mv $templates.old $templates
+ echo $BASENAME: $mode failed
+ exit 1
+ fi
+
+ else
+ echo "$BASENAME: $templates_folder seens to be already $mode""ed $preposition $repository"
+ exit 1
+ fi
+
+ fi
+
+}
+
+function template_create {
+
+ # create a new template
+
+ local template_base info_commit orig_template list
+
+ if [ ! -d "`dirname $TEMPLATE_BASE`" ]; then
+
+ echo Creating template `basename $TEMPLATE_BASE`...
+
+ if use_svn && [ -d "`dirname $TEMPLATE_BASE`/.svn" ]; then
+ cd `dirname $TEMPLATE_BASE`
+ svn mkdir `dirname $TEMPLATE_BASE`
+ else
+ mkdir -p `dirname $TEMPLATE_BASE`
+ fi
+
+ else
+ echo $BASENAME: template `basename $TEMPLATE_BASE` already exists
+ exit 1
+ fi
+
+ touch $TEMPLATE_BASE.perms
+ touch $TEMPLATE_BASE.template
+
+ if use_svn && [ -d "`dirname $TEMPLATE_BASE`/.svn" ]; then
+
+ cd `dirname $TEMPLATE_BASE`
+
+ if ! svn_check $TEMPLATE_BASE.d; then
+ svn mkdir $TEMPLATE_BASE.d
+ info_commit="yes"
+ else
+ mkdir -p $TEMPLATE_BASE.d
+ fi
+
+ if ! svn_check $TEMPLATE_BASE.s; then
+ svn mkdir $TEMPLATE_BASE.s
+ info_commit="yes"
+ else
+ mkdir -p $TEMPLATE_BASE.s
+ fi
+
+ if ! svn_check $TEMPLATE_BASE.template; then
+ svn add $TEMPLATE_BASE.template
+ info_commit="yes"
+ fi
+
+ if ! svn_check $TEMPLATE_BASE.perms; then
+ svn add $TEMPLATE_BASE.perms
+ info_commit="yes"
+ fi
+
+ elif use_svn && [ -d "$TEMPLATE_FOLDER/.svn" ]; then
+
+ mkdir $TEMPLATE_BASE.{d,s}
+ cd $TEMPLATE_FOLDER
+ svn add `basename $TEMPLATE_BASE`
+ info_commit="yes"
+
+ else
+ mkdir $TEMPLATE_BASE.{d,s}
+ fi
+
+ if [ -d "/$ROOT" ]; then
+ template_update
+ elif [ ! -z "$ROOT" ]; then
+
+ # copy from an existing template
+
+ if [ -d "$TEMPLATE_FOLDER/$ROOT" ]; then
+ orig_template="$TEMPLATE_FOLDER/$ROOT"
+ elif [ -d "$BASE_CONF/templates/$ROOT" ]; then
+ orig_template="$BASE_CONF/templates/$ROOT"
+ elif [ -d "$BASE_CONF/defaults/templates/$ROOT" ]; then
+ orig_template="$BASE_CONF/defaults/templates/$ROOT"
+ else
+ return 1
+ fi
+
+ if [ -f "$orig_template/$ROOT.perms" ]; then
+ cat $orig_template/$ROOT.perms > $TEMPLATE_BASE.perms
+ fi
+
+ if [ -f "$orig_template/$ROOT.template" ]; then
+ cat $orig_template/$ROOT.template > $TEMPLATE_BASE.template
+ fi
+
+ if use_svn && [ -d "$orig_template/.svn" ]; then
+
+ cd `dirname $TEMPLATE_BASE`
+
+ list="`ls $orig_template/$ROOT.d/ 2> /dev/null`"
+ if [ ! -z "$list" ]; then
+ echo Copying files to the new template...
+ rsync -av --exclude=.svn $orig_template/$ROOT.d/ $TEMPLATE_BASE.d/
+ svn add `basename $TEMPLATE_BASE`.d/*
+ info_commit="yes"
+ fi
+
+ list="`ls $orig_template/$ROOT.s/ 2> /dev/null`"
+ if [ ! -z "$list" ]; then
+ echo Copying scripts to the new template...
+ rsync -av --exclude=.svn $orig_template/$ROOT.s/ $TEMPLATE_BASE.s/
+ svn add `basename $TEMPLATE_BASE`.s/*
+ info_commit="yes"
+ fi
+
+ else
+
+ list="`ls $orig_template/$ROOT.d/ 2> /dev/null`"
+ if [ ! -z "$list" ]; then
+ echo Copying files to the new template...
+ rsync -av $orig_template/$ROOT.d/ $TEMPLATE_BASE.d/
+ fi
+
+ list="`ls $orig_template/$ROOT.s/ 2> /dev/null`"
+ if [ ! -z "$list" ]; then
+ echo Copying scripts to the new template...
+ rsync -av $orig_template/$ROOT.s/ $TEMPLATE_BASE.s/
+ fi
+
+ fi
+
+ else
+ echo $BASENAME: warning: no root directory defined
+ fi
+
+ if [ "$info_commit" == "yes" ] && [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to add files under $file into the svn repository"
+ fi
+
+}
+
+function template_update {
+
+ # update the template package list
+
+ check_template_exist
+
+ if [ ! -d "$ROOT/var/log/packages" ]; then
+ echo $ROOT/var/log/packages: directory not found
+ exit 1
+ fi
+
+ echo Checking package list for template `basename $TEMPLATE_BASE`...
+
+ for package in `ls -1 $ROOT/var/log/packages/`; do
+ pack=`package_name $package`
+ if [ -f $TEMPLATE ]; then
+ if ! `grep -v -e "^#" $TEMPLATE | cut -d : -f 1 | awk '{ print $1 }' | grep -q -e "^$pack\$"`; then
+ echo $pack >> $TEMPLATE
+ echo Added $pack # on $TEMPLATE
+ fi
+ else
+ echo $pack >> $TEMPLATE
+ echo Added $pack # on $TEMPLATE
+ fi
+ done
+
+ # check if each package from the template is installed
+ grep -v -e "^#" $TEMPLATE | cut -d : -f 1 | awk '{ print $1 }' | while read pack; do
+
+ if [ ! -z "$pack" ]; then
+ unset found
+ for candidate in `ls $ROOT/var/log/packages/$pack* 2> /dev/null`; do
+ candidate="`package_name $candidate`"
+ if [ "$pack" == "$candidate" ]; then
+ found="1"
+ break
+ fi
+ done
+ if [ "$found" != "1" ]; then
+ # remove a non-installed package from the template
+ sed "/^$pack$/d" $TEMPLATE | sed "/^$pack $/d" | sed "/^$pack:*/d" | sed "/^$pack */d" > $TEMPLATE.tmp
+ cat $TEMPLATE.tmp > $TEMPLATE
+ rm -f $TEMPLATE.tmp
+ echo Removed $pack # from $TEMPLATE
+ fi
+ fi
+
+ done
+
+ if ! svn_check $TEMPLATE_BASE.template && [ -d "`dirname $TEMPLATE_BASE`/.svn" ]; then
+ cd `dirname $TEMPLATE_BASE`
+ svn add `basedir $TEMPLATE_BASE`.template
+ fi
+
+}
+
+function template_add {
+
+ # add a file in a template
+ # usage: template_add <jail-root> <file>
+
+ local info_commit cwd
+
+ if [ -z "$1" ] || [ -z "$2" ]; then
+ return 1
+ fi
+
+ check_template_exist
+
+ jail="/$1"
+ file="$2"
+
+ if [ -a "$TEMPLATE_BASE.d/$file" ]; then
+ if [ -d "$TEMPLATE_BASE.d/$file" ]; then
+
+ echo $BASENAME: folder `slash $file` already on $TEMPLATE_BASE.d, checking for contents
+
+ cd $jail
+ for candidate in `find $file`; do
+ if [ ! -a "$TEMPLATE_BASE.d/$candidate" ]; then
+ mkdir -p $TEMPLATE_BASE.d/`dirname $candidate`
+ cp -a $jail/$candidate $TEMPLATE_BASE.d/$candidate
+ if use_svn && [ -d "$TEMPLATE_BASE.d/.svn" ]; then
+ cwd="`pwd`"
+ cd $TEMPLATE_BASE.d
+ svn add ./$candidate
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: error adding `slash $candidate` into the revision system
+ fi
+ cd $cwd
+ info_commit="yes"
+ else
+ echo Added `slash $jail/$candidate` on `slash $TEMPLATE_BASE.d/$candidate`
+ fi
+ fi
+ done
+
+ if [ "$info_commit" == "yes" ] && [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to add files under `slash $file` into the svn repository"
+ fi
+
+ else
+ echo $BASENAME: file `slash $file` already on $TEMPLATE_BASE.d
+ exit 1
+ fi
+ else
+
+ if [ -a "$jail/$file" ]; then
+
+ destination="`echo $TEMPLATE_BASE.d/$file | sed -e 's/\/$//'`"
+
+ if use_svn && [ -d "$TEMPLATE_BASE.d/.svn" ]; then
+
+ if [ ! -d "$TEMPLATE_BASE.d/`dirname $file`/.svn" ]; then
+ mkdir -p $TEMPLATE_BASE.d/`dirname $file`/
+ svn add $TEMPLATE_BASE.d/`dirname $file`/
+ fi
+
+ cp -a $jail/$file $destination
+
+ cwd="`pwd`"
+ cd $TEMPLATE_BASE.d
+ svn add ./$file
+
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: error adding `slash $candidate` into the revision system
+ else
+ if [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to add `slash $file` into the svn repository"
+ fi
+ fi
+
+ cd $cwd
+
+ else
+
+ mkdir -p $TEMPLATE_BASE.d/`dirname $file`/
+ cp -a $jail/$file $destination
+ echo Added `slash $jail/$file` on `slash $destination`
+
+ fi
+
+ else
+ echo $BASENAME: `slash $jail/$file`: file not found
+ exit 1
+ fi
+ fi
+
+}
+
+function check_template_exist {
+
+ # check if a template exists
+ # and create missing components
+
+ local components
+
+ components="template perms d s"
+
+ if [ ! -d "`dirname $TEMPLATE_BASE`" ]; then
+ echo $BASENAME: template not found
+ exit 1
+ fi
+
+ for component in $components; do
+
+ if [ ! -e "$TEMPLATE_BASE.$component" ]; then
+
+ echo "$BASENAME: template component not found: $TEMPLATE_BASE.$component; creating..."
+
+ cd `dirname $TEMPLATE_BASE`
+
+ if [ "$component" == "perms" ] || [ "$component" == "template" ]; then
+ touch $TEMPLATE_BASE.$component
+ else
+ mkdir $TEMPLATE_BASE.$component
+ fi
+
+ if use_svn && [ -d "`dirname $TEMPLATE_BASE`/.svn" ]; then
+ svn add $TEMPLATE_BASE.$component
+ info_commit="yes"
+ fi
+
+ elif use_svn && [ -d "`dirname $TEMPLATE_BASE`/.svn" ] && \
+ ! svn_check $TEMPLATE_BASE.$component; then
+
+ cd `dirname $TEMPLATE_BASE`
+ svn add $TEMPLATE_BASE.$component
+ info_commit="yes"
+
+ fi
+
+ done
+
+ if [ "$info_commit" == "yes" ] && [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to add new files in the svn repository"
+ fi
+
+}
+
+function template_delete {
+
+ # delete a file from a template
+ # usage: template_delete <file>
+
+ if [ -e "$TEMPLATE_BASE.d/$1" ]; then
+ if use_svn && [ -d "$TEMPLATE_BASE.d/.svn" ]; then
+ cd $TEMPLATE_BASE.d
+ svn del --force ./$1 || rm -rf ./$1
+ if [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to del $1 in the svn repository"
+ fi
+ else
+ rm -rf $TEMPLATE_BASE.d/$1
+ echo Removed $1 from $TEMPLATE_BASE.d
+ fi
+ elif [ -e "$TEMPLATE_BASE.s/$1" ]; then
+ if use_svn && [ -d "$TEMPLATE_BASE.s/.svn" ]; then
+ cd $TEMPLATE_BASE.s
+ svn del --force ./$1 || rm -rf ./$1
+ if [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to del $1 in the svn repository"
+ fi
+ else
+ rm -rf $TEMPLATE_BASE.s/$1
+ echo Removed $1 from $TEMPLATE_BASE.s
+ fi
+ else
+ if [ ! -d "$TEMPLATE_BASE.d" ]; then
+ echo $BASENAME: template folder $TEMPLATE_BASE.d not found
+ else
+ echo $BASENAME: file $1 not found at $TEMPLATE_BASE.d
+ fi
+ exit 1
+ fi
+
+}
+
+function template_remove {
+
+ # remove a template
+ # usage: template_remove
+
+ local basedir template
+
+ basedir="`dirname $TEMPLATE_BASE`"
+ template="`basename $basedir`"
+
+ if [ ! -d "$basedir" ]; then
+ echo $BASENAME: template $template does not exist
+ exit 1
+ fi
+
+ if use_svn && [ -d "$basedir/.svn" ]; then
+ cd $TEMPLATE_FOLDER
+ svn update
+ svn del --force $template
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: error deleting template $template
+ else
+ svn commit -m "deleted $template"
+ if [ "$?" != "0" ]; then
+ echo $BASENAME: error commiting to svn repository
+ fi
+ fi
+ else
+ rm -rf $basedir
+ fi
+
+}
+
+function template_list {
+
+ # list templates
+ # usage: template_list [template_name]
+
+ local list basedir template
+
+ if [ "$TEMPLATE_STORAGE_STYLE" != "own-folder" ]; then
+ echo "$BASENAME: option only available if TEMPLATE_STORAGE_STYLE configured as 'own-folder'"
+ return 1
+ fi
+
+ if echo $1 | grep -q "/" || [ ! -z "$1" ]; then
+
+ template="`echo $1 | cut -d "/" -f 1`"
+
+ if [ -e "$BASE_CONF/defaults/templates/$1" ]; then
+ list="`ls $BASE_CONF/defaults/templates/$1 2> /dev/null`"
+ if [ "$?" == "0" ]; then
+ list="`echo $list | xargs`"
+ echo "In the default template $template: $list"
+ fi
+ fi
+
+ if [ -e "$TEMPLATE_FOLDER/$1" ]; then
+ list="`ls $TEMPLATE_FOLDER/$1 2> /dev/null`"
+ if [ "$?" == "0" ]; then
+ list="`echo $list | xargs`"
+ echo "In the custom template $template: $list"
+ fi
+ fi
+
+ else
+
+ list="`ls $BASE_CONF/defaults/templates/$1 2> /dev/null`"
+ if [ "$?" == "0" ]; then
+ list="`echo $list | xargs`"
+ echo "Default templates: $list"
+ fi
+
+ list="`ls $TEMPLATE_FOLDER/$1 2> /dev/null`"
+ if [ "$?" == "0" ]; then
+ list="`echo $list | xargs`"
+ echo "Custom templates: $list"
+ fi
+
+ fi
+
+}
+
+function template_post_install_edit {
+
+ # add or edit a post-installation script
+ # usage: template_post_install_edit <script-name>
+
+ if [ -z "$1" ]; then
+ echo $BASENAME: no template specified
+ exit 1
+ elif echo $1 | grep -q "/"; then
+ echo $BASENAME: error: invalid script name $1
+ fi
+
+ if [ -f "$TEMPLATE_BASE.s/$1" ]; then
+ sha1sum="`sha1sum $TEMPLATE_BASE.s/$1`"
+ if [ ! -z "$EDITOR" ]; then
+ $EDITOR $TEMPLATE_BASE.s/$1
+ else
+ vi $TEMPLATE_BASE.s/$1
+ fi
+ if [ "$sha1sum" != "`sha1sum $TEMPLATE_BASE.s/$1`" ] && \
+ [ -d "`dirname $TEMPLATE_BASE`/.svn" ] && [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to send changes to the repository"
+ fi
+ else
+
+ if [ -e "$TEMPLATE_BASE.s/$1" ]; then
+
+ echo $BASENAME: file $TEMPLATE_BASE.s/$1 not a regular file
+
+ elif [ -d "$TEMPLATE_BASE.s" ]; then
+
+ touch $TEMPLATE_BASE.s/$1
+ chmod +x $TEMPLATE_BASE.s/$1
+
+ if [ -d "$TEMPLATE_BASE.s/.svn" ]; then
+ cd $TEMPLATE_BASE.s
+ svn add $1
+ if [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to send the script to the repository"
+ fi
+ fi
+
+ echo "$BASENAME: script created; run templatepkg -p `basename $TEMPLATE_BASE` $1 again to edit it"
+
+ else
+ echo $BASENAME: folder not found: $TEMPLATE_BASE.s
+ fi
+
+ fi
+
+}
+
+function template_edit {
+
+ # edit a template package list
+ # usage: template_edit
+
+ if [ -f "$TEMPLATE_BASE.template" ]; then
+ sha1sum="`sha1sum $TEMPLATE_BASE.template`"
+ if [ ! -z "$EDITOR" ]; then
+ $EDITOR $TEMPLATE_BASE.template
+ else
+ vi $TEMPLATE_BASE.template
+ fi
+ if [ "$sha1sum" != "`sha1sum $TEMPLATE_BASE.template`" ] && \
+ [ -d "`dirname $TEMPLATE_BASE`/.svn" ] && [ -z "$SILENT" ]; then
+ echo "$BASENAME: please run 'jail-commit --all' to send changes to the repository"
+ fi
+ elif [ -e "$TEMPLATE_BASE.template" ]; then
+ echo $BASENAME: file $TEMPLATE_BASE.template not a regular file
+ else
+ echo $BASENAME: file not found: $TEMPLATE_BASE.template
+ fi
+
+}
+
+function require {
+
+ # requires a string
+ # usage: require [string]
+
+ if [ -z "$1" ]; then
+ usage
+ fi
+
+}
+
+function setroot {
+
+ # set ROOT variable
+ # usage: setroot <value1> <value2>
+
+ if [ -z "$1" ]; then
+ ROOT="/"
+ else
+ ROOT="$1"
+ fi
+
+}
+
+function create_doinst {
+
+ # create a doinst.sh from a template.perms file
+ # usage: create_doinst <doinst-path>
+
+ rm -f $1/doinst.sh
+
+ if [ -s "$TEMPLATE_BASE.perms" ]; then
+ echo Creating doinst.sh...
+ cat $TEMPLATE_BASE.perms | while read entry; do
+ file="`echo $entry | cut -d ";" -f 1`"
+ if [ -e "$TEMPLATE_BASE.d/$file" ]; then
+ owner="`echo $entry | cut -d ";" -f 2`"
+ group="`echo $entry | cut -d ";" -f 3`"
+ perms="`echo $entry | cut -d ";" -f 4`"
+ echo "( chmod $perms /$file )" >> $1/doinst.sh
+ echo "( chown $owner:$group /$file )" >> $1/doinst.sh
+ fi
+ done
+ fi
+
+}
+
+function package_template {
+
+ # make a package from a template
+ # usage: package_template [version] [build] [arch]
+
+ local template version build arch
+
+ template="`basename $TEMPLATE_BASE`"
+
+ if [ ! -d "$TEMPLATE_BASE.d" ]; then
+ $BASENAME: folder not found: $TEMPLATE.base.d
+ return 1
+ fi
+
+ echo Buiding package for template $template...
+
+ if [ -z "$1" ]; then
+ version="1"
+ else
+ version="$1"
+ fi
+
+ if [ -z "$2" ]; then
+ build="1"
+ else
+ build="$2"
+ fi
+
+ if [ -z "$3" ]; then
+ arch="noarch"
+ else
+ arch="$3"
+ fi
+
+ TMP=${TMP:=/tmp}
+ rm -rf $TMP/templatepkg
+ mkdir -p $TMP/templatepkg
+
+ rsync -av --exclude=.svn $TEMPLATE_BASE.d/ $TMP/templatepkg/
+ mkdir $TMP/templatepkg/install
+ create_doinst $TMP/templatepkg/install
+
+ echo "template-$template: template-$template" > $TMP/templatepkg/install/slack-desc
+ echo "template-$template: " >> $TMP/templatepkg/install/slack-desc
+ echo "template-$template: simplepkg template $template" >> $TMP/templatepkg/install/slack-desc
+
+ for ((n=1;n<=8;n++)); do
+ echo "template-$template: " >> $TMP/templatepkg/install/slack-desc
+ done
+
+ cd $TMP/templatepkg
+
+ makepkg -c n -l y $TMP/template-$template-$version-noarch-$build.tgz
+
+ cd $TMP
+ rm -rf templatepkg
+
+}
+
+# -----------------------------------------------------
+# main
+# -----------------------------------------------------
+
+if [ ! -z "$2" ]; then
+ search_template $2 --new
+fi
+
+TEMPLATE="$TEMPLATE_BASE.template"
+
+if [ "$1" == "-u" ] || [ "$1" == "--update" ]; then
+
+ require $2
+ setroot $3
+ template_update
+
+elif [ "$1" == "-c" ] || [ "$1" == "--create" ]; then
+
+ require $2
+ setroot $3
+ template_create
+
+elif [ "$1" == "-a" ] || [ "$1" == "--add" ]; then
+
+ require $2
+
+ if [ -z "$3" ]; then
+ usage
+ else
+ setroot $4
+ fi
+
+ template_add $ROOT $3
+
+elif [ "$1" == "-d" ] || [ "$1" == "--delete" ]; then
+
+ require $2
+
+ if [ -z "$3" ]; then
+ usage
+ else
+ template_delete $3
+ fi
+
+elif [ "$1" == "-s" ] || [ "$1" == "--sync" ]; then
+
+ if use_svn && [ -d "$TEMPLATE_FOLDER/.svn" ]; then
+ ( cd $TEMPLATE_FOLDER && svn update )
+ true
+ fi
+
+elif [ "$1" == "-e" ] || [ "$1" == "--export" ]; then
+
+ require $2
+ import_export_templates export $2
+
+elif [ "$1" == "-i" ] || [ "$1" == "--import" ]; then
+
+ require $2
+ import_export_templates import $2
+
+elif [ "$1" == "-r" ] || [ "$1" == "--remove" ]; then
+
+ require $2
+ template_remove
+
+elif [ "$1" == "-l" ] || [ "$1" == "--list" ]; then
+
+ template_list $2
+
+elif [ "$1" == "-b" ] || [ "$1" == "--batch-edit" ]; then
+
+ require $3
+ template_post_install_edit $3
+
+elif [ "$1" == "-t" ] || [ "$1" == "--template-edit" ]; then
+
+ require $2
+ template_edit
+
+elif [ "$1" == "-p" ] || [ "$1" == "--pack" ]; then
+
+ require $2
+ shift ; shift
+ package_template $*
+
+elif [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
+
+ display_help $2
+
+else
+ usage
+fi
+