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
gnutls
del 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