| Subject: | Re: kernel build time |
|---|---|
| From: | Philip Paeps <philip+usenet@xxxxxxxx> |
| Date: | 29 Jul 2008 13:43:59 GMT |
| Newsgroups: | be.comp.os.linux |
Philip Paeps <philip+usenet@xxxxxxxx> wrote:
> Toni Van Remortel <toni.van.remortel@xxxxxxxxxxxxxx> wrote:
> > Ik ben een Nagios plugin aan het schrijven die de running kernel versie en
> > build date vergelijkt met de on disk geïnstalleerde kernel. Kwestie van te
> > zien welke systemen er nog moeten herstart worden na upgrades.
> >
> > Voor de running kernel is het simpel. 'uname -r' en 'uname -v' doen hun
> > ding.
> >
> > On disk kan ik de versie wel uit /boot/vmlinuz-x.x.x-x halen, maar de
> > build date niet. Op Debian kan ik die wel terugvinden in
> > /boot/config/x.x.x-x, maar op Ubuntu staat die info er bv niet in.
> >
> > Kent iemand een manier om de build date van een kernel image on disk
> > tevoorschijn te toveren?
>
> Zit de versie niet in de tags van de real mode kernel? If so, kan je die
> wel uit de binary plukken met een beetje geknutsel met objdump. De build
> date is gewoon de mtime van de image file.
Je zult wat moeten rekenen en het zal architectuur-afhankelijk worden. Kijk
even naar header.S in linux/arch/x86/boot. Achter de header signature (HdrS)
zit een kernel versie en een pointer naar de string.
Voor x86 zou je dus je kernel image kunnen hexdumpen en naar de header kijken
op offset 0x200 (512 bytes). Daar vind je:
o Twee bytes: Een jump (0xeb) naar ergens
o Vier bytes: 48 64 72 53
o Twee bytes: Header versie
o Vier bytes: 00 00 00 00
o Twee bytes: SYSSEG
- Meestal 0x1000, 0x0010 in wrong-endian.
o Vier bytes: Pointer naar string, -512
- Die -512 is blijkbaar voor hysterical raisins.
- Hou er rekening mee dat x86 wrong-endian is!
Op een machine die hier naast me staat:
0000200: eb2e 4864 7253 0302 0000 0000 0010 4009 ..HdrS........@.
Eenvoudig rekensommetje: 0x0940 + 0x0200 = 0x0b40
0000b40: 322e 362e 392d 3432 2e45 4c20 2862 6863 2.6.9-42.EL (bhc
0000b50: 6f6d 7069 6c65 4068 7332 302d 6263 312d ompile@hs20-bc1-
0000b60: 312e 6275 696c 642e 7265 6468 6174 2e63 1.build.redhat.c
0000b70: 6f6d 2920 2331 2057 6564 204a 756c 2031 om) #1 Wed Jul 1
0000b80: 3220 3233 3a31 363a 3433 2045 4454 2032 2 23:16:43 EDT 2
0000b90: 3030 3600 fab0 80e6 70cb 5150 31c9 8ee1 006.....p.QP1...
Jawel. Daar staat iets dat verdacht veel op een version string lijkt.
Voor de build date kijk je best naar de timestamp van de image file. De Linux
version string heeft geen vaste lengte. Als je écht creatief wil zijn, kan je
alles wat achter de volgende spatie achter ") " en de eerstvolgende 0x00 komt
door strftime() gooien. But why would you want to? :-)
Deze analyse kost je een pint. :-)
- Philip
--
Philip Paeps Please don't email any replies
philip@xxxxxxxx I follow the newsgroup.
Exciting plays occur only while you are watching the
scoreboard or out buying a hot dog.
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: dualcomputer, Muylle Bart |
|---|---|
| Next by Date: | Re: kernel build time, Philip Paeps |
| Previous by Thread: | Re: kernel build time, Philip Paeps |
| Next by Thread: | Re: kernel build time, Toni Van Remortel |
| Indexes: | [Date] [Thread] [Top] [All Lists] |