miércoles, 18 de julio de 2012

Windows 7: Instalar SUA 3.3.5

Buenos dias.

Bien, tambien le meto mano a los equipos windows, ya que la mayoria de aqui lo usan.

El software de instituciones como imss, sat, etc en Mexico a veces estan bien mal hechos, no tiene documentos claros, usan versiones de librerias ya obsoletas ye llenas de bugs.

Ayer me comento alguien que le acabamos de entregar la laptop con windows 7, que necesita poner una aplicacion del SAT pero dice la doc que solo en Windows XP se ejecuta... como ven aun no se actualizan y es una institucion que maneja todo lo relacionado a IVA, lo que mueve a el pais.

A veces uno tiene que quebrarse el cerebro para ver como instalar ciertas actualizaciones, eso si si tratan de hacerlas continuamente para adaptarse a las reglas de nuestro gobierno que bueno.

He tenido dias negros donde mi cabeza duele por no poder llevar a cabo alguna actualizacion, tal es el caso del sua/idse.

Ahora me toco un caso con el sua, me di cuenta que uno de mis clientes, estaba ejecutando VirtualPC en su windows 7, y le pregunto para que lo usaba?

Me comento que una persona que le instalo el sistema contpaq trato de instalar SUA en windows 7 y no logro hacerlo trabajar.

Me llamo la atencion el caso, aca donde trabajo usamos el sua, pero aun no llegamos a migrar las maquinas que lo usan a windows 7(ya estamos migrando) y como mencione a veces me he visto en dias negros.

Entonces rapidamente me intereso el caso y en una chance prendi mi maquina virtual de windows 7 y empece a leer en la pagina de imss-sua info al respecto, claro que ellos nomas dicen, para win7 bajen este y listo, nos dan la version 3.3.5 la ultima, pero no funciona.

Ya metido en Internet algo por ahi comento que paso por un caso parecido y tuvo que bajar la instalacion por primera vez.

La version 3.3.5 mide +/- 4MB, la version por 1ra vez +/-50MB(3.3.2)  si hay diferencias correcto?

Entonces el comento que instalo 1ro la version de 50MB, la cual se va a el folder:

c:\cobranza\sua

De ahi metio la 3.3.5 y esta ultima se va a el folder  c:\sua.

Hasta eso, no se quien esta a cargo de este programa pero que basura de decisiones en cada version apuntan la instalacion dondes se les incha la oreja.

c:\, c"\Prog..", c:\cobranza.

Viva Mexico!!!

El truco fue que una vez instalada la 3.3.2 en c:\cobranza\, borre el ejecutable, y cuando la version 3.3.5 me pregunta donde deseo hacer la instalacion, le apunto ese mismo folder para que remplace.

Ya termina y no debemos ejecutar en windows 7 que ya nos acostumbraron a ejecutar todo como "Administrator" si no, normalito.

Y listo, ya solo validen que se la version 3.3.5:

Figura 1: SUA 3.3.5 en Windows 7.
Ya solo le pedi que ejecutara el calculo en su maquina virtual con XP  y luego lo hiciera con windows 7 y compara los numeros...

Si conincidio, listo.

Consejo, me ha tocado ver casos como este donde muchos por no meterse a los problemas y atacarlos bien, optan por irse por el camino facil:

reinstalare el OS, office, o cambiar el aparato.

Si en realidad les gusta esta labor, ensuciece las manos, investiguen, la Internet es un paraiso de informacion.

Saludos!!!

jueves, 28 de junio de 2012

Centos 5: PHP5 compilar modulo firebird

Ahora me toca ver como crear el modulo para accesar a Firebird en Linux con PHP, por default este modulo no viene en la instalacion generica o sea que no podemos instalar php-firebird o php-interbase.

En mi caso estamos trabajando con una maquina virtual, por lo tanto mi politica es que los servidores de produccion solo debe tener lo que necesita nada mas nada menos.

La version de Centos esta algo atrasada, por ello yo uso la version de ius-repo, en este momento estoy con la version 5.3.14.

Para ello yo tengo una vm con Xen que uso para compilar paquetes si llegara a tener que hacerlo como este caso, la version es para 64 bits.

Antes de yo llegar a compilar los modulos debo asegurar que el sistema de compilacion tenga lo necesario para llevar a cabo esto, asi que para firebird necesito esto:

firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-devel.i386
firebird-devel.x86_64
firebird-filesystem.x86_64

Para php:
php53u.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-devel.x86_64

Para compilacion y rpms:
rpm-build
gcc.x86_64
gcc-c++.x86_64
libgcc.i386
libgcc.x86_64

Necesito MySQL tambien ya que hay cierta prioridad de ejecucion:

mysql51.x86_64
mysql51-devel.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
mysqlclient15-devel.x86_64
Para probar:
httpd

Creo que es todo, lo que sigue es bajar el codigo fuente de la version que deseamos la cual la podemos obtener del mismo sitio de ius-repo:


Yo tengo un folder en el root donde almaceno todo los codigos fuente de mis repos:

/root/rpm/

Una vez obtenido el repo debemos instalarlo ya que viene en formato rpm, para esto hacemos lo siguiente:

rpm -ivh php53u-5.3.14-1.ius.el5.src.rpm

De ahi se instala el codigo fuente en:

/usr/src/redhat/SOURCES/

Ahi dentro tenemos esto:

-rw-rw-r--  1 root root          159 May  9  2011 macros.php
-rw-rw-r--  1 root root          650 May  9  2011 php-4.3.11-shutdown.patch
-rw-rw-r--  1 root root          818 May  9  2011 php-5.0.4-dlopen.patch
-rw-rw-r--  1 root root          905 May  9  2011 php-5.0.4-tests-wddx.patch
-rw-rw-r--  1 root root          416 May  9  2011 php-5.2.0-includedir.patch
-rw-rw-r--  1 root root          607 May  9  2011 php-5.2.4-embed.patch
-rw-rw-r--  1 root root          682 May  9  2011 php-5.2.4-norpath.patch
-rw-rw-r--  1 root root        34930 May  9  2011 php-5.3.0-easter.patch
-rw-rw-r--  1 root root          637 May  9  2011 php-5.3.0-install.patch
-rw-rw-r--  1 root root          759 May  9  2011 php-5.3.0-oci8-lib64.patch
-rw-rw-r--  1 root root          937 May  9  2011 php-5.3.0-phpize64.patch
-rw-rw-r--  1 root root          727 May  9  2011 php-5.3.0-recode.patch
-rw-rw-rw-  1 root root         7144 Jun 21 15:18 php-5.3.14-aconf259.patch
-rw-rw-rw-  1 root root     14924167 Jun 14 09:10 php-5.3.14.tar.gz
-rw-rw-r--  1 root root        16390 May  9  2011 php-5.3.1-systzdata-v7.patch
-rw-rw-r--  1 root root         4409 May  9  2011 php-5.3.3-gnusrc.patch
-rw-rw-r--  1 root root         2114 May  9  2011 php-5.3.3-macropen.patch
-rw-rw-r--  1 root root        69399 May  9  2011 php53-ius.ini
-rw-rw-r--  1 root root          675 May  9  2011 php.conf
-rw-rw-r--  1 root root         1697 May  9  2011 php-fpm.conf
-rw-rw-r--  1 root root         1424 May  9  2011 php-fpm.init
-rw-rw-r--  1 root root          210 May  9  2011 php-fpm.logrotate
-rw-rw-r--  1 root root         9484 May  9  2011 php-fpm-www.conf

Ahora viene desempacar el codigo fuente:

tar -xzf  php-5.3.14.tar.gz

Ya tenemos le folder nos adentramos ahi:

cd php-5.3.14

Los modulos estan en el folder "ext":

cd ext

Tenemos lo siguiente:

bcmath      ext_skel            intl      openssl       phar        sockets    xml
bz2         ext_skel_win32.php  json      pcntl         posix       spl        xmlreader
calendar    fileinfo            ldap      pcre          pspell      sqlite     xmlrpc
com_dotnet  filter              libxml    pdo           readline    sqlite3    xmlwriter
ctype       ftp                 mbstring  pdo_dblib     recode      standard   xsl
curl        gd                  mcrypt    pdo_firebird  reflection  sybase_ct  zip
date        gettext             mssql     pdo_mysql     session     sysvmsg    zlib
dba         gmp                 mysql     pdo_oci       shmop       sysvsem
dom         hash                mysqli    pdo_odbc      simplexml   sysvshm
enchant     iconv               mysqlnd   pdo_pgsql     skeleton    tidy
ereg        imap                oci8      pdo_sqlite    snmp        tokenizer
exif        interbase           odbc      pgsql         soap        wddx

