Linux+FreeBSD mini-HOWTO

Niels Kristian Bech Jensen, nkbj@image.dk

v1.7, 18 June 1998
Este documento describe como usar Linux y FreeBSD en un mismo sistema. Sirve como pequeña introducciòn a FreeBSD y muestra como ambos sistemas pueden colaborar, compartiendo memoria de intercambio ("swap"), por ejemplo. Es recomendable que tengas alguna experiencia con Linux ò FreeBSD, asì como como saber crear particiones en un disco duro (fdisk) antes de leer este documento. Las indicaciones que aquì se dan han sido testeadas usando FreeBSD 2.2.2, pero deberìa ser vàlido en versiones tanto anteriores como posteriores 3.0.0) sin ). No dudes en enviarme un mail si tienes dudas, comentarios o su- gerencias acerca de este documento. Tambien quisiera conocer gente que tenga al- guna experiencia utilizando Linux con NetBSD y OpenBSD.

1. ¿Que es FreeBSD?

FreeBSD es sistema operativo de tipo UNIX de libre distribuciòn, como Linux. La principal diferencia es que mientras el Kernel de Linux se ha escrito desde cero, FreeBSD se basa en partes de libre distribuciòn de 4.4BSD (Berkeley Sofware Distribution) conocida como 4.4BSD-lite. Este hecho incita a pensar a algunos que FreeBSD està mas cerca de ser un "verdadero" UNIX(TM) que Linux. FreeBSD funciona unicamente en plataformas intel PC (i386 y mayores), aunque se està portando a plataformas DEC Alpha y Sun Sparc. Los requerimientos de hardware de FreeBSD son similares a los de Linux.

El desarrollo de FreeBSD se administra de forma diferente a como se hace en Linux. Un nùcleo de desarrolladores seleccionan y proporcionan un lìder para el proyecto. En listas de correo se discuten con anterioridad los grandes cambios. El proyecto FreeBSD dispone de dos ramas de desarrollo (igual que Linux): '' CURRENT'' y ''STABLE''. La rama de desarrollo ''CURRENT'' es donde se ofrecen los nuevos progresos y avances. El desarrollo de la rama ''STABLE'' se dedica a corregir bugs e investigar y testear minuciosamente nuevas caracterìsticas y soportes.

FreeBSD puede ser utilizado y (re)distribuido libremente igual que Linux. La mayorìa de las partes de FreeBSD son publicadas bajo el copyrigth de BSD; el resto es bajo GNU GPL o GNU LGPL.

Puedes encontrar mas informaciòn acerca de FreeBSD (y bajar el sistema completo) de The FreeBSD Project Homepage. Los nuevos paquetes "STABLE'' y codigo de desarrollo ``CURRENT'' son vendidos tambien en CDROMs por Walnut Creek CDROM (su web y servidores ftp funcionan bajo FreeBSD).

2. Forma en que FreeBSD etiqueta los discos.

La forma en que Linux y FreeBSD etiquetan discos duros y particiònes siguen esquemas diferentes. Esta secciòn explica las mayores diferencias entre ellos. El etiquetado utilizado por FreeBSD es en realidad una adaptaciòn del clàsico de BSD, con la adaptaciòn particular que requieren las particiones en un PC. Todo esto es muy similar a otros sistemas basados en BSD como NetBSD, OpenBSD, Ultrix, Digital Unix, SunOs y Solaris.

2.1 FreeBSD : ``slices'' y ``particiones''

FreeBSD necesita una de las cuatro entradas en la tabla de particiones en el disco duro. Esta particiòn primaria se le denomina ``slice'' en la terminologìa FreeBSD. Entonces se emplea el programa disklabel para crear ocho particiones en esta primera particiòn. Esta particiones lògicas son llamadas ``particiones'' en tèrminos FreeBSD. Este concepto es similar a la forma en que Linux (y DOS) crean particiones lògicas en una extendida. No puedes instalar FreeBSD en una particiòn extendida hecha por Linux (o DOS). Observa que el fdisk de Linux no muestra las particiones BSD en un "slice" FreeBSD desde el menu general, pero puedes ver la informaciòn del etiquetado BSD si pones la opciòn -b. La salida serà similar a esta (/dev/hda4 es el "slice" FreeBSD):

