                   Guia de FreeBSD para usuarios de Linux(R)

  John Ferrell

   Revision: 43184

   Copyright (c) 2008 El Proyecto de Documentacion de FreeBSD

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   Linux is a registered trademark of Linus Torvalds.

   Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are
   trademarks or registered trademarks of Intel Corporation or its
   subsidiaries in the United States and other countries.

   Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in
   the United States and other countries.

   UNIX is a registered trademarks of The Open Group in the United States and
   other countries.

   Many of the designations used by manufacturers and sellers to distinguish
   their products are claimed as trademarks. Where those designations appear
   in this document, and the FreeBSD Project was aware of the trademark
   claim, the designations have been followed by the "(TM)" or the "(R)"
   symbol.

   2013-11-13 por hrs.
   Resumen

   El objetivo de este documento es familiarizar de forma rapida a usuarios
   de nivel intermedio o avanzado de Linux(R) sobre los conceptos basicos de
   FreeBSD.

   Traduccion de Gabor Ko:vesdan <gabor@FreeBSD.org>.

   [ Split HTML / Single HTML ]

     ----------------------------------------------------------------------

   Tabla de contenidos

   1. Introduccion

   2. Shells: ?No esta Bash?

   3. Packages y Ports: Instalacion de software en FreeBSD

   4. Arranque del sistema: ?Donde estan los niveles de ejecucion?

   5. Configuracion de la red

   6. Cortafuegos

   7. Actualizacion de FreeBSD

   8. procfs: perdido pero no olvidado

   9. Comandos mas comunes

   10. Conclusion

1. Introduccion

   En este documento se muestran las diferencias entre FreeBSD y Linux(R)
   para que usuarios de nivel intermedio o avanzado de Linux(R) puedan
   aprender rapidamente los fundamentos de FreeBSD. Es solamente una breve
   presentacion tecnica, no intenta explicar las diferencias de las
   "filosofias" que hay detras de ambos sistemas operativos.

   Este documento presupone que usted ya tiene FreeBSD instalado. Si no lo ha
   instalado o necesita ayuda con el proceso de la instalacion consulte el
   capitulo en el que se explica la instalacion de FreeBSD del Handbook.

2. Shells: ?No esta Bash?

   Quienes vienen de Linux(R) se suelen sorprender de que Bash no sea la
   shell por omision, que en FreeBSD es tcsh(1). De hecho Bash ni siquiera
   forma parte de la instalacion minima de FreeBSD. A pesar de esto tanto
   Bash como cualquiera de sus shell favoritas estan en la Coleccion de
   Packages y Ports de FreeBSD.

   Si instala otras shell puede usar chsh(1) como shell por omision para sus
   usuarios, pero le recomendamos encarecidamente que no cambie la shell por
   omision del usuario root. La razon es que las shell que no forman parte de
   la instalacion base generalmente se instalan en /usr/local/bin o en
   /usr/bin. En caso de problemas es posible que los sistemas de ficheros
   donde estan /usr/local/bin y /usr/bin no puedan montarse. En un caso asi
   root no podria acceder a su shell por omision, con lo que no podria
   iniciar su sesion. Para evitar este tipo de problemas se creo una segunda
   cuenta de usuario root, el usuario toor. Consulte la seccion de seguridad
   de las FAQ si quiere saber mas sobre la cuenta toor.

