Busindre » Blog Archive » FreeBSD Básico

FreeBSD Básico

March 1st, 2007 by Busindre

Lectura recomendable cuando uno acaba de empezar en FreeBSD, he dejado muchas cosas en el tintero, pero para empezar puede sacarte a alguien de algún apuro o aclararle algún concepto

Introducción

FreeBSD es un S.O. Unix muy avanzado, un verdadero sistema libre y abierto ya que incluye las fuentes (código fuente) del sistema. Este SO está siempre en constante desarrollo y evolución acercándose cada vez más a Linux en lo que a sistema de escritorio se refiere.

A diferencia de GNU/Linux, el desarrollo de FreeBSD es administrado por un pequeño grupo de personas llamados el Equipo Central (Core Team), que son como los grandes directivos que toman las decisiones finales importantes.

FreeBSD ha sido el foco de un proyecto de revisión masivo por varios años, todos los componentes críticos del sistema se han verificado y se han vuelto a inspeccionar para encontrar errores relacionados con la seguridad. Por ser código abierto, ha sido verificado por terceros también lo cual hace del software libre un código más seguro que el privativo. No hay una sola instalación de FreeBSD por defecto afectada por una sola alerta de seguridad del CERT en 2000.3, de ahi su fama de servidor robusto y seguro.

Destaca su capacidad para manejar tráfico de red pesado con alto rendimiento como servidor.En cuanto a Sistema de escritorio aún esta al alcance de Linux, pero como dije anteriormente por los esfuerzos y avances que se están haciendo eso puede ser cosa de poco tiempo.

El código fuente para el sistema entero se encuentra en un depósito centralizado que ejecuta bajo CVS, un sistema de control de versiones que permite el acceso concurrente de varios usuarios, permitiendo mantener varias ramas del código, por lo que encontramos varias versiones de FreeBSD.

* FreeBSD-CURRENT (Etiqueta HEAD): Rama sobre la que se hace todo el nuevo desarrollo, de la que saldrá actualmente FreeBSD 7. Puede incluir trabajos todavía sin acabar, cambios experimentales, mecanismos transitorios que pueden o no estar presentes en la próxima versión, errores... Su etiqueta es HEAD, aunque para CVSup se representa con un punto.

*FreeBSD-STABLE (Etiqueta RELENG_6): Rama de desarrollo para el uso, los cambios se hacen más lentamente, y (casi) siempre tras haber sido probados durante un tiempo en la rama FreeBSD-CURRENT (lo que se denomina MFC: Merge From Current). Pero sigue siendo una rama de desarrollo, en la que se hacen cambios a diario que pueden causar problemas, y tampoco está orientada a los usuarios finales.

*FreeBSD-RELEASE (Etiqueta RELENG_6_2_0_RELEASE). Es una instantánea de la rama STABLE, que antes de su publicación es probada concienzudamente para garantizar que sea realmente estable y no tenga fallos importantes. Se publican varias versiones al año, que se pueden conseguir además en CD-ROM y tienen un número identificativo, como 6.2 (Si orientadas al uso)

Link de interes: http://www.freebsd.org/releases/

* FreBSD (Segurity) mantiene una rama de seguridad o errata, que consiste en el código de la versión publicada al que se aplican solamente los cambios necesarios para solucionar fallos importantes, como problemas de seguridad, y no se le añaden nuevas funcionalidades. (Versión que más orientado al uso profesional (Servidores y demás,..))

--------------------------- Configuración Básica FreeBSD --------------------------

FreeBSD en Español / Castellano (Ortografía):

Para tener correcciones ortográficas debemos instalar: /usr/ports/textproc/es-aspell

Documentación en Castellano:

Por defecto viene en ingles, necesitamos Instalar /usr/share/doc/es_ES.ISO8859-1/ para tener tambien en Español:

# cd /usr/share/doc/
# wget -r --level=3 -L http://www.freebsd.org/doc/es_ES.ISO8859-1/
# mv www.freebsd.org/doc/es_ES.ISO8859-1/ .
# rm -r www.freebsd.org/

Dispositivos CD / DVD / floppy

Sintaxis Lectores: acd0 y cd0 (SCSI)
Sintaxis Disquetera: fd0

Editar /etc/fstab:

/dev/acd0               /mnt/cdrom      cd9660  ro,noauto       0       0
/dev/acd1               /mnt/cdrom2     cd9660  ro,noauto       0       0
/dev/fd0                /mnt/floppy     msdos   rw,auto         0       0

Se debe tener así para evitar errores del tipo-> fstab: /etc/fstab:*: Inappropriate file type or format

Extraer cdrom1 -> $ cdcontrol -f acd0 ejec
Extraer cdrom2 (SCSI)-> $ cdcontrol -f cd1 ejec

Montar dispositivos desde Freebsd:

FreeBSD usa UFS/UFS-2 como sus sistemas de archivos y no tiene soporte oficial para, por ejemplo, ReiserFS o XFS. Se pueden leer pero no instalar freebsd en ellos.

Particiones en freebsd (Discos duros):

/dev/ad0 -> El disco
/dev/ad0s2 -> Segundo slice del primer disco
/dev/ad1s1a -> Primera partición en la primera slice del segundo disco
/dev/ad0s1b -> Segunda partición de la primera slice en el primer disco
/dev/ad5s2f -> La sexta partición de la segunda slice en el quinto disco

