cabecera d-xl

Administración Básica (II)

Copias de seguridad


Hay una gran variedad de formas de realizar copias de seguridad en Linux. Desde utilidades en línea de comandos como dd, dump, cpio, tar, etc, herramientas con interfaces basadas en texto como amanda y taper, hasta aplicaciones con interfaz gráfica de usuario en X como KDat o KBackup que nos permitirán crear de forma sencilla copias de seguridad .

Tar: empaquetar


Si va a usar tar para hacer copias de seguridad la principal fuente de información es man tar. El siguiente comando realizará una copia de todo su sistema Linux almacenándola empaquetada (tar) y comprimida (opción -z, gzip) en el sistema de ficheros /archive

  • tar -zcvpf /archive/copia-completa-`date '+%d-%B-%Y'`.tar.gz \
  • --directory / --exclude=mnt --exclude=procEste comando, ejecutado el 18 de febrero de 2004, por ejemplo, creará un archivo llamado /archive/copia-completa-18-febrero-2004.tar.gz

    Ahora, suponiendo que el dispositivo de almacenamiento sea una cinta SCSI (en Linux, /dev/nst0, por ejemplo):
  • tar -cvpf /dev/nst0 \
  • --label="Copia de seguridad creada el `date '+%d-%B-%Y'`" \
  • --directory / etc home usr/local var/spool

