Jan 16

Después de los más de tres meses de espera desde la primera beta de la release 6.2 por fin ya tenemos disponible la versión final (ver la noticia). Proporciona mejoras en el rendimiento y estabilidad a parte de incluir numerosas novedades y actualizaciones tanto de aplicaciones como de drivers.

Algunas de las novedades incluidas:

  • FreeBSD Update: Utilidad para actualizaciones binarias del sistema base. Si no te gusta compilar y prefieres trabajar con la versión binaria del sistema base esto es perfecto para ti. La idea es trabajar con la versión binaria del sistema base distribuida en el CD oficial e ir actualizándote con esta herramienta, aunque también permite trabajar con sistemas recompilados localmente.
  • OpenBSM: Añadido OpenBSM (Open Source Basic Security Module). Es una implementación opensource del BSM de Sun, un sistema muy potente para realizar auditorías de seguridad al SO.
  • KDE: Incluida la versión 3.5.4 del KDE.
  • Csup: Incluido csup al sistema base. Csup es una reimplementación de CVSup escrita en C.
  • IPFW: Nuevas reglas de configuración para el firewall. Ahora podemos ponerle tags a los paquetes para identificarlos más tarde (sólo dentro del kernel, no por la red).
  • Linsysfs: Añadido soporte para la emulación del sys filesystem del Linux necesario para correr algunos binarios de Linux sobre FreeBSD.

Puedes ver la lista completa de novedades y cambios en las notas de la release y descargar las imágenes ISO desde la sección de downloads de www.freebsd.org.

Tagged with:
Nov 26

Como culminación a la serie de post dedicados a instalaciones y actualizaciones de software en FreeBSD voy a explicar como montar un servidor de paquetes de software compilado en FreeBSD 6.1. Este procedimiento describe como mantener actualizadas un grupo de máquinas con los mismos programas instalados, como por ejemplo un clúster de servidores Apache con PHP.

A la serie de artículos acerca de cvsup, portsnap, buildworld, sólo le faltaba uno explicando como usar portupgrade. En este post se mostrará un poco su uso, aunque es una herramienta muy potente y con la que vas a tener que trabajar bastante (como rpm para RedHat o apt para Debian), es obligatorio un “man portupgrade”.

El objetivo del invento es sencillo, la idea es que una máquina se encargue de descargar el código fuente, compilarlo y generar paquetes binarios de los programas para que las demás máquinas lo instalen directamente. De esta forma invirtiendo el mínimo tiempo podemos trabajar controlando el código fuente con todas las ventajas que esto conlleva (añadir opciones extra en un Makefile del PHP o Apache, etc.), a parte de que en FreeBSD es necesario pasar por la compilación de los ports para estar realmente a la última (en rapidez en sacar las últimas versiones de software ganamos a la mayoría de distros linux :)

Se asume que todas las máquinas que queremos mantener actualizadas son clones, es decir, tienen el mismo software instalado. Si tienes varios tipos de máquina una posible solución es tener instalado todo el software en la que actúa de master, aunque el sistema es suficientemente flexible como para tener varios servidores de paquetes o servidores de determinados tipos de paquetes. Al mismo tiempo si se muere el master cualquier otro clon del clúster puede continuar su función.

Es cierto que con FreeBSD para disponer de un clúster de servidores con exactamente las mismas versiones de ports instaladas podemos tirar por compartir /usr/local por NFS pero con /usr/local/etc en local en cada máquina vía softlink. Con esto sólo será necesario administrar el software en una máquina. El problema es la dependencia que crea con el servidor de archivos (ya podemos tener un buen failover) a parte de que el NFS tiene un límite y veremos que con unas cuantas decenas de máquinas con el /usr/local compartido y con más directorios compartidos (p.e. el document root del apache, caches de disco, etc.), se empiezan a bloquear procesos por acceso a NFS…. entonces tendrás que empezar a pensar en un clúster de servidores de archivos. Es una opción viable y aplicada en muchos casos pero en general es recomendable reducir al mínimo los servicios extra entre las máquinas de un clúster.. ya tenemos ocupados los recursos con su función principal (web, mail, etc.).

Requisitos para los clones y el servidor

[1] Instalar portupgrade

Podemos instalarlo de binario:

