La edición afecta a mi "interpretación" de las operaciones efectuadas por el código que valida la ruta absoluta del archivo que paso a dpkg --search desde el fichero de datos. Si he mancillado los ojos de alguien mediante ese párrafo que he enviado a /dev/null... ¡Que me perdone!
Como estoy centrado en Perl lo utilizo ahora mismo hasta para pelar patatas, y dado que he tenido problemas con algunos archivos y debsums he escrito un programa que me diga, vía dpkg --search <absolute path file> qué módulos estarían comprometidos.
En el archivo debsums he metido los valores correspondientes a ficheros y configuraciones con valor debsums REPLACED o FAIL o missing.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.14;
- use strict;
- use warnings;
- use utf8::all;
- #Programa que recibe el archivo de errores de debsums y automatiza la localización de los
- #paquetes afectados y su reinstalación
- my $dpkg_out;
- my %sanear;
- die "Uso: $0 \<fichero\>\n" unless(@ARGV == 1);
- open my $ifh, "<", $ARGV[0] || die "$!\n";
- while(<$ifh>){
- #Tenemos que quedarnos con la ruta del fichero y desechar el resto de la línea.
- #/usr/share/keyrings/debian-archive-removed-keys.gpg FAILED
- if (m/(^\/[^\s\n]+)\s{1,}/){
- $dpkg_out = `dpkg --search $1`;
- }
- else {
- next;
- }
- my $paquete = $1 if($dpkg_out=~m/(^.+):\s/);
- #say $paquete if (defined $dpkg_out);
- $sanear{$paquete}++ if( defined $dpkg_out);
- }
- close $ifh;
- say $_ for (sort keys %sanear);
- 1;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Primer problema: la primera expresión regular.
La he montado por el viejo método de ensayo y error, que es lo que suele hacerse cuando no se sabe realmente lo que se está haciendo. Tiene la ventaja de que la comprendo y la desventaja de que no sé si hace bien lo que se supone que debe hacer en un caso general. Para el listado que proporciona debsums parece correcto... Pero si se tratara de capturar rutas procedentes del directorio /home no sería extraño encontrar directorios con nombres 'directorio \ con\ espacios\ en blanco'. Y éso ya es "sebo de otro cuenco".
Segundo problema: los bloques.
Using perl Syntax Highlighting
- if (m/(^\/[^\s\n]+)\s{1,}/){
- $dpkg_out = `dpkg --search $1`;
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Using perl Syntax Highlighting
- my $paquete = $1 if($dpkg_out=~m/(^.+):\s/);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
¿Es correcto este código?
En el segundo bloque, antes chequeaba el valor de retorno de `dpkg --search <fichero con ruta absoluta>` mediante system("dpkg", "--search", $_); pero se me eternizaba por lo que opté por el código que he puesto arriba. No obstante, supongo que ésta, la de system, es la forma correcta. ¿No?
El primer bloque intenta asegurar que la ruta absoluta que se pasa a dpkg es formalmente correcta. Pero me queda la duda de si la expresión regular captura adecuadamente todos los casos que se pueden dar en un fichero debsums.
La salida del programa parece correcta:
- xxxxx@xxxxxx:~/Documentos/MANTENIMIENTO$ ./localiza_pack.pl NUEVOS_ERRORES_DEBSUMS_2.txt
- console-setup-linux
- gnome-media
- gnome-session-common
- grub-common
- libreoffice-common
- libsane-hpaio
Un saludo.
PS: OFF TOPIC He reinstalado estos módulos mediante aptitude reinstall <módulo> y los he reconfigurado mediante dpkg-reconfigure <módulo>, pero debsums sigue cantando. Teniendo en cuenta que rkhunter no da más que una alerta a causa de /usr/bin/unhide.rb, que parece ser un viejo falso positivo por lo que leo en la red... ¿Debo reinstalar mi sistema?