Con este comando hacemos copia de directorios concretos (/etc, /home, etc). Es recomendable no escribir datos comprimidos (opción z, de gzip) en cintas, puesto que si una porción de la información se deteriora (corrupción, se perderá la copia de seguridad entera.

Nota: Al hacer copias de seguridad de los sistemas de ficheros, es importante no incluir el directorio /proc. El contenido de dicho directorio son estructuras de datos del kernel. Hacer copia de un pseudo-archivo como /proc/kcore, que contiene la imagen de toda la memoria del PC, es un gasto inútil de espacio de almacenamiento. También es deseable evitar los directorios de puntos de montaje de dispositivos extraíbles.

    Tar: restaurar


    El siguiente comando restaurará todos los archivos de copia-completa-18-febrero-2004.tar.gz:

    • tar -zxvpf /archive/copia-completa-18-febrero-2004.tar.gz

      Nota: Hay que tener en cuenta que al crear la copia de seguridad, no se utilizaron rutas absolutas (se empleó etc en lugar de /etc), por lo tanto, al descomprimirlo se creará el árbol de directorios a partir del directorio donde estemos situados.

    Si necesitamos extraer algún archivo suelto:

    • tar -zxvpf /archive/copia-completa-18-febrero-2004.tar.gz \etc/profile

    Sistemas de impresión


    Red Hat Linux viene con dos sistemas de impresión diferentes: LPRng y CUPSLPRng es el sistema de impresión por defecto. Es recomendable que los nuevos usuarios usen el sistema de impresión por defecto. Red Hat dispone de una utilidad llamada printconf (redhat-config-printer en línea de comandos o Herramienta de configuración de la impresora) para configurar de forma sencilla una impresora.

    Nota: Para usar la mencionada herramienta debe tener privilegios de root.

    Si desea añadir una impresora sin usar la Herramienta de configuración de la impresora, modifique el fichero /etc/printcap.local (no recomendado, la sintaxis de estos ficheros es impenetrable).

    Las entradas de /etc/printcap.local no se visualizarán en la Herramienta de configuración de la impresora pero son leídas por el demonio de impresión. Si actualiza su sistema desde una versión previa de Red Hat Linux, su fichero de configuración ya existente se convertirá al nuevo formato usado por la Herramienta de configuración de la impresora. Cada vez que la Herramienta de configuración de la impresora genera un fichero de configuración nuevo, el fichero de configuración antiguo se guarda como /etc/printcap.old.

    • Nota: No modifique el fichero /etc/printcap. Cada vez que el demonio de impresión (lpd) se inicia o se reinicia, se crea un fichero /etc/printcap de forma dinámica.

    Automatización de tareas


    En GNU/Linux las tareas pueden configurarse para ejecutarse de forma automática en un período de tiempo concreto y en las fechas indicadas. Un administrador del sistema puede utilizar las tareas automáticas para realizar copias de seguridad periódicas o controlar el sistema y ejecutar scripts personalizados, entre otras tareas.

    Cron es un demonio que sirve para ejecutar tareas programadas según una combinación de la hora, día del mes, mes, día de la semana y semana. Cron asume que el sistema está activo de forma continua. Si el sistema no está activo cuando está programada una tarea, Cron no se ejecuta.

    El fichero de configuración principal de cron, /etc/crontab, contiene las líneas siguientes:

    • SHELL=/bin/bash
    • PATH=/sbin:/bin:/usr/sbin:/usr/bin
    • MAILTO=root
    • HOME=/
    • # run-parts
    • 01 * * * * root run-parts /etc/cron.hourly
    • 02 4 * * * root run-parts /etc/cron.daily
    • 22 4 * * 0 root run-parts /etc/cron.weekly
    • 42 4 1 * * root run-parts /etc/cron.monthly

    Las primeras cuatro líneas son variables que se usan para configurar el entorno en el que se ejecutan las tareas cron. La variable SHELL indica al sistema el entorno de shell que deberá utilizarse y la variable PATH define la(s) ruta(s) usada para ejecutar los comandos y el orden de búsqueda. El resultado de las tareas cron se envía por correo electrónico al usuario cuyo nombre aparece en la variable MAILTO. Si MAILTO es igual a la cadena vacía no se enviará correo electrónico. La variable HOME puede utilizarse para establecer el directorio principal que deberá usarse al ejecutar los comandos o scripts.

    Cada línea del fichero /etc/crontab tiene el formato siguiente:

    • minute - número entero entre 0 y 59.
    • hour - número entero entre 0 y 23.
    • day - número entero entre 1 y 31 (debe ser un día válido si se especifica un mes).
    • month - número entero entre 1 y 12 (o nombre corto del mes, por ejemplo, ene, feb, etc.).
    • dayofweek - número entero entre 0 y 7, donde 0 o 7 corresponde a Domingo, o bien el nombre corto del día de la semana, por ejemplo, Sun (Sunday, domingo), Mon, etc.).
    • command - comando que debe ejecutarse.

    Cron


    En cualquiera de los valores antes indicados, se puede utilizar un asterisco (*) para especificar todos los valores válidos. Por ejemplo, un asterisco para el valor de mes significa que el comando se ejecutará cada mes dentro de las limitaciones del resto de los valores.

    Un guión (-) entre los números enteros indica un intervalo de números enteros. Por ejemplo, 1-4 significa los números enteros 1, 2, 3 y 4.

    Para especificar una lista se utilizan valores separados por comas. Por ejemplo, 3, 4, 6, 8 indica esos cuatro números enteros.

    La barra (/) puede utilizarse para especificar valores de pasos. El valor de un número entero se puede omitir dentro de un intervalo si se indica a continuación del intervalo lo siguiente /número entero. Por ejemplo, 0-59/2 puede usarse para definir el resto de los minutos del campo minuto. Los valores de pasos también pueden utilizarse con un asterisco. Por ejemplo, el valor */3 puede usarse en el campo de mes para omitir el tercer mes.

    Las líneas que empiezan por almohadilla (#) son comentarios y no se procesan.

    Tal como puede verse en el fichero /etc/crontab, se utiliza el script run-parts para ejecutar los scripts de /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly cada hora, diariamente, semanalmente o mensualmente, respectivamente. Los ficheros de estos directorios deben ser scripts de shell.

    Si las tareas cron deben ejecutarse según una programación distinta a la hora, día, semana o mes, esto puede agregarse en el directorio /etc/cron.d. Todos los ficheros de este directorio utilizan la misma sintaxis que /etc/crontab.

    Existen utilidades como CroMagnon o Kcrontab que permiten configurar cron de forma gráfica.

    Nuevos programas


    A la hora de instalar programas Linux difiere notablemente de Windows.

    Existe una cierta variedad de tipos de paquete de instalación. En origen empaquetado no quiere decir más que todos los ficheros del programa que se distribuye han sido agrupados en uno sólo. Esto se puede hacer con utilidades como tar.

    Sería suficiente, para poder instalar un paquete en GNU/Linux, con recibir el conjunto de los ficheros fuente, no compilados, uno a uno. Sin embargo, para trasegar con ficheros por la red o en dispositivos de almacenamiento, es conveniente empaquetarlos. Además, también es útil comprimirlos y así reducir el ancho de banda empleado. Los paquetes de fuentes hoy en día (por ejemplo deb-src, rpm-src) son eso: un montón de archivos fundidos en uno solo (.deb o .rpm respectivamente), comprimidos y acompañados de algunos datos acerca de lo que contienen (metadatos).

    Un elemento de conveniencia adicional lo introducen los paquetes binarios o precompilados. En efecto, la compilación de un pprograma, como las X-window, o KDE en nuestro sistema puede llevar varias horas. Lo que se hace es compilarlos antes de ponerlos en internet y empaquetar y comprimir no las fuentes, como antes, sino el producto de la compilación. Ahora los metadatos tendrán que indicar, en función de la distribución, dónde se debe ubicar el paquete cuando se instale.

    Nota: Un elemento de complicación es que un paquete precompilado es específico de la arquitectura en la que se cocinó. Por eso es mayor el número de paquetes precompilados disponibles para arquitecturas populares, como i386 que para arquitecturas exóticas, como strongARM. Y por eso es necesario saber en caso necesario compilar un programa a partir de sus fuentes.

    Sistemas de paquetes populares


    Saber compilar un programa es muy útil, puesto que permite acceder a todo el espectro de los programas publicados en la red. Sin embargo, las colecciones de paquetes binarios disponibles son tan ingentes (en los casos mencionados de deb y rpm) que lo habitual es encontrar con facilidad un paquete precompilado. Son los más populares, puesto que instalarlos es fácil y rápido (una línea de comando o un clic del ratón).

    Los metadatos contenidos en los paquetes tipo deb o rpm son muy útiles, puesto que permiten algunas virguerías:

    • Se comprueban las dependencias de funcionamiento del paquete y éste no se instala si no están instalados los otros paquetes necesarios para que la aplicación funcione. En algunos casos, se propone su instalación.
    • La instalación y desinstalación es automática, evitando que quede "basura" el sistema al desinstalar paquetes.
    • Se puede programar la actualización automática de paquetes.
    • Se puede vincular la configuración a la instalación y se controla dónde van los archivos de configuración.
    • Se puede vincular el arranque de servicios asociados al paquete con su instalación. (Debian).

    Ya hemos mencionado la existencia de al menos dos sistemas de paquetes importantes; ahora los describimos:

    El sistema de paquetes Debian. Es un sistema muy potente y más fácil de usar. Eso es en parte porque su sistema de dependencias es el más completo y flexible que existe, gestiona la configuración y el arranque de sercicios y porque existe un almacén único de paquetes oficiales (los diversos servidores de Debian) con una lista abrumadoramente extensa. Lo usa la propia Debian, todas las distribuciones basadas en Debian y ahora también lo pueden usar las basadas en Red Hat, pues sus herramientas han sido convenientemente adaptadas. Los paquetes debian tienen la extensión .deb y las herramientas de gestión de dichos paquetes son dpkg y apt-get.
    El sistema de paquetes Red Hat. El formato de paquetes diseñado por Red Hat es utilizado además por todas las distribuciones basadas en Red Hat como Caldera Openlinux, Mandrake, Esware, Hispafuentes y también SuSE, aunque esta última no se trata de una "emanación" de RedHat. La extensión de los paquetes es .rpm y la herramienta de gestión de paquetes se llama rpm.

    La compilación


    A menudo, especialmente en el caso de los programas de código abierto (libres o no) se dispone del código original (fuente), que generalmente se suministra en forma de un archivo empaquetado que contiene "pegados" todos los ficheros y directorios que nos harán falta y que suele ir comprimido. Una vez que hemos descargado alguno de estos archivos habremos de desempaquetarlos y descomprimirlos en un directorio para proceder a su instalación.

    Cada programa suele tener un archivo llamado INSTALL o README en la que vienen detallados los pasos necesarios para compilar e instalar el programa. Es imprescindible leer estas instrucciones antes de instalarlo. No obstante, los pasos más comunes suelen ser:
    Desempaquetado/descompresión:

    • tar zxvf helloworld.tar.gz

    Configuración:

    • ./configure

    Este programa analiza la configuración del sistema y genera un fichero llamado Makefile. Dicho archivo indica los pasos que el programa make ha de seguir para compilar la aplicación.

    Compilación:

    • make

    Este programa invoca al compilador siguiendo las instrucciones del fichero Makefile. Mientras se compila, aparecen en la pantalla mensajes indicadores de las tareas que se están realizando. La compilación habrá terminado con éxito si no se detiene con algún mensaje de error. De este modo se habrá creado el fichero ejecutable. A continuación nos convertimos en superusuarios (su) y tecleamos:

    • make install

      Generalmente el ejecutable se copia a /usr/local/bin, las bibliotecas en /usr/local/lib y la página de manual en /usr/local/man.


    Contacto