2012/12/10

Migracion usuarios

Introduccion:

Supongamos que tenemos un servidor FreeBSD que comparte contenidos mediante Samba y necesitamos hacer una instalacion nueva, el /home esta en un ZFS RAID-Z lo que nos facilitara la migracion, pero no deseamos crear nuevamente a cada uno de los usuarios en el nuevo FreeBSD (tanto los de FreeBSD como los de Samba).
Este tutorial tambien es valido en caso de un cambio a un nuevo servidor (osea, a otro hadware) en este caso existen comandos adicionales requeridos y se ve claramente con el comando en color rojo, si no esta migrando a un nuevo servidor se deben omitir y continuar con el comando siguiente.

Requerimientos:

* FreeBSD instalado
* Leer este manual

El proceso:

En el FreeBSD que vamos a quitar

Hacer un backups de los archivos

¡Los comandos asumen que se tiene un ZFS RAID-Z para el directorio /home, pero puede guardar los datos en otro lugar!

# mkdir /storage/migracion
# tar -cvzf /storage/migracion/FreeBSD.tar.gz /etc/passwd /etc/master.passwd /etc/group
# tar -cvzf /storage/migracion/Samba.tar.gz /usr/local/etc/samba/passdb.tdb /usr/local/etc/samba/secrets.tdb /usr/local/etc/smb.conf
# tar -cvzf /storage/migracion/mail.tar.gz /var/mail
# tar -cvzf /storage/migracion/home.tar.gz /storage/home
# cp -rp /usr/ports/distfiles /storage/migracion <- este es opcional

En el FreeBSD recien instalado actualizado y con el arbol de ports al dia

Instalamos el port de Samba y hacemos que se active al iniciar el sistema

# cd /usr/ports/net/samba36 && make config-recursive && make install clean
# echo '# Samba' >> /etc/rc.conf
# echo 'samba_enable="YES"' >> /etc/rc.conf

Ahora nos falta darle soporte a FreeBSD para que pueda usar el arreglo de discos en ZFS RAID-Z, lea la parte del manual que inicia con "Ahora supongamos que luego de mucho tiempo queremos..." y luego continue en transferir los datos y restaurar el backups.

Transferir los datos por SSH mediante scp al nuevo servidor

# mkdir /storage/migracion
# scp usuario@IPSERVER:/storage/migracion/FreeBSD.tar.gz /storage/migracion
# scp usuario@IPSERVER:/storage/migracion/Samba.tar.gz /storage/migracion
# scp usuario@IPSERVER:/storage/migracion/mail.tar.gz /storage/migracion
# scp usuario@IPSERVER:/storage/migracion/home.tar.gz /storage/migracion
# scp -rp usuario@IPSERVER:/storage/migracion/distfiles /storage/migracion <- este es opcional

"usuario" es un usuario existente en el servidor FreeBSD que vamos a quitar
"IPSERVER" es la direccion IP del servidor FreeBSD que vamos a quitar

Restaurar el backups

# cd /
# tar -xvzf /storage/migracion/FreeBSD.tar.gz
# tar -xvzf /storage/migracion/Samba.tar.gz
# tar -xvzf /storage/migracion/mail.tar.gz
# pwd_mkdb -p /etc/master.passwd
# tar -xvzf /storage/migracion/home.tar.gz
# cp -rp /storage/migracion/distfiles /usr/ports  <- este es opcional
# rm -rf /storage/migracion
# reboot

Listo, al entrar nuevamente debemos tener los mismos usuarios y nuestra informacion de la misma forma que la teniamos en el viejo.

2012/11/28

FreeBSD The Z File System (ZFS)

Introduccion:

Teniendo FreeBSD ya instalado y funcionando, le vamos a crear una unidad formada por varios discos y usaremos ZFS RAID-Z para guardar los datos de home y los contenidos de los usuarios que vamos creando.

Wikipedia ZFS:
ZFS es un sistema de archivos desarrollado por Sun Microsystems para su
sistema operativo Solaris. El significado original era 'Zettabyte File System'
, pero ahora es un acrónimo recursivo.

El anuncio oficial de ZFS se produjo en Septiembre de 2004.1 El código fuente del producto final se integró en la rama principal de desarrollo de Solaris el 31 de octubre de 20052 y fue lanzado el 16 de noviembre de 2005 como parte del build 27 de OpenSolaris.

ZFS fue diseñado e implementado por un equipo de Sun liderado por Jeff Bonwick.

ZFS destaca por su gran capacidad, integración de los conceptos
anteriormente separados de sistema de ficheros y administrador de
volúmenes en un solo producto, nueva estructura sobre el disco, sistemas de
archivos ligeros y una administración de espacios de almacenamiento
sencilla."

Wikipedia Storage pools:
A diferencia de los sistemas de ficheros tradicionales que residen encima de un sólo dispositivo subyacente y por lo tanto requieren un gestor de volúmenes separado si se precisa un sistema de archivos mayor que el dispositivo, ZFS se apoya en espacios de almacenamiento virtuales (virtual storage pools). Los espacios se construyen a partir de uno o más dispositivos virtuales (vdevs), de los que cada uno es o bien un raw device, un mirror (RAID 1) de uno o más dispos todos los vdevs esa disponible para todos los sistemas de archivos del zpool.

Requerimientos:

* FreeBSD instalado
* Leer este manual

Distribucion de los discos:

0    ad10      ada0 }=> FreeBSD:    /, /swap, /var, /tmp, /usr

1    ad12      ada1
2    ad14      ada2
                            }=> ZFS RAID-Z: /storage/home
3    ad16      ada3
4    ad18      ada4

ada0 tendra nuestro FreeBSD y las particiones necesarias como se describe en Example 3-3. Creating Traditional Split Filesystem Partitions

ada1, 2, 3 y 4 seran los discos que usaremos para crear nuestro ZFS RAID-Z

El proceso:

Luego de conectar los discos para el RAID-Z y encender nuestro FreeBSD, miramos como estan los discos:

# cat /var/run/dmesg.boot | grep ada

En la salida nos muestra que efectivamente tenemos ada1, ada2, ada3 y ada4.

Segun el handbook:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/filesystems-zfs.html

Hacemos que se carguen los modulos al iniciar FreeBSD:

# echo '# The Z File System (ZFS)' >> /boot/loader.conf
# echo 'vm.kmem_size="512M"' >> /boot/loader.conf
# echo 'vm.kmem_size_max="512M"' >> /boot/loader.conf
# echo 'vfs.zfs.arc_max="40M"' >> /boot/loader.conf
# echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf

Si tengo menos de 4GB de RAM se pone tambien esta otra linea:

# echo 'vfs.zfs.prefetch_disable="0"' >> /boot/loader.conf

Nota
Las lineas de arriba son diferentes a las que estan en el handbook ya que unos mensajes al cargar FreeBSD recomiendan dichos valores.

Hacemos que se active ZFS al iniciar FreeBSD:

# echo '# Using ZFS' >> /etc/rc.conf
# echo 'zfs_enable="YES"' >> /etc/rc.conf

Iniciamos ZFS
# /etc/rc.d/zfs start

Creamos el pool con los discos y lo llamaremos "storage":

# zpool create storage raidz ada1 ada2 ada3 ada4

si da un error, usar la opcion -f, algo asi "zpool create -f storage ..."

Creamos el ZFS y lo llamaremos "home"

# zfs create storage/home

Copiamos el contenido de home, borramos las viejas rutas y creamos las nuevas:

# cp -rp /home/* /storage/home
# rm -rf /home /usr/home
# ln -s /storage/home /home
# ln -s /storage/home /usr/home

Reiniciamos FreeBSD:

# reboot

Al entrar nuevamente a FreeBSD, miramos como esta la cosa:

# df -h
Filesystem      Size    Used   Avail Capacity  Mounted on
...
storage         2.7T     45k    2.7T     0%    /storage
storage/home    2.7T     54k    2.7T     0%    /storage/home <- Nuestro ZFS RAID-Z :-)

# mount
...
storage on /storage (zfs, local, nfsv4acls)
storage/home on /storage/home (zfs, local, nfsv4acls)

Activamos el reporte diario del estado del ZFS:

# echo '# The ZFS' >> /etc/periodic.conf
# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf

Ver estado del raid:

# zpool status
  pool: storage
 state: ONLINE
 scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    storage     ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        ada1    ONLINE       0     0     0
        ada2    ONLINE       0     0     0
        ada3    ONLINE       0     0     0
        ada4    ONLINE       0     0     0

errors: No known data errors

# zpool status -x
all pools are healthy