3. Packages y Ports: Instalacion de software en FreeBSD

   Aparte del metodo tradicional de instalar software en UNIX(R) (descargar
   fuentes, descomprimir, editar el fuente y compilar), FreeBSD ofrece dos
   alternativas para instalar programas: packages y dos alternativas para
   instalar programas: package y ports. Una lista y ports. Hay una lista
   completa de los ports disponibles aqui.

  3.1. Packages

   Los "packages" son programas precompilados, equivalentes en FreeBSD a los
   ficheros .deb en sistemas Debian/Ubuntu y .rpm en sistemas Red Hat/Fedora.
   Los packages se instalan usando pkg_add(1). Por ejemplo, puede instalar
   Apache 2.2 del siguiente modo:

 # pkg_add /tmp/apache-2.2.6_2.tbz

   Al usar la opcion -r, pkg_add(1) automaticamente descargara el package
   indicado y lo instalara, asi como todos aquellos que necesite para su
   funcionamiento. Esto son las dependencias.

 # pkg_add -r apache22
 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done.
 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done.
 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done.
 [snip]

 To run apache www server from startup, add apache22_enable="YES"
 in your /etc/rc.conf. Extra options can be found in startup script.

  Nota:

   Si usa una version release de FreeBSD (6.2, 6.3, 7.0, etc., lo que
   seguramente es una instalacion desde CD-ROM) pkg_add -r descargara
   packages compilados para esa release especifica. Estos packages pueden ser
   versiones desactualizadas del programa. Puede usar la variable PACKAGESITE
   para ignorar este comportamiento, que es el que se espera por omision del
   programa. Por ejemplo, asigne a PACKAGESITE el valor
   ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/ si
   quiere descargar los packages mas recientes compilados para la version
   6.X.

   Para mas informacion sobre los packages consulte la seccion 4.4 del
   Handbook: Uso del sistema de packages.

  3.2. Ports

   El segundo metodo que ofrece FreeBSD para instalar programas es usar la
   Coleccion de Ports. la Coleccion de Ports es un entorno de ficheros
   Makefile y parches adaptados especificamente para poder instalar desde el
   codigo fuente aplicaciones de lo mas variopinto en sistemas FreeBSD. Si
   instala un port el sistema descargara los fuentes, aplicara los parches
   necesarios, compilara el codigo e instalara el programa (y hara
   exactamente los mismo con todas las dependencias).

   La Coleccion de Ports, tambien conocida como arbol de ports, esta en
   /usr/ports si se instalo durante el proceso de instalacion de FreeBSD. Si
   la Coleccion de Ports no esta instalada puede hacerlo puede hacerlo desde
   los discos de instalacion mediante sysinstall(8) o desde los servidores de
   FreeBSD gracias a csup(1) o portsnap(8). Tiene instrucciones detalladas
   para instalar la Coleccion de Ports en la seccion 4.5.1 del Handbook.

   Instalar un port es (generalmente) tan simple como entrar en el directorio
   del port y ejecutar el proceso de compilacion. El ejemplo que se muestra a
   continuacion instala Apache 2.2 desde la Coleccion de Ports:

 # cd /usr/ports/www/apache22
 # make install clean

   Una de las principales ventajas del uso de ports para instalar software es
   la posibilidad de ajustar las opciones de la instalacion. Por ejemplo, es
   posible activar mod_ldap dentro de su Apache 2.2 durante la instalacion
   mediante el uso de la variable WITH_LDAP de make(1):

 # cd /usr/ports/www/apache22
 # make WITH_LDAP="YES" install clean

   Para mas informacion sobre la Coleccion de Ports consulte la seccion del
   Handbook dedicada a la Coleccion de Ports.

  3.3. ?Que deberia usar? ?Ports o Packages?

   Los packages son simplemente ports precompilados, asi que es cuestion de
   elegir entre instalar desde los fuentes (ports) o instalar binarios
   directamente (packages). Cualquiera de los dos tiene sus propias ventajas:

   Package (binario)
     * Instalacion mas rapida (compilar programas grandes puede llevar su
       tiempo).
     * No hay que comprender el proceso de compilar software.
     * No es necesario instalar compiladores en su sistema.
   Ports (fuente)
     * Es posible ajustar las opciones de la instalacion. (Los packages se
       generan normalmente con las opciones estandar. Con los ports puede
       ajustar diversas opciones, como disponer de modulos adicionales o
       cambiar la ruta por omision.)
     * Puede usar sus propios parches si tiende hacerlo.

   Si no tiene requisitos especiales los packages probablemente cubran sus
   necesidades sin problema. Si alguna vez necesita algo mas ajustado puede
   recurrir a los ports. Tenga en cuenta que si necesita un programa a su
   medida pero sigue prefiriendo usar packages puede hacerse uno su gusto
   mediante make patch y luego copie el package a otras maquinas.

