#!/bin/sh set -e . /usr/share/debconf/confmodule log() { logger -t clock-setup "$@" } warning() { log "warning: $*" } os_needs_local_clock () { while read line; do shortname=$(echo "$line" | cut -d : -f 3) case $shortname in MS-DOS*|Windows*|FreeDOS*|Solaris*) # keep in sync with os-prober return 0 ;; esac done return 1 } hwclock_prepare () { anna-install rtc-modules || true # This may not be necessary on all hardware; hwclock can do direct IO # if the rtc module is not loaded. log-output -t hw-detect modprobe -v rtc || log "rtc module not loaded" log-output -t hw-detect modprobe -v rtc-dev || log "rtc-dev module not loaded" update-dev --settle # bind mount /dev into /target/dev so that rtc devices are # available for hwclock if mount -o bind /dev /target/dev; then target_dev_mounted=1 else warning "failed to bind mount /target/dev" fi } hwclock_cleanup () { if [ "$target_dev_mounted" ] && ! umount /target/dev; then warning "failed to unmount /target/dev bind mount" fi } hwclock_stop () { kill $pid || return sleep 1 if [ -e /proc/$pid ]; then kill -9 $pid || return fi } pri=high if db_fget clock-setup/utc seen && [ "$RET" = true ]; then # keep preseeded value : else # os-prober may not yet be installed... anna-install os-prober-udeb || true probed=$(os-prober) || true if echo "$probed" | os_needs_local_clock; then # default to localtime for some OSes db_set clock-setup/utc false pri=low fi if [ -z "$probed" ]; then # installing the only OS, so use UTC db_set clock-setup/utc true db_get clock-setup/utc-auto if [ "$RET" = true ]; then pri=low fi fi fi db_input $pri clock-setup/utc || true if ! db_go; then exit 10 # back to main menu fi # Update target system configuration for utc/localtime selection rcsfile=/target/etc/default/rcS db_get clock-setup/utc if [ "$RET" = true ]; then sed -i -e 's:^UTC="no":UTC="yes":' -e 's:^UTC=no:UTC=yes:' $rcsfile OPT="--utc" else sed -i -e 's:^UTC="yes":UTC="no":' -e 's:^UTC=yes:UTC=no:' $rcsfile OPT="--localtime" fi # Only update the hardware clock if the system clock was updated using rdate db_get clock-setup/system-time-changed if [ "$RET" = true ]; then hwclock_prepare db_progress INFO clock-setup/progress/hwclock log-output -t clock-setup chroot /target hwclock $OPT --systohc --debug --noadjfile & pid="$!" count=0 while sleep 1; do if [ ! -e /proc/$pid ]; then break fi count=$(($count + 1)) if [ $count -eq 30 ]; then count=0 db_input critical clock-setup/hwclock-wait || true if ! db_go; then hwclock_stop cleanup exit 10 # back to main menu fi db_get clock-setup/hwclock-wait if [ "$RET" = false ]; then hwclock_stop break fi fi done hwclock_cleanup else log "not setting hardware clock" fi