Ejemplo de como recuperar nuestro RAID si uno de los discos se daña (se copia del handbook y se ajustan los nombres "ad" por "ada"):

21.2.2.3 Recovering RAID-Z

pool: storage
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
    Sufficient replicas exist for the pool to continue functioning in a
    degraded state.
action: Online the device using 'zpool online' or replace the device with
    'zpool replace'.
 scrub: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    storage     DEGRADED     0     0     0
      raidz1-0  DEGRADED     0     0     0
      ada1      OFFLINE      0     0     0  <- El disco ada1 malo
      ada2      ONLINE       0     0     0
      ada3      ONLINE       0     0     0
      ada4      ONLINE       0     0     0

errors: No known data errors

Sacamos ada1 del arreglo:

# zpool offline storage ada1

Apagamos el equipo:

# shutdown -h now

Cambiamos el disco ada1 malo por uno bueno y encendemos el equipo

Agregamos el disco ada1 al arreglo:

# zpool replace storage ada1

Verificamos:

# zpool status storage
 pool: storage
 state: ONLINE
 scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
config:

    NAME        STATE     READ WRITE CKSUM
    storage     ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
      ada1      ONLINE       0     0     0
      ada2      ONLINE       0     0     0
      ada3      ONLINE       0     0     0
      ada4      ONLINE       0     0     0

errors: No known data errors

# zpool status -x
all pools are healthy

Si queremos eliminar el POOL y el ZFS que tenemos hasta el momento:

Cuidado, los dos comandos siguientes eliminan el arreglo y los datos!

Eliminar el ZFS:

# zfs destroy storage/home

Eliminar el pool:

# zpool destroy storage

Bueno, ya tenemos nuestro arreglo de discos en ZFS RAID-Z, pero una de las cosas interesantes de todo esto son las quotas de disco para los usuarios que se conectaran desde la red por Samba...

21.2.2.5 ZFS Quotas

Crear el ZFS para jdoe:

# zfs create storage/home/jdoe

Crearle una quota de 10G a jdoe:

# zfs set quota=10G storage/home/jdoe

Reporte de la quota:

# zfs get quota storage/home/jdoe
NAME               PROPERTY  VALUE  SOURCE
storage/home/jdoe  quota     10G     local

Ejemplo de como quitarle la quota a jdoe:

# zfs set quota=none storage/home/jdoe

Reporte de la quota (para ver si se la quito):

# zfs get quota storage/home/jdoe
NAME               PROPERTY  VALUE  SOURCE
storage/home/jdoe  quota     none   local

Ahora ya podemos crear el usuario "jdoe":

# adduser
Username: jdoe
Full name: John Doe
...

Por defecto al agregar el usuario se crea la carpeta /home/jdoe y esta gracias al link que ya tenemos se creara en storage/home/jdoe

Ahora supongamos que luego de mucho tiempo queremos hacer una instalacion completamente nueva de FreeBSD en ada0 y logicamente queremos continuar usando nuestro ZFS RAID-Z y los datos que en ese lugar tenemos...

En el FreeBSD recien instalado

Cargar las opciones en el loader.conf:

# echo '# The Z File System (ZFS)' >> /boot/loader.conf
# echo 'vm.kmem_size="512M"' >> /boot/loader.conf
# echo 'vm.kmem_size_max="512M"' >> /boot/loader.conf
# echo 'vfs.zfs.arc_max="40M"' >> /boot/loader.conf
# echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf

Si tengo menos de 4GB de RAM se pone esta otra linea:

# echo 'vfs.zfs.prefetch_disable="0"' >> /boot/loader.conf

Cargar las opciones en el rc.conf:

# echo '# Using ZFS' >> /etc/rc.conf
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/zfs start

Importar el pool:

# zpool import storage

Activamos el reporte diario del estado del ZFS:

# echo '# The ZFS' >> /etc/periodic.conf
# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf

Eliminar las rutas viejas y crear las nuevas para el storage:

# rm -rf /home /usr/home
# ln -s /storage/home /home
# ln -s /storage/home /usr/home

Listo, si reiniciamos el FreeBSD, debemos poder ver todo bien.

Este manual se hizo con FreeBSD 9.0 RELEASE.

Actualizacion 2014/10/09

Recientemente instale FreeBSD 10.0 con la nueva opcion ZFS (experimental) para usar ese sistema de archivos tambien para FreeBSD.

Ya no se agrega nada relacionado con el soporte a ZFS en /etc/rc.conf, tampoco hay que agregar parametros en /boot/loader.conf pues en el nuevo instalador de FreeBSD 10.0 ya deja todo listo.

Hay que eliminar el volumen zroot/usr/home para poder montar /storage/home

# umount /usr/home
# zfs destroy zroot/usr/home
# rm /home
# zpool import storage
# ln -s /storage/home /home
# ln -s /storage/home /usr/home

2012/10/18

Android y como pagar menos en llamadas internacionales

Es muy comun que tengamos amigos o familiares fuera del pais y necesitemos llamarlos en algun momento...

Por fortuna tenemos a las abusivas operadoras de larga distancia, que con sus caras tarifas internacionales nos quieren quitar hasta el ultimo billete ayudar para que estemos siempre en contacto.

Yo les quiero contar un secreto muy interesante, ¡Se puede llamar por muchisimo menos! Ahorrandonos un dinero que podemos usar en otras cosas, como comprarnos un magnifico telefono con Android como el Samsung Galaxy Nexus GT-I9250 GSM/HSPA+, comprarlo en Amazon.com libre por un buen precio o hasta en el operador Tigo de Colombia en reposicion con permanencia de 2 años por unos $500.000 pesos en el plan "Arma tu Plan 70" o totalmente libre, miren aqui.

Bueno, retomando lo de las llamadas mas baratas...

Para llamar a otros paises se puede usar una cuenta SIP, es algo similar a un messenger pero que en lugar de enviar mensajes de texto se habla pagando algo de dinero, se puede crear una cuenta SIP en alguna de las empresas que prestan ese servicio, yo uso una muy economica llamada DiamondCard, tiene buenos precios, basicamente es un sistema prepago, se compra un saldo por unos 20 dolares, que se pagan con una tarjeta de credito, es muy facil, se crea una cuenta con usuario y clave y luego compramos algo de saldo. Al terminar de crear nuestra cuenta SIP nos dan unos datos similares a estos:

(1) Login y Password para entrar en la web por https://www.diamondcard.us/login en donde podemos ver nuestro registro de llamadas y cargar mas saldo.

Login: john
Password: clavesecretadejohn

(2) El "Account ID" y "PIN code" para configurar la cuenta SIP en nuestro Android o la aplicacion que usemos.

Account ID: 471234
PIN code: 123456789012
Server: sip.diamondcard.us

(los datos de arriba son ficticios para ejemplo)

Nota:
La informacion de "Account ID" y "PIN code" siempre la podremos ver en la web luego de loguearnos (en la parte superior derecha donde esta tambien nuestro saldo).

Al tener ya nuestra cuenta SIP con saldo, ya podemos empezar a usarla, para eso tenemos dos opciones, el tradicional computador (aburrido y ya poco practico) o con nuestro magnifico Galaxy Nexus con Android (esta es mi preferida), que nos permite estar en cualquier lugar y ya sea con WiFi o con algun plan de datos 3G, hacer llamadas por menos de 50 pesos el minuto (ver precios).

Si aun no tenemos un telefono "NEXUS", podemos ir a comprarlo, mientras lo compramos, podemos usar nuestro coputador y descargar he instalar el programa de DiamondCard que se baja de aqui para Windows, o si ya cansados de los problemas con Window tenemos un MacBook, le descargamos algun cliente como LinPhone.

Si somos los felices poseedores de un telefono con Android como el Galaxy ACE igualmente le tenemos que instalar LinPhone que esta en la tienda de Google Play Store gratis y en el programita ingresar los datos suministrados por DiamodCard de nuestra cuenta SIP, ya que dicho telefono viene con Android 2.3 y este aun no tiene cliente nativo para cuentas SIP.

Si tenemos el magnifico Galaxy Nexus, con Android 4.0.4 o superior, no tendremos que bajar nada, pues Android 4.0.4 ya tiene cliente nativo para cuentas SIP, para configurarlo y como es el telefono que tengo, les dare las instrucciones paso a paso...

Configurar tu cuenta SIP en el Samsung Galaxy Nexus:

1 Abrimos el marcador como si fueramos a escribir algun numero para llamar
2 Nos vamos a Settings (seleccionando los tres punticos)
3 Bajamos hasta donde dice "INTERNET CALL SETTINGS" Accounts
4 Seleccionamos "ADD ACCOUNT"
5 Ingresamos los datos requeridos:

