diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in index e69de29bb..cbda1e122 100644 --- a/buildroot-external/Config.in +++ b/buildroot-external/Config.in @@ -0,0 +1 @@ +source "$BR2_EXTERNAL_HASSIO_PATH/package/mingetty/Config.in" diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 6ca7589ac..faf27b3e7 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -24,6 +24,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y # BR2_PACKAGE_BUSYBOX is not set BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_JQ=y BR2_PACKAGE_DOSFSTOOLS=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_SQUASHFS=y @@ -50,8 +51,6 @@ BR2_PACKAGE_RAUC_NETWORK=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set -BR2_PACKAGE_UTIL_LINUX_AGETTY=y -BR2_PACKAGE_UTIL_LINUX_KILL=y BR2_PACKAGE_VIM=y # BR2_PACKAGE_VIM_RUNTIME is not set BR2_TARGET_ROOTFS_SQUASHFS=y @@ -66,3 +65,4 @@ BR2_PACKAGE_HOST_E2FSPROGS=y BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_MINGETTY=y diff --git a/buildroot-external/external.mk b/buildroot-external/external.mk index 4d6f7c7ab..8436bd60f 100644 --- a/buildroot-external/external.mk +++ b/buildroot-external/external.mk @@ -1 +1 @@ -#include $(sort $(wildcard $(BR2_EXTERNAL_HASSIO_PATH)/package/*/*.mk)) +include $(sort $(wildcard $(BR2_EXTERNAL_HASSIO_PATH)/package/*/*.mk)) diff --git a/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/mingetty.conf b/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/mingetty.conf new file mode 100644 index 000000000..a4011e1c6 --- /dev/null +++ b/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/mingetty.conf @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=-/sbin/mingetty --noclear %I diff --git a/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/noclear.conf b/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/noclear.conf new file mode 100644 index 000000000..52671c758 --- /dev/null +++ b/buildroot-external/overlay/etc/systemd/system/getty@tty1.service.d/noclear.conf @@ -0,0 +1,2 @@ +[Service] +TTYVTDisallocate=no diff --git a/buildroot-external/package/mingetty/0001-mingetty-utf8.patch b/buildroot-external/package/mingetty/0001-mingetty-utf8.patch new file mode 100644 index 000000000..69ebda17d --- /dev/null +++ b/buildroot-external/package/mingetty/0001-mingetty-utf8.patch @@ -0,0 +1,156 @@ +diff -Nru mingetty-1.07.orig/mingetty.c mingetty-1.07/mingetty.c +--- mingetty-1.07.orig/mingetty.c 2004-01-03 15:15:56.000000000 +0200 ++++ mingetty-1.07/mingetty.c 2006-11-22 22:13:26.967910100 +0200 +@@ -16,10 +16,15 @@ + * - autologin only at first login + * - /etc/mingetty.conf that can be used instead of /etc/inittab for + * command line options +- * - Can UTF-8 setup be done within mingetty? ++ * - Can UTF-8 setup be done within mingetty? Let's try now :-) (VinzC) + * - Also add /bin/login-type functionality in here? + */ + ++/* Additional comments: Vincent Cadet (2006-11-21) ++ * - Attempt to make mingetty support UTF-8. Modifications were imported ++ * from Suse migetty.c 0.9.6s. ++ */ ++ + #include + #include + #include +@@ -39,6 +44,19 @@ + #include + #include + #include ++#include ++#include ++#include ++#include ++#include ++ ++#ifndef IUTF8 ++# ifndef ASM_IUTF8 ++# error ASM_IUTF8 input flag not defined - Cannot define IUTF8 ++# else ++# define IUTF8 ASM_IUTF8 ++# endif ++#endif + + /* name of this program (argv[0]) */ + static char *progname; +@@ -74,6 +92,8 @@ + static char *autologin = NULL; + /* try to read a char before dropping to login prompt */ + static int loginpause = 0; ++/* terminal mode */ ++static int mode = K_RAW; + + /* error() - output error messages */ + static void error (const char *fmt, ...) +@@ -187,10 +207,21 @@ + if (fd > 2) + close (fd); + ++ /* Detect mode of current keyboard setup, e.g. for UTF-8 */ ++ if (ioctl(0, KDGKBMODE, &mode) < 0) ++ mode = K_RAW; ++ + /* Write a reset string to the terminal. This is very linux-specific + and should be checked for other systems. */ + if (noclear == 0) +- write (0, "\033c", 2); ++ /* don't write a full reset (ESC c) because this leaves the ++ unicode mode again if the terminal was in unicode mode ++ and also undos the ESC sequences in CONSOLE_MAGIC which ++ are needed for some languages/console-fonts. ++ Just put the cursor to the home position (ESC [ H), ++ erase everything below the cursor (ESC [ J), and set the ++ scrolling region to the full window (ESC [ r) */ ++ write (0, "\033[r\033[H\033[J", 9); + + sigaction (SIGHUP, &sa_old, NULL); + } +@@ -292,32 +323,75 @@ + + static char *get_logname (void) + { +- static char logname[40]; ++ static char logname[4*UT_NAMESIZE]; + char *bp; + unsigned char c; ++ int ascii; ++ iconv_t ic; + + tcflush (0, TCIFLUSH); /* flush pending input */ ++ ++ /* Check for UTF-8 mode */ ++ switch(mode) { ++ case K_UNICODE: ++ ascii = 0; ++ setlocale(LC_CTYPE, "en_US.UTF-8"); ++ break; ++ case K_RAW: ++ case K_MEDIUMRAW: ++ case K_XLATE: ++ default: ++ ascii = 1; ++ setlocale(LC_CTYPE, "POSIX"); ++ break; ++ } ++ + for (*logname = 0; *logname == 0;) { + do_prompt (1); + for (bp = logname;;) { + if (read (0, &c, 1) < 1) { +- if (errno == EINTR || errno == EIO +- || errno == ENOENT) ++ if (errno == EINTR || errno == EAGAIN) { ++ usleep(1000); ++ continue; ++ } ++ if (errno == EIO || errno == ENOENT) + exit (EXIT_SUCCESS); + error ("%s: read: %s", tty, strerror (errno)); + } + if (c == '\n' || c == '\r') { + *bp = 0; + break; +- } else if (!isprint (c)) +- error ("%s: invalid character 0x%x in login" +- " name", tty, c); ++ } ++ ++ if (ascii && !isprint (c)) ++ error ("%s: invalid character 0x%x in login name", tty, c); + else if ((size_t)(bp - logname) >= sizeof (logname) - 1) + error ("%s: too long login name", tty); +- else +- *bp++ = c; ++ ++ *bp++ = c; + } + } ++ ++ if (!ascii && (ic = iconv_open("WCHAR_T", "UTF-8"))) { ++ char tmpbuf[4*sizeof(logname)], *op, *lp; ++ size_t len = bp - logname; ++ size_t out = sizeof(tmpbuf) - 1; ++ size_t wcl; ++ wint_t *wcp; ++ ++ op = tmpbuf; ++ lp = logname; ++ if ((wcl = iconv(ic , &lp, &len, &op, &out)) == (size_t)-1) ++ error ("%s: invalid character conversion for login name", tty); ++ iconv_close(ic); ++ ++ wcp = (wint_t*)tmpbuf; ++ wcp[wcl] = (wint_t)0; ++ while (*wcp) { ++ if (!iswprint(*wcp++)) ++ error ("%s: invalid character for login name found", tty); ++ } ++ } + return logname; + } + diff --git a/buildroot-external/package/mingetty/Config.in b/buildroot-external/package/mingetty/Config.in new file mode 100644 index 000000000..adc95a8d5 --- /dev/null +++ b/buildroot-external/package/mingetty/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_MINGETTY + bool "mingetty" + help + mingetty is a minimal getty for use on virtual consoles and is not + suitable for use on serial lines. + + http://sourceforge.net/projects/mingetty/ diff --git a/buildroot-external/package/mingetty/mingetty.hash b/buildroot-external/package/mingetty/mingetty.hash new file mode 100644 index 000000000..29e72b934 --- /dev/null +++ b/buildroot-external/package/mingetty/mingetty.hash @@ -0,0 +1 @@ +sha1 283acd3dc9da2c9eb71d5d7cc01d1bd178254523 mingetty-1.08.tar.gz diff --git a/buildroot-external/package/mingetty/mingetty.mk b/buildroot-external/package/mingetty/mingetty.mk new file mode 100644 index 000000000..231ce2b21 --- /dev/null +++ b/buildroot-external/package/mingetty/mingetty.mk @@ -0,0 +1,22 @@ +############################################################# +# +# mingetty +# +############################################################# +MINGETTY_VERSION = 1.08 +MINGETTY_SOURCE = mingetty-$(MINGETTY_VERSION).tar.gz +MINGETTY_SITE = http://downloads.sourceforge.net/project/mingetty/mingetty/$(MINGETTY_VERSION) + +define MINGETTY_BUILD_CMDS + $(MAKE) CC=$(TARGET_CC) -C $(@D) +endef + +define MINGETTY_INSTALL_TARGET_CMDS + $(INSTALL) -D -m 0755 $(@D)/mingetty $(TARGET_DIR)/sbin +endef + +define MINGETTY_CLEAN_CMDS + $(MAKE) -C $(@D) clean +endef + +$(eval $(generic-package))