TÍTULO: Compilar apt-get y dpkg, y hacer que funcionen
VERSIÓN LFS: Todas
AUTOR: Ben Roberts <benr@wam.umd.edu>
TRADUCTOR: Proyecto LFS-ES
SINOPSIS:
dpkg y apt-get son un par de programas extremadamente potentes para manejar
paquetes, famosos por su habilidad para actualizar fácilmente un sistema Linux entero.
Sin embargo, ya que estas herramientas están diseñadas para instalar y mantener
una distribución Debian GNU/Linux, nunca se pensó que pudieran ser instaladas
"desde cero". Esta receta describe como "engañar" a estos programas para que
funcionen.
RECETA:
[Intenté este proceso por primera vez en el 2001 para instalar Debian encima de
RedHat sin arrancar de nuevo y sin los CDs de instalación. Funcionó bastante bien,
pero las anotaciones de como lo hice se perdieron cuando se estropeó el disco duro
de mi ordenador. He intentado recrear el proceso usando una instalación de LFS en
un entorno chroot. Espero que a ti también te funcione.]
Primero, descarga el código fuente de dpkg y apt de packages.debian.org/dpkg y
packages.debian.org/apt respectivamente (el enlace pequeño cerca del final de la
página). Las versiones usadas para escribir esta receta son dpkg-1.9.21 y apt-0.5.4.
$ tar xzvf dpkg_1.9.21.tar.gz
$ cd dpkg-1.9.21
$ ./configure --prefix=/usr --admindir=/var/lib/dpkg
Ten en cuenta de que la opción --with-admindir tiene un valor por defecto diferente
(/usr/lib/db) del que apt y el resto de Debian usa. Por tanto es conveniente usar la
opción de configure para asignarle un valor por defecto ahora, o crear un enlace
simbólico.
Si simplemente tecleas 'make', la compilación fallará a menos que tengas instalados
jade y debiandoc2html (probablemente no tengas ninguno de los dos). La mejor forma
de solucionar esto es cambiando doc/Makefile, de la siguiente forma:
$ mv doc/Makefile doc/Makefile.bak
$ sed 's/^all: /&# /g; s/^install: /&# /g' doc/Makefile.bak > doc/Makefile
(esta es una razón más para instalar la versión de Debian del paquete
una vez que apt funcione)
$ make
$ su
# make install
Ahora instalaremos apt.
$ tar xzvf apt_0.5.4.tar.gz
$ cd apt-0.5.4
$ ./configure
No hay ninguna opción útil aquí, ni siquiera se necesita --prefix.
$ make
apt no tiene un objetivo 'make install', y por tanto debe instalarse manualmente.
Afortunadamente, casi todos los ficheros que se deben instalar están en el
subdirectorio bin. La excepción son los guiones de dselect.
¡Ten en cuenta que apt probablemente no funcionará si no se usan exactamente
estos directorios!. Es por eso que no se utilizó la opción --prefix de configure; apt
no tiene en cuenta esta opción.
$ su
# cd bin
# cp -a libapt-* /usr/lib
# ldconfig
# cp apt-cache apt-cdrom apt-config apt-get /usr/bin
# mkdir /usr/lib/apt
# cp -R methods /usr/lib/apt
# cd ..
# cp -R scripts/dselect /usr/lib/dpkg/methods/apt
# mkdir -p /etc/apt /var/state/apt/lists/partial \
/var/cache/apt/archives/partial
Ahora, vamos a hacer que funcione. Primero necesitamos el fichero
/etc/apt/sources.list. Puedes cambiar los sitios que aparecen más abajo por los
servidores de respaldo (mirrors) que desees, por supuesto. También puedes añadir
otras fuentes y actualizaciones de seguridad, pero esto es sólo un consejo.
# cat > /etc/apt/sources.list >> EOF
# Inicio /etc/apt/sources.list
deb http://http.us.debian.org/debian testing main contrib non-free
deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free
# Fin /etc/apt/sources.list
EOF
Si necesitas crear el enlace simbólico /var/lib/dpkg a /usr/lib/db, hazlo ahora.
# ln -s /usr/lib/db /var/lib/dpkg
# touch /var/lib/dpkg/status
# dselect
En dselect, empieza con el menú [A]ccess y elige apt. Conserva el fichero de
configuración que hemos creado antes. Después elige [U]pdate. Ahora la base de
datos de dpkg ha sido actualizada (por alguna razón, apt-get update no me funcionó;
si tienes problemas, prueba con dselect).
Eso es todo. Una cosa que hay que tener en cuenta es que a dpkg no le gusta
instalarse desde cero como hemos hecho nosotros. Muchos paquetes esenciales
tienen dependencias más complejas que las que muestran. Puedes tener problemas
instalando cosas porque otras no están instaladas (un ejemplo es si intentas instalar
libc6, te dirá que dpkg no está instalado, aunque no depende de él). La solución a esto
es modificar /var/lib/dpkg/status. Para arreglar el problema con libc6, añade esto a la
base de datos de dpkg:
Package: dpkg
Essential: yes
Status: install ok installed
Priority: required
Section: base
Installed-Size: 2360
Maintainer: Wichert Akkerman <wakkerma@debian.org>
Version: 1.9.21
Replaces: dpkg-doc-ja
Pre-Depends: libc6.1 (>= 2.2.4-4), libncurses4 (>= 5.2.20020112a-1),
libstdc++2.10-glibc2.2 (>= 1:2.95.4-0.010810) <--- *PON ESTO EN LA LÍNEA
ANTERIOR!*
Description: Package maintenance system for Debian
This package contains the programs which handle the installation and
removal of packages on your system.
.
The primary interface for the dpkg suite is the `dselect' program;
a more low-level and less user-friendly interface is available in
the form of the `dpkg' command.
.
In order to unpack and build Debian source packages you will need to
install the developers' package `dpkg-dev' as well as this one.
Hay que destacar que la versión de dpkg es la misma que la que hemos instalado.
Si quieres reinstalar dpkg a partir de un paquete, la mejor forma de hacerlo es
decrementar el número de versión en uno, de modo que piense que está instalada
la versión 1.9.20. Entonces dpkg automáticamente se actualizará a si mismo.
Podrías incluso añadir todos los paquetes instalados hasta el momento en esta base
de datos, y utilizar dselect para hacer que no se actualicen (ponerlos en estado hold).
De esta forma, sólo tienes que preocuparte de los binarios, y has engañado a dpkg
para que no sobreescriba tu instalación LFS.
Eso es todo. ¡Buena suerte con tu Debian desde cero!
(¿DFS? ¿DG/LFS quizás?)
|