File: 10clock-setup

package info (click to toggle)
clock-setup 0.106
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 640 kB
  • ctags: 13
  • sloc: sh: 169; ansic: 28; makefile: 19
file content (131 lines) | stat: -rwxr-xr-x 2,664 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh
set -e

. /usr/share/debconf/confmodule

log() {
	logger -t clock-setup "$@"
}
warning() {
	log "warning: $*"
}

arch_has_os_needing_local_clock () {
	# keep in sync with arches that can run OSs matched by
	# os_needs_local_clock
	case "$(udpkg --print-architecture)" in
	*i386*|*amd64*|*ia64*)
		return 0
	;;
	esac
	return 1
}

os_needs_local_clock () {
	while read line; do
		shortname=$(echo "$line" | cut -d : -f 3)
		case $shortname in
		MS-DOS*|Windows*|FreeDOS*) # 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
}

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
	probed=""

	if arch_has_os_needing_local_clock; then
		# 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
	fi

	if [ -z "$probed" ]; then
		# installing the only OS, so use UTC
		db_set clock-setup/utc true
		pri=low
	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 &
	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
else
	log "not setting hardware clock"
fi