En mi caso mi interesa firebird, nos metemos a ese folder:

cd pdo_firebird

Empieza la fiesta, ejecutamos el comando phpize:

phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

De ahi configure:

./configure (sale un choricero...)
checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking for cc option to accept ANSI C... none needed
checking how to run the C preprocessor... cc -E
...
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged

Por ultimo make:

make
/bin/sh /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/libtool --mode=compile cc -I/usr/include/php/ext -I. -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird -DPHP_ATOM_INC -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/include -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/main -I/usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/pdo_firebird.c -o pdo_firebird.lo
mkdir .libs
...
cp ./.libs/pdo_firebird.so /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules/pdo_firebird.so
cp ./.libs/pdo_firebird.lai /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules/pdo_firebird.la
PATH="$PATH:/sbin" ldconfig -n /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/src/redhat/SOURCES/php-5.3.14/ext/pdo_firebird/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Listo, nuestro modulo esta en el folder modules:

ls modules/
pdo_firebird.la  pdo_firebird.so

Todos los modulos que queramos debemos guardarlos en mi caso como es una equipo de 64 bits, van en:

/usr/lib64/php/modules/

Ahi lo copeamos:

cp modules/pdo_firebird.so /usr/lib64/php/modules/

Ahora como estamos compilando modulos y no estamos usando el ya compilado php-firebird, debemos decirle a php que cargue los modulos generados, para ello debemos abrir el archivo php.ini y agregarlos,  al abrir el archivo existe una seccion para esto, +/- en la linea 810 agregamos esto debajo del parametro:

user_dir =

Esto:

;Modulos Personales
extension=pdo_firebird.so

Salvamos el archivo.

Ahora deseo aclarar que en mi caso requiero tambien el modulo mysql, entonces al final del proceso yo necesito esto:

extension=pdo.so
extension=interbase.so
extension=pdo_firebird.so
extension=pdo_mysql.so
extension=mysql.so
extension=mysqli.so

Compilo uno a uno, cuando lleguen a el modulo mysql, deben ejecutar el configure asi:

./configure --with-libdir=lib64

Llevamos todo lo compilado a el folder:

/usr/lib64/php/modules/

Ahora si, todo en su lugar reiniciamos apache:

service httpd restart

Revisamos el log de error de apache para ver si no hay problemas:

[Thu Jun 28 01:10:29 2012] [notice] caught SIGTERM, shutting down
[Thu Jun 28 01:10:29 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 28 01:10:29 2012] [notice] Digest: generating secret for digest authentication ...
[Thu Jun 28 01:10:29 2012] [notice] Digest: done
[Thu Jun 28 01:10:29 2012] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations

No veo nada, entonces ahora viene ejecutar el comando phpinfo() en un archivo php:

phpinfo();
?>

Lo ejecutamos en el navegador y checan si todos los modulos aparecen, en mi casi si.

Listo hemos terminado.

Solo les debo recordar que segun los modulos que necesiten deben instalar las librerias que requieran sus paquetes y lo mismo sucede en los servidores de produccion donde los vayan a ejecutar.

Por ejemplo mi servidor tiene estos paquetes:

php53u.x86_64
php53u-cli.x86_64
php53u-common.x86_64
php53u-ldap.x86_64
php53u-mbstring.x86_64
php53u-mcrypt.x86_64
mysql51.x86_64
mysql51-libs.x86_64
mysql51-server.x86_64
mysqlclient15.x86_64
firebird.x86_64
firebird-classic.x86_64
firebird-filesystem.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64
firebird-libfbclient.i386
firebird-libfbclient.x86_64
firebird-libfbembed.x86_64

Saludos!!!

domingo, 27 de mayo de 2012

pfsense 2: Squid Windows Update cache.log errores

La documentacion de squid nos habla que hay manera de cachear los updates de windows con squid, viendo el lado practico es bueno para una empresa de 20+ estaciones, es un ahorro de ancho de banda impresionante.

