Installs bb64 correctly.
Some checks failed
Dropshell Test / Build_and_Test (push) Has been cancelled

This commit is contained in:
Your Name 2025-05-14 23:12:18 +12:00
parent ba866494cd
commit 22e37b212a
4 changed files with 37 additions and 32 deletions

View File

@ -18,7 +18,7 @@ namespace dropshell
int install_handler(const CommandContext &ctx); int install_handler(const CommandContext &ctx);
static std::vector<std::string> install_name_list = {"install","reinstall","update"}; static std::vector<std::string> install_name_list = {"install", "reinstall", "update"};
// Static registration // Static registration
struct InstallCommandRegister struct InstallCommandRegister
@ -65,7 +65,7 @@ namespace dropshell
quote(local_path + "/") + " " + quote(local_path + "/") + " " +
quote(server_env.get_SSH_USER() + "@" + server_env.get_SSH_HOST() + ":" + quote(server_env.get_SSH_USER() + "@" + server_env.get_SSH_HOST() + ":" +
remote_path + "/"); remote_path + "/");
return execute_local_command(rsync_cmd, nullptr, (silent ? cMode::Silent : cMode::None)); return execute_local_command(rsync_cmd, nullptr, (silent ? cMode::Silent : cMode::Defaults));
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -145,27 +145,29 @@ namespace dropshell
{ {
// determine the architecture of the system // determine the architecture of the system
std::string arch; std::string arch;
#ifdef __aarch64__ #ifdef __aarch64__
arch = "arm64"; arch = "arm64";
#elif __x86_64__ #elif __x86_64__
arch = "amd64"; arch = "amd64";
#endif #endif
return arch; return arch;
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// update_dropshell // update_dropshell
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
std::string _exec(const char *cmd)
std::string _exec(const char* cmd) { {
char buffer[128]; char buffer[128];
std::string result = ""; std::string result = "";
FILE* pipe = popen(cmd, "r"); FILE *pipe = popen(cmd, "r");
if (!pipe) { if (!pipe)
{
throw std::runtime_error("popen() failed!"); throw std::runtime_error("popen() failed!");
} }
while (!feof(pipe)) { while (!feof(pipe))
{
if (fgets(buffer, 128, pipe) != nullptr) if (fgets(buffer, 128, pipe) != nullptr)
result += buffer; result += buffer;
} }
@ -225,9 +227,8 @@ namespace dropshell
return 0; return 0;
std::string bash_script_2 = "docker run --rm -v " + parent_path.string() + ":/target gitea.jde.nz/public/debian-curl:latest " + std::string bash_script_2 = "docker run --rm -v " + parent_path.string() + ":/target gitea.jde.nz/public/debian-curl:latest " +
"sh -c \"mv /target/dropshell_temp /target/dropshell\""; "sh -c \"mv /target/dropshell_temp /target/dropshell\"";
rval = system(bash_script_2.c_str()); rval = system(bash_script_2.c_str());
if (rval != 0) if (rval != 0)
{ {
@ -249,8 +250,7 @@ namespace dropshell
gConfig().get_local_template_cache_path(), gConfig().get_local_template_cache_path(),
gConfig().get_local_backup_path(), gConfig().get_local_backup_path(),
gConfig().get_local_tempfiles_path(), gConfig().get_local_tempfiles_path(),
localpath::agent() localpath::agent()};
};
for (auto &p : gConfig().get_local_server_definition_paths()) for (auto &p : gConfig().get_local_server_definition_paths())
paths.push_back(p); paths.push_back(p);
@ -262,7 +262,7 @@ namespace dropshell
} }
// download bb64. // download bb64.
if (!std::filesystem::exists(localpath::agent()+"bb64")) if (!std::filesystem::exists(localpath::agent() + "bb64"))
{ {
std::string cmd = "cd " + localpath::agent() + " && curl -fsSL -o bb64 https://gitea.jde.nz/public/bb64/releases/download/latest/bb64.amd64 && chmod a+x bb64"; std::string cmd = "cd " + localpath::agent() + " && curl -fsSL -o bb64 https://gitea.jde.nz/public/bb64/releases/download/latest/bb64.amd64 && chmod a+x bb64";
int ret = system(cmd.c_str()); int ret = system(cmd.c_str());
@ -270,9 +270,11 @@ namespace dropshell
std::cout << "Downloaded bb64 to " << localpath::agent() << std::endl; std::cout << "Downloaded bb64 to " << localpath::agent() << std::endl;
else else
std::cerr << "Failed to download bb64 to " << localpath::agent() << std::endl; std::cerr << "Failed to download bb64 to " << localpath::agent() << std::endl;
} else { }
else
{
std::cout << "Updating bb64..." << std::endl; std::cout << "Updating bb64..." << std::endl;
system((localpath::agent()+"bb64 -u").c_str()); // update. system((localpath::agent() + "bb64 -u").c_str()); // update.
} }
return 0; return 0;
} }
@ -294,7 +296,6 @@ namespace dropshell
return 0; return 0;
} }
int install_server(const std::string &server) int install_server(const std::string &server)
{ {
// install the dropshell agent on the given server. // install the dropshell agent on the given server.
@ -308,23 +309,27 @@ namespace dropshell
} }
server_env_manager server_env(server); server_env_manager server_env(server);
if (!server_env.is_valid()) { if (!server_env.is_valid())
{
std::cerr << "Invalid server environment for " << server << std::endl; std::cerr << "Invalid server environment for " << server << std::endl;
return 1; return 1;
} }
// first install bb64. // first install bb64.
std::cout << "Installing bb64 on " << server << std::endl
<< std::flush;
std::string remote_cmd = std::string remote_cmd =
"ssh -p " + server_env.get_SSH_INFO().port + " " + server_env.get_SSH_INFO().user + "@" + server_env.get_SSH_INFO().host + "ssh -p " + server_env.get_SSH_INFO().port + " " + server_env.get_SSH_INFO().user + "@" + server_env.get_SSH_INFO().host +
" 'mkdir -p " + quote(agent_path) + " && curl -fsSL \"https://gitea.jde.nz/public/bb64/releases/download/latest/install.sh\" | bash -s -- " + " 'mkdir -p " + quote(agent_path) + " && curl -fsSL \"https://gitea.jde.nz/public/bb64/releases/download/latest/install.sh\" | bash -s -- " +
quote(agent_path) + " " + quote("$(id -u "+server_env.get_SSH_USER()+"):$(id -g "+server_env.get_SSH_USER()+")")+"'"; quote(agent_path) + " " + quote("$(id -u " + server_env.get_SSH_USER() + "):$(id -g " + server_env.get_SSH_USER() + ")") + "'";
std::cout << "Executing: " << remote_cmd << std::endl; std::cout << "Executing: " << remote_cmd << std::endl;
if (!execute_local_command(remote_cmd, nullptr, cMode::Silent)) { if (!execute_local_command(remote_cmd, nullptr, cMode::Silent))
std::cerr << "Failed to download bb64 to " << agent_path << " on remote server." << std::endl; std::cerr << "Failed to download bb64 to " << agent_path << " on remote server." << std::endl;
} else { else
std::cout << "Downloaded bb64 to " << agent_path << " on remote server." << std::endl; std::cout << "Downloaded bb64 to " << agent_path << " on remote server." << std::endl;
}
return 0; // NOTIMPL return 0; // NOTIMPL
} }

