Autotools

Publicado en C/C++, Linux el 13 de November, 2009 por Fran. (Comments Off)

Si alguien sabe lo que son las autotools, seguramente haya sufrido para saber cómo funcionan. Hacía mucho tiempo que no me peleaba con ellas, hasta que hace unos días leí un pequeño manual sobre cómo configurar los diferentes archivos necesarios y me acordé de un pequeño manual que hice cuando me tocó pegarme con ellas, que voy a recuperar.

¿Qué son las autotools?

Las autotools, son programas que se usan para crear un paquete de código fuente que se pueda distribuir y compilar de una manera sencilla (configure, make y make install). Los programas que forman las autotools son los siguientes:

  • aclocal
  • autoconf
  • automake

Estos programas son la base para crear el paquete de código fuente, para ello se tendrán que generar unos archivos concretos.

Estructura del código fuente a distribuir

Las autotools se usan para generar el paquete «tar.gz» que contiene el código fuente del programa que se va a distribuir, normalmente estos paquetes siguen una estructura estándar. La estructura básica es:

  • src: Directorio del código fuente.
  • AUTHORS: Indica los autores del programa.
  • ChangeLog: Indica los cambios que se han ido produciendo.
  • COPYING: Indica la licencia de distribución que tiene el programa. (Autogenerado)
  • INSTALL: Explica cómo instalar el programa. (Autogenerado)
  • NEWS: Indica las noticias relacionadas con el programa.
  • README: Un pequeño documento en el que se describe el programa y se explican temas concretos de éste.
  • THANKS: Indica los agradecimientos que tenga el autor/es.
  • TODO: Indica una pequeña lista de cosas por hacer.

De este modo, si se van a utilizar las autotools sería aconsejable seguir la estructura anterior, y crear todos los archivos menos los como «autogenerado» que, obviamente, se generarán automáticamente, aunque siempre se pueden crear a mano ya que puede que no se quiera tener el contenido autogenerado.

Leer el resto »

Truco para que APT no instale paquetes recomendados

Publicado en Debian, Recursos el 12 de October, 2009 por Fran. (Sin comentarios)

Pongo aquí un pequeño truco (más que un truco es un archivo de configuración) para que APT no instale los paquetes recomendados por otro, suele pasar que hay paquetes que recomiendan instalar servidores de correo y, obviamente, no quiero tener un servidor de correo en muchos de mis ordenadores.

# echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/90recommends

Sacado de Checklist for configuring a Debian system.

Cifrar una memoria USB

Publicado en Linux, Seguridad, Windows el 30 de July, 2009 por Fran. (3 comentarios)

Hace poco se me ocurrió una forma de aprovechar una memoria USB (o pendrive) antigua (de 256MB) que tenía por ahí. Simplemente, utilizarla para guardar, todo cifrado, un archivo con un listado de contraseñas, documentos personales, claves GPG y/o SSH, …

Así que estuve buscando diferentes opciones, siendo importante que funcionase en Linux y en Windows (por si las moscas). Al final había dos opciones Truecrypt (el archiconocido) y dm-crypt (un gestor de dispositivos cifrados de Linux), me decanté por dm-crypt porque Truecrypt, curiosamente, no está en los repositorios de Debian y porque con dm-crypt no necesitaría de un programa a parte para utilizar mi dispositivo en Linux (aunque sí, en Windows).

Pasos a seguir

Directo al grano, estos son los pasos que realicé:

  1. Paquetes necesarios:
    # apt-get install cryptsetup hashalot dmsetup
  2. Rellenar la memoria con datos aleatorios (no es necesario, aunque sí recomendable):
    # dd if=/dev/urandom of=/dev/sdX
  3. Cargar los siguientes módulos si no lo están ya:
    # modprobe aes
    # modprobe dm_crypt
    # modprobe dm_mod
    # modprobe sha256
  4. Crear el contenedor cifrado (pedirá la contraseña para poder luego descifrarlo):
    # cryptsetup -v --key-size 256 luksFormat /dev/sdX NOMBRE-CONTENEDOR
  5. Formatear el contenedor (yo utilicé FAT para que funcione en Windows) para ello primero hay que montar el contenedor utilizando cryptsetup:
    # cryptsetup -v luksOpen /dev/sdX NOMBRE-CONTENEDOR
    # mkfs.vfat /dev/mapper/NOMBRE-CONTENEDOR
  6. Y ya está, ya se puede montar:
    # mount -t vfat /dev/mapper/NOMBRE-CONTENEDOR /mnt/usb_cifrado

Leer el resto »

Backup utilizando alias

Publicado en Linux, Script el 10 de July, 2009 por Fran. (Sin comentarios)

El título no es muy claro, lo sé, pero no podía resumir lo que voy a explicar en algo tan corto.