Username
471234   <- escribir el "Account ID"
Password
123456789012   <- escribir el "PIN code"
Server
sip.diamondcard.us

6 Seleccionamos "SAVE"

Listo, ya debemos ver nuestra cuenta creada, se ve algo asi:

471234@sip.diamondcard.us

Ahora debemos decirle a nuestro telefono que nos pregunte en cada llamada si queremos llamar usando al operador celular o llamar por Internet usando nuestra cuenta SIP y el saldo que compramos en DiamondCard.us, para hacer esto nos vamos de forma similar que en las instrucciones anteriores:

1 Abrimos el marcador como si fueramos a escribir algun numero para llamar
2 Nos vamos a Settings (seleccionando los tres punticos)
3 Bajamos hasta donde dice "Use Interned calling" y activamos "Ask for each call.

Ahora vamos a llamar a nuestro primer contacto llamado "Pepe Cortisona" que vive en USA y que cariñosamente apodamos "saco de plomo", para hacerlo, debemos tener o crear un contacto y colocarle el telefono de USA, ya sea celular o fijo, por ejemplo:

(codpais codciudad telefono)

1 646 362 1234

Guardamos los datos de "saco de plomo" y ya lo podemos llamar para hacer nuestra prueba, al seleccionar nuestro contacto, nos sale una ventanita

Place call
   Cell phone call
   Internet call

Tocamos "Internet call" y en unos segundo timbrara la llamada y nos podra contestar nuestro amigo en USA.

2014/11/20 Actualizacion:

Configurar tu cuenta SIP en el LG Nexus 5:

1 Abrimos el marcador como si fueramos a llamar
2 Nos vamos a Settings (seleccionando los tres punticos)
3 Calls
4 Calling accounts
5 SIP accounts
6 "ADD ACCOUNT"
7 Ingresamos los datos requeridos:

Username
471234   <- escribir el "Account ID"
Password
123456789012   <- escribir el "PIN code"
Server
sip.diamondcard.us

8 Seleccionamos "SAVE"

Ahora debemos decirle a nuestro telefono que nos pregunte en cada llamada si queremos llamar usando al operador celular o llamar por Internet usando nuestra cuenta SIP y el saldo que compramos en DiamondCard.us, para hacer esto nos vamos de forma similar que en las instrucciones anteriores:

1 Abrimos el marcador como si fueramos a llamar
2 Nos vamos a Settings (seleccionando los tres punticos)
3 Calls
4 Calling accounts
5 Make calls with
   TIGO -> Ask first
6 Use SIP calling
   Only for SIP calls -> For all calls

Listo, ahora al llamar nos preguntara si usa TIGO o SIP

2012/09/26

Samsung Galaxy Nexus GT-I9250 Google Factory Images

El Samsung Galaxy Nexus es un telefono muy bueno que se vende en todo el mundo, existen tres modelos:
Este tutorial enseña como flashear nuestro equipo para la version GT-I9250 GSM/HSPA+, pero tambien debe funcionar si estas en Estados Unidos y tienes el de Verizon o Sprint, solo hay que poner cuidado de descargar la imagen correcta para nuestro modelo de hardware ("maguro", "toro" o "toroplus").

Los telefonos "NEXUS" son los que Google manda a hacer con alguno de los fabricantes, Samsung en el caso del Galaxy Nexus, por eso Google es quien nos proporciona las actualizaciones directamente si lo compramos en la tienda Google Play Store o en alguna otra tienda libre.

Si compramos nuestro "NEXUS" con algun operador, viene con un firmware de Android "ajustado" por Samsung y hasta puede venir con algunas aplicaciones del operador, en este caso las actualizaciones se demoran mas, mientras Samsung ajusta la nueva version de Android y las aplicaciones solicitadas del operador. Esto logicamente genera demoras!

Si tenemos un "NEXUS" y Google nos da las imagenes de fabrica, podemos flashear nuestro equipo con el Android y ya seguir recibiendo las actualizaciones directamente via "OTA" (Over-The-Air) sin tener que esperar a Samsung y/o al operador.

Las imagenes se pueden ver aqui https://developers.google.com/android/nexus/images

Contar con la ultima version de Android nos puede brindar muchas cosas buenas, correccion de errores, nuevas funcionalidades y optimizaciones. Lo ideal es poder disfrutar de esos beneficios durante el tiempo de vida del telefono mientras Google le saque actualizaciones (el modelo anterior llamado Nexus S tiene casi 3 años y aun le sacan actualizaciones).

Otro tema y que por fortuna no afecta a los "NEXUS", es una capa que los fabricantes le ponen a Android para que se vea diferente, dicha capa puede hacer aun mas demorada la actualizacion de Android, algunos ejemplos son el "TouchWiz" de Samsung, el "Motoblur" de Motorola, el "Sense" de HTC. Todo eso es mas trabajo de programacion, es costoso, quita tiempo y que con las ultimas versiones de Andriod ya no son necesarias.

En el caso del Galaxy Nexus GT-I9250 GSM/HSPA+, todos los equipos son iguales en hardware denominado "maguro", y que vienen con alguna variante de Android "yakju" para los que se venden en Europa o "takju" para los que se venden en Estados Unidos y que vienen con el Google Wallet.

Para saber si nuestro equipo recibe las actualizaciones directamente de Google o de Samsung, podemos mirar los datos de "Baseband version" vemos que puede tener algo como esto:

I9250XXLA2 <- version de Samsung para Latino America

I9250XXLF1 <- version de Google para Estados Unidos

Para ver estos datos, vamos a Settings -> About phone

Al instalarle a nuestro telefono la imagen de fabrica, es como si se lo compraramos directamente a Google en lugar de a el operador! Por eso al eliminar la dependencia Samsung y operador, las actualizacines nos llegaran mas rapido, para hacer esto, debemos flashear el equipo...

Flashear un equipo es algo delicado, se debe hacer con cuidado y bien o nos podemos quedar con un ladrillito en lugar de un telefono!

Si se hace bien no debemos tener problemas, pero todo tiene un minimo de riesgo y puede que la garantia no lo cubra si lo dañamos haciendo mal el proceso, las instrucciones de abajo son de como yo lo hice, pero no puedo garantizar que les funcione o que el telefono no tenga que pasar por el centro de servicio si usted lo hace mal, es bajo su responsabilidad.

Para realizar el flasheo, se necesita de un computador Mac, tambien se puede hacer desde un computador con Windows, pero yo no tengo este ultimo (no me gusta Windows) y en Windows se requiere la descarga de otras cosas...

El proceso de flasheo elimina toda informacion del equipo como son fotos y musica, los contactos se almacenan en la cuenta de Google con lo que al iniciar nuevamente luego del flasheo se sincronizaran automaticamente. Por esto debemos hacer backup de nuestas fotos y musica!

Las imagenes para la version GSM/HSPA+ son:
 Factory Images "yakju" for Galaxy Nexus "maguro" (GSM/HSPA+)
 https://developers.google.com/android/nexus/images#yakju
 Factory Images "takju" for Galaxy Nexus "maguro" (GSM/HSPA+) (with Google Wallet)
 https://developers.google.com/android/nexus/images#takju

Se pueden usar "yakju" o "takju" indistintamente siempre que nuestro equipo sea "maguro", osea la version GT-I9250 GSM/HSPA+ ;-)

Actualizacion manual a 4.1.1 (JRO03C) <- Jelly Bean para "yakju":

1 Descargar Factory Image https://dl.google.com/dl/android/aosp/yakju-jro03c-factory-3174c1e5.tgz
2 Descomprimir el archivo .tgz en el home de nuestro usuario de Mac OS X
3 Descargar el fastboot de aqui ADT Bundle http://dl.google.com/android/adt/22.6.2/adt-bundle-mac-x86_64-20140321.zip tambien de aqui Google Drive
4 Descomprimir el archivo .zip y meterlo dentro de la carpeta  yakju-jro03c creada en el paso 2
5 Apagar el telefono
6 Encenderlo en "FASTBOOT MODE" presionar volumen arriba + volumen abajo + power

FASTBOOT MODE
LOCK STATE - UNLOCKED  <- si vemos esto podemos continuar, en caso contrario, mirar las notas al final

