]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #16576 from keszybz/bump-tmp-size
authorLennart Poettering <lennart@poettering.net>
Wed, 29 Jul 2020 13:53:30 +0000 (15:53 +0200)
committerGitHub <noreply@github.com>
Wed, 29 Jul 2020 13:53:30 +0000 (15:53 +0200)
Increase /tmp size to 50% of RAM

catalog/systemd.pl.catalog.in
src/firstboot/firstboot.c
src/libsystemd-network/sd-radv.c
src/network/test-networkd-conf.c
src/resolve/resolvectl.c
src/test/test-alloc-util.c
src/test/test-cgroup-util.c
src/test/test-clock.c

index 961d09a2f545a32110f7d661765081074a0e9197..f82bab8fc34eb40b5b536c1bf0e3edccebbd0d22 100644 (file)
@@ -488,3 +488,39 @@ Mocno zalecane jest unikanie wykonywania usług pod tą tożsamością użytkown
 zwłaszcza na komputerach używających NFS lub mających kontenery. Należy
 przydzielić identyfikator użytkownika dla tej konkretnej usługi, statycznie
 przez systemd-sysusers lub dynamicznie przez ustawienie usługi DynamicUser=.
+
+-- 1c0454c1bd2241e0ac6fefb4bc631433
+Subject: Usługa systemd-udev-settle.service jest przestarzała.
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Użycie jednostki usługi systemd „systemd-udev-settle.service” jest
+przestarzałe. Wstawia ona sztuczne opóźnienie do procesu uruchamiania
+bez dostarczania gwarancji, które były oczekiwane przez pozostałe
+podsystemy. Korzystanie z tej usługi może prowadzić do hazardów,
+i zasadniczo jest błędem.
+
+W przeszłości zadaniem tej usługi było oczekiwanie, aż wszystkie urządzenia
+komputera zostaną w pełni wykryte i zainicjowane, opóźniając uruchamianie
+do ukończenia tego etapu. Jednakże, współczesne komputery i urządzenia
+na ogół nie działają już w ten sposób, tylko mogą pojawić się w dowolnej
+chwili i zająć dowolny czas na wykrycie i inicjację. Z tego powodu,
+w ogólnym przypadku, nie jest już możliwe poprawne opóźnienie uruchamiania
+do przetworzenia „wszystkich urządzeń”, ponieważ nie jest jasne, co znaczy
+„wszystkie urządzenia” i kiedy zostały odnalezione. Dotyczy to zwłaszcza
+urządzeń podłączonych przez USB lub sieć.
+
+Nowoczesne oprogramowanie wymagające określonego sprzętu (takiego jak
+urządzenie sieciowe lub urządzenie blokowe) do działania powinno oczekiwać
+tylko na pojawienie się danego urządzenia, a w przeciwnym razie działać
+asynchronicznie, inicjując urządzenia, kiedy te pojawiają się w trakcie
+uruchamiania i w trakcie działania systemu bez opóźniania procesu uruchamiania.
+
+Jest to wada danego oprogramowania, jeśli nie działa ono w ten sposób
+i nadal wciąga usługę systemd-udev-settle.service do procesu uruchamiania.
+
+Prosimy zgłosić błąd w następujących jednostkach z prośbą
+o ich aktualizację tak, aby działały w sposób dynamiczny
+bez zależności od usługi systemd-udev-settle.service:
+
+    @OFFENDING_UNITS@
index 807a4f57291466268be584d78802f081f0bc2187..a3f442518ec43d207c8290523e2716a33f5cb1b5 100644 (file)
@@ -604,6 +604,24 @@ static int prompt_root_password(void) {
         return 0;
 }
 
+static int find_shell(const char *path, const char *root) {
+        int r;
+
+        assert(path);
+
+        if (!valid_shell(path))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "%s is not a valid shell", path);
+
+        r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, NULL, NULL);
+        if (r < 0) {
+                const char *p;
+                p = prefix_roota(root, path);
+                return log_error_errno(r, "Failed to resolve shell %s: %m", p);
+        }
+
+        return 0;
+}
+
 static int prompt_root_shell(void) {
         int r;
 
@@ -625,10 +643,9 @@ static int prompt_root_shell(void) {
                         break;
                 }
 
-                if (!valid_shell(s)) {
-                        log_error("Specified shell invalid.");
+                r = find_shell(s, arg_root);
+                if (r < 0)
                         continue;
-                }
 
                 arg_root_shell = TAKE_PTR(s);
                 break;
@@ -982,16 +999,19 @@ static int help(void) {
                "     --root-password=PASSWORD               Set root password from plaintext password\n"
                "     --root-password-file=FILE              Set root password from file\n"
                "     --root-password-hashed=HASHED_PASSWORD Set root password from hashed password\n"
+               "     --root-shell=SHELL                     Set root shell\n"
                "     --prompt-locale                        Prompt the user for locale settings\n"
                "     --prompt-keymap                        Prompt the user for keymap settings\n"
                "     --prompt-timezone                      Prompt the user for timezone\n"
                "     --prompt-hostname                      Prompt the user for hostname\n"
                "     --prompt-root-password                 Prompt the user for root password\n"
+               "     --prompt-root-shell                    Prompt the user for root shell\n"
                "     --prompt                               Prompt for all of the above\n"
                "     --copy-locale                          Copy locale from host\n"
                "     --copy-keymap                          Copy keymap from host\n"
                "     --copy-timezone                        Copy timezone from host\n"
                "     --copy-root-password                   Copy root password from host\n"
+               "     --copy-root-shell                      Copy root shell from host\n"
                "     --copy                                 Copy locale, keymap, timezone, root password\n"
                "     --setup-machine-id                     Generate a new random machine ID\n"
                "     --force                                Overwrite existing files\n"
@@ -1167,9 +1187,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT_SHELL:
-                        if (!valid_shell(optarg))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "%s is not a valid shell path", optarg);
+                        r = find_shell(optarg, arg_root);
+                        if (r < 0)
+                                return r;
 
                         r = free_and_strdup(&arg_root_shell, optarg);
                         if (r < 0)
index 7383c84724a06a9abe183e563b65a871acd2c702..6163cf169143467713c6b64213f840f20e872a59 100644 (file)
@@ -578,6 +578,15 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
 
         cur = p;
 
+        /* If RAs have already been sent, send an RA immediately to announce the newly-added prefix */
+        if (ra->ra_sent > 0) {
+            r = radv_send(ra, NULL, ra->lifetime);
+            if (r < 0)
+                    log_radv_errno(r, "Unable to send Router Advertisement for added prefix: %m");
+            else
+                    log_radv("Sent Router Advertisement for added prefix");
+        }
+
  update:
         r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
         if (r < 0)
@@ -686,6 +695,15 @@ _public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int
                 return 0;
         }
 
