2012/04/23

FreeBSD Updating and Upgrading

Introduccion:

Vamos a sincronizar y/o actualizar las fuentes de FreeBSD (Kernel + World) con csup, con esto podemos tener un FreeBSD con las ultimas actualizacion dentro de RELEASE o para pasar de una version a otra.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet

Chapter 24 Updating and Upgrading FreeBSD
25.7 Rebuilding “world”
25.8 Deleting Obsolete Files, Directories and Libraries

Proceso:

Como root ejecutamos los siguientes comandos y esperamos a que terminen:

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/standard-supfile
# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile
# csup -h cvsup17.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/doc-supfile

FreeBSD Updating Upgrading
Rebuilding “world”
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html

Nota:
Buen momento para poner sopurte de CUPS en /etc/make.conf

# edit /etc/make.conf

agregar las siguientes lineas:

# 7 Fine Tuning CUPS-Related Ports
# http://www.freebsd.org/doc/en/articles/cups/article.html
#
WITH_CUPS=YES
CUPS_OVERWRITE_BASE=YES
WITHOUT_LPR=YES
#
# Qt 4 can be built with optional support for:
# - Common UNIX Printing System (CUPS)
# - Network Audio System (NAS)
# - Qt style that renders using GTK (QGTKSTYLE)
QT4_OPTIONS= CUPS NAS QGTKSTYLE

En este punto nos encontramos con dos opciones, podemos construir un kernel GENERIC o uno Custom (personalizado) en donde podemos adicionarle o quitarle modulos al kernel. Mire que hay comandos que son comunes para ambos y otros que estan separados en columnas, ejecute segun lo que este compilando.

 1. # cd /usr/src
 2. # make buildworld

Building a
GENERIC Kernel    or     Custom Kernel (comandos extras o diferentes)  
                            
                                         # cd /usr/src/sys/amd64/conf
                                         # mkdir /root/kernels
                                         # cp GENERIC /root/kernels/MYKERNEL
                                         # ln -s /root/kernels/MYKERNEL
                                         # cd /usr/src
                                         # edit /root/kernels/MYKERNEL
                                             cambie la linea:
                                             ident           GENERIC
                                             por:
                                             ident           MYKERNEL
                                             (agrege sus opciones, ejemplo: options QUOTA)

 3. # make buildkernel    # make buildkernel KERNCONF=MYKERNEL

Installing a
GENERIC Kernel    or      Custom Kernel (comandos extras o diferentes)  

 4. # make installkernel   # make installkernel KERNCONF=MYKERNEL

 5. # shutdown -r now  <- Opcional, si no reinicia continue en el paso 6.

     After installkernel finishes successfully, you should boot in single user mode
     (i.e., using boot -s from the loader prompt). Then run:

     # fsck -p
     # mount -u /
     # mount -a -t ufs
     # swapon -a
     # adjkerntz -i

 6. # mergemaster -p
          How should I deal with this? [Leave it for later]
          (i upgrade lo recomendado, d mantener archivo viejito si le hice cambios)
          ...
          *** Comparison complete
          Do you wish to delete what is left of /var/tmp/temproot? [no] (enter)
          How should I deal with this? [Leave it for later] (enter)
          (i upgrade lo recomendado, d mantener archivo viejito si le hice cambios)

 7. # make installworld
 8. # mergemaster
        How should I deal with this? [Use the existing /var/tmp/temproot] (enter)
        ...
        *** Comparison complete
        Do you wish to delete what is left of /var/tmp/temproot? [no] (enter)
        ...
        *** You installed a new aliases file, so make sure that you run
        Would you like to run it now? y or n [n] (enter)

 9. # reboot

25.8 Deleting Obsolete Files, Directories and Libraries
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/make-delete-old.html

10. # cd /usr/src
11. # make check-old
12. # yes|make delete-old
13. # make delete-old-libs

---------------------------------------
Si algo sale mal y el nuevo kernel no funciona bien, puedo regresar al anterior...
Al iniciar el equipo nos muestra el listado de opciones de inicio de FreeBSD

6. Escape to loader prompt
Type '?' for a list of commands, 'help' for more detailed help.
OK

(escribimos)
unload kernel (enter)
(escribimos)
boot /boot/kernel.old/kernel (enter)

Luego podemos renombrar el kernel problematico y renombrar el kernel anterior que funciona (kernel.old)
# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.old /boot/kernel
---------------------------------------

Instalar nuestro primer port "portmaster"

Es un programa para mantener todos los ports actualizados

# whereis portmaster
portmaster: /usr/ports/ports-mgmt/portmaster
# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Suele pasar que luego de instalar algun port, al ejecutar el comando, nos muestre

"Command not found."

Para que detecte el nuevo port instalado ejecutamos:

# rehash

Comandos basicos de portmaster:

# portmaster -L <- Lista los ports y las actualizaciones disponibles
# portmaster -a  <- Actualiza todos los ports instalados
# portmaster -af <- Actualiza y recompila todos los ports instalados
# portmaster -a -x nombreport <- Actualiza todos los port excepto nombreport, para agregar otros ports -x nombreport -x nombreport2

Una opcion muy util es "-d  always clean distfiles" con eso simpre mantendra nuestro directorio distfiles con los fuentes de las versiones de los ports instalados y borrara los fuentes de ports viejos. Lo contrario (mantener los fuentes de los ports viejos y nuevos) seria  "-D  no cleaning of distfiles".

Nota:

En el comando

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/standard-supfile

Estamos usando el archivo standard-supfile que nos mantiene en la misma version, si queremos cambiar a otra, por ejemplo de 8.2 RELEASE a 8.3 RELEASE, debemos compiar ese archivo y modificar la linea "tag=RELENG_8_2", se haria asi:

# cp /usr/share/examples/cvsup/ports-supfile /root
# edit /root/ports-supfile

Cambiar la linea:

*default release=cvs tag=RELENG_8_2

por

*default release=cvs tag=RELENG_8_3

Salir del editor y guardar los cambios (en edit, con "Esc" main menu, "a" leave editor, "a" save changes)

Ejecutar el comando usando el nuevo archivo
# csup -h cvsup15.us.FreeBSD.org -g -L 2 /root/ports-supfile

Para ver el listado de servidores desde donde podemos descargar las fuentes entre a:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html#CVSUP-MIRRORS

Para mantenernos en FreeBSD 8.2 RELEASE usamos el tag=RELENG_8_2
Para cambiarnos a FreeBSD 8.3 usariamos el tag=RELENG_8_3

Para ver el listado de tags entre a:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvs-tags.html

Cuando se hace un cambio entre versiones de FreeBSD (por ejemplo de 8.2 a 8.3) es necesario recompilar e instalar todos los ports que ya teniamos instalados, para hacer esto usamos el comando:

# portmaster -af

Ejemplos utiles:

Buscar informacion de varios ports
# pkg_info | egrep 'hal|cdrtools|dvd\+rw-tools'
cdrtools-3.00_2     CD/DVD/BluRay and ISO-9660 image creation and extraction to
dvd+rw-tools-7.1    DVD burning software
hal-0.5.14_20       Hardware Abstraction Layer for simplifying device access

Reinstalar un port
# portmaster hal-0.5.14_20

Limpiar los fuentes descargados en /usr/ports/distfiles de ports que ya no tenemos instalados
# portmaster -y --clean-distfiles