View File

@ -187,7 +187,7 @@ bool server_env_manager::remove_remote_dir(const std::string &dir_path, bool sil
std::cout << "Running command: " << remote_cmd << std::endl; std::cout << "Running command: " << remote_cmd << std::endl;
sCommand scommand("", remote_cmd,{}); sCommand scommand("", remote_cmd,{});
cMode mode = (silent ? cMode::Silent : cMode::None); cMode mode = (silent ? cMode::Silent : cMode::Defaults);
return execute_ssh_command(get_SSH_INFO(), scommand, mode); return execute_ssh_command(get_SSH_INFO(), scommand, mode);
} }

View File

@ -262,13 +262,13 @@ bool service_runner::interactive_ssh_service()
bool service_runner::scp_file_to_remote(const std::string &local_path, const std::string &remote_path, bool silent) bool service_runner::scp_file_to_remote(const std::string &local_path, const std::string &remote_path, bool silent)
{ {
std::string scp_cmd = "scp -P " + mServerEnv.get_SSH_PORT() + " " + quote(local_path) + " " + mServerEnv.get_SSH_USER() + "@" + mServerEnv.get_SSH_HOST() + ":" + quote(remote_path) + (silent ? " > /dev/null 2>&1" : ""); std::string scp_cmd = "scp -P " + mServerEnv.get_SSH_PORT() + " " + quote(local_path) + " " + mServerEnv.get_SSH_USER() + "@" + mServerEnv.get_SSH_HOST() + ":" + quote(remote_path) + (silent ? " > /dev/null 2>&1" : "");
return execute_local_command(scp_cmd, nullptr, (silent ? cMode::Silent : cMode::None)); return execute_local_command(scp_cmd, nullptr, (silent ? cMode::Silent : cMode::Defaults));
} }
bool service_runner::scp_file_from_remote(const std::string &remote_path, const std::string &local_path, bool silent) bool service_runner::scp_file_from_remote(const std::string &remote_path, const std::string &local_path, bool silent)
{ {
std::string scp_cmd = "scp -P " + mServerEnv.get_SSH_PORT() + " " + mServerEnv.get_SSH_USER() + "@" + mServerEnv.get_SSH_HOST() + ":" + quote(remote_path) + " " + quote(local_path) + (silent ? " > /dev/null 2>&1" : ""); std::string scp_cmd = "scp -P " + mServerEnv.get_SSH_PORT() + " " + mServerEnv.get_SSH_USER() + "@" + mServerEnv.get_SSH_HOST() + ":" + quote(remote_path) + " " + quote(local_path) + (silent ? " > /dev/null 2>&1" : "");
return execute_local_command(scp_cmd, nullptr, (silent ? cMode::Silent : cMode::None)); return execute_local_command(scp_cmd, nullptr, (silent ? cMode::Silent : cMode::Defaults));
} }
bool service_runner::restore(std::string backup_file, bool silent) bool service_runner::restore(std::string backup_file, bool silent)

