Era un día tranquilo y feliz con las actualizaciones habituales, en mi pc tenía la instalación de docker y varias imágenes que utilizaba en mi tiempo libre, hasta que llego febrero y el kernel 4.15 CHAN!
Adios instalación de docker 😮
Para revisar si docker puede o tiene las condiciones de ejecutarse bien:
todo! como usuario normal de linux
ó
$ ./check-config.sh (si usas bash por defecto)
En mi instalación estaba deshabilitado la opción VSYSCALL_EMULATE por razones de seguridad, entonces hay 3 formas de editar parámetros:
A) COMPILAR EL KERNEL CON LA NUEVA CONFIG
B) PASAR EN TIEMPO DE EJECUCIÓN EN EL BOOT EL FLAG vsyscall=emulate
C) AGREGAR EL PARAMETRO AU VIVO con sysctl, de esta forma no encontré como editarlo, yo lo pasaba así
$ sysctl vsyscall=emulate
Y como no es la forma correcta, o el archivo vsyscal no existía en /proc sino en /sys no funcionaba, más adelante revisaré.
FORMA A: compilando el kernel con la herramienta asp, (hay que instalarla con pacman -S asp)
$ mkdir ~/kernelbuild
$ cd ~/kernelbuild
$ asp export linux
$ makepkg -s (genera el paquete de arch)
# pacman -U paquetedeArchConKernelNuevo.tar.xz
Ahora con estos pasos toma la misma config que tiene el sistema, en caso de compilar un kernel con una configuración diferente se puede hacer de varias formas por cli o editando el archivo .config:
Paso a paso explicado:
1 - editar una por una por un menu cli (mucho tiempo de analizar si necesitas cada opcion) para esto hay que descomentar el archivo ~/kernelbuild/linux/PKGBUILD y descomentar la opcion que se quiere usar.
# load configuration
# Configure the kernel. Replace the line below with one of your choice.
#make menuconfig # CLI menu for configuration
#make nconfig # new CLI menu for configuration
#make xconfig # X-based configuration
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
2 - editar el archivo ~/kernelbuild/linux/config que tiene todas las opciones estandars en el kernel de archlinux y agregar o eliminar la que molesta con docker.
3 - hacer makepkg -g >> PKGBUILD , esto toma los string de verificación de integridad y los actualiza, sino lo hacemos nos va a dar un error al editar el archivo .config cambiamos el archivos y tiene que generar un nuevo string
En mi caso yo usé esto:
0 - editar archivo config
2 - $ makepkg -s
3 - # pacman -U kernel-nuevo-con-cosas-específicas.tar,xz
en caso que no tengamos una llave gpg almacenada hacer:
gpg --recev hashIDllaveGPG
# pacman -U linux-4.15.7-1-x86_64.pkg.tar.xz
y probar ejecutar:
- run "docker run --rm -it mongo:3.0"
FORMA B: Editar los parámetros pasados al kernel al inicio del sistema operativo.
/etc/default/grub
# GRUB boot loader configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch suck"
GRUB_CMDLINE_LINUX_DEFAULT="quiet vsyscall=emulate"
y revisamos que la línea se haya agregado al iniciar sesión:
j3nnn1:~/ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-linux root=UUID=dc9d4c3e-c8d2-4e88-b66d-f2fd3cdff1bc rw quiet vsyscall=emulate
Luego ejecutar docker normalmente!
- run "docker run --rm -it mongo:3.0"
La forma B es la más rápida!
😁
Adios instalación de docker 😮
Para revisar si docker puede o tiene las condiciones de ejecutarse bien:
$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh >> check-config.sh
todo! como usuario normal de linux
$ bash check-config.shó
$ ./check-config.sh (si usas bash por defecto)
En mi instalación estaba deshabilitado la opción VSYSCALL_EMULATE por razones de seguridad, entonces hay 3 formas de editar parámetros:
A) COMPILAR EL KERNEL CON LA NUEVA CONFIG
B) PASAR EN TIEMPO DE EJECUCIÓN EN EL BOOT EL FLAG vsyscall=emulate
C) AGREGAR EL PARAMETRO AU VIVO con sysctl, de esta forma no encontré como editarlo, yo lo pasaba así
$ sysctl vsyscall=emulate
Y como no es la forma correcta, o el archivo vsyscal no existía en /proc sino en /sys no funcionaba, más adelante revisaré.
FORMA A: compilando el kernel con la herramienta asp, (hay que instalarla con pacman -S asp)
$ mkdir ~/kernelbuild
$ cd ~/kernelbuild
$ asp export linux
$ makepkg -s (genera el paquete de arch)
# pacman -U paquetedeArchConKernelNuevo.tar.xz
Ahora con estos pasos toma la misma config que tiene el sistema, en caso de compilar un kernel con una configuración diferente se puede hacer de varias formas por cli o editando el archivo .config:
Paso a paso explicado:
1 - editar una por una por un menu cli (mucho tiempo de analizar si necesitas cada opcion) para esto hay que descomentar el archivo ~/kernelbuild/linux/PKGBUILD y descomentar la opcion que se quiere usar.
# load configuration
# Configure the kernel. Replace the line below with one of your choice.
#make menuconfig # CLI menu for configuration
#make nconfig # new CLI menu for configuration
#make xconfig # X-based configuration
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
3 - hacer makepkg -g >> PKGBUILD , esto toma los string de verificación de integridad y los actualiza, sino lo hacemos nos va a dar un error al editar el archivo .config cambiamos el archivos y tiene que generar un nuevo string
En mi caso yo usé esto:
0 - editar archivo config
-CONFIG_X86_VSYSCALL_EMULATION=y
+# CONFIG_X86_VSYSCALL_EMULATION is not set
-CONFIG_LEGACY_VSYSCALL_EMULATE=y
-# CONFIG_LEGACY_VSYSCALL_NONE is not set
+# CONFIG_LEGACY_VSYSCALL_EMULATE is not set
+CONFIG_LEGACY_VSYSCALL_NONE=y
1 - $ makepkg -g >> PKBUILD (actualizar los hash de verificacion de archivos)2 - $ makepkg -s
3 - # pacman -U kernel-nuevo-con-cosas-específicas.tar,xz
en caso que no tengamos una llave gpg almacenada hacer:
gpg --recev hashIDllaveGPG
# pacman -U linux-4.15.7-1-x86_64.pkg.tar.xz
y probar ejecutar:
- run "docker run --rm -it mongo:3.0"
FORMA B: Editar los parámetros pasados al kernel al inicio del sistema operativo.
/etc/default/grub
# GRUB boot loader configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch suck"
GRUB_CMDLINE_LINUX_DEFAULT="quiet vsyscall=emulate"
Luego de editar la configuración del grub hay que sobreescribir el archivo /boot/grub/grub.cfg con
$ grub-mkconfig -o /boot/grub/grub.cfg
j3nnn1:~/ $ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-linux root=UUID=dc9d4c3e-c8d2-4e88-b66d-f2fd3cdff1bc rw quiet vsyscall=emulate
- run "docker run --rm -it mongo:3.0"
La forma B es la más rápida!
😁