Cómo Solucionar el Error NO_PUBKEY en Ubuntu

Los paquetes alojados en los repositorios utilizan una firma para garantizar la integridad de los mismos en el momento de descargarlos, lo que permite asegurar que se han descargado bien y que no han sido modificados por terceros. Esto obliga a instalar una llave pública (public key) por cada repositorio que agreguemos. Las llaves de los repositorios oficiales se añaden de manera automática, pero cuando agreguemos nuevos repositorios debemos añadir sus llaves para que se puedan validar los paquetes.

Cuando intentamos instalar un paquete puede salirnos un error de llave pública. Esto ocurre cuando añadimos repositorios no oficiales y no hemos añadido la llave pública.

Por ejemplo al instalar el metapaquete medibuntu, si antes no hemos puesto la clave pública saldrá algo como:

Error de GPG: http://packages.medibuntu.org natty Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 2EBC26B60C5A2783

 

Para solucionarlo hacemos lo siguiente (en la terminal):

1) Ponemos la clave manualmente: tecleando los 8 últimos caracteres de la llave que nos ha dado el error, de la siguiente forma

PUBKEY=0C5A2783

2) Exportamos la clave

gpg --keyserver subkeys.pgp.net --recv-key $PUBKEY && gpg -a --export $PUBKEY | 
sudo apt-key add --

3) Actualizamos

sudo apt-get update

 

Hay 3 maneras de obtener la clave pública para un paquete que queramos instalar:

1. La primera es obtener la llave PGP por el error que se produce al instalar el paquete (son los 8 últimos caracteres).

2. El distribuidor del paquete nos facilita un archivo de texto con la llave. Guardamos el archivo en nuestro ordenador e instalamos la llave de la siguiente manera:

sudo apt-key add llave.pub 

  (donde llave.pub es el archivo que contiene la llave)

3. El distribuidor del paquete proporciona una url con la llave pública.

Por ejemplo para Picasa la url de la llave se obtiene con:

wget -q -O -https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add –
sudo apt-get update


 

