NOMBRE
make−kpkg − construye paquetes Debian con núcleos a partir de las fuentes
SINOPSIS
make−kpkg [opciones] [objetivo [objetivo ...]]
DESCRIPCIÓN
Esta página del manual explica la utilidad make−kpkg , usada para crear paquetes Debian relacionados con el núcleo. La utilidad debe ejecutarse desde el directorio superior de las fuentes del núcleo, el cual ya debe de haber sido configurado previamente (a menos que se use el objetivo configure). Normalmente, el programa se ejecuta como superusuario o bajo fakeroot, sino hay que indicar a make−kpkg como convertirse en superusuario, por ejemplo:
make−kpkg −−rootcmd fakeroot kernel_image
El paquete Debian se crea en el directorio padre al directorio donde se ejecute esta orden.
También, tenga en cuenta que algunas versiones de gcc no interaccionan bien con las fuentes del núcleo (gcc 2.95 tiene problemas compilando el núcleo sin la opción ’−fno−strict−aliasing’ ). Este asunto ha sido cuidado en los núcleos recientes (las series 2.2 y 2.4 están bien) (Creo que puede necesitar editar el Makefile para núcleos anteriores, o alguna otra cosa). Puede controlar que versión se usa para compilar el núcleo estableciendo las variables CC y HOSTCC en el Makefile principal del núcleo. Puede hacer esto simplemente con
% MAKEFLAGS="CC=gcc−2.95" make−kpkg ...
(por favor, lea el Makefile principal para saber que variables pueden establecerse).
OPCIONES
−−help
Muestra el modo de uso.
−−revision número
Cambia el número de revisión de los paquetes a número. Esto tiene algunas restricciones: la opción −−revision sólo tiene efecto en la fase de configuración (en otras palabras, si existe un fichero llamado stamp−configure , esta opción no tiene efecto −− ejecute make−kpkg clean o elimine manualmente los ficheros stamp−configure y stamp−debian para que tenga efecto −− Recomiendo encarecidamente make−kpkg clean a menos que sepa lo que está haciendo). Adicionalmente, los paquetes oficiales con las fuentes proporcionan su propio número de versión, por eso, make−kpkg. no modifica algunas cosas, incluyendo el número de revisión de Debian. Si quiere cambiar el número de revisión de unas fuentes oficiales (esto implica que existe debian/official y no está vacío), asegúrese de eliminar debian/official antes de ejecutar make−kpkg clean para que esta opción tenga efecto. Por eso, si desea volver a ejecutar make−kpkg con un número de versión diferente, tiene que asegurarse de hacer borrón y cuenta nueva. La versión sólo puede contener caracteres alfanuméricos y los caracteres + y . (punto y signo más) y debe de contener un dígito. Consulte las Normas de Debian (Debian Policy) para más detalles. Realmente, esto es mentira: los responsables de los núcleos y módulos oficiales tienen permiso para usar guiones, pero está altamente desaconsejado para la mayoría de la gente, ya que no hay ningún tipo de comprobación del número de versión, y dpkg y otros pueden atascar al final de la compilación a menos que uno sepa lo que está haciendo. Opcionalmente, puede anteponer a la revisión un dígito seguido de dos puntos (:). Por omisión es 10.00.Custom a menos que esté establecida la variable de entorno DEBIAN_REVISION_MANDATORY , en cuyo caso se genera un error si no se especifica un número de versión, bien en la línea de órdenes o bien en el fichero de configuración.
−−append−to−version
tal
−−append_to_version tal
Este argumento ( tal ) se añade al valor de la variable EXTRAVERSION presente en el Makefile del núcleo. Dado que EXTRAVERSION es un componente de la versión del núcleo, también se añade al nombre del paquete, y, como tal, debe de cumplir las normas a las que están sujetos los nombres de los paquetes Debian. Esto quiere decir que sólo puede contener caracteres alfanuméricos en minúsculas y los caracteres − + . (guión, signo más y punto). Las letras en mayúsculas no están permitidas. Esto predomina sobre la variable de entorno APPEND_TO_VERSION. Por favor, dese cuenta que ebe ejecutar make−kpkg clean después de configurar el núcleo usando make (x|menu)?config, ya que esto crea el fichero include/linux/version.h sin el contenido de append_to_version (tal). Este fichero no será actualizado por make−kpkg (make−kpkg crea version.h si éste no existe, pero no lo toca si ya existe), y el núcleo final _no_ tendrá el contenido de append_to_version en su número de versión, esto hará que busque los módulos y símbolos en sitios incorrectos. La solución mas sencilla es borrar include/linux/version.h después de configurar y antes de compilar, o ejecutar make−kpkg clean después de configurar y antes de compilar. Dese cuenta de que una vez que use −−append_to_version tal para configurar o construir la imagen del núcleo, necesita usar la misma opción en ejecuciones posteriores de make−kpkg (por ejemplo, para construir módulos independientes, o cualquier cosa). make−kpkg no recuerda el argumento tal entre ejecuciones (esto es diferente con el argumento −−revision, que si se recuerda). Si le molesta que make−kpkg se queje acerca del uso de −−append_to_version cuando ya existe un fichero anterior, puede establecer la variable de entorno VERSION_H_OK que debería parar estos avisos.
−−flavour tal
Esta opción está deprecada en favor de −−append_to_version. Establece el sabor del núcleo según el argumento tal. El sabor también es añadido al nombre del paquete. Necesita un Makefile parcheado para que esto funcione apropiadamente (lea /usr/share/doc/kernel−package/lavours.gz). Sólo debe de contener caracteres alfanuméricos en minúsculas y los caracteres − + . (guión, signo más y punto). Las letras en mayúsculas no están permitidas. OTA: se desaconsejan los guiones. (Lea el capítulo 4 de las Normas de Debian para más detalles). Dese cuenta de que necesita ejecutar make−kpkg clean PRIMERO si desea recompilar una imagen del núcleo usando sabores.
−−added−modules tal
−−added_modules tal
El argumento debe ser una lista de módulos añadidos separada por comas (que no estén en el árbol principal del núcleo) que desea construir cuando invoque el objetivo modules_blah. Debe proporcionar la ruta completa del directorio donde residen los módulos, o sólo el nombre del módulo si se puede encontrar en MODULE_LOC, que por omisión apunta a /usr/src/modules. Por omisión se compilan todos los módulos en MODULE_LOC, cuando se invocan los objetivos modules_blah.
−−added−patches tal
−−added_patches tal
El argumento debe de ser una lista separada por comas de parches adicionales para el núcleo. Establece automáticamente la opción de configuración del núcleo patch_the_kernel a YES.
A diferencia de con los módulos, sólo debe proporcionar la base del nombre (n.t. del inglés basename) (no el nombre completo del fichero con el parche). Por cada fichero <nombre_parche> en la lista se sigue el siguiente proceso: Si el fichero se puede encontrar en los directorios ALL_PATCH_DIR/{apply,unpatch}/, entonces el fichero ALL_PATCH_DIR/apply/<nombre_parche> se ejecutará durante la fase de configuración (y presumiblemente esto aplicará el parche). Correspondientemente, el fichero ALL_PATCH_DIR/unpatch/<nombre_parche> debe de ejecutarse en la fase de borrado. Por omisión todos los parches se aplican invocando los ficheros ejecutables en ALL_PATCH_DIR/apply/ si es requerido (Bien estableciendo la opción de configuración patch_the_kernel o la variable de entorno PATCH_THE_KERNEL a YES). Dese cuenta de que los parches son DES−instalados de las fuentes del núcleo cuando se ejecuta el objetivo clean. Esto se puede prevenir estableciendo la variable de entorno NO_UNPATCH_BY_DEFAULT
Arriba, ALL_PATCH_DIR es por omisión un subdirectorio de /usr/src/kernel−patches/.
Algunas veces puede ser conveniente aplicar los parches cuando uno pide un parche específico usando esta opción, sin necesidad de tener que establecer explícitamente la variable de entorno. Puesto que establecer la variable de entorno PATCH_THE_KERNEL a YES puede ser peligroso, (puede darse el caso de que apliquen todos los parches cuando no quería aplicar ninguno, y no especificó la opción added_patches), también puede establecer la variable PATCH_THE_KERNEL a AUTO, en cuyo caso PATCH_THE_KERNEL será establecida a YES por usted cuando invoque −−added−patches tal, pero no en otra situación. Además, dese cuenta que si algún parche instala un script en el directorio ./debian/image.d/ , debe de llamarse a run−parts en sobre ese directorio nada más se construya la imagen del núcleo. El lugar de la raíz del paquete con la imagen siendo construida debe pasarse en la variable de entorno IMAGE_TOP, y la versión del núcleo se pasa mediante la variable de entorno version. De esta forma es posible que un parche inserte ficheros adicionales en la imagen, por ejemplo.
−−arch tal
Útil para establecer la arquitectura cuando se esté realizando compilación cruzada. La arquitectura se detecta automáticamente si no está realizando compilación cruzada. El mismo efecto se puede conseguir estableciendo la variable de entorno KPKG_ARCH
−−cross−compile tal
−−cross_compile tal
Es útil para definir la cadena de caracteres del objetivo cuando se esté realizando compilación cruzada. El mismo efecto se puede conseguir estableciendo la variable de entorno CROSS_COMPILE
−−subarch tal
Algunas arquitecturas (Alpha, y m68k) requieren un núcleo diferente para cada sub−arquitectura. Esta opción proporciona un modo de especificarlo como argumento de make−kpkg. Dese cuenta que se necesita soporte adicional para sub−arquitecturas en las fuentes del núcleo para que esto haga algo. El mismo efecto se puede conseguir estableciendo la variable de entorno KPKG_SUBARCH
−−arch−in−name
−−arch_in_name
Esta opción usa un nombre extendido para la imagen del núcleo empaquetada, introduciendo la sub−arquitectura en el nombre de ésta, de este modo se pueden crear scripts que creen múltiples sub−aquitecturas, una después de otra. El mismo efecto se puede conseguir estableciendo la variable de entorno ARCH_IN_NAME. Dese cuenta que sólo afecta al nombre del paquete, no a la localización de los módulos y demás.
−−pgpsign nombre
Establece la cadena a usar para firmar el fichero de cambios de cada módulo externo en /usr/src/modules/ usando PGP. Esta opción no tendrá en cuenta el comportamiento predeterminado ni la configuración del sistema guardada en /etc/kernel−pkg.conf o ~/.kernel−pkg.conf.
−−config objetivo
Cambia el tipo de configuración hecha desde el oldconfig por omisión. objetivo debe ser uno de oldconfig, config, menuconfig, gconfig, xconfig; o old, menu, g o x. Esta opción es particularmente útil cuando se usa TCH_THE_KERNEL por si alguno de los parches cambia las opciones de configuración disponibles. Nota Sin embargo make−kpkg busca al arrancar algunas opciones en el fichero de configuración, notablemente el hecho de que los módulos estén o no habilitados, de manera que cambiar el estado durante esta configuración retrasada resulta en un error. Si es necesario, cree el fichero de configuración lo más próximo a lo deseado antes de llamar a make−kpkg con esta opción.
−−targets
Muestra una lista de objetivos conocidos. Lea la sección Objetivos más abajo.
−−noexec
Pasa la opción −n a make de forma que las órdenes se muestran en pantalla pero no se ejecutan. Útil para depuración.
−−initrd
Si make−kpkg está generando un paquete del tipo kernel−image , realizará cualquier acción necesaria para que el núcleo se pueda cargar usando initrd. NOTA: esto requiere un parche, que no es estándar, cramfs de initrd a las fuentes del núcleo, (a menos que la configuración del mkinitrd haya sido modificada para usar cramfs) o se generará una imagen del núcleo imposible de arrancar. El parche normalmente se encuentra en las fuentes del núcleo proporcionadas por Debian, pero no se encuentra en las fuentes originales del núcleo. Esta opción puede implicar dependencias extra y modificaciones en los scripts del encargado del paquete. No tiene efecto cuando make−kpkg no está generando un paquete kernel−image. El mismo efecto se puede conseguir estableciendo la variable de entorno INITRD a cualquier valor no nulo. Esta opción provoca un aviso, para evitar el aviso establezca la variable de entorno INITRD_OK a cualquier valor no nulo. Para evitar el aviso en tiempo de instalación, lea kernel−img.conf(5), y añada una directiva warn_initrd en ese fichero.
−−zimage
Crea una imagen del núcleo del tipo zImage en vez de bzImage (predeterminada). Útil para gente con problemas con los núcleos bzImage.
−−bzimage
Crea un núcleo bzImage. Útil para gente que quiera un núcleo bzImage donde el núcleo predeterminado es un zImage.
.B −−mkimage
Debe ser una orden que produzca
una imagen initrd dado un directorio. Se pasa a la
opción −m del programa mkinitrd.
Por ejemplo, puede ser
"genromfs −d %s −f %s" o
"mkcramfs %s %s"
−−rootcmd tal
La orden que proporciona acceso de superusuario (por ejemplo, ’sudo’ o ’fakeroot’), necesitado por la opción −r de dpkg−buildpackage.
−−us |
Esta opción se pasa a dpkg−buildpackage, indica que el paquete no debe firmar las fuentes. Sólo es relevante para el objetivo buildpackage. | ||
−−uc |
Esta opción se pasa a dpkg−buildpackage, indica que el paquete no debe firmar el fichero de cambios (changelog). Sólo es relevante para el objetivo buildpackage. |
Las opciones
pueden acortarse a una única cadena más corta,
pudiendo introducirse además con el prefijo − o
−−, entre una opción y su valor se puede
usar tanto un espacio como un símbolo
’=’. También puede usar la forma
opción=valor; para más detalles sobre
ésta y otras variantes soportadas, lea la
página del manual Getopt::Long (3perl).
CONCURRENCY_LEVEL
Si está definida, esta variable establece el nivel de concurrencia usado por make para compilar el núcleo y el conjunto de módulos, usando la opción −j para el make del objetivo build de make−kpkg. Si se usa debe ser un entero (pequeño).
OBJETIVOS
clean |
Elimina del directorio con las fuentes del núcleo todos los ficheros generados por el objetivo build, y ejecuta make distclean. (Véa en el Makefile del núcleo de Linux para más detalles). Dese cuenta que aunque se preserva la lista de configuración del núcleo actual del fichero .config, no se preserva el fichero include/linux/autoconf.h. Este objetivo no debe combinarse con otros, ya que make−kpkg lee todos los datos antes de ejecutar cualquier objetivo, lo que hace que los objetivos siguientes se ejecuten con los datos viejos, algo que probablemente no es lo que desea. |
buildpackage
Este objetivo ejecuta los objetivos clean, y binary, para producir el paquete completo usando dpkg−buildpackage
binary |
Este objetivo produce los cuatro paquetes del núcleo de Debian ejecutando los objetivos kernel_source, kernel_headers, kernel_doc y kernel_image. |
kernel_source
Este objetivo produce un paquete debianizado de las fuentes del núcleo. Si la variable de entorno SOURCE_CLEAN_HOOK apunta a un ejecutable, éste se ejecutará desde el directorio temporal de las fuentes del núcleo justo antes de empaquetarlo, ./debian/tmp−source/usr/src/kernel−source−X.X.XX, de esta forma puede tomar acciones necesarias para ajustar el núcleo a sus necesidades (eliminar arquitecturas, borrar los directorios de control de versiones, find . −type d −name CVS −prune −exec rm −rf {} ; etc). No tiene efecto sobre otra cosa que no sean las fuentes del núcleo que van a ser empaquetadas −− si el script opera en el directorio actual y sus descendientes las fuentes originales del núcleo deberían permanecer intactas. Las variables de entorno HEADER_CLEAN_HOOK y DOC_CLEAN_HOOK son similares. Deberían apuntar a ejecutables, éstos se ejecutará respectivamente desde el directorio temporal de las fuentes del núcleo justo antes de empaquetarlo, de esta forma puede tomar acciones necesarias para ajustar el núcleo a sus necesidades. Sólo tiene efecto sobre las fuentes que se están empaquetando.
kernel_headers
Este objetivo produce una paquete Debian que contiene las cabeceras del núcleo de Linux.
kernel_doc
Este objetivo produce un paquete Debian que contiene la documentación incluida con el núcleo de Linux.
kernel_image
Este objetivo produce un paquete Debian con la imagen del núcleo de Linux y cualquier módulo configurado en el fichero de configuración del núcleo .config. Si no hay ningún fichero .config en el directorio con las fuentes del núcleo se proporciona una configuración por omisión parecida a la usada para crear los boot−floppies de Debian.
Si existe el fichero ./debian/post−install y es ejecutable, éste se ejecuta justo antes de crear el paquete con la imagen del núcleo. Además, tenga en cuenta que si hay algún script en el directorio ./debian/image.d/ , run−parts debe de ser ejecutado en ese directorio justo antes construir el paquete con la imagen del núcleo. La localización de la raíz del paquete con la imagen que se está construyendo debe de pasarse mediante la variable de entorno IMAGE_TOP, y la versión del núcleo se pasa a través de la variable de entorno version para todos los scripts.
En una instalación inicial, el paquete con la imagen actualiza los enlaces simbólicos en el directorio destino de los enlaces simbólicos (por omisión es el directorio raíz) para que apunten a la nueva imagen del núcleo en el directorio de las imágenes del núcleo ( /boot). Si el enlace simbólico ya apunta a la imagen actual del núcleo no se hace nada. Si existe un enlace simbólico anterior, éste se mueve a un fichero con el mismo nombre pero con el sufijo .old, y se instala en su lugar un nuevo enlace simbólico acorde a la nueva situación (la variable minimal_swap en /etc/kernel−img.conf modifica este comportamiento). No se realiza ninguna actuación en las actualizaciones.
Durante la instalación, también ofrece ejecutar LILO (o alternativas como loadlin, SILO, QUIK, VMELILO, ZIPL, yaboot, PALO o GRUB ), creando un fichero de configuración para los cargadores de arranque si es necesario. En ese momento también ofrece poner el nuevo núcleo en un disquete, dando formato al disquete si fuese necesario. Cuando se intente eliminar, se comprobará la versión del núcleo en ejecución, negándose a desinstalar un núcleo en ejecución. grub se merece una mención especial, aunque no necesite ejecutarse después de instalar la imagen del núcleo no está de más un cambio automático a su menú después de instalar o desinstalar un paquete con una imagen del núcleo.
Lea la documentación acerca de enganches en kernel−img.conf(5). Estos enganches son variables que pueden apuntar a scripts que añadan o eliminen una línea a la lista del menú de grub durante la instalación o desinstalación del núcleo. Se incluye un script de ejemplo para añadir líneas al fichero de menú de grub en el directorio /usr/share/doc/kernel−package/.
build |
Este objetivo, es usado por el objetivo kernel_image , compila la imagen del núcleo de Linux. |
modules
Este objetivo permite construir todos los módulos añadidos y paquetes muy dependientes de la versión del núcleo para la que han sido compilados al mismo tiempo que se genera la imagen del núcleo. Este objetivo espera encontrar los módulos o paquetes bajo /usr/src/modules, y, para todos los subdirectorios, cambia a MODULE_LOC/x (MODULE_LOC de forma predeterminada es /usr/src/modules ), y ejecuta la regla kdist en el fichero local debian.rules. Este objetivo debe crear uno o varios paquetes Debian con los módulos, y quizá produzca un fichero tar comprimido, un fichero diff comprimido, con las sumas md5 guardadas en un fichero de cambios usando dpkg−genchanges. El fichero es firmado por la misma identidad que se usa para firmar los paquetes del núcleo. Esta opción es usada por los responsables de subir los paquetes a los archivos de Debian.
modules_config
Este objetivo permite configurar todos los paquetes debajo de MODULE_LOC, que de forma predeterminada es /usr/src/modules. Esto es útil si necesita modificar manualmente algunos aspectos de configuración, o si quiere compilar manualmente los módulos añadidos.
modules_image
Este objetivo permite construir todos los paquetes debajo de MODULE_LOC, que de forma predeterminada es /usr/src/modules, pero no crea las fuentes o los ficheros diff, tampoco crea ni firma el fichero de cambios. Ésta es la única opción relacionada con los módulos que necesita si sólo quiere compilar los módulos para instalarlos en una o más máquinas. Generalmente se usa junto con kernel_image, especialmente si además se usa la opción append_to_version (previene avisos espúreos).
modules_clean
Este objetivo permite limpiar todos los paquetes bajo MODULE_LOC, que de forma predeterminada es /usr/src/modules, debería de ser todo lo necesario para deshacer el efecto de cualquiera de los otros objetivos modules_.
configure
Este objetivo ejecuta pronto la configuración (realmente, config_target, establecido por −−config que por omisión es oldconfig ), de forma que pueda editar los ficheros generados por make config en el directorio de las fuentes del núcleo y estar seguro de que make−kpkg no los sobreescribirá más tarde.
debian |
Este objetivo crea el directorio ./debian , y opcionalmente aplica algún parche a las fuentes. Es llamado por el objetivo configure. Probablemente use este objetivo para aplicar algún parche a las fuentes y después ejecutar manualmente la fase de configuración. |
libc−kheaders
Este es un objetivo especial para el responsable de libc−dev, puede usarlo para crear las cabeceras del núcleo que necesita libc. Por favor, dese cuenta de que es peligroso crear un paquete libc−kheaders que sea diferente de las cabeceras con las que fue compilado libc, se sabe que puede dañar sutilmente el sistema. Lea /usr/share/kernel−package/README.headers para más detalles. Crear e instalar un paquete de libc−kheaders personalizado puede dañar el sistema y volverlo inusable a menos que sepa lo que está haciendo. Está avisado.
VARIABLES DE ENTORNO
Las siguientes variables (documentadas arriba) afectan a make−kpkg: DEBIAN_REVISION_MANDATORY APPEND_TO_VERSION VERSION_H_OK PATCH_THE_KERNEL NO_UNPATCH_BY_DEFAULT KPKG_ARCH CROSS_COMPILE KPKG_SUBARCH ARCH_IN_NAME INITRD SOURCE_CLEAN_HOOK MODULE_LOC INITRD_OK CONCURRENCY_LEVEL
FICHEROS
Aparte de las opciones de ejecución, el fichero debian.rules ejecutado por make−kpkg también busca el fichero de configuración de usuario ~/.kernel−pkg.conf. Si no lo encuentra, busca el fichero de configuración global del sistema /etc/kernel−pkg.conf. La configuración predeterminada permite que haya un predominio para el nombre completo y la dirección de correo electrónico de la persona responsable de mantener los paquetes en el sitio, pero el fichero /etc/kernel−pkg.conf (o ~/.kernel−pkg.conf. ) es realmente un pequeño Makefile, se puede incluir cualquier directiva válida de make. Nota: Se debe de tener mucho cuidado con este fichero, usted puede cambiar totalmente el modo en que se ejecuta make editando este fichero. Por favor, lea /usr/share/doc/kernel−package/Problems.gz para ver una lista de problemas conocidos compilando imágenes del núcleo. Un tutorial extensivo se encuentra disponible como documentación en /usr/share/doc/kernel−package/README.gz y es recomendable que uno lo lea antes de usar esta utilidad.
VÉASE TAMBIÉN
kernel−pkg.conf(5), kernel−img.conf(5), Getopt::Long(3perl), dpkg−deb(1), dpkg−source(1), make(1), The Programmers manual, El manual de GNU Make y la extensiva documentación en el directorio /usr/share/doc/kernel−package
AUTOR
Esta página del manual fue escrita por Manoj Srivastava <srivasta [AT] debian.org>, para el sistema Debian GNU/Linux.