Tomando ejemplo de Ubuntu, ¿podemos decir si el kernel fue compilado a medida en lugar de lo que viene con la distribución?
Tomando ejemplo de Ubuntu, ¿podemos decir si el kernel fue compilado a medida en lugar de lo que viene con la distribución?
Respuestas:
Claro, solo verifique si lo dpkg
sabe.
Primero verifique la versión del kernel que está ejecutando.
uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Luego diga dpkg
que busque el archivo de imagen del núcleo en la dpkg
base de datos.
dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
O, mejor, usar dlocate
del dlocate
paquete. dlocate
primero crea un caché a partir de la dpkg
base de datos y lo usa. Entonces es rápido.
dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Finalmente, verifique que los archivos de Debian contengan este paquete.
apt-cache policy linux-image-3.2.0-4-amd64
linux-image-3.2.0-4-amd64:
Installed: 3.2.68-1+deb7u1
Candidate: 3.2.68-1+deb7u1
Version table:
*** 3.2.68-1+deb7u1 0
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
100 /var/lib/dpkg/status
3.2.65-1 0
500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages
Si no lo hacen, entonces es un paquete personalizado. Por supuesto, si dpkg no conoce el archivo de imagen, su núcleo no forma parte de un paquete, sino que se ha compilado localmente.
Tenga en cuenta que apt
puede notar la diferencia entre un paquete en el archivo de Debian y uno compilado localmente del mismo nombre. Creo que comprueba el md5sum del paquete, pero olvido los detalles de cómo lo hace. Los paquetes binarios contienen información sobre hashes, consulte la parte inferior de apt-cache show linux-image-3.2.0-4-amd64
, por ejemplo. p.ej
Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15
apt-cache show ...
funciona. Veo que escribí mal. Corrigiendo ahora.
Mínimamente, uname -r
dará la versión kernal, como 3.18.6
. Sin embargo, cuando se compila el núcleo, se puede configurar una cadena adicional y adjuntarla, y las distribuciones generalmente hacen esto para indicar su propio nivel de parche (después de un guión) y sabor, como 3.18.6-32-generic
. Esa es una pista; obviamente, usar su propia cadena cuando crea un núcleo personalizado puede ser otra.
uname -v
da una cadena que por defecto es algo como esto
#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015
El número es arbitrario en el sentido de que es la cantidad de veces que se construyó este kernel utilizando un árbol de origen específico sin que se reinicie el árbol; esto podría ser útil cuando está construyendo el suyo propio. SMP
indica un núcleo multitarea (es decir, no en tiempo real) y PREEMPT es otra opción de configuración relacionada con el "modelo de preferencia" del planificador. Pero la gran pista aquí es probablemente el momento en que se construyó. Esto podría usarse para hacer coincidir la marca de tiempo de modificación / cambio en el núcleo mismo, teniendo en cuenta que se puede cambiar, por ejemplo, con touch
. Por ejemplo, stat
en ese núcleo se ve así:
File: ‘3.19-goldilocksSpecial’
Size: 6858880 Blocks: 13400 IO Block: 4096 regular file
Device: 801h/2049d Inode: 3156605 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
Birth: -
Lo cual está bastante en línea con Mon Mar 9 13:55:25 EDT 2015
.
Igual que cualquier otro
sudo apt-cache policy linux-generic
es la versión instalada a través del administrador de paquetes y
uname -r
compara las versiones
para mi es
linux-generic:
Installed: 3.19.0.15.14
Candidate: 3.19.0.15.14
y
3.19.0-15-generic
que indican la misma versión
/boot
. Mi punto es que no veo por qué esperarías que la salida de uname
cambie si solo vuelves a compilar mientras cambias algunas opciones. En ese caso, esperaría eso apt-cache
y uname -r
devolveré la misma información, a pesar del hecho de que ha compilado localmente.
Yo diría que la respuesta más verdadera en general es "no, no puedes". Existen varios métodos que pueden ayudar en ciertos casos y estos ya se han sugerido, pero todos parecen perder de vista cómo surgió esta situación. En verdad, si está utilizando un kernel personalizado, ese kernel puede hacer cualquier cosa, incluso ocultar su presencia o parecer un kernel diferente.
Me preocuparía si realmente está ejecutando un núcleo personalizado y no lo sabía. La única forma confiable de saber qué kernel se está utilizando es realizar un seguimiento cuidadoso de qué kernel compila e instala.
Si realmente no está seguro de qué núcleo está ejecutando el sistema o de qué fuentes se construyó este núcleo o de dónde proviene, consideraría seriamente reinstalar el sistema operativo desde una buena imagen conocida y ser más cuidadoso en el futuro sobre qué núcleos intentará arrancar de o uso.