7 Abrimos el terminal
8 Darle permisos de ejecucion al archivo fastboot
$ chmod +x ~/yakju-jro03c/fastboot
9 Darle permisos de ejecucion al archivo flash-all.sh
$ chmod +x ~/yakju-jro03c/flash-all.sh
10 Con el editor del computador editamos el archivo llamado flash-all.sh para ajustar los path (rutas) y guardar los cambios, la parte de las rutas se ven asi:
...
  ~/yakju-jro03c/fastboot flash bootloader bootloader-maguro-primelc03.img
  ~/yakju-jro03c/fastboot reboot-bootloader
  sleep 5
  ~/yakju-jro03c/fastboot flash radio radio-maguro-i9250xxlf1.img
  ~/yakju-jro03c/fastboot reboot-bootloader
  sleep 5
  ~/yakju-jro03c/fastboot -w update image-yakju-jro03c.zip

11 Entrar al directorio donde tenemos el archivo fastboot junto con los archivos de la imagen
$ cd ~/yakju-jro03c
12 Correr el script
$ ~/yakju-jro03c/flash-all.sh
...
sending 'bootloader' (2308 KB)... OKAY
writing 'bootloader'... OKAY
rebooting into bootloader... OKAY
sending 'radio' (12288 KB)... OKAY
writing 'radio'... OKAY
rebooting into bootloader... OKAY
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: PRIMELC03
Baseband Version.....: I9250XXLF1
Serial Number........: 015y73651A122021 <- he cambiado esto para no publicar mi IMEI
--------------------------------------------
checking product... OKAY
checking version-bootloader... OKAY
checking version-baseband... OKAY
sending 'boot' (4366 KB)... OKAY
writing 'boot'... OKAY
sending 'recovery' (4708 KB)... OKAY
writing 'recovery'... OKAY
sending 'system' (396675 KB)... OKAY
writing 'system'... OKAY
erasing 'userdata'... OKAY
erasing 'cache'... OKAY
rebooting...

Nuestro telefono se re-inicia solito y ya lo podemos usar metiendo los datos de nuestra cuenta y clave de Google.

Si todo lo hicimos correctamente, al mirar nuestro telefono, nos debe mostar algo como esto ;-)


Es posible que luego cada que encendemos el equipo, nos muestre un cadadito abierto, para que el telefono no quede con el candadito abierto luego de hacer la actualizacion, seguimos los pasos 5, 6 y ejecutamos el comando de las notas y lo re-iniciamos.
-------------------------------------------------------------
Notas:
LOCK STATE - LOCKED para cambiarlo
$ ~/yakju-jro03c/fastboot oem unlock
volumen arriba + power para cambiarlo

LOCK STATE - UNLOCKED para cambiarlo
$ ~/yakju-jro03c/fastboot oem lock
-------------------------------------------------------------

Actualizacion:
Hoy (10/10/2012) salio la version 4.1.2 (JZO54K) <- Jelly Bean, siguiendo el manual y ajustando los nombres para la nueva version, he usado la imagen "Factory Images "takju" for Galaxy Nexus "maguro" (GSM/HSPA+) (with Google Wallet)" https://dl.google.com/dl/android/aosp/takju-jzo54k-factory-92830c0b.tgz sin ningun problema para actualizar mi telefono.

Al correr el script en el paso 12, nos muestra unos errores, pero no es importante, vemos algo como esto:
...
ERROR: could not get pipe properties
sending 'bootloader' (2308 KB)... OKAY
writing 'bootloader'... OKAY
ERROR: could not get pipe properties
rebooting into bootloader... OKAY
ERROR: could not get pipe properties
sending 'radio' (12288 KB)... OKAY
writing 'radio'... OKAY
ERROR: could not get pipe properties
rebooting into bootloader... OKAY
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
ERROR: could not get pipe properties
--------------------------------------------
Bootloader Version...: PRIMELC03
Baseband Version.....: I9250XXLF1
Serial Number........: 015y73651A122021
--------------------------------------------
checking product... OKAY
checking version-bootloader... OKAY
checking version-baseband... OKAY
sending 'boot' (4368 KB)... OKAY
writing 'boot'... OKAY
sending 'recovery' (4710 KB)... OKAY
writing 'recovery'... OKAY
sending 'system' (407055 KB)... OKAY
writing 'system'... OKAY
erasing 'userdata'... OKAY
erasing 'cache'... OKAY
rebooting... 

al mirar nuestro telefono, nos debe mostar algo como esto ;-)

2012/05/25

ICINGA

Introduccion:

Instalar ICINGA en FreeBSD

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Apache22 instalado
* Leer este manual

Documentacion de Icinga:

http://docs.icinga.org/latest/en/index.html

El proceso:

Actualizar el arbol de ports
# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

Instalar el port icinga

# cd /usr/ports/net-mgmt/icinga

# make config

Options for icinga 1.7.0_2

[X] EMBEDDED_PERL   Enable embedded Perl
[X] IDOUTILS        Enable IDOUtils

<OK>

# make install clean

Options for libdbi-drivers 0.8.3.1_5

[X] MYSQL     With MySQL Driver
[X] PGSQL     With PostgreSQL Driver
[ ] SQLITE3   With SQLite 3 Driver     <- Desactivo esta, no quiero sqlite

pw: unknown group `icinga'
You need a "icinga" group.
Would you like me to create it [YES]? YES

Done.
pw: no such user `icinga'
You need a "icinga" user.
Would you like me to create it [YES]? YES

Hacer que inicie con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

icinga_enable="YES"

Instalar el port nagios-plugins

# cd /usr/ports/net-mgmt/nagios-plugins

# make install clean

Instalar los logos para Icinga

# cd /usr/local/www/icinga/images/logos
# fetch https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Base-Images/imagepak-base.tar.tar
# tar -xvzf imagepak-base.tar.tar
# mv base/* /usr/local/www/icinga/images/logos/
# rm -rf base
# rm imagepak-base.tar.tar
# fetch https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Network-Symbols/symbols-v1.1.tar.gz
# tar -xvzf symbols-v1.1.tar.gz
# mv symbols/* /usr/local/www/icinga/images/logos/
# rm symbols-v1.1.tar.gz
# rm -rf symbols

Otros logos se pueden descargar de aqui (opcional)
https://www.monitoringexchange.org/inventory/Artwork/Image-Packs

Crear el archivo htpasswd.users

# touch /usr/local/etc/icinga/htpasswd.users

Agregar los usuarios y las claves

# htpasswd -c /usr/local/etc/icinga/htpasswd.users icingaadmin
New password: miclavesecreta
Re-type new password: miclavesecreta
Adding password for user isingaadmin

El password que escribio lo debe anotar, osea que creamos icingaadmin/miclavesecreta

Note que en el primer comando tenemos -c para crear el archivo y en el siguiente no!

# htpasswd /usr/local/etc/icinga/htpasswd.users guest
New password: guest
Re-type new password: guest
Adding password for user guest

El password que escribio lo debe anotar, osea que creamos guest/guest

Note que hemos creado dos usuarios icingaadmin con su respectiva clave y el usuario guest con clave guest

Editar el archivo de Apache para el sitio de icinga

# edit /usr/local/etc/apache22/httpd.conf

Agregar las lineas

# Modificacion para ICINGA inicio

<Directory /usr/local/www/icinga>
Order deny,allow
Options -Indexes
Deny from all
Allow from all

# Autenticacion inicio
AuthName "Icinga Access"
AuthType Basic
AuthUserFile /usr/local/etc/icinga/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

<Directory /usr/local/www/icinga/cgi-bin>
Options ExecCGI
# Autenticacion inicio
AuthName "Icinga Access"
AuthType Basic
AuthUserFile /usr/local/etc/icinga/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

ScriptAlias /icinga/cgi-bin/ /usr/local/www/icinga/cgi-bin/
Alias /icinga /usr/local/www/icinga/

# Modificacion para ICINGA fin

Reiniciar Apache para que tome los cambios

# /usr/local/etc/rc.d/apache22 restart

Creamos los archivos a partir de los de ejemplo

# cp /usr/local/etc/icinga/cgi.cfg-sample /usr/local/etc/icinga/cgi.cfg
# cp /usr/local/etc/icinga/cgiauth.cfg-sample /usr/local/etc/icinga/cgiauth.cfg
# cp /usr/local/etc/icinga/icinga.cfg-sample /usr/local/etc/icinga/icinga.cfg
# cp /usr/local/etc/icinga/resource.cfg-sample /usr/local/etc/icinga/resource.cfg
# cp /usr/local/etc/icinga/objects/commands.cfg-sample /usr/local/etc/icinga/objects/commands.cfg
# cp /usr/local/etc/icinga/objects/contacts.cfg-sample /usr/local/etc/icinga/objects/contacts.cfg
# cp /usr/local/etc/icinga/objects/notifications.cfg-sample /usr/local/etc/icinga/objects/notifications.cfg
# cp /usr/local/etc/icinga/objects/templates.cfg-sample /usr/local/etc/icinga/objects/templates.cfg
# cp /usr/local/etc/icinga/objects/timeperiods.cfg-sample /usr/local/etc/icinga/objects/timeperiods.cfg

