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 <chaowang@redhat.com>
Signed-off-by: Harald Hoyer <harald@redhat.com>
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
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"