On 2016-12-14 15:48, Marga Manterola wrote: > Package: tzdata > Version: 2016a-1 > Severity: minor > > The fix for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803144 > <https://www.google.com/url?q=https://bugs.debian.org/cgi-bin/bugreport.cgi?bug%3D803144&sa=D&usg=AFQjCNFpL_n8tg3iXyS6B09KW1sWkMLIcQ> > means > that it's no longer possible to change the timezone without user > interaction unless one does what tzdata is already doing. > > In the past, it was possible to replace the contents of /etc/timezone, run > dpkg-reconfigure tzdata and have the system update it's timezone without > any user interaction. This is particularly handy when combined with DHCP > servers that serve the timezone information. > > However, since the move to the symlink instead of a file, this is no longer > possible. This is caused by this snippet in tzdata's config file: > > https://sources.debian.net/src/tzdata/2016j-2/debian/tzdata.config/#L332 > # If /etc/localtime is a link, update /etc/timezone > if [ -L /etc/localtime ] ; then > TIMEZONE="$(readlink /etc/localtime)" > TIMEZONE="${TIMEZONE#/usr/share/zoneinfo/}" > if [ -f "/usr/share/zoneinfo/$TIMEZONE" ] ; then > echo ${TIMEZONE} > /etc/timezone > fi > fi > > # Read /etc/timezone > if [ -e /etc/timezone ]; then > TIMEZONE="$(head -n 1 /etc/timezone)" > TIMEZONE="${TIMEZONE%% *}" > TIMEZONE="${TIMEZONE##/}" > TIMEZONE="${TIMEZONE%%/}" > TIMEZONE="$(convert_timezone $TIMEZONE)" > if [ -f "/usr/share/zoneinfo/$TIMEZONE" ] ; then > AREA="${TIMEZONE%%/*}" > ZONE="${TIMEZONE#*/}" > else > rm -f /etc/timezone > fi > fi > > Which means that the symlink takes precedence over the file. In the end, > in order to make a programmatical change, I would need to re do what tzdata > does regarding translating the string into a symlink (fixing the timezone > along the way), which means unnecessary code duplication.
I think it can be as simple as "ln -sf /usr/share/zoneinfo/$(TIMEZONE) /etc/localtime", followed by a dpkg-reconfigure tzdata to update /etc/timezone. > Some possibilities to change this: > A) Remove the symlink reading code from the config (or only use it if the > /etc/timezone file is missing) This will break setting timezone from systemd and from most desktop environments which just update /etc/localtime and not /etc/timezone as the latter is a Debianism. Therefore the timezone is correctly selected, until the moment where the tzdata maintainer scripts are run again, which just revert the change. > B) Provide a separate tool that takes a string and does what tzdata maint > scripts do (convert the timezone, split it, update the symlink, etc). > > For systemd systems, it's possible to do: > timedatectl set-timezone <timezone> Which wasn't possible before the above change... > However, for non systemd systems, this is now impossible. I am not sure that yet another Debianism tool is going to help in the long term. One solution could be to stop creating /etc/timezone if it doesn't exist. That way there is no need to keep /etc/localtime and /etc/timezone in sync, and changing the timezone would just be a matter of updating the symlink. What do you think? Aurelien -- Aurelien Jarno GPG: 4096R/1DDD8C9B [email protected] http://www.aurel32.net

