diff --git a/README.md b/README.md index a13d176b6..d946b8ec6 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ You can install and setup servers automatically using our script: ```sh curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/simplex-chat/simplexmq/stable/install.sh -o simplex-server-install.sh \ -&& if echo '797eeb941ccbf2d4125b174bf44088ffd0e2ef0c64c66d7ad055ebd3753d1ced simplex-server-install.sh' | sha256sum -c; then chmod +x ./simplex-server-install.sh && ./simplex-server-install.sh; rm ./simplex-server-install.sh; else echo "SHA-256 checksum is incorrect!" && rm ./simplex-server-install.sh; fi +&& if echo 'b8cf2be103f21f9461d9a500bcd3db06ab7d01d68871b07f4bd245195cbead1d simplex-server-install.sh' | sha256sum -c; then chmod +x ./simplex-server-install.sh && ./simplex-server-install.sh; rm ./simplex-server-install.sh; else echo "SHA-256 checksum is incorrect!" && rm ./simplex-server-install.sh; fi ``` ### Build from source diff --git a/install.sh b/install.sh index 42ef8027b..18c2cdf11 100755 --- a/install.sh +++ b/install.sh @@ -11,6 +11,7 @@ scripts_systemd_smp="$scripts/smp-server.service" scripts_systemd_xftp="$scripts/xftp-server.service" scripts_update="$scripts/simplex-servers-update" scripts_uninstall="$scripts/simplex-servers-uninstall" +scripts_stopscript="$scripts/simplex-servers-stopscript" # Default installation paths path_bin="/usr/local/bin" @@ -18,6 +19,7 @@ path_bin_smp="$path_bin/smp-server" path_bin_xftp="$path_bin/xftp-server" path_bin_update="$path_bin/simplex-servers-update" path_bin_uninstall="$path_bin/simplex-servers-uninstall" +path_bin_stopscript="$path_bin/simplex-servers-stopscript" path_conf_etc="/etc/opt" path_conf_var="/var/opt" @@ -60,8 +62,8 @@ ${GRN}3.${NC} Setup user for each server: ${GRN}4.${NC} Create systemd services: - smp: ${YLW}${path_systemd_smp}${NC} - xftp: ${YLW}${path_systemd_xftp}${NC} -${GRN}5.${NC} Install update and uninstallation script: - - all: ${YLW}${path_bin_update}${NC}, ${YLW}${path_bin_uninstall}${NC} +${GRN}5.${NC} Install stopscript (systemd), update and uninstallation script: + - all: ${YLW}${path_bin_update}${NC}, ${YLW}${path_bin_uninstall}${NC}, ${YLW}${path_bin_stopscript}${NC} Press ${GRN}ENTER${NC} to continue or ${RED}Ctrl+C${NC} to cancel installation" @@ -100,6 +102,7 @@ setup_systemd() { setup_scripts() { curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_update" -o "$path_bin_update" && chmod +x "$path_bin_update" curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_uninstall" -o "$path_bin_uninstall" && chmod +x "$path_bin_uninstall" + curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_stopscript" -o "$path_bin_stopscript" && chmod +x "$path_bin_stopscript" } checks() { @@ -131,7 +134,7 @@ main() { setup_systemd printf "${GRN} Done!${NC}\n" - printf "Installing update and uninstallation script..." + printf "Installing stopscript, update and uninstallation script..." setup_scripts printf "${GRN} Done!${NC}\n" diff --git a/scripts/main/simplex-servers-stopscript b/scripts/main/simplex-servers-stopscript new file mode 100755 index 000000000..53d9f13bf --- /dev/null +++ b/scripts/main/simplex-servers-stopscript @@ -0,0 +1,30 @@ +#!/usr/bin/env sh +set -eu + +path_conf_var="/var/opt" +path_conf_smp="$path_conf_var/simplex" +path_conf_xftp="$path_conf_var/simplex-xftp" +path_conf_storelog_smp="$path_conf_smp/smp-server-store.log" +path_conf_storelog_xftp="$path_conf_xftp/file-server-store.log" +date="$(date -u '+%Y-%m-%dT%H:%M:%S')" + +backup_smp() { + if [ -e "$path_conf_storelog_smp" ]; then + cp "$path_conf_storelog_smp" "${path_conf_storelog_smp}.${date:-date-failed}" + fi +} + +backup_xftp() { + if [ -e "$path_conf_storelog_xftp" ]; then + cp "$path_conf_storelog_xftp" "${path_conf_storelog_xftp}.${date:-date-failed}" + fi +} + +if [ "$1" = 'smp-server' ]; then + backup_smp +elif [ "$1" = 'xftp-server' ]; then + backup_xftp +else + backup_smp + backup_xftp +fi diff --git a/scripts/main/simplex-servers-uninstall b/scripts/main/simplex-servers-uninstall index f08fc0efc..4860dff34 100755 --- a/scripts/main/simplex-servers-uninstall +++ b/scripts/main/simplex-servers-uninstall @@ -13,6 +13,11 @@ fi printf "${RED}This action will permanently remove all configs, directories, binaries from Installation Script. Please backup any relevant configs if they are needed.${NC}\n\nPress ${GRN}ENTER${NC} to continue or ${RED}Ctrl+C${NC} to cancel installation" read ans -rm -rf /var/opt/simplex /etc/opt/simplex /var/opt/simplex-xftp /etc/opt/simplex-xftp /srv/xftp /etc/systemd/system/smp-server.service /etc/systemd/system/xftp-server.service /usr/local/bin/smp-server /usr/local/bin/xftp-server /usr/local/bin/simplex-servers-update /usr/local/bin/simplex-servers-uninstall && userdel smp && userdel xftp +systemctl stop smp-server +systemctl stop xftp-server + +rm -rf /var/opt/simplex /etc/opt/simplex /var/opt/simplex-xftp /etc/opt/simplex-xftp /srv/xftp /etc/systemd/system/smp-server.service /etc/systemd/system/xftp-server.service /usr/local/bin/smp-server /usr/local/bin/xftp-server /usr/local/bin/simplex-servers-update /usr/local/bin/simplex-servers-uninstall + +userdel smp && userdel xftp printf "Uninstallation is complete! Thanks for trying out SimpleX!\n" diff --git a/scripts/main/simplex-servers-update b/scripts/main/simplex-servers-update index abedb03d4..c1c7aa738 100755 --- a/scripts/main/simplex-servers-update +++ b/scripts/main/simplex-servers-update @@ -11,6 +11,7 @@ scripts_systemd_smp="$scripts/smp-server.service" scripts_systemd_xftp="$scripts/xftp-server.service" scripts_update="$scripts/simplex-servers-update" scripts_uninstall="$scripts/simplex-servers-uninstall" +scripts_stopscript="$scripts/simplex-servers-stopscript" # Default installation paths path_bin="/usr/local/bin" @@ -18,6 +19,7 @@ path_bin_smp="$path_bin/smp-server" path_bin_xftp="$path_bin/xftp-server" path_bin_update="$path_bin/simplex-servers-update" path_bin_uninstall="$path_bin/simplex-servers-uninstall" +path_bin_stopscript="$path_bin/simplex-servers-stopscript" path_systemd="/etc/systemd/system" path_systemd_smp="$path_systemd/smp-server.service" @@ -27,6 +29,7 @@ path_systemd_xftp="$path_systemd/xftp-server.service" path_tmp_bin="$(mktemp -d)" path_tmp_bin_update="$path_tmp_bin/simplex-servers-update" path_tmp_bin_uninstall="$path_tmp_bin/simplex-servers-uninstall" +path_tmp_bin_stopscript="$path_tmp_bin/simplex-servers-stopscript" path_tmp_systemd_smp="$path_tmp_bin/smp-server.service" path_tmp_systemd_xftp="$path_tmp_bin/xftp-server.service" @@ -43,8 +46,9 @@ remote_version="$(curl --proto '=https' --tlsv1.2 -sSf -L https://api.github.com update_scripts() { curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_update" -o "$path_tmp_bin_update" && chmod +x "$path_tmp_bin_update" curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_uninstall" -o "$path_tmp_bin_uninstall" && chmod +x "$path_tmp_bin_uninstall" + curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_stopscript" -o "$path_tmp_bin_stopscript" && chmod +x "$path_tmp_bin_stopscript" - if diff -q "$path_bin_uninstall" "$path_tmp_bin_uninstall" > /dev/null; then + if diff -q "$path_bin_uninstall" "$path_tmp_bin_uninstall" > /dev/null 2>&1; then printf -- "- ${YLW}Uninstall script is up-to-date${NC}.\n" rm "$path_tmp_bin_uninstall" else @@ -52,7 +56,15 @@ update_scripts() { mv "$path_tmp_bin_uninstall" "$path_bin_uninstall" printf "${GRN}Done!${NC}\n" fi - if diff -q "$path_bin_update" "$path_tmp_bin_update" > /dev/null; then + if diff -q "$path_bin_stopscript" "$path_tmp_bin_stopscript" > /dev/null 2>&1; then + printf -- "- ${YLW}Stopscript script is up-to-date${NC}.\n" + rm "$path_tmp_bin_stopscript" + else + printf -- "- Updating stopscript script..." + mv "$path_tmp_bin_stopscript" "$path_bin_stopscript" + printf "${GRN}Done!${NC}\n" + fi + if diff -q "$path_bin_update" "$path_tmp_bin_update" > /dev/null 2>&1; then printf -- "- ${YLW}Update script is up-to-date${NC}.\n" rm "$path_tmp_bin_update" else @@ -68,7 +80,7 @@ update_systemd() { curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_systemd_smp" -o "$path_tmp_systemd_smp" curl --proto '=https' --tlsv1.2 -sSf -L "$scripts_systemd_xftp" -o "$path_tmp_systemd_xftp" - if diff -q "$path_systemd_smp" "$path_tmp_systemd_smp" > /dev/null; then + if diff -q "$path_systemd_smp" "$path_tmp_systemd_smp" > /dev/null 2>&1; then printf -- "- ${YLW}smp-server service is up-to-date${NC}.\n" rm "$path_tmp_systemd_smp" else @@ -77,7 +89,7 @@ update_systemd() { systemctl daemon-reload printf "${GRN}Done!${NC}\n" fi - if diff -q "$path_systemd_xftp" "$path_tmp_systemd_xftp" > /dev/null; then + if diff -q "$path_systemd_xftp" "$path_tmp_systemd_xftp" > /dev/null 2>&1; then printf -- "- ${YLW}xftp-server service is up-to-date${NC}.\n" rm "$path_tmp_systemd_xftp" else @@ -96,15 +108,15 @@ update_bins() { printf "${GRN}Done!${NC}\n" printf -- "- Updating smp-server bin to %s..." "$remote_version" - curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$bin_path_smp" && chmod +x "$bin_path_smp" + curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$path_bin_smp" && chmod +x "$path_bin_smp" printf "${GRN}Done!${NC}\n" printf -- "- Starting smp-server service..." - systemctl stop smp-server + systemctl start smp-server printf "${GRN}Done!${NC}\n" else printf -- "- Updating smp-server bin..." - curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$bin_path_smp" && chmod +x "$bin_path_smp" + curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$path_bin_smp" && chmod +x "$path_bin_smp" printf "${GRN}Done!${NC}\n" fi @@ -114,15 +126,15 @@ update_bins() { printf "${GRN}Done!${NC}\n" printf -- "- Updating xftp-server bin to %s..." "$remote_version" - curl --proto '=https' --tlsv1.2 -sSf -L "$bin_xftp" -o "$bin_path_xftp" && chmod +x "$bin_path_xftp" + curl --proto '=https' --tlsv1.2 -sSf -L "$bin_xftp" -o "$path_bin_xftp" && chmod +x "$path_bin_xftp" printf "${GRN}Done!${NC}\n" printf -- "- Starting xftp-server service..." - systemctl stop xftp-server + systemctl start xftp-server printf "${GRN}Done!${NC}\n" else printf -- "- Updating xftp-server bin..." - curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$bin_path_xftp" && chmod +x "$bin_path_xftp" + curl --proto '=https' --tlsv1.2 -sSf -L "$bin_smp" -o "$path_bin_xftp" && chmod +x "$path_bin_xftp" printf "${GRN}Done!${NC}\n" fi else @@ -155,6 +167,8 @@ main() { printf "Updating simplex server binaries...\n" update_bins + + rm -rf "$path_tmp_bin" } main "$@" diff --git a/scripts/main/smp-server.service b/scripts/main/smp-server.service index c3bd3d17a..3a845f1c6 100644 --- a/scripts/main/smp-server.service +++ b/scripts/main/smp-server.service @@ -6,7 +6,7 @@ User=smp Group=smp Type=simple ExecStart=/usr/local/bin/smp-server start +RTS -N -RTS -ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex/smp-server-store.log" ] && cp "/var/opt/simplex/smp-server-store.log" "/var/opt/simplex/smp-server-store.log.$(date +%%Y-%%m-%%dT%%H:%%M:%%S)' +ExecStopPost=/usr/local/bin/simplex-servers-stopscript smp-server LimitNOFILE=65535 KillSignal=SIGINT TimeoutStopSec=infinity diff --git a/scripts/main/xftp-server.service b/scripts/main/xftp-server.service index 5e9455b5f..51c8b1cd9 100644 --- a/scripts/main/xftp-server.service +++ b/scripts/main/xftp-server.service @@ -6,7 +6,7 @@ User=xftp Group=xftp Type=simple ExecStart=/usr/local/bin/xftp-server start +RTS -N -RTS -ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex-xftp/file-server-store.log" ] && cp "/var/opt/simplex-xftp/file-server-store.log" "/var/opt/simplex-xftp/file-server-store.log.$(date +%%Y-%%m-%%dT%%H:%%M:%%S)' +ExecStopPost=/usr/local/bin/simplex-servers-stopscript xftp-server LimitNOFILE=65535 KillSignal=SIGINT TimeoutStopSec=infinity