From e2ca10d339fc024c2110223cd18d9e8e30b1cb45 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:59:06 +0400 Subject: [PATCH 1/9] Exception: if installing is Podman. Added a step to check the containerization package being installed. --- client/server_scripts/install_docker.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/client/server_scripts/install_docker.sh b/client/server_scripts/install_docker.sh index 619b08d6..f7409112 100644 --- a/client/server_scripts/install_docker.sh +++ b/client/server_scripts/install_docker.sh @@ -1,15 +1,19 @@ -if which apt-get > /dev/null 2>&1; then pm=$(which apt-get); silent_inst="-yq install"; check_pkgs="-yq update"; docker_pkg="docker.io"; dist="debian";\ -elif which dnf > /dev/null 2>&1; then pm=$(which dnf); silent_inst="-yq install"; check_pkgs="-yq check-update"; docker_pkg="docker"; dist="fedora";\ -elif which yum > /dev/null 2>&1; then pm=$(which yum); silent_inst="-y -q install"; check_pkgs="-y -q check-update"; docker_pkg="docker"; dist="centos";\ -elif which pacman > /dev/null 2>&1; then pm=$(which pacman); silent_inst="-S --noconfirm --noprogressbar --quiet"; check_pkgs="-Sup"; docker_pkg="docker"; dist="archlinux";\ +if which apt-get > /dev/null 2>&1; then pm=$(which apt-get); silent_inst="-yq install"; check_pkgs="-yq update"; what_pkg="-s install"; docker_pkg="docker.io"; dist="debian";\ +elif which dnf > /dev/null 2>&1; then pm=$(which dnf); silent_inst="-yq install"; check_pkgs="-yq check-update"; what_pkg="--assumeno install --setopt=tsflags=test"; docker_pkg="docker"; dist="fedora";\ +elif which yum > /dev/null 2>&1; then pm=$(which yum); silent_inst="-y -q install"; check_pkgs="-y -q check-update"; what_pkg="--assumeno install --setopt=tsflags=test"; docker_pkg="docker"; dist="centos";\ +elif which pacman > /dev/null 2>&1; then pm=$(which pacman); silent_inst="-S --noconfirm --noprogressbar --quiet"; check_pkgs="-Sup"; what_pkg="-Sp"; docker_pkg="docker"; dist="archlinux";\ else echo "Packet manager not found"; exit 1; fi;\ -echo "Dist: $dist, Packet manager: $pm, Install command: $silent_inst, Check pkgs command: $check_pkgs, Docker pkg: $docker_pkg";\ +echo "Dist: $dist, Packet manager: $pm, Install command: $silent_inst, Check pkgs command: $check_pkgs, What pkg command: $what_pkg, Docker pkg: $docker_pkg";\ if [ "$dist" = "debian" ]; then export DEBIAN_FRONTEND=noninteractive; fi;\ if ! command -v sudo > /dev/null 2>&1; then $pm $check_pkgs; $pm $silent_inst sudo; fi;\ if ! command -v fuser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst psmisc; fi;\ if ! command -v lsof > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst lsof; fi;\ if ! command -v docker > /dev/null 2>&1; then \ - sudo $pm $check_pkgs; sudo $pm $silent_inst $docker_pkg;\ + sudo $pm $check_pkgs;\ + if [ -n "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ + then echo "Docker is not supported"; exit 1;\ + else sudo $pm $silent_inst $docker_pkg;\ + fi;\ sleep 5; sudo systemctl enable --now docker; sleep 5;\ fi;\ if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = "Y" ]; then \ From 5dd644fd58bc16fb89b4de9c36d44af44f2fb050 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 05:08:15 +0400 Subject: [PATCH 2/9] Added handling to serverController Added "Docker is not supported" handling to serverController --- client/core/controllers/serverController.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/core/controllers/serverController.cpp b/client/core/controllers/serverController.cpp index d8c94f4d..6d400260 100644 --- a/client/core/controllers/serverController.cpp +++ b/client/core/controllers/serverController.cpp @@ -409,6 +409,8 @@ ErrorCode ServerController::installDockerWorker(const ServerCredentials &credent qDebug().noquote() << "ServerController::installDockerWorker" << stdOut; if (stdOut.contains("lock")) return ErrorCode::ServerPacketManagerError; + if (stdOut.contains("Docker is not supported")) + return ErrorCode::ServerDockerNotSupported; if (stdOut.contains("command not found")) return ErrorCode::ServerDockerFailedError; From 79eeb36a97c2b1c51d2bf14c1a62d2f56ca7e6b4 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 05:10:21 +0400 Subject: [PATCH 3/9] Add error ServerDockerNotSupported --- client/core/defs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/client/core/defs.h b/client/core/defs.h index 2e683314..0b19f3c8 100644 --- a/client/core/defs.h +++ b/client/core/defs.h @@ -58,6 +58,7 @@ namespace amnezia ServerUserDirectoryNotAccessible = 208, ServerUserNotAllowedInSudoers = 209, ServerUserPasswordRequired = 210, + ServerDockerNotSupported = 211, // Ssh connection errors SshRequestDeniedError = 300, From 3ecb3a9f737d369b29a10a960a00e8a931c325f4 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 05:25:52 +0400 Subject: [PATCH 4/9] Extended description of error Added extended description for Error: ServerDockerNotSupported. --- client/core/errorstrings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp index 9dcd8065..1ff7abe1 100644 --- a/client/core/errorstrings.cpp +++ b/client/core/errorstrings.cpp @@ -25,7 +25,8 @@ QString errorString(ErrorCode code) { case(ErrorCode::ServerSudoPackageIsNotPreinstalled): errorMessage = QObject::tr("The sudo package is not pre-installed on the server"); break; case(ErrorCode::ServerUserDirectoryNotAccessible): errorMessage = QObject::tr("The server user's home directory is not accessible"); break; case(ErrorCode::ServerUserNotAllowedInSudoers): errorMessage = QObject::tr("Action not allowed in sudoers"); break; - case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break; + case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); breakk; + case(ErrorCode::ServerDockerNotSupported): errorMessage = QObject::tr("Docker which is for the server is not supported"); break; // Libssh errors case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break; From ef39d66d465ef1c2c02da0ff2b440a1249bdfabf Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 05:29:52 +0400 Subject: [PATCH 5/9] Extended description of error Added extended description for Error: ServerDockerNotSupported. --- client/core/errorstrings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp index 1ff7abe1..14ed9fbf 100644 --- a/client/core/errorstrings.cpp +++ b/client/core/errorstrings.cpp @@ -25,7 +25,7 @@ QString errorString(ErrorCode code) { case(ErrorCode::ServerSudoPackageIsNotPreinstalled): errorMessage = QObject::tr("The sudo package is not pre-installed on the server"); break; case(ErrorCode::ServerUserDirectoryNotAccessible): errorMessage = QObject::tr("The server user's home directory is not accessible"); break; case(ErrorCode::ServerUserNotAllowedInSudoers): errorMessage = QObject::tr("Action not allowed in sudoers"); break; - case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); breakk; + case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break; case(ErrorCode::ServerDockerNotSupported): errorMessage = QObject::tr("Docker which is for the server is not supported"); break; // Libssh errors From ed1d67fcdf5fb2e5874b7bc9b7600176ce94a18c Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 07:04:41 +0400 Subject: [PATCH 6/9] Exceptions for podman-docker Exception: if podman-docker is already installed. Skip update: if podman-docker might be installed during the update. --- client/server_scripts/install_docker.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/client/server_scripts/install_docker.sh b/client/server_scripts/install_docker.sh index f7409112..2ed7aaec 100644 --- a/client/server_scripts/install_docker.sh +++ b/client/server_scripts/install_docker.sh @@ -10,9 +10,9 @@ if ! command -v fuser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $sil if ! command -v lsof > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst lsof; fi;\ if ! command -v docker > /dev/null 2>&1; then \ sudo $pm $check_pkgs;\ - if [ -n "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ - then echo "Docker is not supported"; exit 1;\ - else sudo $pm $silent_inst $docker_pkg;\ + if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ + then sudo $pm $silent_inst $docker_pkg;\ + else echo "Docker is not supported"; exit 1;\ fi;\ sleep 5; sudo systemctl enable --now docker; sleep 5;\ fi;\ @@ -20,8 +20,15 @@ if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = "Y" ]; then if ! command -v apparmor_parser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst apparmor; fi;\ fi;\ if [ "$(systemctl is-active docker)" != "active" ]; then \ - sudo $pm $check_pkgs; sudo $pm $silent_inst $docker_pkg;\ - sleep 5; sudo systemctl start docker; sleep 5;\ + if [ -z "$(sudo docker --version 2>/dev/null | grep podman)" ];\ + then \ + sudo $pm $check_pkgs;\ + if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ + then sudo $pm $silent_inst $docker_pkg;\ + fi;\ + sleep 5; sudo systemctl start docker; sleep 5;\ + else echo "Docker is not supported";\ + fi;\ fi;\ if ! command -v sudo > /dev/null 2>&1; then echo "Failed to install sudo, command not found"; exit 1; fi;\ docker --version From 8331b9ea52605e1b3236c26589aa14e40f132d11 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 07:26:17 +0400 Subject: [PATCH 7/9] Fix error description Fix error description for podman-docker. Checking the docker version via sudo, for correct detection of podman-docker. --- client/core/controllers/serverController.cpp | 4 ++-- client/core/defs.h | 2 +- client/core/errorstrings.cpp | 2 +- client/server_scripts/install_docker.sh | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/core/controllers/serverController.cpp b/client/core/controllers/serverController.cpp index 6d400260..ac5885be 100644 --- a/client/core/controllers/serverController.cpp +++ b/client/core/controllers/serverController.cpp @@ -409,8 +409,8 @@ ErrorCode ServerController::installDockerWorker(const ServerCredentials &credent qDebug().noquote() << "ServerController::installDockerWorker" << stdOut; if (stdOut.contains("lock")) return ErrorCode::ServerPacketManagerError; - if (stdOut.contains("Docker is not supported")) - return ErrorCode::ServerDockerNotSupported; + if (stdOut.contains("Podman is not supported")) + return ErrorCode::ServerPodmanIsNotSupported; if (stdOut.contains("command not found")) return ErrorCode::ServerDockerFailedError; diff --git a/client/core/defs.h b/client/core/defs.h index 0b19f3c8..0a4cfdf1 100644 --- a/client/core/defs.h +++ b/client/core/defs.h @@ -58,7 +58,7 @@ namespace amnezia ServerUserDirectoryNotAccessible = 208, ServerUserNotAllowedInSudoers = 209, ServerUserPasswordRequired = 210, - ServerDockerNotSupported = 211, + ServerPodmanIsNotSupported = 211, // Ssh connection errors SshRequestDeniedError = 300, diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp index 14ed9fbf..eebd6320 100644 --- a/client/core/errorstrings.cpp +++ b/client/core/errorstrings.cpp @@ -26,7 +26,7 @@ QString errorString(ErrorCode code) { case(ErrorCode::ServerUserDirectoryNotAccessible): errorMessage = QObject::tr("The server user's home directory is not accessible"); break; case(ErrorCode::ServerUserNotAllowedInSudoers): errorMessage = QObject::tr("Action not allowed in sudoers"); break; case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break; - case(ErrorCode::ServerDockerNotSupported): errorMessage = QObject::tr("Docker which is for the server is not supported"); break; + case(ErrorCode::ServerPodmanIsNotSupported): errorMessage = QObject::tr("Server error: podman-docker is not supported"); break; // Libssh errors case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break; diff --git a/client/server_scripts/install_docker.sh b/client/server_scripts/install_docker.sh index 2ed7aaec..3b2a8236 100644 --- a/client/server_scripts/install_docker.sh +++ b/client/server_scripts/install_docker.sh @@ -12,7 +12,7 @@ if ! command -v docker > /dev/null 2>&1; then \ sudo $pm $check_pkgs;\ if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ then sudo $pm $silent_inst $docker_pkg;\ - else echo "Docker is not supported"; exit 1;\ + else echo "Podman is not supported"; exit 1;\ fi;\ sleep 5; sudo systemctl enable --now docker; sleep 5;\ fi;\ @@ -27,8 +27,8 @@ if [ "$(systemctl is-active docker)" != "active" ]; then \ then sudo $pm $silent_inst $docker_pkg;\ fi;\ sleep 5; sudo systemctl start docker; sleep 5;\ - else echo "Docker is not supported";\ + else echo "Podman is not supported";\ fi;\ fi;\ if ! command -v sudo > /dev/null 2>&1; then echo "Failed to install sudo, command not found"; exit 1; fi;\ -docker --version +sudo docker --version From 5c494fa74332eb9f34ea97f7ee3b2b0ce3a6597c Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Mon, 7 Apr 2025 14:16:07 +0400 Subject: [PATCH 8/9] Checking docker status Checking Docker activity. Checking and changing locale. Changing "command not found" handling for sh compatibility. --- client/core/controllers/serverController.cpp | 4 +++- client/core/defs.h | 1 + client/core/errorstrings.cpp | 1 + client/server_scripts/install_docker.sh | 5 ++++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client/core/controllers/serverController.cpp b/client/core/controllers/serverController.cpp index ac5885be..071a2bc9 100644 --- a/client/core/controllers/serverController.cpp +++ b/client/core/controllers/serverController.cpp @@ -411,7 +411,9 @@ ErrorCode ServerController::installDockerWorker(const ServerCredentials &credent return ErrorCode::ServerPacketManagerError; if (stdOut.contains("Podman is not supported")) return ErrorCode::ServerPodmanIsNotSupported; - if (stdOut.contains("command not found")) + if (stdOut.contains("Status Docker is not active")) + return ErrorCode::ServerDockerStatusIsNotActive; + if (stdOut.contains("sudo:") && stdOut.contains("not found")) return ErrorCode::ServerDockerFailedError; return error; diff --git a/client/core/defs.h b/client/core/defs.h index 0a4cfdf1..d6d28635 100644 --- a/client/core/defs.h +++ b/client/core/defs.h @@ -59,6 +59,7 @@ namespace amnezia ServerUserNotAllowedInSudoers = 209, ServerUserPasswordRequired = 210, ServerPodmanIsNotSupported = 211, + ServerDockerStatusIsNotActive = 212, // Ssh connection errors SshRequestDeniedError = 300, diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp index eebd6320..bf462ce2 100644 --- a/client/core/errorstrings.cpp +++ b/client/core/errorstrings.cpp @@ -27,6 +27,7 @@ QString errorString(ErrorCode code) { case(ErrorCode::ServerUserNotAllowedInSudoers): errorMessage = QObject::tr("Action not allowed in sudoers"); break; case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break; case(ErrorCode::ServerPodmanIsNotSupported): errorMessage = QObject::tr("Server error: podman-docker is not supported"); break; + case(ErrorCode::ServerDockerStatusIsNotActive): errorMessage = QObject::tr("Server error: Docker status is not active"); break; // Libssh errors case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break; diff --git a/client/server_scripts/install_docker.sh b/client/server_scripts/install_docker.sh index 3b2a8236..2ee9a595 100644 --- a/client/server_scripts/install_docker.sh +++ b/client/server_scripts/install_docker.sh @@ -4,6 +4,7 @@ elif which yum > /dev/null 2>&1; then pm=$(which yum); silent_inst="-y -q instal elif which pacman > /dev/null 2>&1; then pm=$(which pacman); silent_inst="-S --noconfirm --noprogressbar --quiet"; check_pkgs="-Sup"; what_pkg="-Sp"; docker_pkg="docker"; dist="archlinux";\ else echo "Packet manager not found"; exit 1; fi;\ echo "Dist: $dist, Packet manager: $pm, Install command: $silent_inst, Check pkgs command: $check_pkgs, What pkg command: $what_pkg, Docker pkg: $docker_pkg";\ +echo $LANG | grep -qE '^(en_US.UTF-8|C.UTF-8|C)$' || export LC_ALL=C;\ if [ "$dist" = "debian" ]; then export DEBIAN_FRONTEND=noninteractive; fi;\ if ! command -v sudo > /dev/null 2>&1; then $pm $check_pkgs; $pm $silent_inst sudo; fi;\ if ! command -v fuser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst psmisc; fi;\ @@ -27,8 +28,10 @@ if [ "$(systemctl is-active docker)" != "active" ]; then \ then sudo $pm $silent_inst $docker_pkg;\ fi;\ sleep 5; sudo systemctl start docker; sleep 5;\ + if [ "$(systemctl is-active docker)" != "active" ];\ + then echo "Status Docker is not active";\ + fi;\ else echo "Podman is not supported";\ fi;\ fi;\ -if ! command -v sudo > /dev/null 2>&1; then echo "Failed to install sudo, command not found"; exit 1; fi;\ sudo docker --version From b8b3949f1303de42f90a008bae71f7216b3c41c7 Mon Sep 17 00:00:00 2001 From: lunardunno <126363523+lunardunno@users.noreply.github.com> Date: Wed, 30 Apr 2025 19:18:01 +0400 Subject: [PATCH 9/9] Increasing readability --- client/server_scripts/install_docker.sh | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/client/server_scripts/install_docker.sh b/client/server_scripts/install_docker.sh index 2ee9a595..f41ce3dd 100644 --- a/client/server_scripts/install_docker.sh +++ b/client/server_scripts/install_docker.sh @@ -11,25 +11,24 @@ if ! command -v fuser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $sil if ! command -v lsof > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst lsof; fi;\ if ! command -v docker > /dev/null 2>&1; then \ sudo $pm $check_pkgs;\ - if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ - then sudo $pm $silent_inst $docker_pkg;\ + if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ]; then \ + sudo $pm $silent_inst $docker_pkg;\ else echo "Podman is not supported"; exit 1;\ fi;\ sleep 5; sudo systemctl enable --now docker; sleep 5;\ fi;\ -if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = "Y" ]; then \ - if ! command -v apparmor_parser > /dev/null 2>&1; then sudo $pm $check_pkgs; sudo $pm $silent_inst apparmor; fi;\ +if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = "Y" ] && ! command -v apparmor_parser > /dev/null 2>&1; then \ + sudo $pm $check_pkgs; sudo $pm $silent_inst apparmor;\ fi;\ if [ "$(systemctl is-active docker)" != "active" ]; then \ - if [ -z "$(sudo docker --version 2>/dev/null | grep podman)" ];\ - then \ + if [ -z "$(sudo docker --version 2>/dev/null | grep podman)" ]; then \ sudo $pm $check_pkgs;\ - if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ];\ - then sudo $pm $silent_inst $docker_pkg;\ + if [ -z "$(sudo $pm $what_pkg $docker_pkg 2>/dev/null | grep podman)" ]; then \ + sudo $pm $silent_inst $docker_pkg;\ fi;\ sleep 5; sudo systemctl start docker; sleep 5;\ - if [ "$(systemctl is-active docker)" != "active" ];\ - then echo "Status Docker is not active";\ + if [ "$(systemctl is-active docker)" != "active" ]; then \ + echo "Status Docker is not active";\ fi;\ else echo "Podman is not supported";\ fi;\