[TIP] Compilar y generar un nuevo kernel linux para WSL

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

    [TIP] Compilar y generar un nuevo kernel linux para WSL

    Los kenel de linux (los fuentes) están en la página https://github.com/microsoft/WSL2-Linux-Kernel/releases/

    *Solo válido para WSL2*
    NOTA: Aconseajble hacerlo con Ubuntu WSL..parece que con alguna otra distribución no compila correctamente.

    A día de hoy, el kernel que está distribuido a traves de WU es el 4.19.128-microsoft-standard (se puede ver, ejecutando el comando uname -r en cualquier distribución WSL). Pero como se puede ver en la página de GitHub anterior, ya están los fuentes de otros kernel de la versión 5.

    El bianrio no se localiza en la red. Pero teniendo los fuentes, podemos compilar el kernel y usarlo.

    Para compilarlo, por ejemplo el linux-msft-5.4.81 el cual es el ultimo a dia de hoy, es sencillo: en cualquier distribucion WSL que tengamos instalada (Ubuntu, Kali, o la que sea):

    1) Instalar los paquetes de linux necesarios para la compilacion (solo habria que hacerlo una vez)

    Código:
    sudo apt update && sudo apt -y upgrade
    sudo apt -y install build-essential libncurses-dev bison flex libssl-dev libelf-dev cpu-checker qemu-kvm aria2
    2) Recuperamos el fuente de la pagina anterior que queremos instalar:

    Código:
    aria2c -x 10 https://github.com/microsoft/WSL2-Linux-Kernel/archive/[COLOR=#e67e22][B]linux-msft-5.4.81[/B][/COLOR].tar.gz
    tar -xf WSL2-Linux-Kernel-[COLOR=#e67e22][B]linux-msft-5.4.81[/B][/COLOR].tar.gz
    cd WSL2-Linux-Kernel-[COLOR=#e67e22][B]linux-msft-5.4.81[/B][/COLOR]/
    3) Optimizar el kernel:

    Código:
    cp Microsoft/config-wsl .config
    make menuconfig
    De esta manera, podemos ver las opciones por defecto, e incluso modificarlar. Salimos guarandolas con el nombre .config (fijarse en el punto que precede a config).

    4) Compilar el kernel:

    Código:
    make -j 8
    el parámetro -j 8 indica que usemos para compilar 8 cores. Usar las máximas que tenga vuestro equipo ya que, si no, la compilación usaría por defecto un solo core y se eternizaría compilando.

    5) Copiarlo a nuestra carpeta de usuario:

    Código:
    cp arch/x86/boot/bzImage /mnt/c/Users/<username>/bzImage
    Cambiar <username> por vuestro usuario de windows (como podeis ver, WSL monta los discos de vuestro sistema, en particular el disco c:\ en /mnt/c por lo que se puede usar el comando copy -cp en linux- para copiarlo a nuestro sistema).


    6) Ahora ya en windows, sabemos que el WSL busca un fichero .wslconfig (fijarse en el punto anterior al nombre) en nuestra carpeta de usuario y si existe, hace caso a lo que alli pone para confiruar el WSL 2.

    Por tanto nos creamos con notepad en nuestra carpeta de usuario un fichero de texto llamado .wslconfig con el contenido:

    [wsl2]
    kernel=C:\\Users\\<username>\\bzImage


    Cambiar <username> por vuetrso usuario, y es correcta la sintaxis de usar un doble \\ en la ruta completa a vuestro usuario en dicho fichero.

    Con esto ya está. Ahora, ejecutamos simplemente:

    wsl --shutdown

    Y a continuación arrancar cualquier distribucion de linux WSL. Con el comando uname -r veremos que ha cogido dicho kernel.

    Si queremos en cualquier momento volver al antiguo es tan sencilllo como borrar o renombrar ese archivo .wslconfig
  • jquilezl
    Super Moderator
    • Dec
    • 714

    #2
    En Kali hay que instalar primero Aria2, pues por defecto no incluye el comando aria2c
    sudo apt install aria2

    Al ejecutar make menuconfig me sale el siguiente error:

    user@PC01:~/WSL2-Linux-Kernel-linux-msft-5.4.81$ make menuconfig
    HOSTCC scripts/basic/fixdep
    UPD scripts/kconfig/mconf-cfg
    HOSTCC scripts/kconfig/mconf.o
    HOSTCC scripts/kconfig/lxdialog/checklist.o
    HOSTCC scripts/kconfig/lxdialog/inputbox.o
    HOSTCC scripts/kconfig/lxdialog/menubox.o
    HOSTCC scripts/kconfig/lxdialog/textbox.o
    HOSTCC scripts/kconfig/lxdialog/util.o
    HOSTCC scripts/kconfig/lxdialog/yesno.o
    HOSTCC scripts/kconfig/confdata.o
    HOSTCC scripts/kconfig/expr.o
    LEX scripts/kconfig/lexer.lex.c
    YACC scripts/kconfig/parser.tab.[ch]
    /bin/sh: 1: bison: not found <-------------------------- falta bison
    make[1]: *** [scripts/Makefile.host:17: scripts/kconfig/parser.tab.h] Error 127
    make: *** [Makefile:590: menuconfig] Error 2
    user@PC01:~/WSL2-Linux-Kernel-linux-msft-5.4.81$

    Si a alguien le pasa, hay que instalar bison en Kali, pues no viene por defecto.
    sudo apt install bison

    También es necesario instalar más librerías:
    sudo apt-get install libelf-dev
    sudo apt-get install elfutils

    Y aquí me quedo parado, pues el make -j 24 falla y no hay forma de seguir.
    Editado por última vez por jquilezl; 04/12/2020, 18:25:16.

    Comentario

    • jmtella
      Administrator
      • Nov
      • 19902

      #3
      Originalmente publicado por jquilezl Ver Mensaje
      En Kali hay que instalar primero Aria2, pues por defecto no incluye el comando aria2c
      sudo apt install aria2

      Al ejecutar make menuconfig me sale el siguiente error:

      user@PC01:~/WSL2-Linux-Kernel-linux-msft-5.4.81$ make menuconfig
      HOSTCC scripts/basic/fixdep
      UPD scripts/kconfig/mconf-cfg
      HOSTCC scripts/kconfig/mconf.o
      HOSTCC scripts/kconfig/lxdialog/checklist.o
      HOSTCC scripts/kconfig/lxdialog/inputbox.o
      HOSTCC scripts/kconfig/lxdialog/menubox.o
      HOSTCC scripts/kconfig/lxdialog/textbox.o
      HOSTCC scripts/kconfig/lxdialog/util.o
      HOSTCC scripts/kconfig/lxdialog/yesno.o
      HOSTCC scripts/kconfig/confdata.o
      HOSTCC scripts/kconfig/expr.o
      LEX scripts/kconfig/lexer.lex.c
      YACC scripts/kconfig/parser.tab.[ch]
      /bin/sh: 1: bison: not found <-------------------------- falta bison
      make[1]: *** [scripts/Makefile.host:17: scripts/kconfig/parser.tab.h] Error 127
      make: *** [Makefile:590: menuconfig] Error 2
      user@PC01:~/WSL2-Linux-Kernel-linux-msft-5.4.81$

      Si a alguien le pasa, hay que instalar bison en Kali, pues no viene por defecto.
      sudo apt install bison
      Lo acabo de generar en Ubuntu... y funciona. Posiblemente en Kali le falten librerias...

      Comentario

      • jquilezl
        Super Moderator
        • Dec
        • 714

        #4
        Instalando bison, como indico en la última línea, desaparece el error y funciona, pudiendo guardar el .config

        Comentario

        • jmtella
          Administrator
          • Nov
          • 19902

          #5
          Originalmente publicado por jquilezl Ver Mensaje
          Instalando bison, como indico en la última línea, desaparece el error y funciona, pudiendo guardar el .config
          Pero si miras mi articulko, bison ya se intalaba en el punto 1).

          Comentario

          • jquilezl
            Super Moderator
            • Dec
            • 714

            #6
            me había saltado esa línea. De todas formas, se queda en el make con errores. Lo haré en Ubuntu,

            Comentario

            • jmtella
              Administrator
              • Nov
              • 19902

              #7
              Originalmente publicado por jquilezl Ver Mensaje
              me había saltado esa línea. De todas formas, se queda en el make con errores. Lo haré en Ubuntu,
              Posiblemente porque te falten todo el resto de librerias que debias haber instalado en el 1)

              Comentario

              • jmtella
                Administrator
                • Nov
                • 19902

                #8
                Originalmente publicado por jmtella Ver Mensaje

                Posiblemente porque te falten todo el resto de librerias que debias haber instalado en el 1)
                Y funciona perfectamente...

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

