miércoles, 13 de mayo de 2020

Docker build error Unable to connect Failed to fetch

Docker build error Unable to connect Failed to fetch


Hola.

En este post voy a escribir acerca de un error que sale al intentar crear una imagen para Docker en la que hay instrucciones que requieren una descarga de archivos de  internet.

Es importante mencionar que estoy usando una máquina virtual Oracle Linux corriendo en VirtualBox.

Mi archivo Dockerfile se ve así:

FROM debian:jessie-slim
ADD . /
RUN chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/scripts/start.sh"]

Al intentar ejecutar docker build obtengo error:

[oracle@localhost docker]$ sudo docker build -t dev/app .

En este caso la instrucción que provoca el error es app-get update la cual intenta descargar librerías de internet. Esta instrucción en particular es la que me estaba ocasionando los siguientes errores:

Step 4/5 : RUN chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*
 ---> Running in 4f1b0ff0f6dc
Err http://security.debian.org jessie/updates InRelease
  
Err http://security.debian.org jessie/updates Release.gpg
  Unable to connect to security.debian.org:http: [IP: 151.101.64.204 80]
.
. 
Err http://deb.debian.org jessie Release.gpg
  Unable to connect to deb.debian.org:http:
Err http://deb.debian.org jessie-updates Release.gpg
  Unable to connect to deb.debian.org:http:
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/jessie/InRelease  

W: Failed to fetch http://security.debian.org/debian-security/dists/jessie/updates/InRelease  

W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  
.
.
W: Some index files failed to download. They have been ignored, or old ones used instead.
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package unzip
E: Unable to locate package ssh
E: Unable to locate package net-tools
The command '/bin/sh -c chmod 755 /scripts/*.sh && apt-get update && apt-get --no-install-recommends -y install unzip ssh net-tools && apt-get clean && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100


Como ven el error es de comunicación, aunque la verdad es que me tomó mucho tiempo darme cuenta de esto. Inicialmente creí que las rutas estaban desactualizadas y que por eso fallaba al intentar descargarlas.

Intenté accediendo las rutas directamente con un navegador de internet y me confundía porque algunas sí existían y algunas no.

Después de investigar en internet, la razón puede ser que la conexión de red que utiliza Docker no está conectada y provoca este tipo de errores.

Para checar si la conexión de internet está funcionando pueden intentar el siguiente comando:

[oracle@localhost docker]$ sudo docker run busybox nslookup google.com
;; connection timed out; no servers could be reached

Solución

La solución que me funcionó fue agregar el parámetro --network=host en la instrucción de docker build. Esto indica que se utilice la configuración de red del host desde donde se está ejecutando el comando.

[oracle@localhost docker]$ sudo docker build --network=host -t dev:app .


Con este parámetro pude finalmente lograr la descarga y actualización de paquetes correspondientes.

Espero les sirva.


miércoles, 6 de mayo de 2020

Instalar Docker en Oracle Linux 7

Cómo instalar Docker en Oracle Linux 7


Hola.

En este post voy a poner los pasos necesarios para instalar Docker en Oracle Linux 7.6.

Hace poco hice la instalación y me encontré con algunas particularidades que tuve que investigar e ir resolviendo.

Aquí les dejo todos los pasos con comandos explicados y los problemas que me encontré en el camino.

1.- Colocarse en la carpeta del repositorio yum.

[oracle@localhost ~]$ cd /etc/yum.repos.d/

1.- Descargar el último public-yum-ol7.repo del repositorio yum de Oracle.

[oracle@localhost yum.repos.d]$ wget http://yum.oracle.com/public-yum-ol7.repo

2.- Actualizar el archivo recién descargado haciendo las siguientes modificaciones. Básicamente es poner enabled=1 en las secciones mencionadas abajo.

