Compare commits
2 Commits
Author | SHA256 | Date | |
---|---|---|---|
|
e1e9a618b4 | ||
|
06fdc707a3 |
@@ -14,11 +14,12 @@ Signed-off-by: Martin Wilck <mwilck@suse.com>
|
||||
libmount/src/context_mount.c | 41 ++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 37 insertions(+), 4 deletions(-)
|
||||
|
||||
diff -ur util-linux-2.41.orig/libmount/src/context_mount.c util-linux-2.41/libmount/src/context_mount.c
|
||||
--- util-linux-2.41.orig/libmount/src/context_mount.c 2025-03-04 19:14:02.587173600 +0100
|
||||
+++ util-linux-2.41/libmount/src/context_mount.c 2025-04-08 14:03:59.173505340 +0200
|
||||
@@ -1469,6 +1469,32 @@
|
||||
}
|
||||
diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c
|
||||
index f914c9b..a48483f 100644
|
||||
--- a/libmount/src/context_mount.c
|
||||
+++ b/libmount/src/context_mount.c
|
||||
@@ -1423,6 +1423,32 @@ done:
|
||||
return rc;
|
||||
}
|
||||
|
||||
+/*
|
||||
@@ -50,7 +51,7 @@ diff -ur util-linux-2.41.orig/libmount/src/context_mount.c util-linux-2.41/libmo
|
||||
int mnt_context_get_mount_excode(
|
||||
struct libmnt_context *cxt,
|
||||
int rc,
|
||||
@@ -1772,10 +1798,17 @@
|
||||
@@ -1670,10 +1696,17 @@ int mnt_context_get_mount_excode(
|
||||
case ENODEV:
|
||||
if (!buf)
|
||||
break;
|
||||
@@ -72,3 +73,6 @@ diff -ur util-linux-2.41.orig/libmount/src/context_mount.c util-linux-2.41/libmo
|
||||
snprintf(buf, bufsz, _("unknown filesystem type"));
|
||||
break;
|
||||
|
||||
--
|
||||
2.19.2
|
||||
|
||||
|
16
util-linux-2.40.2.tar.sign
Normal file
16
util-linux-2.40.2.tar.sign
Normal file
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAmaGWfQACgkQ5LcdXuw5
|
||||
woQyjw/+Pv55mIJB4V6DM/ZWWEgTKosHRaJK8NyZ8EieuBBz3BDxa8KECru0l8zK
|
||||
3wNiS/H15xnDlVPysQx+tk9ieWc4vPNTJ0WCbb9w4DS1P9aEpG4GwgAoQ+a+MbJY
|
||||
yYdfBYXLFMAxxIM7Crvls14rC5c4MCdFRMaVVdiqQSG6OKTuLXOGV+QglrzeVO6f
|
||||
03SKVv4NS/ModEoZwkGNBB+c63lKVLATIEhBQHE+TL9oB/KtLyEDEEwXc/5Pclz7
|
||||
pGM7knNN6O553NN4G5z0ez1ovZtbGJgNO9arLt2mLau57+dCoodCJn3ohagCfZH5
|
||||
ZeZI8ajj6sxZ2kgfvFF84wYP/eFZf0/3XOZfbif4Hy7UcV/bxZdQION62gvpiy/c
|
||||
/cdHN8Sga2B/1yNQyTO5oZTwr1fGnlInuy5LkvT7ZpfTtLR+QS9OhVcPWBbfYJbD
|
||||
D8KKIfPkuuzsWkpKqCmTim/67s3ZY0zIXWTOntMcFelItrfkr0wClEivBji+f97U
|
||||
wARhXLdS84MqEKyM7VH8hYpl6fgqpJPgWnO+91roXQyrnUCJVzM730oIDiEm1PKI
|
||||
tXnQo5qF+nBpBTvIvfDa5e52mcou42yMGQxGrCmkvzfm9Vypyz7lnyLRrzULYAqA
|
||||
0BZwMNwry1vmhYDWLKGH2TKkE5C7d+nwU4dzOCQWPTJhdm2FKcc=
|
||||
=YzYC
|
||||
-----END PGP SIGNATURE-----
|
BIN
util-linux-2.40.2.tar.xz
(Stored with Git LFS)
Normal file
BIN
util-linux-2.40.2.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEsMZNFDAcxu+u32Dk5LcdXuw5woQFAmhaXXIACgkQ5LcdXuw5
|
||||
woTvGg/8DVhCA5WWXbRh+fxsTwb2vIWPgBpjV+wUqxiNeijPXDK7tDcNF9bHvXy7
|
||||
X7ajs4y+ULzw2hBpBmI/k/Oi/enDYNo+Q76du6POjJkasgO0bY9kGVVFhd61BFfk
|
||||
86yY0uOud3n/F/ht1rR3TdFaatA2QtK7AqGmh3xpQh7ELJ8v7uNT/uyU7ZtKJXT3
|
||||
uEa217G1OYxxJlmLmob0jWYYuyjtg0nB/Xw4MiXrTqQbD4K0304eDsYu10DaRPW6
|
||||
ZNEjnCYEaPPkZ1xH3L29ZZlrwZ47ApN52dsTRzoymQGhak5UsKvcL7pWAa3gIlk9
|
||||
m3cL6TnuFXemBF6FqdAu2+xs1gX6zzPW8+2iff+9PrvODXSZPNBamwsVY6Ae39g9
|
||||
8lRQH1RpyXdIB+wg3ItgaGxTYz6aEJU9nCsE2uHQF/IRSdEHsqG5rc00ax0h4Ihk
|
||||
M+3z94Wuo+8NceY7kIM/lkH5sCnVV4WcpGImA3kvaVDkjYhb8XK8Yb3KFR8RE/rH
|
||||
LOCRavkKXaKT4CaS+SLvOZoFTTLciw7oNqecopSsREPk0y4HKbPdfRrfcS38m4ex
|
||||
HXp9yI2Rl7vThtDuNi0Bcp6GmLo4cgWgHBYSNZcnGH88LJk2Ya7Yamg+tUeynGCI
|
||||
6RvQxxfDT8mMf5deEiiLgG9RxjSVlA53dIZf1tB1RUjjh61aLdQ=
|
||||
=mm3H
|
||||
-----END PGP SIGNATURE-----
|
BIN
util-linux-2.41.1.tar.xz
(Stored with Git LFS)
BIN
util-linux-2.41.1.tar.xz
(Stored with Git LFS)
Binary file not shown.
@@ -1,623 +0,0 @@
|
||||
From 1ddc84875c150ca7c142adba9bfcd4bf4323a3c4 Mon Sep 17 00:00:00 2001
|
||||
From: Stanislav Brabec <sbrabec@suse.cz>
|
||||
Date: Wed, 9 Jul 2025 14:35:28 +0200
|
||||
Subject: [PATCH 2/2] agetty: Implement netlink based IP processing
|
||||
References: https://github.com/util-linux/util-linux/pull/3649
|
||||
|
||||
The current \4 and \6 issue file escapes implementation is inferior. It
|
||||
uses get getifaddrs() to get a list of IP addresses. This function does not
|
||||
provide enough information to discriminate between stable IP addresses and
|
||||
ephemeral addresses. As a result, especially \6 often gives unreliable
|
||||
results.
|
||||
|
||||
The code is actually unable to get list of all interfaces, so a proper out
|
||||
of the box IP address reporting depends on external tools that generate
|
||||
issue file with the interfaces list.
|
||||
|
||||
The netlink messages are already used, but only as a change notifier. The
|
||||
contents is not used, even if it contains exact information about the
|
||||
change. As a result, change processing is triggered even for unrelated
|
||||
network changes like IPv6 router advertisement.
|
||||
|
||||
The new implementation uses the new netaddrq library. It reports more
|
||||
reliable results especially for IPv6.
|
||||
|
||||
Additionally, two new escapes are implemented:
|
||||
|
||||
\a Report all interfaces and assigned addresses that are considered as
|
||||
reliable.
|
||||
|
||||
\A Report all interfaces and all assigned addresses.
|
||||
|
||||
TODO:
|
||||
|
||||
To prevent overflooding of the console, the list is currently limited to 12
|
||||
interfaces. It would be nice to make it configurable.
|
||||
|
||||
Two pass processing of issue files. First pass just collects IP protocols
|
||||
and list of interfaces (in future interface patterns). Now it always
|
||||
processes both IPv4 and IPv6 on all interfaces. Not so bad, as \a is smart
|
||||
enough to display just the useful part.
|
||||
|
||||
Maybe implement more options and formatting support for \a and \A.
|
||||
|
||||
Maybe implement interface filter globs or regexps for \a and \A. Still not
|
||||
so bad, as \a automatically skips interfaces without reliable addresses
|
||||
(e. g. lo or TUN).
|
||||
|
||||
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
|
||||
---
|
||||
term-utils/agetty.8.adoc | 6 +
|
||||
term-utils/agetty.c | 414 ++++++++++++++++++++++-----------------
|
||||
2 files changed, 244 insertions(+), 176 deletions(-)
|
||||
|
||||
diff --git a/term-utils/agetty.8.adoc b/term-utils/agetty.8.adoc
|
||||
index a33f12a3f..6670498f5 100644
|
||||
--- a/term-utils/agetty.8.adoc
|
||||
+++ b/term-utils/agetty.8.adoc
|
||||
@@ -253,6 +253,12 @@ Insert the IPv4 address of the specified network interface (for example: \4\{eth
|
||||
6 or 6{_interface_}::
|
||||
The same as \4 but for IPv6.
|
||||
|
||||
+a::
|
||||
+Insert list of "good" IP addresses for all interfaces. It prints best candidates for remote login IP addresses: global and site addresses; if not available, temporary address with the longest lifetime, if not available, link address. Note that link addresses are printed with local interface name, but they has to be done with the interface name on the machine where they will be used.
|
||||
+
|
||||
+A::
|
||||
+Insert list of all IP addresses for all interfaces.
|
||||
+
|
||||
b::
|
||||
Insert the baudrate of the current line.
|
||||
|
||||
diff --git a/term-utils/agetty.c b/term-utils/agetty.c
|
||||
index f65e511ca..1f5d937e4 100644
|
||||
--- a/term-utils/agetty.c
|
||||
+++ b/term-utils/agetty.c
|
||||
@@ -32,10 +32,7 @@
|
||||
#include <langinfo.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
-#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
-#include <ifaddrs.h>
|
||||
-#include <net/if.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "strutils.h"
|
||||
@@ -50,6 +47,9 @@
|
||||
#include "env.h"
|
||||
#include "path.h"
|
||||
#include "fileutils.h"
|
||||
+#ifdef AGETTY_RELOAD
|
||||
+#include "netaddrq.h"
|
||||
+#endif
|
||||
|
||||
#include "logindefs.h"
|
||||
|
||||
@@ -144,7 +144,6 @@
|
||||
# define AGETTY_RELOAD_FILENAME "/run/agetty.reload" /* trigger file */
|
||||
# define AGETTY_RELOAD_FDNONE -2 /* uninitialized fd */
|
||||
static int inotify_fd = AGETTY_RELOAD_FDNONE;
|
||||
-static int netlink_fd = AGETTY_RELOAD_FDNONE;
|
||||
static uint32_t netlink_groups;
|
||||
#endif
|
||||
|
||||
@@ -154,6 +153,7 @@ struct issue {
|
||||
size_t mem_sz;
|
||||
|
||||
#ifdef AGETTY_RELOAD
|
||||
+ struct ul_nl_data nl;
|
||||
char *mem_old;
|
||||
#endif
|
||||
unsigned int do_tcsetattr : 1,
|
||||
@@ -1603,81 +1603,7 @@ done:
|
||||
}
|
||||
|
||||
#ifdef AGETTY_RELOAD
|
||||
-static void open_netlink(void)
|
||||
-{
|
||||
- struct sockaddr_nl addr = { 0, };
|
||||
- int sock;
|
||||
-
|
||||
- if (netlink_fd != AGETTY_RELOAD_FDNONE)
|
||||
- return;
|
||||
-
|
||||
- sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
||||
- if (sock >= 0) {
|
||||
- addr.nl_family = AF_NETLINK;
|
||||
- addr.nl_pid = getpid();
|
||||
- addr.nl_groups = netlink_groups;
|
||||
- if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
- close(sock);
|
||||
- else
|
||||
- netlink_fd = sock;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static int process_netlink_msg(int *triggered)
|
||||
-{
|
||||
- char buf[4096];
|
||||
- struct sockaddr_nl snl;
|
||||
- struct nlmsghdr *h;
|
||||
- int rc;
|
||||
-
|
||||
- struct iovec iov = {
|
||||
- .iov_base = buf,
|
||||
- .iov_len = sizeof(buf)
|
||||
- };
|
||||
- struct msghdr msg = {
|
||||
- .msg_name = &snl,
|
||||
- .msg_namelen = sizeof(snl),
|
||||
- .msg_iov = &iov,
|
||||
- .msg_iovlen = 1,
|
||||
- .msg_control = NULL,
|
||||
- .msg_controllen = 0,
|
||||
- .msg_flags = 0
|
||||
- };
|
||||
-
|
||||
- rc = recvmsg(netlink_fd, &msg, MSG_DONTWAIT);
|
||||
- if (rc < 0) {
|
||||
- if (errno == EWOULDBLOCK || errno == EAGAIN)
|
||||
- return 0;
|
||||
-
|
||||
- /* Failure, just stop listening for changes */
|
||||
- close(netlink_fd);
|
||||
- netlink_fd = AGETTY_RELOAD_FDNONE;
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- for (h = (struct nlmsghdr *)buf; NLMSG_OK(h, (unsigned int)rc); h = NLMSG_NEXT(h, rc)) {
|
||||
- if (h->nlmsg_type == NLMSG_DONE ||
|
||||
- h->nlmsg_type == NLMSG_ERROR) {
|
||||
- close(netlink_fd);
|
||||
- netlink_fd = AGETTY_RELOAD_FDNONE;
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- *triggered = 1;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- return 1;
|
||||
-}
|
||||
-
|
||||
-static int process_netlink(void)
|
||||
-{
|
||||
- int triggered = 0;
|
||||
- while (process_netlink_msg(&triggered));
|
||||
- return triggered;
|
||||
-}
|
||||
-
|
||||
-static int wait_for_term_input(int fd)
|
||||
+static int wait_for_term_input(struct issue *ie, int fd)
|
||||
{
|
||||
char buffer[sizeof(struct inotify_event) + NAME_MAX + 1];
|
||||
fd_set rfds;
|
||||
@@ -1711,9 +1637,9 @@ static int wait_for_term_input(int fd)
|
||||
FD_SET(inotify_fd, &rfds);
|
||||
nfds = max(nfds, inotify_fd);
|
||||
}
|
||||
- if (netlink_fd >= 0) {
|
||||
- FD_SET(netlink_fd, &rfds);
|
||||
- nfds = max(nfds, netlink_fd);
|
||||
+ if (ie->nl.fd >= 0) {
|
||||
+ FD_SET(ie->nl.fd, &rfds);
|
||||
+ nfds = max(nfds, ie->nl.fd);
|
||||
}
|
||||
|
||||
/* If waiting fails, just fall through, presumably reading input will fail */
|
||||
@@ -1725,9 +1651,10 @@ static int wait_for_term_input(int fd)
|
||||
|
||||
}
|
||||
|
||||
- if (netlink_fd >= 0 && FD_ISSET(netlink_fd, &rfds)) {
|
||||
- if (!process_netlink())
|
||||
- continue;
|
||||
+ if (ie->nl.fd >= 0 && FD_ISSET(ie->nl.fd, &rfds)) {
|
||||
+ /* We are ignoring errors here to prevent unability of
|
||||
+ * further processing. */
|
||||
+ ul_nl_process(&(ie->nl), UL_NL_ASYNC, UL_NL_ONESHOT);
|
||||
|
||||
/* Just drain the inotify buffer */
|
||||
} else if (inotify_fd >= 0 && FD_ISSET(inotify_fd, &rfds)) {
|
||||
@@ -1937,11 +1864,44 @@ static void eval_issue_file(struct issue *ie,
|
||||
struct options *op,
|
||||
struct termios *tp)
|
||||
{
|
||||
-#ifdef AGETTY_RELOAD
|
||||
- netlink_groups = 0;
|
||||
-#endif
|
||||
if (!(op->flags & F_ISSUE))
|
||||
goto done;
|
||||
+
|
||||
+#ifdef AGETTY_RELOAD
|
||||
+/* TODO:
|
||||
+ * Two pass processing for eval_issue_file()
|
||||
+ * Implement pass 1: Just evaluate list of netlink_groups (IP protocols) and
|
||||
+ * intefaces to monitor.
|
||||
+ * That is why again label is here: netlink_groups will be re-evaluated and
|
||||
+ * dump will be performed again.
|
||||
+ */
|
||||
+ /* netlink_groups = 0; */
|
||||
+ netlink_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
|
||||
+
|
||||
+ /* Already initialized? */
|
||||
+ if (ie->nl.fd)
|
||||
+ goto skip;
|
||||
+ /* Prepare netlink. */
|
||||
+ ul_nl_init(&(ie->nl));
|
||||
+ if ((ul_netaddrq_init(&(ie->nl), NULL, NULL, (void *)ie)))
|
||||
+ goto skip;
|
||||
+
|
||||
+ /* Open netlink and create address list. */
|
||||
+ if (ul_nl_open(&(ie->nl),
|
||||
+ RTMGRP_LINK | netlink_groups))
|
||||
+ goto skip;
|
||||
+ if (ul_nl_request_dump(&(ie->nl), RTM_GETADDR))
|
||||
+ goto error;
|
||||
+ if (ul_nl_process(&(ie->nl), UL_NL_SYNC, UL_NL_LOOP) != UL_NL_DONE)
|
||||
+ goto error;
|
||||
+ goto skip;
|
||||
+error:
|
||||
+ /* In case of any error, the addrq list is just empty, and we can use
|
||||
+ * the code without any error checking. */
|
||||
+ ul_nl_close(&(ie->nl));
|
||||
+ ie->nl.fd = 0;
|
||||
+skip:
|
||||
+#endif
|
||||
/*
|
||||
* The custom issue file or directory list specified by:
|
||||
* agetty --issue-file <path[:path]...>
|
||||
@@ -1986,11 +1946,6 @@ static void eval_issue_file(struct issue *ie,
|
||||
issuedir_read(ie, _PATH_SYSCONFSTATICDIR "/" _PATH_ISSUE_DIRNAME, op, tp);
|
||||
|
||||
done:
|
||||
-
|
||||
-#ifdef AGETTY_RELOAD
|
||||
- if (netlink_groups != 0)
|
||||
- open_netlink();
|
||||
-#endif
|
||||
if (ie->output) {
|
||||
fclose(ie->output);
|
||||
ie->output = NULL;
|
||||
@@ -2032,13 +1987,19 @@ again:
|
||||
puts(_("[press ENTER to login]"));
|
||||
#ifdef AGETTY_RELOAD
|
||||
/* reload issue */
|
||||
- if (!wait_for_term_input(STDIN_FILENO)) {
|
||||
+ if (!wait_for_term_input(ie, STDIN_FILENO)) {
|
||||
eval_issue_file(ie, op, tp);
|
||||
if (issue_is_changed(ie)) {
|
||||
if ((op->flags & F_VCONSOLE)
|
||||
&& (op->flags & F_NOCLEAR) == 0)
|
||||
termio_clear(STDOUT_FILENO);
|
||||
- goto again;
|
||||
+ {
|
||||
+ /* TODO: Close to set netlink_groups again using pass 1 */
|
||||
+ /* if (ie->nl.fd) ul_nl_close(&(ie->nl));
|
||||
+ * ie->nl.fd = NULL; */
|
||||
+
|
||||
+ goto again;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -2168,7 +2129,7 @@ static char *get_logname(struct issue *ie, struct options *op, struct termios *t
|
||||
|
||||
no_reload:
|
||||
#ifdef AGETTY_RELOAD
|
||||
- if (!wait_for_term_input(STDIN_FILENO)) {
|
||||
+ if (!wait_for_term_input(ie, STDIN_FILENO)) {
|
||||
/* refresh prompt -- discard input data, clear terminal
|
||||
* and call do_prompt() again
|
||||
*/
|
||||
@@ -2177,6 +2138,8 @@ static char *get_logname(struct issue *ie, struct options *op, struct termios *t
|
||||
eval_issue_file(ie, op, tp);
|
||||
if (!issue_is_changed(ie))
|
||||
goto no_reload;
|
||||
+ /* if (ie->nl.fd) ul_nl_close(&(ie->nl));
|
||||
+ * ie->nl.fd = NULL; */
|
||||
tcflush(STDIN_FILENO, TCIFLUSH);
|
||||
if ((op->flags & F_VCONSOLE)
|
||||
&& (op->flags & F_NOCLEAR) == 0)
|
||||
@@ -2576,92 +2539,170 @@ static void log_warn(const char *fmt, ...)
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
-static void print_addr(struct issue *ie, sa_family_t family, void *addr)
|
||||
+static void print_iface_best(struct issue *ie,
|
||||
+ const char *ifname,
|
||||
+ uint8_t ifa_family)
|
||||
{
|
||||
- char buff[INET6_ADDRSTRLEN + 1];
|
||||
+ struct ul_netaddrq_ip *best[__ULNETLINK_RATING_MAX];
|
||||
+ struct ul_netaddrq_iface *ifaceq;
|
||||
+ struct list_head *l;
|
||||
+ enum ul_netaddrq_ip_rating threshold;
|
||||
|
||||
- inet_ntop(family, addr, buff, sizeof(buff));
|
||||
- fprintf(ie->output, "%s", buff);
|
||||
-}
|
||||
+ if (!ie->nl.data_addr)
|
||||
+ return; /* error: init failed */
|
||||
|
||||
-/*
|
||||
- * Prints IP for the specified interface (@iface), if the interface is not
|
||||
- * specified then prints the "best" one (UP, RUNNING, non-LOOPBACK). If not
|
||||
- * found the "best" interface then prints at least host IP.
|
||||
- */
|
||||
-static void output_iface_ip(struct issue *ie,
|
||||
- struct ifaddrs *addrs,
|
||||
- const char *iface,
|
||||
- sa_family_t family)
|
||||
-{
|
||||
- struct ifaddrs *p;
|
||||
- struct addrinfo hints, *info = NULL;
|
||||
- char *host = NULL;
|
||||
- void *addr = NULL;
|
||||
+ if ((ifaceq = ul_netaddrq_iface_by_name(&(ie->nl), ifname)))
|
||||
+ {
|
||||
+ memset(best, 0, sizeof(best));
|
||||
+ if (ifa_family == AF_INET)
|
||||
+ l = &(ifaceq->ip_quality_list_4);
|
||||
+ else
|
||||
+ /* if (ifa_family == AF_INET6) */
|
||||
+ l = &(ifaceq->ip_quality_list_6);
|
||||
|
||||
- if (!addrs)
|
||||
- return;
|
||||
+ threshold =
|
||||
+ ul_netaddrq_iface_bestaddr(l, &best);
|
||||
+ if (best[threshold])
|
||||
+ fputs(ul_nl_addr_ntop_address(best[threshold]->addr),
|
||||
+ ie->output);
|
||||
+ }
|
||||
+}
|
||||
|
||||
- for (p = addrs; p; p = p->ifa_next) {
|
||||
+static void print_addrq_bestofall(struct issue *ie,
|
||||
+ uint8_t ifa_family)
|
||||
+{
|
||||
+ struct ul_netaddrq_iface *best_ifaceq;
|
||||
+ enum ul_netaddrq_ip_rating threshold;
|
||||
+ const char *best_ipp;
|
||||
|
||||
- if (!p->ifa_name ||
|
||||
- !p->ifa_addr ||
|
||||
- p->ifa_addr->sa_family != family)
|
||||
- continue;
|
||||
+ if (!ie->nl.data_addr)
|
||||
+ return; /* error: init failed */
|
||||
|
||||
- if (iface) {
|
||||
- /* Filter out by interface name */
|
||||
- if (strcmp(p->ifa_name, iface) != 0)
|
||||
- continue;
|
||||
- } else {
|
||||
- /* Select the "best" interface */
|
||||
- if ((p->ifa_flags & IFF_LOOPBACK) ||
|
||||
- !(p->ifa_flags & IFF_UP) ||
|
||||
- !(p->ifa_flags & IFF_RUNNING))
|
||||
- continue;
|
||||
- }
|
||||
+ best_ipp = ul_netaddrq_get_best_ipp(&(ie->nl), ifa_family,
|
||||
+ &threshold, &best_ifaceq);
|
||||
+ if (best_ipp)
|
||||
+ fputs(best_ipp, ie->output);
|
||||
+}
|
||||
|
||||
- addr = NULL;
|
||||
- switch (p->ifa_addr->sa_family) {
|
||||
- case AF_INET:
|
||||
- addr = &((struct sockaddr_in *) p->ifa_addr)->sin_addr;
|
||||
- break;
|
||||
- case AF_INET6:
|
||||
- addr = &((struct sockaddr_in6 *) p->ifa_addr)->sin6_addr;
|
||||
- break;
|
||||
+static void dump_iface_good(struct issue *ie,
|
||||
+ struct ul_netaddrq_iface *ifaceq)
|
||||
+{
|
||||
+ struct ul_netaddrq_ip *best4[__ULNETLINK_RATING_MAX];
|
||||
+ struct ul_netaddrq_ip *best6[__ULNETLINK_RATING_MAX];
|
||||
+ struct list_head *li;
|
||||
+ enum ul_netaddrq_ip_rating threshold = __ULNETLINK_RATING_MAX - 1;
|
||||
+ enum ul_netaddrq_ip_rating fthreshold; /* per family threshold */
|
||||
+ bool first = true;
|
||||
+
|
||||
+ memset(best4, 0, sizeof(best4));
|
||||
+ threshold = ul_netaddrq_iface_bestaddr(&(ifaceq->ip_quality_list_4),
|
||||
+ &best4);
|
||||
+ memset(best6, 0, sizeof(best6));
|
||||
+ fthreshold = ul_netaddrq_iface_bestaddr(&(ifaceq->ip_quality_list_6),
|
||||
+ &best6);
|
||||
+ if (fthreshold < threshold)
|
||||
+ threshold = fthreshold;
|
||||
+
|
||||
+ list_for_each(li, &(ifaceq->ip_quality_list_4))
|
||||
+ {
|
||||
+ struct ul_netaddrq_ip *ipq;
|
||||
+
|
||||
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
|
||||
+ if (threshold <= ULNETLINK_RATING_SCOPE_LINK &&
|
||||
+ ( ipq->quality <= threshold ||
|
||||
+ /* Consider site addresses equally good as global */
|
||||
+ ipq->quality == ULNETLINK_RATING_SCOPE_SITE) &&
|
||||
+ best4[threshold])
|
||||
+ {
|
||||
+ if (first)
|
||||
+ {
|
||||
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
|
||||
+ first = false;
|
||||
+ }
|
||||
+ else
|
||||
+ fprintf(ie->output, " ");
|
||||
+ /* Write only the longest living temporary address */
|
||||
+ if (threshold == ULNETLINK_RATING_F_TEMPORARY)
|
||||
+ {
|
||||
+ fputs(ul_nl_addr_ntop_address(best4[ULNETLINK_RATING_F_TEMPORARY]->addr),
|
||||
+ ie->output);
|
||||
+ goto temp_cont4;
|
||||
+ }
|
||||
+ else
|
||||
+ fputs(ul_nl_addr_ntop_address(ipq->addr),
|
||||
+ ie->output);
|
||||
}
|
||||
+ temp_cont4:;
|
||||
+ }
|
||||
|
||||
- if (addr) {
|
||||
- print_addr(ie, family, addr);
|
||||
- return;
|
||||
+ list_for_each(li, &(ifaceq->ip_quality_list_6))
|
||||
+ {
|
||||
+ struct ul_netaddrq_ip *ipq;
|
||||
+
|
||||
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
|
||||
+ if (threshold <= ULNETLINK_RATING_SCOPE_LINK &&
|
||||
+ ( ipq->quality <= threshold ||
|
||||
+ /* Consider site addresses equally good as global */
|
||||
+ ipq->quality == ULNETLINK_RATING_SCOPE_SITE) &&
|
||||
+ best6[threshold])
|
||||
+ {
|
||||
+ if (first)
|
||||
+ {
|
||||
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
|
||||
+ first = false;
|
||||
+ }
|
||||
+ else
|
||||
+ fprintf(ie->output, " ");
|
||||
+ /* Write only the longest living temporary address */
|
||||
+ if (threshold == ULNETLINK_RATING_F_TEMPORARY)
|
||||
+ {
|
||||
+ fputs(ul_nl_addr_ntop_address(best6[ULNETLINK_RATING_F_TEMPORARY]->addr),
|
||||
+ ie->output);
|
||||
+ goto temp_cont6;
|
||||
+ }
|
||||
+ else
|
||||
+ fputs(ul_nl_addr_ntop_address(ipq->addr),
|
||||
+ ie->output);
|
||||
}
|
||||
+ temp_cont6:;
|
||||
}
|
||||
+ if (!first)
|
||||
+ fputs("\n", ie->output);
|
||||
+}
|
||||
|
||||
- if (iface)
|
||||
- return;
|
||||
+static void dump_iface_all(struct issue *ie,
|
||||
+ struct ul_netaddrq_iface *ifaceq)
|
||||
+{
|
||||
+ struct list_head *li;
|
||||
+ struct ul_netaddrq_ip *ipq;
|
||||
+ bool first = true;
|
||||
|
||||
- /* Hmm.. not found the best interface, print host IP at least */
|
||||
- memset(&hints, 0, sizeof(hints));
|
||||
- hints.ai_family = family;
|
||||
- if (family == AF_INET6)
|
||||
- hints.ai_flags = AI_V4MAPPED;
|
||||
-
|
||||
- host = xgethostname();
|
||||
- if (host && getaddrinfo(host, NULL, &hints, &info) == 0 && info) {
|
||||
- switch (info->ai_family) {
|
||||
- case AF_INET:
|
||||
- addr = &((struct sockaddr_in *) info->ai_addr)->sin_addr;
|
||||
- break;
|
||||
- case AF_INET6:
|
||||
- addr = &((struct sockaddr_in6 *) info->ai_addr)->sin6_addr;
|
||||
- break;
|
||||
+ list_for_each(li, &(ifaceq->ip_quality_list_4))
|
||||
+ {
|
||||
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
|
||||
+ if (first)
|
||||
+ {
|
||||
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
|
||||
+ first = false;
|
||||
}
|
||||
- if (addr)
|
||||
- print_addr(ie, family, addr);
|
||||
-
|
||||
- freeaddrinfo(info);
|
||||
+ else
|
||||
+ fprintf(ie->output, " ");
|
||||
+ fputs(ul_nl_addr_ntop_address(ipq->addr), ie->output);
|
||||
+ }
|
||||
+ list_for_each(li, &(ifaceq->ip_quality_list_6))
|
||||
+ {
|
||||
+ ipq = list_entry(li, struct ul_netaddrq_ip, entry);
|
||||
+ if (first)
|
||||
+ {
|
||||
+ fprintf(ie->output, "%s: ", ifaceq->ifname);
|
||||
+ first = false;
|
||||
+ }
|
||||
+ else
|
||||
+ fprintf(ie->output, " ");
|
||||
+ fputs(ul_nl_addr_ntop_address(ipq->addr), ie->output);
|
||||
}
|
||||
- free(host);
|
||||
+ if (!first)
|
||||
+ fputs("\n", ie->output);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2860,26 +2901,47 @@ static void output_special_char(struct issue *ie,
|
||||
case '4':
|
||||
case '6':
|
||||
{
|
||||
- sa_family_t family = c == '4' ? AF_INET : AF_INET6;
|
||||
- struct ifaddrs *addrs = NULL;
|
||||
- char iface[128];
|
||||
-
|
||||
- if (getifaddrs(&addrs))
|
||||
- break;
|
||||
+ char iface[IF_NAMESIZE];
|
||||
+ uint8_t ifa_family = c == '4' ? AF_INET : AF_INET6;
|
||||
|
||||
if (get_escape_argument(fp, iface, sizeof(iface)))
|
||||
- output_iface_ip(ie, addrs, iface, family);
|
||||
+ print_iface_best(ie, iface, ifa_family);
|
||||
else
|
||||
- output_iface_ip(ie, addrs, NULL, family);
|
||||
-
|
||||
- freeifaddrs(addrs);
|
||||
+ print_addrq_bestofall(ie, ifa_family);
|
||||
|
||||
+ /* TODO: Move to pass 1 */
|
||||
if (c == '4')
|
||||
netlink_groups |= RTMGRP_IPV4_IFADDR;
|
||||
else
|
||||
netlink_groups |= RTMGRP_IPV6_IFADDR;
|
||||
break;
|
||||
}
|
||||
+ case 'a':
|
||||
+ {
|
||||
+ struct list_head *li;
|
||||
+ struct ul_netaddrq_iface *ifaceq;
|
||||
+
|
||||
+ list_for_each_netaddrq_iface(li, &(ie->nl))
|
||||
+ {
|
||||
+ ifaceq = list_entry(li, struct ul_netaddrq_iface, entry);
|
||||
+
|
||||
+ dump_iface_good(ie, ifaceq);
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'A':
|
||||
+ {
|
||||
+ struct list_head *li;
|
||||
+ struct ul_netaddrq_iface *ifaceq;
|
||||
+
|
||||
+ list_for_each_netaddrq_iface(li, &(ie->nl))
|
||||
+ {
|
||||
+ ifaceq = list_entry(li, struct ul_netaddrq_iface, entry);
|
||||
+
|
||||
+ dump_iface_all(ie, ifaceq);
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
#endif
|
||||
default:
|
||||
putc(c, ie->output);
|
||||
--
|
||||
2.48.1
|
||||
|
44
util-linux-agetty-prevent-cursor-escape.patch
Normal file
44
util-linux-agetty-prevent-cursor-escape.patch
Normal file
@@ -0,0 +1,44 @@
|
||||
From 20b405c0fea29675e1fb54b894eb1c18459f9d50 Mon Sep 17 00:00:00 2001
|
||||
From: Stanislav Brabec <sbrabec@suse.cz>
|
||||
Date: Sun, 21 Jul 2024 15:01:42 +0200
|
||||
Subject: [PATCH] agetty: Prevent cursor escape
|
||||
|
||||
Starting with 5de97519, it is possible to escape the login dialog on the
|
||||
screen by arrow characters or using escape sequences.
|
||||
|
||||
Since full processing of escape sequences and ignore them would be
|
||||
complicated, use a work around: instead of sending ESC to output, send a
|
||||
printable character.
|
||||
|
||||
It could cause a rendering regression in a very obscure condition: compiled
|
||||
without IUTF8, encoding is ISO-11548-1 and BRAILLE PATTERN DOTS-1245 is
|
||||
part of login name. I believe that it is out of supported combinations.
|
||||
|
||||
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
|
||||
---
|
||||
term-utils/agetty.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/term-utils/agetty.c b/term-utils/agetty.c
|
||||
index b28b197ff..500e0992f 100644
|
||||
--- a/term-utils/agetty.c
|
||||
+++ b/term-utils/agetty.c
|
||||
@@ -2289,7 +2289,14 @@ static char *get_logname(struct issue *ie, struct options *op, struct termios *t
|
||||
if ((size_t)(bp - logname) >= sizeof(logname) - 1)
|
||||
log_err(_("%s: input overrun"), op->tty);
|
||||
if ((tp->c_lflag & ECHO) == 0)
|
||||
- write_all(1, &c, 1); /* echo the character */
|
||||
+ /* Visualize escape sequence instead of its execution */
|
||||
+ if (ascval == CTL('['))
|
||||
+ /* Ideally it should be "\xe2\x90\x9b"
|
||||
+ * if (op->flags & (F_UTF8)),
|
||||
+ * but only some fonts contain it */
|
||||
+ write_all(1, "^[", 2);
|
||||
+ else
|
||||
+ write_all(1, &c, 1); /* echo the character */
|
||||
*bp++ = ascval; /* and store it */
|
||||
break;
|
||||
}
|
||||
--
|
||||
2.45.2
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,7 @@ echo -n "Checking login.defs variables in util-linux... " >&2
|
||||
sed -n 's/^.*logindefs_setenv*("[A-Z0-9_]*", "\([A-Z0-9_]*\)".*$/\1/p'
|
||||
) | LC_ALL=C sort -u >util-linux-login_defs-vars.lst
|
||||
|
||||
if test $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//') != 713b442bf6d16353b7f74538ece165b424f90932 ; then
|
||||
if test $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//') != 8516ca34e059b2dee1d4421a3ab07e88331b1674 ; then
|
||||
|
||||
echo "does not match!" >&2
|
||||
echo "Checksum is: $(sha1sum util-linux-login_defs-vars.lst | sed 's/ .*$//')" >&2
|
||||
@@ -32,13 +32,10 @@ If it is false positive:
|
||||
- The same fix is needed in shadow package in shadow-login_defs-check.sh.
|
||||
|
||||
If it is true positive:
|
||||
|
||||
- Check-out shadow package and call shadow-login_defs-check.sh. If it
|
||||
fails, check the output.
|
||||
- Check-out shadow package and call shadow-login_defs-check.sh.
|
||||
- Compare its output shadow-login_defs-check-util-linux.lst with
|
||||
util-linux-login_defs-vars.lst in the util-linux build directory.
|
||||
- Update shadow shadow-login_defs-util-linux.patch, if needed.
|
||||
- Verify that the new variable is included in FOREIGNDEFS in lib/getdef.c.
|
||||
If not, add it to shadow-login_defs-util-linux.patch and send the chunk
|
||||
to the upstream.
|
||||
- If shadow-login_defs-util-linux.patch was updated, update
|
||||
login_defs-support-for-util-linux symbol version in both shadow and
|
||||
util-linux spec files accordingly.
|
||||
|
158
util-linux-lscpu-skip-aarch64-decode.patch
Normal file
158
util-linux-lscpu-skip-aarch64-decode.patch
Normal file
@@ -0,0 +1,158 @@
|
||||
From 50a3efab6d126b28fcdcc28f1a0cd5cd596ae357 Mon Sep 17 00:00:00 2001
|
||||
From: "Pratik R. Sampat" <pratikrajesh.sampat@amd.com>
|
||||
Date: Mon, 22 Jul 2024 16:00:46 +0000
|
||||
Subject: [PATCH] lscpu: Skip aarch64 decode path for rest of the architectures
|
||||
|
||||
lscpu behaves differently when run sudo vs non-sudo on AMD architectures.
|
||||
|
||||
On sudo runs, it adds a BIOS model name and BIOS CPU family which it
|
||||
does not add for the latter. However since this parsing from the DMI is
|
||||
primarily catered to aarch64, for AMD platform the BIOS model name is
|
||||
printed out as follows "AMD XXX Processor *Unknown* CPU @ X.XGHz" due
|
||||
to the part number is not populated on the platform.
|
||||
|
||||
The issue boils down to an unconditional call to arm_decode() which
|
||||
attempts to read the DMI path and populate the processor information
|
||||
such as processor version and part number which is set to Unknown on AMD
|
||||
CPUs.
|
||||
|
||||
81d6de9 (lscpu: remove the old code) changed the DMI path from
|
||||
/sys/firmware/dmi/entries/4-0/raw (non-existent) to
|
||||
/sys/firmware/dmi/tables/dmi (existent) which has brought this latent
|
||||
issue to light as DMI was starting to be parsed incorrectly.
|
||||
|
||||
Therefore, do not perform aarch64 parsing for other architectures.
|
||||
|
||||
Before
|
||||
------
|
||||
$ lscpu
|
||||
Vendor ID: AuthenticAMD
|
||||
Model name: AMD EPYC XXXX X-Core Processor
|
||||
CPU family: 26
|
||||
|
||||
$ sudo lscpu
|
||||
Vendor ID: AuthenticAMD
|
||||
BIOS Vendor ID: Advanced Micro Devices, Inc.
|
||||
Model name: AMD EPYC XXXX X-Core Processor
|
||||
BIOS Model name: AMD EPYC XXXX X-Core Processor Unknown CPU @ X.XGHz
|
||||
BIOS CPU family: 107
|
||||
CPU family: 26
|
||||
|
||||
After
|
||||
-----
|
||||
$ lscpu
|
||||
Vendor ID: AuthenticAMD
|
||||
Model name: AMD EPYC XXXX X-Core Processor
|
||||
CPU family: 26
|
||||
|
||||
$ sudo lscpu
|
||||
Vendor ID: AuthenticAMD
|
||||
Model name: AMD EPYC XXXX X-Core Processor
|
||||
CPU family: 26
|
||||
|
||||
Fixes: 81d6de9 ("lscpu: remove the old code")
|
||||
Co-developed-by: Karel Zak <kzak@redhat.com>
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
Signed-off-by: Pratik R. Sampat <pratikrajesh.sampat@amd.com>
|
||||
---
|
||||
sys-utils/lscpu-arm.c | 37 ++++++++++++++++++++++++++++++++++++-
|
||||
sys-utils/lscpu.c | 3 ++-
|
||||
sys-utils/lscpu.h | 2 ++
|
||||
3 files changed, 40 insertions(+), 2 deletions(-)
|
||||
|
||||
Contains parts of:
|
||||
commit 5d1129e6879a05aa9ac5804ffc8ace22cda735c1
|
||||
Author: Karel Zak <kzak@redhat.com>
|
||||
Date: Mon Jul 29 10:21:28 2024 +0200
|
||||
|
||||
Index: util-linux-2.39.3/sys-utils/lscpu-arm.c
|
||||
===================================================================
|
||||
--- util-linux-2.39.3.orig/sys-utils/lscpu-arm.c
|
||||
+++ util-linux-2.39.3/sys-utils/lscpu-arm.c
|
||||
@@ -332,14 +332,49 @@ static int parse_id(const char *str)
|
||||
|
||||
#define parse_model_id(_cxt) (parse_id((_cxt)->model))
|
||||
|
||||
+static inline int get_implementer_id(struct lscpu_cputype *ct)
|
||||
+{
|
||||
+ if (ct->vendor_id)
|
||||
+ return ct->vendor_id;
|
||||
+ return parse_id(ct->vendor);
|
||||
+}
|
||||
+
|
||||
static inline int parse_implementer_id(struct lscpu_cputype *ct)
|
||||
{
|
||||
+ int id;
|
||||
+
|
||||
if (ct->vendor_id)
|
||||
return ct->vendor_id;
|
||||
- ct->vendor_id = parse_id(ct->vendor);
|
||||
+ id = get_implementer_id(ct);
|
||||
+ if (id <= 0)
|
||||
+ return id;
|
||||
+
|
||||
+ ct->vendor_id = id;
|
||||
return ct->vendor_id;
|
||||
}
|
||||
|
||||
+int is_arm(struct lscpu_cxt *cxt)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ if (is_live(cxt))
|
||||
+ return strcmp(cxt->arch->name, "aarch64") == 0;
|
||||
+
|
||||
+ /* dump; assume ARM if vendor ID is known */
|
||||
+ for (i = 0; i < cxt->ncputypes; i++) {
|
||||
+
|
||||
+ int j, id = get_implementer_id(cxt->cputypes[i]);
|
||||
+ if (id <= 0)
|
||||
+ continue;
|
||||
+ for (j = 0; hw_implementer[j].id != -1; j++) {
|
||||
+ if (hw_implementer[j].id == id)
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Use model and vendor IDs to decode to human readable names.
|
||||
*/
|
||||
Index: util-linux-2.39.3/sys-utils/lscpu.c
|
||||
===================================================================
|
||||
--- util-linux-2.39.3.orig/sys-utils/lscpu.c
|
||||
+++ util-linux-2.39.3/sys-utils/lscpu.c
|
||||
@@ -1371,7 +1371,8 @@ int main(int argc, char *argv[])
|
||||
lscpu_read_numas(cxt);
|
||||
lscpu_read_topology(cxt);
|
||||
|
||||
- lscpu_decode_arm(cxt);
|
||||
+ if (is_arm(cxt))
|
||||
+ lscpu_decode_arm(cxt);
|
||||
|
||||
cxt->virt = lscpu_read_virtualization(cxt);
|
||||
|
||||
Index: util-linux-2.39.3/sys-utils/lscpu.h
|
||||
===================================================================
|
||||
--- util-linux-2.39.3.orig/sys-utils/lscpu.h
|
||||
+++ util-linux-2.39.3/sys-utils/lscpu.h
|
||||
@@ -252,6 +252,8 @@ struct lscpu_cxt {
|
||||
int is_cluster; /* For aarch64 if the machine doesn't have ACPI PPTT */
|
||||
};
|
||||
|
||||
+#define is_live(_cxt) (!(_cxt)->noalive)
|
||||
+
|
||||
#define is_cpu_online(_cxt, _cpu) \
|
||||
((_cxt) && (_cpu) && (_cxt)->online && \
|
||||
CPU_ISSET_S((_cpu)->logical_id, (_cxt)->setsize, (_cxt)->online))
|
||||
@@ -260,6 +262,8 @@ struct lscpu_cxt {
|
||||
((_cxt) && (_cpu) && (_cxt)->present && \
|
||||
CPU_ISSET_S((_cpu)->logical_id, (_cxt)->setsize, (_cxt)->present))
|
||||
|
||||
+int is_arm(struct lscpu_cxt *cxt);
|
||||
+
|
||||
struct lscpu_cputype *lscpu_new_cputype(void);
|
||||
void lscpu_ref_cputype(struct lscpu_cputype *ct);
|
||||
void lscpu_unref_cputype(struct lscpu_cputype *ct);
|
22
util-linux-umount-losetup-lazy-destruction-generated.patch
Normal file
22
util-linux-umount-losetup-lazy-destruction-generated.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
--- util-linux-2.39.3/sys-utils/umount.8 2023-12-04 20:34:55.708989211 +0100
|
||||
+++ util-linux-2.39.3.patched/sys-utils/umount.8 2024-08-01 19:46:58.227874568 +0200
|
||||
@@ -156,6 +156,8 @@
|
||||
The \fBumount\fP command will automatically detach loop device previously initialized by \fBmount\fP(8) command independently of \fI/etc/mtab\fP.
|
||||
.sp
|
||||
In this case the device is initialized with "autoclear" flag (see \fBlosetup\fP(8) output for more details), otherwise it\(cqs necessary to use the option \fB\-\-detach\-loop\fP or call \fBlosetup \-d\fP \fIdevice\fP. The autoclear feature is supported since Linux 2.6.25.
|
||||
+.sp
|
||||
+Note that since Linux v3.7 kernel uses "lazy device destruction". The system just marks the loop device by autoclear flag and destroys it later. If you need to wait for a complete removal of the loop device, call \fBudevadm settle\fP after \fBumount\fP.
|
||||
.SH "EXTERNAL HELPERS"
|
||||
.sp
|
||||
The syntax of external unmount helpers is:
|
||||
--- util-linux-2.39.3/sys-utils/losetup.8 2023-12-04 20:34:54.926993943 +0100
|
||||
+++ util-linux-2.39.3.patched/sys-utils/losetup.8 2024-08-01 19:37:02.084188151 +0200
|
||||
@@ -74,7 +74,7 @@
|
||||
.sp
|
||||
\fB\-d\fP, \fB\-\-detach\fP \fIloopdev\fP...
|
||||
.RS 4
|
||||
-Detach the file or device associated with the specified loop device(s). Note that since Linux v3.7 kernel uses "lazy device destruction". The detach operation does not return \fBEBUSY\fP error anymore if device is actively used by system, but it is marked by autoclear flag and destroyed later.
|
||||
+Detach the file or device associated with the specified loop device(s). Note that since Linux v3.7 kernel uses "lazy device destruction". The detach operation does not return \fBEBUSY\fP error anymore if device is actively used by system, but it is marked by autoclear flag and destroyed later. Even if the device is not used, the loop device can be destroyed later. If you need to wait for a complete removal of the loop device, call \fBudevadm settle\fP after \fBlosetup\fP.
|
||||
.RE
|
||||
.sp
|
||||
\fB\-D\fP, \fB\-\-detach\-all\fP
|
41
util-linux-umount-losetup-lazy-destruction.patch
Normal file
41
util-linux-umount-losetup-lazy-destruction.patch
Normal file
@@ -0,0 +1,41 @@
|
||||
From fc67f18be51f57ee9a59a0f8f7ad16f284a24a3e Mon Sep 17 00:00:00 2001
|
||||
From: Stanislav Brabec <sbrabec@suse.cz>
|
||||
Date: Wed, 19 Jun 2024 17:31:34 +0200
|
||||
Subject: [PATCH] umount, losetup: Document loop destroy behavior
|
||||
|
||||
The loop device detach runs asynchronously in the background. It can cause
|
||||
unexpected errors. Document the possible existence of the loop device after
|
||||
exit of losetup -d or umount and need of "udevadm settle".
|
||||
|
||||
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
|
||||
---
|
||||
sys-utils/losetup.8.adoc | 2 +-
|
||||
sys-utils/umount.8.adoc | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: util-linux-2.39.3/sys-utils/losetup.8.adoc
|
||||
===================================================================
|
||||
--- util-linux-2.39.3.orig/sys-utils/losetup.8.adoc
|
||||
+++ util-linux-2.39.3/sys-utils/losetup.8.adoc
|
||||
@@ -54,7 +54,7 @@ The _size_ and _offset_ arguments may be
|
||||
Show the status of all loop devices. Note that not all information is accessible for non-root users. See also *--list*. The old output format (as printed without *--list*) is deprecated.
|
||||
|
||||
*-d*, *--detach* _loopdev_...::
|
||||
-Detach the file or device associated with the specified loop device(s). Note that since Linux v3.7 kernel uses "lazy device destruction". The detach operation does not return *EBUSY* error anymore if device is actively used by system, but it is marked by autoclear flag and destroyed later.
|
||||
+Detach the file or device associated with the specified loop device(s). Note that since Linux v3.7 kernel uses "lazy device destruction". The detach operation does not return *EBUSY* error anymore if device is actively used by system, but it is marked by autoclear flag and destroyed later. Even if the device is not used, the loop device can be destroyed later. If you need to wait for a complete removal of the loop device, call *udevadm settle* after *losetup*.
|
||||
|
||||
*-D*, *--detach-all*::
|
||||
Detach all associated loop devices.
|
||||
Index: util-linux-2.39.3/sys-utils/umount.8.adoc
|
||||
===================================================================
|
||||
--- util-linux-2.39.3.orig/sys-utils/umount.8.adoc
|
||||
+++ util-linux-2.39.3/sys-utils/umount.8.adoc
|
||||
@@ -127,6 +127,8 @@ The *umount* command will automatically
|
||||
|
||||
In this case the device is initialized with "autoclear" flag (see *losetup*(8) output for more details), otherwise it's necessary to use the option *--detach-loop* or call *losetup -d* _device_. The autoclear feature is supported since Linux 2.6.25.
|
||||
|
||||
+Note that since Linux v3.7 kernel uses "lazy device destruction". The system just marks the loop device by autoclear flag and destroys it later. If you need to wait for a complete removal of the loop device, call *udevadm settle* after *umount*.
|
||||
+
|
||||
== EXTERNAL HELPERS
|
||||
|
||||
The syntax of external unmount helpers is:
|
@@ -1,244 +1,3 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 10 02:39:17 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- agetty: Implement netlink based IP address detection and issue
|
||||
reload. It makes possible to identify IP addresses usability and
|
||||
prefer stable global addresses over ephemeral or link-local
|
||||
addresses. New issue keywords \a and \A were added. (boo#1139983,
|
||||
jsc#PED-8734, util-linux-lib-netlink.patch,
|
||||
util-linux-agetty-netlink.patch)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 24 22:41:18 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Update to version 2.41.1:
|
||||
* cfdisk: fix memory leak and possible NULL dereference
|
||||
* fdisk: fix possible memory leak
|
||||
* findmnt: fix -k option parsing regression (boo#1242705,
|
||||
drop util-linux-libblkid-econf-parse.patch)
|
||||
* hardlink: fix performance regression
|
||||
* include/cctype: fix string comparison
|
||||
* libblkid:
|
||||
* Fix crash while parsing config with libeconf
|
||||
* befs fix underflow
|
||||
* avoid strcasecmp() for ASCII-only strings
|
||||
* libblkid/src/topology/dm: fix fscanf return value check to
|
||||
match expected number of parsed items
|
||||
* libmount:
|
||||
* (subdir) restrict for real mounts only
|
||||
* (subdir) remove unused code
|
||||
* avoid calling memset() unnecessarily
|
||||
* fix --no-canonicalize regression (boo#1244251,
|
||||
drop libmount-fix-no-canonicalize-regression.patch)
|
||||
* lsblk:
|
||||
* use ID_PART_ENTRY_SCHEME as fallback for PTTYPE
|
||||
* avoid strcasecmp() for ASCII-only strings
|
||||
* lscpu:
|
||||
* fix possible buffer overflow in cpuinfo parser
|
||||
* Fix loongarch op-mode output with recent kernel
|
||||
* lsfd:
|
||||
* scan the protocol field of /proc/net/packet as a hex number
|
||||
* fix the description for PACKET.PROTOCOL column
|
||||
* lsns:
|
||||
* enhance compilation without USE_NS_GET_API
|
||||
* fix undefined reference to add_namespace_for_nsfd #3483
|
||||
* more:
|
||||
* fix broken ':!command' command key
|
||||
* fix implicit previous shell_line execution #3508
|
||||
* tests: (test_mkfds::mapped-packet-socket) add a new parameter,
|
||||
protocol
|
||||
* treewide:
|
||||
* add ul_ to parse_timestamp() function name
|
||||
(drop util-linux-rename-common-symbols-4.patch)
|
||||
* add ul_ to parse_switch() function name
|
||||
(drop util-linux-rename-common-symbols-3.patch)
|
||||
* add ul_ to parse_size() function name
|
||||
(drop util-linux-rename-common-symbols-2.patch)
|
||||
* add ul_ to parse_range() function name
|
||||
(drop util-linux-rename-common-symbols-1.patch)
|
||||
* fix optional arguments usage
|
||||
* avoid strcasecmp() for ASCII-only strings
|
||||
* Wipefs: improve --all descriptions for whole-disks
|
||||
* Misc: Do not call exit() on code ending in shared libraries
|
||||
* Other fixes. For complete list see
|
||||
https://kernel.org/pub/linux/utils/util-linux/v2.41/v2.41.1-ReleaseNotes
|
||||
- Fix problem with uname26 listed twice.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 10 11:16:10 UTC 2025 - Nicolas Belouin <nicolas@belouin.fr>
|
||||
|
||||
- Fix libmount --no-canonicalize regression (boo#1244251,
|
||||
gh#util-linux/util-linux#3479,
|
||||
libmount-fix-no-canonicalize-regression.patch).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu May 29 15:21:59 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Add ul_ prefix to functions with common names. Fixes btrfsprogs
|
||||
build failure (gh#util-linux/util-linux#3603,
|
||||
util-linux-rename-common-symbols-1.patch,
|
||||
util-linux-rename-common-symbols-2.patch,
|
||||
util-linux-rename-common-symbols-3.patch,
|
||||
util-linux-rename-common-symbols-4.patch).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 20 14:27:14 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Fix segfault of findmnt (boo#1242705,
|
||||
gh#util-linux/util-linux#3574,
|
||||
util-linux-libblkid-econf-parse.patch).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Apr 17 18:33:03 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Enable mountfd support again (jsc#PED-9752).
|
||||
BREAKING CHANGE
|
||||
Mountfd is nearly completely compatible with the old mount. There
|
||||
is a special case that cannot be handled by mountfd, and it needs
|
||||
to be handled by applications:
|
||||
Mountfd discriminates between physical mount layer and virtual
|
||||
mount layer. Once the physical mount layer is read-only,
|
||||
read-write mount on the virtual layer is not possible.
|
||||
If the first mount is read only, then the physical filesystem is
|
||||
mounted read-only, and later mount of the same file system as
|
||||
read-write is not possible. To solve this problem, the first
|
||||
mount needs to be read-only only on the virtual layer, keeping
|
||||
the physical layer read-write.
|
||||
The user space fix is simple:
|
||||
Instead of
|
||||
mount -oro
|
||||
use
|
||||
mount -oro=vfs
|
||||
This will keep the physical layer read-write, but the virtual
|
||||
file system layer (and the user space access) will be read-only.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Apr 7 21:00:58 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Update to version 2.41:
|
||||
* agetty: Fixed an issue where issue files were not being printed
|
||||
from additional locations, such as /run or /usr/lib. This
|
||||
change now allows for the use of local information from /etc,
|
||||
in addition to generated files from /run and
|
||||
distribution-specific files from /usr/lib.
|
||||
* cfdisk and sfdisk: Added support for the --sector-size command
|
||||
line option.
|
||||
* sfdisk: Added a new option, --discard-free.
|
||||
* fdisk: Added a new command, 'T', to discard sectors.
|
||||
* chrt: The --sched-runtime now supports SCHED_{OTHER,BATCH}
|
||||
policies.
|
||||
* column: Can now handle ANSI SGR colors inside OSC 8 hyperlink
|
||||
escape codes and sequences.
|
||||
* enosys: Can now dump defined filters.
|
||||
* libmount:
|
||||
* Added experimental support for statmount() and listmount()
|
||||
syscalls.
|
||||
* This new functionality can be accessed using "findmnt
|
||||
--kernel=listmount".
|
||||
* Added a new mount option,
|
||||
X-mount.nocanonicalize[=source|target].
|
||||
* Added new mount extensions to the "ro" flag (ro[=vfs,fs]).
|
||||
* Added a new option, X-mount.noloop, to disable automatic loop
|
||||
device creation.
|
||||
* Now supports bind symlinks over symlinks.
|
||||
* Reads all kernel info/warning/error messages from new API
|
||||
syscalls (and mount(8) prints them).
|
||||
* libuuid: Now supports RFC9562 UUIDs.
|
||||
* findmnt, lsblk, and lsfd: Added a new --hyperlink command line
|
||||
option to print paths as terminal hyperlinks.
|
||||
* findmnt: Can now address filesystems using --id and --uniq-id
|
||||
(requires listmount() kernel support).
|
||||
* flock: Added support for the --fcntl command line option.
|
||||
* hardlink: Can now prioritize specified trees on the command
|
||||
line using --prioritize-trees.
|
||||
* Can exclude sub-trees using --exclude-subtree or keep them in
|
||||
the current mount using --mount.
|
||||
* Duplicates can now be printed using --list-duplicates.
|
||||
* hwclock: Added a new --param-index option to address position
|
||||
for RTC_PARAM_{GET,SET} ioctls.
|
||||
* kill: Can now decode signal masks (e.g. as used in /proc) to
|
||||
signal names.
|
||||
* libblkid: Made many changes to improve detection, including
|
||||
exfat, GPT, LUKS2, bitlocker, etc.
|
||||
* login: Added support for LOGIN_ENV_SAFELIST in /etc/login.def.
|
||||
* lsfd: Now supports pidfs and AF_VSOCK sockets.
|
||||
* lsipc, ipcmk, ipcrm: Now supports POSIX ipc.
|
||||
* lslogins: Now supports lastlog2.
|
||||
* lsns: Added support for the --filter option.
|
||||
* build by meson: Now supports translated man pages and has fixed
|
||||
many bugs.
|
||||
* mkswap: The option --file should now be usable on btrfs.
|
||||
* nsenter: Improved support for pidfd and can now join target
|
||||
process's socket net namespace.
|
||||
* scriptlive: Added a new option, --echo <never|always|auto>.
|
||||
* zramctl: Now supports COMP-RATIO and --algorithm-params.
|
||||
* Many other new features and fixes. For complete list see
|
||||
https://kernel.org/pub/linux/utils/util-linux/v2.41/v2.41-ReleaseNotes
|
||||
- Update util-linux-login_defs-check.sh:
|
||||
* Make instructions up to date.
|
||||
* Update checksum reflecting the shadow update.
|
||||
- Refresh libmount-print-a-blacklist-hint-for-unknown-filesyst.patch.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Feb 24 17:16:49 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
|
||||
|
||||
- Delete /usr/sbin/rc* symlinks
|
||||
- Drop bashisms from build recipe
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 28 23:05:38 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Create and own directories /etc/blkid.conf.d and
|
||||
/usr/etc/blkid.conf.d (boo#1235887#c3).
|
||||
- Add missingok for /etc/blkid.conf.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jan 20 18:12:46 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Move blkid.conf to /usr/etc (boo#1235887).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 14 22:29:47 UTC 2025 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
- Update to version 2.40.4:
|
||||
* agetty: Prevent cursor escape (bsc#1194818, drop
|
||||
util-linux-agetty-prevent-cursor-escape.patch)
|
||||
add "systemd" to --version output\
|
||||
* chcpu(8): Document CPU deconfiguring behavior
|
||||
* fdisk: SGI fixes
|
||||
* hardlink: fix memory corruption
|
||||
* hardlink.1 directory|file is mandatory
|
||||
* lib/env: fix env_list_setenv() for strings without '='
|
||||
* libblkid:
|
||||
(exfat) validate fields used by prober
|
||||
(gpt) use blkid_probe_verify_csum() for partition array
|
||||
checksum
|
||||
add FSLASTBLOCK for swaparea
|
||||
bitlocker fix version on big-endian systems
|
||||
* libfdisk: make sure libblkid uses the same sector size
|
||||
* libmount:
|
||||
extract common error handling function
|
||||
propagate first error of multiple filesystem types
|
||||
* logger: correctly format tv_usec
|
||||
* lscpu: Skip aarch64 decode path for rest of the architectures
|
||||
(bsc#1229476, drop util-linux-lscpu-skip-aarch64-decode.patch)
|
||||
* lsns: ignore ESRCH errors reported when accessing files under
|
||||
/proc
|
||||
* mkswap: set selinux label also when creating file
|
||||
* more: make sure we have data on stderr
|
||||
* nsenter: support empty environ
|
||||
* umount, losetup: Document loop destroy behavior
|
||||
(bsc#1159034, drop
|
||||
util-linux-umount-losetup-lazy-destruction.patch,
|
||||
util-linux-umount-losetup-lazy-destruction-generated.patch).
|
||||
* uuidd: fix /var/lib/libuuid mode uuidd-tmpfiles.conf
|
||||
fix /var/lib/libuuid mode uuidd-tmpfiles.conf
|
||||
* Many other fixes, improvements and code cleanup. For the
|
||||
complete list see
|
||||
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40/v2.40.3-ReleaseNotes
|
||||
https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40/v2.40.4-ReleaseNotes
|
||||
- Refresh util-linux.keyring. Key validity was extended.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Nov 17 21:06:01 UTC 2024 - Stanislav Brabec <sbrabec@suse.com>
|
||||
|
||||
|
@@ -1,10 +1,9 @@
|
||||
pub rsa4096 2011-10-10 [SC] [expires: 2033-05-14]
|
||||
B0C64D14301CC6EFAEDF60E4E4B71D5EEC39C284
|
||||
uid [ unknown] Karel Zak <kzak@redhat.com>
|
||||
sub rsa4096 2011-10-10 [E] [expires: 2033-05-14]
|
||||
FC0214B4E2D01655F5898228ED846C667BA16CAC
|
||||
pub 4096R/EC39C284 2011-10-10 [expires: 2016-10-08]
|
||||
uid Karel Zak <kzak@redhat.com>
|
||||
sub 4096R/7BA16CAC 2011-10-10 [expires: 2016-10-08]
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v2.0.20 (GNU/Linux)
|
||||
|
||||
mQINBE6StA4BEACp9++Y+DgbBloJEuVhsDjDIvAR1n/aHPDyPQQzg/DkKtR3BXHn
|
||||
dGfTL9/DR8y9YzLNwUf2lWsEAvwHZ2XfUTp5S5nVbgpAB0/Q2ebP0TnkNYaRkxq7
|
||||
@@ -17,42 +16,41 @@ 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
|
||||
Zh9rvA==
|
||||
=cevX
|
||||
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
|
||||
VeljfCzq
|
||||
=8wc5
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package util-linux
|
||||
#
|
||||
# Copyright (c) 2025 SUSE LLC
|
||||
# Copyright (c) 2024 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@@ -85,18 +85,18 @@ Group: Development/Languages/Python
|
||||
%endif
|
||||
# ulbuild == python
|
||||
|
||||
Version: 2.41.1
|
||||
Version: 2.40.2
|
||||
Release: 0
|
||||
License: GPL-2.0-or-later
|
||||
URL: https://www.kernel.org/pub/linux/utils/util-linux/
|
||||
Source: https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-%{version}.tar.xz
|
||||
Source: https://www.kernel.org/pub/linux/utils/util-linux/v2.40/util-linux-%{version}.tar.xz
|
||||
Source2: util-linux-login_defs-check.sh
|
||||
Source7: baselibs.conf
|
||||
Source8: login.pamd
|
||||
Source9: remote.pamd
|
||||
Source10: su.pamd
|
||||
Source11: su.default
|
||||
Source12: https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-%{version}.tar.sign
|
||||
Source12: https://www.kernel.org/pub/linux/utils/util-linux/v2.39/util-linux-%{version}.tar.sign
|
||||
Source13: %{_name}.keyring
|
||||
Source14: runuser.pamd
|
||||
Source15: runuser-l.pamd
|
||||
@@ -110,10 +110,14 @@ Patch2: Add-documentation-on-blacklisted-modules-to-mount-8-.patch
|
||||
# PATCH-FIX-SUSE util-linux-bash-completion-su-chsh-l.patch bsc1172427 -- Fix "su -s" bash completion.
|
||||
Patch3: util-linux-bash-completion-su-chsh-l.patch
|
||||
Patch5: static_lib.patch
|
||||
# PATCH-FEATURE-UPSTREAM util-linux-lib-netlink.patch boo1139983 jsc#PED-8734 sbrabec@suse.com -- Implement netlink based IP address detection and issue reload.
|
||||
Patch6: util-linux-lib-netlink.patch
|
||||
# PATCH-FEATURE-UPSTREAM util-linux-agetty-netlink.patch boo1139983 jsc#PED-8734 sbrabec@suse.com -- Implement netlink based IP address detection and issue reload.
|
||||
Patch7: util-linux-agetty-netlink.patch
|
||||
# PATCH-FIX-UPSTREAM util-linux-umount-losetup-lazy-destruction.patch bsc1159034 sbrabec@suse.com -- Document unexpected side effects of lazy destruction.
|
||||
Patch12: util-linux-umount-losetup-lazy-destruction.patch
|
||||
# PATCH-FIX-UPSTREAM util-linux-umount-losetup-lazy-destruction-generated.patch bsc1159034 sbrabec@suse.com -- Document unexpected side effects of lazy destruction. (patch generated file)
|
||||
Patch13: util-linux-umount-losetup-lazy-destruction-generated.patch
|
||||
# PATCH-FIX-UPSTREAM util-linux-agetty-prevent-cursor-escape.patch bsc1194818 sbrabec@suse.com -- Prevent cursor escape using arrows or escape sequences.
|
||||
Patch14: util-linux-agetty-prevent-cursor-escape.patch
|
||||
# PATCH-FIX-UPSTREAM util-linux-lscpu-skip-aarch64-decode.patch bsc1229476 sbrabec@suse.com -- Skip aarch64 decode path for rest of the architectures.
|
||||
Patch15: util-linux-lscpu-skip-aarch64-decode.patch
|
||||
BuildRequires: audit-devel
|
||||
BuildRequires: bc
|
||||
BuildRequires: binutils-devel
|
||||
@@ -189,8 +193,7 @@ Supplements: filesystem(minix)
|
||||
# All login.defs variables require support from shadow side.
|
||||
# Upgrade this symbol version only if new variables appear!
|
||||
# Verify by shadow-login_defs-check.sh from shadow source package.
|
||||
# Use downstream version. Upstream may accept the patch later.
|
||||
Recommends: login_defs-support-for-util-linux >= 4.17.4
|
||||
Recommends: login_defs-support-for-util-linux >= 2.37
|
||||
%endif
|
||||
# ulsubset == core
|
||||
|
||||
@@ -490,38 +493,38 @@ export CXXFLAGS="%{optflags} -D_GNU_SOURCE"
|
||||
|
||||
# Here we define a build function. For the base build, we use it as it
|
||||
# is. For python build, we use it repeatedly for all flavors.
|
||||
configure_and_build() {
|
||||
function configure_and_build() {
|
||||
|
||||
# configure options depending on ulbuild and ulsubset values
|
||||
configure_options=""
|
||||
# libmagic is only used for determining in more(1) whether or not a file
|
||||
# is binary. but it has builtin code that is doing the same with a simpler
|
||||
# check and the libmagic database dependency is rather large (9MB+)
|
||||
configure_options="$configure_options --without-libmagic "
|
||||
configure_options+="--without-libmagic "
|
||||
|
||||
%if "%ulbuild" == "python"
|
||||
%define _configure ../configure
|
||||
configure_options="$configure_options --disable-all-programs "
|
||||
configure_options="$configure_options --with-python "
|
||||
configure_options="$configure_options --enable-pylibmount "
|
||||
configure_options="$configure_options --enable-libmount "
|
||||
configure_options="$configure_options --enable-libblkid "
|
||||
configure_options+="--disable-all-programs "
|
||||
configure_options+="--with-python "
|
||||
configure_options+="--enable-pylibmount "
|
||||
configure_options+="--enable-libmount "
|
||||
configure_options+="--enable-libblkid "
|
||||
%endif
|
||||
# ulbuild == python
|
||||
|
||||
%if "%ulbuild" == "base"
|
||||
configure_options="$configure_options --enable-all-programs "
|
||||
configure_options="$configure_options --without-python "
|
||||
configure_options+="--enable-all-programs "
|
||||
configure_options+="--without-python "
|
||||
%endif
|
||||
# ulbuild == base
|
||||
|
||||
%if "%ulsubset" == "core"
|
||||
configure_options="$configure_options --without-systemd --disable-liblastlog2"
|
||||
configure_options+="--without-systemd --disable-liblastlog2"
|
||||
%endif
|
||||
# ulsubset == core
|
||||
|
||||
%if "%ulsubset" == "systemd"
|
||||
configure_options="$configure_options --with-systemd "
|
||||
configure_options+="--with-systemd "
|
||||
%endif
|
||||
# ulsubset == systemd
|
||||
|
||||
@@ -565,8 +568,9 @@ configure_options="$configure_options --with-systemd "
|
||||
--enable-fs-paths-default="/sbin:/usr/sbin"\
|
||||
--enable-static\
|
||||
--with-vendordir=%{_distconfdir}\
|
||||
--disable-libmount-mountfd-support\
|
||||
$configure_options
|
||||
%make_build
|
||||
make %{?_smp_mflags}
|
||||
}
|
||||
|
||||
################
|
||||
@@ -617,10 +621,8 @@ fi
|
||||
################
|
||||
%if "%ulbuild" == "base"
|
||||
%make_install
|
||||
mkdir -p "%{buildroot}/%{_distconfdir}/default" "%{buildroot}/%{_pam_vendordir}" "%{buildroot}/%{_sysconfdir}/issue.d"
|
||||
install -m 644 %{SOURCE51} %{buildroot}%{_distconfdir}/blkid.conf
|
||||
touch %{buildroot}%{_sysconfdir}/blkid.conf
|
||||
mkdir %{buildroot}%{_sysconfdir}/blkid.conf.d %{buildroot}%{_distconfdir}/blkid.conf.d
|
||||
mkdir -p %{buildroot}{%{_distconfdir}/default,%{_pam_vendordir},%{_sysconfdir}/issue.d}
|
||||
install -m 644 %{SOURCE51} %{buildroot}%{_sysconfdir}/blkid.conf
|
||||
install -m 644 %{SOURCE8} %{buildroot}%{_pam_vendordir}/login
|
||||
install -m 644 %{SOURCE9} %{buildroot}%{_pam_vendordir}/remote
|
||||
%if 0%{?suse_version} <= 1500
|
||||
@@ -674,10 +676,10 @@ rm -f %{buildroot}%{_mandir}/man8/fdisk.8*
|
||||
|
||||
# create list of setarch(8) symlinks
|
||||
find %{buildroot}%{_mandir}/man8 -regextype posix-egrep \
|
||||
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)\.8.*" \
|
||||
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64|uname26)\.8.*" \
|
||||
-printf "%{_mandir}/man8/%f*\n" >> %{name}.files
|
||||
find %{buildroot}%{_bindir}/ -regextype posix-egrep -type l \
|
||||
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64)$" \
|
||||
-regex ".*(linux32|linux64|s390|s390x|i386|ppc|ppc64|ppc32|sparc|sparc64|sparc32|sparc32bash|mips|mips64|mips32|ia64|x86_64|parisc|parisc32|parisc64|uname26)$" \
|
||||
-printf "%{_bindir}/%f\n" >> %{name}.files
|
||||
mkdir -p %{buildroot}/run/uuidd
|
||||
|
||||
@@ -718,6 +720,8 @@ mv %{buildroot}%{_bindir}/login %{buildroot}/bin/
|
||||
%else
|
||||
# ulsubset != core, ulbuild == base
|
||||
echo -n "" >%{name}.lang
|
||||
ln -sf /sbin/service %{buildroot}%{_sbindir}/rcuuidd
|
||||
ln -sf /sbin/service %{buildroot}%{_sbindir}/rcfstrim
|
||||
%endif
|
||||
# ulsubset == core, ulbuild == base
|
||||
|
||||
@@ -981,6 +985,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
# defined no_config
|
||||
|
||||
%config %dir %{_sysconfdir}/issue.d
|
||||
|
||||
%if %{ul_extra_bin_sbin}
|
||||
%core /bin/kill
|
||||
%core %verify(not mode) %attr(%ul_suid,root,root) /bin/su
|
||||
@@ -1024,9 +1029,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%core %{_bindir}/kill
|
||||
%core %verify(not mode) %attr(%ul_suid,root,root) %{_bindir}/su
|
||||
%core %{_bindir}/eject
|
||||
%core %{_bindir}/bits
|
||||
%core %{_bindir}/cal
|
||||
%core %{_bindir}/coresched
|
||||
%core %{_bindir}/chmem
|
||||
%core %{_bindir}/choom
|
||||
%core %{_bindir}/chrt
|
||||
@@ -1238,7 +1241,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
|
||||
%core %{_mandir}/man1/kill.1.gz
|
||||
%core %{_mandir}/man1/su.1.gz
|
||||
%core %{_mandir}/man1/bits.1.gz
|
||||
%core %{_mandir}/man1/cal.1.gz
|
||||
%core %{_mandir}/man1/choom.1.gz
|
||||
%core %{_mandir}/man1/chrt.1.gz
|
||||
@@ -1246,7 +1248,6 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%core %{_mandir}/man1/colcrt.1.gz
|
||||
%core %{_mandir}/man1/colrm.1.gz
|
||||
%core %{_mandir}/man1/column.1.gz
|
||||
%core %{_mandir}/man1/coresched.1.gz
|
||||
%core %{_mandir}/man1/dmesg.1.gz
|
||||
%core %{_mandir}/man1/enosys.1.gz
|
||||
%core %{_mandir}/man1/eject.1.gz
|
||||
@@ -1373,10 +1374,8 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%license README.licensing
|
||||
%license COPYING
|
||||
%license Documentation/licenses/*
|
||||
%ghost %config(missingok) %{_sysconfdir}/blkid.conf
|
||||
%config %dir %{_sysconfdir}/blkid.conf.d
|
||||
%{_distconfdir}/blkid.conf
|
||||
%dir %{_distconfdir}/blkid.conf.d
|
||||
%config(noreplace) %{_sysconfdir}/blkid.conf
|
||||
|
||||
%{_datadir}/bash-completion/completions/*
|
||||
%exclude %{_datadir}/bash-completion/completions/findmnt
|
||||
%exclude %{_datadir}/bash-completion/completions/logger
|
||||
@@ -1401,11 +1400,10 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
# Systemd files #
|
||||
#################
|
||||
%if "%ulsubset" == "systemd"
|
||||
%exclude %{_distconfdir}/blkid.conf
|
||||
%exclude %dir %{_distconfdir}/blkid.conf.d
|
||||
%exclude %config(missingok) %{_sysconfdir}/blkid.conf
|
||||
%exclude %config %{_sysconfdir}/blkid.conf.d
|
||||
%exclude %config(noreplace) %{_sysconfdir}/blkid.conf
|
||||
|
||||
%exclude %config %dir %{_sysconfdir}/issue.d
|
||||
|
||||
%if %{ul_extra_bin_sbin}
|
||||
/bin/findmnt
|
||||
/bin/logger
|
||||
@@ -1593,6 +1591,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%exclude %{_mandir}/man8/parisc64.8.gz
|
||||
%exclude %{_mandir}/man8/uname26.8.gz
|
||||
|
||||
%{_sbindir}/rcfstrim
|
||||
%{_unitdir}/fstrim.service
|
||||
%{_unitdir}/fstrim.timer
|
||||
%endif
|
||||
@@ -1739,6 +1738,7 @@ rmdir --ignore-fail-on-non-empty /run/run >/dev/null 2>&1 || :
|
||||
%attr(-,uuidd,uuidd) %ghost %dir /run/uuidd
|
||||
%{_datadir}/bash-completion/completions/uuidd
|
||||
%{_mandir}/man8/uuidd.8.gz
|
||||
%{_sbindir}/rcuuidd
|
||||
%{_unitdir}/uuidd.service
|
||||
%{_unitdir}/uuidd.socket
|
||||
|
||||
|
Reference in New Issue
Block a user