Estou tentando implantar o servidor Redmine via Puppet. O procedimento de instalação usa o Bundle para instalar suas dependências . Ao ser instalado de forma interativa, sudo
solicita a senha do usuário quando o Bundle precisa instalar algumas bibliotecas do sistema. Instalar o Redmine como root não é recomendado.
Eu uso o Ubuntu 14.04 64 bit. O puppet
é executado dentro do contêiner sem privilégios do LXC.
Eu costumava ter um walkaround que envolvia tocar nos arquivos /var/lib/sudo
apropriados antes da instalação do Bundle. Isso é hacky e deixou de funcionar após a atualização recente do sudo.
Existe alguma outra maneira de fazer isso? Ou talvez o sudo permita conceder período de carência não interativamente e eu simplesmente perdi isso?
Meu arquivo sudoers
já contém a entrada Defaults !tty_tickets
. Eu preferiria não ter, mas sem essa linha eu acho que há menos esperança de solução.
Aqui está o meu recurso forcesudo
:
define forcesudo ($user = $name, $notify = $notify) {
file { "/etc/sudoers.d/fix-${user}": content => "${user} ALL = (root) NOPASSWD: ALL\n" }
file { "/etc/sudoers.d/tty_tickets": content => "Defaults !tty_tickets\n" }
file { "/var/lib/sudo/${user}":
ensure => directory,
owner => 'root',
mode => 700,
group => $user
}
file { "/var/lib/sudo/${user}/0":
content => '',
owner => 'root',
mode => 0600,
group => $user
}
touch { "/var/lib/sudo/${user}":
notify => $notify,
require => File["/var/lib/sudo/${user}"]
}
touch { "/var/lib/sudo/${user}/0":
notify => $notify,
require => File["/var/lib/sudo/${user}"]
}
}
E aqui está o recurso touch
:
define touch ($user = "root", $group = "root", $notify = $notify) {
exec { "touch ${name}":
command => "/usr/bin/touch ${name}",
user => $user,
group => $group,
notify => $notify,
refreshonly => true,
}
}
Editar:
O problema pode ser ignorado executando o Bundle como root, embora isso seja desencorajado pelo Bundle: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
É assim que é feito pelo módulo de fantoches link .
Como essa é uma solução alternativa em vez de uma correção, a questão permanece.