Me vi en la tarea de probar lo que los expertos de squid sugieren, este es el link:


Los parametros que mencionan son estos:

# Add one of these lines for each of the websites you want to cache.
refresh_pattern -i microsoft.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
refresh_pattern -i windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
refresh_pattern -i my.windowsupdate.website.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims

# DONT MODIFY THESE LINES ESTOS YA LOS ESTOY USANDO SIEMPRE
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
 
Ya anteriomente habia hablado del parametro: refresh_pattern.
 
Estuve probando con algunas PC's, si funciona solo que empece a recibir ciertos errores 
en el log del cache:

2012/05/27 11:18:39| sslWriteServer: FD 27: write failure: (1) Operation not permitted.
2012/05/27 11:24:02| sslWriteServer: FD 36: write failure: (1) Operation not permitted.
2012/05/27 11:28:56| sslWriteServer: FD 37: write failure: (1) Operation not permitted.
2012/05/27 11:30:12| sslWriteServer: FD 27: write failure: (1) Operation not permitted.
2012/05/27 11:41:13| sslReadServer: FD 25: read failure: (1) Operation not permitted
sslReadServer: FD 25: read failure: (1) Operation not permitted 
2012/05/27 10:47:44| squidaio_queue_request: WARNING - Queue congestion

Quiero agregar que mi disco duro es uno muy viejo, ya que estoy probando estos parametros,
pero quiero pensar que el problema es mi disco duro, voy a tener que probar otro mas
nuevo y ver si los errores siguen, ya que de repente mi navegacion se pone lenta cuando
estoy actualizando y probando la bajada de updates.

Lo que sigue es cambiar disco y ver si doy con el problema, saludos!!!

viernes, 25 de mayo de 2012

pfsense 2: squid y contenido dinamico parte 2

Hable ya hacerca de como esta configurado squid para manejar el contenido dinamico, bien aqui les voy a explicar como yo hice pruebas y si alguien por ahi tiene alguna aportacion seria bien recibida.

Lo que deseo es mostrar como la configuracion normal de squid no tiene sentido ya usarla y es mejor moverse a la nueva forma, que como dije los desarrolladores no hay querido dejar el archivo listo, creo que en la rama 3.x ya la trae pero la 2.x no.

Me refiero a estos parametros:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

En mi opinion personal ya no conviene tenerlos, recordar que en definicion estan bloqueando cachear las paginas dinamicas.

Pruebas

Mi prueba es sencilla, lo que hago es lo siguiente:

Uso 2 navegadores: Firefox/Iexplore.
Pruebo accesar las siguientes paginas:
  • osnews.com
  • noticiasmvs.com
    msn.com
    yahoo.com
    acdc.com
    informationweek.com
    frontera.info 
Son paginas que yo regularmente visito, en un sistema en produccion hay mas, estas las escogi yo, con cada navegador accese la pagina 2 veces, pero lo hacia 1ro con uno luego con otro algo asi:

firefox/iexplore terminaba y corria el ccleaner para limpiar el cache de ambos, todos los navegadores tienen su propio cache, si no lo hacen la prueba no funciona, una vez limpiado el cache de los navegadores, volvia a repetir la prueba.

En cada acceso a cada pagina me interesaba saber cuantos links me retornaba cada sitio, para esto una vez cargada una pagina completa, en la consola ejecutaba lo siguiente:

cat log/access.log | wc -l

Esto leia el log de squid y contaba las lineas, asi podria darme una idea de todo lo que cada sitio me daba.

Una vez terminada la 1ra configuracion, sacaba mis reportes del cache con: srg, free-sa.

Una vez obtenidos mis reportes, cambiaba la configuracion de squid, borraba el cache de squid y lo volvia a crear, vaciaba los logs de squid, y reiniciaba squid para empezar de 0.

Y esto hasta terminar de probar mis 3 configuraciones que fueron estas:

Default:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Sugerida por la doc de squid:

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0 20% 4320
 
Sugerida mas extras:
 
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern -i \.index.(html|htm)$ 1440 90% 40320
refresh_pattern -i \.(html|htm|css|js)$ 1440 90% 40320
refresh_pattern -i \.(gif|png|jpg|jpeg|ico|bmp)$ 260000 90% 260009
refresh_pattern . 0 20% 4320
 
