diff options
-rwxr-xr-x | parabola-mirror-repos | 65 |
1 files changed, 5 insertions, 60 deletions
diff --git a/parabola-mirror-repos b/parabola-mirror-repos index 2574803..65776b3 100755 --- a/parabola-mirror-repos +++ b/parabola-mirror-repos @@ -7,9 +7,6 @@ script_filename="$(basename "$0")" -# Create temporary log file -log_tmp="$(mktemp -p /var/tmp)" - # Default configuration values. # They can be overridden by setting the variables in the calling environment. # 1 to set, 0 to unset @@ -24,23 +21,20 @@ log_tmp="$(mktemp -p /var/tmp)" : ${max_delete:=10000} # maximum amount of files to delete in the local directory [[ ! ${bw_limit} ]] && \ : ${bw_limit:=1300} # KB/s -: ${log_file:=${script_filename}.log} -: ${options:=-rltvH --no-p --no-g --max-delete=$max_delete --exclude=.* --bwlimit=${bw_limit} --no-motd --chmod=Dug=srwx,Fug=rw --log-file=${log_tmp}} +: ${options:=-rltvH --no-p --no-g --max-delete=$max_delete --exclude=.* --bwlimit=${bw_limit} --no-motd --chmod=Dug=srwx,Fug=rw} : ${oldest_version:=100} # delete versions older than this version : ${link_dest[0]:=${base_dir}/archlinux} #: ${link_dest[1]:=${base_dir}/parabola.secondary_mirror.tmp} # link-dest does not support any network URI like rsync://... -[[ ! ${mail_to} ]] && \ - : ${mail_to:=your@mail.com} # set to enable mailing log file, or comment out to disable it : ${date_exclude:=2014.06.19} # disable running this script this date (see next line) : ${force_run:=0} # set to 1 to force running on excluded date -: ${terminal:=1} # outputs to stdout using rsync --progress (and logs to a file) +#: ${terminal:=1} # outputs to stdout using rsync --progress : ${alternative_mirror:=0} # use alternative mirror; forces no_snapshot_delete and disables snapshot_symlink_update; synchronized files end up in ${local_dir}.tmp : ${no_snapshot_delete:=0} # disable deletion of oldest snapshots; alternative_mirror enables it forcefully : ${leave_tmp:=0} # leave updated tree in {project}.tmp instead of creating a dated snapshot directory : ${snapshot_symlink_update:=1} # update symlink to last snapshot # does nothing if leave_tmp is enabled -: ${TZ:=UTC} # set timezone to UTC (affects rsync log output) +: ${TZ:=UTC} # set timezone to UTC : ${db_and_symlinks_update:=1} # update DB files and package symlinks # disabling this uses existing file /tmp/parabola-mirror which can be left over the last invocation of parabola-mirror-repos with this option set : ${pools_update:=1} # update files in package pools @@ -75,56 +69,24 @@ remote_pool_files="/tmp/${project}-remote-files" local_pool_files="/tmp/${project}-local-files" pool_files_to_delete="/tmp/${project}-to-delete-files" -# Lock with flock (provided by util-linux), save to log file and send email on exit +# Lock with flock (provided by util-linux) lockfile="/var/lock/${script_filename}" lockfd=99 _lock() { flock -$1 $lockfd; } -# Wait until there is no process writing to ${log_tmp} -# Waiting can be necessary if command groups are not executed until the end -_wait_log_tmp() { - if [[ -e "${log_tmp}" ]] ; then - while fuser -s "${log_tmp}" ; do - sleep 0.2 - done - fi -} - _no_more_locking() { set +e # Save exit status es=$? - _wait_log_tmp - cat "${log_tmp}" >> "${log_file}" - - if [[ $? == 0 ]] ; then - log_written=1 - else - echo "=> ERROR: Failed to write to log file: ${log_file}" >&2 - fi - if [[ -e ${local_dir}.tmp ]] ; then echo "=> WARNING: Temporary directory ${local_dir}.tmp remains in file system" fi - if [[ ${mail_to} ]] ; then - echo "=> Sending output to ${mail_to}" - mail -s "[$(hostname)] ${script_filename}" "${mail_to}" < "${log_tmp}" - fi - - if [[ ${log_written} == 1 ]] ; then - rm -f "${log_tmp}" - fi - if [[ $es != 0 ]] ; then - echo "=> WARNING: Unsuccessful script termination. Exit status: $es" - if [[ ${mail_to} ]] ; then - echo "=> Sending error notification to ${mail_to}" - mail -s "[$(hostname)] ${script_filename} failed. See logged output." "${mail_to}" < /dev/null - fi + echo "=> ERROR: Unsuccessful script termination. Exit status: $es" fi _lock u @@ -166,8 +128,6 @@ error() { exit 1 } -{ - if [[ ${date_exclude} && ${force_run} != 1 ]] ; then if [[ $date == ${date_exclude} ]] ; then echo "Manually disabled: ${date}. Exiting." @@ -332,10 +292,6 @@ fi echo "=> List of local repositories. Existing files will be hard linked from these instead of being fetched from the remote server." printf -- '%s\n' "${link_dest[@]}" -} &> >(tee -a "${log_tmp}") - -_wait_log_tmp - if [[ ${db_and_symlinks_update} == 1 ]] ; then echo "=> Starting to synchronize repository directories (symlinks and db.* files)" @@ -344,17 +300,12 @@ rsync $options --stats --exclude 'mips64el' --delete-after --safe-links "${link_ fi -{ - if [[ ${pools_update} == 1 ]] ; then echo "=> Starting to synchronize package pools from remote server $server" fi # end "if [[ ${pools_update} == 1 ]]" -} &> >(tee -a "${log_tmp}") - -_wait_log_tmp if [[ ${pools_update} == 1 ]] ; then @@ -367,8 +318,6 @@ if [[ ${path_list} ]] ; then rsync $options --stats --safe-links "${link_dest_option[@]/%//$path}" --link-dest="$local_dir"/"$path" ${path_list_array[@]/#/${server}/} "${local_dir}".tmp/ || error " => ERROR: rsync terminated with an error code: $?" fi -{ - if [[ ${no_snapshot_delete} != 1 ]] ; then echo "=> DRY-RUN: Delete versions older than the version number: ${oldest_version}." @@ -417,7 +366,3 @@ echo "=> Disk space report" df -h "${base_dir}" echo "=> ${script_filename} finished successfully. Finish time: $(date --rfc-3339=seconds)" - -} &> >(tee -a "${log_tmp}") - -_wait_log_tmp |