diff options
author | Brandon Kim <brandonkim@google.com> | 2022-04-13 20:00:14 +0300 |
---|---|---|
committer | Brandon Kim <brandonkim@google.com> | 2022-04-13 22:40:49 +0300 |
commit | dc43764abca8281445f5d50c2c44cd85b56cc4af (patch) | |
tree | f1a117cc6c26f819f6c3853f861638ef0e8510cd /meta-google/recipes-phosphor | |
parent | 4b053823a3254937c1212649223db32840d3622a (diff) | |
download | openbmc-dc43764abca8281445f5d50c2c44cd85b56cc4af.tar.xz |
meta-google: console: Allow host console redirection
Originally written by William, upstreaming it from our downstream repo.
Signed-off-by: William A. Kennington III <wak@google.com>
Signed-off-by: Brandon Kim <brandonkim@google.com>
Change-Id: If23d97cb2505f45af089571d77a70a32a37d1ce8
Diffstat (limited to 'meta-google/recipes-phosphor')
5 files changed, 127 insertions, 0 deletions
diff --git a/meta-google/recipes-phosphor/console/obmc-console/host-console-filtered.sh b/meta-google/recipes-phosphor/console/obmc-console/host-console-filtered.sh new file mode 100755 index 0000000000..1b57966c1f --- /dev/null +++ b/meta-google/recipes-phosphor/console/obmc-console/host-console-filtered.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# obmc-console-client will immediately exit if we don't give it an stdin +# that it can block on forever, so we hook it up to /dev/null since that never +# feeds it data. +# We only allow printable characters we know to be good. This set is +# currently newline + all printable ASCII chars (space through hyphen). +obmc-console-client < <(tail -f /dev/null) | tr -cd '\12\40-\176' diff --git a/meta-google/recipes-phosphor/console/obmc-console/host-console-journal.service.in b/meta-google/recipes-phosphor/console/obmc-console/host-console-journal.service.in new file mode 100644 index 0000000000..99d527b054 --- /dev/null +++ b/meta-google/recipes-phosphor/console/obmc-console/host-console-journal.service.in @@ -0,0 +1,11 @@ +[Unit] +Requires=obmc-console@@HOST_TTY@.service +After=obmc-console@@HOST_TTY@.service + +[Service] +Type=simple +SyslogIdentifier=host-console +ExecStart=/usr/bin/host-console-filtered.sh + +[Install] +WantedBy=multi-user.target diff --git a/meta-google/recipes-phosphor/console/obmc-console/serial-to-bmc@.service b/meta-google/recipes-phosphor/console/obmc-console/serial-to-bmc@.service new file mode 100644 index 0000000000..f8c55b3531 --- /dev/null +++ b/meta-google/recipes-phosphor/console/obmc-console/serial-to-bmc@.service @@ -0,0 +1,22 @@ +[Unit] +Description=BMC Serial Getty on %I +BindsTo=dev-%i.device +After=dev-%i.device systemd-user-sessions.service +After=rc-local.service +Before=getty.target +IgnoreOnIsolate=yes + +Conflicts=serial-to-host@%i.service +StartLimitIntervalSec=0 + +[Service] +Type=simple +Restart=no +RestartSec=0 +ExecStart=-/sbin/agetty -8 -n -o '-f root' -i -N -R -L %I 115200 xterm +ExecStopPost=-/bin/sh -c 'systemctl start --no-block serial-to-host@%i' +UtmpIdentifier=%I +TTYPath=/dev/%I +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes diff --git a/meta-google/recipes-phosphor/console/obmc-console/serial-to-host@.service.in b/meta-google/recipes-phosphor/console/obmc-console/serial-to-host@.service.in new file mode 100644 index 0000000000..c38b720662 --- /dev/null +++ b/meta-google/recipes-phosphor/console/obmc-console/serial-to-host@.service.in @@ -0,0 +1,29 @@ +[Unit] +Description=Host Serial Getty on %I +BindsTo=dev-%i.device +After=dev-%i.device systemd-user-sessions.service +After=rc-local.service +Before=getty.target +IgnoreOnIsolate=yes + +Requires=obmc-console@@HOST_TTY@.service +After=obmc-console@@HOST_TTY@.service +Conflicts=serial-to-bmc@%i.service +StartLimitIntervalSec=0 + +[Service] +Type=simple +Restart=always +RestartSec=0 +RestartPreventExitStatus=2 +SuccessExitStatus=2 +ExecStart=-/sbin/agetty -8 -n -l /usr/bin/obmc-console-client -o '-e a00pae9n2B9m1c' -i -N -R -L %I 115200 xterm +ExecStopPost=-/bin/sh -c '(( EXIT_STATUS == 2 )) && systemctl start --no-block serial-to-bmc@%i' +UtmpIdentifier=%I +TTYPath=/dev/%I +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes + +[Install] +WantedBy=getty.target diff --git a/meta-google/recipes-phosphor/console/obmc-console_%.bbappend b/meta-google/recipes-phosphor/console/obmc-console_%.bbappend new file mode 100644 index 0000000000..d53eaaaa05 --- /dev/null +++ b/meta-google/recipes-phosphor/console/obmc-console_%.bbappend @@ -0,0 +1,44 @@ +FILESEXTRAPATHS:prepend:gbmc := "${THISDIR}/${PN}:" + +SRC_URI:append:gbmc = " \ + file://serial-to-bmc@.service \ + file://serial-to-host@.service.in \ + file://host-console-journal.service.in \ + file://host-console-filtered.sh \ + " + +SYSTEMD_SERVICE:${PN}:append:gbmc = " serial-to-bmc@.service" +SYSTEMD_SERVICE:${PN}:append:gbmc= " serial-to-host@.service" + +OBMC_CONSOLE_FRONT_TTY ?= "" + +RDEPENDS:${PN}:append:gbmc = " bash" + +FILES:${PN}:append:gbmc = " ${systemd_system_unitdir}/host-console-journal.service" + +do_install:append:gbmc() { + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/serial-to-bmc@.service \ + ${D}${systemd_system_unitdir} + + sed "s,@HOST_TTY@,${OBMC_CONSOLE_HOST_TTY}," \ + ${WORKDIR}/serial-to-host@.service.in \ + >${D}${systemd_system_unitdir}/serial-to-host@.service + + sed 's,@HOST_TTY@,${OBMC_CONSOLE_HOST_TTY},' \ + ${WORKDIR}/host-console-journal.service.in \ + >${D}${systemd_system_unitdir}/host-console-journal.service + + install -d ${D}${bindir} + install -m0755 ${WORKDIR}/host-console-filtered.sh ${D}${bindir}/ +} + +pkg_postinst:${PN}:append:gbmc () { + if [ -n "${OBMC_CONSOLE_FRONT_TTY}" ]; then + systemctl --root=$D enable serial-to-host@${OBMC_CONSOLE_FRONT_TTY}.service + fi +} + +pkg_postinst:${PN}:append:gbmc:dev () { + systemctl --root=$D enable host-console-journal.service +} |