where does uname get version number?

John aqqa11 at earthlink.net
Fri Apr 18 17:07:41 UTC 2014

-----Original Message-----
>From: Trond Endrestøl <Trond.Endrestol at fagskolen.gjovik.no>
>Sent: Apr 18, 2014 9:38 AM
>To: John <aqqa11 at earthlink.net>
>Cc: FreeBSD questions <freebsd-questions at freebsd.org>
>Subject: Re: where does uname get version number?
>On Fri, 18 Apr 2014 00:48-0400, John wrote:
>> -----Original Message-----
>> >From: Eduardo Morras <emorrasg at yahoo.es>
>> >Sent: Apr 17, 2014 3:07 AM
>> >To: freebsd-questions at freebsd.org
>> >Subject: Re: where does uname get version number?
>> >
>> >On Wed, 16 Apr 2014 23:39:06 -0400 (GMT-04:00)
>> >John wrote:
>> >
>> >> Do you want me to add the following to /etc/profile ?
>> >> 
>> >> UNAME_v="FreeBSD 9.2-RELEASE #0 r243825: Tue Dec  4 09:23:10 UTC
>> >> 2012     root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC"
>> >> export UNAME_v UNAME_r="9.2-RELEASE"
>> >> export UNAME_r
>> >> 
>> >> But, then do I have to manually change this version number
>> >> in /etc/profile for each upgrade in the future?  That would be quite
>> >> a hassle for each upgrade to -p5, -p6, ... etc.  Is that the way to
>> >> go?
>> >
>> >No, freebsd-update should update your /etc/profile and UNAME_* system vars.
>> >
>> >> 
>> >> I also tried:
>> >> 
>> >> # unsetenv UNAME_r 
>> >> 
>> >> but "uname -r" still shows the incorrect "9.1-RELEASE" even though
>> >> all other files mentioned above are in "9.2-RELEASE".
>> >> 
>> >> So still, where did uname get that incorrect version number?
>> >
>> >If there's no UNAME_* defined, you undefined it with #unsetenv, uname reads them from /usr/obj/usr/src/sys/$KERNEL/vers{ion,.c} files. Trond suggest to delete them before rebuilding, so they get updated too, nice suggestion. Mine sets different information in UNAME_* and vers{ion,.c} files. This discrepancy should be avoided.
>> >
>> >---   ---
>> Thanks.  I don't have the folder /usr/obj/usr/src/sys/ .  Under /usr/obj/usr/src/ I only see two folders: lib32 and tmp.
>> I did find a file /usr/obj/lib32/usr/src/include/vers.c , that contains the incorrect version:
>> #define SCCSSTR "@(#)FreeBSD 9.1-RELEASE #0: Mon Jan 21 15:45:14 UTC 2013"
>> #define VERSTR "FreeBSD 9.1-RELEASE #0: Mon Jan 21 15:45:14 UTC 2013\n    root@:/usr/obj/lib32/usr/src/include\n"
>> #define RELSTR "9.1-RELEASE"
>> That's closer now!  However, I never compiled the kernel, I only 
>> installed 9.0-RELEASE and ran freebsd-update to upgrade to 
>> 9.2-RELEASE, so don't know how these /usr/obj files were produced.  
>> I installed virtualbox before, maybe that produced /usr/obj ?
>> Anyway, I have deleted these folders /usr/src/ and /usr/obj/ , then 
>> ran svn to install /usr/src/ , and then rebooted.  Yet "uname -a" 
>> still says the incorrect 9.1-RELEASE.  Now I don't even have 
>> /usr/obj , where does uname get that incorrect version now?
>If I understand this at all, freebsd-update simply downloads and 
>installs precompiled bits and pieces of the base system, including the 
>kernel. The system needs to be rebooted manually to be able to use an 
>updated kernel and other long running pieces like init(8).
>Checking out a new working copy of the source tree using svn is only 
>the first step of a multi-step approach of updating the base system 
>using the source tree; the remaining steps being compiling the world 
>and the kernel, installing the kernel, rebooting the system, and if 
>all goes well, install world, merge any changes to the config files, 
>and optionally delete obsolete stuff, before doing the final reboot. 
>Yes, always perform the final reboot to verify that the system is able 
>to reboot in case of a panic at a later stage.
>If the new kernel didn't load well, simply reboot, interrupt the boot 
>loader, unload the bad kernel, load the old kernel 
>(/boot/kernel.old/kernel), and boot the system, followed by 
>mv /boot/kernel /boot/kernel.bad, and 
>mv /boot/kernel.old /boot/kernel.
>Next time, it's sufficient to update the working copy (svn up 
>/usr/src), rather than erasing /usr/src and do a complete checkout, 
>before performing the remaining steps as outlined above.
>I haven't tried freebsd-update at all, I've always done my upgrades 
>using the source, I do find it strange that the new kernel doesn't 
>identify itself as being newer than the previous kernel.
>And why must freebsd-update fiddle with the UNAME_* env vars?

Thanks for the clarification!  I don't compile kernel, I only installed 9.0-RELEASE and binary upgraded to 9.2-RELEASE using freebsd-update.  (I'm worried about the lifetime of the SSD in my laptop so am trying to avoid compiling, but that's a side topic.)

I now totally deleted /usr/src (and /usr/obj), because I don't need them now as I now install virtualbox from pkg.

But after rebooting, "uname -a" still shows 9.1-RELEASE.  As mentioned before, all files such as kernel etc are in 9.2, where does uname get that incorrect version now?

More information about the freebsd-questions mailing list