Intro
C'est un fait bien connu de nombreux utilisateurs de la version Windows de VirtualBox (à partir de maintenant,
VB ; à ne pas confondre avec Visual Basic) qu'à partir de la version 4.3.14, les développeurs ont ajouté le soi-disant "durcissement" conçu pour empêcher injections malveillantes dans VB. Bien que les intentions soient bonnes, la mise en œuvre a provoqué de nombreux conflits avec des produits totalement légitimes tels que les antivirus, les modules cryptographiques et même certaines mises à jour de Windows lui-même, et lorsqu'un tel conflit se produit, VB cesse simplement de fonctionner. Les utilisateurs doivent attendre au moins un mois avant la sortie de la nouvelle version VB avec les exclusions appropriées ajoutées. Le pire des cas est que l'application ou la mise à jour en conflit doit être désinstallée ou VB lui-même doit être rétrogradé à la version 4.3.12 qui était la dernière sans durcissement. De nombreuses demandes pour ajouter une liste d'exclusion contrôlée par l'utilisateur, ou une option pour désactiver le renforcement, sont toutes restées sans réponse. La seule réponse des développeurs sonne comme "si vous ne voulez pas le construire vous-même à partir du code source". On dirait que nous devrons le faire.
Bien que les instructions de construction soient
décrites sur le Wiki officiel du projet, elles sont incomplètes et quelque peu dépassées, tandis que la procédure de construction échoue souvent avec de vagues messages d'erreur. Donc, quand j'ai fini par le faire fonctionner, j'ai pensé que cela valait la peine d'être documenté en détail dans un article séparé. Cette instruction est mise à jour de temps en temps et est actuellement adaptée à la construction de la version 6.0.4 de VB. Cependant, si vous avez besoin d'informations sur la création de versions antérieures de VB ou de bibliothèques auxiliaires, vous pouvez toujours les obtenir à partir de l'
historique des modifications .
Table des matières
» Énoncé du problème
» Un mot d'avertissement
» Préparation de l'environnement de construction
» Quirks d'installation des applications
» Touches finales
» Création de VirtualBox
» Épilogue
» Amendements
Énoncé du problème
Au début, je voulais rester simple en reconstruisant simplement les composants binaires et en les copiant sur la version installée à partir de la distribution officielle. Cependant, cela s'est avéré loin d'être simple car l'installation repose sur une API système obscure et nécessite l'installation des pilotes et l'enregistrement des composants COM. Je me suis demandé s'il était viable d'apprendre comment tout cela fonctionnait et d'écrire un script pour automatiser ces tâches, mais après mûre réflexion, j'ai décidé d'aller grand et de construire une distribution complète qui serait aussi proche que possible de la distribution officielle, uniquement sans durcissement.
Je dois dire que cette tâche s'est avérée très difficile et je ne l'ai pas accomplie à 100%. Ce que je suis tombé sur les suppléments invités qui sont fournis pour Windows (32 et 64 bits), OS / 2, Linux et certains autres systèmes * NIX. Les commentaires dans le Makefile correspondant mentionnent qu'ils sont tous construits sur différentes machines distantes, et je n'étais certainement pas impatient de gérer une telle usine de construction. Donc ma dernière solution était de tout construire à partir des codes sources, à l'exception des ajouts, mais de prendre l'image ISO officielle avec eux et de la mettre dans ma distribution telle quelle. Je n'ai pas vérifié si les ajouts ont le même mécanisme de durcissement, mais même s'ils le font, je n'ai jamais entendu de plaintes à ce sujet.
Un mot d'avertissement
• Considérations de sécurité
Le durcissement n'a pas été ajouté sur un coup de tête, c'était une solution pour fermer une vulnérabilité dans VB. Malheureusement, Oracle refuse de fournir la description détaillée du problème, même s'il a été corrigé il y a de nombreuses années. Généralement, cela a quelque chose à voir avec le mécanisme d'injection de DLL dans Windows qui, en cas de VB, peut conduire à une élévation de privilèges non autorisée sur l'ordinateur hôte, et il existe des exploits de travail pour cette vulnérabilité. Soyez donc averti si vous décidez d'utiliser la version sans durcissement de toute façon.
• Signature des chauffeurs
À partir de Vista, dans les versions Windows 64 bits, les utilisateurs ne peuvent plus charger de pilotes arbitraires. Les pilotes doivent être signés par un certificat avec une chaîne de certificats croisés qui monte à l'autorité de certification racine Microsoft (et dans Windows 10 avec Secure Boot activé, les pilotes doivent être signés par Microsoft eux-mêmes). Avant de vous lancer dans la construction de VB, vous devez décider comment résoudre ce problème. Vous pouvez soit dépenser de l'argent et acheter votre propre certificat, soit essayer de contacter des sociétés tierces qui fournissent des services de signature pour des projets open source (si elles acceptent de signer des pilotes vulnérables), ou configurer votre Windows en mode test qui permet de charger les pilotes signé avec un certificat de test généré localement.
Dans l'article, j'impliquerai principalement ce dernier scénario, mais je mentionnerai comment la procédure change si vous avez un certificat commercial «adulte».
Préparation de l'environnement de construction
Le guide officiel recommande d'utiliser Windows 7 à 10 comme système de génération. J'ai fait tout le travail dans Windows 7 SP1 x64, et je ne pense pas que la version du système d'exploitation affecte beaucoup la procédure. N'oubliez pas que la machine (réelle ou virtuelle) que vous allez utiliser pour créer VB doit avoir une connexion Internet.
L'environnement de construction nécessite pas mal d'outils. Si certains programmes ont une version portable, je préfère prendre cela au lieu d'utiliser le programme d'installation.
Désormais, les programmes suivants ne peuvent être obtenus qu'en tant que distributions installables (au moins, officiellement). Pour Visual Studio et SDK / WDK, il est important de suivre l'ordre d'installation tel que spécifié ci-dessous. Une fois que vous avez terminé avec eux, je recommande fortement d'exécuter Windows Update et de récupérer les dernières mises à jour pour tous les produits Microsoft.
Les autres programmes sont téléchargés sous forme d'archives portables ou de codes sources:
- Qt 5.6.3 (code source)
- MinGW-w64 4.5.4 :
- SDL v1.2.x (bibliothèque de développement pour Visual C ++)
- cURL (code source)
- OpenSSL 1.1.1 (code source)
- gSOAP 2.8.x (la version 2.8.41 ou supérieure est recommandée)
- libvpx 1.7.0 (code source; les versions plus récentes ne prennent pas en charge VS 2010)
- libopus 1.3 (code source)
- MiKTeX Portable
- NASM
Je recommande d'utiliser la version portable 64 bits. - WiX
Je recommande d'utiliser une archive portable (nommée comme wix311-binaries.zip
).
Vous aurez également besoin des archives suivantes:
Pourquoi devriez-vous vouloir tout cela?Si vous ne voulez pas construire exactement le même paquet que moi, vous pourrez peut-être vous débarrasser de certains des outils susmentionnés. Je vais donc ici donner quelques détails sur leur objectif dans le processus de construction.
- SDK 8.1
La construction réelle est effectuée à l'aide du SDK 7.1, mais vous aurez besoin du programme SignTool à partir de 8.1, car celui à partir de 7.1 ne peut pas effectuer la double signature SHA-1 / SHA-256. Si le SDK 8.1 est installé ailleurs, vous pouvez simplement copier signtool.exe
avec toutes ses dépendances à partir de là et spécifier le chemin d'accès dans le fichier LocalConfig.kmk
(voir ci - dessous ). - WiX
Il s'agit du cadre de création de packages MSI. Bien que la distribution VB finale soit un EXE, elle contient deux fichiers MSI à l'intérieur, vous avez donc besoin de WiX pour les construire. Cependant, si vous avez uniquement l'intention de créer les fichiers binaires VB sans les empaqueter, vous pouvez le faire sans WiX. - Sdl
Cette bibliothèque est utilisée pour un VBoxSDL.exe
frontal simpliste supplémentaire qui peut être utilisé à la place de VirtualBox.exe
. En théorie, si vous n'avez pas besoin de ce composant, vous devriez pouvoir exécuter la build sans avoir SDL, mais je ne l'ai pas essayé. - gSOAP
Cette bibliothèque est utilisée pour créer VBoxWebSrv.exe
, service de gestion à distance VB. Si vous n'avez pas gSOAP, ce composant sera ignoré en silence lors de la construction. - libvpx , libopus
Ce sont les codecs vidéo et audio utilisés pour enregistrer l'écran de la VM. Si vous ne les avez pas, la construction se terminera toujours avec succès et VB aura toujours toutes les options de capture vidéo, mais ces options seront ignorées (même si l'animation de capture sera lue, aucun enregistrement réel ne sera sauvegardé) . - Cygwin
Requis pour construire libvpx. - MiKTeX
MiKTeX est utilisé pour compiler la documentation PDF ( doc\UserManual.pdf
). Sans ce programme, le PDF sera silencieusement omis de la construction et de l'emballage. - NASM
L'assembleur utilisé lors de la construction d'OpenSSL. Vous pouvez également le construire sans utiliser l'assembleur, mais je recommande toujours de l'utiliser pour générer un code plus optimisé.
Voici le résumé de tous les outils et bibliothèques que j'utilise, y compris leurs versions exactes (si possible) et les chemins d'installation que j'ai choisis sur mon système de construction. La désignation "
{x32|x64}
" est utilisée pour des emplacements d'installation de versions 32 et 64 bits distincts.
Programme / outil | La version | Chemin d'installation |
---|
Studio visuel | Professionnel 2010 | C:\Program Files (x86)\Microsoft Visual Studio 10.0\ |
SDK | 7.1 | C:\Program Files\Microsoft SDKs\Windows\v7.1\ |
SDK | 8.1 | C:\Programs\DevKits\8.1\ |
Wdk | 7.1.0 | C:\WinDDK\7600.16385.1\ |
Activeperl | 5.26.1 Build 2601 x64 | C:\Programs\Perl\ |
ActivePython | 2.7.14.2717 x64 | C:\Programs\Python\ |
WiX | 3.11.1.2318 | C:\Programs\WiX\ |
Qt | 5.6.3 | C:\Programs\Qt\5.6.3-{x32|x64}\ |
MinGW-32 | 4.5.4 | C:\Programs\mingw32\ |
MinGW-64 | 4.5.4 | C:\Programs\mingw64\ |
Cygwin | - | C:\Programs\cygwin64\ |
Sdl | 1.2.15 | C:\Programs\SDL\{x32|x64}\ |
cURL | 7.64.1 | C:\Programs\curl\{x32|x64}\ |
Openssl | 1.1.1b | C:\Programs\OpenSSL\{x32|x64}\ |
gSOAP | 2.8.82 | C:\Programs\gSOAP\ |
libvpx | 1.7.0 | C:\Programs\libvpx\ |
libopus | 1,3 | C:\Programs\libopus\ |
MiKTeX Portable | 2.9.6942 | C:\Programs\MiKTeX\ |
NASM | 2.14.02 x64 | C:\Programs\nasm\ |
DocBook XML DTD | 4.5 | C:\Programs\DocBook\xml\ |
Feuilles de style DocBook XSL | 1.69.1 | C:\Programs\DocBook\xsl\ |
Quirks d'installation des applications
Ici, je donne quelques instructions sur l'installation de certains des outils susmentionnés où la procédure n'est pas évidente ou nécessite des actions supplémentaires.
• SDK Windows v7.1
L'installation de ce SDK échouera probablement car il inclut les versions obsolètes du compilateur et des bibliothèques d'exécution. Après avoir installé VS 2010, il existe des versions plus récentes de celles présentes dans le système, de sorte que les anciennes échouent à l'installation et le programme d'installation principal considère qu'il s'agit d'une erreur critique. Pour contourner ce problème, vous devez décocher les cases correspondantes ou, avant l'installation du SDK, désinstaller les packages nommés comme
«Microsoft Visual C ++ 2010 <arch> Redistributable» ,
«Microsoft Visual C ++ 2010 <arch> Runtime» ,
«Microsoft Compilateurs Visual C ++ ... " Laissez le SDK installer les anciennes versions de ceux-ci, puis exécutez Windows Update pour obtenir les dernières versions disponibles.
Lorsque vous installez le SDK, assurez-vous de vérifier les exemples de programme (Développement de code natif Windows -> Exemples): ils contiennent certains scripts utilisés par les règles de génération VB. Sans eux, vous ne pourrez pas créer les packages MSI.
• SDK Windows v8.1
Il vous suffit d'installer le composant "Kit de développement logiciel Windows".
• WDK v7.1
Il vous suffit d'installer le composant "Build Environments".
• Qt 5.6.3
À partir de Qt 5.7.0, pour le construire, vous avez besoin de Visual Studio 2012 ou version ultérieure, nous sommes donc bloqués avec 5.6.x.
Puisqu'il n'y a pas de builds officiels pour Visual Studio 2010, nous devrons construire Qt à partir du code source nous-mêmes.
- Décompressez l'archive de code source de Qt dans
C:\Programs\Qt\
et renommez le répertoire qt-everywhere-opensource-src-5.6.3
en 5.6.3-src
. - À côté, créez un répertoire
build-x32
où la construction aura lieu. - Ouvrez la console et exécutez les commandes suivantes pour préparer l'environnement:
cd /d C:\Programs\Qt\build-x32 SET QTVER=5.6.3 "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x86 /win7 COLOR 07 SET QTDIR=C:\Programs\Qt\%QTVER%-x32 SET PATH=%QTDIR%\bin;%PATH% SET QMAKESPEC=win32-msvc2010
La commande color
est facultative, elle supprime la couleur verte qui a été définie par le script SetEnv.Cmd
. - Nous devons maintenant exécuter le script
configure.bat
partir de 5.6.3-src
. VB n'utilise pas la plupart de ce que Qt inclut, nous pouvons donc réduire considérablement le temps de construction en désactivant divers composants, mais veuillez noter que certaines options sont cruciales pour VB. En particulier, j'ai découvert que:- OpenGL ES 2 n'est pas pris en charge (lors de la création de VB, le compilateur ne parvient pas à trouver certains fichiers d'en-tête).
- La prise en charge de FreeType doit être activée (sinon le plugin
qoffscreen
ne sera pas construit, et il est requis pour VB).
Voici la ligne de commande complète avec laquelle je me suis retrouvé: ..\5.6.3-src\configure.bat -prefix c:\Programs\Qt\5.6.3-x32 -mp -opensource -confirm-license -nomake tests -nomake examples -no-compile-examples -release -shared -pch -no-ltcg -accessibility -no-sql-sqlite -opengl desktop -no-openvg -no-nis -no-iconv -no-evdev -no-mtdev -no-inotify -no-eventfd -largefile -no-system-proxies -qt-zlib -qt-pcre -no-icu -qt-libpng -qt-libjpeg -qt-freetype -no-fontconfig -qt-harfbuzz -no-angle -incredibuild-xge -no-plugin-manifests -qmake -qreal double -rtti -strip -no-ssl -no-openssl -no-libproxy -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug -no-direct2d -directwrite -no-style-fusion -native-gestures -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdeclarative -skip qtdoc -skip qtenginio -skip qtgraphicaleffects -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtx11extras -skip qtxmlpatterns
- Le chemin d'installation de Qt spécifié ici (dans l'option
-prefix
) est codé en dur dans les fichiers de code source intermédiaires par le script de configuration, donc les fichiers binaires s'en souviendront également. Toute application basée sur Qt construite à l'aide de cette bibliothèque recherchera d'abord les plugins requis dans ce chemin, et seulement s'ils ne peuvent pas être trouvés, elle utilisera son propre emplacement actuel. Dans la plupart des cas, cela est OK, mais supposons que sur l'ordinateur où notre VB est installé, il existe une autre version de Qt située dans c:\Programs\Qt\5.6.3-x32
, mais compilée avec différentes options ou par un compilateur différent? Ensuite, VB essaiera de charger ces plugins (incompatibles) et de planter.
Il existe deux façons d'éviter ce problème. Le premier consiste à ajouter à l'installation un fichier supplémentaire nommé qt.conf
avec le texte suivant: [Paths] Plugins=.
L'autre consiste à corriger ce chemin d'installation enregistré avant de construire Qt, afin qu'il pointe vers le répertoire de l'application. J'ai décidé de suivre cette dernière voie, je n'aimais pas l'idée d'avoir des fichiers supplémentaires à ce que la distribution Oracle VB avait. Vous devez ouvrir le fichier C:\Programs\Qt\build-x32\qtbase\src\corelib\global\qconfig.cpp
créé par le script de configuration, recherchez la ligne suivante: static const char qt_configure_prefix_path_str [512 + 12] = "qt_prfxpath=c:/Programs/Qt/5.6.3-x32";
et remplacez le chemin par un seul point, de sorte que cette ligne ressemble à ceci: static const char qt_configure_prefix_path_str [512 + 12] = "qt_prfxpath=.";
Cette modification n'affectera que le comportement d'exécution du VB. L'étape d'installation de Qt lui-même utilisera le chemin d'origine, car il est maintenant stocké dans les Makefiles que nous ne modifions pas. - Ensuite, exécutez la génération à l'aide de la commande
nmake
- Et installez la bibliothèque
nmake install
aide de nmake install
Ouvrez maintenant une nouvelle fenêtre de console et faites de même pour la version 64 bits. Vous devrez remplacer «x32» par «x64» dans tous les chemins, et les commandes de préparation de l'environnement ressembleront à ceci:
md C:\Programs\Qt\build-x64 cd /d C:\Programs\Qt\build-x64 SET QTVER=5.6.3 "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 SET QTDIR=C:\Programs\Qt\%QTVER%-x64 SET PATH=%QTDIR%\bin;%PATH% SET QMAKESPEC=win32-msvc2010
Une fois l'installation terminée, les répertoires
build-x32
,
build-x64
et
5.6.3-src
peuvent être supprimés.
• MinGW
Décompressez simplement les archives 32 et 64 bits dans leurs répertoires d'installation respectifs.
• Cygwin
Lors de l'installation, vous devez choisir les packages
make
et
yasm
.
• SDL
- Décompressez l'archive SDL deux fois dans des chemins distincts:
C:\Programs\SDL\x32\
et C:\Programs\SDL\x64\
. - Déplacez tout le contenu du sous-répertoire
C:\Programs\SDL\x64\lib\x64\
vers son répertoire parent (c'est-à-dire dans C:\Programs\SDL\x64\lib\
), puis supprimez les sous-répertoires C:\Programs\SDL\x64\lib\x86
et x64
. - Faites de même pour la version 32 bits: déplacez le contenu de
C:\Programs\SDL\x32\lib\x86\
vers C:\Programs\SDL\x32\lib\
, puis supprimez C:\Programs\SDL\x64\lib\x86
et x64
.
• NASM
nasm-2.14.02-win64.zip
l'archive
nasm-2.14.02-win64.zip
dans
C:\Programs\
, puis renommez le répertoire résultant
nasm-2.14.02
en
nasm
.
• OpenSSL
- Décompressez l'archive OpenSSL dans
C:\Programs\OpenSSL\
deux fois, renommant les copies du répertoire openssl-1.1.1b
en openssl-1.1.1b-x32
et openssl-1.1.1b-x64
. - Ouvrez la console, générez et installez la version 32 bits en exécutant:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x86 /win7 COLOR 07 set PATH=%PATH%;C:\Programs\nasm cd /d C:\Programs\OpenSSL\openssl-1.1.1b-x32\ perl Configure VC-WIN32 no-shared --prefix=C:\Programs\OpenSSL\x32 --openssldir=C:\Programs\OpenSSL\x32\ssl nmake nmake test nmake install
Si l'étape de configuration génère un avertissement effrayant à propos d'un compilateur manquant, veuillez ignorer ce message, il ment de manière scandaleuse.
Si vous ne souhaitez pas utiliser NASM, sautez simplement la commande avec la modification PATH
et pour le script Configure
, spécifiez le paramètre supplémentaire no-asm
. - Ouvrez maintenant une nouvelle fenêtre de console et faites de même pour la version 64 bits:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 set PATH=%PATH%;C:\Programs\nasm cd /d C:\Programs\OpenSSL\openssl-1.1.1b-x64\ perl Configure VC-WIN64A no-shared --prefix=C:\Programs\OpenSSL\x64 --openssldir=C:\Programs\OpenSSL\x64\ssl nmake nmake test nmake install
La désactivation de NASM est la même qu'en 32 bits. - Vous pouvez maintenant supprimer les répertoires
C:\Programs\OpenSSL\openssl-1.1.1b-x32
et openssl-1.1.1b-x64
.
• cURL
- Décompressez l'archive cURL dans
C:\Programs\curl\
et renommez le sous curl-7.64.1
répertoire résultant curl-7.64.1
en curl-7.64.1-x32
. - Ouvrez le fichier
C:\Programs\curl\curl-7.64.1-x32\winbuild\MakefileBuild.vc
dans un éditeur de texte et recherchez le bloc de code suivant (autour des lignes n ° 61 à 69): !IF "$(VC)"=="6" CC_NODEBUG = $(CC) /O2 /DNDEBUG CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ CFLAGS = /I. /I../lib /I../include /nologo /W4 /wd4127 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL !ELSE CC_NODEBUG = $(CC) /O2 /DNDEBUG CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd CFLAGS = /I. /I ../lib /I../include /nologo /W4 /wd4127 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL !ENDIF
Après ces lignes, ajoutez la nouvelle directive: CFLAGS = $(CFLAGS) /DCURL_DISABLE_LDAP
Si vous ne le faites pas, la construction de VB échouera avec des erreurs de lien. - Ouvrez maintenant le fichier
C:\Programs\curl\curl-7.64.1-x32\winbuild\gen_resp_file.bat
, et après la toute première ligne ( @echo OFF
) insérez cette commande: cd .
Il ne fait rien, sauf la réinitialisation du code ERRORLEVEL
. Le script est si simple qu'il est possible de le terminer sans exécuter de commande qui changerait le code d'erreur. Donc, si ce code était différent de zéro avant de démarrer le script, il conservera sa valeur à la sortie du script, et nmake
penserait que c'est le script qui a renvoyé ce code d'erreur et terminerait la génération avec échec. L'ajout de ce faux cd
résout le problème. - Faites maintenant une copie complète de
curl-7.64.1-x32
sous le nom curl-7.64.1-x64
. - Ouvrez la console, créez la version 32 bits et copiez les fichiers dont nous avons besoin:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x86 /win7 COLOR 07 cd /d C:\Programs\curl\curl-7.64.1-x32\winbuild md C:\Programs\curl\x32 nmake /f Makefile.vc mode=static WITH_SSL=static DEBUG=no MACHINE=x86 SSL_PATH=C:\Programs\OpenSSL\x32 ENABLE_SSPI=no ENABLE_WINSSL=no ENABLE_IDN=no copy ..\builds\libcurl-vc-x86-release-static-ssl-static-ipv6\lib\libcurl_a.lib ..\..\x32\libcurl.lib xcopy /E ..\builds\libcurl-vc-x86-release-static-ssl-static-ipv6\include\curl ..\..\x32\include\curl\
- Ouvrez une autre fenêtre de console et créez la version 64 bits:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 cd /d C:\Programs\curl\curl-7.64.1-x64\winbuild md C:\Programs\curl\x64 nmake /f Makefile.vc mode=static WITH_SSL=static DEBUG=no MACHINE=x64 SSL_PATH=C:\Programs\OpenSSL\x64 ENABLE_SSPI=no ENABLE_WINSSL=no ENABLE_IDN=no copy ..\builds\libcurl-vc-x64-release-static-ssl-static-ipv6\lib\libcurl_a.lib ..\..\x64\libcurl.lib xcopy /E ..\builds\libcurl-vc-x64-release-static-ssl-static-ipv6\include\curl ..\..\x64\include\curl\ copy ..\builds\libcurl-vc-x64-release-static-ssl-static-ipv6\bin\curl.exe ..\..\x64\curl.exe
Notez qu'en plus de ce que nous avons fait pour la version 32 bits, nous copions ici également le fichier curl.exe
. Nous l'utiliserons plus tard pour télécharger l'image des ajouts d'invités. - Les répertoires
C:\Programs\curl\curl-7.64.1-x32
et curl-7.64.1-x64
ne sont plus nécessaires et peuvent être supprimés.
• libvpx
- Décompressez l'archive libvpx dans
C:\Programs\libvpx-build\
. - Lancez le terminal Cygwin, la construction y sera effectuée. Notre plate-forme cible est Visual Studio 2010; le système de build ne le prend en charge que partiellement: il tentera d'exécuter la build réelle à l'aide de
msbuild.exe
mais cela ne fonctionne pas pour une raison quelconque; Je n'ai pas réussi à comprendre pourquoi. Au lieu de cela, nous pouvons simplement exécuter Visual Studio lui-même et l'utiliser pour créer le projet. Heureusement, il peut être utilisé à partir de la ligne de commande, il n'est donc pas nécessaire de lancer l'IDE réel (bien que vous puissiez le faire si vous le souhaitez, auquel cas vous devrez modifier la variable PATH
et ajouter le chemin C:\Programs\cygwin64\bin
, ou de toute autre manière, permettre à VS de trouver yasm.exe
situé là et requis pour la construction). Ainsi, pour effectuer la construction des deux architectures, exécutez les commandes suivantes dans le terminal Cygwin: mkdir -p /cygdrive/c/Programs/libvpx-build/build32 cd /cygdrive/c/Programs/libvpx-build/build32 ../libvpx-1.7.0/configure --target=x86-win32-vs10 --disable-install-bins --disable-examples --disable-tools --disable-docs --prefix=../../libvpx make "/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/devenv.com" vpx.sln /Project vpx.vcxproj /Rebuild "Release|Win32" make install mkdir -p /cygdrive/c/Programs/libvpx-build/build64 cd /cygdrive/c/Programs/libvpx-build/build64 ../libvpx-1.7.0/configure --target=x86_64-win64-vs10 --disable-install-bins --disable-examples --disable-tools --disable-docs --prefix=../../libvpx make "/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/devenv.com" vpx.sln /Project vpx.vcxproj /Rebuild "Release|x64" make install
- Fermez Cygwin, nous n'en aurons plus besoin. Le répertoire
C:\Programs\libvpx-build
peut être supprimé.
• libopus
- Décompressez l'archive opus dans
C:\Programs\libopus-build\
, allez dans le sous opus-1.3\win32\VS2015
répertoire opus-1.3\win32\VS2015
. - Ce projet est conçu pour la nouvelle version de Visual Studio, nous devons donc le modifier pour le faire construire dans notre version 2010. Vous pouvez le faire en utilisant l'IDE ou un éditeur de texte brut. J'ai choisi ce dernier. Ouvrez le fichier
opus.vcxproj
et procédez comme suit:- Trouver toutes les lignes contenant le texte
<PlatformToolset>v140</PlatformToolset>
et remplacez v140
par v100
. Si vous utilisez IDE, il s'agit de l'option de configuration "Platrofm Toolset" située sur la page Configuration Properties -> General. N'oubliez pas les sélecteurs de configuration et de plate-forme en haut de la boîte de dialogue. - Ensuite, recherchez ce bloc de code:
<ItemDefinitionGroup> <ClCompile>
et ajoutez une nouvelle balise à l'intérieur: <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
Dans l'EDI, vous pouvez le faire en ouvrant la page Propriétés de configuration -> C / C ++ -> Général et en définissant "Debug Information Format" dans "ProgramDatabase (/ Zi)". En fait, vous pouvez le définir sur n'importe quelle autre valeur valide, nous n'avons pas du tout besoin de la base de données de débogage, mais avec une valeur non valide, le projet ne parviendra pas à se construire.
- Maintenant, construisons la version Release pour les deux plates-formes (en utilisant soit l'IDE VS, soit la ligne de commande) et copions la bibliothèque
opus.lib
et le sous include\
répertoire include\
dans notre chemin de destination: cd /d C:\Programs\libopus-build\opus-1.3\win32\VS2015 md C:\Programs\libopus\lib\x64 md C:\Programs\libopus\lib\Win32 xcopy /EC:\Programs\libopus-build\opus-1.3\include C:\Programs\libopus\include\ "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" opus.sln /Project opus.vcxproj /Rebuild "Release|x64" copy x64\Release\opus.lib C:\Programs\libopus\lib\x64\ "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" opus.sln /Project opus.vcxproj /Rebuild "Release|Win32" copy Win32\Release\opus.lib C:\Programs\libopus\lib\Win32\
- Le répertoire
C:\Programs\libopus-build
peut être supprimé.
• gSOAP
Ouvrez l'archive, allez dans le sous
gsoap-2.8\gsoap
répertoire
gsoap-2.8\gsoap
et décompressez son contenu dans
C:\Programs\gSOAP\
. OpenSSL 1.1.x nécessite gSOAP version 2.8.41 ou supérieure. Si, pour une raison quelconque, vous souhaitez utiliser une ancienne version, vous devrez appliquer le
correctif créé par
Mattias Ellert . L'application d'un correctif peut se faire soit manuellement (le format est simple: ouvrez les fichiers mentionnés, supprimez les lignes marquées avec moins, ajoutez des lignes marquées avec plus; le reste est le contexte), ou obtenez l'outil de
patch
porté pour Windows et utilisez-le.
• MiKTeX
- Décompressez l'archive dans
C:\Programs\MiKTeX\
. - Ouvrez la console et installez des modules supplémentaires:
"C:\Programs\MiKTeX\texmfs\install\miktex\bin\mpm.exe" --verbose --install=koma-script --install=ucs --install=tabulary --install=url --install=fancybox --install=fancyvrb --install=bera --install=charter --install=mptopdf
• DocBook
Pour la DTD XML, vous devez créer un répertoire et y décompresser le contenu de l'archive. Pour les feuilles de style XSL, tout le contenu est déjà dans un seul répertoire, vous devez donc l'extraire et le renommer ensuite.
Touche finale
L'environnement de génération est presque prêt, quelques étapes supplémentaires sont nécessaires. Téléchargez l'archive du code source de VirtualBox (si vous ne l'avez pas encore fait) et décompressez-la là où vous souhaitez travailler. J'ai choisi
C:\Devel\
à cet effet, y ai mis les codes sources décompressés et renommé le sous-répertoire en
VirtualBox-src
.
• Ajout de certificats
Si vous n'avez pas de certificat payant, je vous recommande de créer au moins un certificat personnel auto-signé: il est plus facile de faire charger Windows des pilotes auto-signés que des pilotes non signés. Pour ce faire, ouvrez la console avec des privilèges élevés et exécutez les commandes suivantes qui ajouteront deux certificats (SHA-1 et SHA-256) et les importeront dans votre stockage personnel:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 makecert.exe -a sha1 -r -pe -ss my -n "CN=Roga and Kopyta Ltd" C:\Devel\testcert_1.cer makecert.exe -a sha256 -r -pe -ss my -n "CN=Roga and Kopyta Ltd" C:\Devel\testcert_256.cer certmgr.exe -add C:\Devel\testcert_1.cer -s -r localMachine root certmgr.exe -add C:\Devel\testcert_256.cer -s -r localMachine root
Vous pouvez, bien sûr, choisir votre propre nom pour les certificats au lieu de "Roga and Kopyta Ltd", et le chemin pour stocker les fichiers. Maintenant, nous devons obtenir les empreintes des certificats générés. Ouvrez la console de gestion des certificats (en exécutant
certmgr.msc
) et accédez au stockage personnel. Vous y verrez les deux nouveaux certificats nommés "Roga et Kopyta Ltd". Double-cliquez sur le premier; dans la boîte de dialogue qui apparaît, accédez à l'onglet
Détails . Le champ "Algorithme de signature" contient le nom de l'algorithme: sha256RSA ou sha1RSA. Faites défiler vers le bas pour le champ "Thumbprint" qui contient la séquence de nombres hexadécimaux. Copiez cette valeur complète et notez-la quelque part. Faites de même pour le deuxième certificat; n'oubliez pas de marquer quelle empreinte numérique était pour SHA-1 et laquelle pour SHA-256.
• Construction de xmllint
L'une des étapes de construction nécessite le programme
xmllint
. Je ne l'ai pas mis dans la liste des exigences de construction car ses sources sont regroupées dans l'archive VirtualBox. Mais vous devrez toujours le construire vous-même, car les règles de construction VB ne le font pas. J'ai choisi
C:\Programs\xmllint
comme répertoire de destination.
- Copiez le répertoire
C:\Devel\VirtualBox-src\src\libs\libxml2-2.9.4
dans C:\Programs\
pour vous assurer que sa construction n'affecte en aucun cas VB. - Ouvrez la console et exécutez les commandes suivantes:
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 cd /d C:\Programs\libxml2-2.9.4\win32 cscript.exe configure.js cruntime=/MT prefix=C:\Programs\xmllint iconv=no nmake /f Makefile.msvc nmake /f Makefile.msvc install
- Supprimez le répertoire
C:\Programs\libxml2-2.9.4
.
• Modifications des fichiers VB
Avant de commencer la construction, nous devons également apporter des modifications au code source VB. L'ensemble complet d'entre eux est présenté ici sous la forme d'un fichier de patch téléchargeable qui peut être appliqué soit manuellement, soit en utilisant l'outil de
patch
(que vous devez télécharger séparément):
»
Vbox_build.patchS'il n'y a eu aucun problème lors de l'application du patch, vous pouvez passer à l'
étape suivante . Cependant, si vous avez eu des problèmes et avez besoin de plus d'informations sur des changements particuliers, ou si vous voulez simplement comprendre ce qui est changé et pourquoi, vous êtes invités à continuer et à lire les détails fournis ci-dessous. Veuillez noter que les modifications viennent ici dans un ordre différent par rapport au fichier de patch. Les chemins d'accès aux fichiers sont spécifiés par rapport au répertoire de code source VB
C:\Devel\VirtualBox-src
.
- Fichier
configure.vbs
:- La ligne de code:
if Shell(DosSlashes(strPathVC & "/bin/cl.exe"), True) <> 0 then
est remplacé par: if Shell(DosSlashes(strPathVC & "/bin/cl.exe") & " /?", True) <> 0 then
Cette ligne effectue la vérification du compilateur, mais elle oublie que cl.exe
sans aucun argument renvoie une erreur et est donc considéré comme un compilateur non valide. Ajout du " /?
"L'argument fait sortir l'aide et quitter avec le code non-erreur 0. - Passons maintenant à la fonction
CheckForMinGW32Sub
. Comme son nom l'indique, il vérifie la validité du MinGW 32 bits. Cependant, il est conçu pour la version 3.3.3, alors que j'utilise 4.5.4 qui a une structure de fichiers / répertoires différente, j'ai donc remplacé la fonction entière par le code suivant (qui est fondamentalement juste une copie de CheckForMinGWw64Sub
adapté pour le Variante 32 bits): function CheckForMinGW32Sub(strPathMingW32, strPathW32API) g_strSubOutput = "" if strPathW32API = "" then strPathW32API = strPathMingW32 LogPrint "trying: strPathMingW32=" &strPathMingW32 & " strPathW32API=" & strPathW32API if LogFileExists(strPathMingW32, "bin/gcc.exe") _ And LogFileExists(strPathMingW32, "bin/ld.exe") _ And LogFileExists(strPathMingW32, "bin/objdump.exe") _ And LogFileExists(strPathMingW32, "bin/dllwrap.exe") _ And LogFileExists(strPathMingW32, "bin/dlltool.exe") _ And LogFileExists(strPathMingW32, "bin/as.exe") _ And LogFileExists(strPathMingW32, "include/bfd.h") _ And LogFileExists(strPathMingW32, "lib32/libgcc_s.a") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/lib/dllcrt1.o") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/lib/dllcrt2.o") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/lib/libmsvcrt.a") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/lib/libmsvcr100.a") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/include/_mingw.h") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/include/stdint.h") _ And LogFileExists(strPathMingW32, "i686-w64-mingw32/include/windows.h") _ then if Shell(DosSlashes(strPathMingW32 & "/bin/gcc.exe") & " -dumpversion", True) = 0 then dim offVer, iMajor, iMinor, iPatch, strVer
- Notre prochaine fonction est
CheckForCurlSub
, et le bloc de code à éditer est: if LogFileExists(strPathCurl, "include/curl/curl.h") _ And LogFindFile(strPathCurl, "libcurl.dll") <> "" _ And LogFindFile(strPathCurl, "libcurl.lib") <> "" _
Il vérifie la validité de libcurl, mais il nécessite une version liée dynamiquement et échoue si aucun fichier DLL ne peut être trouvé. Nous utilisons une version liée statiquement, donc la vérification de la DLL doit malheureusement nous laisser: if LogFileExists(strPathCurl, "include/curl/curl.h") _ And LogFindFile(strPathCurl, "libcurl.lib") <> "" _
- Allez maintenant dans la fonction
CheckForPython
où la variable VBOX_BLD_PYTHON
est générée: CfgPrint "VBOX_BLD_PYTHON := " & strPathPython & "\python.exe"
La barre oblique inverse devant python.exe
doit être remplacée par la suivante: "/python.exe"
(sans ce correctif, certaines vérifications pendant la procédure de génération échoueront; je n'ai remarqué aucun autre effet indésirable, mais c'est plus joli sans messages d'échec, et en tout cas mieux vaut prévenir que guérir). - La version Windows du script de configuration ne prend pas en charge libvpx et libopus, je les ai donc ajoutées moi-même. Bien sûr, le moyen le plus simple était de coder en dur les chemins vers les bibliothèques, mais j'ai préféré l'implémenter comme tous les autres composants, en passant le chemin dans la ligne de commande et en vérifiant correctement la validité. Le code principal pour cela se compose des deux fonctions de vérification:
L' usage
fonction est utilisée pour imprimer la liste des arguments de ligne de commande; y ajouter nos deux nouveaux arguments: Print " --with-libvpx=PATH " Print " --with-libopus=PATH "
Au début de la fonction Main
nombreuses variables sont définies pour stocker les chemins d'accès aux composants, nous devons en ajouter deux nouvelles: strOptVpx = "" strOptOpus = ""
Un peu plus loin, le bloc de select-case
qui traite les arguments et remplit les variables; en ajoutant notre contribution: case "--with-libvpx" strOptVpx = strPath case "--with-libopus" strOptOpus = strPath
Et, enfin, presque à la toute fin du fichier, il y a la chaîne de tous ces appels de fonction de vérification, c'est là que nous ajoutons l'appel de nos deux nouvelles fonctions: CheckForVpx strOptVpx CheckForOpus strOptOpus
- Le fichier suivant est
src\VBox\Runtime\Makefile.kmk
. Nous devons trouver les définitions des variables VBoxRT_LIBS.win
et VBoxRT-x86_LIBS.win
, et y ajouter deux nouvelles bibliothèques, crypt32.lib
et bcrypt.lib
. Donc, le code suivant: VBoxRT_LIBS.win = \ $(PATH_SDK_$(VBOX_WINDDK)_LIB)/vccomsup.lib \ $(PATH_SDK_$(VBOX_WINDDK)_LIB)/wbemuuid.lib \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
se transforme en: VBoxRT_LIBS.win = \ $(PATH_SDK_$(VBOX_WINDDK)_LIB)/vccomsup.lib \ $(PATH_SDK_$(VBOX_WINDDK)_LIB)/wbemuuid.lib \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib \ $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/crypt32.lib \ $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/bcrypt.lib
(ne manquez pas la barre oblique inverse après delayimp.lib
!); et, respectivement, ce bloc: VBoxRT-x86_LIBS.win = \ $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/vccomsup.lib \ $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/wbemuuid.lib \ $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/delayimp.lib
devient: VBoxRT-x86_LIBS.win = \ $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/vccomsup.lib \ $(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/wbemuuid.lib \ $(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/delayimp.lib \ $(PATH_SDK_$(VBOX_WINPSDK)_LIB.x86)/crypt32.lib \ $(PATH_SDK_$(VBOX_WINPSDK)_LIB.x86)/bcrypt.lib
Cette modification est nécessaire pour une liaison réussie de VBoxRT.dll
. Je ne suis pas sûr à 100% pourquoi il en est ainsi, la version Oracle n'a pas la dépendance au moment du chargement sur crypt32.dll
, elle est chargée au moment de l'exécution, donc le fichier LIB ne devrait pas être requis. Cependant sans lui, l'éditeur de liens ne peut pas trouver certaines fonctions et échoue. Je soupçonne que cela pourrait être lié aux options de construction d'OpenSSL, mais je ne l'ai pas vérifié, l'ajout de la dépendance est plus facile. Et la deuxième dépendance, bcrypt.dll
, est une exigence pour le nouveau OpenSSL 1.1.1. - Si vous avez gSOAP de la version 2.8.79 ou supérieure, vous devrez modifier le fichier
src\VBox\Runtime\r3\win\VBoxRT-openssl-1.1plus.def
et ajouter les lignes suivantes à la liste des exportations: OpenSSL_version_num DH_generate_parameters_ex DH_new ASN1_STRING_get0_data
Cette liste définit quelles fonctions sont exportées par la bibliothèque VBoxRT.dll
(qui contient OpenSSL à l'intérieur). Lorsque l'outil VBoxWebSrv.exe
est lié, selon la version de gSOAP, il peut nécessiter des fonctions OpenSSL supplémentaires. Puisqu'ils manquent dans la liste des exportations, l'éditeur de liens ajoute OpenSSL lui-même et se plaint immédiatement de tonnes de conflits entre cet OpenSSL externe et sa propre copie déjà intégrée à VBoxRT
. L'ajout des exportations susmentionnées résout le problème. - Comme je l'ai mentionné au début, je ne crée pas les ajouts d'invités, mais j'ai besoin que leur image ISO fasse partie de la distribution. Les règles de construction sont conçues pour ce scénario, mais elles s'attendent à ce que l'image ISO prête apparaisse comme par magie au bon endroit au bon moment. J'ai ajouté cette magie dans le fichier
src\VBox\Makefile.kmk
. Recherchez le code suivant: ifdef VBOX_WITH_ADDITIONS include $(PATH_SUB_CURRENT)/Additions/Makefile.kmk endif
et juste en dessous, il y a la règle pour le téléchargement automatique du fichier image: ifndef VBOX_WITHOUT_ADDITIONS_ISO $(VBOX_PATH_ADDITIONS_ISO)/VBoxGuestAdditions.iso: $(QUIET)$(MKDIR) -p $(@D) $(VBOX_RETRY) $(TOOL_CURL_FETCH) http://download.virtualbox.org/virtualbox/$(VBOX_VERSION_STRING_RAW)/VBoxGuestAdditions_$(VBOX_VERSION_STRING_RAW).iso -o $@ endif
Si vous modifiez les fichiers manuellement au lieu d'appliquer le correctif, veuillez noter que les commandes de règle doivent commencer par le caractère de tabulation. - Avant la version 6.0, la documentation était l'un des sous-systèmes qui s'est construit avec succès sans aucune modification. Je ne sais pas ce qui n'allait pas, mais il a été considérablement repensé de telle sorte qu'il ne fonctionne plus sur mon système de génération. Je n'ai aucune idée de la façon dont Oracle construit lui-même la documentation (peut-être sur un système * NIX), mais pour moi, les règles de construction ont continué à perdre des barres obliques dans les chemins, ou à en ajouter un excès, et en conséquence, elles n'ont pas réussi à trouver les fichiers cibles en raison de disparités dans les fichiers de catalogue. J'ai finalement réussi à combiner quelques modifications qui ont permis de construire la documentation sans erreur. Tout d'abord, l'un des répertoires cibles était manquant, de sorte que certains des fichiers intermédiaires n'ont pas pu être créés. Ce problème est résolu dans le fichier
doc\manual\Makefile.kmk
, à l'intérieur du bloc de code suivant: define def_vbox_refentry_to_user_sect1 $$(VBOX_PATH_MANUAL_OUTBASE)/$(1)/user_$(2): $(3) \ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl \ $$(VBOX_XML_CATALOG) $$(VBOX_XML_CATALOG_DOCBOOK) $$(VBOX_XML_CATALOG_MANUAL) \ $$(VBOX_VERSION_STAMP) | $$(dir $$@) $$(call MSG_TOOL,xsltproc $$(notdir $$(filter %.xsl,$$^)),,$$(filter %.xml,$$^),$$@) $$(QUIET)$$(RM) -f "$$@" $$(QUIET)$$(call VBOX_XSLTPROC_WITH_CAT) --output $$@ $$(VBOX_PATH_MANUAL_SRC)/docbook-refentry-to-manual-sect1.xsl $$< endef
Juste après le $$(RM)
j'ai ajouté une commande pour créer le répertoire manquant: $$(QUIET)$$(MKDIR) -p "$$(@D)"
Quant aux barres obliques, les correctifs se trouvent dans le fichier doc\manual\Config.kmk
. Je n'ai pas pu trouver de solution «normale» pour cela, mais il existe une solution de contournement suffisamment bonne pour des raisons pratiques, ce qui implique de dupliquer les règles de substitution de chemin pour les chemins incorrects. Tout d'abord, sous la ligne: VBOX_FILE_URL_MAYBE_SLASH = $(if $(eq $(KBUILD_HOST),win),/,)
I've created two new variables which basically contain the same paths as their origins, but with triple slash after the disk letter instead of a single slash: VBOX_PATH_MANUAL_SRC_SLASHED = $(subst :/,:///,$(VBOX_PATH_MANUAL_SRC)) VBOX_PATH_MANUAL_OUTBASE_SLASHED = $(subst :/,:///,$(VBOX_PATH_MANUAL_OUTBASE))
A little bit below that, there is a rule for creating the catalog file: $(VBOX_XML_CATALOG): $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_L1,Creating catalog $@) $(QUIET)$(APPEND) -tn "$@" \ '<?xml version="1.0"?>' \ '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">' \ '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \ ' <delegatePublic publicIdStartString="-//OASIS/ENTITIES DocBook XML" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegatePublic publicIdStartString="-//OASIS/DTD DocBook XML" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateURI uriStartString="http://www.oasis-open.org/docbook/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_OUTBASE)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ '</catalog>'
For each line which contains the variable VBOX_PATH_MANUAL_SRC
or VBOX_PATH_MANUAL_OUTBASE
(except for the line with the file://
prefix), I've appended the copy of the whole line, but with the variable replaced with its triple-slash counterpart. The result looks like this: $(VBOX_XML_CATALOG): $(MAKEFILE_CURRENT) | $$(dir $$@) $(call MSG_L1,Creating catalog $@) $(QUIET)$(APPEND) -tn "$@" \ '<?xml version="1.0"?>' \ '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">' \ '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \ ' <delegatePublic publicIdStartString="-//OASIS/ENTITIES DocBook XML" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegatePublic publicIdStartString="-//OASIS/DTD DocBook XML" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateURI uriStartString="http://www.oasis-open.org/docbook/" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_DOCBOOK)"/>' \ ' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateSystem systemIdStartString="$(VBOX_PATH_MANUAL_SRC_SLASHED)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_SRC_SLASHED)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_MANUAL_SRC)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_OUTBASE)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ ' <delegateURI uriStartString="$(VBOX_PATH_MANUAL_OUTBASE_SLASHED)" catalog="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_XML_CATALOG_MANUAL)"/>' \ '</catalog>'
Even further down, there is another rule for creating an auxiliary catalog file; the starting line is: $(VBOX_XML_CATALOG_MANUAL): $(MAKEFILE_CURRENT) | $$(dir $$@)
Here I'm doing the same operation as above. In addition, in the beginning of the generated file there are several lines defining the entries in the common/
subdirectory: ' <system systemId="$(VBOX_PATH_MANUAL_SRC)/common/oracle-accessibility-en.xml" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-accessibility-en.xml"/>' \ ' <system systemId="$(VBOX_PATH_MANUAL_SRC)/common/oracle-support-en.xml" uri="file://$(VBOX_FILE_URL_MAYBE_SLASH)$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-support-en.xml"/>' \
With these we have the opposite problem: triple slash after the file
is replaced with a single slash. I worked this around by getting rid of the file
protocol altogether and replacing those URIs with direct file system paths in the target address (the uri
attribute). The result for these lines looks like this (including the aforementioned fix): ' <system systemId="$(VBOX_PATH_MANUAL_SRC)/common/oracle-accessibility-en.xml" uri="$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-accessibility-en.xml"/>' \ ' <system systemId="$(VBOX_PATH_MANUAL_SRC_SLASHED)/common/oracle-accessibility-en.xml" uri="$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-accessibility-en.xml"/>' \ ' <system systemId="$(VBOX_PATH_MANUAL_SRC)/common/oracle-support-en.xml" uri="$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-support-en.xml"/>' \ ' <system systemId="$(VBOX_PATH_MANUAL_SRC_SLASHED)/common/oracle-support-en.xml" uri="$(VBOX_PATH_MANUAL_SRC)/en_US/oracle-support-en.xml"/>' \
- When VB is built with signing, most of its binaries receive the integrity check flag (the linker option
/IntegrityCheck
) which forces Windows to check digital signatures and forbids launching applications which are signed incorrectly. If you have a valid paid certificate that's not a problem; however with a self-signed certificate VB will refuse to start, even if Windows is booted in the test mode. I've modified the file Config.kmk
in such a way that this flag is only added when you have a full-grown certificate (the criterion of that is presence of a cross-certificate in LocalConfig.kmk
; see below ). The changes look like this:- A new variable
VBOX_INTEGRITY_CHECK
is added, which contains the desired value of the option: if defined(VBOX_SIGNING_MODE) && defined(VBOX_CROSS_CERTIFICATE_FILE) VBOX_INTEGRITY_CHECK := /IntegrityCheck else VBOX_INTEGRITY_CHECK := /IntegrityCheck:NO endif
- Below that there is the
editbin
call: $(VBOX_VCC_EDITBIN) /LargeAddressAware /DynamicBase /NxCompat /Release /IntegrityCheck \ /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \ "$@"
Here I've replaced the unconditional /IntegrityCheck
with the new variable $(VBOX_INTEGRITY_CHECK)
. - Next, look for the blocks of the following kinds:
ifdef VBOX_SIGNING_MODE TEMPLATE_XXXXXX_LDFLAGS += -IntegrityCheck endif
ou if defined(VBOX_SIGNING_MODE) && defined(VBOX_WITH_HARDENING) TEMPLATE_XXXXXX_LDFLAGS += -IntegrityCheck endif
where « XXXXXX
» stands for various component names. There are 6 such blocks in total, 3 of each kind. Here I've modified the condition by adding a check for cross-certificate. The first line then turns into, respectively: if defined(VBOX_SIGNING_MODE) && defined(VBOX_CROSS_CERTIFICATE_FILE)
ou if defined(VBOX_SIGNING_MODE) && defined(VBOX_CROSS_CERTIFICATE_FILE) && defined(VBOX_WITH_HARDENING)
- Two more files modified by me do not take immediate part in building of VB:
src\VBox\Installer\win\Scripts\PackDriversForSubmission.cmd
and UnpackBlessedDrivers.cmd
. These auxiliary scripts can be used if you intend to send the drivers into Microsoft for Windows 10 signing. The first script prepares a CAB archive for sending; the second one unpacks the resultant ZIP archive with the signed drivers and verifies the signatures. In the packing script all I did was just fixing several typos. In the unpacking script I added ability to specify path to the signtool
program, and got rid of the unzip
tool by replacing it with a small Perl script. The signing procedure is described below. If you don't plan to get the Microsoft signature you can simply ignore all these changes in the scripts.
• VB build configuration file
Maintenant, nous devons créer le fichier LocalConfig.kmk
dans le répertoire des sources VB et y écrire tous les chemins et paramètres de construction. Vous pouvez utiliser le texte suivant comme modèle: VBOX_WITH_HARDENING := VBOX_PATH_WIX := C:\Programs\WiX VBOX_GSOAP_INSTALLED := 1 VBOX_PATH_GSOAP := C:\Programs\gSOAP VBOX_WITH_COMBINED_PACKAGE := 1 VBOX_WITH_QT_PAYLOAD := 1 VBOX_WITH_QTGUI_V5 := 1 VBOX_SIGNING_MODE := release VBOX_CERTIFICATE_SUBJECT_NAME := Roga and Kopyta Ltd VBOX_CERTIFICATE_FINGERPRINT := XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX VBOX_CERTIFICATE_SHA2_SUBJECT_NAME := Roga and Kopyta Ltd VBOX_CERTIFICATE_SHA2_FINGERPRINT := XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX VBOX_TSA_URL := http://timestamp.digicert.com VBOX_TSA_SHA2_URL := http://timestamp.digicert.com VBOX_TSA_URL_ARGS := /t "$(VBOX_TSA_URL)" VBOX_TSA_SHA2_URL_ARGS := /tr "$(VBOX_TSA_SHA2_URL)" /td sha256 VBOX_CROSS_CERTIFICATE_FILE := VBOX_CROSS_CERTIFICATE_FILE_ARGS := VBOX_CROSS_CERTIFICATE_SHA2_FILE := VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS := VBOX_PATH_SIGN_TOOLS := C:\Programs\DevKits\8.1\bin\x64 VBOX_PATH_SELFSIGN := C:\WinDDK\7600.16385.1\bin\selfsign VBOX_PATH_WISUMINFO := "C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\sysmgmt\msi\scripts\WiSumInf.vbs" VBOX_PATH_WISUBSTG := "C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\sysmgmt\msi\scripts\WiSubStg.vbs" VBOX_WITH_DOCS := 1 VBOX_WITH_DOCS_CHM := 1 VBOX_WITH_DOCS_PACKING := 1 VBOX_WITH_ADDITIONS := VBOX_WITH_ADDITIONS_PACKING := 1 VBOX_HAVE_XMLLINT := 1 VBOX_XMLLINT := C:\Programs\xmllint\bin\xmllint.exe VBOX_PATH_DOCBOOK := C:/Programs/DocBook/xsl VBOX_PATH_DOCBOOK_DTD := C:/Programs/DocBook/xml VBOX_PATH_HTML_HELP_WORKSHOP := "C:\Program Files (x86)\HTML Help Workshop" VBOX_PDFLATEX := C:\Programs\MiKTeX\texmfs\install\miktex\bin\pdflatex.exe VBOX_PDFLATEX_CMD := $(VBOX_PDFLATEX) -halt-on-error -interaction batchmode TOOL_CURL_FETCH := C:\Programs\curl\x64\curl.exe PATH_TOOL_NASM := C:/Programs/nasm VBOX_INSTALLER_LANGUAGES := en_US VBOX_WITH_TESTCASES := VBOX_WITH_VALIDATIONKIT := VBOX_WITH_VBOX_IMG := 1 VBOX_WITH_RECORDING := 1 VBOX_WITH_AUDIO_RECORDING := 1 SDK_VBOX_VPX := 1 VBOX_WITH_LIBVPX := 1 SDK_VBOX_OPUS := 1 VBOX_WITH_LIBOPUS := 1 VBOX_BUILD_PUBLISHER := _OSE
Vous devrez modifier ce modèle:- Les variables
VBOX_CERTIFICATE_SUBJECT_NAME
et VBOX_CERTIFICATE_SHA2_SUBJECT_NAME
doivent contenir les noms des certificats SHA-1 et SHA-256, respectivement. - Les variables
VBOX_CERTIFICATE_FINGERPRINT
et VBOX_CERTIFICATE_SHA2_FINGERPRINT
doivent contenir les empreintes de ces certificats; vous les avez copiés précédemment à partir de la console de gestion des certificats. - If you have a paid certificate you should delete the lines defining the variables
VBOX_CROSS_CERTIFICATE_FILE_ARGS
and VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS
, then in the variables VBOX_CROSS_CERTIFICATE_FILE
and VBOX_CROSS_CERTIFICATE_SHA2_FILE
(without « _ARGS
») put the full path to the cross-certificate (without it the drivers will not be accepted). You can download it from the web site of the company that issued the certificate, or from Microsoft . - You can fine-tune the signing process using various additional variables and macros to redefine the certificate storage, timestamp server, or even construct a full command line for the
signtool
program. You can take a look into the file Config.kmk
below the comment «Code Signing», there you'll find which variables are defined and how they are used. - If you've installed some of the programs into paths different from mine, you need to fix those paths in the template. It's strongly recommended to keep the path style for each variable (forward/backward slashes), sometimes it's critical for successful build.
- Fox WiX you need to specify the path to its binaries. With the portable version, it is just the directory where you unpacked it; if you used the installer, the binaries will be located in the subdirectory
bin
. Please, note, that the path must not contain spaces! If it does you have to convert it into the 8.3 format (you can use dir /x
for that). Unfortunately, enclosing the path in quotes does not work with this variable. - La variable
VBOX_BUILD_PUBLISHER
spécifie le suffixe de marque dans le numéro de version. Par défaut, il s'agit de "_OSE" (c'est-à-dire que la version complète du produit est "6.0.4_OSE"). Vous pouvez spécifier ici tout autre suffixe ou le mettre à vide pour vous en débarrasser complètement. Mais si vous supprimez complètement la variable, elle utilisera la valeur par défaut "_OSE".
Les autres variables sont principalement utilisées pour déclarer les composants à construire. Et, bien sûr, la déclaration principale vient tout en haut: désactivez le durcissement.
Création de virtualbox
Enfin, nous pouvons maintenant commencer à construire VirtualBox lui-même. Si vous préférez normalement construire pour différentes plates-formes en parallèle, vous devrez vous en passer pour l'instant, ou utiliser deux copies d'arborescence source distinctes, car VB a un fichier de configuration commun qui est généré avant la construction et contient des données dépendantes de la plate-forme. Il ne serait pas agréable pour le compilateur de le jeter soudainement de l'environnement de construction 64 bits dans l'environnement 32 bits au milieu du processus de construction.Si vous avez besoin de signatures de pilotes compatibles Windows 10, veuillez vous reporter aux informations fournies après la description de la procédure principale.- Commençons par la version 64 bits. Ouvrez la console et exécutez les commandes suivantes:
cd /d C:\Devel\VirtualBox-src "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x64 /win7 COLOR 07 set BUILD_TARGET_ARCH=amd64 cscript configure.vbs --with-DDK=C:\WinDDK\7600.16385.1 --with-MinGW-w64=C:\Programs\mingw64 --with-MinGW32=C:\Programs\mingw32 --with-libSDL=C:\Programs\SDL\x64 --with-openssl=C:\Programs\OpenSSL\x64 --with-openssl32=C:\Programs\OpenSSL\x32 --with-libcurl=C:\Programs\curl\x64 --with-libcurl32=C:\Programs\curl\x32 --with-Qt5=C:\Programs\Qt\5.6.3-x64 --with-libvpx=C:\Programs\libvpx --with-libopus=C:\Programs\libopus --with-python=C:/Programs/Python env.bat kmk kmk C:/Devel/VirtualBox-src/out/win.x86/release/obj/Installer/VirtualBox-6.0.4_OSE-r128164-MultiArch_amd64.msi
The configure.vbs
script verifies the environment and generates configuration files ( AutoConfig.kmk
and env.bat
). The first kmk
command builds the binaries and collect them into out\win.amd64\bin\
. And the last command packs them all into the intermediate MSI package. Important notes:- You must use forward slashes in the last command. With backslashes,
kmk
would fail to find the build rules. - Even though we are building the 64-bit version, the target package is located in
out\win.x86\…
, because the final stage of the build will be performed from the 32-bit build environment. - If you've changed the branding suffix you need to change the name of the target package by replacing the «_OSE» with what you specified in the variable
VBOX_BUILD_PUBLISHER
. - The revision number in the MSI package name (128164) can be found in the file
Config.kmk
inside the VBOX_SVN_REV_FALLBACK
variable definition. Please, note, that this value may be different from revisions of the official distribution (for instance, the version 6.0.4 has release number 128413). Unfortunately, I have no idea why.
- Now we need to build the 32-bit version and pack everything together. For that, open a new console window, and run the following commands:
cd /d C:\Devel\VirtualBox-src "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release /x86 /win7 COLOR 07 set BUILD_TARGET_ARCH=x86 cscript configure.vbs --with-DDK=C:\WinDDK\7600.16385.1 --with-MinGW-w64=C:\Programs\mingw64 --with-MinGW32=C:\Programs\mingw32 --with-libSDL=C:\Programs\SDL\x32 --with-openssl=C:\Programs\OpenSSL\x32 --with-libcurl=C:\Programs\curl\x32 --with-Qt5=C:\Programs\Qt\5.6.3-x32 --with-libvpx=C:\Programs\libvpx --with-libopus=C:\Programs\libopus --with-python=C:/Programs/Python env.bat kmk kmk C:/Devel/VirtualBox-src/out/win.x86/release/bin/VirtualBox-6.0.4_OSE-r128164-MultiArch.exe
Same as with the 64-bit, you need to replace the «_OSE» suffix with what you have.
Notice how in the last command we are building an EXE
, and not an MSI
. This is the final installer which will cause the 32-bit package to be built automatically, from dependencies. - Even if you have a paid certificate you will find that you cannot install this distribution into Windows 10 booted with Secure Boot enabled. This OS has stricter requirements, and the drivers must be signed by none other than Microsoft themselves. The procedure is explained in details on various Internet resources and is unrelated to this article, so I'm not going to go deep into this topic. Instead I'll outline the main steps you need to take for integrating this task with the VB build procedure.
Si aucun de nous n'a rien gâché, toute cette longue chaîne devrait vous apporter un nouveau programme d'installation de VirtualBox brillant qui ne diffère de celui d'Oracle que par son icône, l'image About, et, bien sûr, le manque profond de durcissement. Il n'est pas difficile de remplacer également l'icône et l'image, mais je n'entrerai pas dans ce sujet ici.Pour plus de commodité, j'ai créé un fichier batch unique qui automatise la construction complète de VB. Vous pouvez l'utiliser si vous avez besoin de créer régulièrement le programme d'installation complet.Encore quelques mots sur l'installation de la distribution résultante si vous utilisez un certificat auto-signé. Comme il a été soudainement découvert, dans Windows 8/10, il ne suffit pas de démarrer en mode test, l'installation échoue toujours en affirmant que les signatures de pilote ne sont pas valides. Vous pouvez contourner ce problème en ajoutant les certificats dans votre stockage racine CA:- Ouvrez la boîte de dialogue Propriétés du programme d'installation VB en cliquant dessus avec le bouton droit et en sélectionnant Propriétés , puis passez à l' onglet Signatures numériques . Vous y trouverez deux signatures, toutes deux nommées "Roga et Kopyta Ltd", l'une est sha1, l'autre sha256. Sélectionnez le premier, cliquez sur Détails .
- Une autre boîte de dialogue apparaît, dans laquelle vous devez cliquer sur le bouton Afficher le certificat .
- One more dialog, click Install Certificate .
- In the Import wizard, select the location «Local Machine», click Next . After UAC confirmation (if needed), there's the certificate store selection. Select «Place all certificates in the following store», then click Browse and choose the store named «Trusted Root Certification Authorities». Then Next , Finish . You're done, the certificate is installed.
- Close all the dialogs but the very first one, select the second signature (sha256) and repeat the steps 2 to 4 for it too.
- Close all the dialogs, run the installer. Now it should work fine.
Epilogue
Quand j'ai fini d'écrire l'article, j'ai été moi-même surpris par son volume. Au début, je comptais entrer dans de nombreux détails sur les raisons de choisir telle ou telle façon de résoudre chaque problème, expliquer exactement quel était le problème et quelles solutions alternatives pourraient être applicables. Mais très vite, il est devenu clair que, s'il était chargé de tous ces détails, le texte serait monstrueusement énorme. Je dois donc m'excuser pour les recettes ressemblant à "faites-le et ne posez pas de questions". J'ai une forte aversion pour eux-mêmes, mais je ne pouvais tout simplement pas trouver d'autre moyen. Parfois, j'essayais toujours de décrire ce qui se passait, pour adoucir l'impression.Une grande quantité de détails sur le système de construction VB devaient rester derrière la scène; car j'ai tous deux hésité à gonfler le texte et, parfois, j'étais trop paresseux pour aller chercher une approche différente et plus efficace pour résoudre un problème. Après tout, mon objectif principal, au départ, était de me procurer une version fonctionnelle de la version actuelle de VirtualBox. 4.3.12 était déjà bien dépassé à ce moment-là, mais je ne pouvais pas risquer de mettre à jour l'un de mes outils les plus activement utilisés vers la version renforcée qui pourrait simplement cesser de fonctionner à tout moment. Bien que, de temps en temps, je revienne et, ayant trouvé quelque chose de nouveau, l'ajoute à cet article.J'espère que cet article trouvera son public. Si vous êtes intéressé à voir et analyser le résultat final mais que vous ne voulez pas mettre en place toute la pile de programmes, vous pouvez obtenir ma version de la distribution ici:version 6.0.4 . Tous les pilotes (et autres fichiers) sont signés avec un certificat auto-signé non approuvé, donc pour l'installer dans la version Windows 64 bits, vous devrez redémarrer en mode test. Si vous avez des questions, des suggestions, des recommandations, n'hésitez pas à m'écrire ici dans les commentaires, ou via des messages personnels. Que l'Open Source soit avec vous!
Amendements
Archive• Article russe publié le 21/01/2016
- VirtualBox 5.0.12.
• Mise à jour du 24/05/2016
- L'article est mis à jour pour VB 5.0.20, l'un des principaux changements étant la double signature SHA-1 / SHA-256.
- Ajout de la désactivation des contrôles de signature forcée si des certificats auto-signés sont utilisés.
- Ajout d'informations sur la solution de contournement de l'échec d'installation de la distribution auto-signée.
- Les versions de la bibliothèque ont été mises à jour.
- Disabled some unused components for speeding up the build process.
- Minor fixes and improvements.
• Update of 29.07.2016
- The article is updated for VB 5.1.2; the most important change is upgrading to Qt5. The differences from VB 5.0.x procedure are specified where applicable.
- Library versions were updated.
- The full build batch was updated to check error codes after each operation.
- Minor fixes and improvements.
• Update of 15.09.2016
- The article is updated for VB 5.1.6.
- Library versions were updated.
- Added NASM for building OpenSSL.
- Added OpenSSL into cURL; this fixes the broken function of checking for updates and downloading the Extension Pack.
- The full build batch now reads the VB version automatically.
- Various minor fixes and improvements.
• Update of 30.11.2016
- The article is updated for VB 5.1.10.
- Library versions were updated; particularly OpenSSL was upgraded to version 1.1.x.
- Fixed some installation errors:
- path to the Qt plugins now points to the installation directory;
- added forgotten OpenSSL libraries to the 32-bit components of the 64-bit VB version.
- The article no longer contains information about building older VB versions. If needed, the previous versions of it are available in the GitHub project .
• Update of 2.12.2016
- Switched to using statically linked OpenSSL.
• Update of 20.06.2017
- The article is updated for VB 5.1.22.
- cURL, OpenSSL, and gSOAP were updated; adapted the build instructions for cURL, gSOAP and VB.
• Update of 1.12.2017
- The article is updated for VB 5.2.2.
- Switched from MinGW-32 3.3.3 to 4.5.4.
- Qt, cURL, OpenSSL, gSOAP, and some build tools were updated; adapted the build instructions for cURL, gSOAP and VB.
- Switched to using local archives of DocBook XML/XSL instead of online versions.
- Using cURL program instead of wget for downloading the Guest Additions ISO image.
- Various minor fixes and improvements.
• Update of 4.12.2017
- The libxml version was fixed in the build instructions.
• Update of 4.09.2018
- The article is updated for VB 5.2.18.
- cURL, OpenSSL, gSOAP and some build tools were updated; adapted the build instructions for cURL.
• Update of 12.12.2018
- The article is updated for VB 5.2.22.
- Enabled screen recording functionality which is disabled in OSE version by default; added libraries libopus and libvpx for encoding.
- cURL, OpenSSL, and gSOAP were updated.
- The full set of VirtualBox source code changes is now published as a single patch file for easier application.
• Mise à jour du 25/01/2019
- L'article est mis à jour pour VB 6.0.2.
- Amélioration de la désactivation de la génération d'ajouts d'invités.
- cURL et gSOAP ont été mis à jour; Les feuilles de style DocBook XSL ont été rétrogradées à la version 1.69.1 (la documentation est mieux adaptée à cette version).
- Le lot de construction complet a été divisé du texte de l'article en un fichier téléchargeable.
• Mise à jour du 04/08/2019
- The article has been translated into English for the first time. Also numerous minor changes were introduced into the Russian version.
- Added information about drivers signing for Windows 10.
- The article is updated for VB 6.0.4.
- cURL, OpenSSL, gSOAP, and some tools were updated.
- The full build batch no longer has to be placed at the specific path. Also, it now contains the basic template for automated Windows 10 drivers signing.