| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #!/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 <https://www.gnu.org/licenses/>.
- #
- 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
|