Skip to content

Commit

Permalink
Merge branch 'improvements'
Browse files Browse the repository at this point in the history
* improvements:
  mxqd: Introduce new macro RUNNING_AS_ROOT
  Makefile: Add new target devel and remove nonroot
  • Loading branch information
mariux committed Oct 24, 2015
2 parents 9809bcc + af5dde3 commit b5e9532
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 17 deletions.
15 changes: 10 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,17 @@ CGIDIR = ${LIBEXECDIR}/mxq/cgi
########################################################################

MXQ_MYSQL_DEFAULT_FILE = ${SYSCONFDIR}/mxq/mysql.cnf
MXQ_MYSQL_DEFAULT_GROUP = mxqclient
MXQ_MYSQL_DEFAULT_GROUP_CLIENT = mxqclient
MXQ_MYSQL_DEFAULT_GROUP_SERVER = mxqd
MXQ_MYSQL_DEFAULT_GROUP_DEVELOPMENT = mxqdevel

MXQ_INITIAL_PATH = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
MXQ_INITIAL_TMPDIR = /tmp

CFLAGS_MXQ_MYSQL_DEFAULT_FILE = -DMXQ_MYSQL_DEFAULT_FILE=\"$(MXQ_MYSQL_DEFAULT_FILE)\"
CFLAGS_MXQ_MYSQL_DEFAULT_GROUP = -DMXQ_MYSQL_DEFAULT_GROUP=\"$(MXQ_MYSQL_DEFAULT_GROUP)\"
CFLAGS_MXQ_MYSQL_DEFAULT_GROUP = -DMXQ_MYSQL_DEFAULT_GROUP_CLIENT=\"$(MXQ_MYSQL_DEFAULT_GROUP_CLIENT)\"
CFLAGS_MXQ_MYSQL_DEFAULT_GROUP += -DMXQ_MYSQL_DEFAULT_GROUP_SERVER=\"$(MXQ_MYSQL_DEFAULT_GROUP_SERVER)\"
CFLAGS_MXQ_MYSQL_DEFAULT_GROUP += -DMXQ_MYSQL_DEFAULT_GROUP_DEVELOPMENT=\"$(MXQ_MYSQL_DEFAULT_GROUP_DEVELOPMENT)\"
CFLAGS_MXQ_INITIAL_PATH = -DMXQ_INITIAL_PATH=\"$(MXQ_INITIAL_PATH)\"
CFLAGS_MXQ_INITIAL_TMPDIR = -DMXQ_INITIAL_TMPDIR=\"$(MXQ_INITIAL_TMPDIR)\"

Expand Down Expand Up @@ -184,9 +188,10 @@ manpages/%: manpages/%.xml

all: build

.PHONY: nonroot
nonroot: CFLAGS += -DRUNASNORMALUSER
nonroot: all
.PHONY: devel
devel: CFLAGS += -DRUNASNORMALUSER
devel: CFLAGS += -DMXQ_DEVELOPMENT
devel: all

########################################################################

Expand Down
21 changes: 19 additions & 2 deletions mxq.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,32 @@
# define MXQ_MYSQL_DEFAULT_FILE_STR MXQ_MYSQL_DEFAULT_FILE
#endif

#ifndef MXQ_MYSQL_DEFAULT_GROUP
# define MXQ_MYSQL_DEFAULT_GROUP program_invocation_short_name
#ifdef MXQ_DEVELOPMENT
# undef MXQ_MYSQL_DEFAULT_GROUP
# define MXQ_MYSQL_DEFAULT_GROUP MXQ_MYSQL_DEFAULT_GROUP_DEVELOPMENT
#else
# ifdef MXQ_TYPE_SERVER
# ifdef MXQ_MYSQL_DEFAULT_GROUP_SERVER
# define MXQ_MYSQL_DEFAULT_GROUP MXQ_MYSQL_DEFAULT_GROUP_SERVER
# endif
# else
# ifdef MXQ_MYSQL_DEFAULT_GROUP_CLIENT
# define MXQ_MYSQL_DEFAULT_GROUP MXQ_MYSQL_DEFAULT_GROUP_CLIENT
# endif
# endif
# ifndef MXQ_MYSQL_DEFAULT_GROUP
# define MXQ_MYSQL_DEFAULT_GROUP program_invocation_short_name
# endif
#endif
#define MXQ_MYSQL_DEFAULT_GROUP_STR MXQ_MYSQL_DEFAULT_GROUP

