#!/bin/bash # $HeadURL$ $LastChangedRevision$ # Modules . $(bs-config bs_share_prefix)/include/bssupport.sh || { echo "${0##*/}: INTERNAL ERROR: failed to load bssupport.sh" >&2; exit 3; } . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals main() { local MY_ARGS local PROGRAM VERBOSELEVEL PROGNAME # Defaults for options # Process options miniade_process_options --help-handler=usage MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments # Sanity checks and derivations # bs sets PROGRAM, but passes it to us through environment as BS_PROGRAM, copy it back. PROGRAM=$BS_PROGRAM VERBOSELEVEL=$BS_VERBOSELEVEL PACKAGE_DEBREPO_DIR=$BS_PACKAGE_DEBREPO_DIR PACKAGE_RPMREPO_DIR=$BS_PACKAGE_RPMREPO_DIR bssupport_checkset PROGRAM VERBOSELEVEL PACKAGE_DEBREPO_DIR PACKAGE_RPMREPO_DIR miniade_set_verboselevel $VERBOSELEVEL { ! [[ $PROGRAM =~ .*\.debian$ ]]; } || miniade_internal "PROGRAM ends with '.debian'" REPOMASTER_LOGIN=repomaster [ "X$LOGNAME" = "X$REPOMASTER_LOGIN" ] || miniade_error "only run this step as $REPOMASTER_LOGIN" if [[ $PROGRAM =~ ^(rak)$ ]]; then PUBLIC_OR_PRIVATE=private else PUBLIC_OR_PRIVATE=public fi #DEB_RELEASES=buster DEB_RELEASES="ALL-RELEASES" RPM_RELEASES=8 PACKAGE_DEBREPO_NAME=local${PUBLIC_OR_PRIVATE}-deb PACKAGE_RPMREPO_NAME=local${PUBLIC_OR_PRIVATE}-rpm PACKAGE_RPMREPO_DIR=/pub/computing/software/local/redhat/local${PUBLIC_OR_PRIVATE}-rpm.queue # This check that gpg-agent is running is copied from paa to here in order to raise the error much sooner. pgrep -u $LOGNAME gpg-agent > /dev/null || miniade_error "it looks like gpg-agent is not running (hint: do you need to run 'gpg-agent --daemon'?)" # Guts # insertion/debs # The sed command prefixes UNRELEASED packages with '9' and all others with '0' so that, after sorting and stripping # that prefix, UNRELEASED packages are listed *after* released ones. Together with the rm calls in the # the processing of released (and also, but not pertinently, unreleased) files, this means that # when inserting released files we don't also insert UNRELEASED files. for FILE in $(ls $PACKAGE_DEBREPO_DIR | sed '/UNRELEASED/ { s/\(.*\)/9 \1/; b }; s/\(.*\)/0 \1/' | sort -t' ' -k 1n,2 | cut -d' ' -f2); do miniade_debug 10 "epilogue-pkgctrl.pasta-net: FILE=$FILE" if [[ $FILE =~ ^([^_]*)_.*UNRELEASED.*\.deb$ ]] && [ -f $PACKAGE_DEBREPO_DIR/$FILE ]; then # ... insert it miniade_info "$FILE: inserting into UNRELEASED ..." paa -d $VERBOSELEVEL insert $PACKAGE_DEBREPO_NAME UNRELEASED main $PACKAGE_DEBREPO_DIR/$FILE rm -f $PACKAGE_DEBREPO_DIR/$FILE elif [[ $FILE =~ ^([^_]*)_.*UNRELEASED.*\.deb$ ]]; then miniade_debug 10 "epilogue-pkgctrl.pasta-net: removed in an earlier loop?" elif [[ $FILE =~ ^([^_]*)_([^_]*)_([^_]*)\.deb$ ]]; then miniade_info "$FILE: inserting into $DEB_RELEASES ..." PACKAGE_NAME=${BASH_REMATCH[1]} PACKAGE_VERSION=${BASH_REMATCH[2]} PACKAGE_ARCH=${BASH_REMATCH[3]} rm -f $PACKAGE_DEBREPO_DIR/${PACKAGE_NAME}_*UNRELEASED*.deb paa -d $VERBOSELEVEL insert $PACKAGE_DEBREPO_NAME $DEB_RELEASES main $PACKAGE_DEBREPO_DIR/$FILE # Note that Alexis wants to stop having to update the versions in the 'Downloads' sections # of his web pages and so we copy the file to a _latest.deb and insert that too. # This assumes (1) we're only inserting one release of each package and (2) that # that release *is* the latest release. For Alexis, this is always true, but it's # not necessarily true for everyone, which is why this is in the site-specific 'ep' # script and not in the public 'mp' script. cp $PACKAGE_DEBREPO_DIR/$FILE $PACKAGE_DEBREPO_DIR/${PACKAGE_NAME}_latest_$PACKAGE_ARCH.deb paa -d $VERBOSELEVEL insert $PACKAGE_DEBREPO_NAME $DEB_RELEASES main $PACKAGE_DEBREPO_DIR/${PACKAGE_NAME}_latest_$PACKAGE_ARCH.deb rm -f $PACKAGE_DEBREPO_DIR/${PACKAGE_NAME}_latest_$PACKAGE_ARCH.deb rm -f $PACKAGE_DEBREPO_DIR/$FILE else # ... or delete it. miniade_warning "$FILE: cruft; deleting ..." rm -f $PACKAGE_DEBREPO_DIR/$FILE fi done # insertion/rpms for FILE in $(ls $PACKAGE_RPMREPO_DIR | sed '/UNRELEASED/ { s/\(.*\)/9 \1/; b }; s/\(.*\)/0 \1/' | sort -t' ' -k 1n,2 | cut -d' ' -f2); do miniade_debug 10 "epilogue-pkgctrl.pasta-net: FILE=$FILE" # This regexp does not allow for a '-' in the *name* of the package, which does happen (e.g. 'x-dev'). if [[ $FILE =~ ^([^-]*)-.*UNRELEASED.*\.rpm$ ]] && [ -f $PACKAGE_RPMREPO_DIR/$FILE ]; then # ... insert it miniade_info "$FILE: inserting into UNRELEASED ..." paa -d $VERBOSELEVEL insert $PACKAGE_RPMREPO_NAME UNRELEASED $PACKAGE_RPMREPO_DIR/$FILE rm -f $PACKAGE_RPMREPO_DIR/$FILE elif [[ $FILE =~ ^([^-]*)-.*UNRELEASED.*\.rpm$ ]]; then miniade_debug 10 "epilogue-pkgctrl.pasta-net: removed in an earlier loop?" elif [[ $FILE =~ ^([^-]*)-.*\.rpm$ ]]; then miniade_info "$FILE: inserting into $RPM_RELEASES ..." rm -f $PACKAGE_RPMREPO_DIR/${BASH_REMATCH[1]}_*UNRELEASED*.rpm paa -d $VERBOSELEVEL insert $PACKAGE_RPMREPO_NAME $RPM_RELEASES $PACKAGE_RPMREPO_DIR/$FILE rm -f $PACKAGE_RPMREPO_DIR/$FILE else # ... or delete it. miniade_warning "$FILE: cruft; deleting ..." rm -f $PACKAGE_RPMREPO_DIR/$FILE fi done # control/debs # '--force' used only to silence paa when repeated calling it during bs development, when no new packages uploaded. miniade_info "$PACKAGE_DEBREPO_NAME: regenerating control files ..." paa -d $VERBOSELEVEL --force control $PACKAGE_DEBREPO_NAME # control/rpms # '--force' used only to silence paa when repeated calling it during bs development, when no new packages uploaded. miniade_info "$PACKAGE_RPMREPO_NAME: regenerating control files ..." paa -d $VERBOSELEVEL --force control $PACKAGE_RPMREPO_NAME ## mirror/debs #miniade_info "$PACKAGE_DEBREPO_NAME: mirroring ..." #CMDLINE="paa -d $VERBOSELEVEL mirror $PACKAGE_DEBREPO_NAME" #miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." #eval "$CMDLINE" # ## mirror/rpms #miniade_info "$PACKAGE_RPMREPO_NAME: mirroring ..." #CMDLINE="paa -d $VERBOSELEVEL mirror $PACKAGE_RPMREPO_NAME" #miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." #eval "$CMDLINE" # ## freeze/debs #miniade_info "freezing $PACKAGE_DEBREPO_NAME (which will create freeze) ..." #CMDLINE="paa -d $VERBOSELEVEL freeze $PACKAGE_DEBREPO_NAME" #miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." #eval "$CMDLINE" # ## freeze/rpms #miniade_info "freezing $PACKAGE_RPMREPO_NAME (which will create freeze) ..." #CMDLINE="paa -d $VERBOSELEVEL freeze $PACKAGE_RPMREPO_NAME" #miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." #eval "$CMDLINE" # ## indirect/debs #miniade_info "indirecting freeze ..." #CMDLINE="paa -d $VERBOSELEVEL indirect $PACKAGE_DEBREPO_NAME ALL-HOSTS NEWEST-FREEZE" #miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." #eval "$CMDLINE" # ## indirect/rpms #if false; then # miniade_info "indirecting freeze ..." # CMDLINE="paa -d $VERBOSELEVEL indirect $PACKAGE_RPMREPO_NAME ALL-HOSTS NEWEST-FREEZE" # miniade_debug 10 "epilogue-pkgctrl.pasta-net: calling [$CMDLINE] ..." # eval "$CMDLINE" #else # miniade_info "no hosts use RPMs (yet) so 'paa indirect' would produce an error; skipping ..." #fi } main "$@"