where does uname get version number in FreeBSD RELEASE?
I installed FreeBSD 9.1-RELEASE, after binary upgrading to 9.2-RELEASE using freebsd-update, all files I checked are correctly in 9.2-RELEASE-p4. For example:
-
the kernel contains the new version:
# strings /boot/kernel/kernel | grep RELEASE|grep 9 @(#)FreeBSD 9.2-RELEASE-p4 #0: Tue Apr 8 18:08:22 UTC 2014 FreeBSD 9.2-RELEASE-p4 #0: Tue Apr 8 18:08:22 UTC 2014 9.2-RELEASE-p4
-
the first line of /etc/hosts shows it is upgraded to 9.2:
# $FreeBSD: release/9.2.0/etc/hosts 109997 2003-01-28 21:29:23Z dbaker $
I asked on another forum and have verified that:
I never compiled kernel, and do not have /usr/src and /usr/obj folders.
the default /etc/profile is unchanged, in particular I never defined UNAME_* vars .
I also tried "unsetenv UNAME_r"
However, uname somehow shows the wrong version 9.1:
# uname -a
FreeBSD localhost.localdomain 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
So where does uname get the version number from? Which file(s) might not have been upgraded? Thank you!
FreeBSD uname
is using sysctl
values to fill-in its output, so there is no file to update except for the kernel.
Here are the corresponding sysctl
key to uname
options (from usr.bin/uname/uname.c):
-
-i
: kern.ident -
-m
: hw.machine -
-n
: kern.hostname -
-p
: hw.machine_arch -
-r
: kern.osrelease -
-s
or-o
: kern.ostype -
-v
: kern.version
It seems your actual kernel is not the one you think. You can check the kernel file in use with:
# sysctl kern.bootfile