#!/bin/sh # # Copyright (c) 2020 Clementine Computing LLC. # # This file is part of PopuFare. # # PopuFare is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # PopuFare is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with PopuFare. If not, see . # export DBUSER='root' export DB='busdb' verbose=0 function usage { echo "Usage: $0 [config_dir]" echo echo "The environment variable 'deploy_rev' if present will cause the assigned version string to incorporate a revision number from an external version control system, otherwise the revision number is just a timestamp." exit 1; } # If there is an external version control system in use, the calling script may throw #us a bone and give us an externally managed version number that we can use in place of the #time component of our timestamp. This makes it easy, for instance, to check out and inspect #a problematic config version after the fact if needed if you know EITHER when it was rolled, or #what version control revision it received. if [ -n "$deploy_rev" ]; then #In the case of external version control, our version string becomes YYYYMMDDvExternalRev #Example: Revision 1234 rolled on May 14th 2012 would generate a version string of '20120514v1234' version_string="`date '+%Y%m%d'`v${deploy_rev}" else #In the "dumb" base case, our version string is "YYYYMMDDHHMMSS" version_string="`date +%Y%m%d%H%M%S`" fi config_file="config-$version_string.tgz" cfg_temp="cfg_temp" rm -rf $cfg_temp/* #if nobody's set the COPY_KEYS flag in the environment, don't bother copying the keys if [ -z "$COPY_KEYS" ]; then COPY_KEYS="0" fi cfg_to="$cfg_temp/mnt/data2/config" cfgsvr_to="$cfg_to/server" if ! mkdir -p $cfg_to; then echo "Cannot make directory $cfg_to"; exit; fi if ! mkdir -p $cfgsvr_to; then echo "Cannot make directory $cfgsvr_to"; exit; fi if [ "$COPY_KEYS" -ne "0" ]; then cfg_ssh_to="$cfg_temp/root/.ssh" cfg_ppp_to="$cfg_temp/etc/ppp" if ! mkdir -p $cfg_ssh_to; then echo "Cannot make directory $cfg_ssh_to"; exit; fi if ! mkdir -p $cfg_ppp_to; then echo "Cannot make directory $cfg_ppp_to"; exit; fi key_dirs="etc root" else key_dirs="" fi do_key_copy() { if [ "$COPY_KEYS" -ne "0" ]; then cp $1/authorized_keys $cfg_ssh_to cp $1/known_hosts $cfg_ssh_to cp $1/id_rsa_bus $cfg_ppp_to fi } if [ -z "$1" -o ! -d "$1" ]; then if [ "$verbose" = "1" ]; then echo "Pulling test config files from source tree..." fi cp DIU/menu.xml DIU/drivers.txt $cfg_to cp passdb/init.scm passdb/rfid_patterns.txt passdb/rules.scm $cfg_to cp paddlemgr/101.paddle paddlemgr/9900.paddle $cfg_to cp keys/server_list $cfgsvr_to cp avls/avls_freq.txt $cfg_to do_key_copy keys else if [ "$verbose" = "1" ]; then echo "Pulling config files from $1" fi cp $1/menu.xml $1/drivers.txt $1/init.scm $1/rules.scm $1/*.paddle $1/rfid_patterns.txt $1/avls_freq.txt $cfg_to cp $1/server_list $cfgsvr_to do_key_copy $1 if [ -f $1/remove_cruft.sh ]; then cp $1/remove_cruft.sh $cfg_to; fi if [ -f $1/crontab ]; then cp $1/crontab $cfg_to; fi if [ -f $1/passes_diagnostic.sh ]; then cp $1/passes_diagnostic.sh $cfg_to; fi if [ -f $1/pass_count ]; then cp $1/pass_count $cfg_to; fi fi if [ -n "$2" ]; then cp $2 $cfg_temp/install.sh else echo '#!/bin/sh' > $cfg_temp/install.sh echo 'target_dir="/"' >> $cfg_temp/install.sh echo 'tarball="config.tgz"' >> $cfg_temp/install.sh echo 'tar -C $target_dir -zxf $tarball;' >> $cfg_temp/install.sh echo 'echo "$target_dir" > /tmp/pkg_extract_path' >> $cfg_temp/install.sh echo 'sync; killall -HUP client_supervisor;' >> $cfg_temp/install.sh echo 'echo "Done.";' >> $cfg_temp/install.sh echo 'if [ -f /mnt/data2/config/remove_cruft.sh ]; then . /mnt/data2/config/remove_cruft.sh; fi' >> $cfg_temp/install.sh echo 'if [ -f $1/crontab ]; then cp $1/crontab $cfg_to; fi ' >> $cfg_temp/install.sh echo 'if [ -f $1/passes_diagnostic.sh ]; then cp $1/passes_diagnostic.sh $cfg_to; fi' >> $cfg_temp/install.sh echo 'if [ -f $1/pass_count ]; then cp $1/pass_count $cfg_to; fi' >> $cfg_temp/install.sh chmod a+x $cfg_temp/install.sh fi pushd $cfg_temp > /dev/null tar -zcf $config_file install.sh mnt $key_dirs mv $config_file .. popd > /dev/null filesize="`stat $config_file | grep 'Size:' | egrep -o '[0-9]+' | head -n 1`" checksum="`md5sum $config_file | cut -d' ' -f1`" destpath="/home/bus/configs/$config_file" cp $config_file $destpath echo "INSERT INTO update_level (client_file , checksum , file_size , file_path , fileversion) VALUES ('config.tgz', '$checksum', $filesize, '$destpath', '$version_string');" | mysql -u $DBUSER -D $DB