bash# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 64 heads, 63 sectors, 621 cylinders
Units = cylinders of 4032 * 512 bytes

   Device      Boot   Begin    Start      End     Blocks       Id    System
/dev/hda1        *        1        1           27       54400+   83   Linux native
/dev/hda2                28       28          55       56448      83   Linux native
/dev/hda3                56       56        403     701568      83   Linux native
/dev/hda4              404      404      621      439488      a5   BSD/386

Command (m for help): b
Reading disklabel of /dev/hda4 at sector 1624897.

BSD disklabel command (m for help): p

8 partitions:
#              size          offset       fstype        [fsize bsize   cpg]
  a:        64512     1624896     4.2BSD          0         0       0     # (Cyl.  404 - 419)
  b:      104832     1689408        swap                                     # (Cyl.  420 - 445)
  c:      878976     1624896     unused           0          0            # (Cyl.  404 - 621)
  e:        64512     1794240     4.2BSD          0          0      0     # (Cyl.  446 - 461)
  f:      645120     1858752     4.2BSD           0          0      0     # (Cyl.  462 - 621)

BSD disklabel command (m for help): q
bash#

Las letras 'a'...'f' de la primera columna, son las mismas etiquetas que se muestran en un ejemplo para una "slice" FreeBSD. Existen tres particiones especiales en lenguaje BSD. La letra 'a' designa a la particiòn root, 'b' designa la particiòn de intercambio ("swap"), mientras 'c' designa la totlidad del "slice". Ver la documentaciòn de FreeBSD para saber como asignar estas letras a diferentes particiones.

2.2 Creando particiones y dispositivos en FreeBSD.

Los discos duros son etiquetados de la siguiente manera en Linux y FreeBSD

                                Linux           FreeBSD
Primer dispositivo IDE             /dev/hda     /dev/wd0
Segundo dispositivo IDE            /dev/hdb             /dev/wd1
Primer dispositivo SCSI            /dev/sda             /dev/sd0
Segundo dispositivo SCSI                   /dev/sdb             /dev/sd1

Las particiones (FreeBSD slices) en un disco IDE se etiquetan del modo que sigue (/dev/hda se utiliza en este ejemplo):

                                    Linux                  FreeBSD
Primera particiòn primaria       /dev/hda1       /dev/wd0s1
Segunda paticiòn primaria        /dev/hda2       /dev/wd0s2
Tercera Particiòn primaria       /dev/hda3       /dev/wd0s3
Cuarta particiòn primaria                /dev/hda4       /dev/wd0s4

Las particiones de mi "slice" FreeBSD estan señaladasde este modo. Este es el marcado que se hace por defecto. Es posible cambiarlo si quieres cambiar tu instalaciòn de FreeBSD (/dev/hda4 es el "slice" FreeBSD en el ejemplo).

Linux label     FreeBSD label   FreeBSD mount point
/dev/hda5       /dev/wd0s4a             /
/dev/hda6       /dev/wd0s4b             swap
/dev/hda7       /dev/wd0s4e             /var
/dev/hda8       /dev/wd0s4f             /usr

Si ejecutas dmesg en Linux podràs ver (se supone que tienes una particiòn con FreeBSD y un Kernel con soporte UFS filesystem support para esto. Ver secciòn Instalando y preparando Linux):

Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Si has instalado FreeBSD en /dev/sd1s3 "slice" (/dev/sdb3 en lenguaje Linux) /dev/sdb2 es una particiòn Linux extendida conteniendo dos particiones lògicas (/dev/sdb5 y /dev/sdb6), el anterior ejemplo queda asì.