Verificar las lineas o ajustarlas (note que agregamos ,guest al final, en las lineas 260 y 261)

# edit /usr/local/etc/icinga/cgi.cfg

authorized_for_all_services=icingaadmin,guest
authorized_for_all_hosts=icingaadmin,guest

Editar el archivo de Cinga

# edit /usr/local/etc/icinga/icinga.cfg

Comentar la linea colocando un # al inicio, queda asi:

#cfg_file=/usr/local/etc/icinga/objects/localhost.cfg

Crear el archivo con los equipos de nuestra compañia (abajo hay un link en Google Drive desde donde puede descargarlo)

# edit /usr/local/etc/icinga/conf.d/equipment.cfg

Editar el archivo de contactos de Icinga

# edit /usr/local/etc/icinga/objects/contacts.cfg

Ajustamos la linea

email       icinga@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Por un email valido

email       micorreo@gmail.com   ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Verificar que todo esta bien en la configuracion de icinga

# icinga -v /usr/local/etc/icinga/icinga.cfg

Iniciar Icinga si la verificacion pasa sin errores

# /usr/local/etc/rc.d/icinga start

Performing sanity check of icinga configuration: OK
Starting icinga.

Para ver el log (luego para parar de ver el log use las teclas Ctl + C)
# tail -f /var/log/icinga/icinga.log

Otro comando util

# icingastats -c /usr/local/etc/icinga/conf.d/equipment.cfg

Ahora que Icinga esta corriendo, para velo, entramos a:

http://<ipdemiserver>/icinga

le pedira entrar el usuario guest y la clave guest con los que se puede monitorear los equipos, si inincia con el usuario icingaadmin y la clave miclavesecreta se pueden hacer otros ajustes mas delicados desde el navegador (desactivar alarmas y otras cosas).

Caputuras de Icinga funcionando :-)

Icinga Tactical Overview


Icinga Map


Notas:

En el port icinga 1.7.0_2 se solucionaron unos errores en rutas y permisos que originalmente se detectaron el el port 1.7.0 :-)

Si quiere aqui estan los archivos de configuracion "equipment.cfg" y "commands.cfg", pero tenga en cuenta que en el primero hay comandos que requieren de nuevos comandos agregados posteriormente en "commands.cfg", por esto si va a usar el primer archivo tambien debe remplazar el archivo original "commands.cfg" de Icinga, baje ambos archivos del siguiente link:
Google Drive

Adicionalmente se puede modificar en la opcion "notification_period" el valor "24x7" por "workhours" y luego editamos el archivo /usr/local/etc/icinga/objects/timeperiods.cfg para ajustar workhours a nuestro horario de trabajo.

Opcional (en pruebas):

Icinga puede guardar la informacion del estado de los equipos en un DB que puede ser MySQL o PostgreSQL, si queremos hacerlo...

Hay que tener un montor de DB, en nuestro caso usaremos MySQL

Para activar el soporte de MySQL, al instalar el port debe activar tambien la opcion

[X] MYSQL           "Depend on MySQL"

Si siguio paso a paso este manual no lo tendra activado. Para activarlo puede parar el servicio, entrar al port, desinstalarlo, activar la opcion e instalarlo nuevamente sin problema

# /usr/local/etc/rc.d/icinga stop
# cd /usr/ports/net-mgmt/icinga
# make deinstall clean

# make config

Options for icinga 1.7.0_2

Activamos las siguientes opciones

[X] EMBEDDED_PERL   "Enable embedded Perl"
[X] IDOUTILS        "Enable IDOUtils"
[X] MYSQL           "Depend on MySQL"

# make install clean

Note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

Crear la DB llamada icinga

$ mysqladmin -uroot create icinga

Le damos permisos al usuario icinga con clave icinga en la DB llamada icinga

$ mysql -uroot -e"GRANT ALL ON icinga.* TO icinga@localhost IDENTIFIED BY 'icinga'" icinga

Creamos los archivos a partir de los de ejemplo

# cp /usr/local/etc/icinga/idomod.cfg-sample /usr/local/etc/icinga/idomod.cfg
# cp /usr/local/etc/icinga/ido2db.cfg-sample /usr/local/etc/icinga/ido2db.cfg

Activar el modulo broker de icinga editando el archivo

# edit /usr/local/etc/icinga/icinga.cfg

La linea original (esta opcion esta en la linea 269)

#broker_module=/usr/local/lib/idomod.so config_file=/usr/local/etc/icinga/idomod.cfg

La activamos quitando el # del principio, de modo que queda asi

broker_module=/usr/local/lib/idomod.so config_file=/usr/local/etc/icinga/idomod.cfg

Importar el esquema de la DB para icinga

Note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

$ mysql --user=icinga --password=icinga icinga < /usr/local/share/examples/icinga/idoutils/db/mysql/mysql.sql

Hacer que inicie con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

ido2db_enable="YES"

Iniciar ido2db

# /usr/local/etc/rc.d/ido2db start

Si nos regresa este error

Could not bind socket: Address already in use

Borrar el archivo /var/spool/icinga/ido.sock

# rm /var/spool/icinga/ido.sock

Y tratar de iniciar el servicio nuevamente

# /usr/local/etc/rc.d/ido2db start

Iniciar Icinga

# /usr/local/etc/rc.d/icinga start

Hacer backup de la DB icinga
# mysqldump --user=icinga --password=icinga icinga > /usr/home/backups/icinga.sql

Importarlo, note que los comandos que al inicio tienen el $ se ejecutan con un usuario diferente del root

$ mysql --user=icinga --password=icinga icinga < /usr/home/backups/icinga.sql

Algunos ajustes opcionales:

statusmap http://docs.icinga.org/latest/en/configcgi.html

# edit /usr/local/etc/icinga/cgi.cfg

ajustamos la linea

default_statusmap_layout=5

la podemos cambiar por 3 (Balanced tree) para que siempre nos muestre de esa forma el mapa.

Actualizacion
Luego de un tiempo se necesito que dos elementos en icinga reportaran a un email diferente, para hacer esto

# edit /usr/local/etc/icinga/objects/contacts.cfg

En la seccion CONTATS agrego al final de icingaadmin las entradas
...
define contact{
        contact_name                    jdoe
        use                             generic-contact
        alias                           John Doe (Sistemas)

        email                           john.doe@gmail.com
        }

define contact{
        contact_name                   jsmith
        use                             generic-contact
        alias                           John Smith (Sistemas)

        email                           john.smith@gmail.com
        }

define contact{
        contact_name                   jroe
        use                             generic-contact
        alias                           Jane Roe (Ingenieria)

        email                           jane.roe@gmail.com
        }

En la seccion CONTACT GROUPS agrego al final de admins las entradas
...
define contactgroup{
        contactgroup_name       sistemas
        alias                   Soporte Sistemas
        members                 jdoe, jsmith
        }

define contactgroup{
        contactgroup_name       ingenieria
        alias                   Ingenieria
        members                jroe
        }

Ejemplo de la entrada para un equipo

# edit /usr/local/etc/icinga/conf.d/equipment.cfg

define host{
        host_name                       alpha
        alias                           HP ProLiant ML370G4
        icon_image                      freebsd40.png
        icon_image_alt                  FreeBSD
        vrml_image                      freebsd40.png
        statusmap_image                 freebsd40.gd2   ; El que se ve en el mapa (.gd2 o .png)
       #2d_coords                       x_coord,y_coord         ; Example 100,250
        2d_coords                       100,125
        notes                           Servidor principal
        notes_url                       /glpi
        action_url                      /public
        address                         192.168.16.1
       #parents
        hostgroups                      network-server
        check_command                   check-host-alive
        check_interval                  5
        retry_interval                  1
        max_check_attempts              5
        check_period                    24x7
        process_perf_data               0
        retain_nonstatus_information    0
       #contact_groups                  admins
        contact_groups                  sistemas   ; Este solo reporta a sistemas
        notification_interval           30
        notification_period             24x7
        notification_options            d,u,r
        }

Si quiero que reporte a sistemas y a ingenieria, la linea contact_groups es asi

contact_groups                  sistemas, ingenieria

O si solo reporta a ingenieria, la linea es

contact_groups                 ingenieria

2012/05/22

PHP5