[ol7_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

[ol7_UEKR4]
name=Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux $releasever ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

[ol7_optional_latest]
name=Oracle Linux $releasever Optional Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/optional/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

[ol7_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

3.- Ahora intentamos instalar Docker 

[oracle@localhost yum.repos.d]$ yum install docker-engine

Aquí me salió el error: No package docker-engine available.

La causa es que el repositorio de addons no está activado. Hay que verificar que se encuentre con el siguiente comando:

[oracle@localhost yum.repos.d]$ yum repolist

Si no se encuentra ol7_addons en el listado, ejecutar el siguiente comando:

[oracle@localhost yum.repos.d]$ yum-config-manager --enable *addons

Volver a ejecutar el comando yum repolist para verificar que addons aparece en la lista.

Volver a intentar el comando para instalar Docker el cual ya deben poder ejecutar sin problemas.

4.- Activar Docker

[oracle@localhost yum.repos.d]$ systemctl enable docker

5.- Iniciar Docker

[oracle@localhost yum.repos.d]$ systemctl start docker

6.- Algunos comandos para checar que está instalado correctamente.

Checar el estatus.

[oracle@localhost yum.repos.d]$ systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-05-01 18:16:04 EDT; 20s ago
     Docs: https://docs.docker.com
 Main PID: 15250 (dockerd)
   Memory: 37.9M
   CGroup: /system.slice/docker.service
           └─15250 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Checar la versión de Docker.

[oracle@localhost yum.repos.d]$ docker version
Client: Docker Engine - Community
 Version:           19.03.1-ol
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        ead9442
 Built:             Wed Sep 11 06:40:28 2019
 OS/Arch:           linux/amd64
 Experimental:      false


Con los pasos anteriores ya deben tener disponible Docker en Oracle Linux.
Ojo con el uso de sudo en las instrucciones dependiendo con qué usuario lo estén realizando.
Espero les sirva.

martes, 5 de mayo de 2020

Cómo checar la versión del sistema operativo Linux

Cómo checar la versión del sistema operativo Linux


Hola.

Para todos los que hayan trabajado con alguna versión del sistema operativo Linux, en alguna ocasión habrán requerido conocer la información exacta de su sistema.

Esto es particularmente útil cuando vas a realizar la instalación o actualización de algún software. También durante la configuración del sistema o para conocer las particularidades de cada versión.

Pues bien, para checar el nombre y la versión del sistema operativo Linux existen un par de comandos que pueden intentar:

1.- cat /etc/os-release
Alternativamente a la opción uno pueden usar: cat /etc/*-release
2.- hostnamectl

Aquí les dejo los comandos con sus respectivas salidas. Con esta información podrán tomar la decision correcta respecto a sus configuraciones.

hostnamectl

[oracle@localhost oracle]$ hostnamectl
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 9e6407e94b0d4e1f8d899a0cb2b64149
           Boot ID: 825602e5c20944ea8998cb4bf0f0cc00
    Virtualization: kvm
  Operating System: Oracle Linux Server 7.6
       CPE OS Name: cpe:/o:oracle:linux:7:6:server
            Kernel: Linux 4.1.12-124.27.1.el7uek.x86_64
      Architecture: x86-64
[oracle@localhost oracle]$ 

cat /etc/os-release

[oracle@localhost oracle]$ cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="7.6"
ID="ol"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Oracle Linux Server 7.6"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:6:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.6
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.6
[oracle@localhost oracle]$ 

Estos comandos funcionan con prácticamente todas las versiones de sistemas operativos Linux.

Espero les sirva.



lunes, 4 de mayo de 2020

ls -l Mostrar fecha completa con año y hora en Linux

ls -l Cómo mostrar fecha completa con año y hora en Linux


Hola.

Estoy trabajando en un sistema operativo Linux sin interfaz gráfica por lo que todo es a través de comandos.

Necesito saber la fecha de última modificación de un archivo para saber si está obsoleto y puede ser borrado del servidor.

Al moverme entre los directorios y llegar a la ruta del archivo intento listar los archivos con ls -lrt y lo que obtengo es una mezcla de información donde algunos archivos muestran fecha sin hora o la fecha sin año.

Algo como lo siguiente:

[oracle@localhost oracle]$ ls -lrt
-rwxr-xr-x.  1 oracle root         1103  May 31  2019 setsizewrap.sh
-rwxr-xr-x.  1 oracle oinstall     4066 May 31  2019 runTimeEnforceMinScreenSize.sh.redoicon
-rwxr-xr-x.  1 oracle oinstall     3544 May 31  2019 runTimeEnforceMinScreenSize.sh
drwxr-xr-x.  5 oracle oinstall       66   May  4 11:42 workspace
drwxr-xr-x.  6 oracle oinstall     4096 May  4 12:56 Downloads
drwxr-xr-x.  7 oracle oinstall     4096 May  4 19:31 Miarchivo

En mi caso requiero saber el año de modificación de Miarchivo por lo que busqué la instrucción que me de esta información.

Solución.


Tienen que agregar el parámetro --full-time al comando ls para ver la fecha completa.

La instrucción quedaria así:

[oracle@localhost oracle]$ ls -lrt --full-time
-rwxr-xr-x.  1 oracle root         1103 2019-05-31 16:34:01.878522219 -0400 setsizewrap.sh
-rwxr-xr-x.  1 oracle oinstall     4066 2019-05-31 16:41:05.343755364 -0400 runTimeEnforceMinScreenSize.sh.redoicon
-rwxr-xr-x.  1 oracle oinstall     3544 2019-05-31 16:41:05.430757687 -0400 runTimeEnforceMinScreenSize.sh
drwxr-xr-x.  5 oracle oinstall       66 2020-05-04 11:42:36.120857676 -0400 workspace
drwxr-xr-x.  6 oracle oinstall     4096 2020-05-04 12:56:02.410131117 -0400 Downloads
drwxr-xr-x.  7 oracle oinstall     4096 2020-05-04 19:31:26.705341312 -0400 Miarchivo

Como ven la fecha ahora se muestra completa con milésima de segundo y hasta time zone 

Espero les sirva.