From 6fb33c7d84a6e9fefe03ec6b0af77a01eaf1d421 Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Fri, 1 Jul 2022 12:12:46 -0700 Subject: infra-schedule-countify-collect: new tool to schedule countify --collect Signed-off-by: Robin H. Johnson --- README.md | 20 +++++++++++++++++-- infra-schedule-countify-collect | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100755 infra-schedule-countify-collect diff --git a/README.md b/README.md index a59ed18..1afdba0 100644 --- a/README.md +++ b/README.md @@ -85,8 +85,24 @@ Trustees. Just wait. `election-stats-count` runs every 30 minutes by cronjob, and prints status files into the home directories of election officials: `voter-turnout-${election_name}`. -4. Close of election: ---------------------- +4.a. Automated "Close of election" +---------------------------------- +Before the end of the election, run the script to schedule automated +`countify --collect`: +``` +$ sudo su +# cd /etc/elections +# ./infra-schedule-countify-collect ${election_name} +```` + +The job can be verified with: +``` +# atq +# at -c $JOB_ID +``` + +4.b. Manual "Close of election" +------------------------------- This is the only step where the infra contact is absolutely required. The infra contact must run `countify --collect ${election_name}` as root, which will write the master ballot & confirmation stub file to all officials: diff --git a/infra-schedule-countify-collect b/infra-schedule-countify-collect new file mode 100755 index 0000000..f44f343 --- /dev/null +++ b/infra-schedule-countify-collect @@ -0,0 +1,44 @@ +#!/bin/bash +# This will schedule an at(1) job to run for countify --collect +# Any special ballots must be in place before the end of the election. +# Infra needs to run this script, and it will schedule the rest, so infra does +# NOT need to be on hand at the end closing time. +election_name=$1 + +UID=$(id -u) +if test $UID -ne 0; then + echo "You must be root to run this" 1>&2 + exit 1 +fi + +# Find the dir, validate +for d in /etc/elections/$election_name ./$election_name ; do + files=( start stop voters ballot officials ) + good=1 + for f in ${files[@]}; do + test -e $d/${f}-$election_name || good=0 + done + if test $good -eq 1 ; then + export election_dir=$d + break + fi + unset good +done + +if test -z "$election_dir" ; then + echo "Could not find election $election_name in /etc/elections" 1>&2 + exit 1 +fi + +stopfile=$election_dir/stop-$election_name +t=$(date -u +%Y%m%d%H%M.%S -d @$(<$stopfile) ) + +cd /etc/elections +unset MAIL PWD SSH_CLIENT SSH_CONNECTION SSH_TTY + +at -t $t <<-EOF +#!/bin/sh +# This was scheduled by $SUDO_USER at $(date -uR) +cd /etc/elections +./countify --collect ${election_name} +EOF -- cgit v1.2.3-65-gdbad