Como podran son 3 corridas en total.

Resultados

Tablas con los contadores de las lineas en cada corrida:

Figura 1: Lineas de corrida con parametros default

Figura 2: Parametros sugeridos.
Figura 3: Parametros sugeridas + extras.
Como podran ver no hay mucha discrepancia entre los 3 parametros, ahora viene ver los reportes de desempeño de squid.


Reporte SRG

Voy solo a mostrar la 1er pagina de cada reporte ya que en todas muestra los totales:

Figura 4: Srg de los parametros default.
Figura 5: Srg con parametros sugeridos.
Figura 6: Srg con parametros sugeridos + extras.
Aqui ya podran darse cuenta que tanto los parametros nuevos muestran mayor numero de HITS y el que tiene parametros extras se lleva a el 2do por minima diferencia.

Ya tenemos que cualquiera de los 2 es mejor que el parametro default.

Default: 27.29% HIT 72.71% MISS
Sugerida: 27.79% HIT 72.21 MISS
Sugerida+extras: 28.92% HIT  71.08% MISS
Ahora viene el reporte que nos da free-sa.

Reportes Free-SA.

Figura 7: Free-sa parametros default.
Figura 8: Free-sa parametros sugeridos.
Figura 9: Free-sa parametros sugeridas+extras.
Aqui volvemos a corroborar que tanto los nuevos parametros siguen arriba de la configuracion default.

Si observan los 3 reportes de free-sa, figura 7, 8 y 9, existe solo en la figura 7 que la de los parametros default aparece esto:

Internal Server Error 6 veces.

O sea que tuvo problemas con el servidor remoto 6 veces, los otros 2 no tuvieron este problema.

Resumen

Recomiendo hacer uso de los nuevos parametros, pero solo recordarles que con pfsense no hay manera de comentar unos y agregar los otros, se tiene que configurar el archivo a mano, ya por ahi lo he expuesto como, pero tambien antes de hacer algo, hagan sus propias pruebas, si tienen mejoria y no afecta su desempeño, tomen su decision y adelante, saludos!!!



jueves, 24 de mayo de 2012

Pfsense 2: Squid y contenido dinamico.

He estado trabajando sobre este tema con squid, la configuración que trae squid-cache por default viene con un parametro que desde que inicio squid lo ha traido que este:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Segun los expertos esta 2 lineas fueron hechas para no permitir que ninguna pagina con contenido dinamico(Dynamic Content) fuera cacheada por squid por seguridad, ya que en aquellos años no habia tantas y la mayoria eran scripts cgi-bin.

Hoy las cosas son distintas y se puede decir que el 99% de las paginas son dinamicas, el equipo de squid hizo cambios, pero repito aun la configuracion base trae esos 2 parametros.

Si los revisan ahi van a estar, googleando un poco existe una pagina de squid que habla al respecto:


Ahi dice que los parametros nuevos son estos:

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0 20% 4320
 
Pero tambien dice que si vamos a usar estos parametros borremos los parametros viejos
o sea:
 
acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Yo he trabajado un poco sobre estos, ya que el parametro refresh_pattern tiene una sintaxis:

 refresh_pattern [-i] regexp min percent max [options]

Se puede llevar a otros niveles, vamos hacer unos ejercisios para ver si hay ventaja, lo que puedo decirlos que al menos en los que he hecho, ha habido un alguna ventaja.

Una desventaja es que para poder trabajar este parametro es necesario manipular la configuracion desde la consola, ya se los he mostrado como, si hacen las pruebas como yo la consola sera su aliada durante ese tiempo.

El GUI tiene sus limitantes y este es uno de ellos.

Saludos!!!
 

lunes, 14 de mayo de 2012

pfsense 2: como borrar y crear el cache de squid?

Vamos a ensuciarnos las manos, estoy preparando mi servidor de prueba para probar ciertos parametros referentes a el cache de squid, entonces, necesito borrar el cache y volver a crearlo, ya que si deseo que mis pruebas sean validas esto es necesario.

No quiero hacer mis corridas con cache usado, prefiero cada que inicie la corrida borrar toda mi cache, existen varios metodos voy hacer el mas crudo de todos creo yo.

Los pasos son simples nada del otro mundo, lo unico necesario es la consola, por el GUI imposible, repito no hay nada aun que se iguale a el poder de la consola.