View File

@ -10,7 +10,7 @@ class sCommand;
// mode bitset // mode bitset
enum class cMode { enum class cMode {
None = 0, Defaults = 0,
Interactive = 1, Interactive = 1,
Silent = 2, Silent = 2,
CaptureOutput = 4 CaptureOutput = 4
@ -31,9 +31,9 @@ typedef struct sSSHInfo {
std::string server_ID; // dropshell name for server. std::string server_ID; // dropshell name for server.
} sSSHInfo; } sSSHInfo;
bool execute_local_command(std::string command, std::string * output = nullptr, cMode mode = cMode::None); bool execute_local_command(std::string command, std::string * output = nullptr, cMode mode = cMode::Defaults);
bool execute_local_command(std::string directory_to_run_in, std::string command_to_run, const std::map<std::string, std::string> & env_vars, std::string * output = nullptr, cMode mode = cMode::None); bool execute_local_command(std::string directory_to_run_in, std::string command_to_run, const std::map<std::string, std::string> & env_vars, std::string * output = nullptr, cMode mode = cMode::Defaults);
bool execute_ssh_command(const sSSHInfo & ssh_info, const sCommand & remote_command, cMode mode = cMode::None, std::string * output = nullptr); bool execute_ssh_command(const sSSHInfo & ssh_info, const sCommand & remote_command, cMode mode = cMode::Defaults, std::string * output = nullptr);
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------