miércoles, 19 de agosto de 2009

Actualización del Kernel de FreeBSD 8 desde el source usando csup

El método que uso para actualizar el kernel de FreeBSD es el oficial, usando una herramienta llamada "csup", que al parecer es una versión moderna de otro comando llamado "cvsup".

Lo que hacemos es bajar de algun servidor CVS oficial el código del kernel + aplicaciones. Recomiendan no actualizar solamente el kernel, sino todo el sistema. Luego recompilamos todo.
Este método es medio delicado, no siempre funcionan las cosas. Lo que describo ahora es lo que me ha resultado sin problemas, basado en la documentación que he encontrado.

Primero que nada, nos logueamos como root (con sudo también se puede) en un PC con acceso a internet (implica cambiar la configuración de red de suj-uchile52 que no tiene acceso a los servidores CVS):
$ su
$ cd /usr/src

Con el siguiente comando se aplican las últimas actualizaciones desde el CVS:
$ csup /etc/supfile

donde /etc/supfile es nuestro archivo de configuración para csup. Así lo uso ahora:

*default host=cvsup.jp.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
src-all
ports-all tag=.
doc-all tag=.

en el directorio que dejamos como "base" (/var/db) hay un archivo de menor importancia, /var/db/sup/refuse, que indica que NO queremos bajar. Yo lo tengo con los idiomas distintos al inglés:

doc/bn_*
doc/da_*
doc/de_*
doc/el_*
doc/es_*
doc/fr_*
doc/hu_*
doc/it_*
doc/ja_*
doc/mn_*
doc/nl_*
doc/no_*
doc/pl_*
doc/pt_*
doc/ru_*
doc/sr_*
doc/tr_*
doc/zh_*

Cuando baja los sources, Randall recomienda hacer lo siguiente:

What I normally do if I want to run HEAD/9.0 on a machine that I want to
"be more stable" and make performance measurements is:

1) Go in to the GENERIC file of the machine type and comment out
the 2 lines that mention INVARIANT and the 2 lines that mention
WITNESS.

2) Go to the file head/lib/libc/stdlib/malloc.c and uncomment the
#define that says MALLOC_PRODUCTION

3) Then do all my builds.. kernel and buildworld/installworld.


This then assures me that I do NOT get:

a) Debugging panics
b) Bogged down with unnecessary performance drags that are for
the normal kernel development.

Lo que uso desde ahora es lo que aparece en /usr/src/UPDATING, que es el método oficial.
Esto compila todo o "el mundo"

$ env -i make buildworld

en /usr/src/UPDATING recomiendan poner "env -i" antes de todos los make, así que eso es lo que hago. Una vez olvidé poner env -i y me tiró un error al compilar.

Este proceso se demora harto rato, más que compilar sólo el kernel.

Cuando vuelves del café (con piernas) y todo compiló bien, compilamos el kernel:

$ env -i make kernel KERNCONF=GENERIC

donde GENERIC es el nombre de nuestra configuración. Esto se demora unos 25 minutos.

Si todo salio bien rebooteamos en modo "single user". Esto se hace rebooteando y cuando aparece el menú feo de inicio de FreeBSD elegimos el modo "single user" presionando el 4.

# mount -a
# cd /usr/src
# mergemaster -pa

# make installworld

esto demora 1 ó 2 minutos

# make delete-old

Otra vez, las opciones por default deberían estar OK.

# mergemaster -a

De nuevo, las opciones por default deberían estar OK. Finalmente:

# reboot

Rebootea normalmente y el sistema queda "a punto", con todas las últimas modificaciones. Ojo que para actualizar los ports es otra historia.

No hay comentarios:

Publicar un comentario