Linux label     FreeBSD label   FreeBSD mount point
/dev/sdb7       /dev/sd1s3a             /
/dev/sdb8       /dev/sd1s3b             swap
/dev/sdb9       /dev/sd1s3e             /var
/dev/sdb10      /dev/sd1s3f             /usr

Se muestra de manera

Partition check:
 sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 >
en la salida de dmesg.

Si tienes una particiòn extendida Linux despuès de tu FreeBSD "slice", puedes tener problemas, porque muchos discos de instalaciòn de Linux estan hechos sin soporte para UFS, entonces no podra reconocer las particiones FreeBSD dentro del "slice". Lo que deberia tener que reconocerse como (/dev/hda3 es la "slice" FreeBSD y /dev/hda4 es la particiòn extendida Linux).

Partition check:
 hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 >
es vista como
Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 >

Esto puede dar lugar a destruir la tabla de particiones de disco y causar la pèrdida de datos. Mi advertencia es ¡¡ poner siempre el "slice" FreeBSD despuès de una particiòn extendida Linux, y no cambiar particiones lògicas en tu particiòn extendida de Linux despuès de instalar FreeBSD !!.

3. Compartiendo memoria de intercambio "swap" entre Linux y FreeBSD

Esta secciòn describe como he hecho para compartir "swap" entre Linux y FreeBSD. Hay otros caminos para conseguir el mismo resultado. Pudes instalar FreeBSD antes que Linux si quieres, pero presta atenciòn al orden en que particionas el "slice" de FreeBSD.

3.1 Instalando y preparando Linux

El primer paso es instalar Linux normalmente. Debes tambien preparar espacio para el "slice" FreeBSD en el disco duro. No es necesario crear una particiòn "swap" para Linux, aunque si quieres una, ponla en el espacio que que has asignado para FreeBSD. De esta manera puedes borrar el espacio "swap" mas tarde y utilizarlo para FreeBSD.

Cuando hayas instalado Linux, necesitaras construir un nuevo Kernel (en caso de no tener soporte UFS...). Lee The Linux Kernel HOWTO si no sabes como. Debes incluir en la compilaciòn UFS filesystem support (read only) and BSD disklabel (FreeBSD partition tables) support:

UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?] y
BSD disklabel (FreeBSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?]
(NEW) y

Instala el nuevo Kernel y rearranca. Borra la linea que incluye la palabra "swap" de tu /etc/fstab si has hecho particiòn "swap". Asegurate de tener un disket de arranque con el nuevo Kernel. Ahora estas preparado para instalar FreeBSD.

3.2 Instalando FreeBSD

La instalaciòn de FreeBSD se describe en la documentaciòn de FreeBSD. Quita la particiòn "swap" si creaste una (puedes utilizar el fdisk de FreeBSD). Presta atenciòn al orden de las particiones en el "slice" FreeBSD. Si utilizas el etiquetado por defecto, la segunda particiòn sera "swap". Completa la instalaciòn de FreeBSD y arranca con Linux usando el disco de arranque.

3.3 Activando la particiòn "swap" FreeBSD en Linux.

ejecuta dmesg cuando hayas entrado en Linux. Debe aparecer algo como esto.

Partition check:
 hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >

Esto muestra que /dev/hda4 es tu FreeBSD "slice", mientras /dev/hda5, /dev/hda6, /dev/hda7 y /dev/hda8 son las particiones FreeBSD. Si tu espacio "swap" es la segunda particiòn en el "slice", entonces sera /dev/hda6.

Debes poner la siguiente linea en el /etc/fstab archivo para activar la particiòn "swap":

/dev/hda6       none            swap            sw              0       0

Mientras FreeBSD puede ejecutar "swap" en varios tipos de particiones, Linux necesita una marca especial en la suya. esta firma la hace mkswap. FreeBSD destuye esta firma cuando utiliza su espacio de intercambio, por lo tanto deberas ejecutar mkswap cada vez que entres en Linux. Para hacer esto automagicamente :), localiza el script que ejecuta swapon al inicio. En Red Hat Linux esta /etc/rc.d/rc.sysinit. Pon la siguiente lìnea justo antes de swapon -a:

awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab

Ello ejecutarà mkswap en cualquier particiòn "swap" de /etc/fstab cada vez que arranques excepto si esta comentada (poniendo``#'' como primer caracter en la lìnea.)

Ejecuta free para saber el espacio de "swap" que tienes cuando hayas reiniciado. Deberas iniciar FreeBSD para asegurarte de que todo ha ido bien. Si esto no es asi, seguramente has utilizado una particiòn "swap" equivocada. La soluciòn al problema, es reinstalar FreeBSD. La experiencia es un gran maestro. ;-)

4. Arranque de FreeBSD utilizando LILO.

Puedes facilmente arrancar con LILO. No instales el arrancador de FreeBSD (Booteasy) si quieres utilizar LILO. Añade las siguientes lìneas en el /etc/lilo.conf y ejecutan lilo (asumiendo que el "slice" FreeBSD es /dev/hda4):

other=/dev/hda4
        table=/dev/hda
        label=FreeBSD

Si has instalado FreeBSD en el segundo disco SCSI, haz algo parecido a esto (el FreeBSD slice empieza /dev/sdb2):

other=/dev/sdb2
        table=/dev/sdb
        loader=/boot/chain.b
        label=FreeBSD

5. Montando sistemas de archivos.

5.1 Montando sistemas de archivos UFS en Linux.

Desafortunadamente el controlador UFS en los Kernel 2.0.xx no incluyen soporte para BSD. Cuando pruebes a montar las particiones FreeBSD, puedes recibir algunos mensajes de error (las particiones estan montadas, pero no puede leerse nada en ellas). Este problema se ha resuelto a partir de Linux-2.1.87.

Hay otra versiòn para los controladores UFS en los kernel 2.0.xx (xx <= 30) en SunSite. Se llama U2FS y la actual versiòn es u2fs-0.4.3.tar.gz.Una versiòn de U2FS (ufs-0.4.4.tar.gz)para Linux 2.0.31 y superiores(2.0.xx; not 2.1.xx) puede encontrarse en this site con mayor y completa informaciòn sobre U2FS (y UFS.)

Ahora construye un kernel con soporte para el sistema de archivos U2FS y sistema BSD de etiquetas. Ver la secciòn Instalando y preparando Linux para mayor informaciòn sobre esto. Puedes dejar fuera UFS filesystem support en el kernel si utilizas U2FS.

Cuando tengas instalado el nuevo kernel, puedes montar los archivos tipo UFS (todas las particiones en el "slice" excepto la "swap") con un comando como este

mount -t u2fs /dev/hda8 /mnt

Deberàs utilizar este

mount -t ufs /dev/hda8 /mnt
si usas un kernel a partir de 2.1.87.

El controlador UFS (U2FS) es solo de lectura, solo puedes leer, no escribir en un sistema de archivos UFS. El desarrollo de un controlador lectura/escritura, acaba justamente de empezar.

5.2 Montando sistemas de archivos ext2 en FreeBSD

Para montar un sistema de archivos ext2fs en FreeBSD, primero tienes que construir un kernel con soporte para ello. Lee the FreeBSD handbook para saber como hacerlo. Pon la linea

options         "EXT2FS"
en el archivo de configuracion del nuevo kernel para ello.

Cuando hayas arrancado con el nuevo kernel, puedes montar un sistema de archivos ext2fs con este comando:

mount -t ext2fs /dev/wd0s3 /mnt

Debes saber que no puedes montar sistemas de archivos exts2fs en una particiòn extendida de FreeBSD.

debido a un bug en FreeBSD 2.2.5 y anteriores, deberàs desmontar las particiones ext2fs antes de apagar el equipo o hacer un reinicio si utilizas estas versiones. Si reinicias FreeBSD sin haber desmontado las particiones ext2fs, el sistema no puede sincronizar el sistema de archivos UFS. Esto conlleva a que fsck se activara en el pròximo arranque de FreeBSD.

6. Ejecutando algunos programas