Introducion:

Instalar PHP5 en FreeBSD para Apache

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Apache instalado

* Leer este manual

El proceso:

Actualizar el arbol de ports

# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

Instalar el por php5

# cd /usr/ports/lang/php5

# make config

Activar la opcion
[X] APACHE Build Apache module
[ OK ]

# make install clean

Crear el archivo test.php

# edit /usr/local/www/apache22/data/test.php

Agregar las siguientes lineas:

<?php
phpinfo();
?>

Gerenar el archivo de configuracion a partir del de ejemplo

# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Editar el archivo de apache para activarle PHP

# edit /usr/local/etc/apache22/httpd.conf

Desactivo las siguientes lineas:

#<IfModule dir_module>
#DirectoryIndex index.html
#</IfModule>

Agregamos las nuevas:

# Lineas agregadas para PHP inicio
<IfModule mod_php5.c>
DirectoryIndex default.php index.html index.php login.php
</IfModule>

<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
# Lineas agregadas para PHP fin

Reiniciar Apache

# /usr/local/etc/rc.d/apache22 restart

Verificar el soporte de PHP en Apache

Entrar con el navegador a:

http://<serverip>/test.php

2012/05/19

Apache

Introduccion:

Instalar Apache en FreeBSD

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Leer este manual

El proceso:

Actualizar el arbol de ports

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

Instalar el port de Apache

# cd /usr/ports/www/apache22

# make config

Desactive esta opcion, es un modulo tocapelotas (quite la X), queda asi:

[  ] UNIQUE_ID             Enable mod_unique_id

# make install clean

Activar el inicio de Apache con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

apache22_enable="YES"

Iniciar apache

# /usr/local/etc/rc.d/apache22 start

El archivo de configuracion donde se crean los sitios

# edit /usr/local/etc/apache22/httpd.conf

Los comandos de apache son:

# /usr/local/etc/rc.d/apache22 start|stop|restart

Otro comando muy util para hacer que apache relea el httpd.conf luego de hacer un cambio

# apachectl graceful

Los logs de apache los puede ver asi

# tail -f /var/log/httpd-error.log
# tail -f /var/log/httpd-access.log

Ahora vamos a crear nuestro primer sitio en apache, crearemos misitio

Editamos el archivo httpd.conf de apache

# edit /usr/local/etc/apache22/httpd.conf

Al final del archivo agregamos

# Modificacion para MISITIO inicio

<Directory /usr/local/www/misitio>
Order deny,allow
Options -Indexes
Deny from all
Allow from all

Alias /misitio /usr/local/www/misitio/

# Modificacion para MISITIO fin

Reiniciamos apache

# /usr/local/etc/rc.d/apache22 restart

Creamos el directorio

# mkdir /usr/local/www/misitio

Creamos un codigo html basico dentro de misitio

# edit /usr/local/www/misitio/index.html

Le agregamos un contenido muy basico

<p>Hola mundo!</p>

Le asignamos el usuario www y grupo www al directorio y su contenido

# chown -R www:www /usr/local/www/misitio

Le damos los permisos correctos al directorio y su contenido

# chmod -R 0755 /usr/local/www/misitio

# chmod 0644  /usr/local/www/misitio/index.html

Aqui hay mas informacion sobre los permisos
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/permissions.html

Para verificar que el sitio este funcionando, entramos a

http://<IPSERVER>/misitio

Listo, al entrar debemos ver nuestro Hola mundo!

2012/05/18

Proxy Squid-cache

Introduccion:

Instalar Squid-cache en FreeBSD y dejarlo trabajando en modo intercept (transparente)

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Firewall PF (para proxy transparente)
* Leer este manual

El proceso:


Actualizar el arbol de ports

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

# cd /usr/ports/www/squid32

# make config

IMPORTANTE!
Para usar proxy transparente se deben desactivar AUTHENTICATION e IPv6

Options for squid 3.2.3_2

[X] ARP_ACL        Enable ARP/MAC/EUI based authentification
[X] FS_AUFS        Enable AUFS (async-io) support
[X] HTCP           Enable HTCP support
[X] IDENT          Enable Ident lookups (RFC 931)
[X] KQUEUE         Enable kqueue(2) support
[X] SNMP           Enable SNMP support
[X] TP_PF          Enable transparent proxying with PF
[X] WCCP           Enable Web Cache Coordination Protocol
[X] WCCPV2         Enable Web Cache Coordination Protocol v2

[ OK ]

# make install clean

Para que Squid-cache pueda trabajar en modo intercept necesita poder leer /dev/pf

Por defecto /dev/pf solo es accesible para el usuario root

Verificamos los permisos actuales de /dev/pf

# ls -al /dev/pf
crw-------  1 root  wheel    0, 108 Oct 26 11:01 /dev/pf

Para darle acceso a Squid-cache

# edit /etc/devfs.conf

Agregamos la linea

# Allow Squid read acess to /dev/pf
own     pf      root:squid
perm    pf      0640

Reiniciamos devfs

 # /etc/rc.d/devfs restart

Verificamos los permisos nuevos de /dev/pf

# ls -al /dev/pf
crw-r-----  1 root  squid    0, 108 Oct 26 11:01 /dev/pf

El archivo de configuracion se ve asi:

# grep -vE '^#|^;|^$' /usr/local/etc/squid/squid.conf
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access allow localhost manager
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
http_port 3129 intercept
cache_dir ufs /var/squid/cache/squid 1000 16 256
coredump_dir /var/squid/cache/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
access_log daemon:/var/log/squid/access.log squid

Crear el directorio

# mkdir -p /var/squid/cache/squid

Asignar el directorio al usuario squid

# chown -R squid:squid /var/squid

Inicializar el cache

# squid -z
# 2012/12/04 14:04:45 kid1| Creating Swap Directories
2012/12/04 14:04:45 kid1| /var/squid/cache/squid exists
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/00
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/01
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/02
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/03
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/04
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/05
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/06
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/07
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/08
2012/12/04 14:04:45 kid1| Making directories in /var/squid/cache/squid/09
2012/12/04 14:04:46 kid1| Making directories in /var/squid/cache/squid/0A
2012/12/04 14:04:46 kid1| Making directories in /var/squid/cache/squid/0B
2012/12/04 14:04:46 kid1| Making directories in /var/squid/cache/squid/0C
2012/12/04 14:04:46 kid1| Making directories in /var/squid/cache/squid/0D
2012/12/04 14:04:46 kid1| Making directories in /var/squid/cache/squid/0E
2012/12/04 14:04:47 kid1| Making directories in /var/squid/cache/squid/0F

Poner la linea para que squid inicie con el sistema

# echo '# Squid-cache' >> /etc/rc.conf
# echo 'squid_enable="YES"' >> /etc/rc.conf

Verificar el squid.conf

# squid -k parse

Iniciar squid

# /usr/local/etc/rc.d/squid start

Ver opciones de squid
# squid -v

Un ejemplo para PF en FreeBSD

Colocar la linea en la seccion de NAT de nuestro firewall PF:

# Redirect and allow outgoing to WWW requests to the squid, but
# not from LAN to my server
rdr pass on $int_if proto tcp from any to !$int_if port www \
    -> 127.0.0.1 port 3129

Para ver el log de navegacion de squid use el comando:

# tail -f /var/log/squid/access.log

Para verificar otras cosas, por ejemplo si squid inicia bien

# tail -f /var/log/squid/cache.log

Los comandos de squid son:

# /usr/local/etc/rc.d/squid stop|start|restart|reload

Si quiere aqui estan los archivos de configuracion:
Google Drive

Firewall PF

Introduccion:

Requerimientos:
* Conexion a Internet
* FreeBSD instalado
* Leer este manual

Diagrama:

ISP---(ext_if)-[FreeBSD]-(int_if)---Switch---LAN
                                   \
                                    '-(dmz_if)

El proceso:

Hacer que PF se cargue con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar las lineas

# Activamos OpenBSD Packet Filter (PF)
pf_enable="YES"                     # Enable PF (load module if required)
pf_rules="/etc/pf.conf"             # rules definition file for pf
pf_flags=""                                # additional flags for pfctl startup
pflog_enable="YES"                 # start pflogd(8)
pflog_logfile="/var/log/pflog"   # where pflogd should store the logfile
pflog_flags=""                           # additional flags for pflogd startup
gateway_enable="YES"            # Enable as LAN gateway (PF)

Activar el enrutamiento en el FreeBSD

# sysctl net.inet.ip.forwarding=1

Crear el archivo con las politicas usando el de ejemplo

# cp /usr/share/examples/pf/pf.conf /etc

