[PATCH] Run anaconda inside tmux
Will Woods
wwoods at redhat.com
Wed Jul 18 19:05:14 UTC 2012
Having a shell on tty2 or hvc1 is convenient.. if you have tty2 or hvc1.
But not everyone does - think s390, or POWER, or remote virt guests.
Instead, let's run anaconda inside a tmux session, with windows
pre-configured with a shell, anaconda.log, program.log, and storage.log.
We set this up by using two services: anaconda.service, and
anaconda-tmux at .service.
anaconda.service starts anaconda (and starts watching the logs) inside a
detached tmux session, on screen 1. It also starts a shell on screen 2,
and 'tail -F' on anaconda.log, storage.log, and program.log on screens
3, 4, and 5.
anaconda-tmux at .service will be instantiated on the default console
(tty1, hvc0, ttyS0, whatever) and connect to the running tmux session,
which will show screen 1 - and thus the text UI (if any) appears.
Exiting tmux just restarts anaconda-tmux at .service, which reconnects to
the existing session, so you can't accidentally kill the installer by
leaving tmux.
---
anaconda | 5 -----
data/Makefile.am | 3 +++
data/systemd/Makefile.am | 3 ++-
data/systemd/anaconda-cleanup-initramfs.service | 2 +-
data/systemd/anaconda-generator | 2 +-
data/systemd/anaconda-tmux at .service | 15 +++++++++++++++
data/systemd/anaconda.service | 9 +++++++++
data/systemd/anaconda.target | 1 -
data/systemd/anaconda at .service | 13 -------------
data/tmux.conf | 16 ++++++++++++++++
10 files changed, 47 insertions(+), 22 deletions(-)
create mode 100644 data/systemd/anaconda-tmux at .service
create mode 100644 data/systemd/anaconda.service
delete mode 100644 data/systemd/anaconda at .service
create mode 100644 data/tmux.conf
diff --git a/anaconda b/anaconda
index 15d13e6..59bcd9e 100755
--- a/anaconda
+++ b/anaconda
@@ -717,11 +717,6 @@ if __name__ == "__main__":
" (pre-release)" if not product.isFinal else "",
)
- # to set UTF8 mode on the terminal, we need LANG to be set usefully
- if os.environ.get("LANG", "C") == "C":
- os.environ['LANG'] = DEFAULT_LANG
- print "\033%G" # UTF8 power go!
-
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
diff --git a/data/Makefile.am b/data/Makefile.am
index cc82ae5..5708281 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -29,6 +29,9 @@ langdir = $(datadir)/$(PACKAGE_NAME)
lang_DATA = lang-names
dist_lang_DATA = lang-table
+tmuxdir = $(datadir)/$(PACKAGE_NAME)
+dist_tmux_DATA = tmux.conf
+
if IS_S390
shareddir = $(datadir)/$(PACKAGE_NAME)
dist_shared_SCRIPTS = linuxrc.s390
diff --git a/data/systemd/Makefile.am b/data/systemd/Makefile.am
index 8579ece..96bd8f0 100644
--- a/data/systemd/Makefile.am
+++ b/data/systemd/Makefile.am
@@ -20,8 +20,9 @@
systemddir = /lib/systemd/system
generatordir = /lib/systemd/system-generators
-dist_systemd_DATA = anaconda at .service \
+dist_systemd_DATA = anaconda.service \
anaconda.target \
+ anaconda-tmux at .service \
anaconda-shell at .service \
instperf.service \
anaconda-sshd.service \
diff --git a/data/systemd/anaconda-cleanup-initramfs.service b/data/systemd/anaconda-cleanup-initramfs.service
index 1d10bfc..cc49357 100644
--- a/data/systemd/anaconda-cleanup-initramfs.service
+++ b/data/systemd/anaconda-cleanup-initramfs.service
@@ -1,6 +1,6 @@
[Unit]
Description=Clean Up Initramfs
-Before=anaconda at .service
+Before=anaconda.service
ConditionPathIsDirectory=/run/initramfs/usr/lib/modules
[Service]
diff --git a/data/systemd/anaconda-generator b/data/systemd/anaconda-generator
index cb47040..71e35e7 100755
--- a/data/systemd/anaconda-generator
+++ b/data/systemd/anaconda-generator
@@ -25,7 +25,7 @@ done
consoletty="$tty"
# put anaconda on the real console
-service_on_tty anaconda at .service $consoletty
+service_on_tty anaconda-tmux at .service $consoletty
# put a shell on tty2 and the first virtualization console we find
for tty in tty2 hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do
diff --git a/data/systemd/anaconda-tmux at .service b/data/systemd/anaconda-tmux at .service
new file mode 100644
index 0000000..0b83765
--- /dev/null
+++ b/data/systemd/anaconda-tmux at .service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Anaconda Text Console
+Requires=anaconda.service
+After=anaconda.target anaconda.service
+
+[Service]
+Type=simple
+WorkingDirectory=/root
+Environment=LANG=en_US.UTF-8
+ExecStartPre=/usr/bin/echo -e \033%G
+ExecStart=/usr/bin/tmux -u attach -t anaconda
+StandardInput=tty-force
+TTYPath=/dev/%I
+TTYReset=yes
+Restart=always
diff --git a/data/systemd/anaconda.service b/data/systemd/anaconda.service
new file mode 100644
index 0000000..5629e00
--- /dev/null
+++ b/data/systemd/anaconda.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Anaconda
+After=anaconda.target
+
+[Service]
+Type=forking
+Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin LANG=en_US.UTF-8
+WorkingDirectory=/root
+ExecStart=/usr/bin/tmux -u -f /etc/anaconda-tmux.conf start
diff --git a/data/systemd/anaconda.target b/data/systemd/anaconda.target
index 9a95c66..597adfd 100644
--- a/data/systemd/anaconda.target
+++ b/data/systemd/anaconda.target
@@ -3,7 +3,6 @@ Description=Anaconda System Services
Requires=basic.target
After=basic.target
AllowIsolate=yes
-Before=anaconda at .service
Wants=anaconda-cleanup-initramfs.service
Wants=instperf.service
Wants=rsyslog.service
diff --git a/data/systemd/anaconda at .service b/data/systemd/anaconda at .service
deleted file mode 100644
index 03ecabb..0000000
--- a/data/systemd/anaconda at .service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Anaconda
-After=anaconda.target
-
-[Service]
-Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin
-Type=oneshot
-WorkingDirectory=/root
-ExecStart=/usr/sbin/anaconda
-StandardInput=tty-force
-TTYPath=/dev/%I
-TTYReset=yes
-TimeoutSec=0
diff --git a/data/tmux.conf b/data/tmux.conf
new file mode 100644
index 0000000..3639fcb
--- /dev/null
+++ b/data/tmux.conf
@@ -0,0 +1,16 @@
+# tmux.conf for the anaconda environment
+set-option -s exit-unattached off
+set-option -g base-index 1
+
+new-session -s anaconda -n main "anaconda"
+
+set-option set-remain-on-exit on
+set-option status-right ""
+set-option status-right-length 0
+
+new-window -d -n shell "bash --login"
+new-window -d -n log "tail -F /tmp/anaconda.log"
+new-window -d -n storage-log "tail -F /tmp/storage.log"
+new-window -d -n program-log "tail -F /tmp/program.log"
+
+detach-client -s anaconda
--
1.7.10.4
More information about the anaconda-patches
mailing list