Linux+FreeBSD mini-HOWTO <author>Niels Kristian Bech Jensen, <tt/nkbj@image.dk/ <date>v1.7, 18 June 1998 <abstract> <nidx>dual booting!Linux, FreeBSD (see FreeBSD dualboot)</nidx> <nidx>Linux!FreeBSD dualboot with (see FreeBSD dualboot)</nidx> <nidx>FreeBSD!Linux dualboot with (see FreeBSD dualboot)</nidx> 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 (<bf/"swap"/), por ejemplo. Es recomendable que tengas alguna experiencia con Linux ò FreeBSD, asì como como saber crear particiones en un disco duro (<tt/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. </abstract> <toc> <sect>¿Que es FreeBSD? <nidx>FreeBSD dualboot!Freebsd overview</nidx> <p> 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): <bf/'' CURRENT''/ y <bf/''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 <url url="http://www.freebsd.org/" name="The FreeBSD Project Homepage">. Los nuevos paquetes "STABLE'' y codigo de desarrollo ``CURRENT'' son vendidos tambien en CDROMs por <url url="http://www.cdrom.com/" name="Walnut Creek CDROM"> (su web y servidores ftp funcionan bajo FreeBSD). <sect>Forma en que FreeBSD etiqueta los discos. <nidx>FreeBSD dualboot!disk drive labelling</nidx> <p> 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. <sect1>FreeBSD : ``slices'' y ``particiones'' <nidx>FreeBSD dualboot!disk drive partitions</nidx> <nidx>FreeBSD dualboot!disk drive slices</nidx> <p> FreeBSD necesita una de las cuatro entradas en la tabla de particiones en el disco duro. Esta particiòn primaria se le denomina <bf/``slice''/ en la terminologìa FreeBSD. Entonces se emplea el programa <tt/disklabel/ para crear ocho particiones en esta primera particiòn. Esta particiones lògicas son llamadas <bf/``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 <tt/fdisk/ de Linux no muestra las particiones BSD en un <bf/"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 (<tt>/dev/hda4</tt> es el <bf/"slice"/ FreeBSD): <verb> 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# </verb> Las letras 'a'...'f' de la primera columna, son las mismas etiquetas que se muestran en un ejemplo para una <bf/"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 (<bf/"swap"/), mientras 'c' designa la totlidad del <bf/"slice"/. Ver la documentaciòn de FreeBSD para saber como asignar estas letras a diferentes particiones. <sect1>Creando particiones y dispositivos en FreeBSD. <nidx>FreeBSD dualboot!disk drive labelling!compared with Linux</nidx> <nidx>FreeBSD dualboot!disk drive partitions!compared with Linux</nidx> <p> Los discos duros son etiquetados de la siguiente manera en Linux y FreeBSD <verb> 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 </verb> Las particiones (FreeBSD slices) en un disco IDE se etiquetan del modo que sigue (<tt>/dev/hda</tt> se utiliza en este ejemplo): <verb> 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 </verb> Las particiones de mi <bf/"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 (<tt>/dev/hda4</tt> es el <bf/"slice"/ FreeBSD en el ejemplo). <verb> 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 </verb> Si ejecutas <tt/dmesg/ en Linux podràs ver (se supone que tienes una particiòn con FreeBSD y un Kernel con soporte <bf/UFS filesystem support/ para esto. Ver secciòn <ref id="installlinux" name="Instalando y preparando Linux">): <verb> Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > </verb> Si has instalado FreeBSD en <tt>/dev/sd1s3</tt> <bf/"slice"/ (<tt>/dev/sdb3</tt> en lenguaje Linux) <tt>/dev/sdb2</tt> es una particiòn Linux extendida conteniendo dos particiones lògicas (<tt>/dev/sdb5</tt> y <tt>/dev/sdb6</tt>), el anterior ejemplo queda asì. <verb> 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 </verb> Se muestra de manera <verb> Partition check: sdb: sdb1 sdb2 < sdb5 sdb6 > sdb3 < sdb7 sdb8 sdb9 sdb10 > </verb> en la salida de <tt/dmesg/. Si tienes una particiòn extendida Linux despuès de tu FreeBSD <bf/"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 <bf/"slice"/. Lo que deberia tener que reconocerse como (<tt>/dev/hda3</tt> es la <bf/"slice"/ FreeBSD y <tt>/dev/hda4</tt> es la particiòn extendida Linux). <verb> Partition check: hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 > hda4 < hda9 hda10 > </verb> es vista como <verb> Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 > </verb> 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 <bf/"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 !!. <sect>Compartiendo memoria de intercambio <bf/"swap"/ entre Linux y FreeBSD <nidx>FreeBSD dualboot!swap space, sharing</nidx> <p> Esta secciòn describe como he hecho para compartir <bf/"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 <bf/"slice"/ de FreeBSD. <sect1>Instalando y preparando Linux<label id="installlinux"> <nidx>FreeBSD dualboot!Linux, installing</nidx> <p> El primer paso es instalar Linux normalmente. Debes tambien preparar espacio para el <bf/"slice"/ FreeBSD en el disco duro. No es necesario crear una particiòn <bf/"swap"/ para Linux, aunque si quieres una, ponla en el espacio que que has asignado para FreeBSD. De esta manera puedes borrar el espacio <bf/"swap"/ mas tarde y utilizarlo para FreeBSD. Cuando hayas instalado Linux, necesitaras construir un nuevo Kernel (en caso de no tener soporte UFS...). Lee <bf/The Linux Kernel HOWTO/ si no sabes como. Debes incluir en la compilaciòn <bf/UFS filesystem support (read only)/ and <bf/BSD disklabel (FreeBSD partition tables) support/: <verb> 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 </verb> Instala el nuevo Kernel y rearranca. Borra la linea que incluye la palabra <bf/"swap"/ de tu <tt>/etc/fstab</tt> si has hecho particiòn <bf/"swap"/. Asegurate de tener un disket de arranque con el nuevo Kernel. Ahora estas preparado para instalar FreeBSD. <sect1>Instalando FreeBSD <nidx>FreeBSD dualboot!FreeBSD, installing</nidx> <p> La instalaciòn de FreeBSD se describe en la documentaciòn de FreeBSD. Quita la particiòn <bf/"swap"/ si creaste una (puedes utilizar el <tt/fdisk/ de FreeBSD). Presta atenciòn al orden de las particiones en el <bf/"slice"/ FreeBSD. Si utilizas el etiquetado por defecto, la segunda particiòn sera <bf/"swap"/. Completa la instalaciòn de FreeBSD y arranca con Linux usando el disco de arranque. <sect1>Activando la particiòn <bf/"swap"/ FreeBSD en Linux. <nidx>FreeBSD dualboot!FreeBSD swap partition configuration</nidx> <p> ejecuta <tt/dmesg/ cuando hayas entrado en Linux. Debe aparecer algo como esto. <verb> Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 > </verb> Esto muestra que <tt>/dev/hda4</tt> es tu FreeBSD <bf/"slice"/, mientras <tt>/dev/hda5</tt>, <tt>/dev/hda6</tt>, <tt>/dev/hda7</tt> y <tt>/dev/hda8</tt> son las particiones FreeBSD. Si tu espacio <bf/"swap"/ es la segunda particiòn en el <bf/"slice"/, entonces sera <tt>/dev/hda6</tt>. Debes poner la siguiente linea en el <tt>/etc/fstab</tt> archivo para activar la particiòn <bf/"swap"/: <verb> /dev/hda6 none swap sw 0 0 </verb> Mientras FreeBSD puede ejecutar <bf/"swap"/ en varios tipos de particiones, Linux necesita una marca especial en la suya. esta firma la hace <tt/mkswap/. FreeBSD destuye esta firma cuando utiliza su espacio de intercambio, por lo tanto deberas ejecutar <tt/mkswap/ cada vez que entres en Linux. Para hacer esto automagicamente :), localiza el script que ejecuta <tt/swapon/ al inicio. En Red Hat Linux esta <tt>/etc/rc.d/rc.sysinit</tt>. Pon la siguiente lìnea justo antes de <tt/swapon -a/: <verb> awk -- '/swap/ && ($1 !~ /#/) { system("mkswap "$1"") }' /etc/fstab </verb> Ello ejecutarà <tt/mkswap/ en cualquier particiòn <bf/"swap"/ de <tt>/etc/fstab</tt> cada vez que arranques excepto si esta comentada (poniendo``#'' como primer caracter en la lìnea.) Ejecuta <tt/free/ para saber el espacio de <bf/"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 <bf/"swap"/ equivocada. La soluciòn al problema, es reinstalar FreeBSD. La experiencia es un gran maestro. ;-) <sect>Arranque de FreeBSD utilizando LILO. <nidx>FreeBSD dualboot!FreeBSD, booting with LILO</nidx> <p> Puedes facilmente arrancar con LILO. No instales el arrancador de FreeBSD (<tt/Booteasy/) si quieres utilizar LILO. Añade las siguientes lìneas en el <tt>/etc/lilo.conf</tt> y ejecutan <tt/lilo/ (asumiendo que el <bf/"slice"/ FreeBSD es <tt>/dev/hda4</tt>): <verb> other=/dev/hda4 table=/dev/hda label=FreeBSD </verb> Si has instalado FreeBSD en el segundo disco SCSI, haz algo parecido a esto (el FreeBSD slice empieza <tt>/dev/sdb2</tt>): <verb> other=/dev/sdb2 table=/dev/sdb loader=/boot/chain.b label=FreeBSD </verb> <sect>Montando sistemas de archivos. <nidx>FreeBSD dualboot!filesystems, mounting</nidx> <nidx>FreeBSD dualboot!mounting filesystems</nidx> <sect1>Montando sistemas de archivos UFS en Linux. <nidx>FreeBSD dualboot!mounting filesystems!UFS, in Linux</nidx> <p> 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 <url url="ftp://sunsite.unc.edu/pub/Linux/ALPHA/ufs/" name="SunSite">. Se llama <bf/U2FS/ y la actual versiòn es <tt/u2fs-0.4.3.tar.gz/.Una versiòn de U2FS (<tt/ufs-0.4.4.tar.gz/)para Linux 2.0.31 y superiores(2.0.xx; not 2.1.xx) puede encontrarse en <url url="http://www.mathi.uni-heidelberg.de/~flight/projects/u2fs/" name="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 <ref id="installlinux" name="Instalando y preparando Linux"> para mayor informaciòn sobre esto. Puedes dejar fuera <bf/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 <bf/"slice"/ excepto la <bf/"swap"/) con un comando como este <verb> mount -t u2fs /dev/hda8 /mnt </verb> Deberàs utilizar este <verb> mount -t ufs /dev/hda8 /mnt </verb> 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. <sect1>Montando sistemas de archivos ext2 en FreeBSD<label id="ext2fs"> <nidx>FreeBSD dualboot!mounting filesystems!ext2fs, in FreeBSD</nidx> <p> Para montar un sistema de archivos ext2fs en FreeBSD, primero tienes que construir un kernel con soporte para ello. Lee <url url="http://www.freebsd.org/handbook/ "name="the FreeBSD handbook"> para saber como hacerlo. Pon la linea <verb> options "EXT2FS" </verb> 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: <verb> mount -t ext2fs /dev/wd0s3 /mnt </verb> 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 <tt/fsck/ se activara en el pròximo arranque de FreeBSD. <sect>Ejecutando algunos programas <nidx>FreeBSD dualboot!foreign binaries</nidx> <sect1>Ejecutando programas FreeBSD bajo Linux . <nidx>FreeBSD dualboot!foreign binaries!FreeBSD in Linux</nidx> <p> El paquete <tt/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. <sect1>Ejecutando programas Linux bajo FreeBSD. <nidx>FreeBSD dualboot!foreign binaries!Linux in FreeBSD</nidx> <p> FreeBSD tiene la habilidad de ejecutar binarios de Linux, compilados en formato ELF y a.out. Para conseguir esto necesitas seguir estos tres pasos. <enum> <item>Activa la compatibilidad Linux. Para esto (en el FreeBSD 2.2.2 --- los detalles pueden variar en otrs versiones) edita el <tt>/etc/rc.conf</tt> y cambia <verb> linux_enable="NO" </verb> to <verb> linux_enable="YES" </verb> y reinicia. Otra forma de cargar el soporte para binarios de Linux es ejecutar el comando <tt>/usr/bin/linux</tt>. De esta manera no necesitas rebotar, y no necesitas tener siempre el soporte de binarios Linux cargado (ahorras memoria). <verb> options COMPAT_LINUX </verb> en la configuraciòn del archivo del kernel FreeBSD si generas un nuevo kernel. <item>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 <tt/linux_lib-2.4.tgz/. Ejecuta el siguiente comando para instalar <verb> pkg_add <path_to_package>/linux_lib-2.4.tgz </verb> <path_to_package> es el directorio donde esta el archivado el paquete. Tambien puedes traertelo desde internet con: <verb> pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/packages-stable/All/linux_lib-2.4.tgz </verb> o ejecutando <tt>/stand/sysinstall</tt>. Pon ``Configure'', ``Packages'' y usa los menus. Debes ejecutar el siguiente comando si pretendes arrancar un programa binario Linux estaticamente enlazado <verb> brandelf -t Linux <name_of_statically_linked_linux_binary> </verb> <item>Instala los programas que quieras ejecutar. Los programas puedes instalarlos en cualquiera de las particiones UFS ò ext2fs. Mira la secciòn <ref id="ext2fs" name="Mounting ext2fs file systems under FreeBSD"> para màs informaciòn acerca de como usar el sistema de archivos ext2fs con FreeBSD. </enum> 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. <sect>Referencias y otros documentos de interès. <nidx>FreeBSD dualboot!information resources</nidx> <p> La ultima versiòn de este MINI-Howto puede ser descargada de <url url="http://www.image.dk/˜nkbj/" name="my homepage"> en varios formatos (incluyendo SGML y PostScript). El documento ha sido traducido al japonès por Mr. Teruyoshi Fujiwara com parte de <url url="ftp://jf.linux.or.jp/pub/JF/other-formats/" name="the JF project">. Gregor Hoffleit mantiene una <url url="http://www.mathi.uni-heidelberg.de/~flight/projects/u2fs/" name="homepage"> con màs informaciòn acerca de U2FS y UFS. <url url="http://www.freebsd.org/" name="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 <url url="http://sunsite.unc.edu/LDP/" name="The Linux Documentation Project">. <sect>Agradecimientos y Copyright <p> Gràcias a los miembros de<url url="http://hotel.prosa.dk/bsd-dk/" name="*BSD user group in Denmark">Por 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. <sect1>Rectificaciones <p> 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. <sect1>Copyright <p> Copyright © 1997, 1998 by Niels Kristian Bech Jensen. Este documento puede ser distribuido unicamente sujeto a las condiciones expuestas en la licencia LDP <url url="http://sunsite.unc.edu/LDP/LDP-COPYRIGHT.html" name="the LDP license">. </article>