# pkg_add -r portupgrade

o compilando:

# cd /usr/ports/sysutils/portupgrade
# make install clean

Es recomendable conseguir instalar la misma versión del portupgrade tanto en el servidor como en los clones. No es mala idea tirar del binario al principio para ganar tiempo ya que igualmente si pretendemos estar al día de versiones lo acabaremos compilando no muy tarde (es un paquete que se actualiza con bastante frecuencia).

[2] Preparar el entorno

Fijar las siguientes variables de entorno en tu .bash_profile (asumiendo trabajas con bash):

PACKAGES=/var/portupgrade/packages; export PACKAGES
PKG_PATH=/var/portupgrade/packages/All; export PKG_PATH
PKG_TMPDIR=/var/portupgrade/temp; export PKG_TMPDIR
PKG_FETCH=/usr/bin/false ; export PKG_FETCH

Requisitos sólo para el servidor

[1] Crear el directorio para los paquetes

Crear un directorio con suficiente espacio para los paquetes, backups, y archivos temporales. Dependiendo de la cantidad de paquetes pueden ser centenares de megas.

# mkdir -p /var/portupgrade/packages /var/portupgrade/temp

Servidor de paquetes

[1] Iniciar el árbol de ports

Si no lo tienes ya seguir el post Actualiza tu FreeBSD a toda pastilla con portsnap para tener /usr/ports bajo control y al día con portsnap

[2] Instalación de software

Para instalar ports y que portupgrade nos genere el binario en el directorio anteriormente creado:

# portinstal -p [port]

[3] Actualización de todo lo instalado

Para actualizar todos los ports instalados generando el paquete binario y guardando backup.

– Actualizamos el árbol de ports con portsnap:

# portsnap fetch update

– Solucionamos posibles problemas con la BD de paquetes instalados antes de empezar (opcional pero recomendado):

# pkgdb -F

– Descargamos todo lo que vamos a necesitar para no interrumpir el proceso de actualización por un fallo de red (opcional pero recomendado):

# portupgrade -aRF

– Actualizamos todo generando paquetes binarios y guardando backup de las versiones actualmente instaladas:

# portupgrade -abRp

[4] Distribución de software

Ahora sólo falta disponer de los directorios /usr/ports y /var/portupgrade en los clones. Para conseguir esto existen varias alternativas y no es objetivo de este post su detalle, pero básicamente tenemos dos métodos:

  • copiamos el contenido a los clones con algo como rsync o cualquier otra utilidad.
  • compartimos los directorios, por ejemplo con NFS.

Compartir el directorio es lo más cómodo y recomendado, lo ideal es contar con un sistema redundante (algo como DRBD p.e.) aunque si perdemos estos directorios o al propio servidor que actúa como master cualquiera de las máquinas puede pasar a ser master, sólo tiene que iniciar el árbol de ports como se ha descrito anteriormente y crear los directorios en /var/portupgrade.

Clones

A continuación describo como instalar software en los clones. Es recomendable no instalar y/o actualizar software en todas las máquinas a la vez, primero deberiamos probar el proceso en un sólo clon o idealmente en una máquina dedicada a test. En ocasiones desgraciadamente existen bugs y la instalación del port desde el código fuente no tiene el mismo resultado que la desde el paquete binario.

[1] Instalación de software

Para instalar ports y que portupgrade utilice el binario generado por el master:

# portinstal -PP [port]

[2] Actualización de todo lo instalado

Para actualizar todo lo instalado en uno de los clones:

# portupgrade -aPPR

El procedimiento aquí descrito ha sido probado con éxito en varias instalaciones realizadas por el autor.

Tagged with:
Nov 14

Como prometía en el post Mantén al día tu FreeBSD usando CVSup voy a explicar como usar portsnap para mantener actualizado el árbol de ports de FreeBSD.

Es necesario mantener al día el árbol de ports para actualizar el software instalado que no pertenece al sistema base. Una utilidad imprescindible para manejar las actualizaciones es portupgrade, usando portsnap con portupgrade puedes mantener tu sistema actualizado a la última cómodamente.

Portsnap es una utilidad mucho más rápida que el clásico cvsup ya que trabaja con snapshots comprimidos con el añadido que cuando te actualizas sólo se baja las diferencias.

