Copyright
Copyright © José
Luis Lara Carrascal 2007-2024
Sumario
Introducción
Preliminares
IASL
VirtualBox
VirtualBox Extension Pack
VirtualBox Guest Additions
Iniciamos VirtualBox
Enlaces
Introducción
Para hablar de VirtualBox
conviene aclarar algo fundamental, estamos hablando de un virtualizador
y no de un emulador.
La diferencia reside en que los emuladores no permiten ejecutar
directamente el código del sistema huesped emulado, sino que
hacen una translación de las instrucciones de la
máquina
emulada. VirtualBox
lo que hace es crear una máquina virtual del sistema
operativo que va a virtualizar
ejecutando posteriormente el código de éste sin
modificar, esto hace que su funcionamiento sea menos problemático y
más rápido que el tradicional sistema de
emulación. En este manual trataremos su
instalación desde
cero, además de la de algunas dependencias requeridas para
la
misma.
Preliminares
1) Comprobar que la ruta de instalación de los binarios del programa la tenemos en nuestro PATH
Abrimos una ventana de terminal y ejecutamos el siguiente comando:
[jose@Fedora-18 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jose/bin
|
Si no aparece entre las rutas mostradas el directorio /usr/local/bin, abrimos un editor de texto y añadimos lo siguiente:
#!/bin/sh
export PATH=/usr/local/bin:$PATH |
Lo guardamos con el nombre variables.sh, y lo instalamos en /etc/profile.d.
$ su -c "install -m755 variables.sh /etc/profile.d"
|
Tenemos que cerrar el emulador de terminal y volverlo a abrir para que
la variable de entorno aplicada sea efectiva. Es conveniente guardar
una copia de este script para posteriores
instalaciones de nuestro sistema, teniendo en cuenta que es el que se
va a utilizar a partir de ahora en todos los manuales de esta web, para
establecer variables de entorno globales, excepto en aquellas que
sólo afectan al usuario, en las que se utilizará el
archivo de configuración personal, ~/.bashrc.
La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.
2) Comprobar que la variable de entorno 'XDG_DATA_DIRS' incluye el directorio /usr/local/share
Esta variable se aplica para que los archivos desktop
ubicados en un directorio específico del sistema puedan ser
leídos por los menús de entornos gráficos
como XFce 4, o
paneles como LXPanel o Fbpanel.
Este aspecto es bastante delicado porque cada distribución es un
mundo y lo mejor que podemos hacer es establecer una variable de
entorno global que incluya todos los directorios predefinidos del
sistema que incluyen archivos desktop, siempre y cuando el directorio /usr/local/share
no esté incluido por defecto en la distribución de turno.
Para saberlo basta abrir el menú de aplicaciones en cualquiera
de los programas antes comentados y comprobar que aparece la entrada
correspondiente a la aplicación tratada en este manual. Si no es
así, en el mismo archivo /etc/profile.d/variables.sh, añadimos lo que está en rojo:
#!/bin/sh
export PATH=/usr/local/bin:$PATH
export XDG_DATA_DIRS=/usr/share:/usr/local/share:$HOME/.local/share:$XDG_DATA_DIRS |
3) Desinstalar versiones anteriores del programa ubicadas en el directorio /usr
Aún en el caso de que la versión a compilar la vayamos a
instalar en el mismo directorio que la que proporciona la
distribución, siempre se debe desinstalar previamente la versión antigua, para evitar conflictos innecesarios.
IASL
Compilador de Intel
indicado para la programación con ACPI.
Instalación
Dependencias
Herramientas
de Compilación
Entre paréntesis la
versión con la que se ha compilado IASL para la elaboración de este documento.
* GCC - (14.1.0)
* Make - (4.4.1)
* Flex - (2.6.4)
* Bison - (3.8.2)
Descarga
acpica-unix-20240321.tar.gz
Extracción
$ tar zxvf
acpica-unix-20240321.tar.gz
$ cd acpica-unix-20240321/generate/unix
|
Compilación
Instalación
como root
VirtualBox
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la
versión con la que se ha compilado VirtualBox
para la elaboración de este documento.
* GCC - (14.2.0)
* IASL - (20240321)
* Make - (4.4.1)
* Yasm - (1.3.0)
* Pkg-config - (0.29.2)
Librerías
de Desarrollo
*
Xorg - (7.7 / xorg-server 21.1.13)
LibX11 - (1.8.10)
LibXcursor - (1.2.2)
LibXext - (1.3.6)
LibXinerama - (1.1.5)
LibXmu - (1.2.1)
LibXrandr - (1.5.4)
* ALSA - (1.2.12)
* Curl - (8.10.1)
* GLU - (9.0.3)
* JDK - (1.8.0_421)
* Libcap - (2.69)
* Libdevmapper - (1.02.197)
* Libglvnd - (1.7.0)
* Libgsoap - (2.8.123)
* LibIDL - (0.8.14)
* Libopus - (1.5.2)
* Libpng - (1.6.44)
* Libtmps - (0.9.6)
* Libvpx - (1.14.1)
* Libxslt - (1.1.42)
* Libxml2 - (2.11.9)
* OpenSSL - (3.3.2)
* PulseAudio - (17.0)
* Python - (2.7.18)
* Qt6 - (6.8.0)
* SDL - (1.2.15)
* Zlib - (1.3.1)
* Código fuente del kernel - (6.11.3-ml)
Aplicaciones
* Makeself - (2.4.5) [1]
[1]
Tenemos que crear un enlace simbólico sin la extensión
'.sh' al script, ya que de lo contrario, el script de
configuración de VirtualBox no lo detectará. Si por ejemplo, lo tenemos instalado en /usr/local/bin, el comando sería el siguiente:
$ su -c "ln -s makeself.sh /usr/local/bin/makeself"
|
Descarga
VirtualBox-7.1.4.tar.bz2 | jdk-8u421-linux-x64.tar.gz
Optimizaciones
$ export
{C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'
|
Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla: |
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado.
* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.
* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
|
Valores |
CPU |
Genéricos |
generic |
Produce un código
binario optimizado para la mayor parte de procesadores existentes.
Utilizar este valor si no sabemos el nombre del procesador que tenemos
en nuestro equipo. Este valor sólo es aplicable en la
opción '-mtune=', si utilizamos GCC. Esta opción está disponible a partir de GCC 4.2. |
native |
Produce un código
binario optimizado para el procesador que tengamos en nuestro sistema,
siendo éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a partir de GCC 4.2. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a partir de GCC 8. |
x86-64-v2 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3) y extensiones
64-bit. Esta opción está disponible a partir de GCC 11. |
x86-64-v3 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C,
FMA, LZCNT, MOVBE, XSAVE, XSAVEC, FMA4) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11. |
x86-64-v4 |
Procesador
genérico con con soporte de instrucciones X86-64 (MMX, SSE,
SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C,
FMA, LZCNT, MOVBE, XSAVE, XSAVEC, AVX512*, FMA4) y extensiones 64-bit.
Esta opción está disponible a partir de GCC 11. |
Intel |
alderlake |
Intel Alderlake con
soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD,
AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD,
CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16,
AMX-TILE, AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11. |
arrowlake |
Intel Arrow Lake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 14. |
arrowlake-s |
Intel Arrow Lake S con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD,
AVXVNNIINT16, SHA512, SM3, SM4 y extensiones 64-bit. Esta opción
está disponible a partir de GCC 14. |
atom |
Intel Atom
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la opción bonnell. |
bonnell |
Intel Bonnell con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones
64-bit. Esta opción está disponible a partir de GCC 4.9. |
broadwell |
Intel Broadwell con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta
opción está disponible a partir de GCC 4.9. |
cannonlake |
Intel Cannonlake Server
con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, UMIP y extensiones 64-bit. Esta opción
está disponible a partir de GCC 8. |
cascadelake |
Intel Cascadelake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 9. |
clearwaterforest |
Intel Clearwater Forest
con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB,
MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2,
F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET,
KL, WIDEKL, AVX-VNNI, ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8,
AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4, USER_MSR,
PREFETCHI y extensiones 64-bit. Esta opción está
disponible a partir de GCC 14. |
cooperlake |
Intel Cooperlake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI,
AVX512BF16 y extensiones 64-bit. Esta opción está
disponible a partir de GCC 10. |
core2 |
Intel Core2
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la opci´n haswell. |
core-avx-i |
Intel Core (ivyBridge)
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones
64-bit. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la opci´n ivybridge. |
corei7 |
Intel Core i7
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y
SSE4.2 y extensiones 64-bit. Soporta también los procesadores
Intel Core i3 e i5. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la opci´n nehalem. |
corei7-avx |
Intel Core i7 con
soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
AVX, AES y PCLMUL y extensiones 64-bit. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está
disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la opci´n sandybridge. |
emeraldrapids |
Intel Emerald Rapids. Esta opción está disponible a partir de GCC 13 y es equivalente a la opción sapphirerapids. |
goldmont |
Intel Goldmont con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE y extensiones
64-bit. Esta opción está disponible a partir de GCC 9. |
goldmont-plus |
Intel Goldmont Plus con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE,
RDPID, SGX, UMIP y extensiones 64-bit. Esta opción está
disponible a partir de GCC 9. |
grandridge |
Intel Grand Ridge con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, RAOINT y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 13. |
graniterapids |
Intel Grand Ridge con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI,
VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ,
PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT,
ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR,
AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16, AVX512BF16,
AMX-FP16, PREFETCHI y extensiones 64-bit. Esta opción
está disponible a partir de GCC 13. |
graniterapids-d |
Intel Granite Rapids D con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND,
F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW,
AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI,
VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ,
PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE,
WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8,
AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI, AMX-COMPLEX y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 14. |
haswell |
Intel Haswell con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
i686 |
Produce un código
binario optimizado para la mayor parte de procesadores compatibles con
la serie 80686 de Intel. Todos los actuales lo son. |
icelake-client |
Intel Icelake Client con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES y extensiones 64-bit. Esta
opción está disponible a partir de GCC 8. |
icelake-server |
Intel Icelake Server con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 8. |
intel |
Intel Haswell y
Silvermont. Este valor sólo es aplicable en la
opción '-mtune='. Esta opción está disponible
a partir de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con
soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones
64-bit. Esta opción está disponible a partir de GCC 4.9. |
knl |
Intel Knights Landing con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 5. |
knm |
Intel Knights Mill con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER,
AVX512CD, AVX5124VNNIW, AVX5124FMAPS, AVX512VPOPCNTDQ y extensiones
64-bit. Esta opción está disponible a partir de GCC 8. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir de GCC 6. |
lunarlake |
Intel Lunar Lake. Esta opción está disponible a partir de GCC 14 y es equivalente a la opción arrowlake-s. |
meteorlake |
Intel Meteor Lake. Esta opción está disponible a partir de GCC 13. |
nehalem |
Intel Nehalem con soporte
de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y
extensiones 64-bit. Esta opción está disponible a
partir
de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
pantherlake |
Intel Panther Lake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD,
AVXVNNIINT16, SHA512, SM3, SM4, PREFETCHI y extensiones 64-bit. Esta
opción está disponible a partir de GCC 14. |
pentiumpro |
Intel PentiumPro. |
pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
raptorlake |
Intel Raptor Lake. Esta opción está disponible a partir de GCC 13. |
rocketlake |
Intel Rocket Lake con
soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11. |
sandybridge |
Intel Sandy Bridge con
soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AES, PCLMUL y extensiones 64-bit. Esta opción
está disponible a partir de GCC 4.9. |
sapphirerapids |
Intel Sapphire Rapids
con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD,
AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD,
CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16,
AMX-TILE, AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11. |
silvermont |
Intel Silvermont con
soporte de instrucciones MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones
64-bit. Esta opción está disponible a partir de GCC 4.9. |
sierraforest |
Intel Sierra Forest con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES,
XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA,
LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y extensiones
64-bit. Esta opción está disponible a partir de GCC 13. |
skylake |
Intel Skylake
con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 6. |
skylake-avx512 |
Intel Skylake Server
con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD y extensiones 64-bit.
Esta opción está disponible a partir de GCC 6. |
tigerlake |
Intel Tigerlake con
soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD, MOVDIRI,
MOVDIR64B, AVX512VP2INTERSECT y extensiones 64-bit. Esta opción
está disponible a partir de GCC 10. |
tremont |
Intel Tremont con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID,
SGX, UMIP, GFNI-SSE, CLWB, ENCLV y extensiones 64-bit. Esta
opción está disponible a partir de GCC 9. |
westmere |
Intel Westmere con soporte
de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AES, PCLMUL y extensiones 64-bit. Esta opción está
disponible a partir de GCC 4.9. |
AMD |
amdfam10, barcelona |
Procesadores basados en
AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.3. |
athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
bdver1 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX,
XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción
está disponible a partir de GCC 4.7. |
bdver2 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM,
F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.7. |
bdver3 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX,
XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción
está disponible a partir de GCC 4.8. |
bdver4 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, BMI2,
TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL,
CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y
extensiones 64-bit). Esta opción está disponible a partir
de GCC 4.9. |
btver1 |
Procesadores basados en
AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta
opción está disponible a partir de GCC 4.6. |
btver2 |
Procesadores basados en
AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C,
BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3,
SSE2, SSE, MMX y extensiones 64-bit). Esta opción
está disponible a partir de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
k8, opteron, athlon64, athlon-fx |
Procesadores basados en
AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2,
3DNow!, enhanced 3DNow! y extensiones 64-bit). |
k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de AMD
K8 core con soporte de instrucciones SSE3. Esta opción
está disponible a partir de GCC 4.3. |
znver1 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 6. |
znver2 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y
extensiones 64-bit). Esta opción está disponible a
partir de GCC 9. |
znver3 |
Procesadores basados en
AMD Family 19h core con soporte de instrucciones x86-64 (BMI, BMI2,
CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, PKU, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11. |
znver4 |
Procesadores basados en
AMD Family 19h core con soporte de instrucciones x86-64 (BMI, BMI2,
CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA,
AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2,
AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI) y extensiones 64-bit.
Esta opción está disponible a partir de GCC 12.3. |
znver5 |
Procesadores basados en
AMD Family 1ah core con soporte de instrucciones x86-64 (BMI, BMI2,
CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA,
CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID,
WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA,
AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2,
AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI,
MOVDIR64B, AVX512VP2INTERSECT, PREFETCHI) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 14. |
Optimizaciones adicionales
Optimizaciones adicionales |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
|
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
Extracción temporal de JDK 8 (requerido para compilar el soporte de Java y GSOAP)
Utilizaremos esta versión de JDK para compilar el soporte de
Java, que produce errores con la última versión de JDK,
en la compilación del soporte de GSOAP, al no incluir las
últimas versiones de Java, el comando wsimport (retirado
de Java a partir de la version 11) y, además, no se
detecta de forma correcta la versión de JDK, con lo que se
producen también
errores en la compilación del soporte directo de Java. Cuando
acabemos de compilar el paquete, podemos borrar esta versión de
nuestro directorio personal, sin ningún problema, aunque si nos
sobra espacio, lo mejor es dejarla para próximas compilaciones.
$ tar zxvf jdk-8u421-linux-x64.tar.gz -C $HOME
|
Crear una ubicación temporal de GNU ld en /tmp/bin
La compilación del paquete produce errores con GNU gold. Si esta
versión es la predefinida del sistema, crearemos un directorio
temporal de ubicación de GNU ld y, posteriormente, lo
añadiremos a nuestro PATH.
$ mkdir -p /tmp/bin
$ cp /usr/bin/ld.bfd /tmp/bin/ld
$ export PATH=/tmp/bin:$PATH |
Extracción y Configuración de VirtualBox
$ tar jxvf VirtualBox-7.1.4.tar.bz2
$ cd VirtualBox-7.1.4
$ ./configure --with-qt-dir=/usr/local/lib64/qt6 --disable-hardening \
--disable-docs --disable-kmods
$ echo 'VBOX_WITH_WARNINGS_AS_ERRORS :=' > LocalConfig.kmk
$ echo 'VBOX_WITH_TESTCASES :=' >> LocalConfig.kmk
$ echo "VBOX_JAVA_HOME = $HOME/jdk1.8.0_421" >> LocalConfig.kmk
$ echo 'VBOX_ORIGIN = $PWD:/usr/local/VirtualBox' >> LocalConfig.kmk
$ echo "VBOX_GCC_OPT = $CFLAGS" >> LocalConfig.kmk
$ echo 'SDK_VBOX_VPX_LIBS = /usr/local/lib64/libvpx.so' >> LocalConfig.kmk
|
Explicación
de los comandos
--with-qt-dir=/usr/local/lib64/qt6 : Le indica la ruta correcta al directorio donde está instalado Qt6, en el caso de que el script de configuración no lo detecte. En mi caso personal, es /usr/local/lib64/qt5.
--disable-hardening
: Desactiva las restricciones de uso del programa, que obligan a
crear un grupo de usuarios específico del mismo, ya que el
programa sólo aceptará su ejecución al usuario
root.
--disable-docs
: Desactiva la generación de la documentación del programa.
--disable-kmods
: Desactiva la compilación de los módulos del kernel, en
el caso de que este último, lo hayamos compilado con Clang.
Posteriormente utilizaremos los parámetros adecuados para
compilarlos.
echo "VBOX_WITH_WARNINGS_AS_ERRORS :=" > LocalConfig.kmk : Evita que todos los avisos mostrados por GCC sean tratados como errores, lo que impide la correcta compilación del programa.
echo "VBOX_WITH_TESTCASES :=" >> LocalConfig.kmk
: Desactiva la compilación de los tests del paquete para reducir
el tiempo de compilación y el espacio en disco.
echo "VBOX_JAVA_HOME = $HOME/jdk1.8.0_421" >> LocalConfig.kmk : Le indica la ruta a la versión de Java, que hemos extraído antes en la raíz de nuestro directorio personal.
echo 'VBOX_ORIGIN = $PWD:/usr/local/VirtualBox' >> LocalConfig.kmk : Modifica la variable de entorno RPATH original del programa, para poder ejecutar VirtualBox, desde un enlace simbólico, sin necesidad de tener que recurrir a la creación de un script de ejecución.
echo "VBOX_GCC_OPT = $CFLAGS" >> LocalConfig.kmk
: Sincroniza las variables de entorno de
optimización establecidas en el manual, con las variables
de optimización utilizadas en el proceso de compilación.
echo 'SDK_VBOX_VPX_LIBS = /usr/local/lib64/libvpx.so' >> LocalConfig.kmk : Le indica la ruta a la librería Libvpx, en el caso, como es el mío, que la tengamos instalada en un directorio que no sea el principal del sistema.
Es conveniente que guardemos el archivo de configuración personal, LocalConfig.kmk,
para próximas compilaciones del paquete, nos ahorra tener que
volver a crearlo y rellenarlo con los comandos correspondientes.
Parámetros de configuración opcionales
--disable-java
: Desactiva el soporte de Java. Si no tenemos instalada la versión de desarrollo de Java, tendremos que añadir este parámetro.
Compilación
Parámetros de compilación opcionales
-j$(nproc)
: Establece el número de procesos de compilación en paralelo, en
función del número de
núcleos e hilos que tenga nuestro procesador, tomando como referencia
la información mostrada por el sistema con el comando correspondiente.
Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta
opción.
Compilación de los módulos del kernel
$ cd
out/linux.amd64/release/bin/src
$ make CC=gcc LD=ld.bfd |
Explicación
de los comandos
CC=gcc LD=ld.bfd
: Establece los parámetros de compilación con GCC,
sustituyendo GNU gold (en el caso de que sea el enlazador
dinámico por defecto del sistema), por GNU ld, ya que el primero
produce errores de compilación desde hace varias versiones del
kernel.
Parámetros de compilación opcionales
CC=clang LD=ld.lld LLVM=1 LLVM_IAS=1
: Si hemos compilado el kernel con Clang, tendremos que utilizar estos
parámetros de compilación. La compilación con
Clang se debe de hacer como root, en el caso de que hayamos compilado
el kernel con la optimización ThinLTO. Por eso incluyo
también las variables LLVM y LLVM_IAS que no hacen necesario
utilizar la variable LD.
-j$(nproc)
: Establece el número de procesos de compilación en paralelo, en
función del número de
núcleos e hilos que tenga nuestro procesador, tomando como referencia
la información mostrada por el sistema con el comando correspondiente.
Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta
opción.
Instalación de los módulos del kernel
$ su
#
make install CC=gcc LD=ld.bfd
# modprobe -a vboxdrv vboxnetadp vboxnetflt |
Parámetros de instalación opcionales
CC=clang LD=ld.lld LLVM=1 LLVM_IAS=1 : Si hemos compilado el kernel con Clang, tendremos que utilizar estos parámetros de instalación.
Cada
vez que actualicemos el kernel tendremos que ejecutar esta misma
operación de compilación e instalación
de los módulos. Esto lo haremos (como root) en el directorio final de
instalacion del programa, que en este caso es
/usr/local/VirtualBox/src.
También se puede editar el archivo /etc/rc.local, para que esto
se haga de forma automática al inicio del sistema, que es lo que
hago yo.
Configuración del
inicio de los módulos del kernel
1) Sistemas que utilicen Systemd como sistema de inicio
Abrimos un editor de texto y añadimos lo siguiente:
vboxdrv
vboxnetadp
vboxnetflt |
Lo guardamos con el nombre virtualbox.conf y lo instalamos como root en /etc/modules.load.d.
$ su -c "install -m755 virtualbox.conf /etc/modules.load.d"
|
2) PCLinuxOS
Abrimos un editor de texto y añadimos lo siguiente:
vboxdrv
vboxnetadp
vboxnetflt |
Lo guardamos con el nombre virtualbox y lo instalamos como root en /etc/modprobe.preload.d.
$ su -c "install -m644 virtualbox /etc/modprobe.preload.d"
|
3) Slackware y derivados
Abrimos con un editor de texto, como root, el archivo /etc/rc.d/rc.local, y añadimos lo que está en rojo:
#!/bin/sh
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local startup commands in here. Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.
# Ufw
if [ -x /etc/init.d/ufw ]; then
/etc/init.d/ufw start
fi
# VirtualBox
/sbin/modprobe -a vboxdrv vboxnetadp vboxnetflt
|
Crear
una regla para Udev para establecer correctamente los permisos de
lectura y escritura para todos los usuarios en /dev/vbox*
Desde la versión 4, aunque compilemos VirtualBox con la opción '--disable-hardening',
ésta no habilita los correspondientes permisos de lectura y
escritura para todos los usuarios para los dispositivos /dev/vbox*,
con lo que, cuando intentemos iniciar la máquina virtual
configurada, ésta nos mostrará un mensaje de error de
acceso al módulo del kernel.
Mediante la creación de las correspondientes reglas para Udev, solventaremos este problema. Abrimos un editor de texto, como root y añadimos lo siguiente:
KERNEL=="vbox*", MODE="0666"
|
Lo guardamos con el nombre 60-vbox.rules.
Crear el grupo de usuarios
vboxusers (si no existe) y añadir nuestra cuenta personal para
un correcto funcionamiento de dispositivos USB como los discos
duros externos.
# groupadd -rf vboxusers
# groupmems -g vboxusers -a jose
|
Donde pone jose, poner el nombre de usuario de cada uno.
Editar el archivo de reglas para Udev que hemos creado antes y dejarlo como está abajo:
KERNEL=="vbox*", MODE="0666"
SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/usr/local/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device",
RUN+="/usr/local/VirtualBox/VBoxCreateUSBNode.sh $major $minor
$attr{bDeviceClass}"
SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/usr/local/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device",
RUN+="/usr/local/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
|
Lo guardamos y lo instalamos como root en /etc/udev/rules.d y actualizamos las reglas con el comando correspondiente:
# install -dm755 /etc/udev/rules.d
# install -m644 60-vbox.rules /etc/udev/rules.d
# udevadm control --reload-rules && udevadm trigger |
Instalación final de
VirtualBox
VirtualBox no tiene script
de
instalación, así que lo
tendremos que hacer de forma manual. Si tenemos una versión
anterior del programa instalada de acuerdo a este manual, la
renombramos.
$ su -c "mv /usr/local/VirtualBox{,-7.1.2}" |
$ su
# install -dm755 /usr/local/VirtualBox
# cp -dRf --no-preserve=ownership out/linux.amd64/release/bin/* /usr/local/VirtualBox
# find /usr/local/VirtualBox -type f -perm -755 | xargs strip --strip-unneeded &> /dev/null
# mkdir -p /usr/local/bin
# ln -sf /usr/local/VirtualBox/VirtualBox /usr/local/bin/virtualbox
# cd out/linux.amd64/release/bin/icons
# for i in /usr/local/share/icons/hicolor ; do \
install -dm755 $i/{16x16,24x24,32x32,48x48,64x64,72x72,96x96,128x128,256x256,scalable}/apps ; \
install -m644 16x16/virtualbox-vbox.png $i/16x16/apps/virtualbox.png ; \
install -m644 24x24/virtualbox-vbox.png $i/24x24/apps/virtualbox.png ; \
install -m644 32x32/virtualbox-vbox.png $i/32x32/apps/virtualbox.png ; \
install -m644 48x48/virtualbox-vbox.png $i/48x48/apps/virtualbox.png ; \
install -m644 64x64/virtualbox-vbox.png $i/64x64/apps/virtualbox.png ; \
install -m644 72x72/virtualbox-vbox.png $i/72x72/apps/virtualbox.png ; \
install -m644 96x96/virtualbox-vbox.png $i/96x96/apps/virtualbox.png ; \
install -m644 128x128/virtualbox-vbox.png $i/128x128/apps/virtualbox.png ; \
install -m644 256x256/virtualbox-vbox.png $i/256x256/apps/virtualbox.png ; \
install -m644 scalable/virtualbox.svg $i/scalable/apps/virtualbox.svg ; \
gtk-update-icon-cache -tf $i &> /dev/null ; \
done
|
Explicación
de los comandos
install -dm755 /usr/local/VirtualBox : Crea el directorio de instalación del paquete.
cp -dRf --no-preserve=ownership out/linux.amd64/release/bin/* /usr/local/VirtualBox : Copia la instalación del programa a dicho directorio, otorgando los permisos al usuario root.
find /usr/local/VirtualBox -type f -perm -755 | xargs strip --strip-unneeded &> /dev/null
: Con este comando, eliminamos los símbolos innecesarios para la
ejecución del programa, reduciendo casi un 70 %, el
espacio que ocupa el programa en nuestro disco.
ln -sf /usr/local/VirtualBox/VirtualBox /usr/local/bin/virtualbox : Crea un enlace simbólico al ejecutable principal del programa, en /usr/local/bin, para poder ejecutarlo desde línea de comandos.
cd out/linux.amd64/release/bin/icons : Accede al directorio de los iconos para ejecutar el comando siguiente de instalación de los mismos en nuestro sistema.
for i in /usr/local/share/icons/hicolor.....
: Instala los iconos del programa, en sus diferentes
medidas compatibles con el estándar de tamaño de icono de
freedesktop.org.
Si comprobamos que la nueva versión funciona bien y no da problemas, borramos la anterior:
$ su -c "rm -rf /usr/local/VirtualBox-7.1.2" |
Creación del archivo virtualbox.desktop
Para que VirtualBox sea detectado por los menús de entornos gráficos
como XFce 4 o
paneles como LXPanel o Fbpanel, creamos el archivo desktop correspondiente con cat o un editor de texto:
$ cat > virtualbox.desktop << "EOF"
[Desktop Entry]
Name=VirtualBox
GenericName=Máquina Virtual
Comment=Un software virtualizador de sistemas operativos
Exec=virtualbox
TryExec=virtualbox
Icon=virtualbox
Categories=Application;System;Emulator
MimeType=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova;
Type=Application
EOF |
Luego, lo instalamos como root en /usr/local/share/applications.
La desinstalación y respaldo de este archivo viene incluida en
los scripts correspondientes proporcionados en este manual.
$ su
# install -dm755 /usr/local/share/applications
# install -m644 virtualbox.desktop /usr/local/share/applications
# update-desktop-database
|
Estadísticas de Compilación e Instalación de VirtualBox
Estadísticas de Compilación e Instalación de VirtualBox |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Tarjeta gráfica |
AMD Radeon RX 580 2048SP |
Controlador de gráficos |
AMDGPU 23.0.0 |
Sistema de archivos |
XFS |
Versión del Kernel |
6.11.3-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BMQ |
Versión de Glibc |
2.40 |
Enlazador dinámico |
GNU ld (GNU Binutils 2.43.1) |
Compilador |
GCC 14.2.0 + Ccache 4.10.2 |
Parámetros de optimización |
-03 -march=znver3 -mtune=znver3 -ftree-loop-linear -floop-strip-mine -floop-block -fipa-pta |
Parámetros de compilación |
-j12 |
Ocupación de espacio en disco del proceso de compilación |
5,4 GB |
Tiempo de compilación |
12' 23" |
Archivos instalados |
1.459 |
|
Enlaces simbólicos creados |
1 |
/usr/local/bin/virtualbox |
Ocupación de espacio en disco [1] |
330,7 MB |
[1] Se computa
también el espacio ocupado por el paquete añadido que se
instala en la sección correspondiente de este manual.
Consumo inicial de CPU y RAM de VirtualBox
Consumo inicial de CPU y RAM de VirtualBox |
Programa
|
CPU |
RAM |
virtualbox |
0 % |
423,7 MB |
VBoxSVC |
0 % |
30,3 MB |
VBoxXPCOMIPCD |
0 % |
10,3 MB |
TOTAL |
0 % |
464,3 MB |
Para medir el consumo de CPU se utiliza el programa top, y para medir
el consumo de RAM se utiliza el script de Python, ps_mem.py, creado por Pádraig Brady, que podemos encontrar en este enlace. |
Directorio de
configuración personal
~/.config/VirtualBox |
Es el
directorio de configuración personal de VirtualBox
en nuestro home |
Desinstalación
como root
1) MODO TRADICIONAL
*************************
2) MODO MANUALINUX
VirtualBox-7.1.4-scripts.tar.gz
$ su
# tar zxvf VirtualBox-7.1.4-scripts.tar.gz
# cd VirtualBox-7.1.4-scripts
# ./Desinstalar_VirtualBox-7.1.4 |
Copia de Seguridad
como root
Con este otro script creamos una copia de seguridad de los binarios
compilados, recreando la estructura de directorios de los mismos en un
directorio de copias de seguridad (copibin)
que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de
los binarios podemos copiarlo como usuario a nuestro home
y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos
volver a restaurar la copia, tendremos que volver a copiarlo al lugar
donde se ha creado.
$ su
# tar zxvf VirtualBox-7.1.4-scripts.tar.gz
# cd VirtualBox-7.1.4-scripts
# ./Respaldar_VirtualBox-7.1.4 |
Restaurar la Copia de Seguridad
como root
Y con este otro script (que se copia de forma automática cuando
creamos la copia de respaldo del programa) restauramos la copia de
seguridad como root cuando resulte necesario.
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_VirtualBox-7.1.4
|
VirtualBox Extension Pack
Con la instalación de este paquete adicional, le añadimos soporte de dispositivos USB 2.0 y cifrado de datos, a VirtualBox, entre otra serie de características. Más información en este enlace.
Descarga
Oracle_VM_VirtualBox_Extension_Pack-7.1.4.vbox-extpack
Instalación como root
$ su -c "/usr/local/VirtualBox/VBoxManage extpack install \
Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack"
|
VirtualBox Guest Additions
Este paquete se instala en el sistema virtualizado y nos permite, entre
otras series de características, poner la máquina virtual
a pantalla completa, teniendo en cuenta la resolución nativa del
sistema anfitrión, al instalar controladores gráficos
adicionales en el sistema virtualizado. Como explican en este ticket
abierto de notificación de errores de VirtualBox, la descarga e
instalación automática de éstas da error y, por lo
tanto, tendremos que descargarlas de forma manual y añadirlas como unidad óptica en
la configuración de la máquina virtual. Una vez la
hayamos añadido, ya podemos instalarlas desde el menú de
la interfaz de VirtualBox, cuando estamos corriendo el sistema
virtualizado. Una vez instaladas las ejecutamos desde la
ubicación en la que aparecen las particiones y dispositivos de
almacenamiento disponibles en el sistema virtualizado.
Otra cosa muy importante a tener en cuenta, si utilizamos Nouveau como controlador de gráficos, es que si activamos la aceleración 3D en la
configuración de pantalla, el controlador gráfico WDDM,
no se carga
correctamente, y todo el aspecto gráfico se hace por software.
Para evitar esto, desactivamos la aceleración 3D y, por lo
menos, sí que tendremos aceleración 2D.
En administradores de ventanas como Fluxbox, la entrada de texto en el
sistema virtualizado (por ejemplo, Windows 10) no es funcional, cuando
ponemos a pantalla completa, el mismo. Esto se soluciona
añadiendo lo siguiente al final del archivo de
configuración, ~/.fluxbox/apps,
[app] (name=VirtualBoxVM) (class=VirtualBoxVM)
[Fullscreen] {yes}
[end]
|
Cuando iniciemos la máquina virtual correspondiente,
seleccionamos la resolución deseada en la ventana de VirtualBox
(que se mostrará a pantalla completa sin decoración de
ventana y solapando la barra de herramientas de Fluxbox) y,
posteriormente, ocultamos la barra de menú y la de estado. Para
activar el menú contextual de VirtualBox, basta con ejecutar el
atajo de teclado "Control Derecho + Inicio".
Iniciamos VirtualBox
Sólo
nos
queda teclear en una terminal
o en un lanzador el comando virtualbox,
y el programa aparecerá en la pantalla:
Enlaces
https://www.virtualbox.org >> La web de VirtualBox.
|