Decisiones al instalar Linux y administración de paquetes
De XTech Capacitacion
Tabla de contenidos |
Sistema de archivos / (root)
GNU/Linux y sistemas Unix en general, tiene un único árbol de directorios. Es decir que no existen unidades (como ocurre en windows, etiquetadas C: D: etc..), en reemplazo de estas, existe una carpeta raíz que contiene al resto de las carpetas.
El directorio raíz se simboliza con una barra (/) y los subdirectorios con el nombre seguido de la barra: /home, /bin, /sbin etc. Si estos, a su vez, tienen subdirectorios, se separan con barras, de la siguiente manera:
/home/usuario1 /home/usuario2 /var/log /var/mail
Lo importante en este punto, no es la distribución de los directorios en si, sino el hecho que los discos rígidos, disqueteras y otros dispositivos de almacenamiento, son parte de este árbol.
Es decir, que el directorio / puede estar en un disco distinto que el directorio /home o /var. Costará acostumbrarnos a esto, al principio, pero luego veremos que es realmente muy útil.
Puntos de montaje y particiones
Hasta ahora sólo se mencionó disco como algo genérico, pero en realidad son las particiones las que pueden entrar en juego aquí. Es decir que podemos hacer algo como esto:
- la segunda partición del primer disco tiene el contenido de /
- la tercer partición del cuarto disco (el esclavo de la 2da ide, por ejemplo) tiene el contenido de /home
- el tercer disco (el master de la 2ª ide, por ejemplo) es la carpeta /cdrom
Para incorporar un poco más de vocabulario usaremos la palabra montar. se dice entonces:
- la segunda partición del primer disco, está montado en /
- la tercer partición del cuarto disco, está montado en /home
- el tercer disco, está montado en /cdrom
Y para mejorar nuestro dialecto, sabremos como llama linux a las cosas:
- hda es el Maestro de la 1er IDE
- hdb es el Esclavo de la 1er IDE
- hdc es el Maestro de la 2er IDE
- hdd es el Esclavo de la 2er IDE
Y si queremos decir una partición en especial completamos con el nro de partición al final. Ejemplos
- La 3er partición del maestro de la 1er IDE se dice hda3
Entonces, algo muy normal es terminar hablando con amigos linuxeros diciendo
- hda2 está montado en /
- hdd4 está montado en /home
- hdc está montado en /cdrom
Sistema de archivos /var y /home
Entonces surge la primer pregunta importante ¿qué debo montar en dónde?, se tienen por un lado particiones de discos y por otro lado carpetas. Cada carpeta tiene una semántica específica que está definida por los criterio que fueron mencionados arriba. Por ahora sólo nos limitaremos a ver pocas carpetas, sólo las interesantes:
- /home contiene los archivos de los usuarios del sistema
- /var contiene los datos variables, no es de importancia entrar en detalles, sólo saber que aqui se encuentra el mail a entregar (/var/mail) y las paginas web (/var/www)
Entonces como administradores, para responder la pregunta, vamos a tener que preguntarnos: ¿cuanto usarán los usuarios? ¿cuanto mail va a circular? ¿cuanto me ocupará las paginas web?
En base a esas preguntas de deben asignar los tamaños de las particiones.
Ejemplo
Tengo 40 usuarios en una escuela, son los alumnos del último año y viendo los trabajos prácticos anteriores, la mayoría usa 2,5 MB por trabajo; son 13 materias y 3 trabajos por materia: 2.5 * 13 * 3 = 97.5 MB., El correo que guardan en el disco suma alrededor de 60MB por alumno.
Entonces mis cuentas tendrían que ser:
- Trabajos prácticos = 100 MB
- Correo = 60 MB
Total, 160 MB por alumno, como son 40 alumnos: 160 MB * 40 = 6400 MB
Conclusión
al menos 6.4 GB para /home
Ahora analicemos el resto de las carpetas: el correo saliente, es el correo que está en tránsito para salir a internet, es importante tener espacio disponible siempre. Y cuando existen enlaces lentos o esporádicos, es algo a tener en cuenta. Para evitar perder correos. Suponiendo que mis usuarios generen 2 MB de correo diario promedio (si, en especial esos ppt que se envían). Y suponemos que lo máximo que hemos estado sin internet fueron 3 días. Entonces mis cuentas tendrían que ser:
- Tráfico diario: 80 MB de correos promedio.
- 3 días sin conexión: 240 MB
Conclusión:
al menos 240 MB para /var/mail
y por último, paginas web. Es un error común sólo pensar en las páginas que se pueden producir en la escuela. Hay que pensar en aplicaciones web que la escuela puede usar, como un wiki, una aplicación que ordene bibliotecas, un calendario compartido o una aplicación de webmail. Esto brinda muchas posibilidades. Pero supondremos:
- Soft para bibliotecas: 5 MB
- Calendario compartido: 5 MB
- Wiki: 10 MB
- Webmail: 5 MB
Conclusión:
25 MB para /var/www
Aunque habría que incluir la base de datos, pero de todas formas es para darnos idea de proporciones.
En este ejemplo vemos que /home es mucho más que el resto, pero si revisamos bibliografía respecto a este tema, muchos autores insisten en tener un /var con mayor capacidad, ya que piensan en un servidor destinado principalmente a correo, web, y servicios similares.
Como mínimo
Para una instalación recomendada, siempre deberíamos hacer 2 particiones. La partición donde irá la carpeta / y otra donde irá la carpeta /home
1. Un / con 4GB (como mínimo) estará bien. Dependerá de la cantidad de aplicaciones instaladas, pero una instalación típica. 2. El /home tendrá como mínimo el espacio calculado. Y como máximo, todo lo que podamos. De esta manera garantizamos la escalabilidad en el número de usuarios.
SWAP
Linux necesita SWAP, lo más eficiente es dedicar una partición a espacio SWAP. Según el uso del equipo y el criterio a aplicar recomiendan mayor o menor espacio en SWAP. NUNCA tenemos que correr el riesgo de quedarnos sin memoria+swap ya que Linux comienza a comportarse extremadamente mal en estos casos.
La regla general para el cálculo de la SWAP, dice:
SWAP = RAM x 2
Siempre que la SWAP no supere 1 Gb
NOTA
Si la performance se ve afectada debido a que SWAPea mucho, hay que comprar más memoria. Tener más o menos espacio destinado a SWAP no va a mejorara a la misma.
Sólo hay que utilizar una partición y etiquetarla como tipo de archivos SWAP de Linux. Cuando arranque, automáticamente va a entrar en uso.
Administrador de arranque
Según la definición de wikipedia "El registro principal de arranque o registro de arranque maestro como también se conoce (del inglés Master boot record cuyo acrónimo es MBR), es un sector de 512 bytes al principio del disco duro que contine una secuencia de comandos necesarios para cargar un sistema operativo. Es decir, es el primer registro del disco duro, el cual contiene un programa ejecutable y una tabla donde están definidas las particiones del disco duro."
Entonces en este registro se aloja un pequeñisimo programa que nos mostrará un menu para elegir una partición para arrancar.
En el mundo del software libre tenemos 2 opciones muy buenos:
- GRUB
- LILO
Con distinta filosofía pero con el mismo principio habrá que configurar el menu de cada uno de ellos para que nos deje elegir entre GNU/Linux y Windows (o combinaciones de varios sistemas operativos)
LILO
Toda la configuración de LILO se encuentra en /etc/lilo.conf el contenido es similar a algo así:
boot=/dev/hda
install=/boot/boot.b
default=linux
prompt
timeout=5
message=/boot/message
image=/boot/vmlinuz
label=linux
root=/dev/hda6
append=" hdc=ide-scsi ide1=autotune ide0=autotune"
other=/dev/hda2
label=windows
table=/dev/hda
Por ahora esto puede parecer inentendible pero vamos a analizar línea a línea:
boot=/dev/hda
Significa que el dispositivo de arranque es /dev/hda (/dev/hda es el disco maestro de la controladora IDE primaria). El sector de arranque o boot sector de ese dispositivo contendrá a LILO cuando inicie el equipo.
install=/boot/boot.b
/boot/boot.b es un archivo usado como nuevo sector de arranque.
default=linux prompt timeout=5
Con estas tres opciones se especifica que:
- prompt
- Pregunta que núcleo hay que utilizar (el caso contrario puede ser que haya sólo uno y no se quiera elegir).
- default
- En caso de no poner nada, se elija linux
- timeout
- Tiempo en décimas de segundos a esperar, si no se elije ninguna de las opciones.
message=/boot/message
Se muestra un mensaje que es el archivo /boot/message que puede contener algo como:
Bienvenido a LILO, el selector de SO de arranque! Elija un sistema operativo de la lista.
O
espere 5 segundos para que arranque el sistema predeterminado.
Luego vienen las configuraciones de los núcleos en sí. En el ejemplo existen 2 núcleos, uno de linux y el otro es un Windows.
Las dos configuraciones son distintas pero tienen una linea en común. Esta es label.
- label
- es el identificador de núcleo para LILO, es de suponer que tiene que ser único. Puedo tener varios núcleos de linux pero no con label=linux en mas de uno de ellos.
Simplemente habrá que asignarlos de distinta manera como por ejemplo label=linux-2.2.19 y label=linux-2.4.3.
Si por un momento repasamos este concepto, nos vamos a dar cuenta que default=linux hace referencia al núcleo que posee label=linux. Cuando cambiemos de configuración a label=linux-nuevo recordemos cambiar default también.
Para correr un sistema no sólo necesitamos el núcleo, sino también archivos, que componen el árbol de directorios que surge de la raiz o root.
Por eso,
root=/dev/hda6
especifica que se va a usar la sexta partición del disco como directorio raíz o simplemente raíz, es decir que, todo lo que esté en esa partición va a pasar a ser el directorio / donde estarán /bin/, /etc/, /home/, /usr/, /lib/, etc.
En este concepto independizamos el núcleo de los archivos que maneja. Una vez que está el núcleo corriendo, los archivos se pueden obtener de diferentes lugares. Por ejemplo particiones, otros discos, discos flexibles, hasta un dispositivo que se encuentra a través de una red (Un hipotético /dev/red o comúnmente denominado /dev/nfsroot).
Casi cualquier archivo/dispositivo puede ser root.
Por ultimo la linea:
append=" hdc=ide-scsi ide1=autotune ide0=autotune"
Pasa parámetros al núcleo para ajustar configuraciones, las cuales dependerán de cada sistema.
- Importante
- Luego de realizar los cambios, SIEMPRE debe ejecutarse el comando
lilopara que se actualicen los cambios.
GRUB
Mientras los gestores de arranque convencionales tienen una tabla de bloques en el disco rígido, GRUB es capaz de examinar el sistema de archivos. Actualmente, soporta los siguientes sistemas de archivos:
- ext2/ext3 usado por los sistemas UNIX y su variante GNU/Linux
- ReiserFS.
- XFS de SGI.
- UFS.
- VFAT, como FAT16 y FAT32 usados por Windows 9.x
- NTFS usado por los sistemas Windows NT/2000/XP/VISTA
- JFS de IBM.
Otros ejemplos de cargadores multiarranque son LILO y SYSLINUX.
GRUB soporta 14 colores de fondo, aunque normalmente se usa negro. Algunas distribuciones de sistemas operativos que incluyen GRUB, frecuentemente utilizan fondos personalizados con el logotipo de dicha distribución. Los usuarios de GRUB pueden también hacer sus propios fondos.
Este gestor de arranque es el más difundido en las distribuciones de Linux actuales.
Proceso de inicio de GRUB
- El BIOS busca un dispositivo de inicio (como el disco rígido) y pasa el control al MBR.
- El MBR contiene la fase 1 de GRUB. Como este es pequeño (512 bytes), la fase 1 sólo carga la siguiente fase del GRUB (ubicado físicamente en cualquier parte del disco duro). La fase 1 puede cargar ya sea la fase 1.5 o directamente la 2.
- GRUB fase 1.5 está ubicada en los siguientes 30 Kb del disco. Esta fase solo tiene como objetivo, cargar la siguiente.
- GRUB fase 2 recibe el control y presenta al usuario el menú de inicio de GRUB. Desde donde se elige que sistema operativo bootear.
- GRUB carga el kernel seleccionado por el usuario en la memoria y le pasa el control a este.
Configuración de grub.conf o menu.lst
Empecemos con un ejemplo del archivo de configuración de GRUB.
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-18-0)
root (hd0,0)
kernel /vmlinuz-2.4.20-18.8 ro root=/dev/hda6
initrd /initrd-2.4.7-10.img
title Windows 98
map (hd0,0) (hd0,2)
map (hd0,2) (hd0,0)
rootnoverify (hd0,2)
chainloader +1
title Disco arranque DOS
map (hd0,0) (hd0,2)
map (hd0,2) (hd0,0)
chainloader (fd0)+1
title CD arranque DOS
map (hd0,0) (hd0,2)
map (hd0,2) (hd0,0)
chainloader (hd2)+1
- default
- Es la opción del menú que arrancará automáticamente, si después de pasado el tiempo indicado, no se opta por otra.
- timeout
- Es el tiempo que grub esperará para que cambiemos de opción de arranque.
- splashimage
- Es la imagen de fondo que tendrá el menú. Siempre tiene que estar en formato xpm y comprimido con gzip.
- title
- Es la leyenda que veremos en el menú de grub.
- Unidades de disco en grub
grub describe los discos duros como (hd0), (hd1), (hd2) y así sucesivamente. grub no hace distinciones entre discos SCSI e IDE. El primer disco que reconoce el BIOS será (hd0), el segundo (hd1), etc. Todas estas anteriores denominaciones hacen referencia al disco duro completo. De la misma forma comienza a numerar las particiones desde cero; así (hd0,0) indica la primera partición del primer disco duro.
Las particiones extendidas linux comienzan a numerarse a partir de 4, independientemente de las particiones primarias existentes. Por ejemplo (hd0,4) sería la primera partición extendida del primer disco duro.
Los disquetes se denominan utilizando el mismo criterio, el primero será (fd0), el segundo (fd1), etc.
Hay que resaltar que las numeraciones siempre comienzan desde cero.
Compilación e instalación de programas
Alguna vez será necesario meterse en la consola para compilar e instalar algún programa que nos hayamos bajado de Internet. Muchos usuarios recién llegados al mundo GNU/Linux sienten verdadero pánico al pensar que deben enfrentarse a las crípticas órdenes de teclado de la consola de texto.
En realidad, el proceso de compilar un programa e instalarlo desde la consola suele ser una tarea bastante rutinaria, ya que, salvo raras excepciones, siempre se procede de la misma manera, y solo son necesarias tres órdenes (configure, make y make install).
Más allá de esto deberíamos tener claro que compilar es solo un último recurso, ya que la instalación de paquetes pre compilados por nuestra distribución es mucho más cómodo y hasta seguro.
Si tenemos correctamente instalado y configurado nuestro compilador de C/C++ y todas las bibliotecas necesarias (algo de lo que suele encargarse el programa de instalación de nuestra distribución), este proceso no suele revestir ningún contratiempo.
El primer paso suele ser descomprimir el archivo comprimido que nos hemos bajado de Internet (casi siempre con la extensión .tar.gz, lo que se conoce con el nombre de tarball, aunque puede estar en otros formatos). Para ello podemos utilizar la herramienta de gestión de archivos comprimidos que acompaña a nuestro escritorio favorito, o bien la consola de comandos.
Si optamos por la consola, nos situaremos en un directorio sobre el que tengamos permisos de lectura y escritura. A continuación copiamos el archivo comprimido en él y luego, desde la consola, tecleamos la siguiente orden:
tar xvzf programa.tar.gz
Una vez descomprimido el archivo, veremos que se ha creado un directorio con el mismo nombre que el archivo que acabamos de extraer (aunque sin la extensión .tar.gz). Cambiamos a ese directorio tecleando la orden:
cd programa
En este momento sería recomendable leer la documentación que acompaña al programa, que normalmente está contenida en un archivo con el nombre README. También es recomendable leer el archivo INSTALL, si existe, ya que en él se describe la forma de instalar el programa.
Ambos archivos suelen estar escritos en inglés, y contienen una referencia de las dependencias especiales que necesita el programa para poder ser compilado y la forma de instalarlo.
Este último paso es muy recomendable, pues cabe la posibilidad de que el programa se instale de otra forma distinta a la genérica.
A continuación deberemos configurar los archivos que nos permitirán compilar el programa.
Como norma general, deberíamos instalar nuestros programas en el directorio /usr/local/bin, ya que ésta es la forma más adecuada de asegurarnos que podremos acceder a ellos localmente y en todo momento, ya que los otros directorios que suelen contener programas ejecutables (como /bin y /sbin) pueden no estar disponibles localmente, sino en algún lugar remoto de la red local, en caso de que estemos en una.
Si se usa ese directorio, el programa será accesible por todos los usuarios de nuestro sistema, pero habremos de tener permisos de superusuario para instalar allí nuestra aplicación.
En caso contrario, siempre nos queda la posibilidad de instalarlo en nuestro directorio personal (por ejemplo, en /home/usuario/bin), aunque en este caso sólo nosotros podremos acceder a él.
Si optamos por instalar el programa en el directorio /usr/local/bin, deberemos configurarlo mediante la orden:
./configure --prefix=/usr/local
Hay que tener cuidado con el paso anterior, ya que, de lo contrario, es posible que nuestro programa vaya a parar a algún directorio no incluido en nuestro PATH, por lo que no se podría ejecutar. También es necesario aclarar que la mayoría de los programas ya tienen configurada una ruta de instalación de forma predeterminada, como los programas diseñados para el escritorio KDE, que suelen detectar la ruta en la que reside el resto de programas de dicho escritorio para instalarse en el mismo lugar que ellos.
Así, la orden ./configure se suele ejecutar, casi siempre, sin ningún parámetro adicional.
Tras ejecutar esto, veremos desfilar una larga sucesión de mensajes por la consola y, si nuestro sistema dispone de todo lo necesario para llevar a cabo la compilación de forma satisfactoria, se nos informará en el último mensaje mostrado. En el caso de que se produzca algún error, deberemos prestar atención a los últimos mensajes mostrados para tratar de solucionar el problema que se haya detectado en nuestro sistema. Si todo fue bien, ya podemos pasar a compilar nuestra aplicación con la orden:
make
Dependiendo de la complejidad de la aplicación y del número de archivos de código fuente que la compongan, el proceso puede durar desde pocos segundos hasta varias horas. Durante todo este tiempo, la consola irá mostrando todo lo que se está haciendo, y tal vez se muestren algunos mensajes de aviso o de error. En este último caso, la compilación se detendrá y deberemos tratar de solucionar los problemas que originaron el error, en caso de que sepamos cómo hacerlo (ya que suelen ser necesarios conocimientos de C/C++). Pero lo normal es que no ocurra ningún error durante la compilación, ya que todo suele estar probado por el autor del programa.
Una vez compilada nuestra aplicación deberemos instalarla en el directorio que seleccionamos anteriormente como destino final. Si no tenemos permisos de lectura y escritura sobre ese directorio, deberemos tomar primero, permisos de root con la orden:
su
Y, finalmente, instalaremos la aplicación con el comando:
make install
Si todo fue bien y no ocurrió ningún error, nuestra aplicación ya estará lista para ser usada (y, al contrario que en los entornos Windows, no será necesario tener que reiniciar el sistema).
Dependiendo del script de instalación, es posible que se haya creado alguna entrada en el menú de nuestro escritorio y/o en el propio escritorio, aunque ninguna de estas opciones suele ser habitual. Lo más seguro es que tengamos que crear esas entradas nosotros mismos de forma manual.
Si el directorio de destino de nuestra aplicación está incluido en nuestro PATH, podremos ejecutar la aplicación directamente desde la consola tecleando su nombre. Lo más usual es que tanto el directorio /usr/local/bin como el /home/usuario/bin estén ya incluidos en nuestro PATH personal.
Un poco de limpieza
Durante la compilación de un programa se genera un buen número de archivos adicionales en el directorio en el que fue descomprimido. Normalmente, esos archivos no se necesitan para nada (a menos que pensemos modificar el código fuente del programa y volver a compilarlo), por lo que es recomendable eliminarlos para ahorrar espacio en nuestro disco duro. Para ello, tras la instalación podemos ejecutar la orden:
make clean
Desinstalar un programa compilado
Si lo que queremos es desinstalar un programa compilado a partir del código fuente, cambiamos en la consola al directorio en el que fue descomprimido, compilado e instalado, nos autentificamos como usuario root, y a continuación ejecutamos la orden:
make uninstall
Después de la desinstalación podemos eliminar el directorio donde fue descomprimido el programa si no pensamos volver a utilizarlo. Esta tarea se puede realizar con facilidad desde el administrador de archivos de nuestro escritorio favorito.
RPM
El RPM (Red Hat Package Manager) también es un archivo comprimido pero además posee:
- como instalarlo
- como desinstalarlo
- como actualizarlo
- que otros programas/bibliotecas necesita
- que archivos posee
- otros metadatos.
Esto significa que es el nombre del instalador de paquetes en sistemas Red Hat y otros más; es la extensión de los paquetes binarios para instalar y es el sistema de empaquetamiento en si.
Instalación
Los paquetes RPM normalmente tienen nombres como foo-1.0-1.i386.rpm. El nombre de archivo incluye el nombre de paquete (foo), versión (1.0), lanzamiento (1) y arquitectura (i386). La instalación de un paquete es tan simple como teclear el siguiente comando en el intérprete de comandos:
# rpm -ivh foo-1.0-1.i386.rpm foo #################################### #
Como podrá ver, RPM imprime el nombre del paquete y luego imprime una serie de numerales (#) mientras se instala el paquete como una especie de medidor de progreso.
Dependencias no resueltas
Los paquetes RPM pueden "depender" de otros paquetes, lo que significa que requieren que otros paquetes sean instalados en el sistema para que funcione correctamente. Si intenta instalar un paquete para el cual se presenta el caso de una dependencia no resuelta, verá aparecer en la pantalla lo siguiente:
# rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1
#
Para solucionar este error debería instalar los paquetes solicitados. Si, en cambio, tiene intención de "forzar" la instalación (una mala idea, visto que el paquete muy probablemente no funcionará correctamente), use la opción --nodeps.
Desinstalación
Desinstalar un paquete es tan fácil como instalarlo:
# rpm -e foo #
Actualización
La actualización de un paquete es similar a la instalación.
# rpm -Uvh foo-2.0-1.i386.rpm foo #################################### #
Lo que no se ve, es que RPM desinstala automáticamente las viejas versiones del paquete foo. En efecto podría siempre utilizar la opción -U para instalar los paquetes, ya que funciona también cuando no hay versiones precedentes del paquete instalado.
Consultas
Consultar la base de datos de los paquetes instalados es posible gracias al comando rpm -q.
# rpm -q foo foo-2.0-1 #
En vez de especificar el nombre del paquete, podrá utilizar las siguientes opciones -q para especificar los paquetes que se quiere que sean consultados.
-a consulta todos los paquete instalados. -f <file> consulta el paquete que posee <file>. -p <packagefile> consulta el paquete <packagefile>.
Librerías compartidas
Cuando se escribe el código fuente de los programas, los programadores no re-escriben código de operaciones básicas. Estas operaciones son escritas una vez y reusadas muchas veces por otros programadores, facilitando de este modo la reutilización de código y el ahorro de tiempo/esfuerzo.
Estas operaciones rutinarias se guardan en lo que se conocen como librerías compartidas (shared libraries). Para que una aplicación que emplea estas librerías se pueda compilar e instalar, es necesario el acceso a las mismas.
Algunos programas incluyen en el ejecutable final estas librerías, por lo que al usarlo no será necesario disponer de las mismas, estos programas responden al nombre de aplicaciones compiladas estáticamente.
Sin embargo otros programas enlazan con las librerías en tiempo de compilación, son los programas compilados dinámicamente.
Las aplicaciones estáticas pueden parecer más ventajosas, sin embargo, la inclusión de la librerías, hace que el programa sea mayor de lo que sería si fuese compilado dinámicamente. Las librerías compartidas en GNU/Linux normalmente se guardan en diversas carpetas, algunas de las más comunes:
- /lib -> librerías principales
- /usr/lib -> librerías supletorias
- /usr/X11R6/lib -> librerías de las X-window
Si se quieren ver las librerías que usa un programa, basta con introducir el comando:
$ldd paquete
Por ejemplo, para ver las librerías que usa el comando wget:
$ldd /usr/bin/wget
linux-gate.so.1 => (0xb7f4d000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7f30000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f27000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7ee5000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7da3000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7c54000)
/lib/ld-linux.so.2 (0xb7f4e000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7c3b000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7c26000)
Observe que en algunas distribuciones (como Ubuntu) no funciona el comando si no se especifica el path completo.
Si una aplicación no puede encontrar una librería compartida que necesite, dará un error y finalizará su ejecución. Si la librería no está en el path predefinido, se puede añadir a la variable de entorno LD_LIBRARY_PATH de la siguiente manera:
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/nuevopath
De este modo se añadirá /nuevopath al path y hará que el programa que anteriormente daba error, se ejecute normalmente.
Si una librería compartida se instala manualmente, se debe informar al sistema de la existencia de esta.
La configuración se guarda en el fichero /etc/ld.so.conf que contiene un listado de directorios donde se encuentran las diferentes librerías compartidas. Por ejemplo:
/usr/lib /usr/X11R6/lib/Xaw3d /usr/X11R6/lib
Para mejorar el rendimiento se crea un fichero caché (/etc/ld.so.cache), el cual contiene todas las librerías de estos directorios. Cuando el archivo de configuración se cambia, el archivo caché debe ser actualizado, esto se hace con el comando ldconfig.
DPKG (Debian package management)
Dpkg es la herramienta fundamental dentro del sistema de paquetes de Debian GNU/Linux. Es la encargada de instalar o eliminar paquetes, y manejar la base de datos del sistema con la situación de paquetes, de forma que indique claramente estos cambios.
Además, dado que conoce las interioridades del sistema de paquetes, no sólo instala los archivos que contienen los paquetes, en los lugares correspondientes, sino que también ejecuta en determinados momentos de la instalación, los programas que el desarrollador del paquete haya indicado. De esta forma, al instalar un paquete, se llamará de forma "mágica" al programa encargado de configurarlo. Éste podrá modificar sólo unos pocos archivos en el sistema o mostrar al usuario una interfaz para adaptar el programa que está instalando en su sistema.
Así, la herramienta dpkg permite:
- instalar (-i ó --install) y desinstalar (-r ó --remove) paquetes. Si desea borrar todo lo instalado por un paquete, incluyendo archivos de configuración utilice --purge.
- configurarlos (--configure), aunque esta tarea se hace siempre después de la instalación puede ser que la configuración falle y se quiera llevar a cabo este último paso. Si desea reconfigurar un paquete que está bien instalado utilice dpkg-reconfigure (del paquete debconf)
- ver la información de estado de un paquete (-s ó --status)
- obtener una lista de los archivos que proporciona un paquete (-L ó --listfiles)
- obtener una lista de los paquetes disponibles para instalar (-l ó --list)
Y muchas otras cosas más, como: auditar el sistema; sacar la información de situación del sistema de paquetes; qué paquetes están marcados para instalar; cuáles han sido configurados; etc..
Apt, el gestor de interrelaciones
Apt, acrónimo de Advanced Package Tool, es el conjunto de herramientas ofrecida por Debian para que los usuarios no tengan que llevar a cabo la siguiente tarea, habitual en otras distribuciones:
- quiero instalar el programa X.
- ¡Uy! depende de Y. Bueno, a buscar Y e instalarlo antes.
- ¡Será posible! Si Y depende de Z, W, V, a ver si los encuentro por FTP, o en el último CD-ROM que me prestaron.
- (tras una ardua búsqueda) W depende de L ¿donde ésta?
- así, ad infinitum...
Apt permite decirle al sistema: "instala X", y éste, apropiadamente configurado, buscará Y, W, Z, V los instalará, quitará M (que entra en conflicto con alguno) y ¡dejará X totalmente instalado!. Es más, podrá recoger algunos paquetes de un CD-ROM y otros de un servidor de FTP.
Es capaz de hacer esto gracias al sistema de dependencias, y a su conocimiento de éste. Además apt puede configurarse para acceder a distintas fuentes de paquetes, estas fuentes podrán ser:
- CD-ROMS de la distribución, o actualizaciones de la misma.
- Servidores en Internet por HTTP ó FTP.
- Un disco local con los paquetes.
Todo esto se gestiona a través del archivo de configuración /etc/apt/sources.list (ver la página de manual man sources.list) aunque existen herramientas para añadir automáticamente dichas fuentes.
Más aún, si el usuario quiere añadir simplemente un nuevo CD-ROM lo más fácil es ejecutar como superusuario
/usr/sbin/apt-cdrom add
Algunos ejemplos:
- Para instalar un programa: apt-get install programa
- Para eliminarlo: apt-get remove programa
- Para actualizar la información disponible de paquetes: apt-get update
- Para actualizar el sistema: apt-get upgrade
- Para actualizar el sistema entre distintas versiones de Debian GNU/Linux: apt-get dist-upgrade.
- Para simular la instalación de un programa: apt-get install -s programa
- Para consultar la información de un programa: apt-cache show programa, y para consultar sus dependencias apt-cache showpkg programa.
- Para buscar un texto determinado entre los programas disponibles:apt-cache search texto (también se pueden introducir expresiones regulares)
- Para mostrar las dependencias con respecto a un programa: apt-cache depends programa
Bibliografía extra
- http://dns.bdat.net/documentos/grub/book1.html
- https://www.europe.redhat.com/documentation/rhl7/ref-guide-es/ch-rpm.php3
- http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/index.html?ca=drs-
- http://www.debian.org/international/spanish/contrib/paqifaz.html
- https://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/es/x8664-multi-install-guide/ch-guimode.html
- http://www.debian.org/releases/stable/i386/index.html.es