4. Arranque del sistema: ?Donde estan los niveles de ejecucion?

   Linux(R) usa el sistema de inicio SysV, mientras que FreeBSD usa el
   sistema init(8) tradicional en BSD. En el init(8) del estilo BSD no
   existen ni los niveles de ejecucion ni /etc/inittab; en vez de esto el
   inicio se controla desde rc(8). El script /etc/rc lee los ficheros
   /etc/defaults/rc.conf y /etc/rc.conf para determinar que servicios deben
   arrancarse. Despues de esto se arrancan los servicios a los que se hace
   referencia en los scripts de arranque ubicados en /etc/rc.d/ o
   /usr/local/etc/rc.d/. Estos scripts son similares a los que hay en
   /etc/init.d/ en un sistema Linux(R).

   ?Por que los script de arranque arranque estan en dos sitios? Los script
   situados en /etc/rc.d/ son para programas del sistema "base", como
   cron(8), sshd(8), syslog(3) y otros. Los scripts de /usr/local/etc/rc.d/
   son para software instalado por el usuario como por ejemplo Apache, Squid,
   etc.

   ?Cual es la diferencia entre el sistema "base" y los programas instalados
   por el usuario? FreeBSD se desarrolla como un sistema operativo completo.
   En otras palabras, el kernel, las bibliotecas del sistema y las utilidades
   (por ejemplo ls(1), cat(1), cp(1), etc.) se desarrollan y se publican como
   un todo. A esto es a lo que nos referimos como "sistema base". Los
   programas instalados por el usuario, como por ejemplo Apache, X11,
   Mozilla Firefox, etc. no forman parte del sistema "base". Estos programas
   normalmente se instalan desde la Coleccion de Packages y Ports. Para
   separarlos del sistema "base" se instalan normalmente en /usr/local/. De
   ahi que los binarios de los programas instalados por los usuario se situen
   en /usr/local/bin/, los ficheros de configuracion en /usr/local/etc/, etc.

   Los servicios se arrancan mediante lineas NombreDeServicio_enable="YES" en
   /etc/rc.conf (rc.conf(5)). Eche un vistazo a /etc/defaults/rc.conf: La
   configuracion por omision del sistema puede sobreescribirse desde
   /etc/rc.conf. Ademas, al instalar programas debe asegurarse de leer la
   documentacion para determinar como arrancar los servicios que puedan estar
   relacionados.

   El siguiente fragmento de /etc/rc.conf arranca sshd(8) y Apache 2.2.
   Tambien hace que Apache arranque con SSL.

 # enable SSHD
 sshd_enable="YES"
 # enable Apache with SSL
 apache22_enable="YES"
 apache22_flags="-DSSL"

   Una vez que un servicio aparece en /etc/rc.conf el servicio puede
   arrancarse desde la linea de comandos (sin reiniciar el sistema):

 # /etc/rc.d/sshd start

   Si un servicio no dispone de la correspondiente entrada en /etc/rc.conf se
   puede arrancar desde la linea de comandos usando la opcion forcestart:

 # /etc/rc.d/sshd forcestart

5. Configuracion de la red

  5.1. Interfaces de red

   Los nombres de interfaces de red representan en FreeBSD el nombre del
   controlador seguido por un numero, en lugar del esquema que usa Linux(R),
   el generico. ethX. La salida de ifconfig(8) que se muestra a continuacion
   presenta dos interfaces del tipo Intel(R) Pro 1000 (em0 y em1):

 % ifconfig
 em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         options=b<RXCSUM,TXCSUM,VLAN_MTU>
         inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
         ether 00:50:56:a7:70:b2
         media: Ethernet autoselect (1000baseTX <full-duplex>)
         status: active
 em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         options=b<RXCSUM,TXCSUM,VLAN_MTU>
         inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
         ether 00:50:56:a7:03:2b
         media: Ethernet autoselect (1000baseTX <full-duplex>)
         status: active

  5.2. Configuracion de IP

   Con ifconfig(8) puede asignar una direccion IP a una interfaz de red. No
   obstante, si quiere que la IP siga asignada a la interfaz despues de
   reiniciar tendra que incluirla en /etc/rc.conf. En el ejemplo siguiente se
   especifica el nombre de la maquina, la la direccion IP y la puerta de
   enlace por omision:

 hostname="servidor1.ejemplo.com"
 ifconfig_em0="inet 10.10.10.100  netmask 255.255.255.0"
 defaultrouter="10.10.10.1"

   Con la siguiente configuracion la interfaz indicada intentara obtener una
   direccion IP mediante DHCP:

 hostname="servidor1.ejemplo.com"
 ifconfig_em0="DHCP"

6. Cortafuegos

   Igual que Linux(R) dispone de IPTABLES, FreeBSD tambien disponde de
   cortafuegos integrado en el kernel, solo que FreeBSD en lugar de uno
   dispone de tres:

     * IPFIREWALL
     * IPFILTER
     * PF

   IPFIREWALL o IPFW (el programa para manejar las reglas de IPFW es ipfw(8))
   es el cortafuegos que desarrollan y mantienen los desarrolladores de
   FreeBSD. IPFW se puede combinar con dummynet(4) para conseguir servicios
   de "traffic shaping" y simular diferentes tipos de conexiones.

   Veamos un ejemplo de regla que permite la entrada de trafico SSH:

 ipfw add allow tcp from any to me 22 in via $ext_if

   IPFILTER es el cortafuegos que desarrolla Darren Reed. No es especifico de
   FreeBSD y se ha portado ya a diversos sistemas operativos como NetBSD,
   OpenBSD, SunOS, HP/UX y Solaris.

   El siguiente ejemplo permite la entrada de trafico SSH:

 pass in on $ext_if proto tcp from any to any port = 22

   El ultimo cortafuegos, PF, ha sido desarrollado por el proyecto OpenBSD.
   PF fue creado como sustituto de IPFILTER, de ahi que la sintaxis de PF sea
   muy similar a la de IPFILTER. PF se puede combinar con altq(4) para
   disponer de QoS.

   En el siguiente ejemplo vemos una regla que permite la entrada de trafico
   SSH:

 pass in on $ext_if inet proto tcp from any to ($ext_if) port 22

