[TIP] WSL 2 y LXD

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jmtella
    Administrator
    • Nov
    • 20685

    [TIP] WSL 2 y LXD

    LXD es un Hypervisor de Ubuntu con el cual podemos crear contendores dentro de un Ubuntu de una manera sencilla y rápida. Los contenedores se ejecutan a una velocidad y prestaciones asombrosas.

    Aconsejo para poder entender este arciulo ver mi otro TIP https://jmtella.com/foro/forum/ejerc...ultipass-y-lxd en el cual usamos multippass en windows para crear una virtual de Ubuntu capaz de tener LXD. Pero mi pregunta, cuando realicé dicho practica, es ¿seria posible que en vez de una virtual fuese un WSL 2 en Windows 10?

    En Google encontré un par de articulos que afirmaban haberlo hecho, uno de ellos haciendolo a lo bruto sin interfaz de red y usando el viproxy, el cual no funcionaba y otro que parecia mas serio: https://wsl.dev/wsl2-lxd-funtoo/ que podeis probarm y vereis que no funciona. Aunque es cierto que en ese articulo hay alguina cosa interesante que no conocia.


    REQUISITOS:

    Windows 10 19041: es decir la 20H1 como minimo, ya que necesita wsl 2.

    Debenos tener instalado el WSL en las caracteristicas de windows. Una vez instalado, ejecutar en una consola de comandos;

    wsl --set-default-version 2

    De esta forma el WSL será version 2. Seguir los mensajes si informase de alguna necesidad previa.

    Posteriormente instalar de la tienda el Ubuntu 18.04 Tiene que ser esa version, y tiene que estar recien instalado. Lo comento, por si tuvieseis una vieja version que aunque esté actualidada, no vale. En ese caso, desistalarla y volverla a instalar.


    ACTIVAR LXD

    Abrimos el Ubunto 18.04 instalado y ejecutamos:

    Código:
    sudo service lxd start
    Esto tendremos que hacerlo a manu siempre que arranquemos ese Ubuntu. Dicho servicio no puede ponerse en automatico en un WSL ya que no arranca con el systemd estandar de Linux.

    Damos permiso a nuestro usuario:

    Código:
    sudo usermod -aG lxd $USER
    Y ahora configurar: por una unica vez tedremos que ejecutar:

    Código:
    sudo lxd init
    Este punto es muy delicado ya que no admite marcha atras: ahora nos solictirá datos de configuracion, hay que dejar todos por defecto, excepto los dos que marco en rojo, y ademas introducir una password de confiruacion que luego se usará para acceso seguroi desde remoto.

    Código:
    Would you like to use LXD clustering? (yes/no) [default=no]:
    Do you want to configure a new storage pool? (yes/no) [default=yes]:
    Name of the new storage pool [default=default]:
    Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]:
    Create a new BTRFS pool? (yes/no) [default=yes]:
    Would you like to use an existing block device? (yes/no) [default=no]:
    Size in GB of the new loop device (1GB minimum) [default=50GB]:
    Would you like to connect to a MAAS server? (yes/no) [default=no]:
    Would you like to create a new local network bridge? (yes/no) [default=yes]: y
    What should the new bridge be called? [default=lxdbr0]:
    What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
    What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: [B][COLOR=#e74c3c][SIZE=16px]none[/SIZE][/COLOR][/B]
    Would you like LXD to be available over the network? (yes/no) [default=no]: [B][SIZE=16px][COLOR=#e74c3c]yes[/COLOR][/SIZE][/B]
    Address to bind LXD to (not including port) [default=all]:
    Port to bind LXD to [default=8443]:
    Trust password for new clients:  [B][COLOR=#e74c3c][SIZE=16px]-aqui teclear la password para los clientes-[/SIZE][/COLOR][/B]
    Again:
    Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
    Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
    Con esto ya podemos entonces crearnos los contenedores dentro de ese WSL 2, el primero por ejemplo:

    Código:
    lxc launch ubuntu:18.04 first
    Lo cual nos va a crear un container llamado "first" dentro de esa virtual (virtual de virtual con LXD).

    Podriamos crear mas, pero con ese nos vale de momento.

    Podemos ver los container creados con:

    Código:
    lxc list
    Con lxc help podeis ver lo que es capaz de hacer LXC

    Si habeis hecho el ejercicio que he citando del MULTIPASS al comienzo de este articulo, ya tendreis instalado el LXC para windows, su no lo habeis hecho, realizar estos:


    [SI NO SE HA INSTALADO PREVIAMENTE LCX PARA WINDOWS]

    Volvemos a nuestra maquina princiapal, y nos descargamos precisamente el LXD del articulo anterior...

    https://ci.appveyor.com/project/lxc/...ster/artifacts

    No necesita instalacion, solamente lo desempaquetmos y lo dejamos en alguna carpeta que esté en nuestro path.

    Esto lo que instala es un LXC para windows... con lo cual podremos acceder al contenedor o contenedores que estan dentro de esa virtual.

    Antes de lanzarlo hay que confirarlo, para ello, en una consola de comandos, nada mas arrancarla, es decir que se posicione en nuestro usuario, ejecutamos:

    Código:
    md .config\lxc\ lxc
    lxc remote add my-images-wsl IP_MAQUINA_VIRTUAL
    lxc remote switch my-images-wsl
    lxc list
    lxc exec <image> -- /bin/bash
    La ultima linea sustituir &lt;image&gt; por el nombre del contenedor, es este caso lo hemos creado como "first", justo el comando anterior en esa secuancia nos dirá los creados.

    Una pega, es que con esta linea:

    lxc remote add my-images IP_MAQUINA_VIRTUAL

    Se confiura para una IP... y cada vez que arranquemos la virtual con multipass, tendrá diferente IP ya que windows, el default switch por defecto cada vez le da una. Para cambiarlo en una sesión posterior, simplemente:


    [SI YA SE HABIA INSTALADO PREVIAMENTE LCX PARA WINDOWS Y CONFIGURADO PARA MULTIPASS]

    En ese caso simplemente tendremos que añadir una nueva entrada de configuracion con:

    Código:
    remote add my-images-wsl IP_MAQUINA_VIRTUAL
    lxc remote switch my-images-wsl
    ---------

    Fijaros, para los que hayan hecho los del MULTIPASS que ahora tenemos dos entradas de imagenes:

    my-images para MULTIPASS
    my-images-wsl para wsl 2

    Para cambiar de uno a otro se puede hacer con lcx remote switch &lt;image&gt;


    Ir practicando con esto, y comentamos las dudas.
  • jquilezl
    Super Moderator
    • Dec
    • 724

    #2
    Algo tengo escoñado. He vuelto a seguir los pasos, conectándome a la nueva ip como indicas. He creado un nuevo contenedor, asegurándome de dejar ipv4 y no ipv6, y le da igual. En el listado tampoco me pone ip
    Haga clic en la imagen para ver una versión más grande  Nombre:	first2.JPG Visitas:	0 Size:	44,2 KB ID:	41050
    Haga clic en la imagen para ver una versión más grande

Nombre:	remotelist.JPG
Visitas:	416
Size:	73,1 KB
ID:	41051
    Editado por última vez por jquilezl; 10/04/2020, 16:32:44.

    Comentario

    • jquilezl
      Super Moderator
      • Dec
      • 724

      #3
      Y sin embargo, el contenedor creado en multipass sí tiene ip de los dos tipos

      Haga clic en la imagen para ver una versión más grande  Nombre:	rl2.JPG Visitas:	0 Size:	103,4 KB ID:	41053
      Lo he hecho igual en ambos casos, la única diferencia es ponerle none al ipv6 en wsl.
      Editado por última vez por jquilezl; 10/04/2020, 16:39:49.

      Comentario

      • jmtella
        Administrator
        • Nov
        • 20685

        #4
        Tiene que tener IP... Empueiza de cero, y es importante estas repuestas:


        What should the new bridge be called? [default=lxdbr0]:
        What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
        What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: none
        Would you like LXD to be available over the network? (yes/no) [default=no]:yes

        Haga clic en la imagen para ver una versión más grande

Nombre:	lcx-2png.png
Visitas:	425
Size:	27,1 KB
ID:	41055

        Comentario

        • jmtella
          Administrator
          • Nov
          • 20685

          #5
          ejecuta un ifconfig en el WSL, quiero verlo, y wntra en el contendor y ejecuta otro, y me pones aqui los dos.

          Comentario

          • jquilezl
            Super Moderator
            • Dec
            • 724

            #6
            Acabo de desinstalar el ubuntu lts y vuelvo a empezar

            Comentario

            • jmtella
              Administrator
              • Nov
              • 20685

              #7
              Originalmente publicado por jquilezl Ver Mensaje
              Acabo de desinstalar el ubuntu lts y vuelvo a empezar
              Tendras que actualizar luego el lxc de la principal ya que el certificado no te servirá.

              lxc remote list

              te mostrara los profiles (hay unos genericos) y los dos tuyos.

              Con lxc remove puede borrar el antiguo...

              Comentario

              • jquilezl
                Super Moderator
                • Dec
                • 724

                #8
                jquilezl@PC01:~$ sudo lxc list
                [sudo] password for jquilezl:
                +-------+---------+------+------+------------+-----------+
                | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
                +-------+---------+------+------+------------+-----------+
                | first | RUNNING | | | PERSISTENT | 0 |
                +-------+---------+------+------+------------+-----------+
                jquilezl@PC01:~$ ifconfig
                eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                inet 172.20.14.64 netmask 255.255.240.0 broadcast 172.20.15.255
                inet6 fe80::215:5dff:fe9c:ae66 prefixlen 64 scopeid 0x20<link>
                ether 00:15:5d:9c:ae:66 txqueuelen 1000 (Ethernet)
                RX packets 134097 bytes 198892452 (198.8 MB)
                RX errors 0 dropped 0 overruns 0 frame 0
                TX packets 14169 bytes 945242 (945.2 KB)
                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
                inet 127.0.0.1 netmask 255.0.0.0
                inet6 ::1 prefixlen 128 scopeid 0x10<host>
                loop txqueuelen 1000 (Local Loopback)
                RX packets 0 bytes 0 (0.0 B)
                RX errors 0 dropped 0 overruns 0 frame 0
                TX packets 0 bytes 0 (0.0 B)
                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                lxdbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                inet 10.237.165.1 netmask 255.255.255.0 broadcast 0.0.0.0
                inet6 fe80::48e4:f7ff:fe3f:fbb3 prefixlen 64 scopeid 0x20<link>
                ether fe:66:f0:2d:75:46 txqueuelen 1000 (Ethernet)
                RX packets 12 bytes 768 (768.0 B)
                RX errors 0 dropped 0 overruns 0 frame 0
                TX packets 15 bytes 1186 (1.1 KB)
                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                veth9QI1PR: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                inet6 fe80::fc66:f0ff:fe2d:7546 prefixlen 64 scopeid 0x20<link>
                ether fe:66:f0:2d:75:46 txqueuelen 1000 (Ethernet)
                RX packets 12 bytes 936 (936.0 B)
                RX errors 0 dropped 0 overruns 0 frame 0
                TX packets 16 bytes 1256 (1.2 KB)
                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                jquilezl@PC01:~$

                Comentario

                • jquilezl
                  Super Moderator
                  • Dec
                  • 724

                  #9
                  PS C:\Users\jquilezl> wsl -l -v
                  NAME STATE VERSION
                  * Ubuntu-19.10 Stopped 2
                  kali-linux Stopped 2
                  Ubuntu-18.04 Running 2
                  PS C:\Users\jquilezl>

                  Después de desinstalar el 18.04 y reiniciar, no aparecía.

                  Comentario

                  • jquilezl
                    Super Moderator
                    • Dec
                    • 724

                    #10
                    jquilezl@PC01:~$ lxc exec first bash
                    root@first:~# ifconfig
                    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
                    inet6 fe80::216:3eff:fe23:91c6 prefixlen 64 scopeid 0x20<link>
                    ether 00:16:3e:23:91:c6 txqueuelen 1000 (Ethernet)
                    RX packets 17 bytes 1326 (1.3 KB)
                    RX errors 0 dropped 0 overruns 0 frame 0
                    TX packets 13 bytes 1006 (1.0 KB)
                    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                    lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
                    inet 127.0.0.1 netmask 255.0.0.0
                    inet6 ::1 prefixlen 128 scopeid 0x10<host>
                    loop txqueuelen 1000 (Local Loopback)
                    RX packets 0 bytes 0 (0.0 B)
                    RX errors 0 dropped 0 overruns 0 frame 0
                    TX packets 0 bytes 0 (0.0 B)
                    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

                    root@first:~#

                    Comentario

                    • jmtella
                      Administrator
                      • Nov
                      • 20685

                      #11
                      Dentro del contenedor: ejecuta:

                      dhclient

                      A ver...

                      Comentario

                      • jquilezl
                        Super Moderator
                        • Dec
                        • 724

                        #12
                        Bingo, ha sido hacerlo y el ifconfig ya me da ipv4 en eth0

                        Comentario

                        • jmtella
                          Administrator
                          • Nov
                          • 20685

                          #13
                          Originalmente publicado por jquilezl Ver Mensaje
                          Bingo, ha sido hacerlo y el ifconfig ya me da ipv4 en eth0
                          No se por qué no estaba arrancando el dhcp client ....

                          SI alguna vez te pasa que desde la principal no ves la IPv4, puedes hacerlo desde la principal (wsl) con:

                          lxc exec <contendor> dhclient

                          Sin necesidar de entrar a ejecutarlo.

                          Vale, ahora ya puedes poner la instalcion (y elimianr la vieja) en el lxc de la maquina host.

                          Y para mañana, dejaré un script que automatiocamente te asigna las IP's tanto para el multipass como para el Wsl de forma automatica al arrancar tu windos. Acuerdate que en el WSL sientre tendras que arranca a mano el servicio lxd: sudo service lxd start

                          Comentario

                          Trabajando...
                          X