From e393c7341d40671476cbc3c75de02f60d77779eb Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Fri, 30 Jun 2017 11:02:17 +0200 Subject: bin/db-update: switch from sshfs to sftp --- bin/db-update | 98 ++++++++++++++++++++++++++++++++++--------------------- conf/default.conf | 4 +-- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/bin/db-update b/bin/db-update index 4e8566e..07da1f9 100755 --- a/bin/db-update +++ b/bin/db-update @@ -61,6 +61,8 @@ move_packages() { touch "${tmp_dir}/repos" touch "${tmp_dir}/packages" + touch "${tmp_dir}/master-mirror-listing" + mkdir "${tmp_dir}/transit" if ${no_action}; then dummynator='echo' @@ -68,6 +70,13 @@ move_packages() { dummynator='' fi + ls_master_mirror 'i686' | \ + while read -r repo; do + ls_master_mirror "i686/${repo}" | \ + sed "s|^|i686/${repo}/|" >> \ + "${tmp_dir}/master-mirror-listing" + done + for package in $@; do if [ -z "${package}" ]; then continue @@ -135,10 +144,10 @@ move_packages() { "${tmp_dir}/${package}.parts_and_signatures" while read -r part; do - if [ ! -f "${master_mirror_sshfs}/i686/${from_repo}/${part}" ]; then + if ! grep -qxF "i686/${from_repo}/${part}" "${tmp_dir}/master-mirror-listing"; then >&2 printf \ 'move_packages: Cannot find file "%s", part of package "%s".\n' \ - "${master_mirror_sshfs}/i686/${from_repo}/${part}" \ + "i686/${from_repo}/${part}" \ "${package}" exit 2 fi @@ -185,7 +194,7 @@ move_packages() { if grep -qxF "${repo}" "${tmp_dir}/"*".from_repo"; then - ${dummynator} repo-remove -q \ + repo-remove -q \ "${tmp_dir}/${repo}/${repo}.db.tar.gz" \ $( grep -lxF "${repo}" "${tmp_dir}/"*".from_repo" | \ @@ -197,19 +206,25 @@ move_packages() { fi if grep -qxF "${repo}" "${tmp_dir}/"*".to_repo"; then - ${dummynator} repo-add -q \ - "${tmp_dir}/${repo}/${repo}.db.tar.gz" \ - $( - grep -lxF "${repo}" "${tmp_dir}/"*".to_repo" | \ - sed ' - s|\.to_repo$|| - ' | \ - while read -r package; do - sed \ - "s|^|${master_mirror_sshfs}/i686/$(cat "${package}.from_repo")/|" \ - "${package}.parts" - done - ) + grep -lxF "${repo}" "${tmp_dir}/"*".to_repo" | \ + sed ' + s|\.to_repo$|| + ' | \ + while read -r package; do + while read -r part; do + ${master_mirror_rsync_command} \ + "${master_mirror_rsync_directory}/i686/$(cat "${package}.from_repo")/${part}" \ + "${master_mirror_rsync_directory}/i686/$(cat "${package}.from_repo")/${part}.sig" \ + "${tmp_dir}/transit/" + repo-add -q \ + "${tmp_dir}/${repo}/${repo}.db.tar.gz" \ + "${tmp_dir}/transit/${part}" + rm \ + "${tmp_dir}/transit/${part}" \ + "${tmp_dir}/transit/${part}.sig" + done < \ + "${package}.parts" + done fi done < "${tmp_dir}/repos" @@ -218,23 +233,35 @@ move_packages() { find "${tmp_dir}" -type f fi - # move the packages remotely via sshfs + # move the packages remotely via sftp - while read -r package; do + ( + while read -r package; do - if [ -z "${package}" ]; then - continue - fi + if [ -z "${package}" ]; then + continue + fi - while read -r part; do - ${dummynator} mv \ - "${master_mirror_sshfs}/i686/$(cat "${tmp_dir}/${package}.from_repo")/${part}" \ - "${master_mirror_sshfs}/i686/$(cat "${tmp_dir}/${package}.to_repo")/" - done < \ - "${tmp_dir}/${package}.parts_and_signatures" + while read -r part; do + if [ -z "${part}" ]; then + continue + fi + printf \ + 'rename "%s" "%s"\n' \ + "i686/$(cat "${tmp_dir}/${package}.from_repo")/${part}" \ + "i686/$(cat "${tmp_dir}/${package}.to_repo")/${part}" + done < \ + "${tmp_dir}/${package}.parts_and_signatures" - done < \ - "${tmp_dir}/packages" + done < \ + "${tmp_dir}/packages" + echo 'quit' + ) | \ + if ${no_action}; then + sed 's|^|sftp: |' + else + ${master_mirror_sftp_command} + fi # and push our local *.db.tar.gz via rsync @@ -285,7 +312,10 @@ move_packages() { if ! ${no_action}; then date '+%s' > \ - "${master_mirror_sshfs}/lastupdate" + "${tmp_dir}/lastupdate" + ${dummynator} ${master_mirror_rsync_command} \ + "${tmp_dir}/lastupdate" \ + "${master_mirror_rsync_directory}/lastupdate" fi rm -rf --one-file-system "${tmp_dir}/"* @@ -369,18 +399,10 @@ fi tmp_dir="$(mktemp -d)" clean_up_lock_file() { - if mountpoint "${master_mirror_sshfs}" > /dev/null 2>&1; then - sudo /usr/bin/umount -l "${master_mirror_sshfs}" - fi rm -f "${package_database_lock_file}" "${build_list_lock_file}" rm -rf --one-file-system "${tmp_dir}" } -if mountpoint "${master_mirror_sshfs}" > /dev/null 2>&1; then - sudo /usr/bin/umount -l "${master_mirror_sshfs}" -fi -mount "${master_mirror_sshfs}" - trap clean_up_lock_file EXIT # sanity check diff --git a/conf/default.conf b/conf/default.conf index 100ee33..314cb76 100755 --- a/conf/default.conf +++ b/conf/default.conf @@ -35,8 +35,8 @@ package_key='0x15eebadc0de' master_mirror_rsync_command='rsync --password-file=/home/slave/rsync.password' master_mirror_rsync_directory='rsync://buildmaster@mirror.archlinux32.org/packages32' -# to access the master mirror via sshfs (needs to be set up in /etc/fstab) -master_mirror_sshfs='/mnt/archlinux32' +# to access the master mirror via sftp +master_mirror_sftp_commend='sftp -b- user@mirror' # directory to keep the build log files in build_log_directory='/srv/http/build-logs' -- cgit v1.2.3