diff options
-rw-r--r-- | src/sledjchisl/sledjchisl.c | 78 |
1 files changed, 35 insertions, 43 deletions
diff --git a/src/sledjchisl/sledjchisl.c b/src/sledjchisl/sledjchisl.c index e076654..ab81ee1 100644 --- a/src/sledjchisl/sledjchisl.c +++ b/src/sledjchisl/sledjchisl.c | |||
@@ -1342,7 +1342,7 @@ void forEachSim(char *verb, simFunction func, simFunction not) | |||
1342 | q1 = q0->v.t->get(q0->v.t, "type", NULL, false); if (NULL != q1) type = q1->v.s; | 1342 | q1 = q0->v.t->get(q0->v.t, "type", NULL, false); if (NULL != q1) type = q1->v.s; |
1343 | if (0 == panes) | 1343 | if (0 == panes) |
1344 | { | 1344 | { |
1345 | pane = 2; | 1345 | pane = 3; |
1346 | window = 0; | 1346 | window = 0; |
1347 | type = Ttab; | 1347 | type = Ttab; |
1348 | } | 1348 | } |
@@ -1815,7 +1815,11 @@ void prepSims(simData *simd, char *sim, char *type, int count, int window, int p | |||
1815 | 1815 | ||
1816 | // Make sure all tmux windows and panes are startned. | 1816 | // Make sure all tmux windows and panes are startned. |
1817 | if (0 == panes) | 1817 | if (0 == panes) |
1818 | doTmuxCmd("split-window -hp 50 -d -t '%s:0.1'", Tconsole); | 1818 | { |
1819 | // doTmuxCmd("split-window -hp 50 -d -t '%s:0.0'", Tconsole); | ||
1820 | // doTmuxCmd("split-window -vp 50 -d -t '%s:0.1'", Tconsole); | ||
1821 | // doTmuxCmd("split-window -vp 50 -d -t '%s:0.0'", Tconsole); | ||
1822 | } | ||
1819 | else if (0 == pane) | 1823 | else if (0 == pane) |
1820 | { | 1824 | { |
1821 | doTmuxCmd("new-window -dc '%s/current/bin' -n '%s' -t '%s:%d'", scRoot, type, Tconsole, window); | 1825 | doTmuxCmd("new-window -dc '%s/current/bin' -n '%s' -t '%s:%d'", scRoot, type, Tconsole, window); |
@@ -8264,36 +8268,42 @@ Build the OpenSim. | |||
8264 | { | 8268 | { |
8265 | if (0 != WEXITSTATUS(i)) // No such session, create it. | 8269 | if (0 != WEXITSTATUS(i)) // No such session, create it. |
8266 | { | 8270 | { |
8271 | char *pre = xmprintf("sudo -Hu %s ", scUser); | ||
8272 | |||
8267 | memset(toybuf, 0, sizeof(toybuf)); | 8273 | memset(toybuf, 0, sizeof(toybuf)); |
8268 | if (strcmp(pw->pw_name, scUser) == 0) | 8274 | if (strcmp(pw->pw_name, scUser) == 0) |
8269 | { | 8275 | { |
8270 | I("Not running inside the proper tmux server, starting it."); | 8276 | I("Not running inside the proper tmux server, starting it."); |
8271 | snprintf(toybuf, sizeof(toybuf), | 8277 | pre = xmprintf(""); |
8272 | // Set x,y to huge values, to work around an OpenSim bug. | ||
8273 | // bash -c "bash -c '...; bash'" coz sudo, su, runuser, and start-stop-daemon insist. Pffft | ||
8274 | // Double the export PATH='%s:$PATH coz tmux sucks at that. | ||
8275 | "bash -c \"%s %s/%s set-option -g default-command 'export PATH=%s:$PATH; bash'\\; " | ||
8276 | "new-session -d -x 256 -y 420 -s %s -n '%s' \\; " | ||
8277 | "split-window -vp 50 -t '%s:' bash -c 'export PATH=%s:$PATH; /usr/bin/valgrind --leak-check=full ./sledjchisl; cd %s/current/bin; bash'\"", | ||
8278 | Tcmd, scRun, Tsocket, scBin, Tconsole, Ttab, Tconsole, scBin, scBin, scRoot); | ||
8279 | } | 8278 | } |
8280 | else | 8279 | else |
8281 | { | 8280 | { |
8282 | I("Not running inside the proper tmux server, starting it with sudo."); | 8281 | I("Not running inside the proper tmux server, starting it with sudo."); |
8283 | // The sudo is only so that the session is owned by opensim, otherwise it's owned by whoever ran this script, which is a likely security hole. | 8282 | // The sudo is only so that the session is owned by opensim, otherwise it's owned by whoever ran this script, which is a likely security hole. |
8284 | // After the session is created, we rely on the scRun directory to be group sticky, so that anyone in the opensim group can attach to the tmux socket. | 8283 | // After the session is created, we rely on the scRun directory to be group sticky, so that anyone in the opensim group can attach to the tmux socket. |
8285 | snprintf(toybuf, sizeof(toybuf), | 8284 | pre = xmprintf("sudo -Hu %s ", scUser); |
8286 | // Set x,y to huge values, to work around an OpenSim bug. | ||
8287 | "sudo -Hu %s %s %s/%s set-option -g default-command 'export PATH=%s:$PATH; bash'\\; " | ||
8288 | "new-session -d -x 256 -y 420 -s %s -n '%s' \\; " | ||
8289 | "split-window -vp 50 -t '%s:' bash -c 'export PATH=%s:$PATH; /usr/bin/valgrind --leak-check=full ./sledjchisl; cd %s/current/bin; bash'", | ||
8290 | scUser, Tcmd, scRun, Tsocket, scBin, Tconsole, Ttab, Tconsole, scBin, scRoot); | ||
8291 | } | 8285 | } |
8286 | snprintf(toybuf, sizeof(toybuf), | ||
8287 | "%s %s %s/%s set-option -g default-command 'export PATH=%s:$PATH; bash'\\; " | ||
8288 | // Set x,y to huge values, to work around an OpenSim bug. | ||
8289 | "new-session -d -x 256 -y 420 -s %s -n '%s' bash -c 'export PATH=%s:$PATH; /usr/bin/valgrind --leak-check=full ./sledjchisl; cd %s/current/bin; bash' \\; " | ||
8290 | "split-window -vp 50 -d -t '%s:0.0' \\; " | ||
8291 | "split-window -hp 50 -d -t '%s:0.1' \\; " | ||
8292 | "split-window -hp 50 -d -t '%s:0.0' " | ||
8293 | // TODO - remove this once we handle the fcgi stuff ourselves. | ||
8294 | // Make the FCGI socket world read / write, coz we can't set it to group www-data, since -G only works for root, and we ain't root. | ||
8295 | // TODO - BIG SECURITY HOLE??? | ||
8296 | "bash -c 'export PATH=%s:$PATH; " | ||
8297 | "spawn-fcgi -n -u %s -s %s/sledjchisl.socket -M 0666 -G www-data -- /usr/bin/valgrind --leak-check=full sledjchisl; " | ||
8298 | "cd %s/current/bin; bash'" | ||
8299 | , | ||
8300 | pre, Tcmd, scRun, Tsocket, scBin, Tconsole, Ttab, scBin, scRoot, Tconsole, Tconsole, Tconsole, scBin, scUser, scRun, scBin, scRoot); | ||
8301 | free(pre); | ||
8292 | if (shellMeFail(toybuf)) | 8302 | if (shellMeFail(toybuf)) |
8293 | E("tmux new-session command failed! %s", toybuf); | 8303 | E("tmux new-session command failed! %s", toybuf); |
8294 | else | 8304 | else |
8295 | { | 8305 | { |
8296 | if (shellMeFail("%s %s/%s select-pane -t 1 -T 'SledjChisl'", Tcmd, scRun, Tsocket)) | 8306 | if (shellMeFail("%s %s/%s select-pane -t 1 -T 'SledjChisl' \\; select-pane -t @0.%%3 -T 'FCGI web server'", Tcmd, scRun, Tsocket)) |
8297 | E("tmux select-pane command failed!"); | 8307 | E("tmux select-pane command failed!"); |
8298 | } | 8308 | } |
8299 | // toybox argument parsing is half working. | 8309 | // toybox argument parsing is half working. |
@@ -8574,22 +8584,20 @@ Create the /opt/opensim-SC directory structure. | |||
8574 | // Start ROBUST or join the tmux session, or just figure out where the sims are running in tmux. | 8584 | // Start ROBUST or join the tmux session, or just figure out where the sims are running in tmux. |
8575 | if ((START == currentMode) && !checkSimIsRunning("ROBUST")) | 8585 | if ((START == currentMode) && !checkSimIsRunning("ROBUST")) |
8576 | { | 8586 | { |
8577 | char *d = xmprintf("%s.{right}", Ttab); | ||
8578 | char *c = xmprintf("cd %s/current/bin", scRoot); | 8587 | char *c = xmprintf("cd %s/current/bin", scRoot); |
8579 | 8588 | ||
8580 | I("ROBUST is starting up."); | 8589 | I("ROBUST is starting up."); |
8581 | sendTmuxCmd(d, c); | 8590 | sendTmuxCmd("@0.%1", c); |
8582 | free(c); | 8591 | free(c); |
8583 | c = xmprintf("mono Robust.exe -inidirectory=%s/config/ROBUST", scRoot); | 8592 | c = xmprintf("mono Robust.exe -inidirectory=%s/config/ROBUST", scRoot); |
8584 | sendTmuxCmd(d, c); | 8593 | sendTmuxCmd("@0.%1", c); |
8585 | free(c); | 8594 | free(c); |
8586 | doTmuxCmd("select-pane -t 0 -T 'ROBUST'", Tcmd, scRun, Tsocket); | 8595 | doTmuxCmd("select-pane -t @0.%%1 -T 'ROBUST'", Tcmd, scRun, Tsocket); |
8587 | 8596 | ||
8588 | // Create all the tmux windows, panes, and temporary .ini files coz OpenSim sucketh. | 8597 | // Create all the tmux windows, panes, and temporary .ini files coz OpenSim sucketh. |
8589 | forEachSim("Prepping", prepSims, NULL); | 8598 | forEachSim("Prepping", prepSims, NULL); |
8590 | waitTmuxText(d, "INITIALIZATION COMPLETE FOR ROBUST"); | 8599 | waitTmuxText("@0.%1", "INITIALIZATION COMPLETE FOR ROBUST"); |
8591 | I("ROBUST is done starting up."); | 8600 | I("ROBUST is done starting up."); |
8592 | free(d); | ||
8593 | } | 8601 | } |
8594 | else if ((0 == toys.optc) && (checkSimIsRunning("ROBUST"))) | 8602 | else if ((0 == toys.optc) && (checkSimIsRunning("ROBUST"))) |
8595 | { | 8603 | { |
@@ -8625,14 +8633,14 @@ Create the /opt/opensim-SC directory structure. | |||
8625 | { | 8633 | { |
8626 | if (checkSimIsRunning("ROBUST")) | 8634 | if (checkSimIsRunning("ROBUST")) |
8627 | { | 8635 | { |
8628 | sendTmuxCmd("@0.%0", "quit"); | 8636 | sendTmuxCmd("@0.%1", "quit"); |
8629 | while (checkSimIsRunning("ROBUST")) | 8637 | while (checkSimIsRunning("ROBUST")) |
8630 | usleep(100000); | 8638 | usleep(100000); |
8631 | usleep(100000); | 8639 | usleep(100000); |
8632 | sendTmuxCmd("@0.%0", "exit"); | 8640 | sendTmuxCmd("@0.%1", "exit"); |
8633 | usleep(100000); | 8641 | usleep(100000); |
8634 | sendTmuxCmd("@0.%0", "exit"); | 8642 | sendTmuxCmd("@0.%1", "exit"); |
8635 | I("ROBUST has stopped in tmux ID @0.%%0."); | 8643 | I("ROBUST has stopped in tmux ID @0.%%1."); |
8636 | } | 8644 | } |
8637 | 8645 | ||
8638 | if (FLAG(a)) | 8646 | if (FLAG(a)) |
@@ -8676,22 +8684,6 @@ Create the /opt/opensim-SC directory structure. | |||
8676 | } | 8684 | } |
8677 | } | 8685 | } |
8678 | } | 8686 | } |
8679 | else if (START == currentMode) | ||
8680 | { | ||
8681 | if (checkSimIsRunning("ROBUST") && (NULL == ourSims->target)) | ||
8682 | { | ||
8683 | // TODO - remove this once we handle the fcgi stuff ourselves. | ||
8684 | I("Starting the web stuff."); | ||
8685 | // Make the FCGI socket world read / write, coz we can't set it to group www-data, since -G only works for root, and we ain't root. | ||
8686 | // TODO - BIG SECURITY HOLE??? | ||
8687 | char *c = xmprintf("spawn-fcgi -n -u %s -s %s/sledjchisl.socket -M 0666 -G www-data -- /usr/bin/valgrind --leak-check=full sledjchisl", | ||
8688 | scUser, scRun, scRoot); | ||
8689 | sendTmuxCmd(Ttab, c); | ||
8690 | free(c); | ||
8691 | } | ||
8692 | else | ||
8693 | I("NOT Starting the web stuff."); | ||
8694 | } | ||
8695 | } | 8687 | } |
8696 | else | 8688 | else |
8697 | { | 8689 | { |