/dev/ad0s1a / -> Primer disco, 1º partición del primer slice (hda1)
/dev/ad0s1e /tmp -> Primer disco, 5º partición del primer slice (hda8)
/dev/ad0s1f /usr -> Primer disco, 6º partición del primer slice (hda9)
/dev/ad0s1d /var -> Primer disco, 4º partición del primer slice (hda7)

devfs /dev

NOTA: devfs -> Pseudo sistema de ficheros encargado de mantener una lista de dispositivos conectados al sistema y crear las entradas en /dev oportunas.

mount -t msdos /dev/da0s1 /mnt/usb/
mount -t reiserfs /dev/ad1s3 /mnt/hdb3/
mount -t reiserfs /dev/ad1s1 /mnt/hdb1/
mount_msdosfs -o large /dev/da4s5 /mnt/usb/ ó mount -t msdosfs -o large /dev/da4s5 /mnt/usb/

NOTA: msdosfs (freebsd) = vfat (Linux) | Debemos montar particiones fat (msdos) con la opción "-o large" para que permita montar particiones fat de gran tamaño sin darnos error.

NOTA: Si queremos escribir en particiones NTFS fácilmente desde freebsd instalamos:

/usr/ports/sysutils/fusefs-ntfs/

Montar Dispositivos con Freebsd desde GNU/Linux:


1)# mount -t ufs -o ro,ufstype=5xbsd /dev/hda1 /mnt/freebsd_1
2)# mount -r -t ufs -o ufstype=ufs2 /dev/hda1 /mnt/freebsd_1

NOTA: Depende de que versión de Freebsd necesitaremos usar unas u otras, las versiones más nuevas usan UFS2 (5xbsd) y son soportadas en núcleos de la rama 2.6. Para ver si podemos montar con UFS2 o cualquier de los otros sistemas podemos usar este comando contra ".../fs/ufs/super.c" (Cada uno con su ruta):

* Opciones de ufstype:

sun|sunx86|44bsd|ufs2|5xbsd|old|hp|nextstep|netxstep-cd|openstep (kernel 2.6)

sun|sunx86|44bsd|old|hp|nextstep|netxstep-cd|openste (kernel 2.4)

Mas ejemplos:

# cat /usr/src/kernel-source-2.6.8/fs/ufs/super.c | grep -i "5xbsd|"
"sun|sunx86|44bsd|ufs2|5xbsd|old|hp|nextstep|netxstep-cd|openstep ...\n\n"

# cat /usr/src/kernel-source-2.4.31/fs/ufs/super.c | grep -i "5xbsd|"

Con este segundo kernel no podremos montar los sistemas freebsd actuales y si hacemos un dmesg saldrán cosas como:


UFS-fs: Invalid type option: ufs2
UFS-fs: Invalid type option: 5xbsd

44bsd -> Usado para montar sistemas en UFS1

Dar soporte en el kernel

1) UFS support:
Código:

Filesystems -> Miscellaneous filesystems ->
<*> UFS file system support (read only)

2) BSD disklabels:

Código:

Filesystems -> Partition types ->
[*] Advanced partition selection
[*] PC BIOS (MSDOS partition tables) support
[*] BSD disklabel (FreeBSD partition tables) support
/dev/ad0s1a

Particiones de una instalación estandar (Linux - freebsd):

/dev/hda1 (/dev/ad0s1a)
root
entropy
etc
mnt
lib
boot
sys -> usr/src/sys
home -> usr/home
compat -> usr/compat
usr
var
dev
tmp
COPYRIGHT
sbin
rescue
bin
libexec
proc

NOTA: También podemos montarla como /dev/hda5 Ejemplo:

/dev/hda1 507630 90488 376534 20% /mnt/hda1
/dev/hda5 507630 90488 376534 20% /mnt/hda5

/dev/hda7 (/dev/ad0s1d)
account
at
audit
backups
cache
crash
cron
db
empty
games
gdm
heimdal
lib
log
mail
msgs
named
preserve
run
rwho
spool
tmp
yp

/dev/hda8 (/dev/ad0s1e)
fam-busi
fam-root
red.tar.gz
scrollkeeper-busi
scrollkeeper-roo

/dev/hda9 (/dev/ad0s1f)
bin
compat
games
home
include
lib
libdata
libexec
local
obj
ports
sbin
share
src
X11R6

Comandos básicos de interes:

# pciconf -lv -> Como lspci de linux
# /usr/sbin/sysinstall -> Panel de control
# /usr/libexec/locate.updatedb --> Porque no busca bien?
# kldstat --> Muestra los modulos cargados independientemente del kernel
# python /usr/local/share/python2.4/Tools/scripts/md5sum.py ****** -> Típico md5sum

X11 (xorg) / Escritorio (Gnome)

El fichero de configuración tiene que instalarse en un lugar donde Xorg o XFree86 lo encuentre.

Xorg --> /etc/X11/xorg.conf o /usr/X11R6/etc/X11/xorg.conf
Xfree86 --> /etc/X11/XF86Config o /usr/X11R6/etc/X11/XF86Config

Comandos:

# Xorg -configure -> Generara el archivo /root/xorg.conf.new

NOTA: Si aparece una rejilla negra y gris junto con el cursor ha tenido exito. Para salir Ctrl+Alt+Retroceso.

