From 4a523d56e7475a06a92115c185d0c1b5e6b2b2be Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 6 Dec 2017 17:38:38 +0100 Subject: [PATCH] Repository handling RFC, purge debs directory if publishing is succesful, added local server, few extra checks ... --- lib/general.sh | 97 +++++++++++++++++++++++++++++++++-------------- lib/repository.sh | 16 ++++++-- 2 files changed, 80 insertions(+), 33 deletions(-) diff --git a/lib/general.sh b/lib/general.sh index 533362721..0846cdfbd 100644 --- a/lib/general.sh +++ b/lib/general.sh @@ -341,31 +341,21 @@ addtorepo() { # add all deb files to repository # parameter "remove" dumps all and creates new +# parameter "delete" remove incoming directory if publishing is succesful # function: cycle trough distributions + local distributions=("jessie" "xenial" "stretch") + local errors=0 for release in "${distributions[@]}"; do + local forceoverwrite="" + # let's drop from publish if exits if [[ -n $(aptly publish list -config=../config/aptly.conf -raw | awk '{print $(NF)}' | grep $release) ]]; then aptly publish drop -config=../config/aptly.conf $release > /dev/null 2>&1 fi - - if [[ $1 == remove ]]; then - # remove repository - aptly repo drop -config=../config/aptly.conf $release > /dev/null 2>&1 - aptly db cleanup -config=../config/aptly.conf > /dev/null 2>&1 - fi - - - if [[ $1 == replace ]]; then - local replace=true - else - local replace=false - fi - - # create local repository if not exist if [[ -z $(aptly repo list -config=../config/aptly.conf -raw | awk '{print $(NF)}' | grep $release) ]]; then display_alert "Creating section" "$release" "info" @@ -389,7 +379,13 @@ addtorepo() # adding main if find $POT -maxdepth 1 -type f -name "*.deb" 2>/dev/null | grep -q .; then display_alert "Adding to repository $release" "main" "ext" - aptly repo add -force-replace=$replace -config=../config/aptly.conf $release $POT/*.deb + aptly repo add -config=../config/aptly.conf $release ${POT}*.deb + if [[ $? -ne 0 ]]; then + # try again with + display_alert "Adding by force to repository $release" "main" "ext" + aptly repo add -force-replace=true -config=../config/aptly.conf $release ${POT}*.deb + if [[ $? -eq 0 ]]; then forceoverwrite="-force-overwrite"; else errors=$((errors+1)); fi + fi else display_alert "Not adding $release" "main" "wrn" fi @@ -399,7 +395,13 @@ addtorepo() # adding main distribution packages if find ${POT}${release} -maxdepth 1 -type f -name "*.deb" 2>/dev/null | grep -q .; then display_alert "Adding to repository $release" "root" "ext" - aptly repo add -force-replace=$replace -config=../config/aptly.conf $release ${POT}${release}/*.deb + aptly repo add -config=../config/aptly.conf $release ${POT}${release}/*.deb + if [[ $? -ne 0 ]]; then + # try again with + display_alert "Adding by force to repository $release" "root" "ext" + aptly repo add -force-replace=true -config=../config/aptly.conf $release ${POT}${release}/*.deb + if [[ $? -eq 0 ]]; then forceoverwrite="-force-overwrite"; else errors=$((errors+1));fi + fi else display_alert "Not adding $release" "root" "wrn" fi @@ -408,42 +410,79 @@ addtorepo() if find ${POT}extra/jessie-utils -maxdepth 1 -type f -name "*.deb" 2>/dev/null | grep -q .; then display_alert "Adding to repository $release" "utils" "ext" aptly repo add -config=../config/aptly.conf "utils" ${POT}extra/jessie-utils/*.deb - COMPONENTS="${COMPONENTS} utils" + if [[ $? -ne 0 ]]; then + # try again with + display_alert "Adding by force to repository $release" "utils" "ext" + aptly repo add -force-replace=true -config=../config/aptly.conf "utils" ${POT}extra/jessie-utils/*.deb + if [[ $? -eq 0 ]]; then forceoverwrite="-force-overwrite"; else errors=$((errors+1));fi + fi else display_alert "Not adding $release" "utils" "wrn" fi + COMPONENTS="${COMPONENTS} utils" # adding release-specific utils if find ${POT}extra/${release}-utils -maxdepth 1 -type f -name "*.deb" 2>/dev/null | grep -q .; then display_alert "Adding to repository $release" "${release}-utils" "ext" aptly repo add -config=../config/aptly.conf "${release}-utils" ${POT}extra/${release}-utils/*.deb - COMPONENTS="${COMPONENTS} ${release}-utils" + if [[ $? -ne 0 ]]; then + # try again with + display_alert "Adding by force to repository $release" "${release}-utils" "ext" + aptly repo add -force-replace=true -config=../config/aptly.conf "${release}-utils" ${POT}extra/${release}-utils/*.deb + if [[ $? -eq 0 ]]; then forceoverwrite="-force-overwrite"; else errors=$((errors+1));fi + fi else display_alert "Not adding $release" "${release}-utils" "wrn" fi + COMPONENTS="${COMPONENTS} ${release}-utils" # adding desktop if find ${POT}extra/${release}-desktop -maxdepth 1 -type f -name "*.deb" 2>/dev/null | grep -q .; then display_alert "Adding to repository $release" "desktop" "ext" - aptly repo add -force-replace=$replace -config=../config/aptly.conf "${release}-desktop" ${POT}extra/${release}-desktop/*.deb - COMPONENTS="${COMPONENTS} ${release}-desktop" + aptly repo add -config=../config/aptly.conf "${release}-desktop" ${POT}extra/${release}-desktop/*.deb + if [[ $? -ne 0 ]]; then + # try again with + display_alert "Adding by force to repository $release" "desktop" "ext" + aptly repo add -force-replace=true -config=../config/aptly.conf "${release}-desktop" ${POT}extra/${release}-desktop/*.deb + if [[ $? -eq 0 ]]; then forceoverwrite="-force-overwrite"; else errors=$((errors+1));fi + fi else display_alert "Not adding $release" "desktop" "wrn" fi + COMPONENTS="${COMPONENTS} ${release}-desktop" - # publish - aptly publish -passphrase=$GPG_PASS -origin=Armbian -label=Armbian -config=../config/aptly.conf -component=${COMPONENTS// /,} \ - --distribution=$release repo $release ${COMPONENTS//main/} 2>/dev/null + local mainnum=$(aptly repo show -with-packages -config=../config/aptly.conf $release | grep "Number of packages" | awk '{print $NF}') + local utilnum=$(aptly repo show -with-packages -config=../config/aptly.conf ${release}-desktop | grep "Number of packages" | awk '{print $NF}') + local desknum=$(aptly repo show -with-packages -config=../config/aptly.conf ${release}-utils | grep "Number of packages" | awk '{print $NF}') - if [[ $? -ne 0 ]]; then - display_alert "Publishing failed" "$release" "err" - exit 0 + if [ $mainnum -gt 0 ] && [ $utilnum -gt 0 ] && [ $desknum -gt 0 ]; then + # publish + aptly publish $forceoverwrite -passphrase=$GPG_PASS -origin=Armbian -label=Armbian -config=../config/aptly.conf -component=${COMPONENTS// /,} \ + --distribution=$release repo $release ${COMPONENTS//main/} + if [[ $? -ne 0 ]]; then + display_alert "Publishing failed" "$release" "err" + errors=$((errors+1)) + exit 0 + fi + else + errors=$((errors+1)) + local err_txt=": All components must be present: main, utils and desktop for first build" fi + done + + # display what we have display_alert "List of local repos" "local" "info" (aptly repo list -config=../config/aptly.conf) | egrep packages - # serve - # aptly -config=../config/aptly.conf -listen=":8189" serve + + # remove debs if no errors found + if [[ $errors -eq 0 && "$1" == "delete" ]]; then + display_alert "Purging incoming debs" "all" "ext" + find ${POT} -name "*.deb" -type f -delete + else + display_alert "There were some problems $err_txt" "leaving incoming directory intact" "err" + fi + } # prepare_host diff --git a/lib/repository.sh b/lib/repository.sh index 57b3332e1..12bde3fb3 100755 --- a/lib/repository.sh +++ b/lib/repository.sh @@ -24,6 +24,12 @@ DISTROS=("jessie" "xenial" "stretch") ParseOptions() { case $@ in + serve) + # display repository content + display_alert "Serving content" "common utils" "ext" + aptly serve -listen=:8080 -config=../config/aptly.conf + exit 0 + ;; show) # display repository content for release in "${DISTROS[@]}"; do @@ -39,10 +45,9 @@ ParseOptions() { update) # display full help test # run repository update - addtorepo + addtorepo "$@" "delete" # add a key to repo cp ../config/armbian.key ../output/repository/public - echo "done." exit 0 ;; purge) @@ -88,8 +93,11 @@ repo-remove-old-packages() { } DisplayUsage() { - echo -e "Usage: repository show | update | purge\n" - echo -e "Purge removes all but last 5 versions\n" + echo -e "Usage: repository show | serve | create | update | purge\n" + echo -e "\n show = display repository content" + echo -e "\n serve = publish your repositories on current server over HTTP" + echo -e "\n update = updating repository" + echo -e "\n purge = removes all but last 5 versions\n\n" } # DisplayUsage ParseOptions "$@" \ No newline at end of file