6.1 Ejecutando programas FreeBSD bajo Linux .

El paquete iBCS da soporte para ejecutar binarios FreeBSD bajo Linux, pero es antiguo y no esta mantenido. No puedo hacer que funcione. Por favor, hazme saber si has tenido mas suerte con esto.

6.2 Ejecutando programas Linux bajo FreeBSD.

FreeBSD tiene la habilidad de ejecutar binarios de Linux, compilados en formato ELF y a.out. Para conseguir esto necesitas seguir estos tres pasos.

  1. Activa la compatibilidad Linux. Para esto (en el FreeBSD 2.2.2 --- los detalles pueden variar en otrs versiones) edita el /etc/rc.conf y cambia
    linux_enable="NO"
    
    to
    linux_enable="YES"
    
    y reinicia. Otra forma de cargar el soporte para binarios de Linux es ejecutar el comando /usr/bin/linux. De esta manera no necesitas rebotar, y no necesitas tener siempre el soporte de binarios Linux cargado (ahorras memoria).
    options         COMPAT_LINUX
    
    en la configuraciòn del archivo del kernel FreeBSD si generas un nuevo kernel.
  2. Tienes que instalar las librerìas compartidas de Linux si los binarios estan enlazados dinamicamente. Las librerìas estan incluidas en la versiòn 2.2.2 como linux_lib-2.4.tgz. Ejecuta el siguiente comando para instalar
    pkg_add <path_to_package>/linux_lib-2.4.tgz
    
    <path_to_package> es el directorio donde esta el archivado el paquete. Tambien puedes traertelo desde internet con:
    pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz
    
    o ejecutando /stand/sysinstall. Pon ``Configure'', ``Packages'' y usa los menus. Debes ejecutar el siguiente comando si pretendes arrancar un programa binario Linux estaticamente enlazado
    brandelf -t Linux <name_of_statically_linked_linux_binary>
    
  3. Instala los programas que quieras ejecutar. Los programas puedes instalarlos en cualquiera de las particiones UFS ò ext2fs. Mira la secciòn Mounting ext2fs file systems under FreeBSD para màs informaciòn acerca de como usar el sistema de archivos ext2fs con FreeBSD.

He ejecutado satisfactoriamente versiones Linux de Applixware 4.3 y Netscape 3.01 (en formato ELF) con FreeBSD utilizando este mètodo (si, ya se que hay una versiòn para FreeBSD nativa de Netscape 4.) Las versiones Linux de Acroread y StarOffice tambièn trabajan bien en FreeBSD. Lee la documentaciòn de FreeBSD para mas informaciòn acerca de este asunto.

7. Referencias y otros documentos de interès.

La ultima versiòn de este MINI-Howto puede ser descargada de my homepage en varios formatos (incluyendo SGML y PostScript). El documento ha sido traducido al japonès por Mr. Teruyoshi Fujiwara com parte de the JF project.

Gregor Hoffleit mantiene una homepage con màs informaciòn acerca de U2FS y UFS.

The FreeBSD Project Homepage existe bastante informaciòn acerca de FreeBSD (ademas del sistema entero para poder descargarlo).

El Linux Kernel HOWTO esta editado en The Linux Documentation Project.

8. Agradecimientos y Copyright

Gràcias a los miembros de *BSD user group in DenmarkPor responder a las inquietudes de un novato en el sistema FreeBSD, a Mr. Takeshi Okazaki por facilitarme la existencia del paquete U2FS, y a Mr. David O'Brien por sus valiosas sugerencias.

8.1 Rectificaciones

Aunque la informaciòn que se da en este documento creemos que es correcta, los autores no asumiràn ninguna responsabilidad sobre el contenido de la misma. Utiliza los consejos y recomendaciones que aquì se dan bajo tu pròpia responsabilidad.

8.2 Copyright

Copyright © 1997, 1998 by Niels Kristian Bech Jensen. Este documento puede ser distribuido unicamente sujeto a las condiciones expuestas en la licencia LDP the LDP license.