Merged in feature-openbsd-service (pull request #67)

Use native service provider on OpenBSD
This commit is contained in:
Timo Mäkinen 2016-04-21 11:45:52 +03:00
commit dc0e79d1bb
18 changed files with 180 additions and 304 deletions

View file

@ -12,10 +12,9 @@ class avahi::daemon {
} }
if $::operatingsystem == "OpenBSD" { if $::operatingsystem == "OpenBSD" {
service { "dbus-daemon": service { "messagebus":
ensure => running, ensure => running,
enable => true, enable => true,
start => "install -d -o _dbus -g _dbus /var/run/dbus && /usr/local/bin/dbus-daemon --system",
before => Service["avahi-daemon"], before => Service["avahi-daemon"],
} }
} }
@ -24,10 +23,6 @@ class avahi::daemon {
ensure => running, ensure => running,
enable => true, enable => true,
status => "avahi-daemon -c", status => "avahi-daemon -c",
start => $::operatingsystem ? {
"openbsd" => "avahi-daemon -D",
default => undef,
},
require => Package["avahi"], require => Package["avahi"],
} }

View file

@ -1,6 +1,6 @@
# Install common parts of DHCP server # Install common parts of DHCP server
# #
class dhcp::server::common { class dhcp::server::common($interface=undef) {
case $::operatingsystem { case $::operatingsystem {
"centos","redhat": { "centos","redhat": {
@ -21,6 +21,13 @@ class dhcp::server::common {
$confdir = "/etc" $confdir = "/etc"
$package = "isc-dhcp-server" $package = "isc-dhcp-server"
$service = "isc_dhcpd" $service = "isc_dhcpd"
Service["dhcpd"] {
flags => $interface ? {
undef => "-q -user _isc-dhcp -group _isc-dhcp",
default => "-q -user _isc-dhcp -group _isc-dhcp ${interface}",
},
}
} }
"ubuntu": { "ubuntu": {
if versioncmp($::operatingsystemrelease, "12.04") >= 0 { if versioncmp($::operatingsystemrelease, "12.04") >= 0 {
@ -57,7 +64,7 @@ class dhcp::server::common {
file { "/var/db/dhcpd.leases": file { "/var/db/dhcpd.leases":
ensure => present, ensure => present,
mode => 0644, mode => "0644",
owner => "root", owner => "root",
group => "wheel", group => "wheel",
before => Service["dhcpd"], before => Service["dhcpd"],
@ -68,36 +75,25 @@ class dhcp::server::common {
ensure => running, ensure => running,
enable => true, enable => true,
name => $service, name => $service,
binary => $::operatingsystem ? {
"openbsd" => "/usr/local/sbin/dhcpd",
default => undef,
},
start => $::operatingsystem ? {
"openbsd" => $dhcp_server_interface ? {
"" => "/usr/local/sbin/dhcpd -q",
default => "/usr/local/sbin/dhcpd -q ${dhcp_server_interface}",
},
default => undef,
},
require => Package["dhcp"], require => Package["dhcp"],
} }
if $dhcp_server_interface { if $interface {
case $::operatingsystem { case $::operatingsystem {
"centos","redhat": { "fedora","centos","redhat": {
file { "/etc/sysconfig/dhcpd": file { "/etc/sysconfig/dhcpd":
ensure => present, ensure => present,
content => template("dhcp/dhcpd.sysconfig"),
mode => "0644", mode => "0644",
owner => "root", owner => "root",
group => "root", group => "root",
content => template("dhcp/dhcpd.sysconfig"),
require => Package["dhcp"], require => Package["dhcp"],
notify => Service["dhcpd"], notify => Service["dhcpd"],
} }
} }
"openbsd": {} "openbsd": {}
default: { default: {
fail("Variable \${dhcp_server_interface} not supported in ${::operatinsystem}") fail("Parameter interface not supported in ${::operatinsystem}")
} }
} }
} }
@ -107,24 +103,30 @@ class dhcp::server::common {
# Install DHCP server with static config. # Install DHCP server with static config.
# #
# === Global variables # === Parameters
# #
# $dhcp_server_interface: # $interface:
# Interface that DHCP server should listen. Defaults to all. # Interface that DHCP server should listen. Defaults to all.
# #
class dhcp::server inherits dhcp::server::common { class dhcp::server($interface=undef) {
class { "dhcp::server::common":
interface => $interface,
}
file { "dhcpd.conf": file { "dhcpd.conf":
name => "${confdir}/dhcpd.conf",
ensure => present, ensure => present,
source => [ "puppet:///files/dhcp/dhcpd.conf.${::homename}", name => "${dhcp::server::common::confdir}/dhcpd.conf",
"puppet:///files/dhcp/dhcpd.conf", ],
mode => "0644", mode => "0644",
owner => "root", owner => "root",
group => $::operatingsystem ? { group => $::operatingsystem ? {
"openbsd" => "wheel", "openbsd" => "wheel",
default => "root", default => "root",
}, },
source => [
"puppet:///files/dhcp/dhcpd.conf.${::homename}",
"puppet:///files/dhcp/dhcpd.conf",
],
notify => Service["dhcpd"], notify => Service["dhcpd"],
} }
@ -133,38 +135,46 @@ class dhcp::server inherits dhcp::server::common {
# Install DHCP server and generate config from LDAP. # Install DHCP server and generate config from LDAP.
# #
# === Global variables # === Parameters
# #
# $dhcp_server_interface: # $interface:
# Interface that DHCP server should listen. Defaults to all. # Interface that DHCP server should listen. Defaults to all.
# #
class dhcp::server::ldap inherits dhcp::server::common { class dhcp::server::ldap($interface=undef) {
include python class { "dhcp::server::common":
include ldap::client interface => $interface,
}
require python
require ldap::client
file { "/usr/local/sbin/dhcpdump.py": file { "/usr/local/sbin/dhcpdump.py":
ensure => present, ensure => present,
source => "puppet:///modules/dhcp/dhcpdump.py",
mode => "0755", mode => "0755",
owner => "root", owner => "root",
group => $::operatingsystem ? { group => $::operatingsystem ? {
"openbsd" => "wheel", "openbsd" => "wheel",
default => "root", default => "root",
}, },
source => "puppet:///modules/dhcp/dhcpdump.py",
} }
$confdir = $dhcp::server::common::confdir
file { "dhcpd.conf.in": file { "dhcpd.conf.in":
ensure => present, ensure => present,
name => "${confdir}/dhcpd.conf.in", name => "${confdir}/dhcpd.conf.in",
source => [ "puppet:///files/dhcp/dhcpd.conf.in.${hostname}",
"puppet:///files/dhcp/dhcpd.conf.in", ],
mode => "0644", mode => "0644",
owner => "root", owner => "root",
group => $::operatingsystem ? { group => $::operatingsystem ? {
"openbsd" => "wheel", "openbsd" => "wheel",
default => "root", default => "root",
}, },
source => [
"puppet:///files/dhcp/dhcpd.conf.in.${::hostname}",
"puppet:///files/dhcp/dhcpd.conf.in",
],
require => Package["dhcp"], require => Package["dhcp"],
} }
@ -172,45 +182,8 @@ class dhcp::server::ldap inherits dhcp::server::common {
path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin", path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin",
command => "dhcpdump.py ${confdir}/dhcpd.conf.in* > ${confdir}/dhcpd.conf", command => "dhcpdump.py ${confdir}/dhcpd.conf.in* > ${confdir}/dhcpd.conf",
unless => "dhcpdump.py ${confdir}/dhcpd.conf.in* | diff ${confdir}/dhcpd.conf -", unless => "dhcpdump.py ${confdir}/dhcpd.conf.in* | diff ${confdir}/dhcpd.conf -",
require => [ require => File["dhcpd.conf.in", "/usr/local/sbin/dhcpdump.py"],
File["dhcpd.conf.in"],
File["/usr/local/sbin/dhcpdump.py"],
Class["python"],
Class["ldap::client"],
],
notify => Service["dhcpd"], notify => Service["dhcpd"],
} }
} }
# Configure DHCP relay
#
# === Parameters
#
# $name:
# Relay name (can be anything).
# $interface:
# IP address for interface to listen.
# $server_addr:
# Address for DHCP server to relay requests.
#
# === Sample usage
#
# dhcp::relay { "relay0": interface => "em2", server_addr => "10.20.110.11" }
#
define dhcp::relay($interface, $server_addr) {
service { $name:
ensure => running,
provider => "base",
hasrestart => false,
hasstatus => false,
pattern => "/usr/sbin/dhcrelay -i ${interface} ${server_addr}",
start => $::operatingsystem ? {
"openbsd" => "/usr/sbin/dhcrelay -i ${interface} ${server_addr}",
default => undef,
}
}
}

View file

@ -1,6 +1,6 @@
<% if @operatingsystemrelease =~ /^6\./ -%> <% if @operatingsystemrelease =~ /^6\./ -%>
DHCPDARGS="-chroot ${statedir} -lf /dhcpd.leases -pf /dhcpd.pid <%= @dhcp_server_interface %>" DHCPDARGS="-chroot ${statedir} -lf /dhcpd.leases -pf /dhcpd.pid <%= @interface %>"
pidfile="${statedir}/dhcpd.pid" pidfile="${statedir}/dhcpd.pid"
<% else -%> <% else -%>
DHCPDARGS="<%= @dhcp_server_interface %>" DHCPDARGS="<%= @interface %>"
<% end -%> <% end -%>

View file

@ -315,8 +315,6 @@ class firewall::ftpproxy {
service { "ftpproxy": service { "ftpproxy":
ensure => running, ensure => running,
enable => true, enable => true,
binary => "/usr/sbin/ftp-proxy",
start => "/usr/sbin/ftp-proxy",
} }
} }

View file

@ -17,7 +17,6 @@ class ifstated {
service { "ifstated": service { "ifstated":
ensure => running, ensure => running,
enable => true, enable => true,
binary => "/usr/sbin/ifstated",
} }
} }

View file

@ -65,7 +65,6 @@ class inetd::server::inetd {
service { "inetd": service { "inetd":
ensure => running, ensure => running,
start => "/usr/sbin/inetd",
enable => true, enable => true,
} }

View file

@ -518,10 +518,6 @@ class ldap::server {
service { "slapd": service { "slapd":
name => $service_name, name => $service_name,
start => $::operatingsystem ? {
"openbsd" => "/usr/local/libexec/slapd -u _openldap -h ldap:///\\ ldaps:///\\ ldapi:///",
default => undef,
},
ensure => running, ensure => running,
enable => true, enable => true,
require => Package["openldap-server"] require => Package["openldap-server"]

View file

@ -1,4 +1,3 @@
# Install NFS client. # Install NFS client.
# #
class nfs::client { class nfs::client {
@ -13,13 +12,32 @@ class nfs::client {
}, },
} }
if $::operatingsystem == "Fedora" and $::operatingsystemrelease >= 16 { case $::operatingsystem {
"fedora": {
# https://bugzilla.redhat.com/show_bug.cgi?id=692008 # https://bugzilla.redhat.com/show_bug.cgi?id=692008
service { "NetworkManager-wait-online": service { "NetworkManager-wait-online":
ensure => stopped, ensure => stopped,
enable => true, enable => true,
} }
} }
"ubuntu": {
file { "/etc/modprobe.d/lockd.conf":
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => "options lockd nlm_tcpport=4001 nlm_udpport=4001\n",
before => Package["nfs-utils"],
}
augeas { "set-nfs-common":
context => "/files/etc/default/nfs-common",
changes => "set STATDOPTS '\"--port 4000\"'",
notify => Service["nfslock"],
require => Package["nfs-utils"],
}
}
default: { }
}
service { "nfslock": service { "nfslock":
ensure => running, ensure => running,
@ -45,7 +63,21 @@ class nfs::client {
# Install and configure NFS server. # Install and configure NFS server.
# #
class nfs::server { # === Parameters
#
# $servers:
# Number of nfs server processes to be started. Defaults to 8.
#
# $versions:
# Array of NFS versions to enable. Defaults to [ "3" ].
#
class nfs::server(
$servers="8",
$versions=["3"],
) {
$default_versions = [ "2", "3", "4" ]
$disable_versions = inline_template('<%= (@default_versions - @versions).map { |v| "-N %s" % v }.join(" ") %>')
require nfs::client require nfs::client
@ -58,18 +90,36 @@ class nfs::server {
mode => "0644", mode => "0644",
owner => "root", owner => "root",
group => "root", group => "root",
require => Package["nfs-utils"],
notify => Exec["exportfs"], notify => Exec["exportfs"],
} }
case $::operatingsystem {
"centos","redhat","fedora": {
file { "/etc/sysconfig/nfs": file { "/etc/sysconfig/nfs":
ensure => present, ensure => present,
content => template("nfs/nfs.sysconfig.erb"),
mode => "0644", mode => "0644",
owner => "root", owner => "root",
group => "root", group => "root",
content => template("nfs/nfs.sysconfig.erb"),
notify => Service["nfs"], notify => Service["nfs"],
} }
}
"ubuntu": {
package { "nfs-kernel-server":
ensure => installed,
}
file { "/etc/default/nfs-kernel-server":
ensure => present,
mode => "0644",
owner => "root",
group => "root",
content => template("nfs/nfs-kernel-server.erb"),
require => Package["nfs-kernel-server"],
notify => Service["nfs"],
}
}
default: { }
}
service { "nfs": service { "nfs":
ensure => running, ensure => running,
@ -78,11 +128,11 @@ class nfs::server {
/^([1-9]|1[0-5])$/ => "nfs", /^([1-9]|1[0-5])$/ => "nfs",
default => "nfs-server", default => "nfs-server",
}, },
"ubuntu" => "nfs-kernel-server",
default => "nfs", default => "nfs",
}, },
enable => true, enable => true,
hasstatus => true, hasstatus => true,
require => Service["nfslock"],
} }
exec { "exportfs": exec { "exportfs":

View file

@ -0,0 +1,22 @@
# Number of servers to start up
RPCNFSDCOUNT=<%= @servers %>
# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0
# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="--manage-gids --port 4002 <%= @disable_versions %>"
# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""
# Options for rpc.svcgssd.
RPCSVCGSSDOPTS=""
# Options for rpc.nfsd.
RPCNFSDOPTS="<%= @disable_versions %>"

View file

@ -26,20 +26,20 @@ LOCKD_UDPPORT=4001
# Turn off v2 and v3 protocol support # Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3" #RPCNFSDARGS="-N 2 -N 3"
# Turn off v4 protocol support # Turn off v4 protocol support
RPCNFSDARGS="-N 4" RPCNFSDARGS="<%= @disable_versions %>"
# Number of nfs server processes to be started. # Number of nfs server processes to be started.
# The default is 8. # The default is 8.
RPCNFSDCOUNT=64 RPCNFSDCOUNT=<%= @servers %>
# Stop the nfsd module from being pre-loaded # Stop the nfsd module from being pre-loaded
#NFSD_MODULE="noload" #NFSD_MODULE="noload"
# #
# #
<% if @operatingsystem == 'Fedora' -%> <% if @operatingsystem == 'Fedora' -%>
# Optional arguments passed to rpc.mountd. See rpc.mountd(8) # Optional arguments passed to rpc.mountd. See rpc.mountd(8)
RPCMOUNTDOPTS="--no-nfs-version 4 -p 4002" RPCMOUNTDOPTS="<%= @disable_versions %> -p 4002"
<% else -%> <% else -%>
# Optional arguments passed to rpc.mountd. See rpc.mountd(8) # Optional arguments passed to rpc.mountd. See rpc.mountd(8)
RPCMOUNTDOPTS="--no-nfs-version 4" RPCMOUNTDOPTS="<%= @disable_versions %>"
# Port rpc.mountd should listen on. # Port rpc.mountd should listen on.
MOUNTD_PORT=4002 MOUNTD_PORT=4002
<% end -%> <% end -%>

View file

@ -1,6 +1,15 @@
# Install and configure nginx. # Install and configure nginx.
# #
# === Parameters
#
# $chroot:
# Use chroot on OpenBSD. Defaults to true.
#
# $workers:
# Number of worker processes. Defaults to $processorcount.
#
class nginx( class nginx(
$chroot=true,
$workers=$::processorcount, $workers=$::processorcount,
) { ) {
@ -9,6 +18,12 @@ class nginx(
$user = 'www' $user = 'www'
$group = 'www' $group = 'www'
$logdir = '/var/www/logs' $logdir = '/var/www/logs'
if ! $chroot {
Service['nginx'] {
flags => '-u',
}
}
} }
'ubuntu': { 'ubuntu': {
$user = 'www-data' $user = 'www-data'
@ -59,10 +74,6 @@ class nginx(
service { 'nginx': service { 'nginx':
ensure => running, ensure => running,
enable => true, enable => true,
start => $::operatingsystem ? {
'openbsd' => '/usr/sbin/nginx -u',
default => undef,
},
} }
} }

View file

@ -42,10 +42,6 @@ class oidentd($config=undef) {
service { "oidentd": service { "oidentd":
ensure => running, ensure => running,
enable => true, enable => true,
start => $::operatingsystem ? {
"openbsd" => "/usr/local/sbin/oidentd -e -u _identd -g _identd",
default => undef,
},
} }
} }

View file

@ -47,10 +47,6 @@ class portmap::server {
service { "portmap": service { "portmap":
ensure => running, ensure => running,
name => $service, name => $service,
start => $::operatingsystem ? {
"openbsd" => "/usr/sbin/portmap",
default => undef,
},
enable => true, enable => true,
} }

View file

@ -1,150 +0,0 @@
# Manage OpenBSD services. Enable/disable using /etc/rc.conf.local
Puppet::Type.type(:service).provide :openbsd, :parent => :base do
desc "OpenBSD service management."
confine :operatingsystem => :openbsd
defaultfor :operatingsystem => :openbsd
def rc_dir() '/etc/rc.d' end
def rcconf() '/etc/rc.conf' end
def rcconf_local() '/etc/rc.conf.local' end
def rcscript
return File.join(rc_dir, @resource[:name])
end
def rcvar
name = @resource[:name]
File.open(rcconf).each do |line|
if line =~ /^#{name}(_flags)?=/
line = line.sub(/#.*/, "")
return line.strip.split("=", 2)
end
end
nil
end
def rcvar_local
name = @resource[:name]
if File.file?(rcconf_local)
File.open(rcconf_local).each do |line|
if line =~ /^#{name}(_flags)?=/
line = line.sub(/#.*/, "")
return line.strip.split("=", 2)
end
end
end
nil
end
def rcvar_name
[self.rcvar_local, self.rcvar].each do |rcvar|
return rcvar[0] unless rcvar.nil?
end
"%s_flags" % @resource[:name]
end
def rcvar_value
[self.rcvar_local, self.rcvar].each do |rcvar|
return rcvar[1].gsub(/"?([^"]*)"?/, '\1') unless rcvar.nil?
end
nil
end
def pkg_scripts
if File.file?(rcconf_local)
File.open(rcconf_local).each do |line|
if line =~ /^pkg_scripts=/
return line.strip.gsub(/pkg_scripts="?([^"]*)"?/, '\1').split
end
end
end
Array.new
end
def enabled?
name = @resource[:name]
rcvar = self.rcvar
rcvar_name = self.rcvar_name
rcvar_value = self.rcvar_value
pkg_scripts = self.pkg_scripts
if rcvar_name.end_with?("_flags")
return :false if rcvar.nil? and not pkg_scripts.include?(name)
return :false if rcvar_value.nil? or rcvar_value == "NO"
else
return :false if rcvar_value != "YES"
end
:true
end
def enable
name = @resource[:name]
rcvar = self.rcvar
rcvar_name = self.rcvar_name
rcvar_value = ""
pkg_scripts = self.pkg_scripts
start = @resource[:start]
binary = @resource[:binary]
s = ""
if File.file?(rcconf_local)
File.open(rcconf_local).each do |line|
next if line =~ /^(#{rcvar_name}|pkg_scripts)=/
s += line
end
end
unless start.nil?
if binary.nil?
rcvar_value = start[/^\S+\s*(.*)/, 1]
else
rcvar_value = start[/^#{binary}\s*(.*)/, 1]
end
end
if rcvar_name.end_with?("_flags")
s += "%s=\"%s\"\n" % [rcvar_name, rcvar_value]
else
s += "%s=YES\n" % rcvar_name
end
pkg_scripts << name if rcvar.nil? and not pkg_scripts.include?(name)
s += "pkg_scripts=\"%s\"\n" % pkg_scripts.join(" ")
File.open(rcconf_local, "w") { |f| f << s }
end
def disable
name = @resource[:name]
rcvar = self.rcvar
rcvar_name = self.rcvar_name
pkg_scripts = self.pkg_scripts
s = ""
if File.file?(rcconf_local)
File.open(rcconf_local).each do |line|
next if line =~ /^(#{rcvar_name}|pkg_scripts)=/
s += line
end
end
s += "%s=NO\n" % rcvar_name unless rcvar.nil?
pkg_scripts.delete(name)
s += "pkg_scripts=\"%s\"\n" % pkg_scripts.join(" ")
File.open(rcconf_local, "w") { |f| f << s }
end
def startcmd
if File.exists?(self.rcscript)
[self.rcscript, :start]
end
end
def stopcmd
if File.exists?(self.rcscript)
[self.rcscript, :stop]
end
end
def statuscmd
if File.exists?(self.rcscript)
[self.rcscript, :check]
end
end
end

View file

@ -63,7 +63,7 @@ class sasl::saslauthd {
} }
"openbsd": { "openbsd": {
Service["saslauthd"] { Service["saslauthd"] {
start => "/usr/local/sbin/saslauthd -a ldap", flags => "-a ldap",
} }
} }
"ubuntu": { "ubuntu": {
@ -108,7 +108,7 @@ class sasl::saslauthd {
} }
"openbsd": { "openbsd": {
Service["saslauthd"] { Service["saslauthd"] {
start => "/usr/local/sbin/saslauthd -a kerberos5", flags => "-a kerberos5",
} }
} }
"ubuntu": { "ubuntu": {

View file

@ -159,10 +159,6 @@ class smtpd(
service { $service: service { $service:
ensure => running, ensure => running,
enable => true, enable => true,
start => $::operatingsystem ? {
'openbsd' => '/usr/sbin/smtpd',
default => undef,
},
} }
if $listen == true or $config { if $listen == true or $config {

View file

@ -31,18 +31,15 @@ class spamassassin::common {
service { "spamassassin": service { "spamassassin":
ensure => running, ensure => running,
enable => true, enable => true,
binary => $::operatingsystem ? {
"openbsd" => "/usr/local/bin/spamd -d",
default => undef,
},
start => $::operatingsystem ? {
"openbsd" => "/usr/local/bin/spamd -d -c -H -m 5",
default => undef,
},
hasstatus => true,
require => Package["spamassassin"], require => Package["spamassassin"],
} }
if $::operatingsystem == "OpenBSD" {
Service["spamassassin"] {
flags => "-c -H -P",
}
}
} }

View file

@ -125,9 +125,7 @@ class tftp::server {
} else { } else {
service { "tftpd": service { "tftpd":
ensure => running, ensure => running,
hasstatus => true,
enable => true, enable => true,
start => "/usr/sbin/tftpd /tftpboot",
require => File["/tftpboot"], require => File["/tftpboot"],
} }
} }