From 439cce426d8a072ca2049fdb313eead3264b42ff Mon Sep 17 00:00:00 2001 From: Alexey Vazhnov Date: Tue, 12 Dec 2023 17:16:26 +0100 Subject: [PATCH 01/13] supervise-daemon-guide.md: adjust markdown formatting. No logic/text changes were made. --- supervise-daemon-guide.md | 63 +++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/supervise-daemon-guide.md b/supervise-daemon-guide.md index 7390bc704..06a49d2f1 100644 --- a/supervise-daemon-guide.md +++ b/supervise-daemon-guide.md @@ -1,55 +1,54 @@ -Using supervise-daemon -====================== +# Using supervise-daemon Beginning with OpenRC-0.21 we have our own daemon supervisor, -supervise-daemon., which can start a daemon and restart it if it +`supervise-daemon`, which can start a daemon and restart it if it terminates unexpectedly. The following is a brief guide on using this capability. -* Use Default start, stop and status functions +* **Use Default start, stop and status functions**. If you write your own start, stop and status functions in your service script, none of this will work. You must allow OpenRC to use the default functions. -* Daemons must not fork - Any daemon that you would like to have monitored by supervise-daemon +* **Daemons must not fork**. + Any daemon that you would like to have monitored by `supervise-daemon` must not fork. Instead, it must stay in the foreground. If the daemon forks, the supervisor will be unable to monitor it. If the daemon can be configured to not fork, this should be done in the daemon's configuration file, or by adding a command line option that - instructs it not to fork to the command_args_foreground variable shown + instructs it not to fork to the `command_args_foreground` variable shown below. -# Health Checks +## Health checks Health checks are a way to make sure a service monitored by -supervise-daemon stays healthy. To configure a health check for a -service, you need to write a healthcheck() function, and optionally an -unhealthy() function in the service script. Also, you will need to set -the healthcheck_timer and optionally healthcheck_delay variables. +`supervise-daemon` stays healthy. To configure a health check for a +service, you need to write a `healthcheck()` function, and optionally an +`unhealthy()` function in the service script. Also, you will need to set +the `healthcheck_timer` and optionally `healthcheck_delay` variables. -## healthcheck() function +### healthcheck() function -The healthcheck() function is run repeatedly based on the settings of -the healthcheck_* variables. This function should return zero if the +The `healthcheck()` function is run repeatedly based on the settings of +the `healthcheck_*` variables. This function should return zero if the service is currently healthy or non-zero otherwise. -## unhealthy() function +### unhealthy() function -If the healthcheck() function returns non-zero, the unhealthy() function +If the `healthcheck()` function returns non-zero, the `unhealthy()` function is run, then the service is restarted. Since the service will be restarted by the supervisor, the unhealthy function should not try to restart it; the purpose of the function is to allow any cleanup tasks other than restarting the service to be run. -# Variable Settings +## Variable settings The most important setting is the supervisor variable. At the top of your service script, you should set this variable as follows: -``` sh +```sh supervisor=supervise-daemon ``` @@ -57,29 +56,29 @@ Several other variables affect the way services behave under supervise-daemon. They are documented on the openrc-run man page, but I will list them here for convenience: -``` sh +```sh command_args_foreground="arguments" ``` -This should be used if the daemon you want to monitor +This should be used if the daemon you want to monitor forks and goes to the background by default. This should be set to the command line option that instructs the daemon to stay in the foreground. -``` sh +```sh healthcheck_delay=seconds ``` This is the delay, in seconds, before the first health check is run. -If it is not set, we use the value of healthcheck_timer. +If it is not set, we use the value of `healthcheck_timer`. -``` sh +```sh healthcheck_timer=seconds ``` This is the number of seconds between health checks. If it is not set, no health checks will be run. -``` sh +```sh respawn_delay ``` @@ -87,7 +86,7 @@ This is the number of seconds to delay before attempting to respawn a supervised process after it dies unexpectedly. The default is to respawn immediately. -``` sh +```sh respawn_max=x ``` @@ -95,17 +94,17 @@ This is the maximum number of times to respawn a supervised process during the given respawn period. The default is 10. 0 means unlimited. -``` sh +```sh respawn_period=seconds ``` -This works in conjunction with respawn_max and respawn_delay above to +This works in conjunction with `respawn_max` and `respawn_delay` above to decide if a process should not be respawned for some reason. -For example, if respawn period is 10 and respawn_max is 2, the process +For example, if respawn period is 10 and `respawn_max` is 2, the process would need to die 3 times within 10 seconds to no longer be respawned. -Note that respawn_delay will delay all of this, so in the above scenario -a respawn_delay of greater than 5 will cause infinite respawns. +Note that `respawn_delay` will delay all of this, so in the above scenario +a `respawn_delay` of greater than 5 will cause infinite respawns. -By default, this is unset and respawn_max applies to the entire lifetime +By default, this is unset and `respawn_max` applies to the entire lifetime of the service. From 97689d6c4478cd3a388402cb4d3a2db82b99cc78 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Fri, 15 Dec 2023 18:52:28 +0100 Subject: [PATCH 02/13] sh/rc-cgroup.sh: add openrc. prefix the cgroupv2 path Some services, like docker, creates and manages /sys/fs/cgroup/ themselves. Avoid conflict with the openrc created cgroup path by adding a `openrc.` prefix. Fixes: https://github.com/OpenRC/openrc/issues/680 --- sh/rc-cgroup.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sh/rc-cgroup.sh b/sh/rc-cgroup.sh index e5c7ae7f5..f10e328c1 100644 --- a/sh/rc-cgroup.sh +++ b/sh/rc-cgroup.sh @@ -35,7 +35,7 @@ cgroup_get_pids() cgroup_pids= cgroup_procs="$(cgroup2_find_path)" if [ -n "${cgroup_procs}" ]; then - cgroup_procs="${cgroup_procs}/${RC_SVCNAME}/cgroup.procs" + cgroup_procs="${cgroup_procs}/openrc.${RC_SVCNAME}/cgroup.procs" else cgroup_procs="/sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks" fi @@ -167,7 +167,7 @@ cgroup2_remove() local cgroup_path rc_cgroup_path cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 0 - rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}" + rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" [ ! -d "${rc_cgroup_path}" ] || [ ! -e "${rc_cgroup_path}"/cgroup.events ] && return 0 @@ -191,7 +191,7 @@ cgroup2_set_limits() cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 0 mountinfo -q "${cgroup_path}"|| return 0 - rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}" + rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" [ ! -d "${rc_cgroup_path}" ] && mkdir "${rc_cgroup_path}" [ -f "${rc_cgroup_path}"/cgroup.procs ] && printf 0 > "${rc_cgroup_path}"/cgroup.procs @@ -210,7 +210,7 @@ cgroup2_kill_cgroup() { local cgroup_path cgroup_path="$(cgroup2_find_path)" [ -z "${cgroup_path}" ] && return 1 - rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}" + rc_cgroup_path="${cgroup_path}/openrc.${RC_SVCNAME}" if [ -f "${rc_cgroup_path}"/cgroup.kill ]; then printf "%d" 1 > "${rc_cgroup_path}"/cgroup.kill fi From f9c92d78221e7827b4a6144d0c2e2b4d3de99416 Mon Sep 17 00:00:00 2001 From: Forza-tng Date: Tue, 26 Dec 2023 15:48:29 +0100 Subject: [PATCH 03/13] enable confd cgroups mount options This fixes #684. --- conf.d/cgroups | 2 ++ init.d/cgroups.in | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 conf.d/cgroups diff --git a/conf.d/cgroups b/conf.d/cgroups new file mode 100644 index 000000000..680c5ca9d --- /dev/null +++ b/conf.d/cgroups @@ -0,0 +1,2 @@ +# override cgroup mount options +#cgroup_opts=nodev,noexec,nosuid diff --git a/init.d/cgroups.in b/init.d/cgroups.in index 218cce7db..ac1f5cc85 100644 --- a/init.d/cgroups.in +++ b/init.d/cgroups.in @@ -11,7 +11,7 @@ description="Mount the control groups." -cgroup_opts=nodev,noexec,nosuid +: "${cgroup_opts:="nodev,noexec,nosuid"}" depend() { From 961c479e1db7141322a1dfc10b4c482c736b7712 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Fri, 12 Jan 2024 11:24:48 -0600 Subject: [PATCH 04/13] update news --- NEWS.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/NEWS.md b/NEWS.md index 4fd612920..32e2a0bd7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,14 @@ OpenRC NEWS This file will contain a list of notable changes for each release. Note the information in this file is in reverse order. +## OpenRC 0.53 + +The names of cgroups for services started by OpenRC are now prefixed by +"openrc." This is done because some services, like docker, create their +own cgroups. + +It is now possible to override the mount options used to mount the +cgroups filesystems. ## OpenRC 0.52 This release drops the "runscript" and "rc" binaries. From c45fe9fba5f9149d17eab9e1bfef741a633b1646 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Fri, 12 Jan 2024 11:29:03 -0600 Subject: [PATCH 05/13] version 0.53 --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 9f4fc5ee5..dc1a3fd87 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('OpenRC', 'c', - version : '0.51', + version : '0.53', license: 'BSD-2', default_options : [ 'c_std=c99', From 12e1e884750cc6cf592bbbdaef6f40ceee304b25 Mon Sep 17 00:00:00 2001 From: Sam James Date: Mon, 25 Mar 2024 13:43:43 +0000 Subject: [PATCH 06/13] meson: drop broken split-usr handling Two issues here: * The 'split-usr' meson option wasn't doing anything, it tried to check if /bin was a symlink, but nothing acted on this information. * The actual rootprefix default was decided based on whether /bin was a symlink which is flaky if e.g. building on a merged-usr system for use on a non-merged-usr system. People can set -Drootprefix=/usr if they wish. There's no real advantage to installing to /usr over / as the compat. symlinks are really here to stay. If someone really does care about this, they can bring it back and do it properly, but it doesn't seem worth it to me at all. Bug: https://bugs.gentoo.org/927776 Fixes: cc0037e9caaee05af0fdedafc5798c2a7aa9bdb8 Fixes: f2362cc277023550b2482215b4a1cd7142639427 Fixes: #696 --- meson.build | 9 +-------- meson_options.txt | 3 --- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/meson.build b/meson.build index dc1a3fd87..4e330d33b 100644 --- a/meson.build +++ b/meson.build @@ -83,16 +83,9 @@ else pkg_prefix = option_pkg_prefix endif -if get_option('split-usr') == 'auto' - split_usr = run_command('test', '-L', '/bin', check: false).returncode() != 0 -else - split_usr = get_option('split-usr') == 'true' -endif - rootprefix = get_option('rootprefix') -rootprefix_default = fs.is_symlink('/bin') ? '/usr' : '/' if rootprefix == '' -rootprefix = rootprefix_default +rootprefix = '/' endif bindir = rootprefix / get_option('bindir') diff --git a/meson_options.txt b/meson_options.txt index 2c74152e6..1f38efbbf 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -26,9 +26,6 @@ option('selinux', type : 'feature', value : 'auto', description : 'enable SELinux support') option('shell', type : 'string', value : '/bin/sh', description : 'Default posix compatible shell') -option('split-usr', type : 'combo', - choices : ['auto', 'true', 'false'], - description : '''/bin, /sbin aren't symlinks into /usr''') option('sysvinit', type : 'boolean', value : false, description : 'enable SysVinit compatibility (linux only)') option('termcap', type : 'combo', From 7ac2080e314b1203bfc25769209e6033f4d09d6e Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Sun, 31 Mar 2024 16:04:47 -0500 Subject: [PATCH 07/13] ci: update FreeBSD releases we test against --- .cirrus.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 4ce5e3d06..9ca7bb772 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -4,8 +4,8 @@ test_task: freebsd_instance: matrix: - image: freebsd-13-1-release-amd64 - image: freebsd-12-4-release-amd64 + image: freebsd-13-2-release-amd64 + image: freebsd-13-3-release-amd64 env: OS: FreeBSD procfs_script: > From 536794dfad33be978c7b1f8005c899c8d4ce2fa6 Mon Sep 17 00:00:00 2001 From: Oskari Pirhonen Date: Tue, 20 Feb 2024 00:17:56 -0600 Subject: [PATCH 08/13] Trivial curses/termcap removal Remove the curses code and make the HAVE_TERMCAP-gated "fallbacks" always present. This makes an ANSI terminal required for colors. X-Gentoo-Bug: https://bugs.gentoo.org/904277 Closes: https://github.com/OpenRC/openrc/issues/619 --- meson.build | 9 ----- meson_options.txt | 4 -- src/libeinfo/libeinfo.c | 81 +++++++++------------------------------- src/libeinfo/meson.build | 2 - 4 files changed, 17 insertions(+), 79 deletions(-) diff --git a/meson.build b/meson.build index 4e330d33b..93186887d 100644 --- a/meson.build +++ b/meson.build @@ -126,15 +126,6 @@ else cc_selinux_flags = [] endif -termcap = get_option('termcap') -if termcap != '' - termcap_dep = dependency(termcap) - termcap_flags = '-DHAVE_TERMCAP' - else - termcap_dep = [] - termcap_flags = [] -endif - if get_option('buildtype').startswith('debug') cc_debug_flags = ['-DRC_DEBUG'] else diff --git a/meson_options.txt b/meson_options.txt index 1f38efbbf..c0a6ffa9b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -28,9 +28,5 @@ option('shell', type : 'string', value : '/bin/sh', description : 'Default posix compatible shell') option('sysvinit', type : 'boolean', value : false, description : 'enable SysVinit compatibility (linux only)') -option('termcap', type : 'combo', - choices : - [ '', 'ncurses', 'termcap' ], - description : 'the termcap library to use') option('zsh-completions', type : 'boolean', description : 'install zsh completions') diff --git a/src/libeinfo/libeinfo.c b/src/libeinfo/libeinfo.c index 840233bd3..7e86091e9 100644 --- a/src/libeinfo/libeinfo.c +++ b/src/libeinfo/libeinfo.c @@ -4,7 +4,7 @@ */ /* - * Copyright (c) 2007-2015 The OpenRC Authors. + * Copyright (c) 2007-2024 The OpenRC Authors. * See the Authors file at the top-level directory of this distribution and * https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS * @@ -26,9 +26,6 @@ #include #include #include -#ifdef HAVE_TERMCAP -# include -#endif #include #include "einfo.h" @@ -97,12 +94,6 @@ static char *goto_column = NULL; static const char *term = NULL; static bool term_is_cons25 = false; -/* Termcap buffers and pointers - * Static buffers suck hard, but some termcap implementations require them */ -#ifdef HAVE_TERMCAP -static char termcapbuf[2048]; -static char tcapbuf[512]; -#else /* No curses support, so we hardcode a list of colour capable terms * Only terminals without "color" in the name need to be explicitly listed */ static const char *const color_terms[] = { @@ -144,7 +135,6 @@ static const char *const color_terms[] = { "xterm-debian", NULL }; -#endif #ifndef HAVE_STRLCPY static size_t @@ -236,7 +226,6 @@ is_verbose(void) } /* Fake tgoto call - very crapy, but works for our needs */ -#ifndef HAVE_TERMCAP static char * tgoto(const char *cap, int col, int line) { @@ -299,7 +288,6 @@ tgoto(const char *cap, int col, int line) *p = '\0'; return buf; } -#endif static bool colour_terminal(FILE * EINFO_RESTRICT f) @@ -312,9 +300,6 @@ colour_terminal(FILE * EINFO_RESTRICT f) const char *bold; char tmp[100]; unsigned int i = 0; -#ifdef HAVE_TERMCAP - char *bp; -#endif if (f && !isatty(fileno(f))) return false; @@ -336,65 +321,33 @@ colour_terminal(FILE * EINFO_RESTRICT f) if (strcmp(term, "cons25") == 0) term_is_cons25 = true; -#ifdef HAVE_TERMCAP - /* Check termcap to see if we can do colour or not */ - if (tgetent(termcapbuf, term) == 1) { - bp = tcapbuf; - _af = tgetstr("AF", &bp); - _ce = tgetstr("ce", &bp); - _ch = tgetstr("ch", &bp); - /* Our ch use also works with RI .... for now */ - if (!_ch) - _ch = tgetstr("RI", &bp); - _md = tgetstr("md", &bp); - _me = tgetstr("me", &bp); - _up = tgetstr("up", &bp); - } + if (strstr(term, "color")) + in_colour = 1; - /* Cheat here as vanilla BSD has the whole termcap info in /usr - * which is not available to us when we boot */ - if (term_is_cons25 || strcmp(term, "wsvt25") == 0) { -#else - if (strstr(term, "color")) + while (color_terms[i] && in_colour != 1) { + if (strcmp(color_terms[i], term) == 0) { in_colour = 1; - - while (color_terms[i] && in_colour != 1) { - if (strcmp(color_terms[i], term) == 0) { - in_colour = 1; - } - i++; - } - - if (in_colour != 1) { - in_colour = 0; - return false; } -#endif - if (!_af) - _af = AF; - if (!_ce) - _ce = CE; - if (!_ch) - _ch = CH; - if (!_md) - _md = MD; - if (!_me) - _me = ME; - if (!_up) - _up = UP; -#ifdef HAVE_TERMCAP + i++; } - if (!_af || !_ce || !_me || !_md || !_up) { + if (in_colour != 1) { in_colour = 0; return false; } - /* Many termcap databases don't have ch or RI even though they - * do work */ + if (!_af) + _af = AF; + if (!_ce) + _ce = CE; if (!_ch) _ch = CH; -#endif + if (!_md) + _md = MD; + if (!_me) + _me = ME; + if (!_up) + _up = UP; /* Now setup our colours */ p = ebuffer; diff --git a/src/libeinfo/meson.build b/src/libeinfo/meson.build index 16e829786..6ee923cc6 100644 --- a/src/libeinfo/meson.build +++ b/src/libeinfo/meson.build @@ -1,9 +1,7 @@ libeinfo_version = '1' libeinfo = library('einfo', ['libeinfo.c'], - c_args : termcap_flags, include_directories : incdir, - dependencies : termcap_dep, link_depends : 'einfo.map', version : libeinfo_version, install : true, From 957140cb7878ce353c812cf7ea8ba9d46a942412 Mon Sep 17 00:00:00 2001 From: Oskari Pirhonen Date: Tue, 20 Feb 2024 22:52:33 -0600 Subject: [PATCH 09/13] Touch up docs/comments Remove the mention of linking with libtermcap from einfo(3), and fix some comments in libeinfo.c to more accurately reflect the new situation. --- man/einfo.3 | 7 ------- src/libeinfo/libeinfo.c | 5 ++--- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/man/einfo.3 b/man/einfo.3 index fd268c42f..9b8826eb0 100644 --- a/man/einfo.3 +++ b/man/einfo.3 @@ -158,13 +158,6 @@ is true. prefixes the string .Fa prefix to the above functions. -.Sh IMPLEMENTATION NOTES -einfo can optionally be linked against the -.Lb libtermcap -so that we can correctly query the connected console for our color and -cursor escape codes. -If not, then we have a hard coded list of terminals we know about that support -the commonly used codes for color and cursor position. .Sh ENVIRONMENT .Va EINFO_QUIET when set to true makes the diff --git a/src/libeinfo/libeinfo.c b/src/libeinfo/libeinfo.c index 7e86091e9..1d2427aa1 100644 --- a/src/libeinfo/libeinfo.c +++ b/src/libeinfo/libeinfo.c @@ -50,8 +50,7 @@ #define HILITE 6 #define BRACKET 4 -/* We fallback to these escape codes if termcap isn't available - * like say /usr isn't mounted */ +/* ANSI escape codes which mimic termcap */ #define AF "\033[3%dm" #define CE "\033[K" #define CH "\033[%dC" @@ -94,7 +93,7 @@ static char *goto_column = NULL; static const char *term = NULL; static bool term_is_cons25 = false; -/* No curses support, so we hardcode a list of colour capable terms +/* Hardcoded list of colour capable terms * Only terminals without "color" in the name need to be explicitly listed */ static const char *const color_terms[] = { "Eterm", From 42408e74888fe9ec802da82d54ad2a58bb4e75fe Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Mon, 1 Apr 2024 12:05:18 -0500 Subject: [PATCH 10/13] update news --- NEWS.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NEWS.md b/NEWS.md index 32e2a0bd7..caf044d99 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,12 @@ OpenRC NEWS This file will contain a list of notable changes for each release. Note the information in this file is in reverse order. +## OpenRC 0.54 + +This release drops the support for split-usr. +Also, it drops the support for ncurses/termcap and uses ansi codes +directly for color support on terminals that support them. + ## OpenRC 0.53 The names of cgroups for services started by OpenRC are now prefixed by From 6b420196979c91c01394df79dc4c75b60029a6e6 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Mon, 1 Apr 2024 12:06:53 -0500 Subject: [PATCH 11/13] version 0.54 --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 93186887d..6ee4466ba 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('OpenRC', 'c', - version : '0.53', + version : '0.54', license: 'BSD-2', default_options : [ 'c_std=c99', From 4574b5d8e4cee1febfcef301c0c48723e12c5478 Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Mon, 1 Apr 2024 14:22:37 -0500 Subject: [PATCH 12/13] clarify news update about split-usr option --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index caf044d99..86c9f85e4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,7 +6,7 @@ the information in this file is in reverse order. ## OpenRC 0.54 -This release drops the support for split-usr. +This release drops the support for the split-usr build option. Also, it drops the support for ncurses/termcap and uses ansi codes directly for color support on terminals that support them. From 3d30b6fddaf92c612deea88d2ced7114ed1fcf9c Mon Sep 17 00:00:00 2001 From: John Einar Reitan Date: Wed, 3 Apr 2024 12:47:10 +0200 Subject: [PATCH 13/13] Add xterm-kitty to color capable term list --- src/libeinfo/libeinfo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libeinfo/libeinfo.c b/src/libeinfo/libeinfo.c index 1d2427aa1..ce3d54d68 100644 --- a/src/libeinfo/libeinfo.c +++ b/src/libeinfo/libeinfo.c @@ -132,6 +132,7 @@ static const char *const color_terms[] = { "wsvt25", "xterm", "xterm-debian", + "xterm-kitty", NULL };