Editelo y ajuste las macros de red

# edit /etc/pf.conf

Debe quedar similar a este

# egrep -v '#|^ *$' /etc/pf.conf

ext_if="bge0"
int_if="bge1"
table <spamd-white> persist
set skip on lo
scrub in
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $int_if proto tcp to port ftp -> 127.0.0.1 port 8021
no rdr on $ext_if proto tcp from <spamd-white> to any port smtp
anchor "ftp-proxy/*"
block in
pass out
pass quick on $int_if no state
antispoof quick for { lo $int_if }
pass in on $ext_if proto tcp to ($ext_if) port ssh
pass in log on $ext_if proto tcp to ($ext_if) port smtp
pass out log on $ext_if proto tcp from ($ext_if) to port smtp
pass in on $ext_if inet proto icmp from any to ($ext_if) icmp-type { unreach, redir, timex }

Nota:
Al final de este manual esta el link para descargar un pf.conf muy completo

Cargar el modulo PF

# /etc/rc.d/pf start

Los comandos basicos son:

Verifica el archivo sin aplicar las reglas

# pfctl -nf /etc/pf.conf

Verifica el archivo y muestra como si aplicara las reglas sin hacerlo

# pfctl -nvf /etc/pf.conf

Cargar las reglas

# pfctl -f /etc/pf.conf

Muestra las reglas actuales de filtrado

# pfctl -sr

Muestra las reglas actuales de nat

# pfctl -sn

Recuerde que si hace cambios en /etc/pf.conf debe recargar PF

# pfctl -f /etc/pf.conf

Si quiere aqui estan los archivos de configuracion:
Google Drive

2012/05/15

Nagios

Introduccion:

Instalar Nagios en FreeBSD

Requerimientos:

* Conexion a Internet
* FreeBSD instalado
* Apache22 instalado
* PHP 5.4 instalado
* Leer este manual

El proceso:

Actualizar el arbol de ports

# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile

Instalar el port de Nagios

# cd /usr/ports/net-mgmt/nagios
# make install clean

Hacer que inicie con el sistema editando /etc/rc.conf

# edit /etc/rc.conf

Agregar la linea

nagios_enable="YES"

Instalar los plugins de Nagios

# cd /usr/ports/net-mgmt/nagios-plugins
# make config
[X] NETSNMP SNMP support (check_snmp)
[X] IPv6 support

OK
# make install clean

Instalar los logos para Nagios

# cd /usr/local/www/nagios/images/logos
# wget --no-check-certificate https://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Base-Images/imagepak-base.tar.tar
# tar -xvzf imagepak-base.tar.tar
# mv base/* /usr/local/www/nagios/images/logos/
# rm -rf base
# rm imagepak-base.tar.tar

Otros logos se pueden descargar de aqui
https://www.monitoringexchange.org/inventory/Artwork/Image-Packs

# cd /usr/ports/misc/nagios-base-logos
# make install clean

Nota:
De aqui se pueden bajar mas logos http://exchange.nagios.org/directory/Images-and-Logos
se deben descomprimir en la carpeta /usr/local/www/nagios/images/logos/

Crear el archivo htpasswd.users

# touch /usr/local/etc/nagios/htpasswd.users

Agregar los usuarios y las claves

# htpasswd -c /usr/local/etc/nagios/htpasswd.users nagiosadmin

New password: ******
Re-type new password: ******
Adding password for user nagiosadmin

# htpasswd /usr/local/etc/nagios/htpasswd.users guest
New password: ******
Re-type new password: ******
Adding password for user guest

Agregar las entradas en Apache en el archivo

# edit /usr/local/etc/apache22/httpd.conf

# Modificacion para NAGIOS inicio

<Directory /usr/local/www/nagios>
Order deny,allow
Options -Indexes
Deny from all
Allow from all

php_flag engine on
php_admin_value open_basedir /usr/local/www/nagios/:/var/spool/nagios/

# Autenticacion inicio
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

<Directory /usr/local/www/nagios/cgi-bin>
Options ExecCGI
# Autenticacion inicio
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

ScriptAlias /nagios/cgi-bin/ /usr/local/www/nagios/cgi-bin/
Alias /nagios/ /usr/local/www/nagios/

# Modificacion para NAGIOS fin

Reiniciar Apache para que tome los cambios

# /usr/local/etc/rc.d/apache22 restart

Creamos los archivos a partir de los de ejemplo

# cp /usr/local/etc/nagios/cgi.cfg-sample /usr/local/etc/nagios/cgi.cfg
# cp /usr/local/etc/nagios/resource.cfg-sample /usr/local/etc/nagios/resource.cfg
# cp /usr/local/etc/nagios/nagios.cfg-sample /usr/local/etc/nagios/nagios.cfg
# cp /usr/local/etc/nagios/objects/commands.cfg-sample /usr/local/etc/nagios/objects/commands.cfg
# cp /usr/local/etc/nagios/objects/contacts.cfg-sample /usr/local/etc/nagios/objects/contacts.cfg
# cp /usr/local/etc/nagios/objects/templates.cfg-sample /usr/local/etc/nagios/objects/templates.cfg
# cp /usr/local/etc/nagios/objects/timeperiods.cfg-sample /usr/local/etc/nagios/objects/timeperiods.cfg

Verificar las lineas o ajustarlas

# edit /usr/local/etc/nagios/cgi.cfg

authorized_for_all_services=nagiosadmin,guest
authorized_for_all_hosts=nagiosadmin,guest

Editar el archivo de Nagios

# edit /usr/local/etc/nagios/nagios.cfg

Comentar la linea colocando un # al inicio, queda asi:

#cfg_file=/usr/local/etc/nagios/objects/localhost.cfg

Agregar la linea al archivo de nuestros equipos

cfg_file=/usr/local/etc/nagios/objects/equipment.cfg

Crear el archivo con los equipos de nuestra compañia (al final del manual lo puede descargar)

# edit /usr/local/etc/nagios/objects/equipment.cfg

Editar el archivo de contactos de Nagios

# edit /usr/local/etc/nagios/objects/contacts.cfg

Ajustamos la linea

email       nagios@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Por un email valido

email       micorreo@gmail.com   ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

Nagios requiere un ajuste denominado timezones en php.ini

# edit /usr/local/etc/php.ini

Cambiar la linea

;date.timezone =

Por

date.timezone = America/Bogota

Reiniciar Apache22

# /usr/local/etc/rc.d/apache22 restart

Un listado completo de timezones http://co.php.net/manual/en/timezones.php

Iniciar Nagios

# /usr/local/etc/rc.d/nagios start

Para ver el log
# tail -f /var/spool/nagios/nagios.log

Caputuras de Nagios funcionando :-)

Nagios Tactical Overview


Nagios Map

Notas:

En nuestro archivo /usr/local/etc/nagios/objects/commands.cfg podemos agregar nuevos comandos
Si quiere aqui estan los archivos de configuracion:
Google Drive

2012/05/03

Ubuntu

Introduccion:

Instalar Ubuntu 12.04 LTS AMD64

Requerimientos:

* Conexion a Internet
* Disco de instalacion de Ubuntu
* Leer este tutorial

El proceso:

Iniciar el equipo con el disco de Ubuntu

Install Ubuntu

Continue

* Something else

Continue

/dev/sda

New Partition Table...

Continue

free space

Add...

* Primary

1024

* Beginning

Ext4 journaling file system

/boot

OK

free space

Add...

* Primary

10240

* Beginning

Ext4 journaling file system

/

OK

free space

Add...

* Primary

2048

* Beginning

Swap area

OK

free space

Add...

* Primary

8495

* Beginning

Ext4 journaling file system

/home

OK

Install Now

Bogota

Continue

Spanish  / Spanish

Continue

angel
angel-Desktop
angel
********
********

* Require my password to log in

Continue

Installation is complete. You need to restart the computer in order to use the
new installation.

Restart Now

Actualizar las fuentes

En el terminal ejecutamos:
$ sudo su
*********
# sudo apt-get update

Instalar algun programa

En el terminal ejecutamos:
$ sudo su
*********
# apt-get install apache2

Do you want to continue [Y/n]? Y

Controlar un programa

Apache:
# /etc/init.d/apache2 start|stop|restart|status

VirtualBox (Ubuntu)

Introduccion:

Instrucciones de como crear una maquina virtual para instalar Ubuntu 12.04 LTS correctamente.

Requerimientos:

* Descargar el instalador de VirtualBox https://www.virtualbox.org/wiki/Downloads
* Seguir estos pasos

El proceso:

