Debian

De Astillas.net
Debian.png

Conceptos

Debian es el sistema operativo que empleo en la mayor parte de mis máquinas, pero si eso no dice nada siempre se puede consultar su propia explicación.

Enlaces y referencias

Instalación

Firmware

Algunos dispositivos necesitan programas adicionales para funcionar --llamado firmware- que, por muchas y buenas razones, no se incluyen en la distribución. El instalador de Debian, sin embargo, permite que se usen durante la fase de instalación mediante un medio de almacenamiento externo tal y como un CD o una memoria USB.

Así que el equipo de Debian, concretamente el que construye las imágenes de CD, dispone de un lugar donde guardan un empaquetado de todo el firmware que reconocen:

http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/

luego ya es cosa de elegir el archivo correcto para la rama que necesitemos como éste squeeze/current/firmware.tar.gz.

Actualizando a Squeeze

Según la guía de la referencia anterior me he asegurado de realizar las siguientes acciones ...

  1. Eliminar todas las acciones pendientes en el gestor de paquetes empleando aptitude.
  2. Desactivar el mecanismo de puntuación de paquetes (/etc/apt/preferences).
  3. Verificar que no existen paquetes retenidos y que todos pueden ser actualizados.

... antes de modificar las fuentes de paquetes para que queden de esta forma:

#       Repositorios principales
deb http://apt:9999/debian/ squeeze main contrib non-free
deb http://apt:9999/security/ stable/updates main contrib non-free

#       Repositorios especiales: multimedia y volatile
deb http://apt:9999/multimedia/ stable main non-free
deb http://apt:9999/debian squeeze-updates main

teniendo en cuenta que siempre tengo instalado el caché de paquetes Debian approx en mis redes, que existe también una máquina llamada apt que apunta a él (suele ser un alias o CNAME) y que los repositorios volatile y backports ya no me son necesarios. El primero porque ha sido absorbido por la versión 6 de Debian y el segundo porque las versiones que requiero están actualmente en Squeeze y no necesito por el momento más.

Recetario

Ejecutar un programa como otro usuario

Especialmente si es un usuario de sistema o algo similar que no tenga un shell propio activo podemos emplear (desde la cuenta de administración) el programa su:

# su -s /bin/bash dnslog -c "/usr/local/bin/djb_update.pl >>/var/log/dns/djb_update.log 2>&1 &" 

Consultas a servidores de nombres

El paquete dnsutils contiene el programa dig que es útil cuando se pretende investigar configuraciones de DNS:

$ dig @127.0.0.1 example.net
$ dig @127.0.0.1 -x 192.168.0.1

En ambos casos se señala con el parámetro @ la dirección del servidor de nombres al que queremos consultar. El primer ejemplo pregunta la dirección IP de un nombre y el segundo intenta hacer lo inverso: obtener el nombre asociado a una dirección IP.

Configuración

Repositorios

Asumiendo que la rama estable de Debian corresponda a Squeeze los repositorios estarían en:

General http://ftp.debian.org/debian stable main contrib non-free
Actualizaciones de seguridad http://security.debian.org/security squeeze/updates main contrib non-free
Programas multimedia http://www.debian-multimedia.org stable main non-free
Volátil http://ftp.debian.org/debian squeeze-updates main
Backports http://backports.debian.org/debian-backports squeeze-backports main

Desarrollo

Enlaces y referencias

Referencias externas para desarrollo

Páginas y categorías en este wiki

Construcción desde paquetes fuente

Los paquetes fuente en Debian están formados por tres componentes:

  • El software original empaquetado y nombrado con la extensión .orig.tar.gz.
  • Los añadidos del mantenedor del paquete para debianizarlo, también empaquetado pero con la extensión .diff.gz.
  • Los metadatos del paquete y la firma del mantenedor en un archivo de texto plano con extensión .dsc.

Para extraerlos y aplicar los parches de manera que estén listos para la construcción de la versión binaria se emplea la herramienta dpkg-source del paquete dpkg-source.