7. Actualizacion de FreeBSD

   Hay tres metodos para actualizar FreeBSD: desde los fuentes, mediante
   actualizaciones binarias y con los discos de instalacion.

   Actualizar desde codigo fuente es el metodo mas complejo pero el que
   ofrece la mayor flexibilidad. Este proceso implica sincronizar su copia en
   local del codigo fuente de FreeBSD desde los servidores CVS (Concurrent
   Versioning System). Una vez actualizado el codigo puede compilar nuevas
   versiones de kernel y utilidades. Si quiere mas informacion consulte el
   capitulo 23 del Handbook.

   Las actualizaciones binarias son semejantes a yum o apt-get de Linux(R).
   El programa freebsd-update(8) descargara las actualizaciones pendientes
   del sistema y las instalara. Las actualizaciones pueden ser programadas
   con cron(8).

  Nota:

   Si usa cron(8) para programar las actualizaciones por favor, asegurese de
   poner freebsd-update cron en su crontab(1) para reducir la posibilidad de
   que una gran cantidad de servidores descarge actualizaciones al mismo
   tiempo.

 0 3 * * * root /usr/sbin/freebsd-update cron

   El ultimo metodo de actualizacion es desde los discos de instalacion. Es
   un proceso bastante claro. Encienda el sistema desde el disco y seleccione
   la opcion de actualizar.

8. procfs: perdido pero no olvidado

   Es posible que usando Linux(R) haya consultado
   /proc/sys/net/ipv4/ip_forward para determinar si "IP forwarding" estaba
   activado. En FreeBSD tendra que usar sysctl(8) para comprobar este y otros
   parametros puesto que procfs(5) esta obsoleto en las versiones mas
   recientes de FreeBSD. Tenga en cuenta que sysctl tambien existe en
   Linux(R).

   Siguiendo con el ejemplo de "IP forwarding" podria usar lo siguiente para
   determinar si tiene activado "IP forwarding" en su sistema FreeBSD:

 % sysctl net.inet.ip.forwarding
 net.inet.ip.forwarding: 0

   La opcion -a se usa para ver la configuracion del sistema:

 % sysctl -a
 kern.ostype: FreeBSD
 kern.osrelease: 6.2-RELEASE-p9
 kern.osrevision: 199506
 kern.version: FreeBSD 6.2-RELEASE-p9 #0: Thu Nov 29 04:07:33 UTC 2007
     root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC

 kern.maxvnodes: 17517
 kern.maxproc: 1988
 kern.maxfiles: 3976
 kern.argmax: 262144
 kern.securelevel: -1
 kern.hostname: server1
 kern.hostid: 0
 kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 }
 kern.posix1version: 200112
 ...

  Nota:

   Algunos de estos valores de sysctl son de solo lectura.

   Hay ocasiones en las que es disponer de procfs es imprescindible, por
   ejemplo para ejecutar software antiguo, usar truss(1) para seguir llamadas
   al sistema y para la compatibilidad binaria con Linux(R). (aunque la
   compatibilidad binaria con Linux(R) use su propio procfs, linprocfs(5).)
   Si necesita montar procfs anada las siguientes lineas a /etc/fstab:

 proc                /proc           procfs  rw,noauto       0       0

  Nota:

   La opcion noauto evitara que /proc sea montado automaticamente cuando el
   sistema arranque.

   Hecho esto monte procfs asi:

 # mount /proc

9. Comandos mas comunes

  9.1. Gestion de packages

          Linux(R) command        FreeBSD equivalente        Resultado        
          (Red Hat/Debian)        
   yum install <package> /        pkg_add -r          Instalar <package>      
   apt-get install <package>      <package>           desde un repositorio    
                                                      remoto                  
   rpm -ivh <package> / dpkg -i   pkg_add -v          Instalar package        
   <package>                      <package>           
   rpm -qa / dpkg -l              pkg_info            Ver packages instalados 

  9.2. Gestion del sistema

    Linux(R) command  FreeBSD equivalente              Resultado              
   lspci              pciconf              Ver dispositivos PCI               
   lsmod              kldstat              Ver modulos cargados en el kernel  
   modprobe           kldload / kldunload  Cargar/Borrar modulos del kernel   
   strace             truss                Seguir llamadas del sistema        

10. Conclusion

   Esperamos que este documento le haya servido de suficiente ayuda para
   empezar a usar FreeBSD. Recuerde visitar el FreeBSD Handbook, donde
   encontrara lo tratado aqui expuesto en profundidad y muchos otros temas
   que no se han tocado en este documento.