Actualmente portsnap ya viene instalado con la base de la actual release 6.1. La configuración por defecto es apropiada para la mayoría de casos, lo único que hemos de hacer es lo siguiente:

[1] (opcional) Reiniciar el árbol de ports.

Es buena idea borrar todo el contenido del directorio “/usr/ports” y empezar desde cero con portsnap (igualmente es necesario bajarlo todo de nuevo).

# rm -rf /usr/ports
# mkdir /usr/ports

[2] Descargar e instalar el árbol de ports

# portsnap fetch
# portsnap extract

[3] Listos

Ya está todo listo. Ahora cada vez que quieras bajarte las últimas actualizaciones sólo has de teclear:

# portsnap fetch update

También puedes programar un cron aunque es recomendable ejecutarlo manualmente. Para los ya iniciados con portupgrade puedes usar el siguiente comando en un cron:

portsnap -I cron update; portversion -v

Para saber si existen actualizaciones del software instalado.

Tagged with:
Oct 31

A continuación se describe como configurar una tarjeta de sonido en un FreeBSD 6.1. Con las últimas releases del FreeBSD configurar una tarjeta de sonido se ha convertido en algo muy sencillo (si vuestra tarjeta tiene soporte en el kernel, claro).

[1] Cargar el meta-driver para la tarjeta de sonido

# kldload snd_driver

[2] Ver que módulo del kernel es el apropiado

# cat /dev/sndstat

Por ejemplo, esto en mi portátil:

FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: at memory 0xc0003400 irq 17 kld snd_atiixp (1p/1r/0v channels duplex default)

Fijarse en el nombre que aparece inmediatamente después de “kld” (en mi caso “snd_atiixp”).

[3] Probar el sonido

Reproducir cualquier archivo de audio con nuestro programa favorito.

[4] Configurar la auto-carga del módulo

Si has conseguido reproducir audio sólo falta configurar el fbsd para que cargue el módulo para la tarjeta en cada arranque. Para esto editar “/boot/loader.conf” y añadir

snd_atiixp_load="YES"

Evidentemente sustituir “snd_atiixp” por el módulo apropiado para vuestra tarjeta

[5] Listos.

Como alternativa a lo anteriormente descrito podemos decidir compilar el kernel con el soporte de sonido integrado en lugar de tirar por la auto-carga del módulo. Para esto añadir “devide sound” y “device tu_driver_de_sonido” en vuestro archivo de configuración del kernel y compilar e instalar.

Tagged with:
Oct 21

Este proceso describe como descargar o actualizar todo el código fuente de la release de FreeBSD que tienes instalada y de todo el árbol de ports al completo. Si quieres bajarte una release distinta de la instalada o seleccionar exactamente que quieres descargar puedes consultar el handbook para ver el detalle de las distintas colecciones de archivos existentes.

[1] Instalar CVSup

Para instalar cvsup podemos usar la versión binaria del paquete o tirar por la compilación. En este caso es recomendable usar la versión binaria ya que la compilación nos llevará mucho tiempo y disco.

Para la versión binaria:

# pkg_add -r cvsup-without-gui

Para la versión compilada:

# cd /usr/ports/net/cvsup-without-gui/
# make install clean

[2] Crear los archivos de configuración

Primero copiamos las configuraciones de ejemplo:

# cd /usr/share/examples/cvsup/
# grep -v "^#" standard-supfile > /etc/standard-supfile
# grep -v "^#" ports-supfile > /etc/ports-supfile

Editamos los nuevos archivos del direcorio /etc para seleccionar el servidor cvsup. Si estás en España en ambos puedes poner:

*default host=cvsup.es.FreeBSD.org

[3] Ejecutamos CVSup

Ahora sólo falta descargar todo el source. Esto es un proceso lento dependiendo de tu velocidad de conexión a la red:

# cvsup -g -L 2 /etc/standard-supfile
# cvsup -g -L 2 /etc/ports-supfile

[4] Listos.

Para mantenerse actualizado sólo es necesario ejecutar los comandos citados en el tercer paso. Podemos programar un cron semanal para este fin.

Una utilidad alternativa y muy potente para descargar el árbol de ports es “portsnap”. En algún siguiente post explicaré como usarla.

Tagged with:
preload preload preload