+        /* If RAs have already been sent, send an RA immediately to announce the newly-added route prefix */
+        if (ra->ra_sent > 0) {
+            r = radv_send(ra, NULL, ra->lifetime);
+            if (r < 0)
+                    log_radv_errno(r, "Unable to send Router Advertisement for added route prefix: %m");
+            else
+                    log_radv("Sent Router Advertisement for added route prefix");
+        }
+
  update:
         r = sd_event_now(ra->event, clock_boottime_or_monotonic(), &time_now);
         if (r < 0)
index 2007acb7812e5c2854ea9fc9b058958d0d67d822..5d338e6f1a3a90f92f9bb77568d80d4e1432cfe1 100644 (file)
@@ -101,7 +101,7 @@ static void test_config_parse_duid_rawdata(void) {
         test_config_parse_duid_rawdata_one("11::", 0, &(DUID){0, 1, {0x11}});  /* FIXME: should this be an error? */
         test_config_parse_duid_rawdata_one("abcdef", 0, &(DUID){});
         test_config_parse_duid_rawdata_one(BYTES_0_128, 0, &(DUID){});
-        test_config_parse_duid_rawdata_one(BYTES_0_128 + 2, 0, &(DUID){0, 128, BYTES_1_128});
+        test_config_parse_duid_rawdata_one(&BYTES_0_128[2], 0, &(DUID){0, 128, BYTES_1_128});
 }
 
 static void test_config_parse_hwaddr(void) {
index 476c5e4a3c032a16dcfde4d08e04be7d076c0de9..3072b984e5d52a3ecbbbf8545a131cb15bf97fbd 100644 (file)
@@ -1969,8 +1969,10 @@ static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_e
                 return bus_log_create_error(r);
 
         r = sd_bus_call(bus, req, 0, error, NULL);
-        if (r < 0 && extended && sd_bus_error_has_name(error, SD_BUS_ERROR_UNKNOWN_METHOD))
+        if (r < 0 && extended && sd_bus_error_has_name(error, SD_BUS_ERROR_UNKNOWN_METHOD)) {
+                sd_bus_error_free(error);
                 return call_dns(bus, dns, locator, error, false);
+        }
         return r;
 }
 
index d85f705504403cdd9240e966adb17c8cce9e29b4..72356aeaa4da2bec0fcf8923686d3a6d69e4f3df 100644 (file)
@@ -136,6 +136,9 @@ static void test_cleanup_order(void) {
 static void test_auto_erase_memory(void) {
         _cleanup_(erase_and_freep) uint8_t *p1, *p2;
 
+        /* print address of p2, else e.g. clang-11 will optimize it out */
+        log_debug("p1: %p p2: %p", &p1, &p2);
+
         assert_se(p1 = new(uint8_t, 1024));
         assert_se(p2 = new(uint8_t, 1024));
 
index ea47f5affaba4fe0b99ea3e6f158313771087982..eff586a2e1d5497f5e1e34e7204219dfce1a352b 100644 (file)
@@ -23,7 +23,7 @@ static void check_p_d_u(const char *path, int code, const char *result) {
         int r;
 
         r = cg_path_decode_unit(path, &unit);
-        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, result, code);
+        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, strnull(result), code);
         assert_se(r == code);
         assert_se(streq_ptr(unit, result));
 }
@@ -45,7 +45,7 @@ static void check_p_g_u(const char *path, int code, const char *result) {
         int r;
 
         r = cg_path_get_unit(path, &unit);
-        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, result, code);
+        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, strnull(result), code);
         assert_se(r == code);
         assert_se(streq_ptr(unit, result));
 }
@@ -69,7 +69,7 @@ static void check_p_g_u_u(const char *path, int code, const char *result) {
         int r;
 
         r = cg_path_get_user_unit(path, &unit);
-        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, result, code);
+        printf("%s: %s → %s %d expected %s %d\n", __func__, path, unit, r, strnull(result), code);
         assert_se(r == code);
         assert_se(streq_ptr(unit, result));
 }
index e5a3de8a59a65bdf7a7872cad052efdf507a8539..271d4655463a183b97addc37b04aa671ee21b073 100644 (file)
@@ -49,7 +49,7 @@ static void test_clock_is_localtime(void) {
                 log_info("scenario #%zu:, expected result %i", i, scenarios[i].expected_result);
                 log_info("%s", scenarios[i].contents);
                 rewind(f);
-                ftruncate(fileno(f), 0);
+                assert_se(ftruncate(fileno(f), 0) == 0);
                 assert_se(write_string_stream(f, scenarios[i].contents, WRITE_STRING_FILE_AVOID_NEWLINE) == 0);
                 assert_se(clock_is_localtime(adjtime) == scenarios[i].expected_result);
         }