Descripción del problema
Se desea instalar qgis versión 2.14 en un ubuntu 14.04.
Para ello se siguen las instrucciones indicadas en https://qgis.org/en/site/forusers/alldownloads.html#debian-ubuntu (como root):
-
Se agrega el repositorio de qgis a la lista de repositorios de apt:
# cat > /etc/apt/sources.list.d/qgis.list <<'END' deb https://qgis.org/ubuntugis-ltr trusty main deb http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu trusty main END -
Se instalan los certificados de los repositorios:
Para qgis:
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key CAEB3DC3BDF7FB45 Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.2ITtsBKJDp --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key CAEB3DC3BDF7FB45 gpg: solicitando clave BDF7FB45 de hkp servidor keyserver.ubuntu.com gpg: clave BDF7FB45: clave pública "QGIS Archive Automatic Signing Key (2017) <qgis-developer@lists.osgeo.org>" importada gpg: Cantidad total procesada: 1 gpg: importadas: 1 (RSA: 1)Para ppa ubuntu:
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 089EBE08314DF160 Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.fDrFUqJgJ8 --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 089EBE08314DF160 gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) -
Se actualiza la información de los paquetes del nuevo repositorio:
# apt-get update ... Err https://qgis.org trusty/main i386 Packages gnutls_handshake() failed: Handshake failed ... W: Failed to fetch https://qgis.org/ubuntugis-ltr/dists/trusty/main/binary-i386/Packages gnutls_handshake() failed: Handshake failed E: Some index files failed to download. They have been ignored, or old ones used instead.
El problema anterior suele darse debido a que la versión de gnutls instalada
en el sistema no soporta los algoritmos de cifrado TLS disponibles en el
servidor.
A continuación se lista el script completo para instalar qgis:
#!/bin/bash
#
# Install qgis
#
# See:
# * http://www.qgis.org/en/site/forusers/alldownloads.html#debian-ubuntu
#
set -e
# only run in ubuntu 14.04
if [ "$(lsb_release -si)" != "Ubuntu" -o "$(lsb_release -sr)" != "14.04" ]; then
echo "This scripts only works in 'Ubuntu 14.04'" >&2
exit 1
fi
# check that is run with sudo
if [ -z $SUDO_USER ]; then
echo "Run using 'sudo'" >&2
exit 1
fi
#
# install qgis
#
export DEBIAN_FRONTEND=noninteractive
# add qgis repositories
cat > /etc/apt/sources.list.d/qgis.list <<'END'
deb https://qgis.org/ubuntugis-ltr trusty main
deb http://ppa.launchpad.net/ubuntugis/ppa/ubuntu trusty main
END
# add certificates for repositories
# NOTE: get qgis repository key from keyserver - 2017
# NOTE: the key change every year!
# NOTE: See: https://qgis.org/en/site/forusers/alldownloads.html#debian-ubuntu
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key CAEB3DC3BDF7FB45
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 089EBE08314DF160
# update repository and install packages
apt-get update
apt-get install -qVy qgis python-qgis qgis-plugin-grass
Confirmación del problema
Para confirmar lo anterior se puede utilizar el comando gnutls-cli disponible
en el paquete gnutls-bin y el sitio
https://www.ssllabs.com/ssltest:
-
Instalación del paquete
gnutls-bin:$ sudo apt-get install -qVy gnutls-bin -
Intentar establecer una conexión TLS con el servidor (se espera que falle):
$ gnutls-cli --verbose --port 443 qgis.org Resolving 'qgis.org'... Connecting to '104.27.139.220:443'... *** Fatal error: A TLS fatal alert has been received. *** Received alert [40]: Handshake failed *** Handshake has failed GnuTLS error: A TLS fatal alert has been received. -
Obtener los algoritmos soportados por la versión de
gnutlsdel sistema:$ gnutls-cli --list -
Obtener los algoritmos utilizados por el servidor de la página https://www.ssllabs.com/ssltest/analyze.html?d=qgis.org
Comparando los algoritmos listados en el paso 3. y los del paso 4., vemos que no hay coincidencias, de ahí que ocurra el error al intentar realizar el handshake.
Solucion propuesta - crear mirror
Se intentó actualizar las versiones de gnutls, de los repositorios de ubuntu,
pero esto no solucionó el problema.
Como alternativa se creará un mirror local del repositorio utilizando
apt-mirror (paquete apt-mirror), ya que se buscará instalar qgis en varios
PC's y se aprovechará para realizar la configuración de forma que deban
utilizarse solamente servidores de la red interna sin acceso a internet.
Para ello se crea una configuración de apt-mirror para realizar un mirror de
los repositorios de qgis y ppa ubuntugis, que contienen los paquetes para
ubuntu trusty (14.04):
NOTA: los siguientes comandos se ejecutan en el servidor en el que se desea crear los mirror locales.
$ cat <<'END' | sudo tee /etc/apt/mirror-qgis-trusty.list > /dev/null
set base_path /srv/mirror/apt-mirror-qgis-trusty
set run_postmirror 0
set nthreads 20
set _tilde 0
deb-i386 https://qgis.org/ubuntugis-ltr trusty main
deb-i386 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu trusty main
clean https://qgis.org/ubuntugis-ltr
clean http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu
END
Luego se crea el directorio en que se descargarán los archivos y se ejecuta el programa con la configuración previamente creada:
$ sudo mkdir -p /srv/mirror/apt-mirror-qgis-trusty
$ sudo chown apt-mirror:apt-mirror /srv/mirror/apt-mirror-qgis-trusty
$ sudo su -c 'apt-mirror /etc/apt/mirror-qgis-trusty.list' -l apt-mirror
Ya que se busca evitar la conexión a internet, se elige el directorio
/srv/mirror/apt-mirror-qgis-trusty para almacenar los certificados de los
repositorios:
$ sudo wget -q -P /srv/mirror/apt-mirror-qgis-trusty 'https://qgis.org/downloads/qgis-2017.gpg.key'
$ gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 089EBE08314DF160
$ gpg --export --armor 089EBE08314DF160 | sudo tee /srv/mirror/apt-mirror-qgis-trusty/ubuntugis.gpg.key > /dev/null
Ahora resta servir los repositorios descargados en
/srv/mirror/apt-mirror-qgis-trusty/mirror/qgis.org mediante un
servidor web.
Configurando un servidor web que sirva el contenido de /var/www, se crean los
links simbólicos:
$ sudo mkdir -p /var/www/mirrors/qgis-trusty
$ sudo ln -s -t /var/www/mirrors/qgis-trusty /srv/mirror/apt-mirror-qgis-trusty/mirror/qgis.org
$ sudo ln -s -t /var/www/mirrors/qgis-trusty /srv/mirror/apt-mirror-qgis-trusty/mirror/ppa.launchpad.net
$ sudo ln -s -t /var/www/mirrors/qgis-trusty /srv/mirror/apt-mirror-qgis-trusty/qgis-2017.gpg.key
$ sudo ln -s -t /var/www/mirrors/qgis-trusty /srv/mirror/apt-mirror-qgis-trusty/ubuntugis.gpg.key
Ahora, suponiendo que se acceda al mirror utilizando el hostname
mirror.example.com, se modifica el script anterior para instalar qgis:
#!/bin/bash
#
# Install qgis
#
# See:
# * http://www.qgis.org/en/site/forusers/alldownloads.html#debian-ubuntu
#
set -e
# only run in ubuntu 14.04
if [ "$(lsb_release -si)" != "Ubuntu" -o "$(lsb_release -sr)" != "14.04" ]; then
echo "This scripts only works in 'Ubuntu 14.04'" >&2
exit 1
fi
# check that is run with sudo
if [ -z $SUDO_USER ]; then
echo "Run using 'sudo'" >&2
exit 1
fi
#
# install qgis
#
export DEBIAN_FRONTEND=noninteractive
# add qgis repositories
cat > /etc/apt/sources.list.d/qgis.list <<'END'
deb http://mirror.example.com/qgis-trusty/qgis.org/ubuntugis-ltr trusty main
deb http://mirror.example.com/qgis-trusty/ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu trusty main
END
# add certificates for repositories in mirror
wget -q -O- 'http://mirror.example.com/qgis-trusty/qgis-2017.gpg.key' | apt-key add -
wget -q -O- 'http://mirror.example.com/qgis-trusty/ubuntugis.gpg.key' | apt-key add -
# update repository and install packages
apt-get update
apt-get install -qVy qgis python-qgis qgis-plugin-grass