Ponemos el archivo donde debe estar

# cp /root/xorg.conf.new /etc/X11/xorg.conf

Si tenemos instalado gnome y queremos que este arranque al hacer startx:

# echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc

Pero tambien podria ser:

E16 / E17
# echo "/usr/X11R6/bin/e16" > ~/.xinitrc

Fluxbox
# echo "/usr/X11R6/bin/fluxbox" > ~/.xinitrc

NOTA: Primero se instala un Desktop y luego se busca el nombre en /usr/X11R6/bin/ para añadirlo a nuestro fichero .xinitrc.

* Bug en Xorg: Hay un bug de xorg que produce que en firefox al mover la rueda del ratón nos mueve adelante o atrás en el historial, cosa muy molesta. Esto mismo pasa en algunas versiones de Linux también.

Si la rueda se mueve con una cierta velocidad, enviamos un evento atrás / adelante, que en firefox es mas visible y se acentúa más.La solución es simple, se trata de editar el archivo /etc/X11/xorg.conf y en la sección del ratón:


Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
#Con esta conf por defecto da problemas el famoso bug de xorg en FreeBSD
#Option "ZAxisMapping" "4 5 6 7"
#Buena configuración
Option "ZAxisMapping" "4 5"
EndSection

NOTA: Otro dispositivo muy común (PS2) es: Option "Device" "/dev/psm0"

Uso del comando su como usuario

bash: su: command not found

Para que un usuario pueda convertirse a root por medio del comando su, En sistemas BSD el usuario debe tener como grupo "wheel". Si no lo indicamos en la instalación (Novatos), debemos borrar el usuario y crearlo de nuevo como corresponde.

Nvidia Freebsd (Acelereración 3D)

Bajamos el driver (.tar.gz):http://www.nvidia.com/content/drivers/drivers.asp

Descomprimimos y hacemos dentro del directorio:
# make install

Editar Manualmente el xorg.conf y sustituimos lo siguiente:

* Quitamos: Driver "nv"
Driver "vesa" (Puede que no exista)
Driver "fbdev" (Puede que no exista)

* Ponemos: Driver "nvidia"

* Quitamos:
Load "dri"
Load "GLCore"

* Ponemos:
Load "glx"

NOTA: Debe salir al cargar las x un logotipo de nvidia y el comando "$ glxinfo | grep -i rendering" debe responder "direct rendering: Yes" .Tambien se pueden usar el comando nvidia-xconfig y no configurar el xorg.conf a mano.

Cambiar la shell de un usuario

Asegurar que la shell que instalamos esta en /etc/shell, sino es el caso hacemos:

echo "/usr/local/bin/bash" >> /etc/shells

chsh -s /usr/local/bin/bash --> Cambia la shell por defecto para el usuario
chsh --> Abre un editor de texto y se cambia la shell

Variables de entorno en FreeBSD

USER Nombre de usuario en el sistema.

PATH Lista de directorios, separados por punto y coma, en los que se buscan ejecutables.

DISPLAY Nombre de red de la pantalla X11 a la que conectarse, si está disponible.

SHELL La shell actual.

TERM El nombre de la terminal del usuario. Se usa para determinar las caracterí­sticas de la terminal.

TERMCAP Base de datos donde encontrar los códigos de escape necesarios para realizar diferentes funciones en la terminal.

OSTYPE Tipo de sistema operativo. Por ejemplo, FreeBSD.

MACHTYPE Arquitectura de CPU en la que se está ejecutando el sistema.

EDITOR El editor de texto preferido por el usuario.

PAGER El paginador de texto preferido por el usuario.

MANPATH Lista de directorios separados por punto y coma en los que se buscan páginas de manual.

Establecer una variable de entorno difiere ligeramente de shell a shell. Por ejemplo, en las shells al estilo C como tcsh y csh, se usará "setenv" para establecer las variables de entorno.

Bajo shells Bourne como sh y bash, se usará export para establecer las variables de entorno actuales. Por ejemplo, para establecer o modificar la variable de entorno EDITOR (bajo csh o tcsh) la siguiente orden establece EDITOR como "/usr/local/bin/nano":

% setenv EDITOR /usr/local/bin/nano

Bajo shells Bourne:

% export EDITOR="/usr/local/bin/nano"

Sonido en FreeBSD:

# kldload snd_driver
# cat /dev/sndstat

FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: at io 0xffaff800, 0xffaff400 irq 3 bufsz 16384 kld snd_ich (1p/1r/0v channels duplex default)

Este comando nos permitira var cual ha sido el módulo que ha cargado el kernel, en mi caso se eligió snd_ich. Ahora que se conoce el módulo, la próxima vez que lo queramos cargar tendremos que poner:


# kldload snd_ich

Si bien es solo una li­nea, estar poniendo eso cada vez que entremos a FreeBsd puede resultar molesto, para que el módulo se cargue automaticamente con el inicio del sistema solo tenemos que ir al archivo /boot/loader.conf y agregar la linea snd_ich_load="YES".

RED (Wireless) en FreeBSD

Cargar el modulo para poder hacer uso de ecritacion WEP:

# kldload wlan_wep

(Para evitar el ifconfig: SIOCS80211: Invalid argument al configurar la red wireless)

ifconfig fxp0 down

ifconfig ural0 up
network_interfaces=ural0
ifconfig_ural0="inet 192.168.1.33 netmask 255.255.255.0 channel 2 ssid Wireless_gratis wepmode on wepkey 0xaaaaaaaaaa weptxkey 1"
defaultrouter=192.168.1.1

Para poder usar la direccion 127.0.0.1

# ifconfig lo0 127.0.0.1

Servidor ssh en FreeBSD

/etc/ssh/sshd_config -> Configuración

/etc/rc.d/sshd start / stop -> Arrancar / Parar

O también:

/usr/src/etc/rc.d/sshd start / stop -> Arrancar / Parar

Esta línea añadida a rc.conf cargará el servidor de ssh en el arranque de su sistema. Pero como ya sabemos podemos hacerlo de otras maneras.En la cuarta versión de FreeBSD venía por defecto habilitado, si usamos la 5 podemos necesitar activarla como muestra la siguiente linea.

sshd_enable="YES"

Instalacion de paquetes en FreeBSD:

* FreeBSD ofrece tres posibilidades:

Instalar programas a partir de su código fuente (Adaptado para FreeBSD), simplificada mediante el sistema de ports, que es una compilación ya preparada.

La segunda opción es utilizar paquetes binarios producidos para nuestra plataforma.

La tercera es compilarse uno mismo las fuentes ((paquete.tar.gz) De las cuales se crean ports), para esto se necesita que el código sea el adecuado para poderse compilar en freebsd. Por norma en el archivo README o INSTALL de las fuentes dice que tipo de sistemas soporta. Muchas fuentes no soportan su compilación en sistemas BSD y requieren modificaciones del codigo para soportar el sistema. En los mirrors solemos encontrarnos la siguiente sintaxis para decargar una aplicación.

Sources (Fuentes) --> Paqute.tar.gz (Suele indicarse la versión)
Package (Binario) --> Paquete.tbz
Download (Ports) --> Paquete.tar.gz (No suele indicarse la versión)

Un port (/usr/ports) es un conjunto de scripts que descarga el código fuente de un programa determinado, lo comprueba, descomprime, parchea, compila e instala. El creador de Gentoo,Daniel Robbins, diseñó el sistema Portage inspirándose en los ports de FreeBSD.

Los ports permiten selecionar las opciones, reqiueren mas espacio y tiempo para su compilación que los paquetes (Ya compilados) y como sabemos se adapta solo a la arquitectura real de la máquina.Según la fuente del código, puede o no compilar directamente en FreeBSD. En general, aplicaciones GNU son desarrolladas en GNU/Linux y requieren algunos cambios para compilar en *BSD. Los proyectos en SourceForge suelen indicar los sistemas soportados.

NOTA: Existen aplicaciones gráficas para instalar/desinstalar aplicaciones en freebsd, como son "BSD Ports Manipulator (Gnome)", "Barry (Kde)" y "PIB (TK)".

* Contenido de los ports:

*Makefile : Tiene varias instrucciones, que le indican al sistema cómo compilarlo y dónde instalarlo.

*distinfo : Contiene información de los ficheros que se deben descargar para compilar el programa, así como las sumas de comprobación MD5 (checksums), para asegurarse se han descargado correctamente y que no han sido manipulados.

*Directorio files: Contiene los parches necesarios para compilar e instalar el programa en FreeBSD. Los parches son pequeños ficheros que indican los cambios a hacer a los ficheros del código fuente. Están en formato de texto plano, y básicamente dicen cosas como «eliminar la línea 7» o «cambiar la línea 26 a esto otro». Los parches también son conocidos como diffs, ya que se generan con ese programa. Es posible que este directorio también contenga algún otro fichero necesario para compilar e instalar el port.

*pkg-descr : Descripción detallada del programa.

*pkg-plist : Lista todos los ficheros que instalará el port e indica al sistema de ports qué ficheros eliminar en caso de una desinstalación.

NOTA: Algunos ports cuentan con otros ficheros, tal como pkg-message, que el sistema de ports usa para manejar situaciones
especiales.

FreeBSD ofrece miles de ports, y creciendo. Los ports están clasificados en más de 70 categorías (Internet, editores, bases de datos,...).También podemos navegar entre los ports disponibles en la página http://www.freebsd.org/ports

Actualizar de versión los ports:

Encontramos dos formas de actualizar a otra version (Superior o inferior), mediante un archivo ports.tgz o usando cvsup.

En el primer cd de instalación de freebsd al montarlo encontramos: "/mnt/cdrom/6.1-RELEASE/ports/ports.tgz", tambien en servidores por internet podemos encontrarlo: "ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/6.2-RELEASE/ports/" y "http://ftp.wayne.edu/freebsd-i386/" (Solo debemos buscar el de nuestra versión).

Podemos bajar el de una version posterior, anterior,... como nosotros queramos (Es el mejor metodo y el más rápido).

Para usar el otro metodo (cvsup) debemos instalar fastest_cvsup para ver que mirror es el mas rápido para tu localización (España $ fastest_cvsup -q -c es) y cvsup el cual usaremos para actualizar el arbol de ports.

CVSUP no permite por defecto pasar a una versión mas antigua de ports, si hemos puesto una versión de ports superior y queremos pasar a la versión anterior de ports por el motivo que sea, es mejor usar el ports.gz correspondiente.

# make search key=mplayer (Hacerlo en /usr/ports y buscara el port, )

* Mirrors:
CVUPS:http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html#CVSUP-MIRRORS

Copiamos ports-supfile y lo colocamos en /root, lo editamos:

*default host=cvsup.es.FreeBSD.org

Podemos reponerlos todos (ports-all) o el que nosotros queramos (ports-print,ports-security,ports-shells,...).

Realmente nos sobran ports que no son de nuestro idioma, Por ejemplo Samba está disponible en inglés (en /usr/ports/net) y en japonés (en /usr/ports/japanese).. Una vez este configurado el ports-supfile actualizamos el arbol de ports

# cvsup -g -L 2 /root/ports-supfile

NOTA: Si se está detrás de un firewall puede que sea necesario usar la opción "-P -" para hacerlo de modo pasivo.

Este proceso no incluye la recompilación de los ports instalados en el sistema.Si todo ha salido bien terminará con un "Shutting down connection to server" "Finished successfully".

Actualizar el Índice y base de datos de ports (/usr/ports/INDEX-6) con:

# make fetchindex
# portsdb -u (Si no lo tenemos debemos instalar portupgrade)

En http://www.FreshPorts.org, vemos los bugs de aplicaciones, cambios del árbol de ports, podemos crear una lista de ports en los que estemos especialmente interesados para que se nos avise por correo electrónico de las novedades.

/usr/ports/UPDATING Describe varios problemas encontrados y pasos adicionales necesarios para actualizar algún programa (port): Si queremos usar el ultimo UPDATING lo descargamos de: http://www.freebsd.org/cgi/cvsweb.cgi/ports/UPDATING

/usr/ports/UPDATING (Cambios en ports individuales).
/usr/ports/CHANGES (Cambios en la colección de ports completa).

El script portupgradecheck (http://www.potentialtech.com/wmoran/portupgrade-check.php) recorre este fichero y nos muestra solamente la información referente a los ports de /usr/ports/UPDATING que tengamos instalados en nuestro sistema actualmente.

Para comparar las versiones que tenemos instaladas con las que se instalarían (Más actuales) desde la colección de ports actual usaremos:

# portversion

NOTA: Este comando esta orientado sobre todo a los sistemas que acaban de actualizar /usr/ports con el último snapshot o con un cambio de release.

Para crear / actualizar la base de datos de los programas instalados (/var/db/pkg) con la orden:

# pkgdb -F

NOTA: Si se parase por algun motivo dicho comando podemos intentar repararlo con “# pkgdb -fu”

NOTA: Puede venir bien tener una copia de seguridad: # cd /var/db && tar jcvf db.pkg.tar.bz2 pkg

Para actualizar programas (Sin tener que desinstalar nada, el descarga, compila, instala y limpia el programa indicado.)

# portupgrade nombre_del_programa
# portinstall nombre_del_programa

NOTA: Los dos valen

Opciones de portinstall:

-F: Solamente descarga los distfile, no compila ni instala nada.
-R: Actualiza también los programas de los que depende.
-r: Actualiza también los programas que dependen de él.

# portupgrade -arR -> Actualiza todos los programas instalados en freebsd (CUIDADO!), "portmanager -u -l" haria lo mismo.

NOTA:Intentar evitar ponerse a instalar o actualizar versiones recientes del arbol de ports si no es estrictamente necesario, el motivo es "If it works, don't fix it!" (Si funciona, ¡no lo repares!)

Seguridad en Ports y paquetes:

# portaudit -> Consulta una base de datos (auditfile.tbz), actualizada y mantenida por el equipo de seguridad y desarrolladores de FreeBSD que contiene fallas de seguridad que hayan sido detectados.

Opciones: portaudit paquete_0.1 (Muestra las vulnerabilidades encontradas)

-F (Actualiza la base de datos)

-a (Mira todos los paquetes instalados y dice cuales tienen vulnerabilidades)

-d (Cuando fue creada la base de datos)

-C (Situandonos en el directorio del Makefile del port)

-f Archivo (Busca nombres de paquetes, Ejemplo: portaudit -f /usr/ports/INDEX-6)

Para listar todas las vulnerabilidades de los paquetes disponibles en freebsd:

# curl -l ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-current/All/ | sed -n -e 's/.t[bg]z[[:cntrl:]]*$//p' | portaudit -f -

NOTA: packages-6.2-release podemos cambiarlo por: packages-6-stable,packages-6.1-release,packages-5-current,...

Proceso de compilación:

El make: Descarga usando fetch (Gestor de descargas similar a wget). Cada port contiene una lista de varios sitios (master sites) desde los que se puede descargar el distfile. Si en alguna ocasión lo necesitamos, podriamos indicarle otro sitio con la opción MASTER_SITE_OVERRIDE. Despues verifica la suma de comprobación del tarball, lo descomprime, aplica los parches que pudiera haber y construye el binario. El make nos dejará el codigo fuente del paquete a instalar en /usr/ports/distfiles/
. Si metemos ahí el tarball (Paquete de código fuente / distfile) no lo descargara, lo cogera del directorio (Util si el de los repositorios de ports falla o el server esta off).

El install: Instala el binario, su documentación y ficheros de configuración.

El clean: borra el directorio work donde se construye el binario (Cuestión de espacio primordialmente) Si lo hacemos en /usr/ports limpia todos (Liberara espacio en disco).Tambien podemos hacer "# rm -rf /usr/ports/*/*/work*"

# make fetch-list -> Mostrará una lista de los ficheros necesarios para el port.

# make PORTSDIR=/usr/home/user/ports install -> Compila en /usr/home/user/ports y lo instalará en /usr/local.

# make PREFIX=/usr/home/ejemplo/local install -> Compila /usr/ports y lo instalará en /usr/home/ejemplo/local.

Ejemplo (comprobación y parcheo):


MD5 Checksum OK for gqview-2.0.1.tar.gz.
=> SHA256 Checksum OK for gqview-2.0.1.tar.gz.
===> Patching for gqview-2.0.1_1
===> Applying FreeBSD patches for gqview-2.0.1_1

Una vez se instale siempre es recomendable este comando para mantener la variable PATH actualizada

# rehash (tcsh)
# hash -r (bash).

Para descargar el distfile en ese momento pero dejar el resto del proceso para más adelante. Esto se hace situándose en el directorio del port y ejecutando la orden:

# make fetch

NOTA: No comprueba las posibles dependencias. Para descargar también el código fuente de las dependencias, se usa la orden:

# make

Para borrar las fuentes (distfiles) que haya en el directorio /usr/ports/distfiles y que ya no necesitemos (/usr/ports) junto con el directorio work creado al compilar un port:

# make distclean (Muy lento! Puede tardar dias, mejor usar otra opción)
# portsclean -CD (Mas rapido que el make clean,-D limpia las versiones antiguas de los tarballs y -C los disfiles)

Para desinstalar un programa,desde el directorio del port:
# make deinstall

Una vez desinstalado un port, para reinstalarlo, desde directorio del port:
# make reinstall

NOTA: Estas dos ultimas órdenes funcionan si no habí­amos ejecutado #make clean (lógicamente). En caso de haberlo ejecutado, deberemos utilizar la orden pkg_delete. Una cosa que puede pasar es que el paquete solicite configuraciones perteneceientes a otro, por ejemplo puede que al instalar mplayer saque un dialog de instalaicon de skins, el server o skin puede no estar impidiendo la descarga. Debemos localizar el paquete y reconfigurarlo. Si 2 paquetes llaman al mismo fuente de una dependencia al mismo tiempo ambos procesos de abortaran

Obtener los ports de otros servidores diferentes a los establecidos en MASTER_SITES
Supongomos que es mejor para tu localización: ftp.FreeBSD.ORG


# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch

NOTA: La mejor recomendación es usar #make install clean (Para asi tener siempre limpio el rabol de ports)

Impedimentos para Instalar / compilar (Forbidden / Broken / Ignore / Restricted)

Al intentar conectarse para proceder a la instalación de un port podemos encontrarnos mensajes del tipo Prohibido, Roto,...

Cuando el paquete tiene alguna vulnerabilidad nos saldra un mensaje del tipo:

# cd /usr/ports/multimedia/win32-codecs
# make install
===> win32-codecs-3.1.0.r1,1 is forbidden: Remote code execution: http://vuxml.FreeBSD.org/24f6b1eb-43d5-11db-81e1-000e0c2e438a.html.

*** Error code 1

Stop in /usr/ports/multimedia/win32-codecs.

Done

Si visitamos la URL dara una explicación del problema, en este caso la apliación a instalar tiene una vulenrabilidad. Si aun asi queremos instalarla debemos mirar en las opciones del Makefile.

Ejemplo:


$ grep 'FORBIDDEN' /usr/ports/multimedia/win32-codecs/Makefile | head -1
FORBIDDEN= Remote code execution: http://vuxml.FreeBSD.org/24f6b1eb-43d5-11db-81e1-000e0c2e438a.html

Como vemos, com comentar dicha linea (#) compilara sin problemas, también podemos consultar opciones como son:

$ grep 'REALPLAYER' /usr/ports/multimedia/win32-codecs/Makefile | head -1
REALPLAYER "Install realplayer codec" on

Una opción que se puede usar tambien en algunos casos con mismo resultado es:

# make DISABLE_VULNERABILITIES="yes" install clean

Podemos buscar el paquete para instalarlo desde:
ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/

Podemos buscar el port para instalarlo desde:
http://www.freebsd.org/ports/index.html

NOTA: Es bueno mirar las listas de correo,con el comando "make maintainer" obtenemos el mail del (Maintainer). SI queremos hacer un informe de problemas: http://www.freebsd.org/doc/es_ES.ISO8859-1/articles/problem-reports/article

Muchos programas disponen de varias opciones para compilarlos, y pueden hacernos preguntas en el proceso de instalación, Si desinstalamos uno de estos programas o simplemente seleccionamos alguna opcion que requiere algo que nos impide instalarlo , al reinstalarlo utilizará las opciones escogidas la primera vez. Para solucionar esto tenemos:

Podemos borrar la configuración de /var/db/ports con:

# make rmconfig

Podemos crearlas de nuevo:
# make config

Muestra las opciones actuales.
# make showconfig

Ejemplos: /usr/share/examples/etc/make.conf

Modificar /etc/make.conf

Variables glovales:
CPUTYPE?=pentium4

Variables globales:

CFLAGS=-O2 -pipe (Para c, usa pipes en lugar de archivos temporales para compilar más rápidamente)
CXXFLAGS+=-O3 (Para c++, )

Variables para el make world y el make kernel:
COPTFLAGS=-O -pipe (flags de optimización para el compilador de C que se usarán al compilar los kernels)

* Variables de los ports:

Del mismo modo, algunos ports, como kdelibs2, vienen con las opciones de depuración activadas, que hacen que luego vaya mucho más lento. Estas opciones también pueden desactivarse retocando el Makefile.

Si quereis ver las opciones de este estilo que soporta cada port, podéis hacer un make extract del paquete. Luego, entráis en el subdirectorio work/ y allí­ ejecutáis el ./configure con la opción de ayuda. Por ejemplo:


# cd /usr/ports/x11/kdelibs2
# make extract
# cd work/kdelibs-2.2
# ./configure --help

De la salida de este comando vemos las opciones que pueden interesarnos y que añadiremos al CONFIGURE_ARGS del Makefile de paquete.

Hemos de ir con cuidado sobre lo que quitamos o añadimos. Debemos recordar que los ports están programados para instalar una serie de archivos predefinidos y que, si en el CONFIGURE_ARGS habilitamos alguna opción que haga que algunos archivos no sean creados, el make install fallará luego, debemos tenerlo en cuenta.

Ejemplo:

# make install
N - O - T - E
Take a careful look into the Makefile in order
to learn how to tune mplayer towards you personal preferences!
For example,
make WITH_GTK1
builds MPlayer with GTK1-GUI support.
If you want to use the GUI, you can either install
/usr/ports/multimedia/mplayer-skins
or download official skin collections from

Instalación de Binarios (Ya compilados):

Si queremos cambiar de mirror oficial de packages para freebsd debemos decirlo con la variable de entorno "PACKAGESITE". Cuando se actualizan los ports a una coleccion de una version superior de freebsd, la url del mirro de freebsd no cambia, si se desea se cambia con la variable de entorno antes comentada.

El mirror oficial es ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-*.*-**** (Debe coincidir con la versión de free que muestra "uname -a", al no ser que queramos usar una más actual). No se encuentran paquetes binarios por cada port, la mayoría están pero no todos y siempre habrá alguno que debamos compilar.

pkg_add -r -> Se conectará a un servidor, descargará la versión adecuada (según estemos usando FreeBSD-CURRENT, FreeBSD-STABLE o -RELEASE) y la instalará:

# pkg_add -r paquete
# pkg_add -r paquete
# pkg_which fichero -> Te dice que programa lo colocó ahí al instalarse.

Lista de los ports (compilados) y paquetes (binarios) instalados con su descripcion

# pkg_info -> Lista todos los paquetes con pequeña descripcion
# pkg_info paquete -> Da una descripción del paquete
# pkg_info -L paquete -> Lista los ficheros instalados por ese paquete instalado

# pkg_version -> (Similar a portversion) Muestra la versión de los programas instalados y la compara con la que se instalaría desde nuestro árbol de ports.

# pkg_delete paquete -> Desinstala un paquete a la condición que otros paquetes no dependan de él(Para buscar la version de un paquete # pkg_info -a | grep mplayer).Con la opcion -f fuerzas por si tiene alguna dependencia.

# pkg_deinstall -> Como pkg_delete pero más sofisticada. Se recomienda para sacar paquetes completos, con sus dependencias.

NOTA: Para actualizar un programa usando paquetes, se usa también portupgrade, añadiendo la opción -P. De no haber paquete del programa,portupgrade lo compilaría usando los ports. Si no deseamos este comportamiento, podemos usar la opción -PP.

Para conocer las dependencias y su jerarquía (Útil en actualizaciones o desinstalaciones):
# pkg_tree amsn

Puedes listar todos los paquetes ordenados por orden de dependencias con:
# pkg_glob -a | pkg_sort

Para poder desinstalar los paquetes que no son dependencia de ninguno (Limpieza)
#pkg_cutleaves
#portmanager -slid

NOTA:Valen los dos

# make package- > Instala el programa y crea un paquete en /usr/ports/packages.
# make DEPENDS_TARGET=package

NOTA: Si colocamos los binarios en /usr/ports/packages no los bajara del mirror, sino lo encuentra ahi irá al mirror.

Crear un paquete sin instalarlo:


# cd /usr/ports/somewhere/frobble
# make extract
# cd work/frobble-2.8
[Si hay parches se aplican]
# cd ../..
# make package

En freebsd tenemos linux_base (linux_enable="YES" en el /etc/rc.conf) que permite ejecutar binarios de Linux, realmente instala una distribucion de linux muy capada con sus librerias y binarios que es lo que usa en la emulacion.

Se pueden elegir entre varias distribuciones para emular (linux_base-fc4 (Estandar, anteriormente se usaba el de red-hat), linux_base-gentoo-stage3,linux_base-debian,..).Hay muchos ports que requieres de dicha emulación, como pueden ser flash y java, por motivos ya conocidos. Si nos fijamos al tener linux_base-fc4 encontramos comandos rpm.

Pero claro el ejecutar binarios de Linux no siempre funciona debido a que no es perfecto y puede haber problemas con versiones de bibliotecas compartidas que son las usadas por los binarios Linux para funcionar (Como las dll de Windows).

Siempre se pueden usar las librerias del sistema linux pero ya tenemos que copiar manualmente las que usa el binario (ldd binario) y frikear con el tema el cual esta documentado en internet.

Monitoreo de Procesos ( lastcomm / sa)

Para tener control sobre estadistincas de procesos con FreeBSD debemos tener operativos los comandos lastcomm y sa


$ touch /var/account/acct
$ accton /var/account/acct

Añadir a /etc/rc.conf

accounting_enable="YES"

Instalación de Flash (En linux-mozilla / NO firefox):

Instrucciones: http://listas.es.freebsd.org/pipermail/freebsd/2007-January/030487.html

La parte de creación de enlaces podemos cambiarla por:

# ln -s /usr/local/lib/npapi/symlinks/linux-firefox/libflashplayer.so
# ln -s /usr/local/lib/npapi/symlinks/linux-firefox/flashplayer.xpt

NOTA: Puede que firefox se nos quede inestable, podemos necesitar desactivar Flash:

Desactivar el Flash:
#mv /usr/X11R6/lib/browser_plugins/ /usr/X11R6/lib/browser_plugins_OLD/

Activar el Flash (AL usar linux-mozilla):

#mv /usr/X11R6/lib/browser_plugins_OLD/ /usr/X11R6/lib/browser_plugins/

Instalar java (jdk/Jre) Freebsd 6.1

Instalamos los dos paquetes (pkg_add):

Paquete: diablo-jdk-freebsd6.i386.1.5.0.07.01.tbz

Link: http://www.freebsdfoundation.org/cgi-bin/download?download=diablo-jdk Freebsd6.i386.1.5.0.07.01.tbz

Paquete: diablo-jre-freebsd6.i386.1.5.0.07.01.tbz
Link: diablo-jre-freebsd6.i386.1.5.0.07.01.tbz

Traducción del mozilla a Español

Linux-mozilla es muy ligero y es el recomandado para su uso de escritorio ya que esta portado a freebsd al 100% (Mejor que firefox, de ahi que sea el de por defecto). La versión incluida es 1.7.13 pero instalaremos la traducción del 1.7.12 (Nos vale perfectamente).

Si queremos ponerlo en español simplemente arranquen como root el mozilla e instalen los xpi de:
http://www.mozilla.org/projects/l10n/mlp_status.html#moz_1.712

Apagar el pc con freebsd

#shutdown -p now

Impidiendo cambiar password de root en single mode

Editamos el fichero /etc/ttys y modificamos :

console none secure

Por

console none insecure

Cosas "raras" que puedes encontrar en FreeBSD viniendo de otros sistemas:

Permite montar varias veces el mismo dispositivo.

Bug en xorg

No deja montar sistema FAT32 (msdos en FreeBSD) de gran tamaño si no indicamos la opción "-o large", como deciamos anteriormente . El mensaje que muestra al no usar dicha opción en el montaje es "mountmsdosfs(): disk too big, sorry".

FreeBSD no tiene una herramienta oficial para la compilación del núcleo

La compilación de firefox se realiza en modo debug por defecto y produce pitidos al ser usada

Enlaces de Interes en FreeBSD:

http://www.eldemonio.org/
http://www.freebsd.org/doc/es_ES.ISO8859-1/books/
http://www.bsd.cl/index.php/Conceptos_de_los_Ports_de_FreeBSD
Link 1
Link 2

Posted in Distros |

5 Responses

  1. Daemonbsd Says:

    Tengo un problema con Xorg en freebsd 6.2 pues tengo un monitor LG del fabricante GSM 15" y una tarjeta de video Ati radeon Xpress 200
    cuando genero el fichero xorg.conf con el comando Xorg -configure me detecta el hardware ok pero cuando voy a iniciar el entorno gráfico me sale como si tuviera problemas con el HorizSync y el VertRefresh

  2. Daemonbsd Says:

    el modelo del monitor es 505g

  3. Busindre Says:

    Tienes que tener el librillo con las instrucciones del monitor de cuando lo compraste. En Internet debes encontrarlo en la web del fabricante.

    En dicho librillo viene entre otros valores, el refresco horizontal y el vertical soportado por tu monitor, debes poner los valores en el "xorg.conf" o por comando, si con los valores actuales no lo ves bien. También puedes ir tanteando pero mejor consultando el manual del monitor.

    Para como editar el xorg.conf:

    http://www.busindre.com/cambiar-resolucion-del-monitor-en-gnulinux/

    Suerte

  4. Cikgubsd Says:

    Gran Artículo Busindre ¡Enhorabuena!
    Por cierto me ha servido porque andaba dándole cada vez "kldload snd_ich" y me he puesto a buscar para automatizarlo y... ¿quién aparece? mi amigo Busi...

    Por cierto lo que cuentas que mount_msdosfs no monta unidades grandes, a mi en 6.2 no me lo hacía pero en éste (escribo desde un flamante 7.0 con KDE (aún el 3.5) le pongo "-o large" y sin problemas.

    ¡Ánimo! a seguir así con tu gran trabajo...

  5. Busindre Says:

    Siempre es un placer y un honor verte por estos lares. Actualizado el articulo con la opción "-o large".

    Cualquier otra cosa ya sabes donde encontrarme.

    Un abrazo!

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.