Rough update process - startup script looks for update file, executes it, reboots.

pull/257/head v0.7b1
Christopher Young 2016-02-15 17:48:33 -05:00
rodzic f63f70d1d2
commit 02bf2251d8
4 zmienionych plików z 52 dodań i 5 usunięć

Wyświetl plik

@ -30,6 +30,16 @@ case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Check if we need to run an update.
UPDATE_SCRIPT=`ls -1t /root/update*.sh | head -1`
if [ -n "$UPDATE_SCRIPT" ] ; then
# Execute the script, remove it, then reboot.
echo
echo "Running update script ${UPDATE_SCRIPT}..."
sh ${UPDATE_SCRIPT}
rm -f $UPDATE_SCRIPT
reboot
fi
start-stop-daemon --start --background --oknodo --quiet --exec "$DAEMON_SBIN" \
--pidfile "$PIDFILE" --make-pidfile -- $DAEMON_OPTS >/dev/null
log_end_msg "$?"

Wyświetl plik

@ -1236,16 +1236,41 @@ func openReplayFile(fn string) ReadCloser {
var stratuxClock *monotonic
var sigs = make(chan os.Signal, 1) // Signal catch channel (shutdown).
// Close replay log file handles.
func closeReplayLogs() {
if uatReplayWriter != nil {
uatReplayWriter.Close()
}
if esReplayWriter != nil {
esReplayWriter.Close()
}
if gpsReplayWriter != nil {
gpsReplayWriter.Close()
}
if ahrsReplayWriter != nil {
ahrsReplayWriter.Close()
}
if dump1090ReplayWriter != nil {
dump1090ReplayWriter.Close()
}
}
// Graceful shutdown.
func signalWatcher() {
sig := <-sigs
log.Printf("signal caught: %s - shutting down.\n", sig.String())
func gracefulShutdown() {
// Shut down SDRs.
sdrKill()
//TODO: Any other graceful shutdown functions.
closeReplayLogs()
os.Exit(1)
}
func signalWatcher() {
sig := <-sigs
log.Printf("signal caught: %s - shutting down.\n", sig.String())
gracefulShutdown()
}
func main() {
// Catch signals for graceful shutdown.
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

Wyświetl plik

@ -249,11 +249,15 @@ func handleShutdownRequest(w http.ResponseWriter, r *http.Request) {
syscall.Reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF)
}
func handleRebootRequest(w http.ResponseWriter, r *http.Request) {
func doReboot() {
syscall.Sync()
syscall.Reboot(syscall.LINUX_REBOOT_CMD_RESTART)
}
func handleRebootRequest(w http.ResponseWriter, r *http.Request) {
doReboot()
}
// AJAX call - /getClients. Responds with all connected clients.
func handleClientsGetRequest(w http.ResponseWriter, r *http.Request) {
setNoCache(w)
@ -263,6 +267,11 @@ func handleClientsGetRequest(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s\n", clientsJSON)
}
func delayReboot() {
time.Sleep(1 * time.Second)
doReboot()
}
// Upload an update file.
func handleUpdatePostRequest(w http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(1024 * 1024 * 32) // ~32MB update.
@ -281,6 +290,8 @@ func handleUpdatePostRequest(w http.ResponseWriter, r *http.Request) {
defer f.Close()
io.Copy(f, file)
log.Printf("%s uploaded %s for update.\n", r.RemoteAddr, updateFile)
// Successful update upload. Now reboot.
go delayReboot()
}
func setNoCache(w http.ResponseWriter) {

Wyświetl plik

@ -128,7 +128,8 @@ function SettingsCtrl($rootScope, $scope, $state, $http) {
headers: {'Content-Type': undefined },
transformRequest: angular.identity
}).success(function (data) {
alert("success");
alert("success. wait 60 seconds and refresh home page to verify new version.");
window.location.replace("/");
}).error(function (data) {
alert("error");
});