Publicado el 12 junio, 2011 en Linux, Ubuntu y etiquetado en , , , , . Guarda el enlace permanente. 13 comentarios.

  1. Un comando estupendo para descargar todas las llaves que nos falten de un plumazo

    sudo apt-get update 2> /tmp/keymissing; for key in $(grep “NO_PUBKEY” /tmp/keymissing |sed “s/.*NO_PUBKEY //”); do echo -e “\nProcessing key: $key”; gpg –keyserver keyserver.ubuntu.com –recv $key && gpg –export –armor $key | sudo apt-key add -; done

    • Hola hicks1gb, un conjunto de comandos encadenados muy efectivo.

      Breve explicación para que lo entiendan los recién llegados a Linux:

      Son una serie de instrucciones encadenadas (cada una acaba en ” ; “)
      Aprovechamos el comando “apt-get update” para guardar en un archivo temporal “keymissing” las claves publicas que falten. Luego se procesan (do …done) cada una de ellas mediante un bucle (for).

      Es decir: se ejecuta la instrucción 2) recogida en el artículo, solo que se le pasan las PUBKEY directamente desde el archivo keymissing.

    • Me figura al final:
      sed: -e expresión #1, carácter 1: orden desconocida: «�»
      Está todo ok o está mal escrito el comando encadenado?

      • Hola claudio. Supongo que con “comando encadenado” te refieres al que dejó hicks1gb. Si lo copias y pegas tal cual lanza el error que comentas. Esto es debido a que por alguna extraña razón wordpress no muestra las comillas (“”) ni el doble guión () correctamente. Como puedes ver las comillas son distintas a las que escribes y el doble guión lo transformó en un sólo guión. Pero no te preocupes, te pongo el comando encadenado preformateado para que puedas copiarlo tal cual y pegarlo en la terminal:

        sudo apt-get update 2> /tmp/keymissing; for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); do echo -e "\nProcessing key: $key"; gpg –keyserver keyserver.ubuntu.com –recv $key && gpg –export –armor $key | sudo apt-key add -; done

  2. muchas gracias por lo de la clave de medibuntu. había estado buscando por todos lados y no encontraba la solución hasta ahora. en muchos sitios dicen que tienen la solucion pero en realidad no la tienen.

    • Hola Luciano, aunque el objetivo del artículo es proporcionar una forma de obtener la clave pública de cualquier paquete, me alegro de que hayas solucionado tu problema.

      Para mí, como supongo para mucha gente, Medibuntu es un repositorio fundamental que siempre activo tras instalar cada nueva versión de Ubuntu, por este motivo tiene su propio apartado en todos los artículos que he escrito para cada versión de Ubuntu y que he titulado
      He instalado Ubuntu xxxx,y ahora qué?…
      Cosa que espero continuar haciendo con las siguientes versiones de Ubuntu.
      Pueden encontrarse en el apartado Configuración en el INDICE del blog,

  3. Luegolocambio

    Hola, muchas gracias por la solución, tanto la del post como la de los comentarios. My duda es:
    ¿Estos comandos resuelven el problema de las firmas solo en el momento en el que los usamos o ya no volveremos a tener problemas con esa firma nunca más?
    Lo digo porque a mi despues de usar esos comandos si actualizo otra vez me vuelve a dar el mismo error de que la firma no se puedo verificar.

    • Una vez solucionado el problema de la firma ya no debería volver a producirse el error; digamos que es la forma manual de registrar la firma en nuestro Sistema.
      Cuando dices que después de actualizar te vuelve a dar el mismo error, te refieres a :
      – Después de forzar una actualización mediante por. ej. el comando sudo apt-get update, o después de una actualización del Sistema: La respuesta es NO, no debería volver a darte el error puesto que ya has registrado la clave.

      – Al actualizar la versión de Ubuntu: En este caso es muy posible que algunas aplicaciones instaladas (de las que no se encuentren en los repositorios de Ubuntu) te lancen un error de clave pública, o simplemente comiencen a tener un funcionamiento incorrecto; esto es debido a que no todos los proveedores tienen actualizados sus repositorios en el momento del lanzamiento de la nueva versión de Ubuntu.

      En algunos casos, es posible utilizar los paquetes de una versión anterior, editando las “sourceslist” e indicando que se utilicen “los paquetes de la versión anterior”.

      • Luegolocambio

        Hola, me refería a usar el comando sudo apt-get update, en realidad uso aptitude aunque no creo que sea la causa del error.

        me sale este error:
        NO_PUBKEY E429E19D97F87FBF

        introduzco este comando:
        sudo apt-get update 2> /tmp/keymissing; for key in $(grep “NO_PUBKEY” /tmp/keymissing |sed “s/.*NO_PUBKEY //”); do echo -e “\nProcessing key: $key”; gpg –keyserver keyserver.ubuntu.com –recv $key && gpg –export –armor $key | sudo apt-key add -; done

        Me devuelve:
        Processing key: E429E19D97F87FBF
        uso: gpg [opciones] [nombre_archivo]

        No se que significa esto😦

        Pero cuando vuelvo a poner sudo aptitude update me sale otra vez el mismo error.ç
        NO_PUBKEY E429E19D97F87FBF

        PD: Lo siento por la maquetación, no domino el formato y no se resaltar los comandos que escribo para que se distingan mejor del texto.

        • Por lo que se ve, no te está procesando la clave y te informa del formato que debes utilizar con el comando gpg. Eso quiere decir que has cometido un error al teclear la orden. Haz lo siguiente:
          Ve a la terminal y teclea PUBKEY=97F87FBF (tal cual sin dejar espacios)
          A continuación ve al punto del artículo 2) Exportamos la clave , ya está formateado y podrás copiar y pegar en la terminal directamente.
          Sabrás que lo ha hecho correctamente si te pone:
          gpg: Cantidad total procesada: 1

        • Luegolocambio

          Arreglado, gracias

  4. hola soy fernando… estaba instalando sudo apt-get install libdvdread4
    y cuando salio lo de la clave cerre el terminal y me creo un error: No se pudo bloquear /var/lib/dpkg/lock – open (11: Recurso no disponible temporalmente)
    E: No se pudo bloquear el directorio de administración (/var/lib/dpkg/), ¿quizás haya algún otro proceso utilizándolo?

    que debo hacer…. porque sino no me deja instalar nada…porque esta en ese proceso…. gracias

    • Hola Fernando. Este error se dá cuando queda a medio concluir una instalación o una actualización. Puede ocurrir por ej.:
      – Cuando el Sistema está actualizando y desde una terminal pretendemos instalar algún paquete.
      – Cuando iniciamos una instalación en una terminal, y tratamos de iniciar otra instalación desde otra terminal antes de que termine la primera.
      – Cuando instalamos alguna aplicación desde el Centro de Software de Ubuntu, y tratamos de iniciar otra instalación desde la terminal.
      – Combinaciones de las anteriores.

      En principio sería sufiente con cerrar sesión y volver a abrir, o sinó reiniciando el equipo para desbloquear el recurso.
      A continuación teclea sudo apt-get update para completar lo que haya quedado pendiente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s