miércoles, 12 de febrero de 2014

Perl: Averiguar si FreePBX está actualizado

Hacía tiempo que no volvía con los temas de FreePBX. Como habréis podrido observar, le he dado un descanso.

Si recodáis, uno de los posts que escribí fue sobre el script que montó Pepelux (Jose Luís Verdeguer), en el que analizaba la configuración de la instalación que se tenía. Así, se podía saber si había algunos valores por defecto o alguna cosa que era recomendable cambiar.

Una de las cosas que se me quedó a medias fue el averiguar si teníamos instalada la última versión. Se me quedó en el tintero porque no fui capaz de dar con la clave adecuada para sacar el dato utilizando perl. Pues bien, hace poco lo conseguí. Y este es el resultado. ¡Ojo! Que en mi caso lo tengo montado en el script original. Recordemos que tocó ajustarlo porque esta instalación es una RasPBX (el cual se sustenta de FreePBX) y en vez de tirar del gestor de paquetes Yum tira de APT.

#!/usr/bin/perl
# -=-=-=-=-=-=-=-=-=-=-=
# FreePBX Security check
# -=-=-=-=-=-=-=-=-=-=-=
# Original author:
# Jose Luis Verdeguer (aka Pepelux)
#
# 
#
# Author:
# Agustín Campos (aka Agux)

sub init() {
    die("You must be root to run this script!\n\n") if (getpwuid($<) ne "root");

    my $ver = version();
    my $last_ver = '2.11';
    print "Warning! Your FreePBX version is too old ($ver). Consider upgrading your system\n" if ($ver < $last_ver);
    print "Your FreePBX instalation is up to date" if ($ver = $last_ver);

    print "\n";
    unlink "/tmp/fpbx.version";
}

sub version {
        system("dpkg -s freepbx | grep 'Version' > ./fpbx.version");
        my $version_file = "./fpbx.version";

        open (FILE_VER, $version_file);

        while () {
                #'chomp' clears the newlines characters
                chomp;
                my $aux = $_;
                $aux =~ /Version\:\ \s+\t+([\-|0-9|\.]*)\s+\t+/;
                $aux =~ s/Version\:\ //;
                close (FILE_VER);
                return $aux;
        }
        return "";
}

init();

Se que debería de buscar algún tipo de else para el caso en el que la versión sí que esté actualizada, pero como ya he comentado, realmente el cambio que habría que hacerle al script original es:


  1. El método version ponerlo tal cual está está aquí.
  2. Si no recuerdo mal, en el original se hacía la comparación de la llamada al método directamente con la cadena de la versión que tenemos instalada. En mi caso, he asignado a dos variables los valores correspondientes y he comparado dichas variables.
Esos serían los cambios que habría que hacer con el original para esta distribución.

No hay comentarios:

Publicar un comentario