Dale posted on Thu, 07 Jan 2016 00:55:31 -0600 as excerpted: >> You did the first part of it, setting /etc/timezone, but didn't do the >> second part, setting /etc/localtime, which is used by glibc to know >> your timezone. You can either do it using the command in the handbook: >> >> emerge --config sys-libs/timezone-data >> >> ... or you can do it manually by copying the appropriate timezone file >> from /usr/share/zoneinfo/ to /etc/localtime, for AZ: >> >> cp /usr/share/zoneinfo/America/Phoenix /etc/localtime >> >> (Every time you update the timezone-data package, its pkg_postinst() >> runs pkg_config(), which is what that emerge call does semi-manually, >> above. pkg_config in turn copies the appropriate file to /etc/localtime >> based on /etc/timezone, thus updating /etc/localtime with the timezone >> file from the freshly installed timezone-data package. The cp >> alternative simply does that same cp manually. You can of course take >> a look at the timezone-data ebuild itself to see exactly how it does >> it, if you like. It does get slightly fancier with its logic, setting >> factory if the timezone is invalid, not touching the localtime file if >> it's a symlink instead of an actual file, etc, but basically, just does >> the above under normal circumstances. =:^) >> > It's been a long time since I did this but isn't that supposed to be a > link instead of a copy? I'm pretty sure it was a link long ago but they > may have changed it.
Take a look at the code in timezone-data's pkg_config. It's commented and easy enough to follow for those who are comfortable with bash, as gentooers certainly /should/ be. =:^) That function (which is run as part of the handbook's installation instructions) checks for a symlink and specifically assumes the user knows what they are doing if it's a symlink, but defaults to a cp based on the timezone set in /etc/timezone, unless /etc/localtime is a symlink. So a symlink should work if a user creates it manually, but the file is normally copied. I'd guess the reason is because gentoo still tries to allow for a separate /usr, which would of course mean a dead symlink in early (pre- mount but for /) boot, which is when openrc tries to set the time, in ordered to properly check config file modification times to see if it needs to recache service ordering. Openrc then falls back to I think UTC, which will likely trigger a time-skew complaint when the cache files appear to be from the future (for folks in UTC-minus timezones, anyway). For people with /usr/share/zoneinfo/* on / (or who use an initr* that mounts /usr), the symlink should work fine, and is arguably easier to check, since you can just check where the symlink points instead of having to diff against the zoneinfo timezone file you /think/ it should be to be sure it's correct (which is what I did here, checking my own system to be sure it was set that way, before posting). But while my /usr is on / (and I'm on systemd so that particular issue wouldn't apply, but others might), I've left localtime as an actual file, because that's the default solution, thus most widely tested and least likely to cause additional bugs. I don't hesitate to diverge from the defaults where I have some reason to prefer doing it differently, and there are indeed lots of places I do just that and I sometimes see bugs nobody else seems to see as a result, but here, I don't really care, so I've picked my additional bug risks and don't find the need to make this one of them. =:^) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman