15 jun

Instalar FreeBSD en Raspberry

Pues parece ser que tenemos una versión estable de FreeBSD para Raspberry, y como no puede ser de otra manera debemos probarla.

En este post lo que os voy a explicar es como intalarla en Raspberry de una forma un poco diferente y como dejar el sistema a punto, (red, actualizaciones, paquetes etc …)

Pues venga al lío que se nos va el día.

Instalación

Tenéis diferentes formas de instalar, la “oficial” seria iros a la pagina de FreeBSD https://wiki.freebsd.org/FreeBSD/arm/Raspberry%20Pi, tenemos diferentes métodos, pero os recomiendo que bajéis al final de la pagina a la sección de Binary snapshots, que creo que es la forma mas sencilla de instalar.

Seleccionamos la imagen de todo el listado, pero ESPERAR, no la bajéis todavía. ¿Cual es el problema que yo me encontré?, pues que una vez instalada esa imagen nos encontramos que necesitamos tener conectada la raspberry a un monitor y con un teclado, ya que viene con ssh activado, pero no permite el login externo, si optais por este metodo tendréis que:

Método 1 (descargar la imagen de la pagina oficial)

  1. Monitor
  2. Teclado compatible

Método 2 (descarga imagen con el login ssh habilitado)

  1. Red

El problema que yo tuve es que no tenia en casa ningún teclado compatible que me permitiera hacer login, asi que no podía habilitar el login de root por ssh y no podía hacer nada, total que cuando conseguí un teclado, cambie esa opción y me cree una imagen, la cual permite login por ssh y tiene DHCP por defecto. (plug and play)

Os recomiendo el método 2.

La podéis bajar de aquí  https://mega.co.nz/#!JJxHwarR!WfhEqUZZVaR0GO-ae9mqj_eCaJJbe4OVVcw-J03Ujfo

Una vez tengamos la imagen debemos volcarla en la SD (la imagen esta pensada para un SD de 8GB), tal que así

dd if=20140621_freebsd_raspberry.dd of=/dev/sdx
Dónde el of será el nombre de nuestro dispositivo SD.
Una vez finalice la colocamos en la Raspberry y arrancamos,  deberemos comprobar la ip que nos haya dada el router.
Hacemos login con el  usuario root y contraseña toor
Instalación hecha.

Configuración base del sistema

Lo primero que tendremos que hacer es cambiar la contraseña de root, crearnos un usuario y (recomiendo) deshabilitar el acceso de root por ssh.

Pues vamos a ello.

Primero creamos el grupo de nuestro usuario

[email protected]:~ # pw groupadd name

Después el usuario

[email protected]:~ # adduser mauso
Username: name
Full name: name
Uid (Leave empty for default):
Login group [name]:
Login group is name. Invite mauso into other groups? []:
Login class [name]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/name]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:

OK? (yes/no): yes
adduser: INFO: Successfully added (name) to the user database.
Add another user? (yes/no): no
Goodbye!
Ahora ya podremos hacer login con nuestro usuario, pero no podremos pasar a root, debemos añadir el usuario al grupo wheel.
pw user mod username -G wheel
Comprobamos que podemos entrar y cambiar al usuario root con
su -
Y (recomendación) desactivamos PermitRootLogin yes en el fichero /etc/ssh/sshd_config
Por ultimo podemos añadir una ip estática al sistema de la siguiente forma.
Iremos a /etc/rc.conf y añadiremos lo siguiente.
vi /etc/rc.conf
hostname="FreeBSD"
ifconfig_ue0="inet 192.168.1.101 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"

Configurar Ports

Tenemos diferentes formas de instalar paquetes en FreeBSD, pero la que voy a explicar y la que más me gusta es a través de ports, aquí tengo una explicación mas extensa que os recomiendo que visitéis.
Lo primero que deberemos conseguir es la colleccion de Ports.
Los pasos son fáciles
  • Descargar los instantánea comprimida
portsnap fetch
  • Extraer
 portsnap extract
  • Actualizar
portsnap update

Disfrutar :)

Si queréis saber más sobre Ports pasaros por aquí

Con esto ya tendremos el sistema montado y listo para empezar a jugar, por último recordaros que FreeBSD tiene una documentación genial, donde podéis ampliar más información sobre los puntos que aquí explique.

 

Fuentes

23 jul

Instalación de Ports FreeBSD

Bueno esta vez voy a explicar como instalar paquetes en freebsd, después de realizar una instalación básica desde el cd o el usb, la situación en mi caso es la siguiente, queremos tener un sistema únicamente para ver unas gráficas de graphite y claro la cosa más sencilla que se nos ocurrió es preparar un mini pc con freebsd ;).

Bien, pues si hemos hecho la instalación base posiblemente lo primero que tengamos que hacer es dar acceso a root por ssh, si lo se… no es correcto, pero dado la criticidad del asunto, en mi caso voy abrir el acceso para gestionar el pc desde mi sobremesa, tranquilamente. Si hemos creado usuario durante el proceso de instalación, siempre podemos entrar con ese usuario y posteriormente cambiar a root.

Para hacer este paso, muy sencillo cambiaremos lo siguiente,

vi /etc/ssh/sshd_config
PermitRootLogin yes
/etc/rc.d/sshd restart

En nuestro caso vamos a realizar la instalación de los paquetes a través de ports, también lo podemos hacer por packages que vienen siendo los paquetes precompilados, o sea los .deb de debian o los .rpm de redhat, el caso de los port se usa la Colección de Ports que son los ficheros makefile y sus parches adaptados específicamente para poder instalar desde el código fuente. Al instalar un port lo que estaremos haciendo es bajar el código fuente aplicar los parches necesarios, compilar el código e instalará el programa.

Como explican muy bien en la pagina de freebsd, en resumen es esto:

Package (binario)

  • Instalación más rápida (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 instalación. (Los packages se generan normalmente con las opciones estándar. Con los ports puede ajustar diversas opciones, como disponer de módulos adicionales o cambiar la ruta por defecto.)
  • Puede usar sus propios parches si tiende hacerlo.

Como veis, gustos y formas, en mi caso me parece bastante interesante la posibilidad de decidir que partes de un programa quieres tener disponible, es una forma de tener exactamente lo que quieres, si que es cierto que en ciertos casos cuando vamos a instalar suites se puede convierte en algo pesado ir seleccionando las opciones de todos los paquetes, pero como no, siempre hay alguna ayuda…(veremos mas adelante) puesta la introducción vamos al lio.

Preparación de las Colección de  Ports

Lo primero que deberemos hacer es bajarnos la Coleccion de Ports, extraerlos y mirar si disponemos de actualizaciones, todo con estos tres comandos.

portsnap fetch
portsnap extract
portsnap update

Opciones e instalación de Ports

Bueno, ahora vamos a instalar algún port, por ejemplo nano, que es un poco más amigable que vi.

Podemos buscar la ruta del paquete a instalar con whereis o con locate.

whereis nano
nano: /usr/ports/editors/nano

Así que nos vamos a esa ruta y haremos

[email protected]:~ # cd  /usr/ports/editors/nano
[email protected]:/usr/ports/editors/nano # make install clean
[email protected]:~ # rehash

Como hemos visto, se cumple lo que os comente anteriormente (menos mal…) y durante el proceso nos preguntan si queremos tener disponible la documentación de gettext, entro otras opciones que deberemos ir contestando gettext

Por norma general la instalación de ports es así de sencilla.

¿Qué pasa si  queremos instalar xfce?

Como os podéis imaginar nos va a preguntar bastantes opciones a medida que vaya preparando los configures, pues en este caso tenemos dos opciones.

Opción 1

  • make config-recursive antes del make install y el make clean, de esta manera nos solicitara todos las opciones antes de empezar y podremos dejarlo compilando sin preocuparnos de que se pare el proceso.

Opción 2

  • Podemos también ponerlo por defecto, o sea que las opciones por defecto que trae el paquete sean las que utilizara, esto lo haremos añadiendo BATCH=yes al fichero /etc/make.conf, o si lo queremos en un caso puntual, podemos lanzar el make de la siguiente forma make install clean BATCH=yes

Bueno pues vamos hacer un ejemplo, con el paquete vim, como veréis  es posible que nos intentara instalar dependencias del paquete con las X11, en el caso que no tengamos las X o que no queramos tener las dependencias, deberemos hacer lo que explique en su día Evitar dependencias X11 al instalar paquetes FreeBSD

whereis vim
cd /usr/ports/editors/vim/
make config-recursive
make install
make clean
rehash

Como hemos visto nos ha pedido diferentes opciones antes de empezar el proceso, después hemos hecho el make install y el make clean y ya no pregunto nada más, como curiosidad si os fijáis paso algo que explique más arriba (menos mal… nuevamente), lo que hizo en descargar el paquete y fue bajando todos los patch disponible para aplicar hasta la fecha, lo vemos en la imagen.

parch

Y aprovechando esto, os voy a explicar que es la carpeta /usr/ports/distfiles/, cuando vamos a instalar un port, el sistema realizara la comprobación primero en esa ruta, para comprobar que no tenga el paquete ya disponible, también es útil en el caso que tengamos que cumplir alguna dependencia que no este en el repositorio, en eso caso podremos el fichero tgz en esa ruta.

Bueno ahora para mostrar la segunda opción, instalaremos el entorno gráfico xfce, el procedimiento es el mismo, cambiando la opción BATCH=yes, pues al lío.

cd /usr/ports/x11-wm/xfce4
make install clean BATCH=yes
echo "/usr/local/bin/startxfce4" > ~/.xinitrc

Como habréis notado, aquí lo hizo todo a saco sin preguntar nada, cogiendo las opciones por defecto como era de esperar tardo un rato largo…. al menos en mi caso (6-7horas), la última linea es para que en el próximo arranque nos muestre el entorno gráfico

Eliminación de Ports

Bien pues a estas alturas ya sabemos como instalar ports de diferentes maneras en nuestro sistema, igual ahora lo que no interesa es eliminar un port, bien pues lo que vamos hacer es lo siguiente, por ejemplo con el port nano.

cd  /usr/ports/editors/nano
pkg_delete nano

Así de fácil

Actualización de Ports

Igual también nos interesa actualizar algun port, pues lo que haremos es lo siguiente.

Veremos los ports que tienen alguna actualización, con el siguiente comando

pkg_version -v

Muy importante deberemos revisar /usr/ports/UPDATING ya que ahi veremos los commit que se realizaron en los port que tienen posibilidad de ser actualizados,  de esta manera decidiremos si la mejora nos es necesaria o no.
Yo por norma general utilizo portupgrade, que me parece muy sencillo y dinámico, vamos a ver algunos ejemplos

cd /usr/ports/ports-mgmt/portupgrade
make install clean

Actualizar todos los ports, con confirmación (opción -i)

portupgrade -ai

Si queremos actualizar únicamente un paquete podemos hacer

portupgrade -R nano

Con la opción -R lo que le estamos diciendo es que antes de actualizar el paquete, actualice todas las dependencias.

Limpieza de los Ports

Por ultimo vamos a limpiar el sistema después de todo lo que hicimos.

Sobretodo si somos de los que instalamos los ports sin realizar el make clean, deberemos lanzar cada x tiempo el siguiente comando, ya que la colección de ports tiende a crecer y crecer y crecer….

portsclean -C

Para limpiar la carpeta distfiles haremos.

portsclean -D

Pues creo que es todo, como veréis es una simple pincelada para sentirnos un poco más cómodos con el entorno,  la verdad es que es un sistema muy dinámico y recomiendo que lo proveéis, por supuesto una de las grandes cosas que tiene freebsd es su maravillosa documentación.

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

Ale a disfrutarlo!

22 may

Tipos de caches ZFS

Vamos a explicar que tipos de cache tenemos disponible en ZFS y como trabaja cada una de ellas, este post es  un añadido al mejora del rendimiento ZFS,  hechas las presentaciones vamos al lio.

Como sabemos ZFS nos permite hacer miles de cosas que difícilmente las podemos encontrar en los sistemas tradicionales de almacenamiento, e incluso algunas de ellas no están presente entre los grandes como EMC o Hitachi, pero bien estamos viendo que con el paso del tiempo hemos conseguido aumentar el numero de cpu’s, los GB de RAM e incluso los miles de TB de nuestros discos duros, pero aún así seguimos pecando de la velocidad de los discos, así que dada esta situación solo nos queda meter caches intermedias para conseguir darle un poco de brío al tema, en esta situación tenemos lo que popularmente se esta conociendo como Hybrid Storage, que no es más que la unificación de un disco duro + un disco SSD + RAM, la cantidad de cada una de las partes en nuestro sistema dependerá una vez mas de los leuros que tengamos encima de la mesa.

En los tiempos que corren, lo mas normal es que tengamos muchos discos rotativos, poca ram y algún SSD, así que vamos a centrarnos en esta situación para explicar como funcionan y como debemos organizar las caches del sistema ZFS. Dónde tenemos el problema?, pues en el acceso aleatorio a los datos, la búsqueda del sector, más el movimiento de la aguja que nos lleva a tener una latencia importante.

Vamos a ver el esquema de sistemas de cache que tiene ZFS y explicar cada una de ellas.

arcCache ARC -> Muy por encima, ubicado en RAM, es la cache de primer nivel de ZFS, si no le decimos nada ZFS intentara ubicar en ella lo máximo posible, ya que al estar en RAM es la más rápida.(uberblock y punteros  a los arboles de datos, para acceder de la forma mas rápida posible a los mismos).

L2ARC: Cache de segundo nivel de lectura, esto son los discos SSD, zfs ubicará  todos los datos que no pudo ubicar en ARC (debemos recordar que zfs hace un uso intensivo del sistema de prefetch inteligente), esto se puede modificar y decidir que parte queremos enviar al ARC y que parte quedarnos en el L2ARC, esta explicado entre otras variables en el post “Mejorar rendimiento de ZFS“.

ZIL: Más disco SSD, cache de segundo nivel de escritura, ahí meteremos el log, el  zfs intent log que acelerará las escrituras de tipo sincrono.

Disk storage pool: Pues los discos, cuando llegamos aquí ya tenemos que tenerlo todo montadito, que sino empieza a ir todo lento lento….

Entonces como nos quedaría?, pues algo tal que así.

Diagrama1

Cosas a tener en cuenta para entender mejor la arquitectura:

  1. El incremento del rendimiento se notara tras varias horas de funcionamiento con la estructura montada, ya que el sistema L2ARC/ZiL, ira almacenando en cache, los datos que mayor acceso tengan.
  2. El L2ARC, esta pensado para sistemas de write one, read many, o sea mucha lectura poca escritura, y lectura de datos de tipo aleatorio, la lectura de datos secuenciales zfs no hará uso de L2ARC (de cualquier modo el sistema de prefetcht integrado en zfs ya esta suficientemente optimizado para el envío de datos).
  3. ZIL, esto nos ayudara a compensar las escrituras a disco, la verdad es que yo recomiendo activar ambos, ya que obtendremos el mejor rendimiento posible.

Por último, recordad que una vez montado la arquitectura deberías revisar los parámetros, pasaros por el post Mejorar rendimiento de ZFS

Como montar esto?

Fácil

zpool add <pool> cache <disco>

 

zpool add <pool> log <disco>

El primer comando activaremos la cache de L2ARC y con la opción log del segundo comando activaremos la cache ZiL
Ale a disfrutarlo!