From f70bd6b6884016e96512e0b30bef12b205b1f927 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Wed, 7 Jun 2017 23:14:24 +0200 Subject: [PATCH 1/6] Remove busybox aport: telnetd is enabled in upstream now Pull request, that got merged: https://github.com/alpinelinux/aports/pull/1092 Please note, that you can't directly upgrade from postmarketOS "busybox-extras" to the upstreamed version. To upgrade properly, do the following: * delete your self-compiled busybox* packages: `sudo rm ~/.local/var/pmbootstrap/packages/armhf/busybox*` * zap all your armhf chroots with: `./pmbootstrap.py zap` --- busybox/0001-ash-exec-busybox.static.patch | 25 - .../0002-app-location-for-vi-and-lspci.patch | 39 - ...pc-set-default-discover-retries-to-5.patch | 35 - ...ke-ping-work-without-root-privileges.patch | 197 --- ...5-fbsplash-support-console-switching.patch | 187 --- ...-image-and-bar-alignment-and-positio.patch | 185 --- ...t-generating-kmod-binary-index-files.patch | 511 -------- ...-login-move-check_securetty-to-libbb.patch | 103 -- ...k-argument-for-ask_and_check_passwor.patch | 70 -- .../0010-su-FEATURE_SU_NULLOK_SECURE.patch | 71 -- ...stname-resolution-if-fails-on-startu.patch | 205 --- ...-diff-add-support-for-no-dereference.patch | 63 - ...ec-capable-of-using-separate-argv-0-.patch | 91 -- ...ash-implement-exec-a-ARGV0-CMD-ARGV1.patch | 69 -- busybox/APKBUILD | 199 --- busybox/README.md | 5 - busybox/acpid.logrotate | 8 - busybox/bbsuid.c | 106 -- busybox/busybox-extras.post-install | 10 - busybox/busybox-extras.trigger | 1 - busybox/busybox.post-install | 20 - busybox/busybox.post-upgrade | 31 - busybox/busybox.trigger | 19 - busybox/busyboxconfig | 1096 ---------------- busybox/busyboxconfig-extras | 1100 ----------------- busybox/dad.if-up | 8 - busybox/location-for-cpio.patch | 13 - busybox/nologin.c | 38 - postmarketos-mkinitfs/APKBUILD | 8 +- postmarketos-mkinitfs/init.sh.in | 1 + postmarketos-mkinitfs/mkinitfs.sh | 2 +- 31 files changed, 6 insertions(+), 4510 deletions(-) delete mode 100644 busybox/0001-ash-exec-busybox.static.patch delete mode 100644 busybox/0002-app-location-for-vi-and-lspci.patch delete mode 100644 busybox/0003-udhcpc-set-default-discover-retries-to-5.patch delete mode 100644 busybox/0004-ping-make-ping-work-without-root-privileges.patch delete mode 100644 busybox/0005-fbsplash-support-console-switching.patch delete mode 100644 busybox/0006-fbsplash-support-image-and-bar-alignment-and-positio.patch delete mode 100644 busybox/0007-depmod-support-generating-kmod-binary-index-files.patch delete mode 100644 busybox/0008-login-move-check_securetty-to-libbb.patch delete mode 100644 busybox/0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch delete mode 100644 busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch delete mode 100644 busybox/0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch delete mode 100644 busybox/0012-diff-add-support-for-no-dereference.patch delete mode 100644 busybox/0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch delete mode 100644 busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch delete mode 100644 busybox/APKBUILD delete mode 100644 busybox/README.md delete mode 100644 busybox/acpid.logrotate delete mode 100644 busybox/bbsuid.c delete mode 100644 busybox/busybox-extras.post-install delete mode 120000 busybox/busybox-extras.trigger delete mode 100644 busybox/busybox.post-install delete mode 100644 busybox/busybox.post-upgrade delete mode 100644 busybox/busybox.trigger delete mode 100644 busybox/busyboxconfig delete mode 100644 busybox/busyboxconfig-extras delete mode 100644 busybox/dad.if-up delete mode 100644 busybox/location-for-cpio.patch delete mode 100644 busybox/nologin.c diff --git a/busybox/0001-ash-exec-busybox.static.patch b/busybox/0001-ash-exec-busybox.static.patch deleted file mode 100644 index 7bdf87427..000000000 --- a/busybox/0001-ash-exec-busybox.static.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 6ad2305eb299c864dbe04b368a9921e91fd41bcb Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Thu, 4 Aug 2016 11:03:07 +0200 -Subject: [PATCH 01/12] ash: exec busybox.static - ---- - shell/ash.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/shell/ash.c b/shell/ash.c -index 8d8cc466b..1b1012e76 100644 ---- a/shell/ash.c -+++ b/shell/ash.c -@@ -7552,6 +7552,8 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char ** - } - /* re-exec ourselves with the new arguments */ - execve(bb_busybox_exec_path, argv, envp); -+ execve("/bin/busybox.static",argv,envp); -+ execve("/bin/busybox",argv,envp); - /* If they called chroot or otherwise made the binary no longer - * executable, fall through */ - } --- -2.11.0 - diff --git a/busybox/0002-app-location-for-vi-and-lspci.patch b/busybox/0002-app-location-for-vi-and-lspci.patch deleted file mode 100644 index eb2e069e6..000000000 --- a/busybox/0002-app-location-for-vi-and-lspci.patch +++ /dev/null @@ -1,39 +0,0 @@ -From a3016293eb42eb3679400148ed4520005ff6b8a7 Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Tue, 27 Dec 2016 20:46:59 +0100 -Subject: [PATCH 02/12] app location for vi and lspci - ---- - editors/vi.c | 2 +- - util-linux/lspci.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/editors/vi.c b/editors/vi.c -index 38a4692fd..dd3efda75 100644 ---- a/editors/vi.c -+++ b/editors/vi.c -@@ -166,7 +166,7 @@ - //config: Unless you want more (or less) frequent "undo points" while typing, - //config: you should probably leave this unchanged. - --//applet:IF_VI(APPLET(vi, BB_DIR_BIN, BB_SUID_DROP)) -+//applet:IF_VI(APPLET(vi, BB_DIR_USR_BIN, BB_SUID_DROP)) - - //kbuild:lib-$(CONFIG_VI) += vi.o - -diff --git a/util-linux/lspci.c b/util-linux/lspci.c -index 8b38a2366..f918f0972 100644 ---- a/util-linux/lspci.c -+++ b/util-linux/lspci.c -@@ -16,7 +16,7 @@ - //config: - //config: This version uses sysfs (/sys/bus/pci/devices) only. - --//applet:IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP)) -+//applet:IF_LSPCI(APPLET(lspci, BB_DIR_USR_SBIN, BB_SUID_DROP)) - - //kbuild:lib-$(CONFIG_LSPCI) += lspci.o - --- -2.11.0 - diff --git a/busybox/0003-udhcpc-set-default-discover-retries-to-5.patch b/busybox/0003-udhcpc-set-default-discover-retries-to-5.patch deleted file mode 100644 index 89cf6cd18..000000000 --- a/busybox/0003-udhcpc-set-default-discover-retries-to-5.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 5b9fc802f7f3bb7e1b0c539a3d6101dcca5399e9 Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Thu, 4 Aug 2016 11:08:35 +0200 -Subject: [PATCH 03/12] udhcpc: set default discover retries to 5 - -Some slower nics needs more attempts to get a lease ---- - networking/udhcp/dhcpc.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c -index 0e236261b..3c36bc39b 100644 ---- a/networking/udhcp/dhcpc.c -+++ b/networking/udhcp/dhcpc.c -@@ -1189,7 +1189,7 @@ static void client_background(void) - //usage: "\n -s,--script PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")" - //usage: "\n -p,--pidfile FILE Create pidfile" - //usage: "\n -B,--broadcast Request broadcast replies" --//usage: "\n -t,--retries N Send up to N discover packets (default 3)" -+//usage: "\n -t,--retries N Send up to N discover packets (default 5)" - //usage: "\n -T,--timeout SEC Pause between packets (default 3)" - //usage: "\n -A,--tryagain SEC Wait if lease is not obtained (default 20)" - //usage: "\n -n,--now Exit if lease is not obtained" -@@ -1272,7 +1272,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) - llist_t *list_x = NULL; - int tryagain_timeout = 20; - int discover_timeout = 3; -- int discover_retries = 3; -+ int discover_retries = 5; - uint32_t server_addr = server_addr; /* for compiler */ - uint32_t requested_ip = 0; - uint32_t xid = xid; /* for compiler */ --- -2.11.0 - diff --git a/busybox/0004-ping-make-ping-work-without-root-privileges.patch b/busybox/0004-ping-make-ping-work-without-root-privileges.patch deleted file mode 100644 index 91befa659..000000000 --- a/busybox/0004-ping-make-ping-work-without-root-privileges.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 9432235d7dc8d4a2bc9b546e63e52e84b7cad5ce Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Tue, 29 Mar 2016 18:59:22 +0200 -Subject: [PATCH 04/12] ping: make ping work without root privileges - ---- - networking/ping.c | 103 +++++++++++++++++++++++++++++++++++++++++++++--------- - 1 file changed, 87 insertions(+), 16 deletions(-) - -diff --git a/networking/ping.c b/networking/ping.c -index d0ef7ba62..73e903927 100644 ---- a/networking/ping.c -+++ b/networking/ping.c -@@ -155,6 +155,7 @@ enum { - pingsock = 0, - }; - -+static int using_dgram; - static void - #if ENABLE_PING6 - create_icmp_socket(len_and_sockaddr *lsa) -@@ -171,9 +172,23 @@ create_icmp_socket(void) - #endif - sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */ - if (sock < 0) { -- if (errno == EPERM) -- bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); -- bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket); -+ if (errno != EPERM) -+ bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket); -+#if defined(__linux__) || defined(__APPLE__) -+ /* We don't have root privileges. Try SOCK_DGRAM instead. -+ * Linux needs net.ipv4.ping_group_range for this to work. -+ * MacOSX allows ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ -+ */ -+#if ENABLE_PING6 -+ if (lsa->u.sa.sa_family == AF_INET6) -+ sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6); -+ else -+#endif -+ sock = socket(AF_INET, SOCK_DGRAM, 1); /* 1 == ICMP */ -+ if (sock < 0) -+#endif -+ bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); -+ using_dgram = 1; - } - - xmove_fd(sock, pingsock); -@@ -226,10 +241,12 @@ static void ping4(len_and_sockaddr *lsa) - bb_perror_msg("recvfrom"); - continue; - } -- if (c >= 76) { /* ip + icmp */ -- struct iphdr *iphdr = (struct iphdr *) G.packet; -+ if (c >= 76 || using_dgram && (c == 64)) { /* ip + icmp */ -+ if(!using_dgram) { -+ struct iphdr *iphdr = (struct iphdr *) G.packet; - -- pkt = (struct icmp *) (G.packet + (iphdr->ihl << 2)); /* skip ip hdr */ -+ pkt = (struct icmp *) (G.packet + (iphdr->ihl << 2)); /* skip ip hdr */ -+ } else pkt = (struct icmp *) G.packet; - if (pkt->icmp_id != G.myid) - continue; /* not our ping */ - if (pkt->icmp_type == ICMP_ECHOREPLY) -@@ -627,19 +644,21 @@ static void unpack_tail(int sz, uint32_t *tp, - } - static void unpack4(char *buf, int sz, struct sockaddr_in *from) - { -- struct icmp *icmppkt; - struct iphdr *iphdr; -+ struct icmp *icmppkt; - int hlen; - - /* discard if too short */ - if (sz < (datalen + ICMP_MINLEN)) - return; -+ if(!using_dgram) { -+ /* check IP header */ -+ iphdr = (struct iphdr *) buf; -+ hlen = iphdr->ihl << 2; -+ sz -= hlen; -+ icmppkt = (struct icmp *) (buf + hlen); -+ } else icmppkt = (struct icmp *) buf; - -- /* check IP header */ -- iphdr = (struct iphdr *) buf; -- hlen = iphdr->ihl << 2; -- sz -= hlen; -- icmppkt = (struct icmp *) (buf + hlen); - if (icmppkt->icmp_id != myid) - return; /* not our ping */ - -@@ -651,7 +670,7 @@ static void unpack4(char *buf, int sz, struct sockaddr_in *from) - tp = (uint32_t *) icmppkt->icmp_data; - unpack_tail(sz, tp, - inet_ntoa(*(struct in_addr *) &from->sin_addr.s_addr), -- recv_seq, iphdr->ttl); -+ recv_seq, using_dgram ? 42 : iphdr->ttl); - } else if (icmppkt->icmp_type != ICMP_ECHO) { - bb_error_msg("warning: got ICMP %d (%s)", - icmppkt->icmp_type, -@@ -695,11 +714,31 @@ static void ping4(len_and_sockaddr *lsa) - int sockopt; - - pingaddr.sin = lsa->u.sin; -- if (source_lsa) { -+ if (source_lsa && !using_dgram) { - if (setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_IF, - &source_lsa->u.sa, source_lsa->len)) - bb_error_msg_and_die("can't set multicast source interface"); - xbind(pingsock, &source_lsa->u.sa, source_lsa->len); -+ } else if(using_dgram) { -+ struct sockaddr_in sa; -+ socklen_t sl; -+ -+ sa.sin_family = AF_INET; -+ sa.sin_port = 0; -+ sa.sin_addr.s_addr = source_lsa ? -+ source_lsa->u.sin.sin_addr.s_addr : 0; -+ sl = sizeof(sa); -+ -+ if (bind(pingsock, (struct sockaddr *) &sa, sl) == -1) { -+ perror("bind"); -+ exit(2); -+ } -+ -+ if (getsockname(pingsock, (struct sockaddr *) &sa, &sl) == -1) { -+ perror("getsockname"); -+ exit(2); -+ } -+ myid = sa.sin_port; - } - - /* enable broadcast pings */ -@@ -716,6 +755,15 @@ static void ping4(len_and_sockaddr *lsa) - setsockopt_int(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, opt_ttl); - } - -+ if(using_dgram) { -+ int hold = 65536; -+ if (setsockopt(pingsock, SOL_IP, IP_RECVTTL, (char *)&hold, sizeof(hold))) -+ perror("WARNING: setsockopt(IP_RECVTTL)"); -+ if (setsockopt(pingsock, SOL_IP, IP_RETOPTS, (char *)&hold, sizeof(hold))) -+ perror("WARNING: setsockopt(IP_RETOPTS)"); -+ -+ } -+ - signal(SIGINT, print_stats_and_exit); - - /* start the ping's going ... */ -@@ -749,10 +797,33 @@ static void ping6(len_and_sockaddr *lsa) - char control_buf[CMSG_SPACE(36)]; - - pingaddr.sin6 = lsa->u.sin6; -- if (source_lsa) -+ if (source_lsa && !using_dgram) - xbind(pingsock, &source_lsa->u.sa, source_lsa->len); -+ else if(using_dgram) { -+ struct sockaddr_in6 sa = {0}; -+ socklen_t sl; -+ -+ sa.sin6_family = AF_INET6; -+ sa.sin6_port = 0; -+ if(source_lsa) { -+ memcpy(&sa.sin6_addr, &source_lsa->u.sin6.sin6_addr, sizeof(struct in6_addr)); -+ } -+ sl = sizeof(sa); -+ -+ if (bind(pingsock, (struct sockaddr *) &sa, sl) == -1) { -+ perror("bind"); -+ exit(2); -+ } -+ -+ if (getsockname(pingsock, (struct sockaddr *) &sa, &sl) == -1) { -+ perror("getsockname"); -+ exit(2); -+ } -+ myid = sa.sin6_port; -+ } - - #ifdef ICMP6_FILTER -+ if(!using_dgram) - { - struct icmp6_filter filt; - if (!(option_mask32 & OPT_VERBOSE)) { -@@ -880,7 +951,7 @@ static int common_ping_main(int opt, char **argv) - if (opt & OPT_p) - G.pattern = xstrtou_range(str_p, 16, 0, 255); - -- myid = (uint16_t) getpid(); -+ if (!using_dgram) myid = (uint16_t) getpid(); - hostname = argv[optind]; - #if ENABLE_PING6 - { --- -2.11.0 - diff --git a/busybox/0005-fbsplash-support-console-switching.patch b/busybox/0005-fbsplash-support-console-switching.patch deleted file mode 100644 index 0d9b87861..000000000 --- a/busybox/0005-fbsplash-support-console-switching.patch +++ /dev/null @@ -1,187 +0,0 @@ -From f5660f60455d2a86fd78d5a8949a31864233faf8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= -Date: Mon, 24 Sep 2012 07:58:29 +0300 -Subject: [PATCH 05/12] fbsplash: support console switching -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Timo Teräs ---- - miscutils/fbsplash.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++----- - 1 file changed, 76 insertions(+), 7 deletions(-) - -diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c -index fc6c9b953..ec5947314 100644 ---- a/miscutils/fbsplash.c -+++ b/miscutils/fbsplash.c -@@ -47,7 +47,7 @@ - //kbuild:lib-$(CONFIG_FBSPLASH) += fbsplash.o - - //usage:#define fbsplash_trivial_usage --//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]" -+//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD] [-T tty]" - //usage:#define fbsplash_full_usage "\n\n" - //usage: " -s Image" - //usage: "\n -c Hide cursor" -@@ -57,11 +57,17 @@ - //usage: "\n BAR_R,BAR_G,BAR_B" - //usage: "\n -f Control pipe (else exit after drawing image)" - //usage: "\n commands: 'NN' (% for progress bar) or 'exit'" -+//usage: "\n -T Switch to TTY to hide all console messages" - - #include "libbb.h" - #include "common_bufsiz.h" - #include - -+#include -+#include -+#include -+#include -+ - /* If you want logging messages on /tmp/fbsplash.log... */ - #define DEBUG 0 - -@@ -73,6 +79,8 @@ struct globals { - unsigned char *addr; // pointer to framebuffer memory - unsigned ns[7]; // n-parameters - const char *image_filename; -+ int silent_tty, fd_tty_s; -+ bool do_not_draw; - struct fb_var_screeninfo scr_var; - struct fb_fix_screeninfo scr_fix; - unsigned bytes_per_pixel; -@@ -483,6 +491,11 @@ static void init(const char *cfg_filename) - config_close(parser); - } - -+static void sighandler(int sig) -+{ -+ ioctl(G.fd_tty_s, VT_RELDISP, sig == SIGUSR1 ? 1 : 2); -+ G.do_not_draw = (sig != SIGUSR2); -+} - - int fbsplash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; - int fbsplash_main(int argc UNUSED_PARAM, char **argv) -@@ -492,6 +505,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - char *num_buf; - unsigned num; - bool bCursorOff; -+ int fd_tty0, active_vt; -+ struct vt_stat vtstat; -+ struct vt_mode vt; - - INIT_G(); - -@@ -499,8 +515,10 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - fb_device = "/dev/fb0"; - cfg_filename = NULL; - fifo_filename = NULL; -- bCursorOff = 1 & getopt32(argv, "cs:d:i:f:", -- &G.image_filename, &fb_device, &cfg_filename, &fifo_filename); -+ opt_complementary = "T+"; // numeric params -+ bCursorOff = 1 & getopt32(argv, "cs:d:i:f:T:", -+ &G.image_filename, &fb_device, &cfg_filename, &fifo_filename, -+ &G.silent_tty); - - // parse configuration file - if (cfg_filename) -@@ -510,11 +528,43 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - if (!G.image_filename) - bb_show_usage(); - -+ fd_tty0 = get_console_fd_or_die(); -+ if (G.silent_tty) { -+ char buf[16]; -+ -+ /* Initialize TTY */ -+ bb_signals((1LL << SIGUSR1) | (1LL << SIGUSR2), sighandler); -+ snprintf(buf, sizeof(buf), "/dev/tty%d", G.silent_tty); -+ G.fd_tty_s = xopen(buf, O_RDWR | O_NOCTTY); -+ -+ /* Activate TTY */ -+ xioctl(fd_tty0, VT_GETSTATE, &vtstat); -+ active_vt = vtstat.v_active; -+ console_make_active(fd_tty0, G.silent_tty); -+ -+ /* Get notifications on console changes */ -+ vt.mode = VT_PROCESS; -+ vt.waitv = 0; -+ vt.relsig = SIGUSR1; -+ vt.acqsig = SIGUSR2; -+ ioctl(G.fd_tty_s, VT_SETMODE, &vt); -+ -+ /* Redirect all kernel messages to tty1 so that they don't get -+ * printed over our silent splash image. And clear it. */ -+ buf[0] = TIOCL_SETKMSGREDIRECT; -+ buf[1] = 1; -+ ioctl(G.fd_tty_s, TIOCLINUX, buf); -+ full_write(G.fd_tty_s, "\e[H\e[2J" "\e[?17;0c", 7+8); -+ ioctl(G.fd_tty_s, KDSETMODE, KD_GRAPHICS); -+ } else { -+ G.fd_tty_s = STDOUT_FILENO; -+ } -+ - fb_open(fb_device); - - if (fifo_filename && bCursorOff) { - // hide cursor (BEFORE any fb ops) -- full_write(STDOUT_FILENO, "\033[?25l", 6); -+ full_write(G.fd_tty_s, "\033[?25l", 6); - } - - fb_drawimage(); -@@ -522,6 +572,7 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - if (!fifo_filename) - return EXIT_SUCCESS; - -+ sig_block(SIGUSR1); - fp = xfopen_stdin(fifo_filename); - if (fp != stdin) { - // For named pipes, we want to support this: -@@ -537,8 +588,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - // and become an additional writer :) - open(fifo_filename, O_WRONLY); // errors are ignored - } -- - fb_drawprogressbar(0); -+ sig_unblock(SIGUSR1); -+ - // Block on read, waiting for some input. - // Use of style I/O allows to correctly - // handle a case when we have many buffered lines -@@ -553,12 +605,29 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv) - #if DEBUG - DEBUG_MESSAGE(itoa(num)); - #endif -- fb_drawprogressbar(num); -+ sig_block(SIGUSR1); -+ if (!G.do_not_draw) -+ fb_drawprogressbar(num); -+ sig_unblock(SIGUSR1); - } - free(num_buf); - } - -- if (bCursorOff) // restore cursor -+ if (G.silent_tty) { -+ usleep(100*1000); -+ -+ ioctl(G.fd_tty_s, VT_RELDISP, 1); -+ ioctl(G.fd_tty_s, KDSETMODE, KD_TEXT); -+ vt.mode = VT_AUTO; -+ vt.waitv = 0; -+ ioctl(G.fd_tty_s, VT_SETMODE, &vt); -+ close(G.fd_tty_s); -+ -+ xioctl(fd_tty0, VT_GETSTATE, &vtstat); -+ if (vtstat.v_active == G.silent_tty) -+ console_make_active(fd_tty0, active_vt); -+ ioctl(fd_tty0, VT_DISALLOCATE, (void *)(ptrdiff_t)G.silent_tty); -+ } else if (bCursorOff) // restore cursor - full_write(STDOUT_FILENO, "\033[?25h", 6); - - return EXIT_SUCCESS; --- -2.11.0 - diff --git a/busybox/0006-fbsplash-support-image-and-bar-alignment-and-positio.patch b/busybox/0006-fbsplash-support-image-and-bar-alignment-and-positio.patch deleted file mode 100644 index b930cb116..000000000 --- a/busybox/0006-fbsplash-support-image-and-bar-alignment-and-positio.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 1dab8b58ff051d529fd3fd74caf6016e51b10ae3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= -Date: Fri, 21 Nov 2014 16:06:34 +0200 -Subject: [PATCH 06/12] fbsplash: support image and bar alignment and - positioning -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Timo Teräs ---- - miscutils/fbsplash.c | 91 +++++++++++++++++++++++++++++++++++++++++++--------- - 1 file changed, 76 insertions(+), 15 deletions(-) - -diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c -index ec5947314..34bbf81f5 100644 ---- a/miscutils/fbsplash.c -+++ b/miscutils/fbsplash.c -@@ -53,6 +53,7 @@ - //usage: "\n -c Hide cursor" - //usage: "\n -d Framebuffer device (default /dev/fb0)" - //usage: "\n -i Config file (var=value):" -+//usage: "\n IMAGE_ALIGN" - //usage: "\n BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT" - //usage: "\n BAR_R,BAR_G,BAR_B" - //usage: "\n -f Control pipe (else exit after drawing image)" -@@ -71,13 +72,38 @@ - /* If you want logging messages on /tmp/fbsplash.log... */ - #define DEBUG 0 - -+enum { -+ image_align, -+ -+ image_posx, -+ image_posy, -+ bar_width, -+ bar_height, -+ bar_posx, -+ bar_posy, -+ bar_colr, -+ bar_colg, -+ bar_colb, -+ -+ debug -+}; -+ -+#define nimage_align ns[image_align] -+#define nbar_width ns[bar_width] -+#define nbar_height ns[bar_height] -+#define nbar_posx ns[bar_posx] -+#define nbar_posy ns[bar_posy] -+#define nbar_colr ns[bar_colr] -+#define nbar_colg ns[bar_colg] -+#define nbar_colb ns[bar_colb] -+ - struct globals { - #if DEBUG - bool bdebug_messages; // enable/disable logging - FILE *logfile_fd; // log file - #endif - unsigned char *addr; // pointer to framebuffer memory -- unsigned ns[7]; // n-parameters -+ unsigned ns[debug+1]; // n-parameters - const char *image_filename; - int silent_tty, fd_tty_s; - bool do_not_draw; -@@ -94,14 +120,6 @@ struct globals { - SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ - } while (0) - --#define nbar_width ns[0] // progress bar width --#define nbar_height ns[1] // progress bar height --#define nbar_posx ns[2] // progress bar horizontal position --#define nbar_posy ns[3] // progress bar vertical position --#define nbar_colr ns[4] // progress bar color red component --#define nbar_colg ns[5] // progress bar color green component --#define nbar_colb ns[6] // progress bar color blue component -- - #if DEBUG - #define DEBUG_MESSAGE(strMessage, args...) \ - if (G.bdebug_messages) { \ -@@ -382,7 +400,7 @@ static void fb_drawimage(void) - FILE *theme_file; - char *read_ptr; - unsigned char *pixline; -- unsigned i, j, width, height, line_size; -+ int i, j, width, height, line_size, xoffs, yoffs, xstart; - - if (LONE_DASH(G.image_filename)) { - theme_file = stdin; -@@ -432,18 +450,46 @@ static void fb_drawimage(void) - line_size = width*3; - pixline = xmalloc(line_size); - -+#if 0 - if (width > G.scr_var.xres) - width = G.scr_var.xres; - if (height > G.scr_var.yres) - height = G.scr_var.yres; -- for (j = 0; j < height; j++) { -+#endif -+ -+ xoffs = yoffs = 0; -+ switch (G.nimage_align % 3) { -+ case 1: xoffs = (G.scr_var.xres - width) / 2; break; -+ case 2: xoffs = G.scr_var.xres - width; break; -+ } -+ xstart = 0; -+ if (xoffs < 0) { -+ xstart = -xoffs; -+ width -= xstart; -+ xoffs = 0; -+ } -+ xoffs *= G.bytes_per_pixel; -+ if (width > G.scr_var.xres) -+ width = G.scr_var.xres; -+ -+ switch (G.nimage_align / 3) { -+ case 1: yoffs = (G.scr_var.yres - height) / 2; break; -+ case 2: yoffs = G.scr_var.yres - height; break; -+ } -+ -+ for (j = 0; j < height && yoffs < G.scr_var.yres; j++, yoffs++) { - unsigned char *pixel; - unsigned char *src; - - if (fread(pixline, 1, line_size, theme_file) != line_size) - bb_error_msg_and_die("bad PPM file '%s'", G.image_filename); -+ -+ if (yoffs < 0) -+ continue; -+ - pixel = pixline; -- src = G.addr + j * G.scr_fix.line_length; -+ src = G.addr + yoffs * G.scr_fix.line_length + xoffs; -+ - for (i = 0; i < width; i++) { - unsigned thispix = fb_pixel_value(pixel[0], pixel[1], pixel[2]); - fb_write_pixel(src, thispix); -@@ -462,9 +508,17 @@ static void fb_drawimage(void) - */ - static void init(const char *cfg_filename) - { -+ static const char align_names[] ALIGN1 = -+ "LT\0" "CT\0" "RT\0" -+ "LM\0" "CM\0" "RM\0" -+ "LB\0" "CB\0" "RB\0"; - static const char param_names[] ALIGN1 = -+ "IMAGE_ALIGN\0" -+ -+ "IMAGE_X\0" "IMAGE_Y\0" - "BAR_WIDTH\0" "BAR_HEIGHT\0" - "BAR_LEFT\0" "BAR_TOP\0" -+ - "BAR_R\0" "BAR_G\0" "BAR_B\0" - #if DEBUG - "DEBUG\0" -@@ -474,14 +528,21 @@ static void init(const char *cfg_filename) - parser_t *parser = config_open2(cfg_filename, xfopen_stdin); - while (config_read(parser, token, 2, 2, "#=", - (PARSE_NORMAL | PARSE_MIN_DIE) & ~(PARSE_TRIM | PARSE_COLLAPSE))) { -- unsigned val = xatoi_positive(token[1]); -+ unsigned val; - int i = index_in_strings(param_names, token[0]); -+ - if (i < 0) - bb_error_msg_and_die("syntax error: %s", token[0]); -- if (i >= 0 && i < 7) -+ -+ if (i <= image_align) -+ val = index_in_strings(align_names, token[1]); -+ else -+ val = xatoi_positive(token[1]); -+ -+ if (i < debug) - G.ns[i] = val; - #if DEBUG -- if (i == 7) { -+ if (i == debug) { - G.bdebug_messages = val; - if (G.bdebug_messages) - G.logfile_fd = xfopen_for_write("/tmp/fbsplash.log"); --- -2.11.0 - diff --git a/busybox/0007-depmod-support-generating-kmod-binary-index-files.patch b/busybox/0007-depmod-support-generating-kmod-binary-index-files.patch deleted file mode 100644 index ccd4f25ff..000000000 --- a/busybox/0007-depmod-support-generating-kmod-binary-index-files.patch +++ /dev/null @@ -1,511 +0,0 @@ -From 0445b9734e02856a66cc7925a6816f26fedc822d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= -Date: Sun, 25 Oct 2015 22:21:41 +0200 -Subject: [PATCH 07/12] depmod: support generating kmod binary index files -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This allows to use busybox depmod, and run daemons -using libkmod (or even kmod modprobe if needed). - -About +1500 bytes when enabled. This patch merges some -depmod code paths, so when this is disabled it shrinks -the code size a little bit. - -Signed-off-by: Timo Teräs ---- - modutils/Config.src | 10 ++ - modutils/depmod.c | 281 ++++++++++++++++++++++++++++++++++++++++++---------- - modutils/modprobe.c | 15 --- - modutils/modutils.c | 27 ++++- - modutils/modutils.h | 15 +++ - 5 files changed, 281 insertions(+), 67 deletions(-) - -diff --git a/modutils/Config.src b/modutils/Config.src -index 4227f356a..6680044fc 100644 ---- a/modutils/Config.src -+++ b/modutils/Config.src -@@ -118,6 +118,16 @@ config FEATURE_MODUTILS_ALIAS - - Say Y if unsure. - -+config FEATURE_MODUTILS_BIN -+ bool "Support for the kmod .bin file format" -+ default n -+ depends on DEPMOD && !MODPROBE_SMALL -+ select PLATFORM_LINUX -+ help -+ Generate kmod compatible binary index files for .dep, .alias, -+ .symbols and .builtin files. Allows mixing use of busybox -+ modutils and kmod (binaries and library). -+ - config FEATURE_MODUTILS_SYMBOLS - bool "Support for module.symbols file" - default y -diff --git a/modutils/depmod.c b/modutils/depmod.c -index b9347027e..e3cea18c1 100644 ---- a/modutils/depmod.c -+++ b/modutils/depmod.c -@@ -2,7 +2,7 @@ - /* - * depmod - generate modules.dep - * Copyright (c) 2008 Bernhard Reutner-Fischer -- * Copyrihgt (c) 2008 Timo Teras -+ * Copyrihgt (c) 2008-2015 Timo Teras - * Copyright (c) 2008 Vladimir Dronnikov - * - * Licensed under GPLv2 or later, see file LICENSE in this source tree. -@@ -25,6 +25,24 @@ - #include "modutils.h" - #include /* uname() */ - -+#define INDEX_MINCHAR 32 -+#define INDEX_MAXCHAR 128 -+ -+typedef struct index_node { -+ char *prefix; -+ llist_t *values; -+ struct index_node *children[INDEX_MAXCHAR-INDEX_MINCHAR]; -+} index_node; -+ -+struct globals { -+ module_db db; -+ index_node *root_node; -+} FIX_ALIASING; -+#define G (*ptr_to_globals) -+#define INIT_G() do { \ -+ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ -+} while (0) -+ - /* - * Theory of operation: - * - iterate over all modules and record their full path -@@ -52,18 +70,12 @@ static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARA - - for (ptr = image; ptr < image + len - 10; ptr++) { - if (is_prefixed_with(ptr, "depends=")) { -- char *u; -- - ptr += 8; -- for (u = ptr; *u; u++) -- if (*u == '-') -- *u = '_'; -- ptr += string_to_llist(ptr, &e->deps, ","); -+ string_to_llist(replace_underscores(ptr), &e->deps, ","); - } else if (ENABLE_FEATURE_MODUTILS_ALIAS - && is_prefixed_with(ptr, "alias=") - ) { -- llist_add_to(&e->aliases, xstrdup(ptr + 6)); -- ptr += strlen(ptr); -+ llist_add_to(&e->aliases, replace_underscores(xstrdup(ptr + 6))); - } else if (ENABLE_FEATURE_MODUTILS_SYMBOLS - && is_prefixed_with(ptr, "__ksymtab_") - ) { -@@ -73,9 +85,10 @@ static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARA - ) { - continue; - } -- llist_add_to(&e->symbols, xstrdup(ptr)); -- ptr += strlen(ptr); -- } -+ llist_add_to(&e->symbols, xasprintf("symbol:%s", ptr)); -+ } else -+ continue; -+ ptr += strlen(ptr); - } - free(image); - -@@ -107,12 +120,6 @@ static void order_dep_list(module_db *modules, module_entry *start, llist_t *add - } - } - --static void xfreopen_write(const char *file, FILE *f) --{ -- if (freopen(file, "w", f) == NULL) -- bb_perror_msg_and_die("can't open '%s'", file); --} -- - //usage:#if !ENABLE_MODPROBE_SMALL - //usage:#define depmod_trivial_usage "[-n] [-b BASE] [VERSION] [MODFILES]..." - //usage:#define depmod_full_usage "\n\n" -@@ -166,6 +173,169 @@ enum { - OPT_C = (1 << 9), /* -C,--config etc_modules_conf: ignored */ - }; - -+/* Support for the mod binary index generation */ -+ -+static void index_init(const char *filename) -+{ -+ if (ENABLE_FEATURE_MODUTILS_BIN) { -+ index_node *n; -+ -+ n = xzalloc(sizeof(index_node)); -+ n->prefix = xstrdup(""); -+ G.root_node = n; -+ } -+ -+ if (filename && !(option_mask32 & OPT_n)) { -+ if (freopen(filename, "w", stdout) == NULL) -+ bb_perror_msg_and_die("can't open '%s'", filename); -+ } -+} -+ -+static void index_add(const char *key, char *value, const char *prefix) -+{ -+ if (prefix && *prefix) -+ printf("%s%s %s\n", prefix, key, value); -+ else if (prefix) -+ printf("%s\n", value); -+ -+ if (ENABLE_FEATURE_MODUTILS_BIN) { -+ index_node *cur = G.root_node, *n; -+ unsigned i = 0, j, ch; -+ -+ while (1) { -+ /* Ensure node->prefix is a prefix of &str[i]. -+ * If it is not already, then we must split node. */ -+ for (j = 0; cur->prefix[j]; j++) { -+ ch = cur->prefix[j]; -+ if (ch != key[i+j]) { -+ /* New child is copy of node with prefix[j+1..N] */ -+ n = xzalloc(sizeof(index_node)); -+ n->prefix = xstrdup(&cur->prefix[j+1]); -+ n->values = cur->values; -+ memcpy(n->children, cur->children, sizeof(n->children)); -+ -+ /* Parent has prefix[0..j], child at prefix[j] */ -+ cur->prefix[j] = '\0'; -+ cur->values = NULL; -+ memset(cur->children, 0, sizeof(cur->children)); -+ cur->children[ch-INDEX_MINCHAR] = n; -+ break; -+ } -+ } -+ i += j; -+ -+ ch = key[i]; -+ if (ch == 0) -+ break; -+ -+ if (ch < INDEX_MINCHAR || ch >= INDEX_MAXCHAR) -+ bb_error_msg_and_die("bad module name"); -+ -+ ch -= INDEX_MINCHAR; -+ if (!cur->children[ch]) { -+ n = xzalloc(sizeof(index_node)); -+ cur->children[ch] = n; -+ n->prefix = xstrdup(&key[i+1]); -+ cur = n; -+ break; -+ } -+ -+ /* Descend into child node and continue */ -+ cur = cur->children[ch]; -+ i++; -+ } -+ -+ llist_add_to(&cur->values, value); -+ } -+} -+ -+static uint32_t index_write_node(FILE *out, index_node *n, void (*freeit)(void *data)) -+{ -+ uint32_t child_offs[INDEX_MAXCHAR-INDEX_MINCHAR]; -+ uint32_t offset; -+ uint8_t first = 255, last = 0; -+ unsigned i; -+ -+ for (i = 0; i < INDEX_MAXCHAR-INDEX_MINCHAR; i++) { -+ child_offs[i] = 0; -+ if (!n->children[i]) -+ continue; -+ child_offs[i] = index_write_node(out, n->children[i], freeit); -+ if (first > INDEX_MAXCHAR) -+ first = i; -+ last = i; -+ } -+ -+ offset = ftell(out); -+ -+ if (n->prefix[0]) { -+ fputs(n->prefix, out); -+ fputc('\0', out); -+ offset |= INDEX_NODE_PREFIX; -+ } -+ -+ if (first < INDEX_MAXCHAR) { -+ fputc(first + INDEX_MINCHAR, out); -+ fputc(last + INDEX_MINCHAR, out); -+ fwrite(child_offs + first, sizeof(uint32_t), last - first + 1, out); -+ offset |= INDEX_NODE_CHILDS; -+ } -+ -+ if (n->values) { -+ const llist_t *v; -+ unsigned int cnt; -+ uint32_t u; -+ -+ n->values = llist_rev(n->values); -+ for (v = n->values, cnt = 0; v != NULL; v = v->link, cnt++); -+ u = htonl(cnt); -+ fwrite(&u, sizeof(u), 1, out); -+ for (v = n->values, cnt = 0; v != NULL; v = v->link, cnt++) { -+ u = htonl(cnt); -+ fwrite(&u, sizeof(u), 1, out); -+ fputs(v->data, out); -+ fputc('\0', out); -+ } -+ offset |= INDEX_NODE_VALUES; -+ } -+ -+ llist_free(n->values, freeit); -+ free(n->prefix); -+ free(n); -+ -+ return htonl(offset); -+} -+ -+static void index_dump(const char *filename, int deps_file) -+{ -+ if (ENABLE_FEATURE_MODUTILS_BIN) { -+ FILE *out; -+ uint32_t header[3] = { -+ htonl(INDEX_MAGIC), -+ htonl(INDEX_VERSION), -+ }; -+ -+ if (option_mask32 & OPT_n) -+ filename = "/dev/null"; -+ else -+ filename = xasprintf("tmp.%s.bin", filename); -+ -+ out = xfopen_for_write(filename); -+ fwrite(header, sizeof(uint32_t), 3, out); -+ header[2] = index_write_node(out, G.root_node, deps_file ? free : 0); -+ rewind(out); -+ G.root_node = NULL; -+ fwrite(header, sizeof(uint32_t), 3, out); -+ if (fclose(out)) { -+ remove(filename); -+ bb_error_msg_and_die(bb_msg_write_error); -+ } -+ /* .bin files are mmap'ed; not renaming it may crash -+ * long standing daemon using libkmod */ -+ rename_or_warn(filename, filename + 4); -+ } -+} -+ - int depmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; - int depmod_main(int argc UNUSED_PARAM, char **argv) - { -@@ -177,6 +347,8 @@ int depmod_main(int argc UNUSED_PARAM, char **argv) - unsigned i; - int tmp; - -+ INIT_G(); -+ - getopt32(argv, "aAb:eF:nruqC:", &moddir_base, NULL, NULL); - argv += optind; - -@@ -209,53 +381,60 @@ int depmod_main(int argc UNUSED_PARAM, char **argv) - } - - /* Generate dependency and alias files */ -- if (!(option_mask32 & OPT_n)) -- xfreopen_write(CONFIG_DEFAULT_DEPMOD_FILE, stdout); -- -+ index_init(CONFIG_DEFAULT_DEPMOD_FILE); - moddb_foreach_module(&modules, m, i) { -- printf("%s:", m->name); -- -+ char *buf = xasprintf("%s:", m->name); - order_dep_list(&modules, m, m->deps); -+ - while (m->dnext != m) { - dep = m->dnext; -- printf(" %s", dep->name); -- -+ buf = gather_options_str(buf, dep->name); - /* unlink current entry */ - dep->dnext->dprev = dep->dprev; - dep->dprev->dnext = dep->dnext; - dep->dnext = dep->dprev = dep; - } -- bb_putchar('\n'); -+ index_add(m->modname, buf, ""); - } -- --#if ENABLE_FEATURE_MODUTILS_ALIAS -- if (!(option_mask32 & OPT_n)) -- xfreopen_write("modules.alias", stdout); -- moddb_foreach_module(&modules, m, i) { -- while (m->aliases) { -- /* -- * Last word used to be a basename -- * (filename with path and .ko.* stripped) -- * at the time of module-init-tools 3.4. -- * kmod v.12 uses module name, i.e., s/-/_/g. -- */ -- printf("alias %s %s\n", -- (char*)llist_pop(&m->aliases), -- m->modname); -+ index_dump(CONFIG_DEFAULT_DEPMOD_FILE, 1); -+ -+ if (ENABLE_FEATURE_MODUTILS_ALIAS) { -+ index_init("modules.alias"); -+ moddb_foreach_module(&modules, m, i) { -+ while (m->aliases) { -+ /* -+ * Last word used to be a basename -+ * (filename with path and .ko.* stripped) -+ * at the time of module-init-tools 3.4. -+ * kmod v.12 uses module name, i.e., s/-/_/g. -+ */ -+ index_add((char*)llist_pop(&m->aliases), m->modname, "alias "); -+ } - } -+ index_dump("modules.alias", 0); - } --#endif --#if ENABLE_FEATURE_MODUTILS_SYMBOLS -- if (!(option_mask32 & OPT_n)) -- xfreopen_write("modules.symbols", stdout); -- moddb_foreach_module(&modules, m, i) { -- while (m->symbols) { -- printf("alias symbol:%s %s\n", -- (char*)llist_pop(&m->symbols), -- m->modname); -+ if (ENABLE_FEATURE_MODUTILS_SYMBOLS) { -+ index_init("modules.symbols"); -+ moddb_foreach_module(&modules, m, i) { -+ while (m->symbols) { -+ index_add((char*)llist_pop(&m->symbols), m->modname, "alias "); -+ } -+ } -+ index_dump("modules.symbols", 0); -+ } -+ if (ENABLE_FEATURE_MODUTILS_BIN) { -+ char line[PATH_MAX], modname[MODULE_NAME_LEN]; -+ FILE *in; -+ -+ index_init(NULL); -+ in = xfopen_for_read("modules.builtin"); -+ while (fgets(line, sizeof(line), in) != NULL) { -+ filename2modname(line, modname); -+ index_add(modname, (char *) "", 0); - } -+ fclose(in); -+ index_dump("modules.builtin", 0); - } --#endif - - if (ENABLE_FEATURE_CLEAN_UP) - moddb_free(&modules); -diff --git a/modutils/modprobe.c b/modutils/modprobe.c -index d404ef92f..72f449978 100644 ---- a/modutils/modprobe.c -+++ b/modutils/modprobe.c -@@ -189,21 +189,6 @@ struct globals { - - static int read_config(const char *path); - --static char *gather_options_str(char *opts, const char *append) --{ -- /* Speed-optimized. We call gather_options_str many times. */ -- if (append) { -- if (opts == NULL) { -- opts = xstrdup(append); -- } else { -- int optlen = strlen(opts); -- opts = xrealloc(opts, optlen + strlen(append) + 2); -- sprintf(opts + optlen, " %s", append); -- } -- } -- return opts; --} -- - static struct module_entry *get_or_add_modentry(const char *module) - { - return moddb_get_or_create(&G.db, module); -diff --git a/modutils/modutils.c b/modutils/modutils.c -index d36caaf68..aecfc2acb 100644 ---- a/modutils/modutils.c -+++ b/modutils/modutils.c -@@ -70,6 +70,21 @@ void FAST_FUNC moddb_free(module_db *db) - } - } - -+char * FAST_FUNC gather_options_str(char *opts, const char *append) -+{ -+ /* Speed-optimized. We call gather_options_str many times. */ -+ if (append) { -+ if (opts == NULL) { -+ opts = xstrdup(append); -+ } else { -+ int optlen = strlen(opts); -+ opts = xrealloc(opts, optlen + strlen(append) + 2); -+ sprintf(opts + optlen, " %s", append); -+ } -+ } -+ return opts; -+} -+ - void FAST_FUNC replace(char *s, char what, char with) - { - while (*s) { -@@ -81,7 +96,17 @@ void FAST_FUNC replace(char *s, char what, char with) - - char* FAST_FUNC replace_underscores(char *s) - { -- replace(s, '-', '_'); -+ int i; -+ for (i = 0; s[i]; i++) { -+ switch (s[i]) { -+ case '-': -+ s[i] = '_'; -+ break; -+ case '[': -+ i += strcspn(&s[i], "]"); -+ break; -+ } -+ } - return s; - } - -diff --git a/modutils/modutils.h b/modutils/modutils.h -index 2cbd1448a..dd6f173f3 100644 ---- a/modutils/modutils.h -+++ b/modutils/modutils.h -@@ -18,6 +18,20 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN - #define MODULE_NAME_LEN 256 - #define MODULE_HASH_SIZE 256 - -+/* .bin index format definitions */ -+#define INDEX_MAGIC 0xB007F457 -+#define INDEX_VERSION_MAJOR 0x0002 -+#define INDEX_VERSION_MINOR 0x0001 -+#define INDEX_VERSION ((INDEX_VERSION_MAJOR<<16)|INDEX_VERSION_MINOR) -+ -+enum node_offset { -+ INDEX_NODE_FLAGS = 0xF0000000, /* Flags in high nibble */ -+ INDEX_NODE_PREFIX = 0x80000000, -+ INDEX_NODE_VALUES = 0x40000000, -+ INDEX_NODE_CHILDS = 0x20000000, -+ INDEX_NODE_MASK = 0x0FFFFFFF, /* Offset value */ -+}; -+ - typedef struct module_entry { - struct module_entry *next; - char *name, *modname; -@@ -47,6 +61,7 @@ module_entry *moddb_get(module_db *db, const char *s) FAST_FUNC; - module_entry *moddb_get_or_create(module_db *db, const char *s) FAST_FUNC; - void moddb_free(module_db *db) FAST_FUNC; - -+char *gather_options_str(char *opts, const char *append) FAST_FUNC; - void replace(char *s, char what, char with) FAST_FUNC; - char *replace_underscores(char *s) FAST_FUNC; - int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC; --- -2.11.0 - diff --git a/busybox/0008-login-move-check_securetty-to-libbb.patch b/busybox/0008-login-move-check_securetty-to-libbb.patch deleted file mode 100644 index bc3c3a002..000000000 --- a/busybox/0008-login-move-check_securetty-to-libbb.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 49cc996bd0c049c37e98506409c2e3ec30790bf0 Mon Sep 17 00:00:00 2001 -From: Kaarle Ritvanen -Date: Thu, 5 Nov 2015 16:27:34 +0200 -Subject: [PATCH 08/12] login: move check_securetty to libbb - ---- - include/libbb.h | 1 + - libbb/Kbuild.src | 1 + - libbb/securetty.c | 27 +++++++++++++++++++++++++++ - loginutils/login.c | 19 ------------------- - 4 files changed, 29 insertions(+), 19 deletions(-) - create mode 100644 libbb/securetty.c - -diff --git a/include/libbb.h b/include/libbb.h -index abdc8c2b8..38d6d0b1e 100644 ---- a/include/libbb.h -+++ b/include/libbb.h -@@ -1390,6 +1390,7 @@ extern void selinux_or_die(void) FAST_FUNC; - #define SETUP_ENV_NO_CHDIR (1 << 4) - void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC; - void nuke_str(char *str) FAST_FUNC; -+int check_securetty(const char *short_tty); - int check_password(const struct passwd *pw, const char *plaintext) FAST_FUNC; - int ask_and_check_password_extended(const struct passwd *pw, int timeout, const char *prompt) FAST_FUNC; - int ask_and_check_password(const struct passwd *pw) FAST_FUNC; -diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src -index e426f3c7e..84f3ff477 100644 ---- a/libbb/Kbuild.src -+++ b/libbb/Kbuild.src -@@ -83,6 +83,7 @@ lib-y += safe_gethostname.o - lib-y += safe_poll.o - lib-y += safe_strncpy.o - lib-y += safe_write.o -+lib-y += securetty.o - lib-y += setup_environment.o - lib-y += signals.o - lib-y += simplify_path.o -diff --git a/libbb/securetty.c b/libbb/securetty.c -new file mode 100644 -index 000000000..95edbc944 ---- /dev/null -+++ b/libbb/securetty.c -@@ -0,0 +1,27 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * /etc/securetty checking. -+ * -+ * Licensed under GPLv2, see file LICENSE in this source tree. -+ */ -+ -+#include "libbb.h" -+ -+#if ENABLE_FEATURE_SECURETTY && !ENABLE_PAM -+int check_securetty(const char *short_tty) -+{ -+ char *buf = (char*)"/etc/securetty"; /* any non-NULL is ok */ -+ parser_t *parser = config_open2("/etc/securetty", fopen_for_read); -+ while (config_read(parser, &buf, 1, 1, "# \t", PARSE_NORMAL)) { -+ if (strcmp(buf, short_tty) == 0) -+ break; -+ buf = NULL; -+ } -+ config_close(parser); -+ /* buf != NULL here if config file was not found, empty -+ * or line was found which equals short_tty */ -+ return buf != NULL; -+} -+#else -+ALWAYS_INLINE int check_securetty(const char *short_tty UNUSED_PARAM) { return 1; } -+#endif -diff --git a/loginutils/login.c b/loginutils/login.c -index 52abc1886..30aa63aee 100644 ---- a/loginutils/login.c -+++ b/loginutils/login.c -@@ -173,25 +173,6 @@ static void die_if_nologin(void) - # define die_if_nologin() ((void)0) - #endif - --#if ENABLE_FEATURE_SECURETTY && !ENABLE_PAM --static int check_securetty(const char *short_tty) --{ -- char *buf = (char*)"/etc/securetty"; /* any non-NULL is ok */ -- parser_t *parser = config_open2("/etc/securetty", fopen_for_read); -- while (config_read(parser, &buf, 1, 1, "# \t", PARSE_NORMAL)) { -- if (strcmp(buf, short_tty) == 0) -- break; -- buf = NULL; -- } -- config_close(parser); -- /* buf != NULL here if config file was not found, empty -- * or line was found which equals short_tty */ -- return buf != NULL; --} --#else --static ALWAYS_INLINE int check_securetty(const char *short_tty UNUSED_PARAM) { return 1; } --#endif -- - #if ENABLE_SELINUX - static void initselinux(char *username, char *full_tty, - security_context_t *user_sid) --- -2.11.0 - diff --git a/busybox/0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch b/busybox/0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch deleted file mode 100644 index 72dc0482a..000000000 --- a/busybox/0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 7d2e6a0a89ba11a98ce665e307d7acf86b5f00b6 Mon Sep 17 00:00:00 2001 -From: Kaarle Ritvanen -Date: Thu, 5 Nov 2015 16:27:35 +0200 -Subject: [PATCH 09/12] libbb: allow_blank argument for - ask_and_check_password_extended() - ---- - include/libbb.h | 2 +- - libbb/correct_password.c | 6 +++--- - loginutils/sulogin.c | 2 +- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/include/libbb.h b/include/libbb.h -index 38d6d0b1e..f0ddce94f 100644 ---- a/include/libbb.h -+++ b/include/libbb.h -@@ -1392,7 +1392,7 @@ void setup_environment(const char *shell, int flags, const struct passwd *pw) FA - void nuke_str(char *str) FAST_FUNC; - int check_securetty(const char *short_tty); - int check_password(const struct passwd *pw, const char *plaintext) FAST_FUNC; --int ask_and_check_password_extended(const struct passwd *pw, int timeout, const char *prompt) FAST_FUNC; -+int ask_and_check_password_extended(const struct passwd *pw, int timeout, int allow_blank, const char *prompt) FAST_FUNC; - int ask_and_check_password(const struct passwd *pw) FAST_FUNC; - /* Returns a malloced string */ - #if !ENABLE_USE_BB_CRYPT -diff --git a/libbb/correct_password.c b/libbb/correct_password.c -index 513c93028..57cd2b890 100644 ---- a/libbb/correct_password.c -+++ b/libbb/correct_password.c -@@ -96,7 +96,7 @@ int FAST_FUNC check_password(const struct passwd *pw, const char *plaintext) - * NULL pw means "just fake it for login with bad username" - */ - int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw, -- int timeout, const char *prompt) -+ int timeout, int allow_blank, const char *prompt) - { - IF_FEATURE_SHADOWPASSWDS(char buffer[SHADOW_BUFSIZE];) - char *plaintext; -@@ -105,7 +105,7 @@ int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw, - - pw_pass = get_passwd(pw, buffer); - if (!pw_pass[0]) /* empty password field? */ -- return 1; -+ return allow_blank; - - plaintext = bb_ask(STDIN_FILENO, timeout, prompt); - if (!plaintext) { -@@ -120,5 +120,5 @@ int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw, - - int FAST_FUNC ask_and_check_password(const struct passwd *pw) - { -- return ask_and_check_password_extended(pw, 0, "Password: "); -+ return ask_and_check_password_extended(pw, 0, 1, "Password: "); - } -diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c -index 2e32e2bbd..d2ddc6afa 100644 ---- a/loginutils/sulogin.c -+++ b/loginutils/sulogin.c -@@ -62,7 +62,7 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv) - while (1) { - int r; - -- r = ask_and_check_password_extended(pwd, timeout, -+ r = ask_and_check_password_extended(pwd, timeout, 1, - "Give root password for system maintenance\n" - "(or type Control-D for normal startup):" - ); --- -2.11.0 - diff --git a/busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch b/busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch deleted file mode 100644 index 13c464e4a..000000000 --- a/busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch +++ /dev/null @@ -1,71 +0,0 @@ -From d9c09138d91566af49ef8179d9995c84294e2486 Mon Sep 17 00:00:00 2001 -From: Kaarle Ritvanen -Date: Thu, 5 Nov 2015 16:27:36 +0200 -Subject: [PATCH 10/12] su: FEATURE_SU_NULLOK_SECURE - -When this feature is enabled, blank passwords are not accepted by su -unless the user is on a secure TTY defined in /etc/securetty. This -resembles the default PAM configuration of some Linux distros which -specify the nullok_secure option for pam_unix.so. ---- - loginutils/su.c | 18 +++++++++++++----- - 1 file changed, 13 insertions(+), 5 deletions(-) - -diff --git a/loginutils/su.c b/loginutils/su.c -index 24ffbde86..086445243 100644 ---- a/loginutils/su.c -+++ b/loginutils/su.c -@@ -24,6 +24,11 @@ - //config: bool "Enable su to check user's shell to be listed in /etc/shells" - //config: depends on SU - //config: default y -+//config:config FEATURE_SU_NULLOK_SECURE -+//config: bool "Disallow blank passwords from TTYs other than specified in /etc/securetty" -+//config: depends on SU -+//config: default n -+ - - //applet:/* Needs to be run by root or be suid root - needs to change uid and gid: */ - //applet:IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE)) -@@ -76,6 +81,7 @@ int su_main(int argc UNUSED_PARAM, char **argv) - struct passwd *pw; - uid_t cur_uid = getuid(); - const char *tty; -+ int allow_blank = 1; - #if ENABLE_FEATURE_UTMP - char user_buf[64]; - #endif -@@ -100,6 +106,12 @@ int su_main(int argc UNUSED_PARAM, char **argv) - argv++; - } - -+ tty = xmalloc_ttyname(STDIN_FILENO); -+ if (!tty) tty = "none"; -+ tty = skip_dev_pfx(tty); -+ -+ if (ENABLE_FEATURE_SU_NULLOK_SECURE) allow_blank = check_securetty(tty); -+ - if (ENABLE_FEATURE_SU_SYSLOG) { - /* The utmp entry (via getlogin) is probably the best way to - * identify the user, especially if someone su's from a su-shell. -@@ -113,16 +125,12 @@ int su_main(int argc UNUSED_PARAM, char **argv) - pw = getpwuid(cur_uid); - old_user = pw ? xstrdup(pw->pw_name) : ""; - } -- tty = xmalloc_ttyname(2); -- if (!tty) { -- tty = "none"; -- } - openlog(applet_name, 0, LOG_AUTH); - } - - pw = xgetpwnam(opt_username); - -- if (cur_uid == 0 || ask_and_check_password(pw) > 0) { -+ if (cur_uid == 0 || ask_and_check_password_extended(pw, 0, allow_blank, "Password: ") > 0) { - if (ENABLE_FEATURE_SU_SYSLOG) - syslog(LOG_NOTICE, "%c %s %s:%s", - '+', tty, old_user, opt_username); --- -2.11.0 - diff --git a/busybox/0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch b/busybox/0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch deleted file mode 100644 index a7e5d14fd..000000000 --- a/busybox/0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch +++ /dev/null @@ -1,205 +0,0 @@ -From 838188511cb2085d8980956b270cc68ed9911102 Mon Sep 17 00:00:00 2001 -From: Kaarle Ritvanen -Date: Thu, 4 Aug 2016 12:26:56 +0200 -Subject: [PATCH 11/12] ntpd: postpone hostname resolution if fails on startup - -Signed-off-by: Kaarle Ritvanen ---- - networking/ntpd.c | 130 +++++++++++++++++++++++++++--------------------------- - 1 file changed, 64 insertions(+), 66 deletions(-) - -diff --git a/networking/ntpd.c b/networking/ntpd.c -index b7fa5dce9..c6d07adac 100644 ---- a/networking/ntpd.c -+++ b/networking/ntpd.c -@@ -155,6 +155,7 @@ - #define RETRY_INTERVAL 32 /* on send/recv error, retry in N secs (need to be power of 2) */ - #define NOREPLY_INTERVAL 512 /* sent, but got no reply: cap next query by this many seconds */ - #define RESPONSE_INTERVAL 16 /* wait for reply up to N secs */ -+#define HOSTNAME_INTERVAL 4 /* hostname lookup failed. Wait N secs for next try */ - - /* Step threshold (sec). std ntpd uses 0.128. - */ -@@ -293,6 +294,7 @@ typedef struct { - - typedef struct { - len_and_sockaddr *p_lsa; -+ char *p_hostname; - char *p_dotted; - int p_fd; - int datapoint_idx; -@@ -318,7 +320,6 @@ typedef struct { - datapoint_t filter_datapoint[NUM_DATAPOINTS]; - /* last sent packet: */ - msg_t p_xmt_msg; -- char p_hostname[1]; - } peer_t; - - -@@ -791,27 +792,17 @@ reset_peer_stats(peer_t *p, double offset) - } - - static void --resolve_peer_hostname(peer_t *p, int loop_on_fail) --{ -- len_and_sockaddr *lsa; -- -- again: -- lsa = host2sockaddr(p->p_hostname, 123); -- if (!lsa) { -- /* error message already emitted by host2sockaddr() */ -- if (!loop_on_fail) -- return; --//FIXME: do this to avoid infinite looping on typo in a hostname? --//well... in which case, what is a good value for loop_on_fail? -- //if (--loop_on_fail == 0) -- // xfunc_die(); -- sleep(5); -- goto again; -+resolve_peer_hostname(peer_t *p) { -+ len_and_sockaddr *lsa = host2sockaddr(p->p_hostname, 123); -+ if (lsa) { -+ if (p->p_lsa) { -+ free(p->p_lsa); -+ free(p->p_dotted); -+ } -+ p->p_lsa = lsa; -+ p->p_dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); - } -- free(p->p_lsa); -- free(p->p_dotted); -- p->p_lsa = lsa; -- p->p_dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); -+ set_next(p, lsa ? 0 : HOSTNAME_INTERVAL); - } - - static void -@@ -820,28 +811,29 @@ add_peers(const char *s) - llist_t *item; - peer_t *p; - -- p = xzalloc(sizeof(*p) + strlen(s)); -- strcpy(p->p_hostname, s); -- resolve_peer_hostname(p, /*loop_on_fail=*/ 1); -+ p = xzalloc(sizeof(*p)); -+ p->p_hostname = xstrdup(s); -+ resolve_peer_hostname(p); - - /* Names like N..pool.ntp.org are randomly resolved - * to a pool of machines. Sometimes different N's resolve to the same IP. - * It is not useful to have two peers with same IP. We skip duplicates. - */ -- for (item = G.ntp_peers; item != NULL; item = item->link) { -- peer_t *pp = (peer_t *) item->data; -- if (strcmp(p->p_dotted, pp->p_dotted) == 0) { -- bb_error_msg("duplicate peer %s (%s)", s, p->p_dotted); -- free(p->p_lsa); -- free(p->p_dotted); -- free(p); -- return; -+ if (p->p_lsa) -+ for (item = G.ntp_peers; item != NULL; item = item->link) { -+ peer_t *pp = (peer_t *) item->data; -+ if (pp->p_lsa && strcmp(p->p_dotted, pp->p_dotted) == 0) { -+ bb_error_msg("duplicate peer %s (%s)", s, p->p_dotted); -+ free(p->p_hostname); -+ free(p->p_lsa); -+ free(p->p_dotted); -+ free(p); -+ return; -+ } - } -- } - - p->p_fd = -1; - p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3); -- p->next_action_time = G.cur_time; /* = set_next(p, 0); */ - reset_peer_stats(p, STEP_THRESHOLD); - - llist_add_to(&G.ntp_peers, p); -@@ -2378,44 +2370,50 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) - for (item = G.ntp_peers; item != NULL; item = item->link) { - peer_t *p = (peer_t *) item->data; - -- if (p->next_action_time <= G.cur_time) { -- if (p->p_fd == -1) { -- /* Time to send new req */ -- if (--cnt == 0) { -- VERB4 bb_error_msg("disabling burst mode"); -- G.polladj_count = 0; -- G.poll_exp = MINPOLL; -+ if (p->p_lsa) { -+ -+ if (p->next_action_time <= G.cur_time) { -+ if (p->p_fd == -1) { -+ /* Time to send new req */ -+ if (--cnt == 0) { -+ VERB4 bb_error_msg("disabling burst mode"); -+ G.polladj_count = 0; -+ G.poll_exp = MINPOLL; -+ } -+ send_query_to_peer(p); -+ } else { -+ /* Timed out waiting for reply */ -+ close(p->p_fd); -+ p->p_fd = -1; -+ /* If poll interval is small, increase it */ -+ if (G.poll_exp < BIGPOLL) -+ adjust_poll(MINPOLL); -+ timeout = poll_interval(NOREPLY_INTERVAL); -+ bb_error_msg("timed out waiting for %s, reach 0x%02x, next query in %us", -+ p->p_dotted, p->reachable_bits, timeout); -+ -+ /* What if don't see it because it changed its IP? */ -+ if (p->reachable_bits == 0) -+ resolve_peer_hostname(p); -+ -+ set_next(p, timeout); - } -- send_query_to_peer(p); -- } else { -- /* Timed out waiting for reply */ -- close(p->p_fd); -- p->p_fd = -1; -- /* If poll interval is small, increase it */ -- if (G.poll_exp < BIGPOLL) -- adjust_poll(MINPOLL); -- timeout = poll_interval(NOREPLY_INTERVAL); -- bb_error_msg("timed out waiting for %s, reach 0x%02x, next query in %us", -- p->p_dotted, p->reachable_bits, timeout); -- -- /* What if don't see it because it changed its IP? */ -- if (p->reachable_bits == 0) -- resolve_peer_hostname(p, /*loop_on_fail=*/ 0); -- -- set_next(p, timeout); - } -- } -+ -+ if (p->p_fd >= 0) { -+ /* Wait for reply from this peer */ -+ pfd[i].fd = p->p_fd; -+ pfd[i].events = POLLIN; -+ idx2peer[i] = p; -+ i++; -+ } -+ -+ } else -+ resolve_peer_hostname(p); - - if (p->next_action_time < nextaction) - nextaction = p->next_action_time; - -- if (p->p_fd >= 0) { -- /* Wait for reply from this peer */ -- pfd[i].fd = p->p_fd; -- pfd[i].events = POLLIN; -- idx2peer[i] = p; -- i++; -- } - } - - timeout = nextaction - G.cur_time; --- -2.11.0 - diff --git a/busybox/0012-diff-add-support-for-no-dereference.patch b/busybox/0012-diff-add-support-for-no-dereference.patch deleted file mode 100644 index 8e5229379..000000000 --- a/busybox/0012-diff-add-support-for-no-dereference.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 56c14ec7f75a68c191f2fc210915108f428e849c Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Fri, 25 Jul 2014 15:28:33 +0200 -Subject: [PATCH 12/12] diff: add support for --no-dereference - -Add flag for not following symlinks when recursing - -function old new delta -.rodata 7934 7967 +33 -diff_longopts 253 270 +17 -packed_usage 1704 1720 +16 -diff_main 1665 1662 -3 ------------------------------------------------------------------------------- -(add/remove: 0/0 grow/shrink: 3/1 up/down: 66/-3) Total: 63 bytes - -Signed-off-by: Natanael Copa ---- - editors/diff.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/editors/diff.c b/editors/diff.c -index 75229ad8c..6266bde0d 100644 ---- a/editors/diff.c -+++ b/editors/diff.c -@@ -117,6 +117,9 @@ - //usage: "\n -N Treat absent files as empty" - //usage: "\n -q Output only whether files differ" - //usage: "\n -r Recurse" -+//usage: IF_LONG_OPTS( -+//usage: "\n --no-dereference Don't follow symlinks" -+//usage: ) - //usage: "\n -S Start with FILE when comparing directories" - //usage: "\n -T Make tabs line up by prefixing a tab when necessary" - //usage: "\n -s Report when two files are the same" -@@ -158,6 +161,7 @@ enum { /* Commandline flags */ - FLAG_p, /* not implemented */ - FLAG_B, - FLAG_E, /* not implemented */ -+ FLAG_no_deref, - }; - #define FLAG(x) (1 << FLAG_##x) - -@@ -872,7 +876,8 @@ static void diffdir(char *p[2], const char *s_start) - * Using list.len to specify its length, - * add_to_dirlist will remove it. */ - list[i].len = strlen(p[i]); -- recursive_action(p[i], ACTION_RECURSE | ACTION_FOLLOWLINKS, -+ recursive_action(p[i], ACTION_RECURSE | -+ ((option_mask32 & FLAG(no_deref)) ? 0 : ACTION_FOLLOWLINKS), - add_to_dirlist, skip_dir, &list[i], 0); - /* Sort dl alphabetically. - * GNU diff does this ignoring any number of trailing dots. -@@ -969,6 +974,7 @@ static const char diff_longopts[] ALIGN1 = - "report-identical-files\0" No_argument "s" - "starting-file\0" Required_argument "S" - "minimal\0" No_argument "d" -+ "no-dereference\0" No_argument "\xff" - ; - #endif - --- -2.11.0 - diff --git a/busybox/0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch b/busybox/0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch deleted file mode 100644 index 70f420a92..000000000 --- a/busybox/0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch +++ /dev/null @@ -1,91 +0,0 @@ -From e139ae307e4fd9eb3b86a6fc2e97b4e212925199 Mon Sep 17 00:00:00 2001 -From: Denys Vlasenko -Date: Wed, 12 Apr 2017 21:02:33 +0200 -Subject: [PATCH 13/14] ash: make shellexec capable of using separate argv[0] - and filename to exec - -function old new delta -execcmd 71 78 +7 -shellexec 221 224 +3 -evalcommand 1158 1161 +3 ------------------------------------------------------------------------------- -(add/remove: 0/0 grow/shrink: 3/0 up/down: 13/0) Total: 13 bytes - -Signed-off-by: Denys Vlasenko ---- - shell/ash.c | 21 ++++++++++----------- - 1 file changed, 10 insertions(+), 11 deletions(-) - -diff --git a/shell/ash.c b/shell/ash.c -index 983f7b1..044f166 100644 ---- a/shell/ash.c -+++ b/shell/ash.c -@@ -7744,9 +7744,8 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char ** - * have to change the find_command routine as well. - * argv[-1] must exist and be writable! See tryexec() for why. - */ --static void shellexec(char **, const char *, int) NORETURN; --static void --shellexec(char **argv, const char *path, int idx) -+static void shellexec(char *prog, char **argv, const char *path, int idx) NORETURN; -+static void shellexec(char *prog, char **argv, const char *path, int idx) - { - char *cmdname; - int e; -@@ -7755,12 +7754,12 @@ shellexec(char **argv, const char *path, int idx) - int applet_no = -1; /* used only by FEATURE_SH_STANDALONE */ - - envp = listvars(VEXPORT, VUNSET, /*end:*/ NULL); -- if (strchr(argv[0], '/') != NULL -+ if (strchr(prog, '/') != NULL - #if ENABLE_FEATURE_SH_STANDALONE -- || (applet_no = find_applet_by_name(argv[0])) >= 0 -+ || (applet_no = find_applet_by_name(prog)) >= 0 - #endif - ) { -- tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) argv[0], argv, envp); -+ tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) prog, argv, envp); - if (applet_no >= 0) { - /* We tried execing ourself, but it didn't work. - * Maybe /proc/self/exe doesn't exist? -@@ -7772,7 +7771,7 @@ shellexec(char **argv, const char *path, int idx) - } else { - try_PATH: - e = ENOENT; -- while ((cmdname = path_advance(&path, argv[0])) != NULL) { -+ while ((cmdname = path_advance(&path, prog)) != NULL) { - if (--idx < 0 && pathopt == NULL) { - tryexec(IF_FEATURE_SH_STANDALONE(-1,) cmdname, argv, envp); - if (errno != ENOENT && errno != ENOTDIR) -@@ -7796,8 +7795,8 @@ shellexec(char **argv, const char *path, int idx) - } - exitstatus = exerrno; - TRACE(("shellexec failed for %s, errno %d, suppress_int %d\n", -- argv[0], e, suppress_int)); -- ash_msg_and_raise(EXEXIT, "%s: %s", argv[0], errmsg(e, "not found")); -+ prog, e, suppress_int)); -+ ash_msg_and_raise(EXEXIT, "%s: %s", prog, errmsg(e, "not found")); - /* NOTREACHED */ - } - -@@ -9371,7 +9370,7 @@ execcmd(int argc UNUSED_PARAM, char **argv) - /*setsignal(SIGTSTP); - unnecessary because of mflag=0 */ - /*setsignal(SIGTTOU); - unnecessary because of mflag=0 */ - -- shellexec(argv + 1, pathval(), 0); -+ shellexec(argv[1], argv + 1, pathval(), 0); - /* NOTREACHED */ - } - return 0; -@@ -9773,7 +9772,7 @@ evalcommand(union node *cmd, int flags) - /* fall through to exec'ing external program */ - } - listsetvar(varlist.list, VEXPORT|VSTACK); -- shellexec(argv, path, cmdentry.u.index); -+ shellexec(argv[0], argv, path, cmdentry.u.index); - /* NOTREACHED */ - } /* default */ - case CMDBUILTIN: --- -2.9.3 - diff --git a/busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch b/busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch deleted file mode 100644 index 028196a40..000000000 --- a/busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 6c149f4d9afaed9edb75c88b784ad900c1f40700 Mon Sep 17 00:00:00 2001 -From: Denys Vlasenko -Date: Wed, 12 Apr 2017 21:31:32 +0200 -Subject: [PATCH 14/14] ash: implement "exec -a ARGV0 CMD ARGV1..." - -function old new delta -execcmd 71 112 +41 -shellexec 221 224 +3 -evalcommand 1158 1161 +3 -localcmd 364 366 +2 -unaliascmd 163 154 -9 ------------------------------------------------------------------------------- -(add/remove: 0/0 grow/shrink: 4/1 up/down: 49/-9) Total: 40 bytes - -Signed-off-by: Denys Vlasenko ---- - shell/ash.c | 22 +++++++++++++++------- - 1 file changed, 15 insertions(+), 7 deletions(-) - -diff --git a/shell/ash.c b/shell/ash.c -index 044f166..e170bec 100644 ---- a/shell/ash.c -+++ b/shell/ash.c -@@ -3345,11 +3345,9 @@ unaliascmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) - { - int i; - -- while ((i = nextopt("a")) != '\0') { -- if (i == 'a') { -- rmaliases(); -- return 0; -- } -+ while (nextopt("a") != '\0') { -+ rmaliases(); -+ return 0; - } - for (i = 0; *argptr; argptr++) { - if (unalias(*argptr)) { -@@ -9354,7 +9352,14 @@ truecmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) - static int FAST_FUNC - execcmd(int argc UNUSED_PARAM, char **argv) - { -- if (argv[1]) { -+ optionarg = NULL; -+ while (nextopt("a:") != '\0') -+ /* nextopt() sets optionarg to "-a ARGV0" */; -+ -+ argv = argptr; -+ if (argv[0]) { -+ char *prog; -+ - iflag = 0; /* exit on error */ - mflag = 0; - optschanged(); -@@ -9370,7 +9375,10 @@ execcmd(int argc UNUSED_PARAM, char **argv) - /*setsignal(SIGTSTP); - unnecessary because of mflag=0 */ - /*setsignal(SIGTTOU); - unnecessary because of mflag=0 */ - -- shellexec(argv[1], argv + 1, pathval(), 0); -+ prog = argv[0]; -+ if (optionarg) -+ argv[0] = optionarg; -+ shellexec(prog, argv, pathval(), 0); - /* NOTREACHED */ - } - return 0; --- -2.9.3 - diff --git a/busybox/APKBUILD b/busybox/APKBUILD deleted file mode 100644 index b2f2298c6..000000000 --- a/busybox/APKBUILD +++ /dev/null @@ -1,199 +0,0 @@ -# Contributor: Łukasz Jendrysik -# Contributor: Oliver Smith -# Maintainer: Natanael Copa -pkgname=busybox -pkgver=1.26.2 -pkgrel=3 -pkgdesc="Size optimized toolbox of many common UNIX utilities" -url=http://busybox.net -arch="all" -license="GPL2" -makedepends_build="" -makedepends_host="linux-headers" -makedepends="$makedepends_build $makedepends_host" -install="$pkgname.post-install $pkgname-extras.post-install $pkgname.post-upgrade" -subpackages="$pkgname-extras $pkgname-static $pkgname-suid" -options="suid" -_triggerpaths="/bin:/usr/bin:/sbin:/usr/sbin:/lib/modules/*" -triggers="busybox.trigger=$_triggerpaths busybox-extras.trigger=$_triggerpaths" -source="http://busybox.net/downloads/$pkgname-$pkgver.tar.bz2 - 0001-ash-exec-busybox.static.patch - 0002-app-location-for-vi-and-lspci.patch - 0003-udhcpc-set-default-discover-retries-to-5.patch - 0004-ping-make-ping-work-without-root-privileges.patch - 0005-fbsplash-support-console-switching.patch - 0006-fbsplash-support-image-and-bar-alignment-and-positio.patch - 0007-depmod-support-generating-kmod-binary-index-files.patch - 0008-login-move-check_securetty-to-libbb.patch - 0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch - 0010-su-FEATURE_SU_NULLOK_SECURE.patch - 0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch - 0012-diff-add-support-for-no-dereference.patch - 0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch - 0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch - - location-for-cpio.patch - - acpid.logrotate - busyboxconfig - busyboxconfig-extras - bbsuid.c - dad.if-up - nologin.c - " - -_sdir="$srcdir"/$pkgname-$pkgver -_staticdir="$srcdir"/build-static -_dyndir="$srcdir"/build-dynamic -_dyndir_extras="$srcdir"/build-dynamic-extras -_config="$srcdir"/busyboxconfig -_config_extras="$srcdir"/busyboxconfig-extras - -prepare() { - mkdir -p "$_staticdir" "$_dyndir" "$_dyndir_extras" - #patches - cd "$_sdir" - for i in $source; do - local p=${i##*/} - case $i in - *.patch) msg $p; patch -p1 -i "$srcdir"/$p || return 1;; - esac - done - - cp "$srcdir"/nologin.c loginutils/ -} - -build() { - # build bbsuid - msg "Building bbsuid" - ${CC:-${CROSS_COMPILE}gcc} ${CPPFLAGS} ${CFLAGS} \ - ${LDFLAGS} "$srcdir"/bbsuid.c -o "$_dyndir"/bbsuid || return 1 - - # build dynamic - cd "$_dyndir" - msg "Building dynamic busybox" - cp "$_config" .config - [ "$CLIBC" = musl ] && sed -i \ - -e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \ - .config - make -C "$_sdir" O="$PWD" silentoldconfig || return 1 - make || return 1 - - # build dynamic (extras) - cd "$_dyndir_extras" - msg "Building dynamic busybox-extras" - cp "$_config_extras" .config - [ "$CLIBC" = musl ] && sed -i \ - -e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \ - .config - make -C "$_sdir" O="$PWD" silentoldconfig || return 1 - make || return 1 - - # build static - cd "$_staticdir" - msg "Building static busybox" - sed -e "s/.*CONFIG_PIE.*/\# CONFIG_PIE is not set/" \ - -e "s/.*CONFIG_STATIC.*/CONFIG_STATIC=y/" \ - "$_config" > .config - # musl does not support GNU regex - [ "$CLIBC" = musl ] && sed -i \ - -e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \ - .config - make -C "$_sdir" O="$PWD" silentoldconfig || return 1 - make || return 1 - mv busybox busybox.static -} - -# $1: $_dyndir or $_dyndir_extras -# $2: $pkgdir or $subpkgdir -_package_dynamic() { - cd "$1" - mkdir -p "$2"/usr/sbin "$2"/usr/bin "$2"/tmp \ - "$2"/var/cache/misc "$2"/bin "$2"/sbin - chmod 1777 "$2"/tmp - install -m755 busybox "$2"/bin/busybox || return 1 - # we need /bin/sh to be able to execute post-install - ln -s /bin/busybox "$2"/bin/sh - - #ifupdown needs those dirs to be present - mkdir -p \ - "$2"/etc/network/if-down.d \ - "$2"/etc/network/if-post-down.d \ - "$2"/etc/network/if-post-up.d \ - "$2"/etc/network/if-pre-down.d \ - "$2"/etc/network/if-pre-up.d \ - "$2"/etc/network/if-up.d \ - || return 1 - install -m775 "$srcdir"/dad.if-up "$2"/etc/network/if-up.d/dad \ - || return 1 - - install -Dm644 "$srcdir"/acpid.logrotate \ - "$2/etc/logrotate.d/acpid" || return 1 - - mkdir -p "$2"/var/lib/udhcpd || return 1 - install -Dm644 "$_sdir"/examples/udhcp/udhcpd.conf \ - "$2"/etc/udhcpd.conf || return 1 - cat >"$2"/etc/securetty < - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. See http://www.gnu.org/ for details. - * - */ - -#include -#include - -#include -#include -#include -#include -#include - -#define BBSUID_PATH "/bin/bbsuid" - -const static char * applets[] = { - "/bin/mount", - "/bin/umount", - "/usr/bin/crontab", - "/usr/bin/passwd", - "/usr/bin/su", - "/usr/bin/traceroute", - "/usr/bin/traceroute6", - "/usr/bin/vlock", - NULL -}; - - -static const char *applet_from_path(const char *str) -{ - const char *p = strrchr(str, '/'); - if (p == NULL) - p = str; - else - p++; - return p; -} - -static int is_valid_applet(const char *str) -{ - int i; - for (i = 0; applets[i] != NULL; i++) { - const char *a = applet_from_path(applets[i]); - if (strcmp(applet_from_path(str), a) == 0) - return 1; - } - return 0; -} - -int exec_busybox(const char *app, int argc, char **argv) -{ - char **newargv = malloc((argc + 2) * sizeof(char *)); - int i; - newargv[0] = "/bin/busybox"; - newargv[1] = (char *)app; - for (i = 1; i < argc; i++) - newargv[i+1] = argv[i]; - newargv[argc+1] = NULL; - execv(newargv[0], newargv); - perror(newargv[0]); - free(newargv); - return 1; -} - -static int install_links(void) -{ - int i, r = 0; - /* we don't want others than root to install the symlinks */ - if (getuid() != 0) - errx(1, "Only root can install symlinks"); - - for (i = 0; applets[i] != NULL; i++) { - const char *a = applets[i]; - struct stat st; - if (lstat(a, &st) == 0 && S_ISLNK(st.st_mode)) - unlink(a); - if (symlink(BBSUID_PATH, a) < 0) - r++; - } - - return r; -} - -int main(int argc, char **argv) -{ - const char *app = applet_from_path(argv[0]); - - if (strcmp(app, "bbsuid") == 0) { - if (argc == 2 && strcmp(argv[1], "--install") == 0) - return install_links(); - errx(1, "Use --install to install symlinks"); - } - - if (is_valid_applet(app)) - return exec_busybox(app, argc, argv); - - errx(1, "%s is not a valid applet", app); - return 1; -} - diff --git a/busybox/busybox-extras.post-install b/busybox/busybox-extras.post-install deleted file mode 100644 index 509b8a7a5..000000000 --- a/busybox/busybox-extras.post-install +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# Uninstall note -echo "-> NOTE: To uninstall busybox-extras properly, do this:" -echo " # apk del busybox-extras" -echo " # apk add /var/cache/apk/busybox-1.26.2-r3...apk # pick latest" -echo " # apk add busybox" - -# We need the symlinks early -exec /bin/busybox --install -s diff --git a/busybox/busybox-extras.trigger b/busybox/busybox-extras.trigger deleted file mode 120000 index e1eac36f3..000000000 --- a/busybox/busybox-extras.trigger +++ /dev/null @@ -1 +0,0 @@ -busybox.trigger \ No newline at end of file diff --git a/busybox/busybox.post-install b/busybox/busybox.post-install deleted file mode 100644 index a82398e0e..000000000 --- a/busybox/busybox.post-install +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# Remove links from busybox-extras (see also: busybox.post-upgrade) -for link in \ - /usr/bin/ftpget \ - /usr/bin/ftpput \ - /usr/bin/telnet \ - /usr/bin/tftp \ - /usr/sbin/ftpd \ - /usr/sbin/httpd \ - /usr/sbin/telnetd \ - /usr/sbin/tftpd \ -; do - if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then - rm "$link" - fi -done - -# We need the symlinks early -exec /bin/busybox --install -s diff --git a/busybox/busybox.post-upgrade b/busybox/busybox.post-upgrade deleted file mode 100644 index c59160d62..000000000 --- a/busybox/busybox.post-upgrade +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -# Remove links, that have been relocated (see also: busybox.post-install) -for link in \ - /usr/bin/ftpget \ - /usr/bin/ftpput \ - /usr/bin/telnet \ - /usr/bin/tftp \ - /usr/sbin/ftpd \ - /usr/sbin/httpd \ - /usr/sbin/telnetd \ - /usr/sbin/tftpd \ -; do - if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then - rm "$link" - echo "-> $(basename $link) is now in busybox-extras" - fi -done -for link in /bin/install /bin/ip /bin/vi /usr/bin/lspci; do - if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then - rm "$link" - fi -done -for link in /bin/ping /bin/ping6; do - if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/bbsuid" ]; then - rm "$link" - fi -done - -# We need the symlinks early -exec /bin/busybox --install -s diff --git a/busybox/busybox.trigger b/busybox/busybox.trigger deleted file mode 100644 index c9f90591f..000000000 --- a/busybox/busybox.trigger +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -do_bb_install= - -for i in "$@"; do - case "$i" in - /lib/modules/*) - if [ -d "$i" ]; then - /bin/busybox depmod ${i#/lib/modules/} - fi - ;; - *) do_bb_install=yes;; - esac -done - -if [ -n "$do_bb_install" ]; then - [ -e /bin/bbsuid ] && /bin/bbsuid --install - /bin/busybox --install -s -fi diff --git a/busybox/busyboxconfig b/busybox/busyboxconfig deleted file mode 100644 index c3e8ee6eb..000000000 --- a/busybox/busyboxconfig +++ /dev/null @@ -1,1096 +0,0 @@ -# -# Automatically generated make config: don't edit -# Busybox version: 1.26.2 -# Fri May 5 19:56:04 2017 -# -CONFIG_HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# -CONFIG_DESKTOP=y -# CONFIG_EXTRA_COMPAT is not set -# CONFIG_INCLUDE_SUSv2 is not set -# CONFIG_USE_PORTABLE_CODE is not set -CONFIG_PLATFORM_LINUX=y -CONFIG_SHOW_USAGE=y -CONFIG_FEATURE_VERBOSE_USAGE=y -CONFIG_FEATURE_COMPRESS_USAGE=y -CONFIG_BUSYBOX=y -CONFIG_FEATURE_INSTALLER=y -# CONFIG_INSTALL_NO_USR is not set -# CONFIG_PAM is not set -CONFIG_LONG_OPTS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -CONFIG_FEATURE_PIDFILE=y -CONFIG_PID_FILE_PATH="/var/run" -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -# CONFIG_FEATURE_PREFER_APPLETS is not set -CONFIG_BUSYBOX_EXEC_PATH="/bin/busybox" -CONFIG_FEATURE_SYSLOG=y -# CONFIG_FEATURE_HAVE_RPC is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_PIE=y -# CONFIG_NOMMU is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_INDIVIDUAL is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -CONFIG_CROSS_COMPILER_PREFIX="" -CONFIG_SYSROOT="" -CONFIG_EXTRA_CFLAGS="" -CONFIG_EXTRA_LDFLAGS="" -CONFIG_EXTRA_LDLIBS="" - -# -# Installation Options ("make install" behavior) -# -# CONFIG_INSTALL_APPLET_SYMLINKS is not set -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set -CONFIG_INSTALL_APPLET_DONT=y -# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set -# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set -# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set -CONFIG_PREFIX="/home/ncopa/aports/main/busybox/pkg/busybox" - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_DEBUG_SANITIZE is not set -# CONFIG_UNIT_TEST is not set -# CONFIG_WERROR is not set -CONFIG_NO_DEBUG_LIB=y -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set - -# -# Busybox Library Tuning -# -# CONFIG_FEATURE_USE_BSS_TAIL is not set -CONFIG_FEATURE_RTMINMAX=y -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_PASSWORD_MINLEN=6 -CONFIG_MD5_SMALL=0 -CONFIG_SHA3_SMALL=0 -CONFIG_FEATURE_FAST_TOP=y -# CONFIG_FEATURE_ETC_NETWORKS is not set -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_FEATURE_EDITING=y -CONFIG_FEATURE_EDITING_MAX_LEN=1024 -CONFIG_FEATURE_EDITING_VI=y -CONFIG_FEATURE_EDITING_HISTORY=255 -CONFIG_FEATURE_EDITING_SAVEHISTORY=y -# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set -CONFIG_FEATURE_REVERSE_SEARCH=y -CONFIG_FEATURE_TAB_COMPLETION=y -CONFIG_FEATURE_USERNAME_COMPLETION=y -CONFIG_FEATURE_EDITING_FANCY_PROMPT=y -CONFIG_FEATURE_EDITING_ASK_TERMINAL=y -CONFIG_LOCALE_SUPPORT=y -CONFIG_UNICODE_SUPPORT=y -CONFIG_UNICODE_USING_LOCALE=y -# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set -CONFIG_SUBST_WCHAR=63 -CONFIG_LAST_SUPPORTED_WCHAR=1114111 -CONFIG_UNICODE_COMBINING_WCHARS=y -CONFIG_UNICODE_WIDE_WCHARS=y -# CONFIG_UNICODE_BIDI_SUPPORT is not set -# CONFIG_UNICODE_NEUTRAL_TABLE is not set -CONFIG_UNICODE_PRESERVE_BROKEN=y -CONFIG_FEATURE_NON_POSIX_CP=y -# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set -CONFIG_FEATURE_USE_SENDFILE=y -CONFIG_FEATURE_COPYBUF_KB=16 -CONFIG_FEATURE_SKIP_ROOTFS=y -CONFIG_MONOTONIC_SYSCALL=y -# CONFIG_IOCTL_HEX2STR_ERROR is not set -CONFIG_FEATURE_HWIB=y - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_FEATURE_SEAMLESS_XZ=y -CONFIG_FEATURE_SEAMLESS_LZMA=y -CONFIG_FEATURE_SEAMLESS_BZ2=y -CONFIG_FEATURE_SEAMLESS_GZ=y -CONFIG_FEATURE_SEAMLESS_Z=y -# CONFIG_AR is not set -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -# CONFIG_FEATURE_AR_CREATE is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_GUNZIP=y -CONFIG_ZCAT=y -CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y -CONFIG_BUNZIP2=y -CONFIG_BZCAT=y -CONFIG_UNLZMA=y -CONFIG_LZCAT=y -CONFIG_LZMA=y -CONFIG_FEATURE_LZMA_FAST=y -CONFIG_UNXZ=y -CONFIG_XZCAT=y -# CONFIG_XZ is not set -CONFIG_BZIP2=y -CONFIG_CPIO=y -CONFIG_FEATURE_CPIO_O=y -CONFIG_FEATURE_CPIO_P=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GZIP=y -# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set -CONFIG_GZIP_FAST=2 -CONFIG_FEATURE_GZIP_LEVELS=y -CONFIG_LZOP=y -CONFIG_UNLZOP=y -CONFIG_LZOPCAT=y -# CONFIG_LZOP_COMPR_HIGH is not set -# CONFIG_RPM is not set -# CONFIG_RPM2CPIO is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_AUTODETECT=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y -CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -# CONFIG_FEATURE_TAR_TO_COMMAND is not set -CONFIG_FEATURE_TAR_UNAME_GNAME=y -CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y -# CONFIG_FEATURE_TAR_SELINUX is not set -CONFIG_UNZIP=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -CONFIG_CATV=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y -CONFIG_CHROOT=y -CONFIG_CKSUM=y -CONFIG_COMM=y -CONFIG_CP=y -CONFIG_FEATURE_CP_LONG_OPTIONS=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -# CONFIG_FEATURE_DATE_NANO is not set -CONFIG_FEATURE_DATE_COMPAT=y -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set -CONFIG_FEATURE_DD_IBS_OBS=y -CONFIG_FEATURE_DD_STATUS=y -CONFIG_DF=y -CONFIG_FEATURE_DF_FANCY=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPAND=y -# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set -CONFIG_UNEXPAND=y -# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set -CONFIG_EXPR=y -CONFIG_EXPR_MATH_SUPPORT_64=y -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_FSYNC=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_GROUPS=y -CONFIG_INSTALL=y -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y -CONFIG_MD5SUM=y -CONFIG_SHA1SUM=y -CONFIG_SHA256SUM=y -CONFIG_SHA512SUM=y -CONFIG_SHA3SUM=y - -# -# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -CONFIG_PRINTENV=y -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set -CONFIG_SEQ=y -CONFIG_SHUF=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_FEATURE_FLOAT_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -CONFIG_SPLIT=y -# CONFIG_FEATURE_SPLIT_FANCY is not set -CONFIG_STAT=y -CONFIG_FEATURE_STAT_FORMAT=y -CONFIG_FEATURE_STAT_FILESYSTEM=y -CONFIG_STTY=y -CONFIG_SUM=y -CONFIG_SYNC=y -CONFIG_FEATURE_SYNC_FANCY=y -CONFIG_TAC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -CONFIG_TEST=y -CONFIG_TEST1=y -CONFIG_TEST2=y -CONFIG_FEATURE_TEST_64=y -CONFIG_TOUCH=y -CONFIG_FEATURE_TOUCH_NODEREF=y -CONFIG_FEATURE_TOUCH_SUSV3=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -CONFIG_FEATURE_TR_EQUIV=y -CONFIG_TRUE=y -CONFIG_TRUNCATE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNAME_OSNAME="Linux" -CONFIG_UNIQ=y -CONFIG_UNLINK=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_BASE64=y -CONFIG_UUENCODE=y -CONFIG_WC=y -# CONFIG_FEATURE_WC_LARGE is not set -# CONFIG_WHO is not set -# CONFIG_USERS is not set -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options -# -CONFIG_FEATURE_VERBOSE=y - -# -# Common options for cp and mv -# -CONFIG_FEATURE_PRESERVE_HARDLINKS=y - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -# CONFIG_FGCONSOLE is not set -CONFIG_KBD_MODE=y -CONFIG_LOADFONT=y -CONFIG_SETFONT=y -CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y -CONFIG_DEFAULT_SETFONT_DIR="/usr/share" - -# -# Common options for loadfont and setfont -# -CONFIG_FEATURE_LOADFONT_PSF2=y -CONFIG_FEATURE_LOADFONT_RAW=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_RESIZE=y -CONFIG_FEATURE_RESIZE_PRINT=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=y -CONFIG_SHOWKEY=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_RUN_PARTS=y -CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y -# CONFIG_FEATURE_RUN_PARTS_FANCY is not set -# CONFIG_START_STOP_DAEMON is not set -# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_LIBM=y -CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y -CONFIG_CMP=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_LONG_OPTIONS=y -CONFIG_FEATURE_DIFF_DIR=y -CONFIG_ED=y -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_MAX_LEN=1024 -CONFIG_FEATURE_VI_8BIT=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -# CONFIG_FEATURE_VI_REGEX_SEARCH is not set -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_ASK_TERMINAL=y -CONFIG_FEATURE_VI_UNDO=y -CONFIG_FEATURE_VI_UNDO_QUEUE=y -CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 -CONFIG_FEATURE_ALLOW_EXEC=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_MAXDEPTH=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_FEATURE_FIND_EXEC_PLUS=y -CONFIG_FEATURE_FIND_USER=y -CONFIG_FEATURE_FIND_GROUP=y -CONFIG_FEATURE_FIND_NOT=y -CONFIG_FEATURE_FIND_DEPTH=y -CONFIG_FEATURE_FIND_PAREN=y -CONFIG_FEATURE_FIND_SIZE=y -CONFIG_FEATURE_FIND_PRUNE=y -CONFIG_FEATURE_FIND_DELETE=y -CONFIG_FEATURE_FIND_PATH=y -CONFIG_FEATURE_FIND_REGEX=y -# CONFIG_FEATURE_FIND_CONTEXT is not set -CONFIG_FEATURE_FIND_LINKS=y -CONFIG_GREP=y -CONFIG_EGREP=y -CONFIG_FGREP=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y -CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y - -# -# Init Utilities -# -# CONFIG_BOOTCHARTD is not set -# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set -# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set -CONFIG_HALT=y -CONFIG_POWEROFF=y -CONFIG_REBOOT=y -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" -CONFIG_INIT=y -# CONFIG_LINUXRC is not set -CONFIG_FEATURE_USE_INITTAB=y -CONFIG_FEATURE_KILL_REMOVED=y -CONFIG_FEATURE_KILL_DELAY=0 -CONFIG_FEATURE_INIT_SCTTY=y -CONFIG_FEATURE_INIT_SYSLOG=y -CONFIG_FEATURE_EXTRA_QUIET=y -# CONFIG_FEATURE_INIT_COREDUMPS is not set -CONFIG_INIT_TERMINAL_TYPE="linux" -# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set -CONFIG_MESG=y -CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y - -# -# Login/Password Management Utilities -# -CONFIG_FEATURE_SHADOWPASSWDS=y -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_CRYPT is not set -# CONFIG_USE_BB_CRYPT_SHA is not set -CONFIG_ADD_SHELL=y -CONFIG_REMOVE_SHELL=y -CONFIG_ADDGROUP=y -# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set -CONFIG_FEATURE_ADDUSER_TO_GROUP=y -CONFIG_ADDUSER=y -# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set -CONFIG_FEATURE_CHECK_NAMES=y -CONFIG_LAST_ID=256000 -CONFIG_FIRST_SYSTEM_ID=100 -CONFIG_LAST_SYSTEM_ID=999 -CONFIG_CHPASSWD=y -CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="sha512" -CONFIG_CRYPTPW=y -CONFIG_MKPASSWD=y -CONFIG_DELUSER=y -CONFIG_DELGROUP=y -CONFIG_FEATURE_DEL_USER_FROM_GROUP=y -CONFIG_GETTY=y -CONFIG_LOGIN=y -CONFIG_LOGIN_SESSION_AS_CHILD=y -CONFIG_LOGIN_SCRIPTS=y -CONFIG_FEATURE_NOLOGIN=y -CONFIG_FEATURE_SECURETTY=y -CONFIG_NOLOGIN=y -CONFIG_PASSWD=y -CONFIG_FEATURE_PASSWD_WEAK_CHECK=y -CONFIG_SU=y -CONFIG_FEATURE_SU_SYSLOG=y -CONFIG_FEATURE_SU_CHECKS_SHELLS=y -CONFIG_FEATURE_SU_NULLOK_SECURE=y -# CONFIG_SULOGIN is not set -CONFIG_VLOCK=y - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -# CONFIG_TUNE2FS is not set - -# -# Linux Module Utilities -# -# CONFIG_MODPROBE_SMALL is not set -CONFIG_DEPMOD=y -CONFIG_INSMOD=y -CONFIG_LSMOD=y -CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y -CONFIG_MODINFO=y -# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set -# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_BLACKLIST=y -CONFIG_RMMOD=y - -# -# Options common to multiple modutils -# -# CONFIG_FEATURE_2_4_MODULES is not set -# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -CONFIG_FEATURE_MODUTILS_ALIAS=y -CONFIG_FEATURE_MODUTILS_BIN=y -CONFIG_FEATURE_MODUTILS_SYMBOLS=y -CONFIG_DEFAULT_MODULES_DIR="/lib/modules" -CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" - -# -# Linux System Utilities -# -CONFIG_ACPID=y -CONFIG_FEATURE_ACPID_COMPAT=y -CONFIG_BLKDISCARD=y -CONFIG_BLKID=y -CONFIG_FEATURE_BLKID_TYPE=y -CONFIG_BLOCKDEV=y -CONFIG_DMESG=y -CONFIG_FEATURE_DMESG_PRETTY=y -CONFIG_FATATTR=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -CONFIG_FDFORMAT=y -CONFIG_FDISK=y -# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set -CONFIG_FEATURE_FDISK_WRITABLE=y -CONFIG_FEATURE_AIX_LABEL=y -CONFIG_FEATURE_SGI_LABEL=y -CONFIG_FEATURE_SUN_LABEL=y -CONFIG_FEATURE_OSF_LABEL=y -CONFIG_FEATURE_GPT_LABEL=y -CONFIG_FEATURE_FDISK_ADVANCED=y -CONFIG_FINDFS=y -CONFIG_FLOCK=y -CONFIG_FDFLUSH=y -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -CONFIG_FSTRIM=y -CONFIG_GETOPT=y -CONFIG_FEATURE_GETOPT_LONG=y -CONFIG_HEXDUMP=y -CONFIG_FEATURE_HEXDUMP_REVERSE=y -CONFIG_HD=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -CONFIG_IPCRM=y -CONFIG_IPCS=y -CONFIG_LOSETUP=y -CONFIG_LSPCI=y -CONFIG_LSUSB=y -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -CONFIG_FEATURE_MDEV_RENAME=y -CONFIG_FEATURE_MDEV_RENAME_REGEXP=y -CONFIG_FEATURE_MDEV_EXEC=y -CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y -# CONFIG_MKE2FS is not set -# CONFIG_MKFS_EXT2 is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -# CONFIG_MKFS_REISER is not set -CONFIG_MKDOSFS=y -CONFIG_MKFS_VFAT=y -CONFIG_MKSWAP=y -CONFIG_FEATURE_MKSWAP_UUID=y -CONFIG_MORE=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_FAKE=y -CONFIG_FEATURE_MOUNT_VERBOSE=y -CONFIG_FEATURE_MOUNT_HELPERS=y -CONFIG_FEATURE_MOUNT_LABEL=y -# CONFIG_FEATURE_MOUNT_NFS is not set -CONFIG_FEATURE_MOUNT_CIFS=y -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -# CONFIG_FEATURE_MOUNT_OTHERTAB is not set -CONFIG_NSENTER=y -CONFIG_FEATURE_NSENTER_LONG_OPTS=y -# CONFIG_PIVOT_ROOT is not set -CONFIG_RDATE=y -CONFIG_RDEV=y -CONFIG_READPROFILE=y -CONFIG_REV=y -# CONFIG_RTCWAKE is not set -# CONFIG_SCRIPT is not set -# CONFIG_SCRIPTREPLAY is not set -# CONFIG_SETARCH is not set -CONFIG_LINUX32=y -CONFIG_LINUX64=y -CONFIG_SWAPON=y -CONFIG_FEATURE_SWAPON_DISCARD=y -CONFIG_FEATURE_SWAPON_PRI=y -CONFIG_SWAPOFF=y -CONFIG_SWITCH_ROOT=y -# CONFIG_UEVENT is not set -CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y -CONFIG_UNSHARE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -CONFIG_FEATURE_MOUNT_LOOP_CREATE=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set -CONFIG_VOLUMEID=y - -# -# Filesystem/Volume identification -# -CONFIG_FEATURE_VOLUMEID_BCACHE=y -CONFIG_FEATURE_VOLUMEID_BTRFS=y -CONFIG_FEATURE_VOLUMEID_CRAMFS=y -CONFIG_FEATURE_VOLUMEID_EXFAT=y -CONFIG_FEATURE_VOLUMEID_EXT=y -CONFIG_FEATURE_VOLUMEID_F2FS=y -CONFIG_FEATURE_VOLUMEID_FAT=y -# CONFIG_FEATURE_VOLUMEID_HFS is not set -CONFIG_FEATURE_VOLUMEID_ISO9660=y -CONFIG_FEATURE_VOLUMEID_JFS=y -CONFIG_FEATURE_VOLUMEID_LINUXRAID=y -CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y -CONFIG_FEATURE_VOLUMEID_LUKS=y -CONFIG_FEATURE_VOLUMEID_NILFS=y -CONFIG_FEATURE_VOLUMEID_NTFS=y -CONFIG_FEATURE_VOLUMEID_OCFS2=y -CONFIG_FEATURE_VOLUMEID_REISERFS=y -# CONFIG_FEATURE_VOLUMEID_ROMFS is not set -CONFIG_FEATURE_VOLUMEID_SQUASHFS=y -# CONFIG_FEATURE_VOLUMEID_SYSV is not set -CONFIG_FEATURE_VOLUMEID_UBIFS=y -CONFIG_FEATURE_VOLUMEID_UDF=y -CONFIG_FEATURE_VOLUMEID_XFS=y - -# -# Miscellaneous Utilities -# -CONFIG_ADJTIMEX=y -CONFIG_BBCONFIG=y -CONFIG_FEATURE_COMPRESS_BBCONFIG=y -CONFIG_BEEP=y -CONFIG_FEATURE_BEEP_FREQ=440 -CONFIG_FEATURE_BEEP_LENGTH_MS=30 -# CONFIG_CHAT is not set -# CONFIG_FEATURE_CHAT_NOFAIL is not set -# CONFIG_FEATURE_CHAT_TTY_HIFI is not set -# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set -# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set -# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set -# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set -# CONFIG_FEATURE_CHAT_CLR_ABORT is not set -# CONFIG_CHRT is not set -CONFIG_CONSPY=y -CONFIG_CROND=y -CONFIG_FEATURE_CROND_D=y -CONFIG_FEATURE_CROND_CALL_SENDMAIL=y -CONFIG_FEATURE_CROND_DIR="/var/spool/cron" -CONFIG_CRONTAB=y -CONFIG_DC=y -CONFIG_FEATURE_DC_LIBM=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_DEVMEM is not set -CONFIG_EJECT=y -CONFIG_FEATURE_EJECT_SCSI=y -CONFIG_FBSPLASH=y -# CONFIG_FLASH_ERASEALL is not set -# CONFIG_FLASH_LOCK is not set -# CONFIG_FLASH_UNLOCK is not set -# CONFIG_FLASHCP is not set -CONFIG_HDPARM=y -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_I2CGET is not set -# CONFIG_I2CSET is not set -# CONFIG_I2CDUMP is not set -# CONFIG_I2CDETECT is not set -CONFIG_INOTIFYD=y -CONFIG_IONICE=y -# CONFIG_LAST is not set -# CONFIG_FEATURE_LAST_FANCY is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -CONFIG_FEATURE_LESS_TRUNCATE=y -CONFIG_FEATURE_LESS_MARKS=y -CONFIG_FEATURE_LESS_REGEXP=y -CONFIG_FEATURE_LESS_WINCH=y -CONFIG_FEATURE_LESS_ASK_TERMINAL=y -CONFIG_FEATURE_LESS_DASHCMD=y -CONFIG_FEATURE_LESS_LINENUMS=y -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MAN is not set -CONFIG_MICROCOM=y -CONFIG_MOUNTPOINT=y -# CONFIG_MT is not set -CONFIG_NANDWRITE=y -CONFIG_NANDDUMP=y -CONFIG_RAIDAUTORUN=y -CONFIG_READAHEAD=y -CONFIG_RFKILL=y -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_SETSERIAL=y -CONFIG_SETSID=y -CONFIG_STRINGS=y -# CONFIG_TASKSET is not set -# CONFIG_FEATURE_TASKSET_FANCY is not set -CONFIG_TIME=y -CONFIG_TIMEOUT=y -CONFIG_TTYSIZE=y -# CONFIG_UBIATTACH is not set -# CONFIG_UBIDETACH is not set -# CONFIG_UBIMKVOL is not set -# CONFIG_UBIRMVOL is not set -# CONFIG_UBIRSVOL is not set -# CONFIG_UBIUPDATEVOL is not set -# CONFIG_UBIRENAME is not set -CONFIG_VOLNAME=y -# CONFIG_WALL is not set -CONFIG_WATCHDOG=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_FEATURE_UNIX_LOCAL=y -CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y -CONFIG_VERBOSE_RESOLUTION_ERRORS=y -CONFIG_ARP=y -CONFIG_ARPING=y -CONFIG_BRCTL=y -CONFIG_FEATURE_BRCTL_FANCY=y -CONFIG_FEATURE_BRCTL_SHOW=y -CONFIG_DNSD=y -CONFIG_ETHER_WAKE=y -# CONFIG_FTPD is not set -# CONFIG_FEATURE_FTPD_WRITE is not set -# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set -# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set -# CONFIG_FTPGET is not set -# CONFIG_FTPPUT is not set -# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set -CONFIG_HOSTNAME=y -CONFIG_DNSDOMAINNAME=y -# CONFIG_HTTPD is not set -# CONFIG_FEATURE_HTTPD_RANGES is not set -# CONFIG_FEATURE_HTTPD_SETUID is not set -# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set -# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set -# CONFIG_FEATURE_HTTPD_CGI is not set -# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set -# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set -# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set -# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set -# CONFIG_FEATURE_HTTPD_PROXY is not set -# CONFIG_FEATURE_HTTPD_GZIP is not set -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -CONFIG_FEATURE_IFCONFIG_SLIP=y -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFENSLAVE=y -# CONFIG_IFPLUGD is not set -CONFIG_IFUP=y -CONFIG_IFDOWN=y -CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" -CONFIG_FEATURE_IFUPDOWN_IP=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y -CONFIG_INETD=y -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_IPADDR=y -CONFIG_IPLINK=y -CONFIG_IPROUTE=y -CONFIG_IPTUNNEL=y -CONFIG_IPRULE=y -CONFIG_IPNEIGH=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" -CONFIG_FEATURE_IP_TUNNEL=y -CONFIG_FEATURE_IP_RULE=y -CONFIG_FEATURE_IP_NEIGH=y -CONFIG_FEATURE_IP_RARE_PROTOCOLS=y -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -CONFIG_FAKEIDENTD=y -CONFIG_NAMEIF=y -CONFIG_FEATURE_NAMEIF_EXTENDED=y -CONFIG_NBDCLIENT=y -CONFIG_NC=y -CONFIG_NC_SERVER=y -CONFIG_NC_EXTRA=y -CONFIG_NC_110_COMPAT=y -CONFIG_NETSTAT=y -CONFIG_FEATURE_NETSTAT_WIDE=y -CONFIG_FEATURE_NETSTAT_PRG=y -CONFIG_NSLOOKUP=y -CONFIG_NTPD=y -CONFIG_FEATURE_NTPD_SERVER=y -CONFIG_FEATURE_NTPD_CONF=y -CONFIG_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PSCAN=y -CONFIG_ROUTE=y -CONFIG_SLATTACH=y -# CONFIG_TCPSVD is not set -# CONFIG_UDPSVD is not set -# CONFIG_TELNET is not set -# CONFIG_FEATURE_TELNET_TTYPE is not set -# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set -# CONFIG_TELNETD is not set -# CONFIG_FEATURE_TELNETD_STANDALONE is not set -# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set -# CONFIG_TFTP is not set -# CONFIG_TFTPD is not set -# CONFIG_FEATURE_TFTP_GET is not set -# CONFIG_FEATURE_TFTP_PUT is not set -# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set -# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set -# CONFIG_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -CONFIG_TRACEROUTE6=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y -CONFIG_TUNCTL=y -CONFIG_FEATURE_TUNCTL_UG=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -CONFIG_FEATURE_WGET_TIMEOUT=y -CONFIG_FEATURE_WGET_OPENSSL=y -CONFIG_FEATURE_WGET_SSL_HELPER=y -CONFIG_WHOIS=y -# CONFIG_ZCIP is not set -CONFIG_UDHCPC6=y -CONFIG_UDHCPD=y -# CONFIG_DHCPRELAY is not set -CONFIG_DUMPLEASES=y -CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y -CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC=y -CONFIG_DHCPD_LEASES_FILE="/var/lib/udhcpd/udhcpd.leases" -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCPC_ARPING=y -CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y -# CONFIG_FEATURE_UDHCP_PORT is not set -CONFIG_UDHCP_DEBUG=0 -CONFIG_FEATURE_UDHCP_RFC3397=y -CONFIG_FEATURE_UDHCP_8021Q=y -CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" -CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 -CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" - -# -# Print Utilities -# -# CONFIG_LPD is not set -# CONFIG_LPR is not set -# CONFIG_LPQ is not set - -# -# Mail Utilities -# -CONFIG_MAKEMIME=y -# CONFIG_POPMAILDIR is not set -# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set -CONFIG_REFORMIME=y -CONFIG_FEATURE_REFORMIME_COMPAT=y -CONFIG_SENDMAIL=y -CONFIG_FEATURE_MIME_CHARSET="us-ascii" - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_IOSTAT=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_KILLALL5=y -CONFIG_LSOF=y -CONFIG_MPSTAT=y -CONFIG_NMETER=y -CONFIG_PGREP=y -CONFIG_PKILL=y -CONFIG_PIDOF=y -CONFIG_FEATURE_PIDOF_SINGLE=y -CONFIG_FEATURE_PIDOF_OMIT=y -CONFIG_PMAP=y -CONFIG_POWERTOP=y -CONFIG_PS=y -# CONFIG_FEATURE_PS_WIDE is not set -# CONFIG_FEATURE_PS_LONG is not set -CONFIG_FEATURE_PS_TIME=y -CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y -# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set -CONFIG_PSTREE=y -CONFIG_PWDX=y -CONFIG_RENICE=y -CONFIG_SMEMCAP=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y -CONFIG_FEATURE_TOP_SMP_CPU=y -# CONFIG_FEATURE_TOP_DECIMALS is not set -CONFIG_FEATURE_TOP_SMP_PROCESS=y -CONFIG_FEATURE_TOPMEM=y -CONFIG_UPTIME=y -# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set -CONFIG_WATCH=y -# CONFIG_FEATURE_SHOW_THREADS is not set - -# -# Runit Utilities -# -# CONFIG_CHPST is not set -# CONFIG_SETUIDGID is not set -# CONFIG_ENVUIDGID is not set -# CONFIG_ENVDIR is not set -# CONFIG_SOFTLIMIT is not set -# CONFIG_RUNSV is not set -# CONFIG_RUNSVDIR is not set -# CONFIG_FEATURE_RUNSVDIR_LOG is not set -# CONFIG_SV is not set -CONFIG_SV_DEFAULT_SERVICE_DIR="" -# CONFIG_SVC is not set -# CONFIG_SVLOGD is not set -# CONFIG_CHCON is not set -# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set -# CONFIG_GETENFORCE is not set -# CONFIG_GETSEBOOL is not set -# CONFIG_LOAD_POLICY is not set -# CONFIG_MATCHPATHCON is not set -# CONFIG_RUNCON is not set -# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set -# CONFIG_SELINUXENABLED is not set -# CONFIG_SESTATUS is not set -# CONFIG_SETENFORCE is not set -# CONFIG_SETFILES is not set -# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set -# CONFIG_RESTORECON is not set -# CONFIG_SETSEBOOL is not set - -# -# Shells -# -CONFIG_SH_IS_ASH=y -# CONFIG_SH_IS_HUSH is not set -# CONFIG_SH_IS_NONE is not set -# CONFIG_BASH_IS_ASH is not set -# CONFIG_BASH_IS_HUSH is not set -CONFIG_BASH_IS_NONE=y -CONFIG_ASH=y -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -CONFIG_ASH_INTERNAL_GLOB=y -CONFIG_ASH_RANDOM_SUPPORT=y -CONFIG_ASH_EXPAND_PRMT=y -CONFIG_ASH_BASH_COMPAT=y -CONFIG_ASH_IDLE_TIMEOUT=y -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_GETOPTS=y -CONFIG_ASH_BUILTIN_ECHO=y -CONFIG_ASH_BUILTIN_PRINTF=y -CONFIG_ASH_BUILTIN_TEST=y -CONFIG_ASH_HELP=y -CONFIG_ASH_CMDCMD=y -CONFIG_ASH_MAIL=y -# CONFIG_CTTYHACK is not set -# CONFIG_HUSH is not set -# CONFIG_HUSH_BASH_COMPAT is not set -# CONFIG_HUSH_BRACE_EXPANSION is not set -# CONFIG_HUSH_HELP is not set -# CONFIG_HUSH_INTERACTIVE is not set -# CONFIG_HUSH_SAVEHISTORY is not set -# CONFIG_HUSH_JOB is not set -# CONFIG_HUSH_TICK is not set -# CONFIG_HUSH_IF is not set -# CONFIG_HUSH_LOOPS is not set -# CONFIG_HUSH_CASE is not set -# CONFIG_HUSH_FUNCTIONS is not set -# CONFIG_HUSH_LOCAL is not set -# CONFIG_HUSH_RANDOM_SUPPORT is not set -# CONFIG_HUSH_EXPORT_N is not set -# CONFIG_HUSH_MODE_X is not set -# CONFIG_MSH is not set -CONFIG_FEATURE_SH_MATH=y -CONFIG_FEATURE_SH_MATH_64=y -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE is not set -# CONFIG_FEATURE_SH_NOFORK is not set -CONFIG_FEATURE_SH_HISTFILESIZE=y - -# -# System Logging Utilities -# -CONFIG_KLOGD=y - -# -# klogd should not be used together with syslog to kernel printk buffer -# -CONFIG_FEATURE_KLOGD_KLOGCTL=y -CONFIG_LOGGER=y -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_SYSLOGD_DUP=y -CONFIG_FEATURE_SYSLOGD_CFG=y -CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_FEATURE_KMSG_SYSLOG=y diff --git a/busybox/busyboxconfig-extras b/busybox/busyboxconfig-extras deleted file mode 100644 index f911d322f..000000000 --- a/busybox/busyboxconfig-extras +++ /dev/null @@ -1,1100 +0,0 @@ -# -# Automatically generated make config: don't edit -# Busybox version: 1.26.2 -# Fri May 5 20:23:06 2017 -# -CONFIG_HAVE_DOT_CONFIG=y - -# -# Busybox Settings -# -CONFIG_DESKTOP=y -# CONFIG_EXTRA_COMPAT is not set -# CONFIG_INCLUDE_SUSv2 is not set -# CONFIG_USE_PORTABLE_CODE is not set -CONFIG_PLATFORM_LINUX=y -CONFIG_SHOW_USAGE=y -CONFIG_FEATURE_VERBOSE_USAGE=y -CONFIG_FEATURE_COMPRESS_USAGE=y -CONFIG_BUSYBOX=y -CONFIG_FEATURE_INSTALLER=y -# CONFIG_INSTALL_NO_USR is not set -# CONFIG_PAM is not set -CONFIG_LONG_OPTS=y -CONFIG_FEATURE_DEVPTS=y -# CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_UTMP is not set -# CONFIG_FEATURE_WTMP is not set -CONFIG_FEATURE_PIDFILE=y -CONFIG_PID_FILE_PATH="/var/run" -CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set -# CONFIG_SELINUX is not set -# CONFIG_FEATURE_PREFER_APPLETS is not set -CONFIG_BUSYBOX_EXEC_PATH="/bin/busybox" -CONFIG_FEATURE_SYSLOG=y -# CONFIG_FEATURE_HAVE_RPC is not set - -# -# Build Options -# -# CONFIG_STATIC is not set -CONFIG_PIE=y -# CONFIG_NOMMU is not set -# CONFIG_BUILD_LIBBUSYBOX is not set -# CONFIG_FEATURE_INDIVIDUAL is not set -# CONFIG_FEATURE_SHARED_BUSYBOX is not set -CONFIG_LFS=y -CONFIG_CROSS_COMPILER_PREFIX="" -CONFIG_SYSROOT="" -CONFIG_EXTRA_CFLAGS="" -CONFIG_EXTRA_LDFLAGS="" -CONFIG_EXTRA_LDLIBS="" - -# -# Installation Options ("make install" behavior) -# -# CONFIG_INSTALL_APPLET_SYMLINKS is not set -# CONFIG_INSTALL_APPLET_HARDLINKS is not set -# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set -CONFIG_INSTALL_APPLET_DONT=y -# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set -# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set -# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set -CONFIG_PREFIX="/home/ncopa/aports/main/busybox/pkg/busybox" - -# -# Debugging Options -# -# CONFIG_DEBUG is not set -# CONFIG_DEBUG_PESSIMIZE is not set -# CONFIG_DEBUG_SANITIZE is not set -# CONFIG_UNIT_TEST is not set -# CONFIG_WERROR is not set -CONFIG_NO_DEBUG_LIB=y -# CONFIG_DMALLOC is not set -# CONFIG_EFENCE is not set - -# -# Busybox Library Tuning -# -# CONFIG_FEATURE_USE_BSS_TAIL is not set -CONFIG_FEATURE_RTMINMAX=y -CONFIG_FEATURE_BUFFERS_USE_MALLOC=y -# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set -# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set -CONFIG_PASSWORD_MINLEN=6 -CONFIG_MD5_SMALL=0 -CONFIG_SHA3_SMALL=0 -CONFIG_FEATURE_FAST_TOP=y -# CONFIG_FEATURE_ETC_NETWORKS is not set -CONFIG_FEATURE_USE_TERMIOS=y -CONFIG_FEATURE_EDITING=y -CONFIG_FEATURE_EDITING_MAX_LEN=1024 -CONFIG_FEATURE_EDITING_VI=y -CONFIG_FEATURE_EDITING_HISTORY=255 -CONFIG_FEATURE_EDITING_SAVEHISTORY=y -# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set -CONFIG_FEATURE_REVERSE_SEARCH=y -CONFIG_FEATURE_TAB_COMPLETION=y -CONFIG_FEATURE_USERNAME_COMPLETION=y -CONFIG_FEATURE_EDITING_FANCY_PROMPT=y -CONFIG_FEATURE_EDITING_ASK_TERMINAL=y -CONFIG_LOCALE_SUPPORT=y -CONFIG_UNICODE_SUPPORT=y -CONFIG_UNICODE_USING_LOCALE=y -# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set -CONFIG_SUBST_WCHAR=63 -CONFIG_LAST_SUPPORTED_WCHAR=1114111 -CONFIG_UNICODE_COMBINING_WCHARS=y -CONFIG_UNICODE_WIDE_WCHARS=y -# CONFIG_UNICODE_BIDI_SUPPORT is not set -# CONFIG_UNICODE_NEUTRAL_TABLE is not set -CONFIG_UNICODE_PRESERVE_BROKEN=y -CONFIG_FEATURE_NON_POSIX_CP=y -# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set -CONFIG_FEATURE_USE_SENDFILE=y -CONFIG_FEATURE_COPYBUF_KB=16 -CONFIG_FEATURE_SKIP_ROOTFS=y -CONFIG_MONOTONIC_SYSCALL=y -# CONFIG_IOCTL_HEX2STR_ERROR is not set -CONFIG_FEATURE_HWIB=y - -# -# Applets -# - -# -# Archival Utilities -# -CONFIG_FEATURE_SEAMLESS_XZ=y -CONFIG_FEATURE_SEAMLESS_LZMA=y -CONFIG_FEATURE_SEAMLESS_BZ2=y -CONFIG_FEATURE_SEAMLESS_GZ=y -CONFIG_FEATURE_SEAMLESS_Z=y -# CONFIG_AR is not set -# CONFIG_FEATURE_AR_LONG_FILENAMES is not set -# CONFIG_FEATURE_AR_CREATE is not set -# CONFIG_UNCOMPRESS is not set -CONFIG_GUNZIP=y -CONFIG_ZCAT=y -CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y -CONFIG_BUNZIP2=y -CONFIG_BZCAT=y -CONFIG_UNLZMA=y -CONFIG_LZCAT=y -CONFIG_LZMA=y -CONFIG_FEATURE_LZMA_FAST=y -CONFIG_UNXZ=y -CONFIG_XZCAT=y -# CONFIG_XZ is not set -CONFIG_BZIP2=y -CONFIG_CPIO=y -CONFIG_FEATURE_CPIO_O=y -CONFIG_FEATURE_CPIO_P=y -# CONFIG_DPKG is not set -# CONFIG_DPKG_DEB is not set -CONFIG_GZIP=y -# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set -CONFIG_GZIP_FAST=2 -CONFIG_FEATURE_GZIP_LEVELS=y -CONFIG_LZOP=y -CONFIG_UNLZOP=y -CONFIG_LZOPCAT=y -# CONFIG_LZOP_COMPR_HIGH is not set -# CONFIG_RPM is not set -# CONFIG_RPM2CPIO is not set -CONFIG_TAR=y -CONFIG_FEATURE_TAR_CREATE=y -CONFIG_FEATURE_TAR_AUTODETECT=y -CONFIG_FEATURE_TAR_FROM=y -CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y -CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y -CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -# CONFIG_FEATURE_TAR_TO_COMMAND is not set -CONFIG_FEATURE_TAR_UNAME_GNAME=y -CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y -# CONFIG_FEATURE_TAR_SELINUX is not set -CONFIG_UNZIP=y - -# -# Coreutils -# -CONFIG_BASENAME=y -CONFIG_CAL=y -CONFIG_CAT=y -CONFIG_CATV=y -CONFIG_CHGRP=y -CONFIG_CHMOD=y -CONFIG_CHOWN=y -CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y -CONFIG_CHROOT=y -CONFIG_CKSUM=y -CONFIG_COMM=y -CONFIG_CP=y -CONFIG_FEATURE_CP_LONG_OPTIONS=y -CONFIG_CUT=y -CONFIG_DATE=y -CONFIG_FEATURE_DATE_ISOFMT=y -# CONFIG_FEATURE_DATE_NANO is not set -CONFIG_FEATURE_DATE_COMPAT=y -CONFIG_DD=y -CONFIG_FEATURE_DD_SIGNAL_HANDLING=y -# CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set -CONFIG_FEATURE_DD_IBS_OBS=y -CONFIG_FEATURE_DD_STATUS=y -CONFIG_DF=y -CONFIG_FEATURE_DF_FANCY=y -CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y -CONFIG_DU=y -CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y -CONFIG_ECHO=y -CONFIG_FEATURE_FANCY_ECHO=y -CONFIG_ENV=y -# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set -CONFIG_EXPAND=y -# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set -CONFIG_UNEXPAND=y -# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set -CONFIG_EXPR=y -CONFIG_EXPR_MATH_SUPPORT_64=y -CONFIG_FALSE=y -CONFIG_FOLD=y -CONFIG_FSYNC=y -CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_ID=y -CONFIG_GROUPS=y -CONFIG_INSTALL=y -# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set -CONFIG_LN=y -# CONFIG_LOGNAME is not set -CONFIG_LS=y -CONFIG_FEATURE_LS_FILETYPES=y -CONFIG_FEATURE_LS_FOLLOWLINKS=y -CONFIG_FEATURE_LS_RECURSIVE=y -CONFIG_FEATURE_LS_SORTFILES=y -CONFIG_FEATURE_LS_TIMESTAMPS=y -CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y -CONFIG_MD5SUM=y -CONFIG_SHA1SUM=y -CONFIG_SHA256SUM=y -CONFIG_SHA512SUM=y -CONFIG_SHA3SUM=y - -# -# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum -# -CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y -CONFIG_MKDIR=y -# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set -CONFIG_MKFIFO=y -CONFIG_MKNOD=y -CONFIG_MV=y -# CONFIG_FEATURE_MV_LONG_OPTIONS is not set -CONFIG_NICE=y -CONFIG_NOHUP=y -CONFIG_OD=y -CONFIG_PRINTENV=y -CONFIG_PRINTF=y -CONFIG_PWD=y -CONFIG_READLINK=y -CONFIG_FEATURE_READLINK_FOLLOW=y -CONFIG_REALPATH=y -CONFIG_RM=y -CONFIG_RMDIR=y -# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set -CONFIG_SEQ=y -CONFIG_SHUF=y -CONFIG_SLEEP=y -CONFIG_FEATURE_FANCY_SLEEP=y -CONFIG_FEATURE_FLOAT_SLEEP=y -CONFIG_SORT=y -CONFIG_FEATURE_SORT_BIG=y -CONFIG_SPLIT=y -# CONFIG_FEATURE_SPLIT_FANCY is not set -CONFIG_STAT=y -CONFIG_FEATURE_STAT_FORMAT=y -CONFIG_FEATURE_STAT_FILESYSTEM=y -CONFIG_STTY=y -CONFIG_SUM=y -CONFIG_SYNC=y -CONFIG_FEATURE_SYNC_FANCY=y -CONFIG_TAC=y -CONFIG_TAIL=y -CONFIG_FEATURE_FANCY_TAIL=y -CONFIG_TEE=y -CONFIG_FEATURE_TEE_USE_BLOCK_IO=y -CONFIG_TEST=y -CONFIG_TEST1=y -CONFIG_TEST2=y -CONFIG_FEATURE_TEST_64=y -CONFIG_TOUCH=y -CONFIG_FEATURE_TOUCH_NODEREF=y -CONFIG_FEATURE_TOUCH_SUSV3=y -CONFIG_TR=y -CONFIG_FEATURE_TR_CLASSES=y -CONFIG_FEATURE_TR_EQUIV=y -CONFIG_TRUE=y -CONFIG_TRUNCATE=y -CONFIG_TTY=y -CONFIG_UNAME=y -CONFIG_UNAME_OSNAME="Linux" -CONFIG_UNIQ=y -CONFIG_UNLINK=y -CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_BASE64=y -CONFIG_UUENCODE=y -CONFIG_WC=y -# CONFIG_FEATURE_WC_LARGE is not set -# CONFIG_WHO is not set -# CONFIG_USERS is not set -CONFIG_WHOAMI=y -CONFIG_YES=y - -# -# Common options -# -CONFIG_FEATURE_VERBOSE=y - -# -# Common options for cp and mv -# -CONFIG_FEATURE_PRESERVE_HARDLINKS=y - -# -# Common options for ls, more and telnet -# -CONFIG_FEATURE_AUTOWIDTH=y - -# -# Common options for df, du, ls -# -CONFIG_FEATURE_HUMAN_READABLE=y - -# -# Console Utilities -# -CONFIG_CHVT=y -CONFIG_CLEAR=y -CONFIG_DEALLOCVT=y -CONFIG_DUMPKMAP=y -# CONFIG_FGCONSOLE is not set -CONFIG_KBD_MODE=y -CONFIG_LOADFONT=y -CONFIG_SETFONT=y -CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y -CONFIG_DEFAULT_SETFONT_DIR="/usr/share" - -# -# Common options for loadfont and setfont -# -CONFIG_FEATURE_LOADFONT_PSF2=y -CONFIG_FEATURE_LOADFONT_RAW=y -CONFIG_LOADKMAP=y -CONFIG_OPENVT=y -CONFIG_RESET=y -CONFIG_RESIZE=y -CONFIG_FEATURE_RESIZE_PRINT=y -CONFIG_SETCONSOLE=y -# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set -CONFIG_SETKEYCODES=y -CONFIG_SETLOGCONS=y -CONFIG_SHOWKEY=y - -# -# Debian Utilities -# -CONFIG_MKTEMP=y -CONFIG_PIPE_PROGRESS=y -CONFIG_RUN_PARTS=y -CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y -# CONFIG_FEATURE_RUN_PARTS_FANCY is not set -# CONFIG_START_STOP_DAEMON is not set -# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set -# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set -CONFIG_WHICH=y - -# -# Editors -# -CONFIG_AWK=y -CONFIG_FEATURE_AWK_LIBM=y -CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y -CONFIG_CMP=y -CONFIG_DIFF=y -CONFIG_FEATURE_DIFF_LONG_OPTIONS=y -CONFIG_FEATURE_DIFF_DIR=y -CONFIG_ED=y -CONFIG_PATCH=y -CONFIG_SED=y -CONFIG_VI=y -CONFIG_FEATURE_VI_MAX_LEN=1024 -CONFIG_FEATURE_VI_8BIT=y -CONFIG_FEATURE_VI_COLON=y -CONFIG_FEATURE_VI_YANKMARK=y -CONFIG_FEATURE_VI_SEARCH=y -# CONFIG_FEATURE_VI_REGEX_SEARCH is not set -CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y -CONFIG_FEATURE_VI_WIN_RESIZE=y -CONFIG_FEATURE_VI_ASK_TERMINAL=y -CONFIG_FEATURE_VI_UNDO=y -CONFIG_FEATURE_VI_UNDO_QUEUE=y -CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 -CONFIG_FEATURE_ALLOW_EXEC=y - -# -# Finding Utilities -# -CONFIG_FIND=y -CONFIG_FEATURE_FIND_PRINT0=y -CONFIG_FEATURE_FIND_MTIME=y -CONFIG_FEATURE_FIND_MMIN=y -CONFIG_FEATURE_FIND_PERM=y -CONFIG_FEATURE_FIND_TYPE=y -CONFIG_FEATURE_FIND_XDEV=y -CONFIG_FEATURE_FIND_MAXDEPTH=y -CONFIG_FEATURE_FIND_NEWER=y -CONFIG_FEATURE_FIND_INUM=y -CONFIG_FEATURE_FIND_EXEC=y -CONFIG_FEATURE_FIND_EXEC_PLUS=y -CONFIG_FEATURE_FIND_USER=y -CONFIG_FEATURE_FIND_GROUP=y -CONFIG_FEATURE_FIND_NOT=y -CONFIG_FEATURE_FIND_DEPTH=y -CONFIG_FEATURE_FIND_PAREN=y -CONFIG_FEATURE_FIND_SIZE=y -CONFIG_FEATURE_FIND_PRUNE=y -CONFIG_FEATURE_FIND_DELETE=y -CONFIG_FEATURE_FIND_PATH=y -CONFIG_FEATURE_FIND_REGEX=y -# CONFIG_FEATURE_FIND_CONTEXT is not set -CONFIG_FEATURE_FIND_LINKS=y -CONFIG_GREP=y -CONFIG_EGREP=y -CONFIG_FGREP=y -CONFIG_FEATURE_GREP_CONTEXT=y -CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y -CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y - -# -# Init Utilities -# -# CONFIG_BOOTCHARTD is not set -# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set -# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set -CONFIG_HALT=y -CONFIG_POWEROFF=y -CONFIG_REBOOT=y -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" -CONFIG_INIT=y -# CONFIG_LINUXRC is not set -CONFIG_FEATURE_USE_INITTAB=y -CONFIG_FEATURE_KILL_REMOVED=y -CONFIG_FEATURE_KILL_DELAY=0 -CONFIG_FEATURE_INIT_SCTTY=y -CONFIG_FEATURE_INIT_SYSLOG=y -CONFIG_FEATURE_EXTRA_QUIET=y -# CONFIG_FEATURE_INIT_COREDUMPS is not set -CONFIG_INIT_TERMINAL_TYPE="linux" -# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set -CONFIG_MESG=y -CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y - -# -# Login/Password Management Utilities -# -CONFIG_FEATURE_SHADOWPASSWDS=y -# CONFIG_USE_BB_PWD_GRP is not set -# CONFIG_USE_BB_SHADOW is not set -# CONFIG_USE_BB_CRYPT is not set -# CONFIG_USE_BB_CRYPT_SHA is not set -CONFIG_ADD_SHELL=y -CONFIG_REMOVE_SHELL=y -CONFIG_ADDGROUP=y -# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set -CONFIG_FEATURE_ADDUSER_TO_GROUP=y -CONFIG_ADDUSER=y -# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set -CONFIG_FEATURE_CHECK_NAMES=y -CONFIG_LAST_ID=256000 -CONFIG_FIRST_SYSTEM_ID=100 -CONFIG_LAST_SYSTEM_ID=999 -CONFIG_CHPASSWD=y -CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="sha512" -CONFIG_CRYPTPW=y -CONFIG_MKPASSWD=y -CONFIG_DELUSER=y -CONFIG_DELGROUP=y -CONFIG_FEATURE_DEL_USER_FROM_GROUP=y -CONFIG_GETTY=y -CONFIG_LOGIN=y -CONFIG_LOGIN_SESSION_AS_CHILD=y -CONFIG_LOGIN_SCRIPTS=y -CONFIG_FEATURE_NOLOGIN=y -CONFIG_FEATURE_SECURETTY=y -CONFIG_NOLOGIN=y -CONFIG_PASSWD=y -CONFIG_FEATURE_PASSWD_WEAK_CHECK=y -CONFIG_SU=y -CONFIG_FEATURE_SU_SYSLOG=y -CONFIG_FEATURE_SU_CHECKS_SHELLS=y -CONFIG_FEATURE_SU_NULLOK_SECURE=y -# CONFIG_SULOGIN is not set -CONFIG_VLOCK=y - -# -# Linux Ext2 FS Progs -# -# CONFIG_CHATTR is not set -CONFIG_FSCK=y -# CONFIG_LSATTR is not set -# CONFIG_TUNE2FS is not set - -# -# Linux Module Utilities -# -# CONFIG_MODPROBE_SMALL is not set -CONFIG_DEPMOD=y -CONFIG_INSMOD=y -CONFIG_LSMOD=y -CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y -CONFIG_MODINFO=y -# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set -# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set -CONFIG_MODPROBE=y -CONFIG_FEATURE_MODPROBE_BLACKLIST=y -CONFIG_RMMOD=y - -# -# Options common to multiple modutils -# -# CONFIG_FEATURE_2_4_MODULES is not set -# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set -# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set -# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set -# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set -# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set -CONFIG_FEATURE_CHECK_TAINTED_MODULE=y -CONFIG_FEATURE_MODUTILS_ALIAS=y -CONFIG_FEATURE_MODUTILS_BIN=y -CONFIG_FEATURE_MODUTILS_SYMBOLS=y -CONFIG_DEFAULT_MODULES_DIR="/lib/modules" -CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" - -# -# Linux System Utilities -# -CONFIG_ACPID=y -CONFIG_FEATURE_ACPID_COMPAT=y -CONFIG_BLKDISCARD=y -CONFIG_BLKID=y -CONFIG_FEATURE_BLKID_TYPE=y -CONFIG_BLOCKDEV=y -CONFIG_DMESG=y -CONFIG_FEATURE_DMESG_PRETTY=y -CONFIG_FATATTR=y -CONFIG_FBSET=y -CONFIG_FEATURE_FBSET_FANCY=y -CONFIG_FEATURE_FBSET_READMODE=y -CONFIG_FDFORMAT=y -CONFIG_FDISK=y -# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set -CONFIG_FEATURE_FDISK_WRITABLE=y -CONFIG_FEATURE_AIX_LABEL=y -CONFIG_FEATURE_SGI_LABEL=y -CONFIG_FEATURE_SUN_LABEL=y -CONFIG_FEATURE_OSF_LABEL=y -CONFIG_FEATURE_GPT_LABEL=y -CONFIG_FEATURE_FDISK_ADVANCED=y -CONFIG_FINDFS=y -CONFIG_FLOCK=y -CONFIG_FDFLUSH=y -# CONFIG_FREERAMDISK is not set -# CONFIG_FSCK_MINIX is not set -CONFIG_FSTRIM=y -CONFIG_GETOPT=y -CONFIG_FEATURE_GETOPT_LONG=y -CONFIG_HEXDUMP=y -CONFIG_FEATURE_HEXDUMP_REVERSE=y -CONFIG_HD=y -CONFIG_HWCLOCK=y -CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y -CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y -CONFIG_IPCRM=y -CONFIG_IPCS=y -CONFIG_LOSETUP=y -CONFIG_LSPCI=y -CONFIG_LSUSB=y -CONFIG_MDEV=y -CONFIG_FEATURE_MDEV_CONF=y -CONFIG_FEATURE_MDEV_RENAME=y -CONFIG_FEATURE_MDEV_RENAME_REGEXP=y -CONFIG_FEATURE_MDEV_EXEC=y -CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y -# CONFIG_MKE2FS is not set -# CONFIG_MKFS_EXT2 is not set -# CONFIG_MKFS_MINIX is not set -# CONFIG_FEATURE_MINIX2 is not set -# CONFIG_MKFS_REISER is not set -CONFIG_MKDOSFS=y -CONFIG_MKFS_VFAT=y -CONFIG_MKSWAP=y -CONFIG_FEATURE_MKSWAP_UUID=y -CONFIG_MORE=y -CONFIG_MOUNT=y -CONFIG_FEATURE_MOUNT_FAKE=y -CONFIG_FEATURE_MOUNT_VERBOSE=y -CONFIG_FEATURE_MOUNT_HELPERS=y -CONFIG_FEATURE_MOUNT_LABEL=y -# CONFIG_FEATURE_MOUNT_NFS is not set -CONFIG_FEATURE_MOUNT_CIFS=y -CONFIG_FEATURE_MOUNT_FLAGS=y -CONFIG_FEATURE_MOUNT_FSTAB=y -# CONFIG_FEATURE_MOUNT_OTHERTAB is not set -CONFIG_NSENTER=y -CONFIG_FEATURE_NSENTER_LONG_OPTS=y -# CONFIG_PIVOT_ROOT is not set -CONFIG_RDATE=y -CONFIG_RDEV=y -CONFIG_READPROFILE=y -CONFIG_REV=y -# CONFIG_RTCWAKE is not set -# CONFIG_SCRIPT is not set -# CONFIG_SCRIPTREPLAY is not set -# CONFIG_SETARCH is not set -CONFIG_LINUX32=y -CONFIG_LINUX64=y -CONFIG_SWAPON=y -CONFIG_FEATURE_SWAPON_DISCARD=y -CONFIG_FEATURE_SWAPON_PRI=y -CONFIG_SWAPOFF=y -CONFIG_SWITCH_ROOT=y -# CONFIG_UEVENT is not set -CONFIG_UMOUNT=y -CONFIG_FEATURE_UMOUNT_ALL=y -CONFIG_UNSHARE=y - -# -# Common options for mount/umount -# -CONFIG_FEATURE_MOUNT_LOOP=y -CONFIG_FEATURE_MOUNT_LOOP_CREATE=y -# CONFIG_FEATURE_MTAB_SUPPORT is not set -CONFIG_VOLUMEID=y - -# -# Filesystem/Volume identification -# -CONFIG_FEATURE_VOLUMEID_BCACHE=y -CONFIG_FEATURE_VOLUMEID_BTRFS=y -CONFIG_FEATURE_VOLUMEID_CRAMFS=y -CONFIG_FEATURE_VOLUMEID_EXFAT=y -CONFIG_FEATURE_VOLUMEID_EXT=y -CONFIG_FEATURE_VOLUMEID_F2FS=y -CONFIG_FEATURE_VOLUMEID_FAT=y -# CONFIG_FEATURE_VOLUMEID_HFS is not set -CONFIG_FEATURE_VOLUMEID_ISO9660=y -CONFIG_FEATURE_VOLUMEID_JFS=y -CONFIG_FEATURE_VOLUMEID_LINUXRAID=y -CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y -CONFIG_FEATURE_VOLUMEID_LUKS=y -CONFIG_FEATURE_VOLUMEID_NILFS=y -CONFIG_FEATURE_VOLUMEID_NTFS=y -CONFIG_FEATURE_VOLUMEID_OCFS2=y -CONFIG_FEATURE_VOLUMEID_REISERFS=y -# CONFIG_FEATURE_VOLUMEID_ROMFS is not set -CONFIG_FEATURE_VOLUMEID_SQUASHFS=y -# CONFIG_FEATURE_VOLUMEID_SYSV is not set -CONFIG_FEATURE_VOLUMEID_UBIFS=y -CONFIG_FEATURE_VOLUMEID_UDF=y -CONFIG_FEATURE_VOLUMEID_XFS=y - -# -# Miscellaneous Utilities -# -CONFIG_ADJTIMEX=y -CONFIG_BBCONFIG=y -CONFIG_FEATURE_COMPRESS_BBCONFIG=y -CONFIG_BEEP=y -CONFIG_FEATURE_BEEP_FREQ=440 -CONFIG_FEATURE_BEEP_LENGTH_MS=30 -# CONFIG_CHAT is not set -# CONFIG_FEATURE_CHAT_NOFAIL is not set -# CONFIG_FEATURE_CHAT_TTY_HIFI is not set -# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set -# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set -# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set -# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set -# CONFIG_FEATURE_CHAT_CLR_ABORT is not set -# CONFIG_CHRT is not set -CONFIG_CONSPY=y -CONFIG_CROND=y -CONFIG_FEATURE_CROND_D=y -CONFIG_FEATURE_CROND_CALL_SENDMAIL=y -CONFIG_FEATURE_CROND_DIR="/var/spool/cron" -CONFIG_CRONTAB=y -CONFIG_DC=y -CONFIG_FEATURE_DC_LIBM=y -# CONFIG_DEVFSD is not set -# CONFIG_DEVFSD_MODLOAD is not set -# CONFIG_DEVFSD_FG_NP is not set -# CONFIG_DEVFSD_VERBOSE is not set -# CONFIG_FEATURE_DEVFS is not set -# CONFIG_DEVMEM is not set -CONFIG_EJECT=y -CONFIG_FEATURE_EJECT_SCSI=y -CONFIG_FBSPLASH=y -# CONFIG_FLASH_ERASEALL is not set -# CONFIG_FLASH_LOCK is not set -# CONFIG_FLASH_UNLOCK is not set -# CONFIG_FLASHCP is not set -CONFIG_HDPARM=y -# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set -# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set -# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set -# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set -# CONFIG_I2CGET is not set -# CONFIG_I2CSET is not set -# CONFIG_I2CDUMP is not set -# CONFIG_I2CDETECT is not set -CONFIG_INOTIFYD=y -CONFIG_IONICE=y -# CONFIG_LAST is not set -# CONFIG_FEATURE_LAST_FANCY is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -CONFIG_FEATURE_LESS_TRUNCATE=y -CONFIG_FEATURE_LESS_MARKS=y -CONFIG_FEATURE_LESS_REGEXP=y -CONFIG_FEATURE_LESS_WINCH=y -CONFIG_FEATURE_LESS_ASK_TERMINAL=y -CONFIG_FEATURE_LESS_DASHCMD=y -CONFIG_FEATURE_LESS_LINENUMS=y -# CONFIG_MAKEDEVS is not set -# CONFIG_FEATURE_MAKEDEVS_LEAF is not set -# CONFIG_FEATURE_MAKEDEVS_TABLE is not set -# CONFIG_MAN is not set -CONFIG_MICROCOM=y -CONFIG_MOUNTPOINT=y -# CONFIG_MT is not set -CONFIG_NANDWRITE=y -CONFIG_NANDDUMP=y -CONFIG_RAIDAUTORUN=y -CONFIG_READAHEAD=y -CONFIG_RFKILL=y -# CONFIG_RUNLEVEL is not set -# CONFIG_RX is not set -CONFIG_SETSERIAL=y -CONFIG_SETSID=y -CONFIG_STRINGS=y -# CONFIG_TASKSET is not set -# CONFIG_FEATURE_TASKSET_FANCY is not set -CONFIG_TIME=y -CONFIG_TIMEOUT=y -CONFIG_TTYSIZE=y -# CONFIG_UBIATTACH is not set -# CONFIG_UBIDETACH is not set -# CONFIG_UBIMKVOL is not set -# CONFIG_UBIRMVOL is not set -# CONFIG_UBIRSVOL is not set -# CONFIG_UBIUPDATEVOL is not set -# CONFIG_UBIRENAME is not set -CONFIG_VOLNAME=y -# CONFIG_WALL is not set -CONFIG_WATCHDOG=y - -# -# Networking Utilities -# -CONFIG_FEATURE_IPV6=y -CONFIG_FEATURE_UNIX_LOCAL=y -CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y -CONFIG_VERBOSE_RESOLUTION_ERRORS=y -CONFIG_ARP=y -CONFIG_ARPING=y -CONFIG_BRCTL=y -CONFIG_FEATURE_BRCTL_FANCY=y -CONFIG_FEATURE_BRCTL_SHOW=y -CONFIG_DNSD=y -CONFIG_ETHER_WAKE=y -CONFIG_FTPD=y -CONFIG_FEATURE_FTPD_WRITE=y -CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y -CONFIG_FEATURE_FTPD_AUTHENTICATION=y -CONFIG_FTPGET=y -CONFIG_FTPPUT=y -CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y -CONFIG_HOSTNAME=y -CONFIG_DNSDOMAINNAME=y -CONFIG_HTTPD=y -CONFIG_FEATURE_HTTPD_RANGES=y -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_FEATURE_HTTPD_ERROR_PAGES=y -CONFIG_FEATURE_HTTPD_PROXY=y -CONFIG_FEATURE_HTTPD_GZIP=y -CONFIG_IFCONFIG=y -CONFIG_FEATURE_IFCONFIG_STATUS=y -CONFIG_FEATURE_IFCONFIG_SLIP=y -CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y -CONFIG_FEATURE_IFCONFIG_HW=y -CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y -CONFIG_IFENSLAVE=y -# CONFIG_IFPLUGD is not set -CONFIG_IFUP=y -CONFIG_IFDOWN=y -CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" -CONFIG_FEATURE_IFUPDOWN_IP=y -CONFIG_FEATURE_IFUPDOWN_IPV4=y -CONFIG_FEATURE_IFUPDOWN_IPV6=y -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y -CONFIG_INETD=y -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set -# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set -# CONFIG_FEATURE_INETD_RPC is not set -CONFIG_IP=y -CONFIG_IPADDR=y -CONFIG_IPLINK=y -CONFIG_IPROUTE=y -CONFIG_IPTUNNEL=y -CONFIG_IPRULE=y -CONFIG_IPNEIGH=y -CONFIG_FEATURE_IP_ADDRESS=y -CONFIG_FEATURE_IP_LINK=y -CONFIG_FEATURE_IP_ROUTE=y -CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" -CONFIG_FEATURE_IP_TUNNEL=y -CONFIG_FEATURE_IP_RULE=y -CONFIG_FEATURE_IP_NEIGH=y -CONFIG_FEATURE_IP_RARE_PROTOCOLS=y -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set -CONFIG_FAKEIDENTD=y -CONFIG_NAMEIF=y -CONFIG_FEATURE_NAMEIF_EXTENDED=y -CONFIG_NBDCLIENT=y -CONFIG_NC=y -CONFIG_NC_SERVER=y -CONFIG_NC_EXTRA=y -CONFIG_NC_110_COMPAT=y -CONFIG_NETSTAT=y -CONFIG_FEATURE_NETSTAT_WIDE=y -CONFIG_FEATURE_NETSTAT_PRG=y -CONFIG_NSLOOKUP=y -CONFIG_NTPD=y -CONFIG_FEATURE_NTPD_SERVER=y -CONFIG_FEATURE_NTPD_CONF=y -CONFIG_PING=y -CONFIG_PING6=y -CONFIG_FEATURE_FANCY_PING=y -CONFIG_PSCAN=y -CONFIG_ROUTE=y -CONFIG_SLATTACH=y -# CONFIG_TCPSVD is not set -# CONFIG_UDPSVD is not set -CONFIG_TELNET=y -CONFIG_FEATURE_TELNET_TTYPE=y -CONFIG_FEATURE_TELNET_AUTOLOGIN=y -CONFIG_TELNETD=y -CONFIG_FEATURE_TELNETD_STANDALONE=y -CONFIG_FEATURE_TELNETD_INETD_WAIT=y -CONFIG_TFTP=y -CONFIG_TFTPD=y - -# -# Common options for tftp/tftpd -# -CONFIG_FEATURE_TFTP_GET=y -CONFIG_FEATURE_TFTP_PUT=y -CONFIG_FEATURE_TFTP_BLOCKSIZE=y -CONFIG_FEATURE_TFTP_PROGRESS_BAR=y -# CONFIG_TFTP_DEBUG is not set -CONFIG_TRACEROUTE=y -CONFIG_TRACEROUTE6=y -CONFIG_FEATURE_TRACEROUTE_VERBOSE=y -CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y -CONFIG_TUNCTL=y -CONFIG_FEATURE_TUNCTL_UG=y -CONFIG_VCONFIG=y -CONFIG_WGET=y -CONFIG_FEATURE_WGET_STATUSBAR=y -CONFIG_FEATURE_WGET_AUTHENTICATION=y -CONFIG_FEATURE_WGET_LONG_OPTIONS=y -CONFIG_FEATURE_WGET_TIMEOUT=y -CONFIG_FEATURE_WGET_OPENSSL=y -CONFIG_FEATURE_WGET_SSL_HELPER=y -CONFIG_WHOIS=y -# CONFIG_ZCIP is not set -CONFIG_UDHCPC6=y -CONFIG_UDHCPD=y -# CONFIG_DHCPRELAY is not set -CONFIG_DUMPLEASES=y -CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY=y -CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC=y -CONFIG_DHCPD_LEASES_FILE="/var/lib/udhcpd/udhcpd.leases" -CONFIG_UDHCPC=y -CONFIG_FEATURE_UDHCPC_ARPING=y -CONFIG_FEATURE_UDHCPC_SANITIZEOPT=y -# CONFIG_FEATURE_UDHCP_PORT is not set -CONFIG_UDHCP_DEBUG=0 -CONFIG_FEATURE_UDHCP_RFC3397=y -CONFIG_FEATURE_UDHCP_8021Q=y -CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" -CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 -CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" - -# -# Print Utilities -# -# CONFIG_LPD is not set -# CONFIG_LPR is not set -# CONFIG_LPQ is not set - -# -# Mail Utilities -# -CONFIG_MAKEMIME=y -# CONFIG_POPMAILDIR is not set -# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set -CONFIG_REFORMIME=y -CONFIG_FEATURE_REFORMIME_COMPAT=y -CONFIG_SENDMAIL=y -CONFIG_FEATURE_MIME_CHARSET="us-ascii" - -# -# Process Utilities -# -CONFIG_FREE=y -CONFIG_FUSER=y -CONFIG_IOSTAT=y -CONFIG_KILL=y -CONFIG_KILLALL=y -CONFIG_KILLALL5=y -CONFIG_LSOF=y -CONFIG_MPSTAT=y -CONFIG_NMETER=y -CONFIG_PGREP=y -CONFIG_PKILL=y -CONFIG_PIDOF=y -CONFIG_FEATURE_PIDOF_SINGLE=y -CONFIG_FEATURE_PIDOF_OMIT=y -CONFIG_PMAP=y -CONFIG_POWERTOP=y -CONFIG_PS=y -# CONFIG_FEATURE_PS_WIDE is not set -# CONFIG_FEATURE_PS_LONG is not set -CONFIG_FEATURE_PS_TIME=y -CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y -# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set -CONFIG_PSTREE=y -CONFIG_PWDX=y -CONFIG_RENICE=y -CONFIG_SMEMCAP=y -CONFIG_BB_SYSCTL=y -CONFIG_TOP=y -CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y -CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y -CONFIG_FEATURE_TOP_SMP_CPU=y -# CONFIG_FEATURE_TOP_DECIMALS is not set -CONFIG_FEATURE_TOP_SMP_PROCESS=y -CONFIG_FEATURE_TOPMEM=y -CONFIG_UPTIME=y -# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set -CONFIG_WATCH=y -# CONFIG_FEATURE_SHOW_THREADS is not set - -# -# Runit Utilities -# -# CONFIG_CHPST is not set -# CONFIG_SETUIDGID is not set -# CONFIG_ENVUIDGID is not set -# CONFIG_ENVDIR is not set -# CONFIG_SOFTLIMIT is not set -# CONFIG_RUNSV is not set -# CONFIG_RUNSVDIR is not set -# CONFIG_FEATURE_RUNSVDIR_LOG is not set -# CONFIG_SV is not set -CONFIG_SV_DEFAULT_SERVICE_DIR="" -# CONFIG_SVC is not set -# CONFIG_SVLOGD is not set -# CONFIG_CHCON is not set -# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set -# CONFIG_GETENFORCE is not set -# CONFIG_GETSEBOOL is not set -# CONFIG_LOAD_POLICY is not set -# CONFIG_MATCHPATHCON is not set -# CONFIG_RUNCON is not set -# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set -# CONFIG_SELINUXENABLED is not set -# CONFIG_SESTATUS is not set -# CONFIG_SETENFORCE is not set -# CONFIG_SETFILES is not set -# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set -# CONFIG_RESTORECON is not set -# CONFIG_SETSEBOOL is not set - -# -# Shells -# -CONFIG_SH_IS_ASH=y -# CONFIG_SH_IS_HUSH is not set -# CONFIG_SH_IS_NONE is not set -# CONFIG_BASH_IS_ASH is not set -# CONFIG_BASH_IS_HUSH is not set -CONFIG_BASH_IS_NONE=y -CONFIG_ASH=y -CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -CONFIG_ASH_INTERNAL_GLOB=y -CONFIG_ASH_RANDOM_SUPPORT=y -CONFIG_ASH_EXPAND_PRMT=y -CONFIG_ASH_BASH_COMPAT=y -CONFIG_ASH_IDLE_TIMEOUT=y -CONFIG_ASH_JOB_CONTROL=y -CONFIG_ASH_ALIAS=y -CONFIG_ASH_GETOPTS=y -CONFIG_ASH_BUILTIN_ECHO=y -CONFIG_ASH_BUILTIN_PRINTF=y -CONFIG_ASH_BUILTIN_TEST=y -CONFIG_ASH_HELP=y -CONFIG_ASH_CMDCMD=y -CONFIG_ASH_MAIL=y -# CONFIG_CTTYHACK is not set -# CONFIG_HUSH is not set -# CONFIG_HUSH_BASH_COMPAT is not set -# CONFIG_HUSH_BRACE_EXPANSION is not set -# CONFIG_HUSH_HELP is not set -# CONFIG_HUSH_INTERACTIVE is not set -# CONFIG_HUSH_SAVEHISTORY is not set -# CONFIG_HUSH_JOB is not set -# CONFIG_HUSH_TICK is not set -# CONFIG_HUSH_IF is not set -# CONFIG_HUSH_LOOPS is not set -# CONFIG_HUSH_CASE is not set -# CONFIG_HUSH_FUNCTIONS is not set -# CONFIG_HUSH_LOCAL is not set -# CONFIG_HUSH_RANDOM_SUPPORT is not set -# CONFIG_HUSH_EXPORT_N is not set -# CONFIG_HUSH_MODE_X is not set -# CONFIG_MSH is not set -CONFIG_FEATURE_SH_MATH=y -CONFIG_FEATURE_SH_MATH_64=y -CONFIG_FEATURE_SH_EXTRA_QUIET=y -# CONFIG_FEATURE_SH_STANDALONE is not set -# CONFIG_FEATURE_SH_NOFORK is not set -CONFIG_FEATURE_SH_HISTFILESIZE=y - -# -# System Logging Utilities -# -CONFIG_KLOGD=y - -# -# klogd should not be used together with syslog to kernel printk buffer -# -CONFIG_FEATURE_KLOGD_KLOGCTL=y -CONFIG_LOGGER=y -CONFIG_LOGREAD=y -CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y -CONFIG_SYSLOGD=y -CONFIG_FEATURE_ROTATE_LOGFILE=y -CONFIG_FEATURE_REMOTE_LOG=y -CONFIG_FEATURE_SYSLOGD_DUP=y -CONFIG_FEATURE_SYSLOGD_CFG=y -CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 -CONFIG_FEATURE_IPC_SYSLOG=y -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16 -CONFIG_FEATURE_KMSG_SYSLOG=y diff --git a/busybox/dad.if-up b/busybox/dad.if-up deleted file mode 100644 index e76bb60bf..000000000 --- a/busybox/dad.if-up +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# Block ifup until DAD completion -# Copyright (c) 2016 Kaarle Ritvanen - -while ip address show dev $IFACE | grep -q " tentative "; do - sleep 0.2 -done diff --git a/busybox/location-for-cpio.patch b/busybox/location-for-cpio.patch deleted file mode 100644 index e7069f2b9..000000000 --- a/busybox/location-for-cpio.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/archival/cpio.c b/archival/cpio.c -index 540218cb2..369bf19a7 100644 ---- a/archival/cpio.c -+++ b/archival/cpio.c -@@ -43,7 +43,7 @@ - //config: help - //config: Passthrough mode. Rarely used. - --//applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP)) -+//applet:IF_CPIO(APPLET(cpio, BB_DIR_USR_BIN, BB_SUID_DROP)) - //kbuild:lib-$(CONFIG_CPIO) += cpio.o - - //usage:#define cpio_trivial_usage diff --git a/busybox/nologin.c b/busybox/nologin.c deleted file mode 100644 index e0a4c56c7..000000000 --- a/busybox/nologin.c +++ /dev/null @@ -1,38 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * nologin implementation for busybox - * - * Licensed under GPLv2 or later, see file LICENSE in this source tree. - */ - -//config:config NOLOGIN -//config: bool "nologin" -//config: default n -//config: help -//config: nologin is a tool that is supposed to be the shell for user accounts -//config: that are not supposed to login. - -//applet:IF_NOLOGIN(APPLET(nologin, BB_DIR_SBIN, BB_SUID_DROP)) -//kbuild:lib-$(CONFIG_NOLOGIN) += nologin.o - -//usage:#define nologin_trivial_usage -//usage: "" -//usage:#define nologin_full_usage "\n\n" -//usage: "politely refuse a login\n" - -#include "libbb.h" -#include - -#define _NOLOGIN_TXT "/etc/nologin.txt" - -int nologin_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int nologin_main(int argc UNUSED_PARAM, char **argv) -{ - int fd; - fd = open(_NOLOGIN_TXT, O_RDONLY); - if (bb_copyfd_eof(fd, STDOUT_FILENO) == -1) - bb_error_msg_and_die("this account is not available"); - close(fd); - return 1; -} - diff --git a/postmarketos-mkinitfs/APKBUILD b/postmarketos-mkinitfs/APKBUILD index 16505ed6a..c4d6702c4 100644 --- a/postmarketos-mkinitfs/APKBUILD +++ b/postmarketos-mkinitfs/APKBUILD @@ -1,7 +1,7 @@ pkgname=postmarketos-mkinitfs pkgver=0.0.5 -pkgrel=1 -pkgdesc="Tool to generate initramfs images for postmarketos" +pkgrel=2 +pkgdesc="Tool to generate initramfs images for postmarketOS" url="https://github.com/postmarketOS" # multipath-tools: kpartx depends="busybox-extras lddtree cryptsetup kmod multipath-tools" @@ -27,9 +27,9 @@ package() { install -Dm644 "$srcdir/10-usb-unlock.sh" \ "$pkgdir/etc/postmarketos-mkinitfs/hooks/" } -sha512sums="ec45d62b2c064dc5cb209871a2665f84cc47092e87ce0b535967f79c1a65b956fbec41f91b4b6d1fbc8f974d8c7a50915bcb551a275be61dda69c45e43c1fa69 init.sh.in +sha512sums="2f45dee1ad9ef75166d614774e0ee2a6856950990c063bce7d0e98ed27599d2f8040c6118a9381aab4a69c79f96a30eb044b6b29ef2afb2a9374bac5f5a398da init.sh.in 3ebc5fa2220a8da920ebca67f14c38b0c296eafdbcf312997b442a020d1683bd622a42a946a61b4d80cbecf28853c915480e26ffe59eda57769855303b67bbdf init_functions.sh -b100af464cae8b4fb178201ff9cc99733a081ae5d6308bfdf10262c75031390206a59e1b6e5b55a494f9f7a9bdd95a85955c05fdbcf0929e6a05f30443987b54 mkinitfs.sh +dd1eb11263c2bcfdb3be49c8e3c0afad83a8b343df2daa617b912b8d90267519afa429010e5f727a94301faa605b9727531919c08198f6f580b84ce86763a5f5 mkinitfs.sh 330cd7dd31d7685f732a4c3dc2720aba33e467a5b76ccf2304bcf5663cffcbc469443152b64c684e1025121f0e429aabe5c24b73278feb0cc2296c19a4552103 10-usb-unlock.sh b8562b2e944971a7b9849b9d463aaee417595f2c56f16cfb252535acf0b48c026372b0b49a53bdd5d9dc29312f05d3f3d3ee444d64401f0c2e13bc2132efb63e splash1.ppm.gz bf11d8b3a50db984cfbb2cafe6687de327242c1f6f56c6fdd02ca579b05213f9c886aa1c0527530fdec21b16e65e68962e40a600c4ce155819df2f610b435087 splash2.ppm.gz" diff --git a/postmarketos-mkinitfs/init.sh.in b/postmarketos-mkinitfs/init.sh.in index 5075bdb38..609a11a42 100644 --- a/postmarketos-mkinitfs/init.sh.in +++ b/postmarketos-mkinitfs/init.sh.in @@ -3,6 +3,7 @@ export PATH=/usr/bin:/bin:/usr/sbin:/sbin /bin/busybox --install -s +/bin/busybox-extras --install -s # kernel modules modprobe -a @MODULES@ diff --git a/postmarketos-mkinitfs/mkinitfs.sh b/postmarketos-mkinitfs/mkinitfs.sh index a61551a82..38642fb0d 100644 --- a/postmarketos-mkinitfs/mkinitfs.sh +++ b/postmarketos-mkinitfs/mkinitfs.sh @@ -100,7 +100,7 @@ get_modules() # Get the paths to all binaries and their dependencies get_binaries() { - BINARIES="/bin/busybox /sbin/cryptsetup /usr/sbin/telnetd /sbin/kpartx" + BINARIES="/bin/busybox /bin/busybox-extras /sbin/cryptsetup /usr/sbin/telnetd /sbin/kpartx" lddtree -l $BINARIES | sort -u } From 576fb1fde6408e43b3cc9b51b0565006ef5e1263 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Wed, 7 Jun 2017 23:35:34 +0200 Subject: [PATCH 2/6] Package 0xffff (Maemo flasher) as there's interest in porting pmOS to the N900 --- 0xffff/APKBUILD | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 0xffff/APKBUILD diff --git a/0xffff/APKBUILD b/0xffff/APKBUILD new file mode 100644 index 000000000..18efc0157 --- /dev/null +++ b/0xffff/APKBUILD @@ -0,0 +1,25 @@ +pkgname=0xffff +pkgver=0.7 +pkgrel=1 +pkgdesc="Flasher for Maemo devices" +url="https://github.com/pali/0xFFFF" +arch="all" +license="GPL3" +depends="libusb-compat" +makedepends="linux-headers libusb-compat-dev libusb-dev" +subpackages="$pkgname-doc" +source="https://github.com/pali/0xFFFF/releases/download/${pkgver}/0xffff_${pkgver}.orig.tar.gz" +options="!check" + +builddir="$srcdir"/"$pkgname"-"$pkgver" +build() { + cd "$builddir" + make +} + +package() { + cd "$builddir" + make PREFIX=/usr DESTDIR="$pkgdir"/ install +} + +sha512sums="d9ff0d05c2806068169216474c7ba211d180769d6ec6d67559f5918a8294ca7e755da9760a6f56fcb77407c926f12d67fe313e1c181fedfe362a5dfa5e0ac045 0xffff_0.7.orig.tar.gz" From 95312904f6169d99c645cc8f8483ef0363a1e486 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Thu, 8 Jun 2017 20:37:08 +0200 Subject: [PATCH 3/6] Update heimdall to 1.4.2 --- heimdall/APKBUILD | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/heimdall/APKBUILD b/heimdall/APKBUILD index 2e09a6962..b2f69955c 100644 --- a/heimdall/APKBUILD +++ b/heimdall/APKBUILD @@ -1,37 +1,30 @@ pkgname=heimdall -pkgver=1.4.1 -pkgrel=4 +pkgver=1.4.2 +pkgrel=1 pkgdesc="Flasher for Samsung Galaxy S devices" url="https://github.com/Benjamin-Dobell/Heimdall" arch="all" license="MIT" depends="" -makedepends="libusb-dev" +makedepends="libusb-dev cmake" subpackages="" source="$pkgname-$pkgver.tar.gz::https://github.com/Benjamin-Dobell/Heimdall/archive/v${pkgver}.tar.gz heimdall_flash_kernel.sh heimdall_wait_for_device.sh" options="!check" -_builddir="$srcdir"/Heimdall-$pkgver +builddir="$srcdir"/Heimdall-$pkgver build() { - cd $_builddir - cd libpit/ - ./configure --prefix=/usr - make || return 1 - - cd ../heimdall/ - ./configure --prefix=/usr - make || return 1 + cd "$builddir" + cmake -DCMAKE_BUILD_TYPE=Release -DDISABLE_FRONTEND=ON . + make } package() { - cd "$_builddir/heimdall" - make PREFIX=/usr DESTDIR="$pkgdir/" install || return 1 - for i in heimdall_flash_kernel.sh heimdall_wait_for_device.sh; do - install -Dm755 "$srcdir"/"$i" "$pkgdir"/usr/bin/"$i" + for i in "$builddir"/bin/heimdall heimdall_flash_kernel.sh heimdall_wait_for_device.sh; do + install -Dm755 "$i" "$pkgdir"/usr/bin/"$(basename "$i")" done } -sha512sums="2f1f49b0ad7bd5f4359893359b26024fe0cce84afed3878e42d902eb4dee487a44e351247d57e4af143ad728abd6c664df688246fcf7b96b9f3841cd16594296 heimdall-1.4.1.tar.gz +sha512sums="c554662f9ccb763a8e9867a0c563618879d2533af985d44db3c237d3ee51add44c1681d13b1a83b72b30ba6e5b32d7c2f9c02b31114c67c5fbe01cbb010acfe7 heimdall-1.4.2.tar.gz a75677d4c5559bf8233a48d1b38bf91e4125717a85e1ea6d283d2d1e052c2a96228818a71f8b90adbda049b6d5b5065f7265ffc2e05cafd2ce9717bfc8ac8716 heimdall_flash_kernel.sh 45e742bb3a8c8d0bc6806a4e9f860b04f255cad72a8602c04759178284c66e0a90d3ea22249b5fa69de1dd1d6ecd6221adaa63d611aa20d2a54aa20868e86a9f heimdall_wait_for_device.sh" From 26ee9f1ff87c3e64bf27ca088aa6b9b857861bd1 Mon Sep 17 00:00:00 2001 From: Martijn Braam Date: Fri, 9 Jun 2017 12:28:57 +0200 Subject: [PATCH 4/6] Changed telnetd ip in boot process to 172.16.42.1/24, see issue #70 --- .../20-usb-shell.sh | 2 +- postmarketos-mkinitfs/10-usb-unlock.sh | 6 +++--- postmarketos-mkinitfs/splash1.ppm.gz | Bin 58937 -> 57353 bytes 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh b/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh index 7fc09df62..ff7172b21 100644 --- a/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh +++ b/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh @@ -1,5 +1,5 @@ #!/bin/sh -IP=192.168.2.15 +IP=172.16.42.1 TELNET_PORT=24 telnetd -b "${IP}:${TELNET_PORT}" -l /bin/sh diff --git a/postmarketos-mkinitfs/10-usb-unlock.sh b/postmarketos-mkinitfs/10-usb-unlock.sh index 28ef730b3..c67993f0f 100644 --- a/postmarketos-mkinitfs/10-usb-unlock.sh +++ b/postmarketos-mkinitfs/10-usb-unlock.sh @@ -1,5 +1,5 @@ #!/bin/sh -IP=192.168.2.15 +IP=172.16.42.1 TELNET_PORT=23 usb_setup_android() { @@ -23,8 +23,8 @@ dhcpcd_start() # create /etc/udhcpd.conf { - echo "start 192.168.2.20" - echo "end 192.168.2.90" + echo "start 172.16.42.2" + echo "end 172.16.42.254" echo "lease_file /var/udhcpd.leases" echo "interface $INTERFACE" echo "option subnet 255.255.255.0" diff --git a/postmarketos-mkinitfs/splash1.ppm.gz b/postmarketos-mkinitfs/splash1.ppm.gz index 5b7c2a1bbe9fc1f984ede3ca8fb0838284d3fcf5..abafc354e27a5b6f4d14bb9761bf655a0677d421 100644 GIT binary patch literal 57353 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 uz|R%J-m+!VHx_q*`J@=z!kN*L|`JEB~ From 2081ab1e658f732d87cc473e30816a6db541f5d5 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Fri, 9 Jun 2017 17:50:18 +0200 Subject: [PATCH 5/6] postmarketos-mkinitfs: Bump pkgrel, update hashes --- postmarketos-mkinitfs/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/postmarketos-mkinitfs/APKBUILD b/postmarketos-mkinitfs/APKBUILD index c4d6702c4..7f0d2e295 100644 --- a/postmarketos-mkinitfs/APKBUILD +++ b/postmarketos-mkinitfs/APKBUILD @@ -1,6 +1,6 @@ pkgname=postmarketos-mkinitfs pkgver=0.0.5 -pkgrel=2 +pkgrel=3 pkgdesc="Tool to generate initramfs images for postmarketOS" url="https://github.com/postmarketOS" # multipath-tools: kpartx @@ -30,6 +30,6 @@ package() { sha512sums="2f45dee1ad9ef75166d614774e0ee2a6856950990c063bce7d0e98ed27599d2f8040c6118a9381aab4a69c79f96a30eb044b6b29ef2afb2a9374bac5f5a398da init.sh.in 3ebc5fa2220a8da920ebca67f14c38b0c296eafdbcf312997b442a020d1683bd622a42a946a61b4d80cbecf28853c915480e26ffe59eda57769855303b67bbdf init_functions.sh dd1eb11263c2bcfdb3be49c8e3c0afad83a8b343df2daa617b912b8d90267519afa429010e5f727a94301faa605b9727531919c08198f6f580b84ce86763a5f5 mkinitfs.sh -330cd7dd31d7685f732a4c3dc2720aba33e467a5b76ccf2304bcf5663cffcbc469443152b64c684e1025121f0e429aabe5c24b73278feb0cc2296c19a4552103 10-usb-unlock.sh -b8562b2e944971a7b9849b9d463aaee417595f2c56f16cfb252535acf0b48c026372b0b49a53bdd5d9dc29312f05d3f3d3ee444d64401f0c2e13bc2132efb63e splash1.ppm.gz +82f0b9927bfef919c6561d67283a0e77c36ef8f8d11000a6153b52e39731ceaa65b9a34c682e737881dc676cc8bfc97dfbbfdeb2ca03594b8f9beef9e49a754d 10-usb-unlock.sh +35a8eabad947347afec7e3f5860d31ab9e3534972c0960ccf553c7e1cc9262316bfdddb8d61d3588db1ee2261077597617806080b9956798b3e5088d6f9b596b splash1.ppm.gz bf11d8b3a50db984cfbb2cafe6687de327242c1f6f56c6fdd02ca579b05213f9c886aa1c0527530fdec21b16e65e68962e40a600c4ce155819df2f610b435087 splash2.ppm.gz" From fc1f52d5d28e951c91b53b336193f906bdfb5296 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Fri, 9 Jun 2017 19:32:26 +0200 Subject: [PATCH 6/6] postmarketos-mkinitfs-hook-usb-shell: Fix checksum --- postmarketos-mkinitfs-hook-usb-shell/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postmarketos-mkinitfs-hook-usb-shell/APKBUILD b/postmarketos-mkinitfs-hook-usb-shell/APKBUILD index 69a4b60bb..c8ee54645 100644 --- a/postmarketos-mkinitfs-hook-usb-shell/APKBUILD +++ b/postmarketos-mkinitfs-hook-usb-shell/APKBUILD @@ -18,4 +18,4 @@ package() { install -Dm644 "$srcdir"/20-usb-shell.sh \ "$pkgdir"/etc/postmarketos-mkinitfs/hooks/ } -sha512sums="0e8631d66131368ace5650afcb29abc718e0dd2d62aac49655b5e9ecd24ca3ceb1e0d51c51f38440e6ef44c88e03921bfc70fff8712201fae1f96456068480e4 20-usb-shell.sh" +sha512sums="7154ded57cba1ff76fb8be9bd773ccdb4cd70c588ef763469d7e2fc9796fba13e5624480669b528138c1c5ebfc1a7927dcb80b850e72308b89736d9baee9c231 20-usb-shell.sh"