24 octubre 2014

Repositorios: Errores más frecuentes

   Intentaré dar algunas soluciones a los errores más frecuentes relacionados con los repositorios. Muchos de ellos surgen por malas actualizaciones de la distribución, problemas con la conexión a Internet, repositorios sin mantenimiento, etcétera.
   Los ejemplos los he tomado de los foros y consultas de páginas relativas al mundo Linux, Linux Mint, Ubuntu y Debian, en algunos casos dejaré los enlaces para que podáis ver más detenidamente el contenido del error y las soluciones aportadas.

   Para empezar, un comando muy útil: inxi -r. Al ejecutar este comando en el terminal nos muestra la siguiente información:
   Como podéis ver muestra los repositorios activos para apt. Las líneas azules indica su situación, todos están situados en el directorio sources.list.d (el path es /etetc/apt/sources.list.d). Y vemos los siguientes archivos ".list"
  • getdeb.list (En la línea siguiente su contenido: dep http://archive.....)
  • official-package-repositories.list. Como podéis ver las direcciones apuntan a las ditribuciones quiana (Linux Mint) y trusty (Ubuntu 14.04.
  • shutter-ppa-trusty.list
  • webupd8team-popcorntime-trusty.list
   En el path /etc/apt (accedemos con cd /etc/apt), tenemos el fichero sources.list):
   Es el unico fichero ".list" que tenemos en este directorio.
   
   Evidentemente esta es la situación que se muestra en mi ordenador, la vuestra puede ser distinta ya que en lo que se refiere a repositorios de terceros las posibilidades son muchas y cada uno descargaŕa aquellas herramientas que estime más convenientes.

CDROM habilitado
   Este error suele dar el mensaje siguiente:
   El error se provoca porque la línea que apunta a la dirección del cdrom, cuestión necesaria cuando hacemos la instalación de la distribución, sigue habilitada. Este repositorio local se encuentra en sources.list.
   Si utilizamos el comando cat sobre el fichero sources.list veremos su contenido.
  • Me sitúo en el directorio donde está sources.list
   $ cd /etc/apt  
  • Ejecuto el comando cat
   $ cat sources.list  


   Ahí tenemos la línea, como podéis comprobar el primer carácter que aparece es un #, lo que significa que este repositorio está deshabilitado.
   El error se produce cuando está habilitado, es decir falta el caracter # al comienzo de la línea.
   Para corregir este error utilizaremos un editor de texto plano, yo utilizo gedit. Así que escribiremos el siguiente comando:
   $ sudo gedit sources.list  
   El editor gedit nos abrirá el fichero, añadimos el # al comienzo de la línea y guardamos. A continuación ejecutamos:
   $ sudo apt-get update  

   El error quedará resuelto ya que apt no irá a actualizar este repositorio que apunta al cdrom de nuestra instalación.

Repositorio/s no soportado/s

   Este error se encuentra frecuentemente en los foros, tiene el siguiente formato, teniendo en cuenta que puede aparecer otro nombre de repositorio. Aquí el problema lo genera: niteshgupta16, de Launchpad.



    La dirección completa es:
http://ppa.launchpad.net/niteshgupta16/gamecaster-stable/ubuntu/dists/trusty/main/source/Sources
   En principio observamos que apunta a una distribución trusty, la nuestra (Ubuntu 14.04), y aún así nos da problemas.
    Vamos a entrar en Launchad y una vez en su página buscamos el repositorio escribiendo su nombre en la caja de búsqueda (parte superior derecha) y hacemos clic para comenzar la búsqeda.
   Nos aparece la siguiente ventana:
   He señalado con dos flechas los enlaces a los que podemos acceder al repositorio, lo cual sabemos por la dirección del repositorio que aparece cuando se provoca el error. Yo entro en el marcado por la flecha inferior: Gamecaster (stable), ya que es el que provoca el error.
   Aquí tenemos el repositorio, en negrita nos indica el ppa completo para su instalación, pero fijaros en el listado inferior, las versiones que aparecen son quantal y precise, la nuestra, trusty no aparece, por lo que no puede obtener el repositorio.
   Solución, eliminar el repositorio o inhabilitarlo, como hacerlo lo hemos visto en las entradas anteriores, podéis hacerlo desde el Gestor de software, Synaptic o utilizando el terminal. Si lo hacéis desde el terminal recordar que tenemos que actualizar con el comoando: apt-get update, más combretamente: sudo apt-get update.
   Este error es muy frecuente en las actualizaciones de versiones. No nos acordamos de actualizar los repositorios de terceros nuestra nueva versión y provocan estos problemas. No creáis que se resuelven poniendo el nombre de vuestra distribución, esto puede ser correcto si está disponible el repositorio para vuestra distribución, si no lo está el problemas persiste. Borrar el repositorio y, sólo nos queda, esperar a que los desarrolladores creen un repositorio para la nueva versión. En los proyectos importantes la actualización suele estar disponible, si no lo está, puede tardar unas semanas en estar disponible.
Repositorio no exitente
  Anteriormente hemos visto un repositorio que no disponía de nuestra versión (trusty). El error que vamos a ver se produce cuando no existe "el almacén".
   No se produce el error porque no exista una versión trusty, el error se produce porque no se obtiene: http://packages.domain.com.
   Si con nuestro navegador intentamos entrar en esta dirección veréis esto:
   Esto, lógicamente, produce el error.
   Solución: Borrar el repositorio. Si lo hacemos desde el terminal recordar actualizar nuestros repositorios con: sudo apt-get update.

Repositorios duplicados

   El propio título indica de que se trata este error que aparece así:
   A nuestro amigo, el sistema le informa: Duplicate sources.list, del archivo ".list" donde tiene los repositorios duplicados, en este caso se trata de sources.list. A continuación le muestra el repositorio.
   Para solucionar este problemas tendremos que editar el archivo sources.list y para ello utilizaremos la instrucción: sudo gedit (nombre del archivo list), recordad que con inxi -r podemos ver el archivo y sus líneas. Una vez editado, buscamos una de las líneas duplicada y la eliminamos. Guardamos el archivo y actualizamos con: sudo apt-get update.

Repositorio sin llave GPG.

   Este es un ejemplo de la información que nos da el error:

 W: Error de GPG: http://ppa.launchpad.net hardy Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 7D2C7A23BF810CD5

   He puesto en color rojo los últimos 8 caracteres que aparecen después de NO_PUBKEY (BF810CD5), puesto que son importantes para la recuperación.

   Podemos recuperar esta llave desde el programa gráfico Orígenes de software. Nos vamos a nuestro Menú y abrimos el programa que se encuentra en la sección de Administración, nos pedirá nuestra contraseña y tendremos la ventana inicial disponible:
   Hacemos clic en el botón Claves de autenticación, la ventana cambiará y tendremos esto:

    Vemos alguna de las claves de los repositorios debajo de su nombre.
   Hacemos clic en el botón Descargar una clave... y aparecerá esta nueva ventana:
   Introducimos los 8 últimos caracteres de la clave pública y pulsamos el botón aceptar.
  La clave quedará añadida. No podemos, pues estamos en modo gráfico, ejecutar el comando: sudo apt-get update, pero fijaros que una vez que habéis hecho clic en el botón aceptar, en la ventana anterior, aparece en la parte superior derecha un botón que nos pide Actualizar la cache, la actualizamos y nuestra clave estará ya añadida.
   Desde terminal podemos resolver el error con los siguientes comandos:


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


La palabra NUMERACIÓN la sustituimos por los 8 dígitos que nos daba el error, el comando nos quedaría así:

gpg --keyserver subkeys.pgp.net --recv-key BF810CD5 && gpg -a --export $PUBKRY | sudo apt-key add -
Si introducimos en vez de los 8 últimos dígitos de la clave, todos sus dígitos no hay ningún problema, funcionará.
Otra solución, si la anterior diera algún problema sería ejecutar en el terminar estos comandos:

gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F120156012B83718
gpg --armor --export F120156012B83718 | sudo apt-key add -

   La segunda instrucción es doble, una vez que termina la clave empieza el comando sudo apt-key add -
     Todo esto equivale a:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F120156012B83718
gpg --armor --export F120156012B83718
sudo apt-key add -
   Lo dejo a vuestra elección. Acordares de ejecutar: sudo apt-get update.

Error del tamaño de la cache de apt.
   Este error ocurre porque el programa APT sufre un overflow, "no puede" con la cantidad de paquetes de su lista de repositorios. Al ejecutar el comando update, en términos coloquiales, carga la lista de paquetes hasta donde puede y no pudiendo más se desborda y produce el error.
   ¿Parece un broma verdad?
   Pero no lo es, para que ello vamos a ver los paquetes que tenemos instalados en nuestro sistema, utilizaremos el comando apt-cache pkgnames. Este comando, ejecutado desde el Terminal nos da la lista de paquetes que tenemos instalado.
   $ apt-cache pkgnames  
   La imagen de nuestro terminal será más o menos esta:
    Este listado nos muestra las últimas líneas de los paquetes instalados. Si os movéis por la ventana de terminal hasta la línea donde ejecutamos el comando veréis que son un montón de paquetes, pero no todos. ¿Que hacemos?. Algo que suele hacerse frecuentemente, vamos a redireccionar la salida de este listado a un archivo. Muy sencillo haremos que el listado que genera apt-cache pkgnames en vez de dirigirse al Terminal, a la pantalla se dirija a un archivo, que evidentemente tendrá que crear.
    A ese archivo lo vamos a llamar mis_paquetes, sin más. Si os fijáis en el prompt del terminal aparece el caracter ~, esto nos indica que nos encontramos en nuestro directorio de usuario: /home/jose en mi caso, en el vuestro: /home/ nombre_de_usuario. En este directorio quedará nuestro archivo.
   Ejecutamos el comando de la siguiente forma:
   $ apt-cache dpkgnames > mis_paquetes  
   Al pulsar Intro no pasa nada, al menos en nuestro terminal, ya que hemos redireccionado la salida de información que genera apt-cache a un archivo, no a la pantalla.
   Si abrimos, en nuestro escritorio la Carpeta personal tendremos allí nuestro archivo:

   Ahí lo tenemos, vamos a hacer clic sobre él y lo normal será, al tratarse de un archivo de texto, que Gedit sea el editor encargado de abrir el archivo mis_paquetes:


 Con la barra de desplazamiento podéis ver el listado de "todos" vuestros paquetes. Ir al final y hacer clic en la última línea, a mi, como podéis comprobar, me salen (parte inferir de la ventana), 45.685 líneas. La cuenta es fácil, si cada línea la compone el nombre del paquete, he listado 45.685 paquetes.
 Se empieza a comprender que algunas veces APT a la hora de actualizar esta lista, se "desborde"
 Podéis guardar el fichero generado o borrarlo, yo os recomiendo que lo guardéis, quizás pueda ser útil para determinadas consultas.

  Adelanto que cualquier comando que genere una salida de información por la pantalla del Terminal puede redireccionarse. Un comando muy utilizado es ls, que lista los archivos y directorios que tenemos en el directorio en que nos encontramos o direccionamos. Si queremos guardar el contenido de esa información en un archivo realizaremos la misma operativa.
  Imaginar que queremos dejar en el archivo mis_bin el listado que genera ls en el directorio /usr/bin. Ejecutaremos:
   $ ls /usr/bin > mis_bin  
  En vuestra Carpeta personal encontraréis el archivo mis_bin, hacer clic sobre el y Gedit os abrirá la lista de vuestros archivos binarios.

  Bien, hemos visto que el número de paquetes que tenemos es importante. A medida que vayamos añadiendo más, está lista aumentará de manera considerable, capaz de desbordar a APT y generar este error:

E:Dynamic MMap corrió fuera de la sala. Incremente el tamaño de APT::Cache-Limit. Valor actual: 23165112. (man 5 apt.conf), E:Ocurrió un error mientras se procesaba libbind9-40 (NewVersion1), E:Problem with MergeList /var/lib/dpkg/status, E:No se pudieron analizar o abrir las listas de paquetes o el archivo de estado.

  Y en el mensaje también nos propone la solución: Incremente el tamaño de APT::Cache-Limit. Así que es lo que vamos a hacer. Abrimos el terminal y ejecutamos estas instrucciones:

     $ echo 'APT::Cache-Limit "100000000";' | sudo tee -a /etc/apt/apt.conf.d/70debconf   

   Ese valor que hemos asignado es de 10 Mb, en principio parece más que suficiente.
  Seguidamente vamos a realizar una limpieza:

   $ sudo apt-get clean  

   Y, para terminar, actualizamos:

   $ sudo apt-get update  


   Problema resuelto y por bastante tiempo, será difícil que la cache de APT se desborde cuando tiene asignado un valor de 10 Mb.

Sintaxis incorrecta de las direcciones

   Quizás hemos decidido agregar a alguno de nuestros dicheros ".list" una URI manualmente. Es decir, editamos un archivo ".list" y añadimos la URI manualmente, la escribimos, guardamos, hacemos el update de nuestros repositorios y nos aparece un error similar a este:

E: Línea 12 mal formada en la lista de fuentes /etc/apt/sources.list (análisis de URI)
E: No se pudieron leer las listas de fuentes.  

   

El error nos informa de dos cuestiones importantes, la primer en que archivo se produce el error, en el ejemplo vemos que se produce en el archivo sources.list, además, al comienzo del mensaje nos dice en que línea está dicho error.

Para solucionarlo tendremos que utilizar el editor de texto, ya sabéis que yo siempre utilizo Gedit, así que escribimos (como administradores) y en el directorio en el que se encuentre sources.list o designe el menaje de error.

    $ sudo gedit sources.list  

Vamos a la línea 12, y la modificamos comprobando que esté completa y correctamente escrita, pues el error viene de esa incorrección. Guardamos el archivo y ejecutamos: sudo apt-get update.

Problema con MergeList

Puede que el listado de paquetes que se encuentra en /var/lib/apt/lists se haya corrompido. El error que nos da el sistema es el siguiente:

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/packages.linuxmint.com_dists_katya_import_i18n_Translation-en

E: No se pudieron analizar o abrir las listas de paquetes o el archivo de estado.

La solución es eliminar la lista y generar otra. Para borrarla ejecutamos la siguiente instrucción:

    $ sudo rm /var/lib/apt/lists/* -vf  

Para generar una nueva lista:

    $ sudo apt-get update  

El problema queda resuelto. Un momento de mala conexión a Internet puede provocar que el archivo se corrompa.

Archivo available dañado o desparecido.

    Cuando el archivo available está dañado pueden producirse estos mensajes de error:
dpkg: error: parsing file '/var/lib/dpkg/available' near line 0:
También puede mostrarnos este error:

failed to open package info file '/var/lib/dpkg/available' for reading: No such file or directory.

   Este archivo available se encuentra, como indican los mensajes de error en la dirección /var/lib/dpkg/. Si listamos ese directorio, lo normal es que nos encontremos estos dos archivos:
  • available
  • available-old
   Si encontramos los dos archivos y se produce alguno de estos errores, la cuestión es que el archivo available está dañado y no permite que se abra. Ejecutamos los siguientes comandos:
   $ sudo --dpkg-clear-avail  
   Actualizamos los repositorios con:
   $sudo apt-get update
   Por último actualizamos nuestros paquetes con:
   $ sudo apt-get upgrade  
   El problema quedará resuelto.
   Pero puede suceder que no encontremos el archivo available. La solución sera copiar el archivo available-old como available, y realizada esta acción actualizar nuestros repositorios y nuestros paquetes. Para crear el paquete available partiendo de available-old escribimos el siguiente comando:
   $ sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available  

   El anterior comando presupone que estamos en nuestro directorio /home/usuario (en mi caso: /home/jose). Si nos hemos trasladado con el comando cd, al subdirectorio dpkg (cd /var/lib/dpkg), bastará con escribir:

   $ sudo cp available-old available  

   A continuación actualizamos nuestros repositorios:

   $ sudo apt-get update 

   Y actualizamos nuestros paquetes:

   $ sudo apt-get upgrade 

   El problema debería quedar resuelto. No obstante quizás sea conveniente (no estaría de más) que forzaseis la instalación de lo paquetes:

   $ sudo apt-get install -f  

   Con esto estoy seguro que este error queda solucionado.

   Por el momento doy por terminada esta entrada. Seguro que más adelante realizaré un repaso para añadir alguna que otra cuestión. 
   Agradeceré vuestros comentarios y dudas. Entre todos podemos mejorar este blog.

Muchas gracias por vuestra atención.




No hay comentarios:

Publicar un comentario