CTM es un sistema para realizar cambios a diario a un árbol de fuentes accesible por correo electrónico; CTM ha sido diseñado por Poul-Henning Kamp. Este sistema es un buen modo para estar actualizado con los fuentes en "current" o con el árbol del CVS, sobre todo si la conexión a internet de que disponemos no es buena, como por ejemplo con modem.
CTM usa muy poco ancho de banda para distribuir los cambios al árbol, y los comprime usando gzip -9. A diferencia de CVSup, ctm ha sido escrito en C y por lo tanto está disponible en todas las plataformas para las que existe un porte de OpenBSD.
El principio básico es que Vd. se subscriba a una lista de correo específica para un árbol de fuentes particular. Cada día recibirá un mensaje por correo electrónico que contendrá todos los cambios acontecidos en ese árbol durante ese periodo. Un grupo de diferencias se conoce como un «delta».
Vd. empieza con un grupo inicial o «base» al que se irá aplicando parches con las sucesivas «deltas». Para empezar a usar ctm debe bajarse la última «base» existente y todas las deltas que hayan aparecido hasta ese momento. Una vez que haya aplicado los parches a su base con esas deltas, ya puede empezar un proceso normal con las sucesivas deltas que irá recibiendo por medio de la lista de correo. Las bases están divididas en partes de 1400KB cada una, para que sean más fáciles de transferir por líneas de baja calidad y para que las pueda copiar en disquetes tal cual están.
Las bases se generan aproximadamente una vez cada 50 deltas, de este modo nunca tendrá que bajarse más de 50 deltas a la vez para poder ponerse al día.
En la actualidad existen dos tipos de deltas base. Durante bastante tiempo estuvimos haciendo los ficheros tar.gz a mano, pero ahora estamos volviendo a las deltas base reales. Estas últimas contienen sumas de comprobación md5 y se generan de forma automática, por lo que son algo más seguras. Puede distinguir entre los dos tipos de deltas base por el nombre y extensión del fichero. Por ejemplo, un fichero tar.gz sería OpenBSD-cvs.1450.tar.gz, mientras que una base delta sería OpenBSD-cvs.1500A.gz. Más adelante puede ver instrucciones detalladas.
El grupo de deltas base y todas las deltas relativas hasta la más reciente se obtienen mediante ftp desde los sitios que se mencionan más adelante. Los tamaños son:
Las actualizaciones por ctm más grandes son raras, aunque pueden ocurrir si ha habido una actualización importante como binutils, perl, gcc, etc...
Hay varias listas de correo relacionadas con ctm. Existe una lista para las actualizaciones del árbol de cvs, una lista para el árbol de fuentes, una lista para las actualizaciones de X11 de los anteriores, una lista para el árbol de portes, y una lista para los registros "log" del generador ctm de deltas.
Las siguientes órdenes le darán de alta en las listas apropiadas:
Para el árbol de CVS (sin la parte de X11):
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.orgPara la parte de X11 del árbol de CVS:
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.orgPara el árbol de fuentes (sin la parte de X11):
echo subscribe OpenBSD-src | mail majordomo@OpenBSD.orgPara la parte de X11 del árbol de fuentes:
echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.orgPara el árbol de portes:
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.orgPara la lista de registros "log" de ctm:
echo subscribe ctm-log | mail majordomo@OpenBSD.org
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz cd target ctm -v -v -v .../OpenBSD-cvs.1500A.gz
ó
cat split/OpenBSD-cvs.1500.tar.gz.* > OpenBSD-cvs.1500.tar.gz cd target tar -xzvf .../OpenBSD-cvs.1500.tar.gz
en donde split es el directorio en el que ha copiado los ficheros que se bajó, y target es el sitio que ha escogido para el grupo de fuentes.
No es necesario que conserve estos ficheros, siempre que esté seguro de que tiene un árbol completo. Pero puede conservar el grupo de ficheros base como copia de seguridad. De cualquier modo asegúrese de anotar el número del grupo de bases antes de continuar.
cd target ctm -v -v -v deltas/OpenBSD-cvs.*
en donde target es el directorio en el que se encuentra su árbol de fuentes, y deltas es el directorio en el que ha guardado las deltas.
ctm_rmail -p /tmp -d deltas -b target folder
en donde folder es el buzón de correo que contiene el mensaje con la delta. Esto descodificará la delta de ctm y la guardará en el directorio deltas. La delta será un archivo de la forma OpenBSD-cvs.XXXX.gz, en donde XXXX es el número de la delta. A continuación se aplicará la delta al árbol del directorio ubicado en target, que es el sitio en el que desarchivó la delta base anteriormente.
Repita este último paso cada vez que reciba una delta desde la lista de distribución. Si lo desea, puede automatizar este paso usando procmail a algún otro programa parecido.
Las direcciones de ftp para las deltas son:
Esto depende del espacio en disco del que disponga, entre otros factores. Como ctm todavía no puede manejar ficheros que hayan sido modificados fuera del proceso de ctm, tal vez la mejor elección sea el árbol de CVS. De este modo puede comprobar su árbol de fuentes actual desde su árbol de CVS, y mantener su modo local en su árbol de fuentes, dejando que sólo ctm toque su árbol de fuentes.
Sin embargo, la parte negativa es que necesitará mucho espacio en disco. Un árbol de fuentes requiere unos 350MB, pero si tiene su propio árbol de CVS necesitará aproximadamente 1GB para éste, más otros 350MB para el árbol que se haya bajado.
Esto sin tener en cuenta los 100MB o más que necesitará para una compilación (dependiendo de la arquitectura).
Si sólo tiene el árbol de fuentes, tan sólo será necesario tratar modificaciones a nivel local. Un modo de hacerlo es usando el sistema de archivos union, aunque han habido informes en los que se aseguraba que el sistema de archivos union puede ser inestable si tanto en las capas superiores como en las inferiores residen en el mismo sistema de archivos físico. Si ubica sus capas superiores e inferiores en sistemas de archivos separados, no debe surgir ningún problema. Un ejemplo de esto es el que sigue a continuación:
Supongamos que su árbol actualizado por ctm se encuentra en /usr/src-ctm, y que su árbol de fuentes real, el que modificó y del que llevó a cabo la compilación, se encuentra en /usr/src. /usr/src debería ser al principio un directorio vacío. La siguiente orden configurará el montaje de "union":
mount -t union -o -b /usr/src-ctm /usr/src
Las modificaciones que se hayan hecho a los ficheros en /usr/src se convertirán en un fichero dentro de /usr/src, y esconderá el que haya en src-ctm. Si los cambios se hacen mediante ctm al árbol src-ctm, esos cambios no se verán si hay un fichero en la capa superior que lo esconda.
El sistema de archivos "union" se debe desmontar periódicamente, y buscar si hay ficheros locales de "union".
umount /usr/src find /usr/src -type f
Las órdenes ls -W y rm -W también serán de utilidad, ya que los llamados "whiteouts" en /usr/src también esconderán ficheros en src-ctm.
Si tiene el árbol de CVS, puede usar la orden cvs checkout para obtener el árbol de fuentes desde el anterior, y cada vez que actualice con ctm podrá usar la orden cvs update para actualizar su árbol de fuentes.
Para obtener un árbol de fuentes inicial:
cd /usr cvs -qd YOUR_CVS_TREE checkout -A src
y después de cada actualización por ctm:
cd /usr/src cvs -q update -PAd
También puede contactar con las listas de correo de OpenBSD o conmigo si tiene dificultades con ctm, aunque mi tiempo libre suele ser bastante limitado.
Sumario:
Cualquier anuncio o nota importante sobre ctm se enviará a:
Para cualquier problema, duda, sugerencia o informe relacionado con ctm, contacte con el mantenedor de ctm Hans Günter Weigand.
Logotipo de OpenBSD/CTM diseñado para el proyecto de OpenBSD por Phillip F Knaack.