static void mxq_print_generic_version(void)
{
printf(
"%s - " MXQ_VERSIONFULL "\n"
#ifdef MXQ_DEVELOPMENT
"DEVELOPMENT VERSION: Do not use in production environments.\n"
#endif
" by Marius Tolzmann <tolzmann@molgen.mpg.de> " MXQ_VERSIONDATE "\n"
" Max Planck Institute for Molecular Genetics - Berlin Dahlem\n",
program_invocation_short_name
Expand Down
33 changes: 23 additions & 10 deletions mxqd.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@

#define _GNU_SOURCE

#define MXQ_TYPE_SERVER

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
Expand Down Expand Up @@ -37,9 +39,6 @@
#include "mxqd.h"
#include "mxq.h"

#define MYSQL_DEFAULT_FILE MXQ_MYSQL_DEFAULT_FILE
#define MYSQL_DEFAULT_GROUP "mxqd"

#ifndef MXQ_INITIAL_PATH
# define MXQ_INITIAL_PATH "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
#endif
Expand All @@ -48,6 +47,8 @@
# define MXQ_INITIAL_TMPDIR "/tmp"
#endif

#define RUNNING_AS_ROOT (getuid() == 0)

volatile sig_atomic_t global_sigint_cnt=0;
volatile sig_atomic_t global_sigterm_cnt=0;

Expand All @@ -71,7 +72,11 @@ static void print_usage(void)
"\n"
" --pid-file <pidfile> default: create no pid file\n"
" --daemonize default: run in foreground\n"
#ifdef MXQ_DEVELOPMENT
" --log default (in development): write no logfile\n"
#else
" --no-log default: write a logfile\n"
#endif
" --debug default: info log level\n"
" --recover-only (recover from crash and exit)\n"
"\n"
Expand Down Expand Up @@ -289,6 +294,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
MX_OPTION_NO_ARG("version", 'V'),
MX_OPTION_NO_ARG("daemonize", 1),
MX_OPTION_NO_ARG("no-log", 3),
MX_OPTION_NO_ARG("log", 4),
MX_OPTION_NO_ARG("debug", 5),
MX_OPTION_NO_ARG("recover-only", 9),
MX_OPTION_REQUIRED_ARG("pid-file", 2),
Expand All @@ -312,11 +318,11 @@ int server_init(struct mxq_server *server, int argc, char *argv[])

arg_mysql_default_group = getenv("MXQ_MYSQL_DEFAULT_GROUP");
if (!arg_mysql_default_group)
arg_mysql_default_group = MYSQL_DEFAULT_GROUP;
arg_mysql_default_group = MXQ_MYSQL_DEFAULT_GROUP;

arg_mysql_default_file = getenv("MXQ_MYSQL_DEFAULT_FILE");
if (!arg_mysql_default_file)
arg_mysql_default_file = MYSQL_DEFAULT_FILE;
arg_mysql_default_file = MXQ_MYSQL_DEFAULT_FILE;

mx_getopt_init(&optctl, argc-1, &argv[1], opts);

Expand All @@ -340,6 +346,10 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
arg_nolog = 1;
break;

case 4:
arg_nolog = 0;
break;

case 5:
mx_log_level_set(MX_LOG_DEBUG);
break;
Expand Down Expand Up @@ -485,8 +495,8 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
}
}

if (getuid()) {
#ifdef RUNASNORMALUSER
if (!RUNNING_AS_ROOT) {
#if defined(MXQ_DEVELOPMENT) || defined(RUNASNORMALUSER)
mx_log_notice("Running mxqd as non-root user.");
#else
mx_log_err("Running mxqd as non-root user is not supported at the moment.");
Expand Down Expand Up @@ -518,7 +528,7 @@ int server_init(struct mxq_server *server, int argc, char *argv[])
server->memory_max_per_slot = arg_memory_max;

/* if run as non-root use full memory by default for every job */
if (!arg_memory_max && getuid() != 0)
if (!arg_memory_max && !RUNNING_AS_ROOT)
server->memory_max_per_slot = arg_memory_total;

server->memory_avg_per_slot = (long double)server->memory_total / (long double)server->slots;
Expand Down Expand Up @@ -968,7 +978,7 @@ static int init_child_process(struct mxq_group_list *group, struct mxq_job *j)
g->user_name, g->user_uid, g->group_id, j->job_id);
}

if(getuid()==0) {
if(RUNNING_AS_ROOT) {

res = initgroups(passwd->pw_name, g->user_gid);
if (res == -1) {
Expand Down Expand Up @@ -1730,7 +1740,7 @@ int load_groups(struct mxq_server *server) {
int total;
int i;

if (getuid() == 0)
if (RUNNING_AS_ROOT)
group_cnt = mxq_load_running_groups(server->mysql, &mxqgroups);
else
group_cnt = mxq_load_running_groups_for_user(server->mysql, &mxqgroups, getuid());
Expand Down Expand Up @@ -1822,6 +1832,9 @@ int main(int argc, char *argv[])
mx_log_info("mxqd - " MXQ_VERSIONFULL);
mx_log_info(" by Marius Tolzmann <tolzmann@molgen.mpg.de> " MXQ_VERSIONDATE);
mx_log_info(" Max Planck Institute for Molecular Genetics - Berlin Dahlem");
#ifdef MXQ_DEVELOPMENT
mx_log_warning("DEVELOPMENT VERSION: Do not use in production environments.\n");
#endif
mx_log_info("hostname=%s server_id=%s :: MXQ server started.", server.hostname, server.server_id);
mx_log_info(" host_id=%s", server.host_id);
mx_log_info("slots=%lu memory_total=%lu memory_avg_per_slot=%.0Lf memory_max_per_slot=%ld :: server initialized.",
Expand Down

0 comments on commit b5e9532

Please sign in to comment.