$ ls -la kqemu*
-rw-rw-r-- 1 victor victor   6222 jun  6 11:41 kqemu_1.4.0~pre1-1.diff.gz
-rw-rw-r-- 1 victor victor   1134 jun  6 11:41 kqemu_1.4.0~pre1-1.dsc
-rw-rw-r-- 1 victor victor 168249 jun  6 11:41 kqemu_1.4.0~pre1.orig.tar.gz
$ dpkg-source -x kqemu_1.4.0~pre1-1.dsc 
dpkg-source: información: extrayendo kqemu en kqemu-1.4.0~pre1
dpkg-source: información: desempaquetando kqemu_1.4.0~pre1.orig.tar.gz
dpkg-source: información: aplicando «kqemu_1.4.0~pre1-1.diff.gz»

Después es cuestión de pasar al nuevo directorio y construir el paquete con la herramienta debuild del paquete devscripts:

$ cd kqemu-1.4.0~pre1/
$ debuild -i -us -uc -b
 dpkg-buildpackage -rfakeroot -D -us -uc -i -b
dpkg-buildpackage: exportar «CFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»
dpkg-buildpackage: exportar «CPPFLAGS» de dpkg-buildflags (origen: «vendor»): «»
dpkg-buildpackage: exportar «CXXFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»
dpkg-buildpackage: exportar «FFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»
dpkg-buildpackage: exportar «LDFLAGS» de dpkg-buildflags (origen: «vendor»): «»
dpkg-buildpackage: paquete fuente kqemu
dpkg-buildpackage: versión de las fuentes 1.4.0~pre1-1
dpkg-buildpackage: fuentes modificadas por Daniel Baumann <daniel@debian.org>
 dpkg-source -i --before-build kqemu-1.4.0~pre1
...
dpkg-deb: construyendo el paquete `kqemu-source' en `../kqemu-source_1.4.0~pre1-1_all.deb'.
 dpkg-genchanges -b >../kqemu_1.4.0~pre1-1_amd64.changes
dpkg-genchanges: subida sólo de binarios - no se incluye ningún código fuente
 dpkg-source -i --after-build kqemu-1.4.0~pre1
dpkg-buildpackage: subida sólo de binarios (no se incluye ninguna fuente)
Now running lintian...
E: kqemu-common: duplicate-conffile /etc/modprobe.d/kqemu
W: kqemu-common: copyright-refers-to-versionless-license-file usr/share/common-licenses/GPL
E: kqemu-common: non-conf-file-in-modprobe.d etc/modprobe.d/kqemu
W: kqemu-source: copyright-refers-to-versionless-license-file usr/share/common-licenses/GPL
Finished running lintian.
$ cd ..
$ ls -l *.deb
-rw-r--r-- 1 victor victor  15084 jun  6 12:25 kqemu-common_1.4.0~pre1-1_all.deb
-rw-r--r-- 1 victor victor  78310 jun  6 12:25 kqemu-source_1.4.0~pre1-1_all.deb
$

Creando paquetes desde instaladores

El paquete checkinstall proporciona un ejecutable del mismo nombre que permite crear un paquete en formato deb utilizando un instalador genérico. Es recomendable cuando se ha tenido que descargar un software, configurarlo y compilarlo y a la hora de instalarlo queremos que el sistema de paquetes Debian sea consciente de él.

El uso más habitual es

# checkinstall make install

Acepta muchos parámetros y todos los que conmutan una opción aceptan la dualidad yes/no como parámetro para activar y desactivar la característica. Los parámetros más útiles en mi experiencia son:

  • --fstrans activa y desactiva la traducción de rutas de manera que se empleen directorios temporales y no se toquen los archivos de sistema.
  • --bk salva cualquier archivo que vaya a ser sobreescrito.

Si el programa precisa de algún parámetro pasa a modo interactivo y los solicita por el terminal.

Debianizando

Este término corresponde al proceso de crear la estructura básica en un programa fuente necesaria para empaquetarlo para Debian.

La utilidad principal es dh_make del paquete del mismo nombre dh_make. El directorio fuente debería estar nombrado como paquete-version aunque sólo es necesario en la fase inicial; después puede volver al nombre habitual:

  $ cd ..
  $ mv empresa-common empresa-common-0.1
  $ cd empresa-common-0.1
  $ dh_make --packagename empresa-common --native
   
  Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
   [s/i/m/l/k/n] s
   
  Maintainer name  : Victor Moral
  Email-Address    : victor@taquiones.net
  Date             : Fri, 12 Apr 2013 09:34:59 +0200
  Package Name     : empresa-common
  Version          : 0.1
  License          : gpl3
  Type of Package  : Single
  Hit <enter> to confirm: 
  Done. Please edit the files in the debian/ subdirectory now. You should also
  check that the empresa-common Makefiles install into $DESTDIR and not in / .
  $ cd ..
  $ mv empresa-common-0.1 empresa-common

