Browse Source

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 <chaowang@redhat.com>
Signed-off-by: Harald Hoyer <harald@redhat.com>
master
WANG Chao 12 years ago committed by Harald Hoyer
parent
commit
77364fd6bb
  1. 9
      modules.d/99base/init.sh
  2. 11
      modules.d/99base/module-setup.sh

9
modules.d/99base/init.sh

@ -55,6 +55,15 @@ if ! ismounted /dev; then @@ -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

11
modules.d/99base/module-setup.sh

@ -28,6 +28,17 @@ install() { @@ -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"

Loading…
Cancel
Save