Oracle VM VirtualBox Manager

New

Continue

Name
Ubuntu_Desktop_AMD64

OS Type
Operating System: Linux
                Version: Ubuntu (64 bit)

Continue

Memory

512MB

Continue

* Start-up Disk
* Create new hard disk

Continue

* VDI (VirtualBox Disk Image)

Continue

* Fixed size

Continue

20.31 GB

Continue

Create

Create

Settings

Network

Adapter 1
* Enable Network Adpater
Attached to NAT

Adapter 2
* Enable Network Adpater
Attached to Internal Network

Adapter3
* Enable Network Adpater
Attached to Internal Network

Adapter 4
* Enable Network Adpater
Attached to Internal Network

OK

Si queremos que el Ubuntu se comporte como un equipo mas y use la tarjeta WiFi del host, cambiamos en VirtualBox las siguientes opciones:
Seleccionamos nuestra maquina virtual "Ubuntu_Desktop_AMD64", luego Settings / Network /
En Adapter 1, cambiamos NAT por Bridged Adapter y en Name: en1: WiFi (AirPort), OK.
Hay que notar que estamos usando en la red LAN un proxy transparente, por esto no hay que colocar ningun otro parametro.

2012/04/23

FreeBSD Updating and Upgrading

Introduccion:

Vamos a sincronizar y/o actualizar las fuentes de FreeBSD (Kernel + World) con csup, con esto podemos tener un FreeBSD con las ultimas actualizacion dentro de RELEASE o para pasar de una version a otra.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet

Chapter 24 Updating and Upgrading FreeBSD
25.7 Rebuilding “world”
25.8 Deleting Obsolete Files, Directories and Libraries

Proceso:

Como root ejecutamos los siguientes comandos y esperamos a que terminen:

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/standard-supfile
# csup -h cvsup16.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/ports-supfile
# csup -h cvsup17.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/doc-supfile

FreeBSD Updating Upgrading
Rebuilding “world”
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html

Nota:
Buen momento para poner sopurte de CUPS en /etc/make.conf

# edit /etc/make.conf

agregar las siguientes lineas:

# 7 Fine Tuning CUPS-Related Ports
# http://www.freebsd.org/doc/en/articles/cups/article.html
#
WITH_CUPS=YES
CUPS_OVERWRITE_BASE=YES
WITHOUT_LPR=YES
#
# Qt 4 can be built with optional support for:
# - Common UNIX Printing System (CUPS)
# - Network Audio System (NAS)
# - Qt style that renders using GTK (QGTKSTYLE)
QT4_OPTIONS= CUPS NAS QGTKSTYLE

En este punto nos encontramos con dos opciones, podemos construir un kernel GENERIC o uno Custom (personalizado) en donde podemos adicionarle o quitarle modulos al kernel. Mire que hay comandos que son comunes para ambos y otros que estan separados en columnas, ejecute segun lo que este compilando.

 1. # cd /usr/src
 2. # make buildworld

Building a
GENERIC Kernel    or     Custom Kernel (comandos extras o diferentes)  
                            
                                         # cd /usr/src/sys/amd64/conf
                                         # mkdir /root/kernels
                                         # cp GENERIC /root/kernels/MYKERNEL
                                         # ln -s /root/kernels/MYKERNEL
                                         # cd /usr/src
                                         # edit /root/kernels/MYKERNEL
                                             cambie la linea:
                                             ident           GENERIC
                                             por:
                                             ident           MYKERNEL
                                             (agrege sus opciones, ejemplo: options QUOTA)

 3. # make buildkernel    # make buildkernel KERNCONF=MYKERNEL

Installing a
GENERIC Kernel    or      Custom Kernel (comandos extras o diferentes)  

 4. # make installkernel   # make installkernel KERNCONF=MYKERNEL

 5. # shutdown -r now  <- Opcional, si no reinicia continue en el paso 6.

     After installkernel finishes successfully, you should boot in single user mode
     (i.e., using boot -s from the loader prompt). Then run:

     # fsck -p
     # mount -u /
     # mount -a -t ufs
     # swapon -a
     # adjkerntz -i

 6. # mergemaster -p
          How should I deal with this? [Leave it for later]
          (i upgrade lo recomendado, d mantener archivo viejito si le hice cambios)
          ...
          *** Comparison complete
          Do you wish to delete what is left of /var/tmp/temproot? [no] (enter)
          How should I deal with this? [Leave it for later] (enter)
          (i upgrade lo recomendado, d mantener archivo viejito si le hice cambios)

 7. # make installworld
 8. # mergemaster
        How should I deal with this? [Use the existing /var/tmp/temproot] (enter)
        ...
        *** Comparison complete
        Do you wish to delete what is left of /var/tmp/temproot? [no] (enter)
        ...
        *** You installed a new aliases file, so make sure that you run
        Would you like to run it now? y or n [n] (enter)

 9. # reboot

25.8 Deleting Obsolete Files, Directories and Libraries
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/make-delete-old.html

10. # cd /usr/src
11. # make check-old
12. # yes|make delete-old
13. # make delete-old-libs

---------------------------------------
Si algo sale mal y el nuevo kernel no funciona bien, puedo regresar al anterior...
Al iniciar el equipo nos muestra el listado de opciones de inicio de FreeBSD

6. Escape to loader prompt
Type '?' for a list of commands, 'help' for more detailed help.
OK

(escribimos)
unload kernel (enter)
(escribimos)
boot /boot/kernel.old/kernel (enter)

Luego podemos renombrar el kernel problematico y renombrar el kernel anterior que funciona (kernel.old)
# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.old /boot/kernel
---------------------------------------

Instalar nuestro primer port "portmaster"

Es un programa para mantener todos los ports actualizados

# whereis portmaster
portmaster: /usr/ports/ports-mgmt/portmaster
# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Suele pasar que luego de instalar algun port, al ejecutar el comando, nos muestre

"Command not found."

Para que detecte el nuevo port instalado ejecutamos:

# rehash

Comandos basicos de portmaster:

# portmaster -L <- Lista los ports y las actualizaciones disponibles
# portmaster -a  <- Actualiza todos los ports instalados
# portmaster -af <- Actualiza y recompila todos los ports instalados
# portmaster -a -x nombreport <- Actualiza todos los port excepto nombreport, para agregar otros ports -x nombreport -x nombreport2

Una opcion muy util es "-d  always clean distfiles" con eso simpre mantendra nuestro directorio distfiles con los fuentes de las versiones de los ports instalados y borrara los fuentes de ports viejos. Lo contrario (mantener los fuentes de los ports viejos y nuevos) seria  "-D  no cleaning of distfiles".

Nota:

En el comando

# csup -h cvsup15.us.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/standard-supfile

Estamos usando el archivo standard-supfile que nos mantiene en la misma version, si queremos cambiar a otra, por ejemplo de 8.2 RELEASE a 8.3 RELEASE, debemos compiar ese archivo y modificar la linea "tag=RELENG_8_2", se haria asi:

# cp /usr/share/examples/cvsup/ports-supfile /root
# edit /root/ports-supfile

Cambiar la linea:

*default release=cvs tag=RELENG_8_2

por

*default release=cvs tag=RELENG_8_3

Salir del editor y guardar los cambios (en edit, con "Esc" main menu, "a" leave editor, "a" save changes)

Ejecutar el comando usando el nuevo archivo
# csup -h cvsup15.us.FreeBSD.org -g -L 2 /root/ports-supfile

Para ver el listado de servidores desde donde podemos descargar las fuentes entre a:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html#CVSUP-MIRRORS

Para mantenernos en FreeBSD 8.2 RELEASE usamos el tag=RELENG_8_2
Para cambiarnos a FreeBSD 8.3 usariamos el tag=RELENG_8_3

Para ver el listado de tags entre a:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvs-tags.html

Cuando se hace un cambio entre versiones de FreeBSD (por ejemplo de 8.2 a 8.3) es necesario recompilar e instalar todos los ports que ya teniamos instalados, para hacer esto usamos el comando:

# portmaster -af

Ejemplos utiles:

Buscar informacion de varios ports
# pkg_info | egrep 'hal|cdrtools|dvd\+rw-tools'
cdrtools-3.00_2     CD/DVD/BluRay and ISO-9660 image creation and extraction to
dvd+rw-tools-7.1    DVD burning software
hal-0.5.14_20       Hardware Abstraction Layer for simplifying device access

Reinstalar un port
# portmaster hal-0.5.14_20

Limpiar los fuentes descargados en /usr/ports/distfiles de ports que ya no tenemos instalados
# portmaster -y --clean-distfiles