system: require a timezone to be set
authorYann E. MORIN <yann.morin.1998@free.fr>
Tue, 4 Jul 2017 06:56:39 +0000 (08:56 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tue, 4 Jul 2017 07:00:05 +0000 (09:00 +0200)
Even though no timezone implicitly means UTC, systemd is not all that
happy when it does not have a timezone set. This is all fine on a RW
filesystem because systemd will create a symlink on its own (to
Etc/UTC), but not so much on a RO filesystem, causing all kind of
issues at boot time (up to the point that the system is unusable).

We fix that by requiring that the timezone is actually set. The check is
done by verifying that the timezone file is an actual file; if not set,
the test would find a directory and would thus fail.

Update the help entry accordingly.

Also fix indentation in tzdata.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Richard Braun <rbraun@sceen.net>
Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Martin Bark <martin@barkynet.com>
Cc: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/tz/tz.mk
package/tzdata/tzdata.mk
system/Config.in

index 6b1f9f4d24e1ff4646c6261658b2fbc92ecc045c..73863610884cde0bafaf074184bf3b01b2f2eee5 100644 (file)
@@ -25,15 +25,12 @@ define TZ_INSTALL_TARGET_CMDS
                $(TARGET_DIR)/usr/share/zoneinfo/iso3166.tab
        mkdir -p $(TARGET_DIR)/usr/share/zoneinfo/uclibc
        cp -a $(@D)/output/* $(TARGET_DIR)/usr/share/zoneinfo/uclibc
-       if [ -n "$(TZ_LOCALTIME)" ]; then \
-               if [ ! -f $(TARGET_DIR)/usr/share/zoneinfo/uclibc/$(TZ_LOCALTIME) ]; then \
-                       printf "Error: '%s' is not a valid timezone, check your BR2_TARGET_LOCALTIME setting\n" \
-                               "$(TZ_LOCALTIME)"; \
-                       exit 1; \
-               fi; \
-               cd $(TARGET_DIR)/etc; \
-               ln -sf ../usr/share/zoneinfo/uclibc/$(TZ_LOCALTIME) TZ; \
+       if [ ! -f $(TARGET_DIR)/usr/share/zoneinfo/uclibc/$(TZ_LOCALTIME) ]; then \
+               printf "Error: '%s' is not a valid timezone, check your BR2_TARGET_LOCALTIME setting\n" \
+                       "$(TZ_LOCALTIME)"; \
+               exit 1; \
        fi
+       ln -sf ../usr/share/zoneinfo/uclibc/$(TZ_LOCALTIME) $(TARGET_DIR)/etc/TZ
 endef
 
 $(eval $(generic-package))
index 802d8479a37b4d68ea07e2bc5c6966b6535b3daf..8c8d224e4fc592839849d1b070fb3ea47685cefb 100644 (file)
@@ -36,16 +36,13 @@ define TZDATA_INSTALL_TARGET_CMDS
        for zone in posix/*; do \
            ln -sfn "$${zone}" "$${zone##*/}"; \
        done
-       if [ -n "$(TZDATA_LOCALTIME)" ]; then \
-           if [ ! -f $(TARGET_DIR)/usr/share/zoneinfo/$(TZDATA_LOCALTIME) ]; then \
-               printf "Error: '%s' is not a valid timezone, check your BR2_TARGET_LOCALTIME setting\n" \
-                      "$(TZDATA_LOCALTIME)"; \
-               exit 1; \
-           fi; \
-           cd $(TARGET_DIR)/etc; \
-           ln -sf ../usr/share/zoneinfo/$(TZDATA_LOCALTIME) localtime; \
-           echo "$(TZDATA_LOCALTIME)" >timezone; \
+       if [ ! -f $(TARGET_DIR)/usr/share/zoneinfo/$(TZDATA_LOCALTIME) ]; then \
+               printf "Error: '%s' is not a valid timezone, check your BR2_TARGET_LOCALTIME setting\n" \
+                       "$(TZDATA_LOCALTIME)"; \
+               exit 1; \
        fi
+       ln -sf ../usr/share/zoneinfo/$(TZDATA_LOCALTIME) $(TARGET_DIR)/etc/localtime
+       echo "$(TZDATA_LOCALTIME)" >$(TARGET_DIR)/etc/timezone
 endef
 
 define HOST_TZDATA_BUILD_CMDS
index b47ae4384456e58eb37e2dc5844d887a1f5cc9f8..858883955ed7069bb67338471c6b30971ebc2765 100644 (file)
@@ -448,15 +448,13 @@ config BR2_TARGET_LOCALTIME
        help
          The time zone to install as the default local time, expressed as a
          tzdata location, such as:
+           Etc/UTC             (the default)
            GMT
            Europe/Paris
            America/New_York
            Pacific/Wallis
            ...
 
-         If empty, no local time will be set, and the dates will be
-         expressed in UTC.
-
 endif # BR2_TARGET_TZ_INFO
 
 config BR2_ROOTFS_USERS_TABLES