Bugzilla – Bug 883999
hostname lost while zypper dup from 13.1 to Factory or zypper dup of Factory
Last modified: 2014-10-02 11:56:12 UTC
lmuelle@hip:~> LC_ALL=POSIX ls -l /etc/{hostname,HOSTNAME} lrwxrwxrwx 1 root root 8 Jun 20 20:18 /etc/HOSTNAME -> hostname -rw-r--r-- 1 root root 11 Jun 18 11:01 /etc/hostname lmuelle@hip:~> cat /etc/hostname linux.site There is no rpmsave while /etc/HOSTNAME before was set to hip.suse.de
So the /etc/HOSTNAME link should be marked as %config, correct?
On Factory installation last dup'd 5 weeks ago, HOSTNAME was replaced with symlink to hostname containing linux.site without regard to original content of HOSTNAME during today's zypper dup (4 bit host hs80e).
%pre if [ "0$1" -ge "2" ]; then if [ -f /etc/HOSTNAME -a ! -h /etc/HOSTNAME ]; then if [ -f /etc/hostname ]; then mv /etc/hostname /etc/hostname.rpmsave fi mv /etc/HOSTNAME /etc/HOSTNAME.rpmsave fi fi %post if [ -f /etc/HOSTNAME.rpmsave ]; then cp /etc/HOSTNAME.rpmsave /etc/hostname fi could work?
Standa Brabec pointed out that there can be various setups according to /etc/{HOSTNAME,hostname} on the original system before the update. I tested %pre/%post from comment 3 like this: (1) There is /etc/HOSTNAME only. -------------------------------- $ ls -l /etc | grep -i hostname -rw-r--r-- 1 root root 11 Jun 26 12:44 HOSTNAME $ echo bleble > /etc/HOSTNAME $ rpm -Uhv netcfg-11.5-0.noarch.rpm --force $ ls -l /etc | grep -i hostname lrwxrwxrwx 1 root root 8 Jun 27 09:50 HOSTNAME -> hostname -rw-r--r-- 1 root root 7 Jun 27 09:47 HOSTNAME.rpmsave -rw-r--r-- 1 root root 7 Jun 27 09:50 hostname $ cat /etc/hostname bleble (2) There is /etc/HOSTNAME and /etc/hostname link to /etc/HOSTNAME. ------------------------------------------------------------------- $ ls -l /etc | grep -i hostname -rw-r--r-- 1 root root 7 Jun 27 10:01 HOSTNAME lrwxrwxrwx 1 root root 13 Jun 27 10:02 hostname -> /etc/HOSTNAME $ echo bleble > /etc/HOSTNAME $ rpm -Uhv netcfg-11.5-0.noarch.rpm --force $ ls -l /etc | grep -i hostname lrwxrwxrwx 1 root root 8 Jun 27 10:04 HOSTNAME -> hostname -rw-r--r-- 1 root root 7 Jun 27 10:02 HOSTNAME.rpmsave -rw-r--r-- 1 root root 7 Jun 27 10:04 hostname -rw-r--r-- 1 root root 11 Jun 27 09:13 hostname.rpmnew lrwxrwxrwx 1 root root 13 Jun 27 10:02 hostname.rpmsave -> /etc/HOSTNAME alef:/> cat /etc/hostname bleble (3) There is /etc/HOSTNAME and /etc/hostname, both regular files. ----------------------------------------------------------------- Unlikely, /etc/HOSTNAME and /etc/hostname can differ but that would mean conflict between them. $ ls -l /etc | grep -i hostname -rw-r--r-- 1 root root 16 Jun 27 10:09 HOSTNAME -rw-r--r-- 1 root root 16 Jun 27 10:09 hostname $ echo bleble.HOSTNAME > /etc/HOSTNAME $ echo bleble.hostname > /etc/hostname $ rpm -Uhv netcfg-11.5-0.noarch.rpm --force $ ls -l /etc | grep -i hostname lrwxrwxrwx 1 root root 8 Jun 27 10:11 HOSTNAME -> hostname -rw-r--r-- 1 root root 16 Jun 27 10:09 HOSTNAME.rpmsave -rw-r--r-- 1 root root 16 Jun 27 10:11 hostname -rw-r--r-- 1 root root 11 Jun 27 09:13 hostname.rpmnew -rw-r--r-- 1 root root 16 Jun 27 10:09 hostname.rpmsave $ cat /etc/hostname bleble.HOSTNAME (4) There is /etc/hostname and /etc/HOSTNAME, link to /etc/hostname. -------------------------------------------------------------------- $ ls -l /etc | grep -i hostname lrwxrwxrwx 1 root root 13 Jun 27 10:18 HOSTNAME -> /etc/hostname -rw-r--r-- 1 root root 11 Jun 26 12:44 hostname $ echo bleble > /etc/hostname $ ls -l /etc | grep -i hostname lrwxrwxrwx 1 root root 8 Jun 27 10:21 HOSTNAME -> hostname lrwxrwxrwx 1 root root 13 Jun 27 10:18 HOSTNAME.rpmsave -> /etc/hostname -rw-r--r-- 1 root root 7 Jun 27 10:19 hostname -rw-r--r-- 1 root root 11 Jun 27 09:13 hostname.rpmnew $ cat /etc/hostname bleble Does that serve our purpose? Or is there another scenario which would fail?
Standa Brabec suggested yesterday: %pre if [ "0$1" -ge "2" ]; then if [ -f /etc/HOSTNAME -a ! -h /etc/HOSTNAME ]; then mv /etc/HOSTNAME /etc/HOSTNAME.rpmsave fi if [ -h /etc/hostname ]; then rm /etc/hostname fi if [ -f /etc/hostname ]; then touch /etc/hostname.stamp fi fi %post if [ -f /etc/HOSTNAME.rpmsave ]; then if [ -f /etc/hostname.stamp ]; then rm /etc/hostname.stamp if cmp -s /etc/hostname /etc/HOSTNAME.rpmsave; then rm /etc/HOSTNAME.rpmsave else echo "/etc/hostname and /etc/HOSTNAME conflicted before installation" >&2 echo "/etc/hostname saved into /etc/hostname.rpmsave" >&2 mv /etc/hostname /etc/hostname.rpmsave mv /etc/HOSTNAME.rpmsave /etc/hostname fi else mv /etc/hostname /etc/hostname.rpmnew mv /etc/HOSTNAME.rpmsave /etc/hostname fi else # should not happen rm /etc/hostname.stamp fi
1: cf. Bug 872264 2: I don't see the following covered by the proposal: -rw-r--r-- 2 root root 13 Dec 23 2013 HOSTNAME -rw-r--r-- 2 root root 13 Dec 23 2013 hostname 3: Why not a hard link of hostname to existing HOSTNAME? 4: One of my pet peeves routinely violated by zypper and yast activity is any file whose content before touching is identical to that after touching and my finding the original timestamp has not survived along with the original content. This very irritating behavior happens constantly to /etc/fstab and various files in /etc/sysconfig/ among others, mostly in the /etc/ tree. Would the renaming of /etc/HOSTNAME to /etc/hostname be another as a result of the proposal?
2. The script in the comment 5 should handle it: %pre mv /etc/HOSTNAME /etc/HOSTNAME.rpmsave %post rm /etc/HOSTNAME.rpmsave (After installation, /etc/HOSTNAME will be a symlink. 3. Maybe it is possible as well. But some editors will break the hard link. 4. Time stamp of /etc/HOSTNAME should survive in /etc/hostname.
In order to not have a current timestamp polluting either HOSTNAME or hostname, before doing upgrades I set a hard link from HOSTNAME to hostname, then set HOSTNAME immutable. This halts the upgrade process until I tell it to ignore its inability to create a new HOSTNAME with a current timestamp.
Guys, The change /etc/HOSTNAME -> /etc/hostname + symlink /etc/HOSTNAME do not come from netcfg package, so discussion if it should be hardlink and why we don't maintain timestamps do not belong to this bug, at least to my understanding. See bug 858908 for the reference.
(In reply to comment #10) > The change /etc/HOSTNAME -> /etc/hostname + symlink /etc/HOSTNAME do not come not come == not initiated by
(In reply to comment #7) > 2: I don't see the following covered by the proposal: > -rw-r--r-- 2 root root 13 Dec 23 2013 HOSTNAME > -rw-r--r-- 2 root root 13 Dec 23 2013 hostname What exactly do you think by 'not covered'? That the hardlink hierarchy is not maintained during the update?
(In reply to comment #12) > What exactly do you think by 'not covered'? That the hardlink hierarchy is not > maintained during the update? Yes. Given the extent to which various unchanged config files in the /etc tree get new timestamps when various package updates occur, it would not surprise me, hence the question. What bothers me more is absent using a hardlink between the two, HOSTNAME gets a new create date when hostname gets "created" via mv to HOSTNAME. If it was up to me, the update process would hard link instead of moving, creating a soft link, and leaving behind litter in the form of an .rpmsave or .rpmnew. Better still would be to do no more than a rename, period, dispensing with the HOSTNAME that is pointlessly unique among major distros to openSUSE/SLEx.
Is that better? %pre if [ "0$1" -ge "2" ]; then if [ -f /etc/HOSTNAME -a ! -L /etc/HOSTNAME ]; then if [ -f /etc/hostname ]; then mv /etc/hostname /etc/hostname.rpmsave fi ln -f /etc/HOSTNAME /etc/HOSTNAME.rpmsave rm /etc/HOSTNAME fi fi %post if [ -f /etc/HOSTNAME.rpmsave -a ! -L /etc/HOSTNAME.rpmsave ]; then cp -a /etc/HOSTNAME.rpmsave /etc/hostname fi As far as I tested (similarly like summarized in comment 4): before update: ============== # | /etc/HOSTNAME | /etc/hostname | probability ---|-------------------------------------------- 1. | regular | - | very high 2. | - | regular | very low 3. | regular | symlink | high 4. | symlink | regular | very low 5. | regular | regular | very low 6. | hardlink | hardlink | high after update: ============= 1. lrwxrwxrwx 1 root root 8 Jul 24 09:21 HOSTNAME -> hostname -rw-r--r-- 1 root root 7 Jul 24 09:19 HOSTNAME.rpmsave -rw-r--r-- 1 root root 7 Jul 24 09:19 hostname hostname and HOSTNAME.rpmsave have content and timestamp of original HOSTNAME 2. lrwxrwxrwx 1 root root 8 Jul 23 13:25 HOSTNAME -> hostname -rw-r--r-- 1 root root 7 Jul 23 13:24 hostname -rw-r--r-- 1 root root 11 Jul 23 13:09 hostname.rpmnew hostname untouched 3. lrwxrwxrwx 1 root root 8 Jul 24 09:39 HOSTNAME -> hostname -rw-r--r-- 1 root root 7 Jul 24 09:38 HOSTNAME.rpmsave -rw-r--r-- 1 root root 7 Jul 24 09:38 hostname -rw-r--r-- 1 root root 11 Jul 24 08:51 hostname.rpmnew lrwxrwxrwx 1 root root 13 Jul 24 09:38 hostname.rpmsave -> /etc/HOSTNAME hostname carries the content and timestamp of original HOSTNAME 4. lrwxrwxrwx 1 root root 8 Jul 24 08:55 HOSTNAME -> hostname lrwxrwxrwx 1 root root 13 Jul 24 08:54 HOSTNAME.rpmsave -> /etc/hostname -rw-r--r-- 1 root root 7 Jul 24 08:54 hostname -rw-r--r-- 1 root root 11 Jul 24 08:51 hostname.rpmnew hostname carries the content and timestamp of original HOSTNAME 5. lrwxrwxrwx 1 root root 8 Jul 24 09:46 HOSTNAME -> hostname -rw-r--r-- 1 root root 16 Jul 24 09:44 HOSTNAME.rpmsave -rw-r--r-- 1 root root 16 Jul 24 09:44 hostname -rw-r--r-- 1 root root 11 Jul 24 08:51 hostname.rpmnew -rw-r--r-- 1 root root 16 Jul 24 09:45 hostname.rpmsave *.rpmsave carry contents and timestamps of respective originals hostname carries contents and timestamp of original HOSTNAME 6. lrwxrwxrwx 1 root root 8 Jul 24 09:54 HOSTNAME -> hostname -rw-r--r-- 2 root root 7 Jul 24 09:53 HOSTNAME.rpmsave -rw-r--r-- 1 root root 7 Jul 24 09:53 hostname -rw-r--r-- 1 root root 11 Jul 24 08:51 hostname.rpmnew -rw-r--r-- 2 root root 7 Jul 24 09:53 hostname.rpmsave hostname and *rpmsave carry content and timestamp of original file
Needinfo provided personally.
*** Bug 887039 has been marked as a duplicate of this bug. ***
Package submitted. Please test. If you meet any other problem which I can resolve on netcfg side, please let me know.
This is an autogenerated message for OBS integration: This bug (883999) was mentioned in https://build.opensuse.org/request/show/242350 Factory / netcfg
Last 2-3 systems upgraded with HOSTNAME and hostname hard linked survived intact, but I just did host g5eas where HOSTNAME and hostname were hard linked to start with, and afterward HOSTNAME was a currently timestamped symlink to hostname. When I deleted the symlink and recreated the hard link, I wound up with 3 links total, the third to hostname.rpmsave, which I've now deleted.
Ditto, sort of, comment 20 on host gx62b which was last dup'd 24 July. This time there were HOSTNAME.rpmsave and hostname.rpmsave preserved as hard links (to each other?), with timestamp of hostname preserved and with no hard links, while HOSTNAME was a current timestamped symlink to hostname.
netcfg-11.5-23.1 refuses to install when hostname exists as immutable hard link to HOSTNAME