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