Re: git: fc43a1b6842a - stable/14 - tzsetup: symlink /etc/localtime instead of copying
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 01 Sep 2024 21:12:46 UTC
On Fri, 30 Aug 2024 09:04:04 +0200, "Herbert J. Skuhra" <herbert@gojira.at> wrote: > > On Tue, 27 Aug 2024 10:09:00 +0200, "Herbert J. Skuhra" wrote: > > > > On Thu, 08 Aug 2024 06:35:38 +0200, "Sean C. Farley" wrote: > > > > > > On Thu, 1 Aug 2024, Ed Maste wrote: > > > > > > > The branch stable/14 has been updated by emaste: > > > > > > > > URL: https://cgit.FreeBSD.org/src/commit/?id=fc43a1b6842afa806dfd7ba48de5bece63d04456 > > > > > > > > commit fc43a1b6842afa806dfd7ba48de5bece63d04456 > > > > Author: Ed Maste <emaste@FreeBSD.org> > > > > AuthorDate: 2022-10-14 16:44:35 +0000 > > > > Commit: Ed Maste <emaste@FreeBSD.org> > > > > CommitDate: 2024-08-01 15:11:45 +0000 > > > > > > > > tzsetup: symlink /etc/localtime instead of copying > > > > > > > > Using a symlink means that new timezone data (installed by an errata > > > > update, say) will be usable without having to be copied again. > > > > > > > > Reviewed by: bapt, kevans, philip > > > > Sponsored by: The FreeBSD Foundation > > > > Differential Revision: https://reviews.freebsd.org/D37005 > > > > > > > > (cherry picked from commit 5e16809c953f4cd19fadb1767469dec319de0353) > > > > > > I ran across an issue with this when using "etcupdate -D" to update a > > > jail from the host. "tzsetup -r -C /tmp/chroot", as called by > > > etcupdate, prepends the path of the chroot to the link which breaks > > > things inside the jail. > > > > I have this issue whenerver I update jails with 'make installworld > > DESTDIR=$X'. Will this be fixed or reverted (at least) in stable/14? > > Or works as expected? > > Maybe: > > diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c > index 617de4efb765..38d7ccf5e00c 100644 > --- a/usr.sbin/tzsetup/tzsetup.c > +++ b/usr.sbin/tzsetup/tzsetup.c > @@ -884,7 +884,7 @@ main(int argc, char **argv) > } else { > sprintf(path_zonetab, "%s/%s", chrootenv, _PATH_ZONETAB); > sprintf(path_iso3166, "%s/%s", chrootenv, _PATH_ISO3166); > - sprintf(path_zoneinfo, "%s/%s", chrootenv, _PATH_ZONEINFO); > + sprintf(path_zoneinfo, "%s", _PATH_ZONEINFO); > sprintf(path_localtime, "%s/%s", chrootenv, _PATH_LOCALTIME); > sprintf(path_db, "%s/%s", chrootenv, _PATH_DB); > sprintf(path_wall_cmos_clock, "%s/%s", chrootenv, Or: diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c index 617de4efb765..30d019214ab5 100644 --- a/usr.sbin/tzsetup/tzsetup.c +++ b/usr.sbin/tzsetup/tzsetup.c @@ -884,7 +884,7 @@ main(int argc, char **argv) } else { sprintf(path_zonetab, "%s/%s", chrootenv, _PATH_ZONETAB); sprintf(path_iso3166, "%s/%s", chrootenv, _PATH_ISO3166); - sprintf(path_zoneinfo, "%s/%s", chrootenv, _PATH_ZONEINFO); + strcpy(path_zoneinfo, _PATH_ZONEINFO); sprintf(path_localtime, "%s/%s", chrootenv, _PATH_LOCALTIME); sprintf(path_db, "%s/%s", chrootenv, _PATH_DB); sprintf(path_wall_cmos_clock, "%s/%s", chrootenv, With the unpatched version of tzsetup I get: 60294: open("/mnt//var/db/zoneinfo",O_RDONLY,0666) = 3 (0x3) 60294: fstat(3,{ mode=-rw-r--r-- ,inode=16728,size=14,blksize=4096 }) = 0 (0x0) 60294: read(3,"Europe/Berlin\n",4096) = 14 (0xe) 60294: access("/mnt//usr/share/zoneinfo/Europe/Berlin",R_OK) = 0 (0x0) 60294: unlink("/mnt//etc/localtime") = 0 (0x0) 60294: symlink("/mnt//usr/share/zoneinfo/Europe/Berlin","/mnt//etc/localtime") = 0 (0x0) 60294: open("/mnt//var/db/zoneinfo",O_WRONLY|O_CREAT|O_TRUNC,0666) = 4 (0x4) 60294: fstat(4,{ mode=-rw-r--r-- ,inode=16728,size=0,blksize=4096 }) = 0 (0x0) 60294: write(4,"Europe/Berlin\n",14) = 14 (0xe) # ls -l /mnt/etc/localtime lrwxr-xr-x 1 root wheel 38 Sep 1 22:30 /mnt/etc/localtime -> /mnt//usr/share/zoneinfo/Europe/Berlin And with the patched version: 61015: open("/mnt//var/db/zoneinfo",O_RDONLY,0666) = 3 (0x3) 61015: fstat(3,{ mode=-rw-r--r-- ,inode=16728,size=14,blksize=4096 }) = 0 (0x0) 61015: read(3,"Europe/Berlin\n",4096) = 14 (0xe) 61015: access("/usr/share/zoneinfo/Europe/Berlin",R_OK) = 0 (0x0) 61015: unlink("/mnt//etc/localtime") = 0 (0x0) 61015: symlink("/usr/share/zoneinfo/Europe/Berlin","/mnt//etc/localtime") = 0 (0x0) 61015: open("/mnt//var/db/zoneinfo",O_WRONLY|O_CREAT|O_TRUNC,0666) = 4 (0x4) 61015: fstat(4,{ mode=-rw-r--r-- ,inode=16728,size=0,blksize=4096 }) = 0 (0x0) 61015: write(4,"Europe/Berlin\n",14) = 14 (0xe) # ls -l /mnt/etc/localtime lrwxr-xr-x 1 root wheel 33 Sep 1 22:31 /mnt/etc/localtime -> /usr/share/zoneinfo/Europe/Berlin But maybe the link should be created like: # ls -l /mnt/etc/localtime lrwxr-xr-x 1 root wheel 38 Sep 1 23:07 /mnt/etc/localtime -> ../../usr/share/zoneinfo/Europe/Berlin -- Herbert