Básicamente, a este script se le pasa una lista de directorios junto a un alias (o seudónimo) bajo el que se guardarán en el archivo que contenga el backup. Esto sirve:

  1. Para que en el archivo del backup no se guarden las rutas absolutas de los directorios guardados.
  2. Para no tener que realizar una copia local (duplicando el tamaño ocupado durante la realización del backup) de los archivos contenidos en los directorios a copiar en un directorio temporal.
  3. Para poder guardar los directorios con el nombre que se quiera dentro del archivo del backup.

Script

Este script está preparado para que lo ejecute cron con permisos de root y así poder copiar partes del sistema a las que otro usuario no podría acceder.

Si queréis que funcione con un usuario normal, sólo hace falta que eliminéis el if que está detrás del comentario # Check if the script is being run as root.

Los directorios a copiar se guardan en la variable DIRS separados por un espacio y con el formato alias:/ruta/al/directorio.

#!/bin/bash
# This script makes backups of a list of directories.
# It must be executed by root.

# Backup data
DIRS="images:/home/user/images/ code:/home/user/projects/ docs:/home/user/docs"
TMP_DIR=`mktemp -d`
BACK_FILE="/mnt/backup/`hostname --fqdn`_`date "+%Y-%m-%d"`.tar.gz"

TAR=$(which tar)

# Check if the script is being run as root
if [ "$UID" -ne "0" ]; then
    echo "This script must be run as root!"
    exit -1
fi

# Logging backup
echo "[`date "+%Y-%m-%d"`] Starting backup"

# Create symbolic links
for dir in $DIRS
do
    SYM_DIR=${dir%:*}
    TARGET_DIR=${dir#*:}
    ln -s $TARGET_DIR $TMP_DIR/$SYM_DIR
done

# Create backup
cd $TMP_DIR > /dev/null
$TAR -chzf $BACK_FILE *

# Backup failed
if [ $? != 0 ]; then
    cd - > /dev/null
    rm -fR $TMP_DIR > /dev/null
    echo "[`date "+%Y-%m-%d"`] Backup failed."
    exit -1
fi

# Backup created
cd - > /dev/null
rm -fR $TMP_DIR > /dev/null
echo "[`date "+%Y-%m-%d"`] Backup done!"

exit 0

Compartir directorios con Samba

Publicado en Linux, Windows el 8 de June, 2009 por Fran. (3 comentarios)

En el anterior post explicaba cómo compartir impresoras con Samba. Como sé que os gustó, hoy os explico cómo compartir directorios con Samba.

Instrucciones

Voy a partir de qué tenemos la siguiente estructura de directorios que se quiere compartir:

drwxr-x--- user group dir01
drwxr-x--- user group dir02
drwxr-x--- user group dir03

Como se puede ver, a estos directorios sólo puede acceder el usuario user y los usuarios del grupo group, aunque estos últimos sólo con permisos de lectura sobre los directorios.

Lo primero que se debe hacer es añadir el usuario (o los usuarios) que podrán acceder a nuestros datos compartidos. Para ello se ejecuta:

# smbpasswd -a user

Nos pedirá una contraseña, ésta puede ser distinta a la que tenga el usuario para acceder a la máquina.

Una vez añadido el usuario (o los usuarios), se podrá configurar Samba para que comparta los directorios. Para ello se modifica el archivo /etc/samba/smb.conf y se añade un elemento del siguiente tipo por cada directorio a compartir:

[nombre_directorio_a_compartir]
  comment = Comentario del directorio compartido
  path = /ruta/al/directorio
  read only = yes # Indica si el acceso será sólo lectura
  write list = user # Indica los usuarios/grupos que tendrán acceso de escritura
  create mask = 0640 # Máscara de los permisos al crear archivos
  directory mask = 0750 # Máscara de los permisos al crear directorios
  guest ok = no # Acceso sin autenticación

De este modo, para el ejemplo que he puesto se tendrían que añadir tres elementos de este tipo, quedando el archivo similar a este:

[global]
  display charset = UTF-8
  server string = NOMBRE-DE-LA-MAQUINA
  workgroup = GRUPO-DE-TRABAJO
  netbios name = NOMBRE-NETBIOS-MAQUINA
  invalid users = root # Para que no se pueda acceder como root

[dir01]
  comment = Directorio 01
  path = /home/user/dir01
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no

[dir02]
  comment = Directorio 02
  path = /home/user/dir02
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no

[dir03]
  comment = Directorio 03
  path = /home/user/dir03
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no

Después de esto sólo hay que reiniciar Samba y listo, ya se podrá acceder a dichos directorios compartidos utilizando el usuario user.

# /etc/init.d/samba restart

Basado en Compartir directorios con Samba del blog de Iván López.