Date: Sat, 10 Jan 2004 02:20:57 -0500 From: Garance A Drosihn <drosih@rpi.edu> To: freebsd-sparc64@freebsd.org Cc: harti@freebsd.org Subject: Re: Gearing up for 64-bit time_t on sparc64 Message-ID: <p06020452bc2549a6ba9e@[128.113.24.47]> In-Reply-To: <20040107174346.GA50142@dragon.nuxi.com> References: <200312212239.38557.craig@xfoil.gank.org> <p0602040fbc0cf0dddf9e@[128.113.24.47]> <p06020426bc1fe1f269d8@[128.113.24.47]> <20040106095942.O66232@beagle.fokus.fraunhofer.de> <20040106182824.GA42422@dragon.nuxi.com> <p0602042abc2138069732@[128.113.24.47]> <20040107174346.GA50142@dragon.nuxi.com>
next in thread | previous in thread | raw e-mail | index | archive | help
After reading over what Harti had done, and staring at the standard makefiles awhile, I ended up writing one helper- script. With this helper-script, the upgrade to 64-bits went fairly smooth. For my switch, what I did was: cvsup to -current update & install that snapshot (using the standard updating procedures, this is still the 32-bit time_t system) 1) change __time_t to __int64_t 2) rm -Rf /usr/obj/usr/src/* 3) make buildworld && make buildkernel && make installkernel (wait seven hours...) 4) mergemaster -p <- not really needed... 5) reboot into single-user mode. 6) cd /usr/src <- or NFS-mounted equivalent 7) installworld_nk <- magic script 8) mergemaster <- not really needed... 9) Reboot, and come up on complete new 64-bit time_t system. 10) portupgrade -Rr -f ruby portupgrade 11) portupgrade -Rr -f bash python 12) ---> Have To Do Something with CVSUP <--- (in my case, I'll probably rebuild all of ezm3 and cvsup, but I doubt that everyone would want to do that. We probably need to have a pre-built 64-bit cvsup available as pkg or a download) 13) portupgrade other ports... Doing it this way, I hit no snags. Or at least, I haven't noticed any yet. This could be made even easier by collapsing the 'installworld_nk' script into some new 'installworld_nk' target in /usr/src/Makefile. The script tries to be as general a solution as possible -- it is not specific to this 64-bit time_t change. ("nk" is short for "New Kernel") Notes: 1) Since I only change this one single line, there really is no need for doing things like mergemaster. I really like the idea that when switching to 64-bit time_t, that should be the *only* change you're making from a system that you already know is working on your hardware. 4) If one would do 'mergemaster -p', it would probably be best do to it before shutting down, instead of after booting into a 64-bit kernel and 32-bit world. 5) Usually I cheat on this, and I reboot into multi-user mode and then 'shutdown now' to get into single-user mode. That cheat does not work well when making this change. You really have to 'boot -s', pick your shell, and do a 'mount -a'. Probably should start swap too, but I have enough ram that I don't have to care about that part. 5a) For the general case, this is the "shakey-ist" step, because I started up on a /bin/sh which was not built for the new kernel. For this specific change, that did not seem to be a problem. 6) The way I wrote the script, I expect it would work for people who do installs via NFS-mounted filesystems, perhaps mounted at somewhere other than /usr/src. However, I am not setup to test that. I am testing only the standard case of /usr/src and /usr/obj. 7) What the standard 'make installworld' does, is it looks for a list of programs, does a 'which $prog' on them, and copies all of those (from the "old system") into a temp directory, and changes PATH to use that directory. What my script does is take that same list of programs, copies them out of ${.OBJDIR} into a temp directory, changes PATH to add on the new directory, removes one PATH= command from a copy of /usr/src/Makefile, and then runs the standard 'installworld' target. So, using this tactic it should be true that *every* program needed by the installworld process will match the new kernel. I know that doesn't happen for /bin/sh, and I can't prove that it did happen for all other programs, but I did get through the entire installworld without error-ing out. That's why I say this could be collapsed into a new standard target. The script is only doing a slight variation from the standard installworld target. I am not going to *do* that, I'm just saying it could be done. 10) I use portupgrade to update ports, so I figured this was the obvious first-step. After that, I've just been upgrading ports which "I expect" need to be upgraded. After that, I did the dumb test of: irb <- interactive ruby test = Time.now() test += 3600*24*365 and kept repeating the last command. On a 32-bit time_t, the command errors out in 2038. On the new system, it just keeps going up. I hope to do a repeat test of all of this work sometime over the weekend. I also might try to make some more improvements. -- Garance Alistair Drosehn = gad@gilead.netel.rpi.edu Senior Systems Programmer or gad@freebsd.org Rensselaer Polytechnic Institute or drosih@rpi.edu
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p06020452bc2549a6ba9e>