diff --git a/docs/index.rst b/docs/index.rst index 4209e914a1c1dde619c1748f03e65791cf2dec61..ed633e94c12fc5c0822592c8bc43016017c40e17 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -52,7 +52,8 @@ Requisitos + LuaRocks 2.4.2 (ou mais recente) + git -**Somente para instalações no Microsoft Windows:** use o próprio Cygwin para gerenciar as dependências, com exceção do LuaRocks, que deve ser instalado conforme instruções em https://luarocks.org/. +.. attention:: + **Somente para instalações no Microsoft Windows:** use o próprio Cygwin para gerenciar as dependências, com exceção do LuaRocks que deve ser instalado conforme instruções em https://luarocks.org/. Instalação ---------- @@ -71,13 +72,16 @@ Extrair o conteúdo do arquivo usando o comando ``tar``: $ tar -xzf sgarest-daemon-X.Y.X.tar.gz -**Somente para instalações no Microsoft Windows:** execute os seguintes comandos LuaRocks antes de iniciar a instalação: +.. attention:: + Para instalar somente para o usuário corrente use a opção ``--local`` nos comandos ``luarocks``. -.. code-block:: console +.. attention:: + **Somente para instalações no Microsoft Windows:** execute os seguintes comandos LuaRocks antes de iniciar a instalação: - $ luarocks install xml CC=g++ LD=g++ - $ luarocks install luaposix LDFLAGS=-no-undefined + .. code-block:: console + $ luarocks install xml CC=g++ LD=g++ + $ luarocks install luaposix LDFLAGS=-no-undefined Execute os comandos abaixo para instalar o módulo principal do SGA: @@ -94,7 +98,7 @@ POSIX $ luarocks make sga-driver-posix-*.rockspec -PBS (experimental) +PBS .. code-block:: console @@ -108,14 +112,6 @@ Slurm (experimental) $ luarocks make sga-exec-*.rockspec $ luarocks make sga-driver-slurm-*.rockspec -Instalação local ao usuário corrente -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Para instalar somente para o usuário corrente use a opção ``--local`` nos comandos ``luarocks``. - -.. - TODO Colocar essa mensagem como nota de roda pé e fazer referencia em todos os trecho com uso de luarocks acima. - Instalação sem conexão com a Internet ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -129,13 +125,12 @@ Se a instalação for feita em uma máquina sem acesso a Internet, pode-se pegar Instalação usando proxy ^^^^^^^^^^^^^^^^^^^^^^^ -Para instações realizadas em máquina usando proxy para conexão à Internet siga as instruções disponóveies em https://github.com/luarocks/luarocks/wiki/LuaRocks-through-a-proxy. - -Desinstalação -^^^^^^^^^^^^^ +Para instalações realizadas em máquina usando proxy para conexão à Internet siga as instruções disponíveis em https://github.com/luarocks/luarocks/wiki/LuaRocks-through-a-proxy. .. TODO Como desistalar o SGA e o LuaRocks -- e Lua se for o caso + Desinstalação + ^^^^^^^^^^^^^ Configuração ^^^^^^^^^^^^ @@ -209,7 +204,7 @@ Configuração de múltiplos SGAs Na configuração de múltiplos SGAs é possível definir valores *default* de parâmetros no início do arquivo e sobrescrever esses valores (ou adicionar parâmetros que estão sem *default*) em cada SGA definido. Essa configuração é útil por exemplo quando é necessário gerenciar mais de uma fila de um cluster. -Cada configuração particutar a um SGA deve ser adicionado na chave ``sgas`` do arquivo de configuração, no formato: +Cada configuração particular a um SGA deve ser adicionado na chave ``sgas`` do arquivo de configuração, no formato: .. code-block:: lua @@ -284,47 +279,62 @@ Os driver do SGA são responsáveis por acessar o recurso oferecidos pelo SGA. E Segue breve descrição de cada driver, com exemplos de configurações: sga.driver.posix - Driver para gerencia de comandos usando sistemas operacionais compatíveis com POSIX. Não possui configurações específicas + Driver para gerência de comandos usando sistemas operacionais compatíveis com POSIX. Não possui configurações específicas sga.driver.pbs - Driver para gerencia de comandos em clusters através do TORQUE PBS. Testado com a versåo `2.5.12 `_. As seguintes configurações estão disponíveis: + Driver para gerência de comandos em clusters através do TORQUE PBS. Testado com a versåo `2.5.12 `_. As seguintes configurações opcionais podem ser definidas em ``pbs_config``: init_dir - Diretório de trabalhado para de execução dos comandos. Recomendado usar o valor ``os.getenv("PWD")`` (qsub -d) + Diretório de trabalhado para de execução dos comandos. Recomendado usar o valor ``os.getenv("PWD")`` (``qsub -d``) queue - Fila de execução do job. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGAs (qsub -q) + Fila de execução do job. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGAs (``qsub -q``) allow_proxy_user - Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (qsub -P) + Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (``qsub -P``) .. code-block:: lua driver = "sga.driver.pbs" driver_config = { - init_dir = os.getenv("HOME").."/forecast", - queue = "weather", - allow_proxy_user = false, + pbs_config = { + init_dir = os.getenv("HOME").."/forecast", + queue = "weather", + allow_proxy_user = false, + } } sga.driver.slurm - Driver para gerencia de comandos em clusters através do Slurm. Testado com a versão `20.02 `_. As seguintes configurações estão disponíveis: + Driver para gerência de comandos em clusters através do Slurm. Testado com a versão `20.02 `_. As seguintes configurações opcionais podem ser definidas em ``slurm_config``: init_dir - Diretório de trabalhado para de execução dos comandos. . Recomendado usar o valor ``os.getenv("PWD")`` (sbatch -D) + Diretório de trabalhado para de execução dos comandos. . Recomendado usar o valor ``os.getenv("PWD")`` (``sbatch -D``) queue - Fila de execução do job. b. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGA (sbatch -p) + Fila de execução do job. b. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGA (``sbatch -p``) allow_proxy_user - Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (sbatch --uid) + Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (``sbatch --uid``) + proxy_user_group + Grupo a ser usado quando a opção ``allow_proxy_user`` estiver ativa. Assim a submissão do comando será feita em nome do usuário solicitante e usando o grupo informado. O valor padrão é o grupo padrão do usuário que executa o SGA. (``sbatch --gid``) .. code-block:: lua driver = "sga.driver.slurm" driver_config = { - init_dir = os.getenv("HOME").."/forecast", - queue = "weather", - allow_proxy_user = true, + slurm_config = { + init_dir = os.getenv("HOME").."/forecast", + queue = "weather", + allow_proxy_user = true, + proxy_user_group = "forecasters", + } } - - -Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o dispáro remoto de comandos usando o protoco SSH. Segue trecho da configuração: + + Ao ativar a opção ``allow_proxy_user`` é preciso adicionar o usuário que executa o SGA ao arquivo ``/etc/sudoers``, pois para usar os argumentos ``--uid`` e ``--gid`` do comando ``sbatch`` esse usuário precisa de permissão ``root``. Além disso não deve-se solicitar sua senha ao executar o comando ``sbatch``. Segue exemplo: + .. code-block:: + + sga_user ALL=(ALL) ALL + sga_user ALL=(ALL) NOPASSWD: /bin/sbatch + + .. caution:: + Somente faça alterações no arquivo ``/etc/sudoers`` através do utilitário ``visudo``. + +Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o disparo remoto de comandos usando o protocolo SSH. Segue trecho da configuração: .. code-block:: lua @@ -336,7 +346,7 @@ Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o disp } } -Lembrando que é necessårio ativar a autenticação por chave publica, sem senha, do usuário na máquina. Veja `Public Key authentication for SSH `_ para mais detalhes. +Lembrando que é necessário ativar a autenticação por chave publica, sem senha, do usuário na máquina. Veja `Public Key authentication for SSH ` para mais detalhes. Mecanismos de transferências """""""""""""""""""""""""""" @@ -402,7 +412,7 @@ Para visualizar as propriedades processadas pelo SGA existe a flag ``--debug``: $ ./sgad.sh sgad.cfg --sga_name garoa --debug -Verificando a instalação ------------------------- - -Em breve. +.. + TODO Adicionar sessão com instruções para verificação da instalação + Verificando a instalação + ------------------------ diff --git a/sga/driver/pbs.lua b/sga/driver/pbs.lua index da1d18aaa422671c42268b36428b33a38157ca28..f79a6dbb5cde30bb6d762d83b655dbb6969d7029 100644 --- a/sga/driver/pbs.lua +++ b/sga/driver/pbs.lua @@ -32,8 +32,8 @@ function pbs.execute_command(self, job, cmd_string) if self.pbs_queue then optional_params = optional_params.." -q "..self.pbs_queue end - if self.allow_proxy_user and job.parameters.pbs_user then - optional_params = optional_params.." -P "..job.parameters.pbs_user + if self.allow_proxy_user and (job.parameters.pbs_user or job.parameters.csbase_command_user_id) then + optional_params = optional_params.." -P "..(job.parameters.pbs_user or job.parameters.csbase_command_user_id) end for _, sandbox_path in ipairs(job.sandboxes) do @@ -46,7 +46,7 @@ function pbs.execute_command(self, job, cmd_string) self.exec:chmod(sandbox_path, "rwxrwxrwx") end - self.exec:write_file(script_filename, "#!/bin/sh\n"..cmd_string.."\n") + self.exec:write_file(script_filename, "#!/bin/sh\numask 002\n"..cmd_string.."\n") local full_cmd = ("%s -N %s -V -o %s -e %s %s %s"):format(cmds.qsub, job.cmd_id, out_filename, err_filename, optional_params, script_filename) self.logger:debug("[COMMAND] "..full_cmd) diff --git a/sga/driver/slurm.lua b/sga/driver/slurm.lua index bdb5ebdc711acc67df7c002734b175ad09f8e18b..0a42e92944b285d6842ef2c097c03fbebb372180 100644 --- a/sga/driver/slurm.lua +++ b/sga/driver/slurm.lua @@ -32,6 +32,8 @@ function slurm.execute_command(self, job, cmd_string) local script_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".script" local out_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".out" local err_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".err" + local sudo_cmd = "sudo " + local as_root = false for _, sandbox_path in ipairs(job.sandboxes) do local ok, err = self.exec:create_dir(sandbox_path) @@ -45,19 +47,29 @@ function slurm.execute_command(self, job, cmd_string) local optional_params = "" if self.slurm_init_dir then - optional_params = optional_params.."-D "..self.slurm_init_dir.." " + optional_params = optional_params.." -D "..self.slurm_init_dir end -- O equivalente de queue no slurm é partição! if self.slurm_queue then - optional_params = optional_params.."-p "..self.slurm_queue.." " + optional_params = optional_params.." -p "..self.slurm_queue end - if self.allow_proxy_user and job.parameters.slurm_user then - optional_params = optional_params.."--uid="..job.parameters.slurm_user.." " + if self.allow_proxy_user and (job.parameters.slurm_user or job.parameters.csbase_command_user_id) then + local gid_param = " --gid=" + if self.proxy_user_group then + gid_param = gid_param..self.proxy_user_group + else + gid_param = gid_param.."$(id -g)" + end + optional_params = optional_params.." --uid="..(job.parameters.slurm_user or job.parameters.csbase_command_user_id)..gid_param + as_root = true end - self.exec:write_file(script_filename, "#!/bin/sh\n"..cmd_string.."\n") + -- Add umask at top of the script to ensure that all files created during the + -- job's execution could be modified by the unix group members + self.exec:write_file(script_filename, "#!/bin/sh\numask 002\n"..cmd_string.."\n") - local full_cmd = ("%s --parsable -o %s -e %s %s%s"):format(cmds.sbatch, out_filename, err_filename, optional_params, script_filename) + local cmd_prefix = as_root and sudo_cmd or "" + local full_cmd = ("%s%s --parsable -o %s -e %s %s %s"):format(cmd_prefix, cmds.sbatch, out_filename, err_filename, optional_params, script_filename) self.logger:debug("[COMMAND] "..full_cmd) local slurmjid, stderr = self.exec:run(full_cmd) @@ -331,6 +343,7 @@ function slurm.new(config, logger) init_dir = schema.Optional(schema.String), queue = schema.Optional(schema.String), allow_proxy_user = schema.Optional(schema.Boolean), + proxy_user_group = schema.Optional(schema.String), } local err = schema.CheckSchema(slurm_config, slurm_config_schema) if err then @@ -346,6 +359,7 @@ function slurm.new(config, logger) slurm_init_dir = slurm_config.init_dir or nil, slurm_queue = slurm_config.queue or nil, allow_proxy_user = slurm_config.allow_proxy_user or false, + proxy_user_group = slurm_config.proxy_user_group or nil, } return self end