Nombre:	wsl-kernel.png
Visitas:	483
Size:	16,8 KB
ID:	43456

                Comentario

                • noSign
                  Super Moderator
                  • Dec
                  • 4151

                  #9
                  Originalmente publicado por jmtella Ver Mensaje

                  Lo acabo de generar en Ubuntu... y funciona. Posiblemente en Kali le falten librerias...
                  Me salta el error #127 en Kali.:

                  Como dices faltan librerias (bc)
                  sudo apt-get install bc

                  Ahora, 3 horitas de nada para compilar con un i7

                  Pero no consigo reconozca ese bzImage (sospecho del .wslconfig con extensión .txt al crearlo con notepad)

                  La ruta de la carpeta mia kali
                  C:\Users\<username>\AppData\Local\Packages\KaliLin ux.54290C8133FEE_ey8k8hqnwqnmg
                  C:\Users\<username>\bzImage



                  Comentario

                  • jmtella
                    Administrator
                    • Nov
                    • 19902

                    #10
                    Originalmente publicado por noSign Ver Mensaje

                    Me salta el error #127 en Kali.:

                    Como dices faltan librerias (bc)
                    sudo apt-get install bc

                    Ahora, 3 horitas de nada para compilar con un i7

                    Pero no consigo reconozca ese bzImage (sospecho del .wslconfig con extensión .txt al crearlo con notepad)

                    La ruta de la carpeta mia kali
                    C:\Users\<username>\AppData\Local\Packages\KaliLin ux.54290C8133FEE_ey8k8hqnwqnmg
                    C:\Users\<username>\bzImage


                    Coño... sin TXT.

                    SI estas con un cmd posicinado en tu usuario, simplemente desde el:

                    notepad .wslconfig

                    Lo crea sin el txt.,... lo cra tal y como lo escribas...

                    NOTA: y cuidado en la sintaxis cuando establecemos la ruta... debe ser con doble \

                    [wsl2]
                    kernel=C:\\Users\\<username>\\bzImage

                    Comentario

                    • noSign
                      Super Moderator
                      • Dec
                      • 4151

                      #11
                      Originalmente publicado por jmtella Ver Mensaje

                      Coño... sin TXT.

                      SI estas con un cmd posicinado en tu usuario, simplemente desde el:

                      notepad .wslconfig

                      Lo crea sin el txt.,... lo cra tal y como lo escribas...

                      NOTA: y cuidado en la sintaxis cuando establecemos la ruta... debe ser con doble \

                      [wsl2]
                      kernel=C:\\Users\\<username>\\bzImage
                      Correcto sin .txt
                      Pero sigue sin tirar kali de ello.

                      Dentro de Kali he copiado el kernel y de paso lo utilizo con Ubuntu para no repetir las 3 horas de compilación.
                      cp WSL2-Linux-Kernel-linux-msft-5.4.81.tar.gz /mnt/c/Users/<username>/WSL2-Linux-Kernel-linux-msft-5.4.81.tar.gz

                      Comentario

                      • jmtella
                        Administrator
                        • Nov
                        • 19902

                        #12
                        Originalmente publicado por noSign Ver Mensaje

                        Correcto sin .txt
                        Pero sigue sin tirar kali de ello.

                        Dentro de Kali he copiado el kernel y de paso lo utilizo con Ubuntu para no repetir las 3 horas de compilación.
                        cp WSL2-Linux-Kernel-linux-msft-5.4.81.tar.gz /mnt/c/Users/<username>/WSL2-Linux-Kernel-linux-msft-5.4.81.tar.gz
                        EL bzimage lo tienes que tener en tu windows en c:\Users\<TU USUARIO> ¿es así?... si es así, dejam aqui el contenido de .wslconfig que has dejado tambien en tu usuario...

                        Y recuerda, que tienes que hacer un

                        wsl --shutdown
                        (o bien reiniciar)

                        ya que si no no toma el nuevo...,

                        Comentario

                        • jmtella
                          Administrator
                          • Nov
                          • 19902

                          #13
                          Originalmente publicado por jmtella Ver Mensaje

                          EL bzimage lo tienes que tener en tu windows en c:\Users\<TU USUARIO> ¿es así?... si es así, dejam aqui el contenido de .wslconfig que has dejado tambien en tu usuario...

                          Y recuerda, que tienes que hacer un

                          wsl --shutdown
                          (o bien reiniciar)

                          ya que si no no toma el nuevo...,
                          Es que no es dentro de Kali... es en WINDOWS.... el kernel todas las distribuciones toman el de windows (el que esté en la ruta indicada por el .wslconfig), y es idéntico para todo, independientemente de que en que distribución esté generado -compilado-)... Mira mi otro mensaje...

                          Comentario

                          • noSign
                            Super Moderator
                            • Dec
                            • 4151

                            #14
                            Originalmente publicado por jmtella Ver Mensaje

                            EL bzimage lo tienes que tener en tu windows en c:\Users\<TU USUARIO> ¿es así?... si es así, dejam aqui el contenido de .wslconfig que has dejado tambien en tu usuario...

                            Y recuerda, que tienes que hacer un

                            wsl --shutdown
                            (o bien reiniciar)

                            ya que si no no toma el nuevo...,
                            Sip, bzimage en <username> y el .wslconfig mismo sitio
                            wsl --shutdown no lo reconoce, utilizo exit
                            wsl -l -v (aparecen las dos distros ubuntu/kali stopped)

                            Comentario

                            • jmtella
                              Administrator
                              • Nov
                              • 19902

                              #15
                              Originalmente publicado por noSign Ver Mensaje

                              Sip, bzimage en <username> y el .wslconfig mismo sitio
                              wsl --shutdown no lo reconoce, utilizo exit
                              wsl -l -v (aparecen las dos distros ubuntu/kali stopped)
                              Supongo que todo lo tienes en version 2... entonces el wsl --shutdown en windows lo tiene que reconocer... y auqnue aparezcan como stopped, si no se hace un shutdown del wsl no lo tomará...

                              Comentario

                              Trabajando...
                              X