Cambiando permisos de archivos

Los programas que aceptan una máscara de permisos para aplicar a un fichero o a un directorio siguen las reglas definidas por el programa chmod. Si la máscara es numérica se compone de cuatro dígitos que por orden significan:

  1. Los bits del primer dígito indican:
    1. Activar borrado restringido (sticky bit): valor en decimal 1
    2. Preserva el id del grupo: valor en decimal 2
    3. Preserva el id del propietario: valor en decimal 4
  2. El segundo dígito referencia al propietario del objeto
  3. El tercer dígito referencia al grupo
  4. El cuarto dígito cubre los permisos de accesos del resto del mundo.

Árbol de dependencias de un paquete

El propósito de este programa es obtener un árbol gráfico de dependencias de un paquete Debian consultando la información del paquete.

El resultado está en formato dot y debe ser procesado por la herramienta del mismo nombre (dot) para obtener una imagen en formato PNG o SVG.

Errores

You are required to change your password immediately

Sólo me he encontrado este aviso nada más acceder vía consola a un iBook G4 con una Debian versión 6 recién instalada. Una búsqueda en la red me proporciona la respuesta, que no es otra que poner bien la hora del reloj ya que la configuración de PAM fuerza un cambio de contraseña cuando el número de días transcurridos desde el último cambio de contraseña de una cuenta es cero, tomando como base la fecha del 1 de Enero del año 1970.

El ajuste de la fecha, que en el caso del iBook es defectuosa por un problema físico, no soluciona inmediatamente el problema de las cuentas recién creadas en ese periodo. Para ello es necesario emplear el programa chage e indicar una fecha mayor como la del último cambio de contraseña.

# chage -d 2011-02-08 victor 

El programa tiene también un modo interactivo, en el que va preguntando por cada parámetro:

# chage victor
Cambiando la información de la edad para victor
Introduzca el nuevo valor, o presione ENTER para el predeterminado

        Duración mínima de la contraseña [0]:
        Duración máxima de la contraseña [99999]:
        Último cambio de contraseña (AAAA-MM-DD) [2009-06-01]:
        Aviso de caducidad de la contraseña [7]:
        Contraseña inactiva [-1]:
        Fecha de caducidad de la cuenta (AAAA-MM-DD) [1969-12-31]:

Si aceptamos los valores predeterminados no efectuará ningún cambio en el archivo /etc/shadow. La fecha de caducidad corresponde al valor entero -1, que también puede fijarse directamente con el parámetro

# chage -E -1 victor

Particularidades

start-stop-daemon

El programa start-stop-daemon pertenece al paquete dpkg y sirve para arrancar o detener servicios de sistema en forma de procesos demonio.

Servicios Debian es una página dedicada al proceso de crear programas de arranque de servicios.

dpkg-statoverride

Este programa pertenece al paquete dpkg y tiene como finalidad indicar al gestor de paquetes que un archivo debe instalarse con determinados permisos de acceso y usuario y grupo propietario.

Los cambios están inscritos en un archivo especial llamado /var/lib/dpkg/statoverride y el programa realiza básicamente tres funciones:

--add
Añade una sustitución de permisos y propietarios a un archivo que ni siquiera tiene que existir en ese momento. Los usuarios y grupos pueden indicarse mediante el nombre o su identificador numérico (prefijado en este caso por una almohadilla #65534. Los permisos deben ir en base octal.
Los cambios en el archivo no son inmediatos a menos que se use el parámetro --update.
--remove
Elimina una sustitución de permisos y/o propiedad de un archivo.
--list [patrón]
Muestra las sustituciones registradas para el patrón de nombres de archivos proporcionada. En caso de falta ésta se muestra el registro al completo.

Un ejemplo de un cambio inmediato que queremos que además se respete en las siguientes instalaciones del archivo:

# dpkg-statoverride --update --add victor sysadmin 0600 /etc/secrets