Solución al problema de claves para repositorios launchpad.net

CONTENIDO:

1 INTRODUCCIÓN
2 ¿Cuál es el contenido del script? ¿Es peligroso?
3 ¿Cómo hago ejecutable el script?
4 ¿Cómo ejecuto el script?
5 Un truco: tratarlo como un programa más
6 EDICIÓN: Evitar escribir la distribución a mano

¿Estás harto de este mensaje de error cuando añades un repositorio launchpad?

W: Error de GPG: http://ppa.launchpad.net intrepid Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 9423A34CCA967634
W: Tal vez quiera ejecutar 'apt-get update' para corregir estos problemas

1 - INTRODUCCIÓN

Hola amigos. Esta solución la he encontrado hace tiempo buscando algo automatizado para resolver las claves de todos los repositorios de launchpad.net sin tener que escribir comandos seguido y mirando los últimos 8 caracteres de la clave en la que da error.... vamos un coñazo.

Así que sin mucho esfuerzo encontré un script que automatiza este problema en las distribuciones hardy, intrepid y jaunty (8.04, 8.10 y 9.04 respectivamente).

2 - ¿Cuál es el contenido del script? ¿Es peligroso?

Cualquier script que ejecutemos en nuestra máquina debería ser revisado antes por si existe código malicioso. Este script se ha revisado por mucha gente y aún así lo he abierto para ver qué hacía. Simplemente agarra los certificados del keyserver de ubuntu y los añade a tu pc.
El contenido del script es el siguiente:

#! /bin/sh
if [ "`whoami`" != "root" ];
then
echo "Por favor, ejecuta el script como superusuario (sudo)"
exit 1
fi
case "$1" in
hardy) RELEASE="hardy";;
intrepid) RELEASE="intrepid" ;;
jaunty) RELEASE="jaunty";;
karmic) RELEASE="karmic";;
*)
echo "Teclea una de las siguientes distribuciones como parámetro:"
echo "--"
echo "- hardy"
echo "- intrepid"
echo "- jaunty"
echo "- karmic"
echo "--"
echo "Ejemplo: sudo ./launchpad-update intrepid"
exit 1
;;
esac
echo Distribución: $RELEASE
echo Espera por favor...
for q in `find /etc/apt/ -name *.list`; do
cat $q >> fullsourceslist
done
for i in `cat fullsourceslist | grep "deb http" | grep ppa.launchpad | grep $RELEASE | cut -d/ -f4`; do
wget -q --no-check-certificate `wget -q --no-check-certificate https://launchpad.net/~$i/+archive -O- | grep "http://keyserver.ubuntu.com:11371/pks/" | cut -d'"' -f2 ` -O- | grep "pub  " | cut -d'"' -f2 >> keyss
done
for j in `cat keyss` ; do
wget -q --no-check-certificate "http://keyserver.ubuntu.com:11371$j" -O- | grep -B 999999 END |grep -A 999999 BEGIN > keyss2
sudo apt-key add keyss2
rm keyss2
done
rm keyss
rm fullsourceslist

Lo podéis descargar directamente de aquí:
http://www.mediafire.com/?lmxln1jmzf0 (comprimido en .zip) Este fichero no incluye el script para Kubuntu Karmic (9.10)

Atención: el código que aparece arriba lo he traducido al castellano. Si bajáis el script de mediafire estará en inglés.

3 - ¿Cómo hago ejecutable el script?

  1. Si no te quieres descargar el zip puedes hacerlo de la siguiente forma:

    a) Copiar el contenido del script de arriba.
    b) Pegarlo en un documento de texto plano (aplicaciones para ello: kate, kwrite o nano en consola)
    c) Guardarlo donde quieras con el nombre launchpad-update (o cualquier otro, pero este es por defecto).
    d) Darle permisos de ejecución. En una terminal subís al directorio donde lo habéis guardado (cd /home/user/Escritorio por ejemplo) y escribís:
    chmod +x launchpad-update

  2. Si te has bajado el zip basta con descomprimirlo donde quieras. Ya tiene permisos de ejecución por defecto, sino acude al apartado 1d).

4 - ¿Cómo ejecuto el script?

Basta con ponerte en el directorio donde se encuentra desde la terminal (cd /home/user/Escritorio por ejemplo) y teclear:

*********************************************************************************
sudo ./launchpad-update distro
*********************************************************************************
Nótese el ./ (punto barra) que indica que el ejecutable se encuentra en el directorio actual.

Sustituiremos distro por el nombre de nuestra distribución:
8.04 -> hardy
8.10 -> intrepid
9.04 -> jaunty
9.10 -> karmic

Al momento se conectará y nos pondrá un mensaje. Si todo va bien, veremos un OK por cada repositorio que haya agarrado bien.

5 - Un truco: tratarlo como un programa más

Para no tener que acceder desde consola al directorio donde está el script, y sobre todo, para no borrarlo accidentalmente y tratarlo como un programa más, podemos mover el fichero launchpad-update al directorio /usr/bin con permisos de superusuario. En consola sería:

*********************************************************************************
sudo mv /home/user/Escritorio/launchpad-update /usr/bin
*********************************************************************************

El directorio en cursiva/negrita debe cambiarse por el adecuado.

Una vez hecho esto, para ejecutar el script ya no hace falta ni moverse al directorio donde se encuentra ni el punto barra (./) antes del nombre del ejecutable. Para ejecutar nuestro script desde cualquier directorio en consola:

*********************************************************************************
sudo launchpad-update distro
*********************************************************************************



6 - EDICIÓN: Evitar escribir la distribución a mano

Nuestro compañero Juanma-RR ha modificado el script de forma que con escribir launchpad-update agarre automáticamente la distribución. Para ello hace uso del comando lsb_release -cs. El código es el siguiente:

#! /bin/sh
if [ "`whoami`" != "root" ];
then
echo "Por favor, ejecuta el script como superusuario (sudo)"
exit 1
fi
RELEASE=`lsb_release -cs`
echo Distribución: $RELEASE
echo Espera por favor...
for q in `find /etc/apt/ -name *.list`; do
cat $q >> fullsourceslist
done
for i in `cat fullsourceslist | grep "deb http" | grep ppa.launchpad | grep $RELEASE | cut -d/ -f4`; do
wget -q --no-check-certificate `wget -q --no-check-certificate https://launchpad.net/~$i/+archive -O- | grep "http://keyserver.ubuntu.com:11371/pks/" | cut -d'"' -f2 ` -O- | grep "pub  " | cut -d'"' -f2 >> keyss
done
for j in `cat keyss` ; do
wget -q --no-check-certificate "http://keyserver.ubuntu.com:11371$j" -O- | grep -B 999999 END |grep -A 999999 BEGIN > keyss2
sudo apt-key add keyss2
rm keyss2
done
rm keyss
rm fullsourceslist

Espero que os haya servido de mucha ayuda. Es muy interesante y te olvidas para siempre de muchos rompederos de cabeza con las claves!

Un saludo.
Marcos Pérez