# packaging functions for kiss tar packages # tiny_make_package tiny_make_package() { PACKAGE_NAME=$1 TARGET_NAME=$(dirname "$PACKAGE_NAME") PACKAGE_NAME=$(basename "$PACKAGE_NAME") SHORT_NAME=$(basename "$PACKAGE_NAME" ".$PKG_FORMAT") umask 022 echo "" if [[ "$EUID" = "0" ]] ; then ${TAR} cvf "$SHORT_NAME".tar . else ${TAR} --owner=root --group=root -cvf "$SHORT_NAME".tar . fi echo "" LONG_NAME=$SHORT_NAME.tar.xz echo "Compressing $SHORT_NAME.tar using xz(lzma-2)..." xz $SHORT_NAME.tar echo "Renaming $LONG_NAME to $PACKAGE_NAME..." mv "$LONG_NAME" "$PACKAGE_NAME" if [[ ! "$TARGET_NAME" = "." ]]; then echo "Moving $PACKAGE_NAME to $TARGET_NAME" mv "$PACKAGE_NAME" "$TARGET_NAME" fi } # Internal Routines mini_installpkg_slack() { THIS_PACKAGE="$1" THIS_PACKAGE_BASENAME="${THIS_PACKAGE##*/}" THIS_PACKAGE_SHORT_NAME="${THIS_PACKAGE_BASENAME%.*}" echo $BLUE"Installing package "$NORMAL"${THIS_PACKAGE_BASENAME}" PKG_COMPRESSOR=xz # ( cd ; ${TAR} -xzlUpvf - ) < $PACKAGE 2> /dev/null # ( cd ; ${TAR} -xlUpv --use-compress-program $PKG_COMPRESSOR -f - ) < $PACKAGE 2> /dev/null ${TAR} -xlUpv -C / --use-compress-program $PKG_COMPRESSOR -f "$THIS_PACKAGE" 2> /dev/null DATABASE_FILE=$ADM_DIR_NAME/packages/"$THIS_PACKAGE_SHORT_NAME" make_database if [[ -f install/$PKG_POSTINST ]] ; then echo "Executing install script for $SHORT_NAME..." ( cd / ; sh install/$PKG_POSTINST -install; ) fi if [[ -x /sbin/ldconfig ]] && [[ $ROOT = "" ]] ; then /sbin/ldconfig fi if [[ -d install ]] ; then if [[ -r install/$PKG_POSTINST ]] ; then cp install/$PKG_POSTINST $ADM_DIR_NAME/postinst/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/postinst/"$THIS_PACKAGE_SHORT_NAME" fi if [[ -r install/$PKG_PREINST ]] ; then cp install/$PKG_PREINST $ADM_DIR_NAME/preinst/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/preinst/"$THIS_PACKAGE_SHORT_NAME" fi if [[ -r install/$PKG_POSTRM ]] ; then cp install/$PKG_POSTRM $ADM_DIR_NAME/postrm/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/postrm/"$THIS_PACKAGE_SHORT_NAME" fi if [[ -r install/$PKG_PRERM ]] ; then cp install/$PKG_PRERM $ADM_DIR_NAME/prerm/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/prerm/"$THIS_PACKAGE_SHORT_NAME" fi if [[ -r install/$PKG_REQUIRED ]] ; then cp install/$PKG_REQUIRED $ADM_DIR_NAME/required/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/required/"$THIS_PACKAGE_SHORT_NAME" fi if [[ -r install/$PKG_PROVIDES ]] ; then cp install/$PKG_PROVIDES $ADM_DIR_NAME/provides/"$THIS_PACKAGE_SHORT_NAME" chmod 644 $ADM_DIR_NAME/provides/"$THIS_PACKAGE_SHORT_NAME" fi ( cd /install 2> /dev/null && rm -f $PKG_POSTINST slack-* pkg-* *desc *required *provides *suggests *conflicts 1> /dev/null 2>&1 ) rmdir /install 1> /dev/null 2>&1 fi } make_kiss_pkg() { # package segregated packages if they exist # DEVEL if [[ -d "$PKG_BUILDS_DIR"/$DEVEL_PKG_NAME ]] ; then rm -f "$DEVEL_PACKAGE" ( cd "$PKG_BUILDS_DIR"/$DEVEL_PKG_NAME echo -n $BLUE"Creating package: "$NORMAL"${DEVEL_PACKAGE##*/} - " mkdir -p install if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$DEVEL_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$DEVEL_TAG install/$PKG_POSTINST elif [[ -f $CWD/$PKG_POSTINST.${NAME}-$DEVEL_TAG ]] ; then cp $CWD/$PKG_POSTINST.${NAME}-$DEVEL_TAG install/$PKG_POSTINST else # should we allow prepend or append files? if [[ -s doinst.links ]] ; then if [[ ! -s install/$PKG_POSTINST ]] ; then echo "#!/bin/sh" > install/$PKG_POSTINST fi cat doinst.links >> install/$PKG_POSTINST fi fi rm -f doinst.links find * -type l -exec rm -f {} \; if [[ -s links.list ]] && [[ $EXTENDED_DATABASE = 'YES' ]] ; then cat links.list > install/$PKG_LINKS fi rm -f links.list if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$DEVEL_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$DEVEL_TAG install/$PKG_DESC elif [[ -f $CWD/$PKG_DESC.${NAME}-$DEVEL_TAG ]] ; then cp $CWD/$PKG_DESC.${NAME}-$DEVEL_TAG install/$PKG_DESC else echo "${NAME}-$DEVEL_TAG: ${NAME}-$DEVEL_TAG Development headers and Libraries from $NAME" > install/$PKG_DESC echo "${NAME}-$DEVEL_TAG:" >> install/$PKG_DESC echo "${NAME}-$DEVEL_TAG: This package contains the development headers and libraries from $NAME" >> install/$PKG_DESC for i in {1..7} ; do echo "${NAME}-$DEVEL_TAG:" >> install/$PKG_DESC done echo "${NAME}-$DEVEL_TAG: $SIGNATURE" >> install/$PKG_DESC fi # See the note in 14A-last_minute_details about this option if [[ $ADD_MANIFEST_FILE != "NO" ]] ; then gen_pkg_manifest "$PKG_BUILDS_DIR"/$DEVEL_PKG_NAME silent fi # create the child package tiny_make_package "$DEVEL_PACKAGE" &> /dev/null if [[ -f "$DEVEL_PACKAGE" ]] ; then echo $GREEN"Done"$NORMAL [[ $REALLY_INSTALL = "YES" ]] && really_install "$DEVEL_PACKAGE" else echo $RED"Failed!"$NORMAL fi ) ! [[ $DEBUG ]] && (cd "$PKG_BUILDS_DIR" && rm -rf $DEVEL_PKG_NAME) fi # DOCS if [[ -d "$PKG_BUILDS_DIR"/$DOCS_PKG_NAME ]] ; then rm -f "$DOCS_PACKAGE" ( cd "$PKG_BUILDS_DIR"/$DOCS_PKG_NAME echo -n $BLUE"Creating package: "$NORMAL"${DOCS_PACKAGE##*/} - " mkdir -p install if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$DOCS_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$DOCS_TAG install/$PKG_POSTINST elif [[ -f $CWD/$PKG_POSTINST.${NAME}-$DOCS_TAG ]] ; then cp $CWD/$PKG_POSTINST.${NAME}-$DOCS_TAG install/$PKG_POSTINST else # should we allow prepend or append files? if [[ -s doinst.links ]] ; then if [[ ! -s install/$PKG_POSTINST ]] ; then echo "#!/bin/sh" > install/$PKG_POSTINST fi cat doinst.links >> install/$PKG_POSTINST fi fi rm -f doinst.links find * -type l -exec rm -f {} \; if [[ -s links.list ]] && [[ $EXTENDED_DATABASE = 'YES' ]] ; then cat links.list > install/$PKG_LINKS fi rm -f links.list if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$DOCS_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$DOCS_TAG install/$PKG_DESC elif [[ -f $CWD/$PKG_DESC.${NAME}-$DOCS_TAG ]] ; then cp $CWD/$PKG_DESC.${NAME}-$DOCS_TAG install/$PKG_DESC else echo "${NAME}-$DOCS_TAG: ${NAME}-$DOCS_TAG Document files for $NAME" > install/$PKG_DESC echo "${NAME}-$DOCS_TAG:" >> install/$PKG_DESC echo "${NAME}-$DOCS_TAG: This package contains the documentation for: $NAME" >> install/$PKG_DESC for i in {1..7} ; do echo "${NAME}-$DOCS_TAG:" >> install/$PKG_DESC done echo "${NAME}-$DOCS_TAG: $SIGNATURE" >> install/$PKG_DESC fi # See the note in 14A-last_minute_details about this option if [[ $ADD_MANIFEST_FILE != "NO" ]] ; then gen_pkg_manifest "$PKG_BUILDS_DIR"/$DOCS_PKG_NAME silent fi # create the child package tiny_make_package "$DOCS_PACKAGE" &> /dev/null if [[ -f "$DOCS_PACKAGE" ]] ; then echo $GREEN"Done"$NORMAL [[ $REALLY_INSTALL = "YES" ]] && really_install "$DOCS_PACKAGE" else echo $RED"Failed!"$NORMAL fi ) ! [[ $DEBUG ]] && (cd "$PKG_BUILDS_DIR" && rm -rf $DOCS_PKG_NAME) fi # I18N if [[ -d "$PKG_BUILDS_DIR"/$I18N_PKG_NAME ]] ; then rm -f "$I18N_PACKAGE" ( cd "$PKG_BUILDS_DIR"/$I18N_PKG_NAME echo -n $BLUE"Creating package: "$NORMAL"${I18N_PACKAGE##*/} - " mkdir -p install if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$I18N_tag ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$I18N_tag install/$PKG_POSTINST elif [[ -f $CWD/$PKG_POSTINST.${NAME}-$I18N_tag ]] ; then cp $CWD/$PKG_POSTINST.${NAME}-$I18N_tag install/$PKG_POSTINST else # should we allow prepend or append files? if [[ -s doinst.links ]] ; then if [[ ! -s install/$PKG_POSTINST ]] ; then echo "#!/bin/sh" > install/$PKG_POSTINST fi cat doinst.links >> install/$PKG_POSTINST fi fi rm -f doinst.links find * -type l -exec rm -f {} \; if [[ -s links.list ]] && [[ $EXTENDED_DATABASE = 'YES' ]] ; then cat links.list > install/$PKG_LINKS fi rm -f links.list if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$I18N_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$I18N_TAG install/$PKG_DESC elif [[ -f $CWD/$PKG_DESC.${NAME}-$I18N_TAG ]] ; then cp $CWD/$PKG_DESC.${NAME}-$I18N_TAG install/$PKG_DESC else echo "${NAME}-$I18N_TAG: ${NAME}-$I18N_TAG Language files for $NAME" > install/$PKG_DESC echo "${NAME}-$I18N_TAG:" >> install/$PKG_DESC echo "${NAME}-$I18N_TAG: This package contains the language files for: $NAME" >> install/$PKG_DESC for i in {1..7} ; do echo "${NAME}-$I18N_TAG:" >> install/$PKG_DESC done echo "${NAME}-$I18N_TAG: $SIGNATURE" >> install/$PKG_DESC fi # See the note in 14A-last_minute_details about this option if [[ $ADD_MANIFEST_FILE != "NO" ]] ; then gen_pkg_manifest "$PKG_BUILDS_DIR"/$I18N_PKG_NAME silent fi # create the child package tiny_make_package "$I18N_PACKAGE" &> /dev/null if [[ -f "$I18N_PACKAGE" ]] ; then echo $GREEN"Done"$NORMAL [[ $REALLY_INSTALL = "YES" ]] && really_install "$I18N_PACKAGE" else echo $RED"Failed!"$NORMAL fi ) ! [[ $DEBUG ]] && (cd "$PKG_BUILDS_DIR" && rm -rf $I18N_PKG_NAME) fi # SOLIBS if [[ -d "$PKG_BUILDS_DIR"/$SOLIBS_PKG_NAME ]] ; then rm -f "$SOLIBS_PACKAGE" ( cd "$PKG_BUILDS_DIR"/$SOLIBS_PKG_NAME echo -n $BLUE"Creating package: "$NORMAL"${SOLIBS_PACKAGE##*/} - " mkdir -p install if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$SOLIBS_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_POSTINST.${NAME}-$SOLIBS_TAG install/$PKG_POSTINST elif [[ -f $CWD/$PKG_POSTINST.${NAME}-$SOLIBS_TAG ]] ; then cp $CWD/$PKG_POSTINST.${NAME}-$SOLIBS_TAG install/$PKG_POSTINST else # should we allow prepend or append files? if [[ -s doinst.links ]] ; then if [[ ! -s install/$PKG_POSTINST ]] ; then echo "#!/bin/sh" > install/$PKG_POSTINST fi cat doinst.links >> install/$PKG_POSTINST fi fi rm -f doinst.links # find * -type l -exec rm -f {} \; # Create or install the package description file if [[ -f $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$SOLIBS_TAG ]] ; then cp $PATCHES_DIR/$NAME-patches/$PKG_DESC.${NAME}-$SOLIBS_TAG install/$PKG_DESC elif [[ -f $CWD/$PKG_DESC.${NAME}-$SOLIBS_TAG ]] ; then cp $CWD/$PKG_DESC.${NAME}-$SOLIBS_TAG install/$PKG_DESC else echo "${NAME}-$SOLIBS_TAG: ${NAME}-$SOLIBS_TAG Runtime libraries from $NAME" > install/$PKG_DESC echo "${NAME}-$SOLIBS_TAG:" >> install/$PKG_DESC echo "${NAME}-$SOLIBS_TAG: This package contains the runtime libraries from: $NAME" >> install/$PKG_DESC for i in {1..7} ; do echo "${NAME}-$SOLIBS_TAG:" >> install/$PKG_DESC done echo "${NAME}-$SOLIBS_TAG: $SIGNATURE" >> install/$PKG_DESC fi if [[ "$ADD_PROVIDES_FILE" = "YES" ]] ; then # Create a PKG_PROVIDES file gen_provides_list "$PKG_BUILDS_DIR"/$SOLIBS_PKG_NAME > "$SRC_DIR"/provides.tmp if [[ -s "$SRC_DIR"/provides.tmp ]] ; then #echo -n " Creating '$PKG_PROVIDES' " #echo "# $SOLIBS_PKG_NAME provides these 'requireable' items:" > install/$PKG_PROVIDES sort -u "$SRC_DIR"/provides.tmp |uniq -u > install/$PKG_PROVIDES #echo $GREEN"Done"$NORMAL fi rm -f "$SRC_DIR"/provides.tmp fi if [[ -s links.list ]] ; then while read ONE_LINK ONE_TARGET ; do case $ONE_LINK in '') : ;; #ignore blank lines *) DIR=${ONE_LINK%/*} BASE=${ONE_LINK##*/} #TARGET=$( cd $DIR and stat -L $BASE ) #works also TARGET=$( cd $DIR and readlink $BASE ) # if TARGET is prefix with '../' or is an absolute path then eliminate that case $TARGET in *'./'*) TARGET=${TARGET##*'./'} ;; '/'*) TARGET=${TARGET:1} ;; esac # only include this link if it refers to a 'requireable' item from list generated above if [[ $( grep "$TARGET"$ install/$PKG_PROVIDES ) ]] ; then # maybe need '|| [[ -e $TARGET ]] || [[ -L $TARGET ]]' #for badly-formed links echo $ONE_LINK >> install/$PKG_PROVIDES fi ;; esac done < links.list if [[ $EXTENDED_DATABASE = 'YES' ]] ; then cat links.list > install/$PKG_LINKS fi fi rm -f links.list find * -type l -exec rm -f {} \; # See the note in 14A-last_minute_details about this option if [[ $ADD_MANIFEST_FILE != "NO" ]] ; then gen_pkg_manifest "$PKG_BUILDS_DIR"/$SOLIBS_PKG_NAME silent fi # create the child package tiny_make_package "$SOLIBS_PACKAGE" &> /dev/null if [[ -f "$SOLIBS_PACKAGE" ]] ; then echo $GREEN"Done"$NORMAL [[ $REALLY_INSTALL = "YES" ]] && really_install "$SOLIBS_PACKAGE" else echo $RED"Failed!"$NORMAL fi ) ! [[ $DEBUG ]] && (cd "$PKG_BUILDS_DIR" && rm -rf $SOLIBS_PKG_NAME) fi # create the main package rm -f "$PACKAGE" echo -n $BLUE"Creating package: "$NORMAL"${PACKAGE##*/} - " if [[ $QUIET = "YES" ]] ; then cd "$PKG_DIR" ; tiny_make_package "$PACKAGE" &> /dev/null else cd "$PKG_DIR" ; echo "" tiny_make_package "$PACKAGE" fi if [[ -f "$PACKAGE" ]] ; then echo $GREEN"Done"$NORMAL if [[ "$CREATE_MD5_CHECKSUM" = "YES" ]]; then echo $BLUE"Creating md5 checksum - "$NORMAL"$(basename $PACKAGE).md5" cd "$PKG_DEST_DIR" md5sum $(basename "$PACKAGE") > "$PACKAGE".md5 fi echo $BLUE"Package Creation - "$GREEN"Successful! "$NORMAL"Package Location:" echo "$PACKAGE" else echo $RED"FAILED! "$NORMAL echo "Creation of ${PACKAGE##*/} has failed." FAILED="PACKAGE CREATION in: $FUNCNAME" fi [[ $REALLY_INSTALL = "YES" ]] && really_install "$PACKAGE" if [[ $PAUSE = "AFTER" ]] || [[ $PAUSE = $FUNCNAME ]] ; then echo $MAGENTA"Notice - "$BLUE"Pausing after: "$NORMAL" '$FUNCNAME' Press ENTER to continue" read fi }