Ya estando en ella, hasta un script podemos hacer y esos se los dejo de tarea una vez terminado este pedazo de mi blog.

Pasos a seguir:

1; Prefiero que nadie este conectado a el squid.
2; Entramos a la consola.
3; Nos vamos a la ruta donde se localiza el folder del cache, que en mi caso es: /var/squid

cd /var/squid
4; Apagamos squid:

/usr/local/etc/rc.d/squid.sh stop

5; Validamos que ya no este abierto el puerto, de lo contrario si aun sigue algun proceso activo, importante que no haya nada de squid ejecutandose:

sockstat -4 | grep 3128

NOTA:No debe devolvernos nada, de lo contrario buscar los procesos y matarlos.

6; Borramos el folder del cache

rm -rf cache/
NOTA: Si tienen miedo y tienen espacio en su disco: mv cache cacheold
si algo sale mal, retornamos el cache: mv cacheold cache

7; Creamos el folder de nuevo.

mkdir cache

8; Cambiamos permisos:

chown proxy:proxy  cache/

 9; Creamos directorios de nuevo.

squid -zX

NOTA: la X es para ver todo lo que hace, si no desean verlo la quitan del comando. Este comando puede tardar segun el tamaño del cache en su configuracion y la velocidad de su maquina.

10; Iniciamos de nuevo squid:

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

11; Listo.

Recordar que esto lo tienen que hacer lo mas rapido posible de lo contrario squid puede iniciar sin la intervencion de uno ya que recordar que existe un monitor de squid que lo arranca si no esta en ejecucion el servicio, si esto pasa deben iniciar desde el paso 1, asi que practiquen y hagan su batch.

Por que a veces tenemos hacer esto?

Ahi veces que nuestro cache necesita una purga general, esta es una buena opcion para iniciar con un cache limpio sin nada de datos e iniciar de nuevo.

Saludos!!!

lunes, 7 de mayo de 2012

Pfsense 2: Reportes de desempeño usuarios y cache

He estado analizando distintos reportes para squid, he hablado anteriormente de sarg, pero a veces es necesario tambien ver el desempeño del cache, a veces uno se pregunta si squid esta usando o no el cache.

Una forma muy sencilla es leer nuestro log(access.log) y buscar los parametros con la palabra:

_HIT

Cuando esto aparece significa que squid esta haciendo uso de su cache, es preferible que aparezca:

TCP_MEM_HIT

Pero a veces no es posible, este valor indica que encontro el objeto en la memoria asi que nos ahorramos la ida a disco y como sabemos es mas rapido el acceso a memoria que a disco.

Con lo anterior ya  podriamos corroborar que al encontrar palabras con _HIT significa que nuestro cache esta operando, muchos sitios bloquean esto y mas los de contenido dinamico para ello existen otras tecnicas, ahorita estamos enfocados en la configuracion basica de squid.

Mi blog ha sido generalmente basado en la version nano, pero para poder yo sacar datos de mi cache necesite hacer la instalacion en disco asi que ya lo tengo, tuve problemas con mi maquina de pruebas y mi disco nuevos, tanto EIDE y Sata, por alguna razon pFsense tiene problemas en arrancar con mi placa y estos discos, use uno de 20GB y sin problemas, luego les platico.

Regresando a el tema, me vi en la tarea de buscar otros reportes distintos a Sarg y encontre varios, algunos no se lograron instalar ya que dependen de perl 5.10 y algunos ya habia instalado la v 5.12 asi que no quise romper las cosas.

El sitio de squid tiene una pagina donde apunta a varios reportes que uno puede acceder, algunos se ejecutan hasta en Winblows, este es el enlace:

Squid-Reportes-de-Log

De ahi tome algunos y ademas me fui a los ports de FreeBSD a buscar que mas habia, me encontre con algunos interesantes ya que muestran algo que muchos buscamos, como se esta usando mi cache.

Vamos empezando por srg:

Sitio: http://www.crc.net.nz/software/srg.php

Me agrado su reporte limpio e informativo, nos genera una pagina html y podemos agregar javascript para poder sortear los resultados.

Al parecer no tiene dependencias.

Instalacion:

pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/srg-1.1_1.tbz

