CVS Anónimo es un método para mantener una copia local del árbol de fuentes de OpenBSD, actualizada con respecto a los cambios realizados sobre el código fuente existente en OpenBSD-current (la versión de desarrollo). Además de poder seguir el hilo del desarrollo, también se puede hacer un seguimiento de los parches para los errores de una versión final (-release).
La mayor ventaja de CVS Anónimo sobre otras técnicas de actualización de código fuente, es que funciona directamente contra un repositorio o réplica central del código fuente. Esto quiere decir que se pueden usar todas las órdenes disponibles de CVS para controlar la fusión y actualizar los cambios que se apliquen con otros cambios en los fuentes, y para obtener ficheros diff, cambiar historiales y llevar a cabo otras acciones contra el repositorio central.
El Proyecto OpenBSD dispone en la actualidad de cinco repositorios principales de fuentes:
En resumen, el poder real de usar CVS anónimo es que éste es un sistema de control de código fuente «tolerante»; respeta los cambios que el usuario ha llevado a cabo en sus fuentes locales y se esfuerza en actualizar el árbol completo de fuentes del usuario, en lugar de dejar una lista de problemas arcanos que deberán ser resueltos antes de continuar.
CVS es el sistema de control de código fuente que se usa para gestionar el árbol de fuentes de OpenBSD. Implementa un repositorio central para todas las revisiones oficiales y todos los cambios en el código fuente, mientras permite que los desarrolladores mantengan copias locales del código fuente con los cambios que éstos hayan aplicado. Los desarrolladores con «permiso de acceso con escritura» pueden entregar los cambios realizados directamente al árbol de fuentes de OpenBSD, mientras que los usuarios de «CVS anónimo» disponen de «permiso de acceso con lectura» y pueden mantener sus copias locales de los fuentes actualizadas y realizar búsquedas y consultas en el repositorio central.
La mayor ventaja de CVS es la de ser capaz de llevar a cabo fusiones inteligentes de los cambios que se hayan producido en el repositorio central, con los cambios que haya llevado a cabo el usuario en su copia local. O dicho de otro modo, si Vd. efectuara un cambio en un módulo y llevara a cabo una actualización, sus cambios no serían rechazados, sino que CVS se esforzaría en fusionarlos con los del repositorio central.
En el supuesto caso en que los cambios no pudieran ser completamente fusionados, CVS le enviaría los cambios a su copia local con comentarios sobre éstos, preservando un copia intacta de su versión y continuando con la actualización del resto de módulos que Vd. hubiera requerido.
La última versión de CVS está disponible en Cyclic. Se recomienda no usar versiones anteriores a la 1.6, ya que es probable que no funcionen. Si ya tiene OpenBSD instalado, CVS viene incluido como parte integral de la instalación del sistema.
Aquellos usuarios que dispongan de un CD de OpenBSD puede que hayan visto los directorios CVS en él; existe una razón para esto: el CD contiene una parte del módulo src de OpenBSD que sirve para continuar la actualización desde ella. Si usa este árbol, la actualización inicial de CVS será más rápida que si actualizara todo el árbol de fuentes de OpenBSD partiendo desde cero. Hay dos modos de usar el CD:
Para copiar el árbol de CVS desde el CD a /usr/src (suponiendo que el CD estuviera montado en /mnt):
# cd /mnt; pax -rw CVS Makefile [a-z]* /usr/src
Usar un montaje de unión (ver la página del manual de mount_union(8)) con el CD en un directorio en el que se pueda escribir (esto se puede usar cuando sólo se compile desde el árbol):
# mount -t union -o -b /mnt /usr/src
Quienes no tengan un CD a mano pueden usar cvs(1) para «descargar» el repositorio de fuentes. Este método se discute en la próxima sección.
Después de esto, /usr/src será una buena área de descarga en donde todas las órdenes de cvs(1) funcionarán sin problemas.
CVS se diseñó para que fuera un modo sencillo de bajarse y actualizar los fuentes, y por tanto no es difícil usarlo. Antes de nada debe decidir si va a llevar un seguimiento de la versión en desarrollo (-current) o de una versión estable, la rama parcheada (-stable). El árbol de la versión en desarrollo contiene todos los cambios hechos hasta el último minuto, mientras que una rama parcheada contiene una versión final (-release) más los parches aplicados de errata. Puede ver una definición de -current en las preguntas frecuentes sobre la actualización.
Una vez que haya decidido qué árbol seguir, debe escoger qué servidor de CVS anónimo va a usar. Hay una lista de estos servidores en estas páginas. Sin embargo, note que hay tres modos de acceder a estos servidores:
NOTA: Los usuarios que deseen usar rsh, primero deben configurar la variable CVS_RSH para rsh.
Para shells como Bourne o Korn:
$ export CVS_RSH=/usr/bin/rsh
Para csh/tcsh:
% setenv CVS_RSH /usr/bin/rsh
Una vez que haya escogido qué Servidor de CVS anónimo va a usar y qué método utilizará, podrá empezar a usar cvs. Quienes dispongan de los CDs pueden empezar con la descarga de CVS existente en el CD usando el método antes mencionado para bajar los fuentes a su sistema. Este método pone el árbol de fuentes de OpenBSD en /usr/src.
# cd /usr; cvs checkout -P src
La línea de órdenes anterior descargará el código fuente del árbol de desarrollo (-current). Muchos usuarios sólo necesitarán los fuentes de una rama parcheada (-stable). Para obtener una rama parcheada, debe especificarlo con una etiqueta en la orden de cvs. Por ejemplo:
# cd /usr; cvs checkout -P -rOPENBSD_3_4 src
O OPENBSD_3_3 para 3.3, etc...
En este momento sólo la etiqueta OPENBSD_3_4 contiene el código fuente de la versión final (-release) con los parches de errata aplicados.
Existen dos niveles de acceso al árbol de fuentes:
¡Por favor, lea la nota sobre el uso de ssh vs. rsh!
Nota: Si su servidor se encuentra en esta lista con información inexacta o errónea, por favor contacte con beck@openbsd.org
Para saber qué servidor se encuentra geográficamente más cerca de Vd. puede usar traceroute(8). Para los problemas que puedan surgirle con algún servidor debe dirigirse al mantenedor del servidor en cuestión.
NOTA IMPORTANTE: Hay algunos temas relacionados con el software criptográfico que todos deberían conocer:
Sin embargo, si se encuentra Vd. fuera de los EE.UU. o Canadá, no debe bajarse las secciones criptográficas de los fuentes de OpenBSD desde un sevidor anoncvs ubicado en los EE.UU. Los ficheros en cuestión son:
A causa de la lista ITAR de municiones de los EE.UU., el software criptográfico sólo puede ser exportado a Canadá desde los EE.UU.
AVISO: Si quisiera actualizar una versión estable de parches (-stable) con la versión de desarrollo (-current), tendría que añadir el indicador -A a la orden cvs; en cualquier otro caso este indicador es de poca utilidad. Algunas versiones ya antiguas de la documentación de OpenBSD recomendaban el uso de este indicador en muchos de sus ejemplos. En la actualidad ya no se recomienda este indicador a menos que sea absolutamente necesario.
Un ejemplo del uso de un servidor de CVS anónimo sería:
% setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs
% cd /tmp
% cvs get src/sys/arch/sparc
[copia los ficheros desde el repositorio a su máquina]
% cvs log src/sys/arch/sparc/sparc/locore.s
[muestra el log de entrega del fichero que se escoja]
% cvs diff -bc -r1.1 -r1.5 src/sys/arch/sparc/sparc/locore.s
[muestra los cambios entre las revisiones 1.1 y 1.5]
Para usar un cvs ``pserver'' (una conexión TCP directa en lugar de usar ssh o rsh) debe efectuar el ingreso (login) en el servidor una sola vez:
% setenv CVSROOT :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs
% cvs login
(Logging in to anoncvs@anoncvs1.ca.openbsd.org)
CVS password: anoncvs
[escribe un línea en ~/.cvspass (nombre del fichero anulado por CVS_PASSFILE)]
[Un línea de ejemplo de mi ~/.cvspass después de escribir 'blah' en la contraseña anterior es:
:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc
...después del primer ingreso de login funcionarán el resto de órdenes
del CVSROOT visto anteriormente]
% cvs get ksrc-i386 ksrc-common
[le permite bajar SÓLO lo necesario para reconstruir un núcleo para i386]
Un ejemplo de cómo alguien que usara anoncvs con regularidad actualizaría su árbol de fuentes:
Primero empezaría por obtener un árbol inicial:
Si está siguiendo la versión en desarrollo (-current):
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -P src
Si está siguiendo la rama parcheada (-stable) de 3.4:
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -rOPENBSD_3_4 -P src
Más tarde, para «actualizar» su árbol:
Si está siguiendo la versión en desarrollo (-current):
# cd /usr/src # cvs -q up -Pd
Si está siguiendo la rama parcheada (-stable) de 3.2:
# cd /usr/src # cvs -q up -rOPENBSD_3_2 -Pd
Y cada vez que ejecutara lo anterior sincronizaría su árbol en /usr/src. Esto no destruiría ninguno de sus cambios locales, sino que intentaría fusionar los cambios. Si fuera a usar directorios obj (no enlaces simbólicos obj) es probable que le interese añadir "-I obj" a la línea de órdenes de cvs; de este modo evitará que cvs lance un aviso sobre todos los directorios obj que vaya encontrando y que no se encuentren en el repositorio.
NOTA: si está actualizando un árbol de fuentes que ya había bajado previamente desde un servidor diferente, o desde un CD, debe añadir la opción -d $CVSROOT a cvs.
# cd /usr/src # cvs -d $CVSROOT -q up -Pd
El uso de los portes es parecido al de los fuentes:
(si está haciendo un seguimiento de la versión de desarrollo, -current):
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -P ports
(si está haciendo un seguimiento de la versión estable parcheada para 3.4, -stable):
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -rOPENBSD_3_4 -P ports
Más tarde, para «actualizar» este árbol:
(si está haciendo un seguimiento de la versión de desarrollo, -current):
# cd /usr # cvs -q up -Pd ports
(si está haciendo un seguimiento de la versión estable parcheada para 3.2, -stable):
# cd /usr # cvs -q up -rOPENBSD_3_2 ports
En el ejemplo anterior -q es opcional, y sólo sirve para minimizar los mensajes en pantalla de cvs. Aquéllos que quieran ver pantallas llenas de mensajes lo pueden omitir.
O para obtener un diff de un módulo local parcheado (en el ejemplo siguiente cd.c) para incluirlo con un informe de error:
# cd /usr # cvs diff -u src/sys/scsi/cd.c > /tmp/patch
La página del manual de cvs(1) (incluida con los fuentes de CVS) tiene mucha más información sobre cómo se puede usar CVS.
Las réplicas de anoncvs también disponen del árbol de fuentes de X11 (XFree86) de OpenBSD. Puede adaptar las órdenes anteriores para actualizar su árbol de fuentes de XFree86 desde el tercer CD. Para ello, puede copiar el ábol de fuentes de XFree86 3 desde el CD o bajárselo con el módulo cvs de X11, aunque el módulo actual que contiene XFree86 es el de XF4. Hay dos maneras de copiar el código fuente de XF4 en /usr/XF4:
copie el árbol desde el CD (se asume que el tercer CD ha sido montado en /mnt):
# cd /mnt; cp -Rp XF4 /usr
use un montaje tipo union con el CD montado en un directorio para el que tenga permiso de escritura:
# mount -t union -o -b /mnt/XF4 /usr/XF4
Después de esto, /usr/XF4 estará preparado para ser usado por cvs. Por ejemplo, puede actualizarlo con los fuentes de la versión en desarrollo (se asume que ya ha configurado la variable de entorno CVSROOT):
# cd /usr/XF4
# cvs -q update -Pd
Aviso: Cuando use cvs debe asegurarse que su directorio actual sea el directorio raíz del árbol que tome como referencia, o que sea en un sitio aparte como /tmp. Algunas órdenes como "get" pueden crear un «sub-árbol» en el directorio actual y una actualización posterior producirá, de modo recursivo, información sobre este «sub-árbol».
El servicio anoncvs ofrece a los desarrolladores la oportunidad de aprender a operar con CVS y a meterse de lleno en el proceso de desarrollo antes de obtener acceso absoluto; como resultado de buenas habilidades y resultados de alta calidad, se les otorgará en su momento acceso de desarrollador. También aquéllos que entreguen parches pueden crear sus ficheros diff relativos al árbol de CVS, lo que facilitará la integración.
Anoncvs: rsh vs. ssh
El programa cliente de CVS usa ssh ("secure shell",
OpenSSH) de forma
predeterminada para comunicarse con el programa servidor de CVS.
Muchos de los sitios con CVS ya no ofrecen soporte para rsh por motivos
de seguridad. Algunos problemas locales como los cortafuegos o
emuladores de protocolos imperfectos (como slirp) también pueden
ser un impedimento para la utilización de rsh. Sin embargo, si
desea usar rsh, debe configurar la variable de entorno
CVS_RSH para que apunte a rsh (suele estar en
/usr/bin/rsh).
Si algún tipo de política local deniega las conexiones
salientes por el puerto 22 de ssh, puede usar el puerto 2022 en su
lugar. Pero tenga en cuenta que no todos los servidores de anoncvs
aceptan conexiones por este puerto. Es más, la mayoría de
servidores de anoncvs ya no aceptan el cifrado none, ya que
éste ha sido desactivado en versiones recientes de ssh por
motivos de seguridad. Tampoco intente activar la compresión,
porque CVS ya utiliza compresión.
Para evitar los problemas y restricciones que se mencionan arriba, se
puede especificar algo como lo siguiente en
$HOME/.ssh/config:
El inicio de CVS es un poco ruidoso; para silenciarlo un poco puede
hacer lo siguiente:
Host anoncvs.ca.openbsd.org
Compression no
Port 2022
setenv CVS_CLIENT_PORT -1
Los usuarios que quieran replicar el árbol de CVS de OpenBSD, pueden hacerlo desde anoncvs.usa.openbsd.org o anoncvs1.usa.openbsd.org (son servidores diferentes). Éste es el árbol de CVS, no una copia del árbol de fuentes. Sólo le será útil para poder llevar a cabo operaciones rápidas de cvs (diff, annotate, etc...), o si tiene múltiples árboles de fuentes y sólo quiere transferir nuevos datos una vez (entonces puede obtener una copia del árbol desde su réplica local de cvs).
Un fichero sup (supfile) de ejemplo sería:
cvs host=anoncvs.usa.openbsd.org hostbase=/ base=/home delete
que replicaría el árbol de cvs en /home/cvs con los ficheros de datos de sup en /home/sup. El árbol de cvs completo de OpenBSD ocupa en la actualidad 2.2GB aproximadamente.
Si desea que su servidor sea un réplica nueva de anoncvs, por favor contacte con el mantenedor de anoncvs. Las réplicas de anoncvs requieren alrededor de 2.2GB de espacio en disco, y hacen uso de hasta 32MB de memoria de intercambio por cada usuario de anoncvs (suponiendo que el usuario haga una operación grande; aunque las operaciones más pequeñas usan menos recursos, el impacto de las operaciones de cvs sigue siendo mayor que las de ftp o sup). Por tanto, las máquinas para anoncvs deberían estar dotadas de una excelente conexión de red para el área que van a servir. Existe un documento que describe la configuración de servidores anoncvs.
Después de actualizar el árbol de fuentes, es necesario leer los comentarios al principio de /usr/src/Makefile antes de intentar compilar. También se debe compilar un nuevo núcleo antes de hacer un make build si es posible. En algunos casos puede ser necesario recompilar e instalar la utilidad config antes de compilar el núcleo. Si config GENERIC falla, es probable que se deba a esto último.
Es importante saber que la actualización desde una revisión al árbol actual, recompilando los fuentes, puede ser bastante difícil debido a las dependencias que a menudo no son claras. Por lo tanto, sugerimos que instale primero la última versión preliminar (snapshot) antes de intentar compilar un árbol desde los fuentes.