Merge pull request #27703 from keszybz/systemd-vconsole-ordering

Order systemd-vconsole-setup before getty units
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2023-05-22 13:27:33 +02:00
committed by GitHub
14 changed files with 55 additions and 33 deletions
+1
View File
@@ -85,6 +85,7 @@
#define SPECIAL_QUOTACHECK_SERVICE "systemd-quotacheck.service"
#define SPECIAL_QUOTAON_SERVICE "quotaon.service"
#define SPECIAL_REMOUNT_FS_SERVICE "systemd-remount-fs.service"
#define SPECIAL_VCONSOLE_SETUP_SERVICE "systemd-vconsole-setup.service"
#define SPECIAL_VOLATILE_ROOT_SERVICE "systemd-volatile-root.service"
#define SPECIAL_UDEVD_SERVICE "systemd-udevd.service"
#define SPECIAL_GROWFS_SERVICE "systemd-growfs@.service"
+10
View File
@@ -6870,6 +6870,16 @@ bool exec_context_has_encrypted_credentials(ExecContext *c) {
return false;
}
int exec_context_add_default_dependencies(Unit *u, const ExecContext *c) {
assert(u);
assert(u->default_dependencies);
if (c && exec_context_needs_term(c))
return unit_add_dependency_by_name(u, UNIT_AFTER, SPECIAL_VCONSOLE_SETUP_SERVICE,
/* add_reference= */ true, UNIT_DEPENDENCY_DEFAULT);
return 0;
}
void exec_status_start(ExecStatus *s, pid_t pid) {
assert(s);
+1
View File
@@ -486,6 +486,7 @@ void exec_context_revert_tty(ExecContext *c);
int exec_context_get_clean_directories(ExecContext *c, char **prefix, ExecCleanMask mask, char ***ret);
int exec_context_get_clean_mask(ExecContext *c, ExecCleanMask *ret);
int exec_context_add_default_dependencies(Unit *u, const ExecContext *c);
void exec_status_start(ExecStatus *s, pid_t pid);
void exec_status_exit(ExecStatus *s, const ExecContext *context, pid_t pid, int code, int status);
+1 -1
View File
@@ -575,7 +575,7 @@ static int mount_add_default_dependencies(Mount *m) {
return r;
}
return 0;
return exec_context_add_default_dependencies(UNIT(m), &m->exec_context);
}
static int mount_verify(Mount *m) {
+6 -1
View File
@@ -740,7 +740,12 @@ static int service_add_default_dependencies(Service *s) {
return r;
/* Third, add us in for normal shutdown. */
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
if (r < 0)
return r;
/* Fourth, add generic dependencies */
return exec_context_add_default_dependencies(UNIT(s), &s->exec_context);
}
static void service_fix_stdio(Service *s) {
+5 -1
View File
@@ -276,7 +276,11 @@ static int socket_add_default_dependencies(Socket *s) {
return r;
}
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
if (r < 0)
return r;
return exec_context_add_default_dependencies(UNIT(s), &s->exec_context);
}
_pure_ static bool socket_has_exec(Socket *s) {
+5 -1
View File
@@ -270,7 +270,11 @@ static int swap_add_default_dependencies(Swap *s) {
if (r < 0)
return r;
return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, true, UNIT_DEPENDENCY_DEFAULT);
if (r < 0)
return r;
return exec_context_add_default_dependencies(UNIT(s), &s->exec_context);
}
static int swap_verify(Swap *s) {
+13 -22
View File
@@ -51,11 +51,11 @@ typedef struct Context {
} Context;
static const char * const vc_meta_names[_VC_META_MAX] = {
[VC_KEYMAP] = "vconsole.keymap",
[VC_KEYMAP_TOGGLE] = "vconsole.keymap_toggle",
[VC_FONT] = "vconsole.font",
[VC_FONT_MAP] = "vconsole.font_map",
[VC_FONT_UNIMAP] = "vconsole.font_unimap",
[VC_KEYMAP] = "vconsole.keymap",
[VC_KEYMAP_TOGGLE] = "vconsole.keymap_toggle",
[VC_FONT] = "vconsole.font",
[VC_FONT_MAP] = "vconsole.font_map",
[VC_FONT_UNIMAP] = "vconsole.font_unimap",
};
/* compatibility with obsolete multiple-dot scheme */
@@ -380,17 +380,12 @@ static void setup_remaining_vcs(int src_fd, unsigned src_idx, bool utf8) {
struct unimapdesc unimapd;
_cleanup_free_ struct unipair* unipairs = NULL;
_cleanup_free_ void *fontbuf = NULL;
unsigned i;
int log_level;
int log_level = LOG_WARNING;
int r;
unipairs = new(struct unipair, USHRT_MAX);
if (!unipairs) {
log_oom();
return;
}
log_level = LOG_WARNING;
if (!unipairs)
return (void) log_oom();
/* get metadata of the current font (width, height, count) */
r = ioctl(src_fd, KDFONTOP, &cfo);
@@ -440,7 +435,7 @@ static void setup_remaining_vcs(int src_fd, unsigned src_idx, bool utf8) {
if (cfo.op != KD_FONT_OP_SET)
log_full(log_level, "Fonts will not be copied to remaining consoles");
for (i = 1; i <= 63; i++) {
for (unsigned i = 1; i <= 63; i++) {
char ttyname[sizeof("/dev/tty63")];
_cleanup_close_ int fd_d = -EBADF;
@@ -484,10 +479,8 @@ static void setup_remaining_vcs(int src_fd, unsigned src_idx, bool utf8) {
continue;
}
/*
* copy unicode translation table unimapd is a ushort count and a pointer
* to an array of struct unipair { ushort, ushort }
*/
/* Copy unicode translation table unimapd is a ushort count and a pointer
* to an array of struct unipair { ushort, ushort }. */
r = ioctl(fd_d, PIO_UNIMAPCLR, &adv);
if (r < 0) {
log_warning_errno(errno, "PIO_UNIMAPCLR failed, unimaps might be incorrect for tty%u: %m", i);
@@ -505,15 +498,13 @@ static void setup_remaining_vcs(int src_fd, unsigned src_idx, bool utf8) {
}
static int find_source_vc(char **ret_path, unsigned *ret_idx) {
_cleanup_free_ char *path = NULL;
int r, err = 0;
unsigned i;
path = new(char, sizeof("/dev/tty63"));
_cleanup_free_ char *path = new(char, sizeof("/dev/tty63"));
if (!path)
return log_oom();
for (i = 1; i <= 63; i++) {
for (unsigned i = 1; i <= 63; i++) {
_cleanup_close_ int fd = -EBADF;
r = verify_vc_allocation(i);