From bee2f269b3a48f1bafb7fd452fe78f365a8535ad Mon Sep 17 00:00:00 2001 From: Thomas Bellman <bellman@lysator.liu.se> Date: Sun, 30 Sep 2018 18:37:34 +0200 Subject: [PATCH] Add definition for managing getty(8) on serial ports. This adds a definition console::serial::login for managing if and how getty(8) (or usually agetty(8)) is run on serial ports. The current version only supports systemd-based Linux distributions (and has only been actually tested on CentOS 7). --- manifests/serial/login.pp | 99 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 manifests/serial/login.pp diff --git a/manifests/serial/login.pp b/manifests/serial/login.pp new file mode 100644 index 0000000..2dabdb9 --- /dev/null +++ b/manifests/serial/login.pp @@ -0,0 +1,99 @@ +# Copyright © 2018 Thomas Bellman, Linköping, Sweden +# Licensed under the GNU LGPL v3+; see the README file for more information. + + +/* + * Manage login (getty) on serial ports. + * + * Parameters: + * - name Name of serial port device (without /dev/ prefix). + * - ensure One of 'enabled' (the default) or 'disabled'. + * - speeds (List of) speeds in bits/second. + * - termtype Default terminal type connected to the port. + * - rootlogin To 'allow' or 'forbid' root to login on the port. + * Default is to make no changes to /etc/securetty. + */ +# FIXME: Currently only supports systemd + +define console::serial::login( + $ensure='enabled', + $speeds=[115200,38400,9600], + $termtype='vt100', + $rootlogin=undef, +) +{ + case $ensure { + 'enabled', 'disabled': { } + default: { + fail("Console::Serial::Login[${title}]: ", + "Bad value for parameter ensure, ``${ensure}''") + } + } + + case "${::initsystem}::${::operatingsystem}-${::operatingsystemrelease}" + { + /systemd::.*/: { + console::serial::login::systemd { + $name: + ensure => $ensure, + speeds => $speeds, termtype => $termtype; + } + } + + default: { + fail("Console::Serial::Login[${title}]: ", + "Unsupported operating system/init system") + } + } + + if ($rootlogin != undef and $rootlogin != false) + { + console::rootlogin { + $name: + ensure => $rootlogin; + } + } +} + + + +# Internal helper definition +# +define console::serial::login::systemd( + $ensure, + $speeds, + $termtype, +) +{ + $svcdir = "/etc/systemd/system/serial-getty@${name}.service.d" + file { + $svcdir: + ensure => $ensure ? { + 'enabled' => directory, 'disabled' => undef, + }, + owner => 'root', group => 'root', mode => '0755'; + + "${svcdir}/param.conf": + ensure => $ensure ? { + 'enabled' => file, 'disabled' => absent, + }, + content => inline_template( + "[Service]\n", + "ExecStart=\n", + "ExecStart=-/sbin/agetty --keep-baud <%= [@speeds].flatten.join(',') %> %I <%= @termtype %>\n" + ), + owner => 'root', group => 'root', mode => '0444', + notify => Service["serial-getty@${name}"]; + } + + service { + "serial-getty@${name}": + ensure => $ensure ? { + 'enabled' => running, 'disabled' => stopped, + }, + enable => $ensure ? { + 'enabled' => true, 'disabled' => false, + }, + ; + } +} -- GitLab