Una vez instalado recordar ejecutar rehash en la consola.

Parametros:

root# srg
usage: srg [options]
Options:
-a

                  Perform analysis only on requests from the
                              specified IP address.
-C               Location of the srg config file.
-d                            Enable debugging output
-E             If the username does not exist, look up the
                              username using info in this file
-f                  The file to process
-g                     Group analysis by specified criteria
                               A=address, S=subnet, U=username
-H                            Perform DNS lookups on IP addresses to
                              be displayed in reports.
--help -h                     Display this help
-m                      Specify maximum number of days to keep a
                              report
-M                            Output a summary report suitable for
                              emailing.
-n                   Specify the netmask to be used when grouping
                              by subnet, ie. 255.255.255.0
-o                 Output Directory
-O                       URL where reports will be located
-r                            Enable javascript column sorting in output
-R                            Show transfer rate in reports
-s /   Perform analysis only on requests from the
                              specified subnet.
-S                            Show time value in reports
-t '-'            Time period to perform analysis in. Records
                              that are not inside this period will not be
                              analysed. i.e. '31/10/2003-1/11/2003'
-u                  Perform analysis only on requests from the
                              specified username.
-v                            Verbose mode. Print relevant messages.
-V                              Print Version and exit.


Como me genera un reporte en formato html, voy a crearle un folder dentro mi servidor web en este caso ya saben cual usa pfsense, asi que creo mi folder:

root# mkdir /usr/local/www/srg
Ahora me voy a ese directorio:
cd /usr/local/www/srg

Y ejecuto mi comando con estos parametros:

srg -r -R -S -o ./ -f /var/squid/logs/access.log

-r = javascript para poder sortear la salida.
-R=mostrar valores de transferencias.
-S=Mostrar valores de tiempo.
-o=Donde deseo guardar el reporte final.

En mi folder creado voy a tener esto:

drwxr-xr-x  444 root  wheel  20992 May  7 21:42 2012May07-2012May07
-rw-r--r--    1 root  wheel    947 May  7 21:42 index.html
-rw-r--r--    1 root  wheel   2877 May  7 21:42 srg.js
-rw-r--r--    1 root  wheel   1329 May  7 21:42 style.css

Apuntamos nuestro navegador a este folder y tenemos esto:

Figura 1: Pagina Inicial de srg.
 Cuando le damos click a el enlace mostrado vemos lo siguiente:

Figura 2: Detalle del Reporte.
Como podran observar en la figura 2, se pueden observar las paginas y tenemos ademas varias columnas que nos dan info de como ha trabajado squid, en mi caso deseo saber el desempeño de mi cache, ademas le agregamos un parametro que nos permite sortear en base a la columna deseada, ejemplo al darle click a la columna de HIT, me sorteara el reporte de mayor HIT a menor HIT:

Figura 3: Reporte Sorteado por columna HIT.
Si se van a el final del reporte pueden observar los datos acumulados, ver siguiente figura:

Figura 4: Sumatoria del Reporte.
Como podran ver dice que nuestro cache nos a dado 4.61%, su reporte puede ser distinto, yo he tenido poco trafico en el sistema de produccion voy a obtener resultados mayores.

Este reporte se puede ejecutar con un batch pero mucho antes de rotar el log no se les olvide, no perderle el ojo a este pequeño pero interesante programa.

Free-SA: Este al igual que el anterior nos genera el reporte en HTML para poder verlo atraves de nuestro navegador, tambien le creamos un folder con el mismo nombre en /usr/local/www y ademas este si tiene un archivo de configuracion.

Sitio:
http://free-sa.sourceforge.net/

Instalacion:
pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/free-sa-1.6.2.tbz

configuracion: /usr/local/etc/free-sa/

Copeamos el free-sa.conf.sample a free-sa.conf

Y lo ponemos asi:

#########
# FILES #
#########
log="/var/squid/logs/access.log"
#usertab="/usr/local/etc/free-sa/users"
#downloads="/usr/local/etc/free-sa/downloads.sample"
#local_filter=""
#global_filter=""


###############
# DIRECTORIES #
###############
targetdir="/usr/local/www/free-sa"
tmpdir="/var/squid/cache/free-sa"


