From 02c35be015c168aa9ad36cb328b29f23b38dd437 Mon Sep 17 00:00:00 2001 From: rhatto Date: Wed, 3 Sep 2008 23:56:27 +0000 Subject: merging with changes made since 21th May git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@514 04377dda-e619-0410-9926-eae83683ac58 --- trunk/Makefile | 2 +- trunk/doc/CHANGELOG | 28 ++++++++ trunk/lib/common.sh | 42 +++++++++++- trunk/mkbuild/generic.mkSlackBuild | 18 ++++++ trunk/mkbuild/model.mkbuild | 2 + trunk/src/createpkg | 41 +++++------- trunk/src/jail-update | 1 + trunk/src/lspkg | 39 +++++++----- trunk/src/mkbuild | 45 +++++++++---- trunk/src/simplaret | 127 +++++++++++++++++++++---------------- trunk/src/templatepkg | 16 +++-- 11 files changed, 247 insertions(+), 114 deletions(-) (limited to 'trunk') diff --git a/trunk/Makefile b/trunk/Makefile index 3dd668e..ff0583c 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -14,7 +14,7 @@ # Place - Suite 330, Boston, MA 02111-1307, USA # -VERSION = 0.6pre28 +VERSION = 0.6pre31 BUILD = 1rha PREFIX = /usr INSTALL = /usr/bin/install diff --git a/trunk/doc/CHANGELOG b/trunk/doc/CHANGELOG index 6202072..115959d 100644 --- a/trunk/doc/CHANGELOG +++ b/trunk/doc/CHANGELOG @@ -1,13 +1,41 @@ simplepkg changelog =================== +0.6pre31 +======== + + - generic.mkSlackBuild: config() on postinstall_script now accepts .dist + and .sample config file extensions. + - createpkg: + - most clean -s option output + - lspkg: fix on package search routine + +0.6pre30 +======== + + - common.sh: fixed package_name when dealing with files under /var/log/packages + +0.6pre29 +======== + + - templatepkg: fixed issue on adding files in a template. + - simplaret: "--sync" and "sync" now synonyms to "--update" and "update". + 0.6pre28 ======== + - generic.mkSlackBuild: new section copy_config_files + - lspkg: change ls /var/log/packages/$1 to ...$1-[0-9] + - mkjail: fixed #27 + - jail-update: installs/remove packages according the template (closes #10) + - simplaret: + - option --install working for multiple packages (closes #1) + - option --remove working for multiple packages - mkpatch: fixed infinite loop on invalid diff action - mkbuild 1.2.7: - new ACTION bugfix - search result bugfix + - protect MKBUILD_NAME and ACTION variables with "" in line 266 - createpkg 1.1.13: - severals EXIT_CODE corrections - search result bugfix diff --git a/trunk/lib/common.sh b/trunk/lib/common.sh index 0fe546c..06c19d7 100644 --- a/trunk/lib/common.sh +++ b/trunk/lib/common.sh @@ -27,7 +27,11 @@ SIMPLARET="simplaret" function package_name { - basename $1 .tgz | sed -e 's/-[^-]*-[^-]*-[^-]*$//' + # get the package name + # in some places (like in /var/log/packages), the package name is appended with + # an -upgrade information that should be striped + basename $1 .tgz | sed -e 's/-upgraded-[0-9]*-[0-9]*-[0-9]*,[0-9]*:[0-9]*:[0-9]*$//' \ + -e 's/-[^-]*-[^-]*-[^-]*$//' } @@ -77,6 +81,7 @@ function install_packages { fi root="$JAIL_ROOT/$server" + mkdir -p $root/var/log/packages # now tries to install each package listed in the template for pack in `cat $TEMPLATE | grep -v -e "^#" | cut -d : -f 1 | awk '{ print $1 }'`; do @@ -521,6 +526,35 @@ function update_template_files { } +function update_jail_packages { + + # update jail packages according the template + # usage: update_jail_packages + + # check if installed packages are listed in the template + for pack in `ls -1 $1/var/log/packages/`; do + pack=`package_name $pack` + if ! `grep -v -e "^#" $TEMPLATE_BASE.template | cut -d : -f 1 | awk '{ print $1 }' | grep -q -e "^$pack\$"`; then + ROOT=$1 removepkg $pack + fi + done + + # check if each package from the template is installed + grep -v -e "^#" $TEMPLATE_BASE.template | cut -d : -f 1 | awk '{ print $1 }' | while read pack; do + + # check if the package is installed + pack="`echo $pack | sed -e 's/\+/\\\+/'`" + installed=`eval "ls /$1/var/log/packages/ | egrep -E '^$pack-[^-]+-[^-]+-[^-]+$'"` + check=$? + + if [ -z "$installed" ] || [ "$check" != "0" ]; then + # the package isn't installed + ROOT=$1 simplaret install $pack + fi + done + +} + function copy_template_files { # copy template files into jail @@ -735,6 +769,7 @@ function error_codes { ERROR_MKBUILD_CONSTRUCTION=501 ERROR_MKBUILD_PROGRAM=502 ERROR_MKBUILD_INPUT_PAR=503 + ERROR_MKBUILD_SVN=504 # Mkpatch error codes ERROR_MKPATCH=600 @@ -815,9 +850,11 @@ function handle_error { eecho $error "$BASENAME: Program logical error." ;; $ERROR_MKBUILD_INPUT_PAR) eecho $error "$BASENAME: Input parameter $2 error. See \"mkbuild --help\"." ;; - $ERROR_MKPATCH) eecho $error "$BASENAME: Mkpatch error. Check .mkbuild file." ;; + $ERROR_MKBUILD_SVN) + eecho $error "$BASENAME: SVN or empty URL. Disable this sections in .mkbuild file:\n - download_source;\n - md5sum_download_and_check_0;\n - md5sum_download_and_check_1;\n - gpg_signature_check\n - untar_source" + ;; # # Others errors *) @@ -953,4 +990,5 @@ function is_number { (let int=$1) 2>/dev/null return $? # Exit status of the let thread fi + } diff --git a/trunk/mkbuild/generic.mkSlackBuild b/trunk/mkbuild/generic.mkSlackBuild index 133c851..67776ea 100644 --- a/trunk/mkbuild/generic.mkSlackBuild +++ b/trunk/mkbuild/generic.mkSlackBuild @@ -305,6 +305,21 @@ mkdir -p $PKG/etc/rc.d cp $CWD/rc.* $PKG/etc/rc.d/ + off +# Copy config files +mkdir -p $PKG/etc +for conf in [[CONFIG FILES]]; do + mkdir -p $PKG/etc/`dirname $conf` + if [ -e "$CWD/conf/$conf" ]; then + cp -a $CWD/conf/$conf $PKG/etc/$conf + elif [ -e "$CWD/$conf" ]; then + cp -a $CWD/$conf $PKG/etc/$conf + elif [ -e "$conf" ]; then + cp -a $conf $PKG/etc/$conf + fi +done + + off # Install documentation DOCS="[[DOCUMENTATION FILES]]" @@ -345,6 +360,9 @@ cat << EOSCRIPT > "$PKG/install/doinst.sh" config() { NEW="\$1" OLD="\$(dirname \$NEW)/\$(basename \$NEW .new)" + OLD="\$(dirname \$NEW)/\$(basename \$OLD .sample)" + OLD="\$(dirname \$NEW)/\$(basename \$OLD .dist)" + # If there's no config file by that name, mv it over: if [ ! -r \$OLD ]; then mv \$NEW \$OLD diff --git a/trunk/mkbuild/model.mkbuild b/trunk/mkbuild/model.mkbuild index d030ea4..391b750 100644 --- a/trunk/mkbuild/model.mkbuild +++ b/trunk/mkbuild/model.mkbuild @@ -100,6 +100,7 @@ #[[SIGNING KEY]]="" #[[SIGNING KEY URL]]="" #[[SIGNING KEY ID]]="" +#[[SIGNING URL]]="" #[[CONFIG FILES]]="" #[[PATCH URLS]]="" [[PATCH FILES]]="" @@ -141,6 +142,7 @@ off: patch_source off: compress_manpages off: compress_info_files off: copy_init_scripts +off: copy_config_files on: install_documentation on: slackdesc off: move_config_files diff --git a/trunk/src/createpkg b/trunk/src/createpkg index 1dd568e..cf8e515 100644 --- a/trunk/src/createpkg +++ b/trunk/src/createpkg @@ -27,7 +27,7 @@ # Createpkg functions #--------------------------------------------------- -CREATEPKG_VERSION="1.1.13" +CREATEPKG_VERSION="1.1.15" function usage { @@ -308,7 +308,10 @@ case $1 in ;; '--search'|'-s') [ $# -ne 2 ] && usage # two parameters is required - find_slackbuild $2 + LIST=`find_slackbuild $2` + for i in $LIST; do + echo $i | sed 's/.*\/\([^\/]\+\)\.[Ss]lack[Bb]uild$/ \1/' + done exit $EXIT_CODE ;; '--info'|'-f') @@ -424,29 +427,17 @@ eecho $messag "$BASENAME: processing $SCRIPT_NAME" cd $SCRIPT_BASE # Run SlackBuild script -if [ $DEBUG -eq $off ]; then - ( - LANG=en_US \ - SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ - SRC=${SRC_DIR:=$SOURCE_DIR} \ - ARCH=${ARCH:=$CREATE_ARCH} \ - COLOR=${COLOR:=$COLOR_MODE} \ - REPOS=${REPOS:=$MAKEPKG_REPOS} \ - CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \ - INTERACT=no sh +x ./$SCRIPT_NAME - ) -else - ( - LANG=en_US \ - SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ - SRC=${SRC_DIR:=$SOURCE_DIR} \ - ARCH=${ARCH:=$CREATE_ARCH} \ - COLOR=${COLOR:=$COLOR_MODE} \ - REPOS=${REPOS:=$MAKEPKG_REPOS} \ - CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \ - INTERACT=no sh -x ./$SCRIPT_NAME - ) -fi +[ $DEBUG -eq $off ] && SHELL_FLAG="+x" || SHELL_FLAG="-x" +( + LANG=en_US \ + SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ + SRC=${SRC_DIR:=$SOURCE_DIR} \ + ARCH=${ARCH:=$CREATE_ARCH} \ + COLOR=${COLOR:=$COLOR_MODE} \ + REPOS=${REPOS:=$MAKEPKG_REPOS} \ + CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \ + INTERACT=no sh $SHELL_FLAG ./$SCRIPT_NAME +) # Check if package was built handle_error $? $PACKAGE diff --git a/trunk/src/jail-update b/trunk/src/jail-update index c5a008f..ce2d165 100755 --- a/trunk/src/jail-update +++ b/trunk/src/jail-update @@ -56,6 +56,7 @@ elif [ ! -d "$1" ]; then fi update_template_files +update_jail_packages $1 copy_template_files $1 set_jail_perms $1 diff --git a/trunk/src/lspkg b/trunk/src/lspkg index e772fb3..ce7b3b9 100755 --- a/trunk/src/lspkg +++ b/trunk/src/lspkg @@ -18,6 +18,7 @@ # COMMON="/usr/libexec/simplepkg/common.sh" +PKG_LIST_DIR="var/log/packages" if [ -f "$COMMON" ]; then source $COMMON @@ -48,17 +49,22 @@ options are: # ----------------------------------------------------- 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 + pack=$2 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 + pack=$1 else - LIST_PKGS="`ls /$ROOT/var/log/packages/ 2> /dev/null`" + pack="" +fi + +if [ ! -z "$pack" ]; then + if echo $pack | grep -q "*"; then + LIST_PKGS="`ls -1 /$ROOT/$PKG_LIST_DIR/$pack 2> /dev/null`" + else + pack="`echo $pack | sed -e 's/\+/\\\+/'`" + LIST_PKGS=`eval "ls -1 /$ROOT/$PKG_LIST_DIR/ 2> /dev/null | egrep -E '^$pack-[^-]+-[^-]+-[^-]+$'"` + fi +else + LIST_PKGS="`ls /$ROOT/$PKG_LIST_DIR/ 2> /dev/null`" fi LIST_PKGS="`slash $LIST_PKGS`" @@ -71,14 +77,14 @@ case $1 in if [ ! -z "$2" ]; then if [ ! -z "$LIST_PKGS" ]; then for file in $LIST_PKGS; do - less $file + less /$PKG_LIST_DIR/$file done else if [ ! -z "$ROOT" ]; then - echo "$2: package not found on /$ROOT/var/log/packages" + echo "$2: package not found on /$ROOT/$PKG_LIST_DIR" exit 1 else - echo "$2: package not found on /var/log/packages" + echo "$2: package not found on /$PKG_LIST_DIR" exit 1 fi fi @@ -97,13 +103,13 @@ case $1 in "-r"|"--remove") if [ ! -z "$2" ]; then if [ ! -z "$LIST_PKGS" ]; then - removepkg /$ROOT/var/log/packages/$1-[0-9]* + removepkg /$ROOT/$PKG_LIST_DIR/$1-[0-9]* fi fi ;; "-s"|"--search") if [ ! -z "$2" ]; then - eval "grep -l '\/$2$' /$ROOT/var/log/packages/*" + eval "grep -l '\/$2$' /$ROOT/$PKG_LIST_DIR/*" fi ;; "-d"|"--description") @@ -125,12 +131,13 @@ case $1 in done else if [ ! -z "$ROOT" ]; then - echo "$1: package not found on /$ROOT/var/log/packages" + echo "$1: package not found on /$ROOT/$PKG_LIST_DIR" exit 1 else - echo "$1: package not found on /var/log/packages" + echo "$1: package not found on /$PKG_LIST_DIR" exit 1 fi fi ;; esac + diff --git a/trunk/src/mkbuild b/trunk/src/mkbuild index d961a53..d356d23 100755 --- a/trunk/src/mkbuild +++ b/trunk/src/mkbuild @@ -19,7 +19,7 @@ # Based in model generic.SlackBuild of Luiz # # Version: -PROG_VERSION=1.2.7 +PROG_VERSION=1.2.8 PROG_NAME=`basename $0` #-------------------------------------------------------------------- @@ -263,7 +263,7 @@ function set_parameters { shift done - [ ! -e $MKBUILD_NAME -a $ACTION == "build" ] && ACTION='new' + [ ! -e "$MKBUILD_NAME" -a "$ACTION" == "build" ] && ACTION='new' } @@ -367,6 +367,13 @@ function get_status { } +function get_mkbuild_status { + + # Get status from mkbuild file + # $1 section + eval "sed '/^#>>/,/</dev/null && SVN_MOD=$on + + AUX=`get_mkbuild_status "svn_source"` + SVN_MOD=`convert_boolean "$AUX"` + # Check sections + if [ $SVN_MOD -eq $on -o $URL == "" ]; then + LIST_OFF="download_source md5sum_download_and_check_0 md5sum_download_and_check_1 gpg_signature_check untar_source" + [ $VERBOSE -eq $on ] && echo -e "\nCheck subversion or empty URL" + for i in $LIST_OFF; do + if [ `get_mkbuild_status "$i"` != "off" ]; then + handle_error $ERROR_MKBUILD_SVN + else + [ $VERBOSE -eq $on ] && echo -e "off: $i is ok." + fi + done + fi STR_MOUNT="`echo $URL | sed 's/.*\.\([a-z0-9]\+\)$/\1/'`" if [ $STR_MOUNT = "gz" -o $STR_MOUNT = "tgz" -o $STR_MOUNT = "bz2" -o $STR_MOUNT = "zip" ]; then @@ -789,7 +810,7 @@ if [ ! -z $MKBUILD_NAME ]; then fi [ $VERBOSE -eq $on ] && echo "[[DOWNLOAD FOLDER URL]]=\"$URL_BASE\"" - if [ $SVN_MOD -ne $on ]; then + if [ $SVN_MOD -eq $off ]; then # Extension EXTENSION=`validate_parameter "$EXTENSION" "EXTENSION" "$STR_MOUNT"` || handle_error $ERROR_MKBUILD_CONSTRUCTION "EXTENSION" [ $VERBOSE -eq $on ] && echo "[[EXTENSION]]=\"$EXTENSION\"" diff --git a/trunk/src/simplaret b/trunk/src/simplaret index f0139c6..66bb1e1 100755 --- a/trunk/src/simplaret +++ b/trunk/src/simplaret @@ -30,7 +30,7 @@ fi function simplaret_usage { echo "usage: [ARCH=otherarch] [VERSION=otherversion] $BASENAME [OPTION] package-name" - echo -e "\t OPTIONS: --help, --install, --update, --upgrade, --search, --get, --get-patches, --purge, --remove" + echo -e "\t OPTIONS: --help, --install, --update (or --sync), --upgrade, --search, --get, --get-patches, --purge, --remove" exit 1 } @@ -907,70 +907,78 @@ function simplaret_checksum { function simplaret_install { # download and install a package - # usage: simplaret_install [--skip-checks] + # usage: simplaret_install ... [--skip-checks] local package root jail_arch jail_version slack_required dep dependency tmp local name version build - name="`package_name $1`" - - root="/$ROOT" - mkdir -p $root/var/log/setup/tmp + for package in $*; do - if [ "`echo $1 | sed -e 's/\(..\).*/\1/g'`" == "--" ]; then - echo $BASENAME: install: syntax error: expected package name - return 1 - fi + if [ "$package" == "--skip-checks" ]; then + continue + 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" + name="`package_name $package`" + + root="/$ROOT" + mkdir -p $root/var/log/setup/tmp + + if [ "`echo $package | sed -e 's/\(..\).*/\1/g'`" == "--" ]; then + echo $BASENAME: install: syntax error: expected package name 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`/$name.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 - ( grep -v '^#' $slack_required | while read dep; do - if [ ! -z "$dep" ]; then - dependency="`echo $dep | awk '{ print $1 }'`" - simplaret_solve_dep $name $dependency $root - fi - true - done ) + + # now we check if ARCH and VERSION from the + # repository are the same of the jail + if ! echo $* | grep -q -- "--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 $package --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 $package --skip-checks\" to ignore this warning and install anyway" + return 1 + fi + fi + + # package="`simplaret_get $package --silent`" + simplaret_get $package --silent + package="$LAST_DOWNLOADED_PACKAGE" + + if [ "$package" != "0" ] && [ ! -z "$package" ]; then + slack_required="`dirname $package`/$name.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 + ( grep -v '^#' $slack_required | while read dep; do + if [ ! -z "$dep" ]; then + dependency="`echo $dep | awk '{ print $package }'`" + simplaret_solve_dep $name $dependency $root + fi + true + done ) + fi + + ROOT=$root upgradepkg --install-new $package + LAST_DOWNLOADED_PACKAGE="0" + + else + echo "Error: could not install package $package: file not found" + LAST_DOWNLOADED_PACKAGE="0" + return 1 fi - - ROOT=$root upgradepkg --install-new $package - LAST_DOWNLOADED_PACKAGE="0" - else - echo "Error: could not install package $1: file not found" + echo "Error: could not install package $package" LAST_DOWNLOADED_PACKAGE="0" return 1 fi - else - echo "Error: could not install package $1" - LAST_DOWNLOADED_PACKAGE="0" - return 1 - fi + + done } @@ -1075,6 +1083,17 @@ function simplaret_solve_dep { } +function simplaret_remove { + + # remove packages + # usage: simplaret_remove [ ... ] + + for package in $*; do + ROOT=/$ROOT removepkg $package + done + +} + function simplaret_req_arg { # requires arg @@ -1102,14 +1121,14 @@ fi BASENAME="`basename $0`[$SIMPLARET_CHILD]" case $1 in - "--update" | "update") simplaret_update ;; + "--update" | "update" | "--sync" | "sync" ) simplaret_update ;; "--upgrade" | "upgrade") simplaret_get_patches --upgrade ;; "--get-patches" | "get-patches") simplaret_get_patches ;; "--search" | "search") shift ; simplaret_req_arg $1 ; simplaret_search $* ;; "--get" | "get") shift ; simplaret_req_arg $1 ; simplaret_get $* ;; "--purge" | "purge") shift ; simplaret_req_arg $1 simplaret_purge $* ;; "--install" | "install") shift ; simplaret_req_arg $1 ; simplaret_install $* ;; - "--remove" | "remove") simplaret_req_arg $2 ; ROOT=/$ROOT removepkg $2 ;; + "--remove" | "remove") shift ; simplaret_req_arg $1 ; simplaret_remove $* ;; "--help" | "help") simplaret_usage ;; *) if echo $1 | grep -q -v '^--'; then diff --git a/trunk/src/templatepkg b/trunk/src/templatepkg index 4f2592f..a8045ee 100755 --- a/trunk/src/templatepkg +++ b/trunk/src/templatepkg @@ -479,10 +479,18 @@ function template_add { 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 + candidate="./`dirname $file`" + mkdir -p $TEMPLATE_BASE.d/$candidate + cd $TEMPLATE_BASE.d/$candidate + while true; do + if [ -d ".svn" ]; then + svn add `basename $candidate` + break + else + candidate="`basename $(pwd)`" + cd .. + fi + done cp -a $jail/$file $destination -- cgit v1.2.3