diff --git a/src/freedombone-installer b/src/freedombone-installer index ae047508532353a5ffd715e1942225885ed8f6a2..58ca2c6a50de21e6338788139870806642b64d3a 100755 --- a/src/freedombone-installer +++ b/src/freedombone-installer @@ -43,7 +43,6 @@ domain_file="$webadmin_install_dir/.temp_domain.txt" pending_removes="$webadmin_install_dir/pending_removes.txt" pending_installs="$webadmin_install_dir/pending_installs.txt" INSTALL_DIR=/root/build -install_command_was_run= function enable_webadmin_login { # switch on nginx authentication for freedombone.local @@ -97,15 +96,15 @@ function remove_temporary_setup_files { # if the file indicating that the freedombone command is running # is still present then remove it - if [ -f "$webadmin_install_dir/.running_install_command" ]; then - rm "$webadmin_install_dir/.running_install_command" + if [ -f /root/.running_install_command ]; then + rm /root/.running_install_command fi } function restore_webadmin_files { # restore files which were removed for the initial setup if [ -d "$INSTALL_DIR/tempwebadmin" ]; then - if [ ! $install_command_was_run ]; then + if [ ! -f /root/.finished_install_command ]; then mv "$INSTALL_DIR/tempwebadmin"/* "$webadmin_install_dir" fi rm -rf "$INSTALL_DIR/tempwebadmin" @@ -118,78 +117,114 @@ function set_webadmin_permissions { } function run_setup_command { + installer_script=/root/.installer.sh + { echo '#!/bin/bash'; + echo ''; + echo '#set -e'; + echo '#set -x'; + echo ''; + echo 'if [ -f /root/.finished_install_command ]; then'; + echo ' rm /root/.finished_install_command'; + echo 'fi'; + echo ''; + echo 'if [ -f /root/.running_install_command ]; then'; + echo ' touch /root/.running_install_command'; + echo 'fi'; + echo ''; + echo "if ! /usr/local/bin/freedombone -c \"$CONFIGURATION_FILE\" > /root/.install_progress; then"; + echo ' rm /root/.running_install_command'; + echo ' exit 364873'; + echo 'fi'; + echo ''; + echo 'if [ -f /root/.running_install_command ]; then'; + echo ' rm /root/.running_install_command'; + echo 'fi'; + echo ''; + echo 'if [ ! -f /root/.finished_install_command ]; then'; + echo ' exit 79623'; + echo 'fi'; + echo ''; + echo "exit 0"; } > $installer_script + chmod +x $installer_script + + # run in a separate process + ./$installer_script & + # Do the initial setup which includes email - touch "$webadmin_install_dir/.running_install_command" - /usr/local/bin/freedombone -c "$CONFIGURATION_FILE" - install_command_was_run=1 - rm "$webadmin_install_dir/.running_install_command" + #touch /root/.running_install_command + #/usr/local/bin/freedombone -c "$CONFIGURATION_FILE" + #rm /root/.running_install_command } function before_setup_runs { - install_command_was_run= - if ! grep -q 'install_final' "$COMPLETION_FILE"; then - # initial setup has not yet completed + if [ -f /root/.running_install_command ]; then + return + fi - cp "/usr/share/${PROJECT_NAME}/webadmin/setup_installing.html" "$webadmin_install_dir/index.html" + if grep -q 'install_final' "$COMPLETION_FILE"; then + return + fi - # get the username and domain from the setup.txt file - # created by setup.php - MY_USERNAME=$(cat "$setup_file") - DEFAULT_DOMAIN_NAME=${local_hostname} + cp "/usr/share/${PROJECT_NAME}/webadmin/setup_installing.html" "$webadmin_install_dir/index.html" - if [ -f "$domain_file" ]; then - DEFAULT_DOMAIN_NAME=$(cat "$domain_file") - fi + # get the username and domain from the setup.txt file + # created by setup.php + MY_USERNAME=$(cat "$setup_file") + DEFAULT_DOMAIN_NAME=${local_hostname} - # change the username in the config file - if grep -q 'MY_USERNAME=' "$CONFIGURATION_FILE"; then - if ! grep -Fxq "MY_USERNAME=$MY_USERNAME" "$CONFIGURATION_FILE"; then - sed -i "s|MY_USERNAME=.*|MY_USERNAME=$MY_USERNAME|g" "$CONFIGURATION_FILE" - fi - else - echo "MY_USERNAME=$MY_USERNAME" >> "$CONFIGURATION_FILE" - fi + if [ -f "$domain_file" ]; then + DEFAULT_DOMAIN_NAME=$(cat "$domain_file") + fi - # change the full name in the config file - if grep -q 'MY_NAME=' "$CONFIGURATION_FILE"; then - if ! grep -Fxq "MY_NAME=$MY_USERNAME" "$CONFIGURATION_FILE"; then - sed -i "s|MY_NAME=.*|MY_USERNAME=$MY_USERNAME|g" "$CONFIGURATION_FILE" - fi - else - echo "MY_NAME=$MY_USERNAME" >> "$CONFIGURATION_FILE" + # change the username in the config file + if grep -q 'MY_USERNAME=' "$CONFIGURATION_FILE"; then + if ! grep -Fxq "MY_USERNAME=$MY_USERNAME" "$CONFIGURATION_FILE"; then + sed -i "s|MY_USERNAME=.*|MY_USERNAME=$MY_USERNAME|g" "$CONFIGURATION_FILE" fi + else + echo "MY_USERNAME=$MY_USERNAME" >> "$CONFIGURATION_FILE" + fi - # change the default domain in the config file - if grep -q 'DEFAULT_DOMAIN_NAME=' "$CONFIGURATION_FILE"; then - if ! grep -Fxq "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" "$CONFIGURATION_FILE"; then - sed -i "s|DEFAULT_DOMAIN_NAME=.*|DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME|g" "$CONFIGURATION_FILE" - fi - else - echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> "$CONFIGURATION_FILE" + # change the full name in the config file + if grep -q 'MY_NAME=' "$CONFIGURATION_FILE"; then + if ! grep -Fxq "MY_NAME=$MY_USERNAME" "$CONFIGURATION_FILE"; then + sed -i "s|MY_NAME=.*|MY_USERNAME=$MY_USERNAME|g" "$CONFIGURATION_FILE" fi + else + echo "MY_NAME=$MY_USERNAME" >> "$CONFIGURATION_FILE" + fi - # ensure that minimal install is set - if grep -q 'MINIMAL_INSTALL=' "$CONFIGURATION_FILE"; then - if ! grep -q "MINIMAL_INSTALL=yes" "$CONFIGURATION_FILE"; then - sed -i 's|MINIMAL_INSTALL=.*|MINIMAL_INSTALL=yes|g' "$CONFIGURATION_FILE" - fi - else - echo 'MINIMAL_INSTALL=yes' >> "$CONFIGURATION_FILE" + # change the default domain in the config file + if grep -q 'DEFAULT_DOMAIN_NAME=' "$CONFIGURATION_FILE"; then + if ! grep -Fxq "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" "$CONFIGURATION_FILE"; then + sed -i "s|DEFAULT_DOMAIN_NAME=.*|DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME|g" "$CONFIGURATION_FILE" fi + else + echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> "$CONFIGURATION_FILE" + fi - run_setup_command + # ensure that minimal install is set + if grep -q 'MINIMAL_INSTALL=' "$CONFIGURATION_FILE"; then + if ! grep -q "MINIMAL_INSTALL=yes" "$CONFIGURATION_FILE"; then + sed -i 's|MINIMAL_INSTALL=.*|MINIMAL_INSTALL=yes|g' "$CONFIGURATION_FILE" + fi + else + echo 'MINIMAL_INSTALL=yes' >> "$CONFIGURATION_FILE" fi + + run_setup_command } function after_setup_has_finished { - if grep -q 'install_final' "$COMPLETION_FILE"; then - enable_webadmin_login - remove_initial_setup_page - set_webadmin_permissions - remove_temporary_setup_files - restore_webadmin_files - systemctl restart nginx + if ! grep -q 'install_final' "$COMPLETION_FILE"; then + return fi + enable_webadmin_login + remove_initial_setup_page + set_webadmin_permissions + remove_temporary_setup_files + restore_webadmin_files + systemctl restart nginx } function install_apps_from_webadmin { @@ -260,6 +295,25 @@ function remove_apps_from_webadmin { fi } +if [ -f /root/.finished_install_command ]; then + rm /root/.finished_install_command +fi +if [ -f /root/.running_install_command ]; then + rm /root/.running_install_command +fi + +# If the freedombone command is already running then kill its process +#shellcheck disable=SC2009 +install_process=$(ps a | grep '/usr/local/bin/freedombone -c' | head -n 1) +if [ "$install_process" ]; then + if [[ "$install_process" != *'grep'* ]]; then + install_pid=$(echo "$install_process" | awk -F ' ' '{print $1}') + if [ "$install_pid" ]; then + pkill -9 "$install_pid" + fi + fi +fi + while true do if [ -f /tmp/.upgrading ]; then diff --git a/src/freedombone-utils-final b/src/freedombone-utils-final index 0cd2c2516504bf8f646fb06431b1cfe86cbc47c9..f1f5d0ddf388ce134ed5a3cc564a610906a53e06 100755 --- a/src/freedombone-utils-final +++ b/src/freedombone-utils-final @@ -71,12 +71,24 @@ $(get_ssh_server_key) echo '' echo $'Shutting down the system. Detatch the ethernet cable, attach wifi dongle, then power on again.' echo '' + if [ ! -f /root/.finished_install_command ]; then + touch /root/.finished_install_command + fi + if [ -f /root/.running_install_command ]; then + rm /root/.running_install_command + fi "${PROJECT_NAME}-logging" off --restart systemctl poweroff return fi echo $'Turning off logging' "${PROJECT_NAME}-logging" off --restart + if [ ! -f /root/.finished_install_command ]; then + touch /root/.finished_install_command + fi + if [ -f /root/.running_install_command ]; then + rm /root/.running_install_command + fi echo $'Rebooting the system' systemctl reboot -i fi