#####################
# REPORTS SELECTION #
#####################
ts="true"
paf="true"
saf="true"
pdn="true"
sdn="true"
cct="true"
pst="true"
dld="false"
#fullurl="true"
#users="true"
#email=""

##################
# REPORTS LIMITS #
##################
#paf_limit="50"
#saf_limit="50"
#pdn_limit="50"
#sdn_limit="50"
#cct_limit="50"
#pst_limit="50"
#dld_limit="50"
#lcf_limit="50"
#url_limit="50"
#ts_limit="0"
#dld_min="0"
#rtr_timeout="5000"


####################
# OTHER PARAMETERS #
####################
name="free-sa.conf"
#logformat="0"
#skip_errors="false"
fulltraffic="yes""
#inameuser="true"
#user_unescape="false"
indicators="true"
#overwrite="0"
resolveip="false"
showinfo="true"
#site=""
#logo=""
#locale=""
#rotate=""
#divisor="b"
#tz_shift="0"


Lo pueden modificar segun sus parametros. Una vez hecho esto solo ejecutamos el comando en la consola:

root# free-sa

Y ya tendremos nuestros datos en el folder indicado, vamos a verlos.

Figura 5: Paginal inicial de Free-SA.
Le damos click para ver el detalle:

Figura 6: Detalle de Reporte.
Pueden ver todos, pero me voy a ir sobre el que dice "Proxy efficiency" y nos da esto:

Figura 7: Desempeño de Squid.
En la figura 7 marque con azul cuantas peticiones se han servidor y con rojo cuantas han sido de cache, es bajo el valor en el sistema de produccion debe ser mayor.

Datos interesantes para tomar el pulso de nuestro squid proxy, tambien se puede poner un batch y ejecutarlo diariamente, recordar que mientras mas informacion se tiene mas podemos saber si las cosas andan bien o necesitamos ajustes.

Ahora sigue: squidview.
Sitio: http://www.rillion.net/squidview/
Instalacion:
pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/squidview-0.73.tbz
rehash
squidview
(Este ultimo paso me lo comento kaone blue que se dio cuenta, gracias)

El ultimo comando nos genera el .squidview en el usuario que lo ejecuta en este caso root.

Este programa nos permite ver nuestro log(access.log) en tiempo real, pero como viene de FreeBSD necesitamos hacer unos ajustes a la configuracion, una vez instalado les aparece en el folder del root un directorio escondido llamado: .squiview.

Dentro de ese folder les aparece esto:

lrwxr-xr-x  1 root  wheel  32 May  7 13:52 HOWTO -> /usr/local/share/squidview/HOWTO
lrwxr-xr-x  1 root  wheel  26 May  7 23:03 log1 -> /var/squid/logs/access.log
lrwxr-xr-x  1 root  wheel   4 May  7 13:52 log2 -> log1
lrwxr-xr-x  1 root  wheel   4 May  7 13:52 log3 -> log1

La linea que marque ya esta reparada, ya que por default esta apuntando a el access.log donde lo guarda FreeBSD, en mi caso yo lo tengo en la ruta marcada.
Si tratan de ejecutar el comando no va  sacar nada de informacion por lo anterior, entonces necesitamos hacer los ajustes que es eliminar ese enlace y crearlo con la ruta correcta:

root# unlink log1

ln -s /var/squid/logs/access.log /root/.squidview/log1

Hora de ejecucion, solo ejecutamos squidview y nos aparece ya una foto de los sitios y quien los tiene abiertos:

Figura 8: SquidView reporte inicial.
Ahora si presionan la h=help=ayuda les mostrara la lista de comandos que porporciona, a mi me gusta el que le pedimos que lea N cantidad de lineas desde la parte de abajo o sea el final del archivo y que nos de una sumatoria de cada usuario encontrado en tiempo real, observen.

Presionamos g, nos pide Goto percentage: 100

Presionamos T, nos manda un mensaje y tenemos esto:

Figura 9: Sumatoria en Tiempo Real de Usuarios.
En el sistema de produccion esta pantalla tiene mas usuarios y esta mostrando como mencione anteriormente todo en tiempo real.

Si desean limpiar los valores solo presionen la letra 'z' e inicia de 0 todo asi tendremos una clara vision de la operacion.

Este programa no deben perderle el ojo, muy importante la informacion en tiempo real.

...continua