From: WANG Chao Date: Thu, 6 Jun 2013 09:56:11 +0000 (+0800) Subject: base: setup correct system time and time zone in initrd X-Git-Tag: 028~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77364fd6bb01ea184db73b1a5ad05da984752293;p=thirdparty%2Fdracut.git base: setup correct system time and time zone in initrd Currently in initrd, hardware clock is always considered to use UTC time format and system time zone is also UTC. Thus system time isn't correct if hw clock is localtime or we're using other time zone in real root. To fix this, install /etc/adjtime and /etc/localtime to initrd. If not using systemd, install /usr/sbin/hwclock for dracut init to setup system time. [harald: combined the two hostonly if's] Signed-off-by: WANG Chao Signed-off-by: Harald Hoyer --- diff --git a/modules.d/99base/init.sh b/modules.d/99base/init.sh index 880a2c053..c72129b97 100755 --- a/modules.d/99base/init.sh +++ b/modules.d/99base/init.sh @@ -55,6 +55,15 @@ if ! ismounted /dev; then exit 1 fi +# setup system time +if [ -f /etc/adjtime ]; then + if strstr "$(cat /etc/adjtime)" LOCAL; then + hwclock --hctosys --localtime + else + hwclock --hctosys --utc + fi +fi + # prepare the /dev directory [ ! -h /dev/fd ] && ln -s /proc/self/fd /dev/fd >/dev/null 2>&1 [ ! -h /dev/stdin ] && ln -s /proc/self/fd/0 /dev/stdin >/dev/null 2>&1 diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh index 4955b7ba9..f3caf2896 100755 --- a/modules.d/99base/module-setup.sh +++ b/modules.d/99base/module-setup.sh @@ -28,6 +28,17 @@ install() { egrep '^root:' "$initdir/etc/passwd" 2>/dev/null || echo 'root:x:0:0::/root:/bin/sh' >> "$initdir/etc/passwd" egrep '^nobody:' /etc/passwd >> "$initdir/etc/passwd" + # install /etc/adjtime and time zone data + if [[ $hostonly ]]; then + dracut_install -o /etc/adjtime \ + /etc/localtime + + # Our init.sh script needs hwclock to set system time + if ! dracut_module_included "systemd"; then + dracut_install -o hwclock + fi + fi + # install our scripts and hooks inst_script "$moddir/init.sh" "/init" inst_script "$moddir/initqueue.sh" "/sbin/initqueue"