Intro
Ini adalah fakta yang terkenal bagi banyak pengguna versi Windows dari VirtualBox (mulai sekarang,
VB ; jangan dikacaukan dengan Visual Basic) yang dimulai dengan 4.3.14 pengembang menambahkan apa yang disebut "pengerasan" yang dirancang untuk mencegah suntikan berbahaya ke VB. Meskipun niatnya baik, implementasi tersebut menyebabkan banyak konflik dengan produk yang benar-benar sah seperti antivirus, modul kriptografi dan bahkan beberapa pembaruan Windows itu sendiri, dan ketika konflik seperti itu terjadi VB berhenti bekerja. Pengguna harus menunggu setidaknya satu bulan hingga versi VB baru dirilis dengan pengecualian yang tepat ditambahkan. Kasus terburuk adalah, aplikasi atau pembaruan yang bertentangan harus dihapus, atau VB sendiri harus diturunkan ke versi 4.3.12 yang merupakan yang terbaru tanpa pengerasan. Banyak permintaan untuk menambahkan daftar pengecualian yang dikendalikan pengguna, atau opsi untuk menonaktifkan pengerasan, semuanya tidak dijawab. Satu-satunya balasan dari pengembang terdengar seperti "jika Anda sendiri tidak ingin membuatnya dari kode sumber". Yah, sepertinya kita harus melakukannya.
Meskipun instruksi pembuatan
dijelaskan pada proyek resmi Wiki, petunjuk tersebut tidak lengkap dan agak ketinggalan zaman, sementara prosedur pembuatan sering gagal dengan pesan kesalahan yang tidak jelas. Jadi ketika, pada akhirnya, saya membuatnya berfungsi saya pikir itu layak mendokumentasikan secara lengkap dalam artikel terpisah. Instruksi ini sedang diperbarui dari waktu ke waktu, dan saat ini diadaptasi untuk membangun VB versi 6.0.4. Namun, jika Anda memerlukan informasi tentang membangun versi VB atau perpustakaan tambahan yang lebih lama, Anda selalu bisa mendapatkannya dari
riwayat perubahan .
Daftar isi
» Pernyataan Masalah
» Kata Peringatan
» Membangun Persiapan Lingkungan
» Aplikasi Instalasi quirks
» Sentuhan Akhir
» Membangun VirtualBox
» Epilog
» Amandemen
Pernyataan Masalah
Pada awalnya, saya ingin membuatnya tetap sederhana dengan hanya membangun kembali komponen biner dan menyalinnya di atas versi yang diinstal dari distribusi resmi. Namun, itu terjadi jauh dari sederhana karena instalasi bergantung pada beberapa sistem API yang tidak jelas dan memerlukan instalasi driver dan registrasi komponen COM. Saya bertanya-tanya apakah layak untuk mempelajari bagaimana semua ini bekerja dan untuk menulis naskah untuk mengotomatiskan tugas-tugas ini, tetapi setelah beberapa pertimbangan saya memutuskan untuk menjadi besar dan membangun distribusi penuh yang sedekat mungkin dengan yang resmi, hanya tanpa pengerasan.
Saya harus mengatakan bahwa tugas ini terbukti sangat sulit, dan saya gagal memenuhinya hingga 100%. Apa yang saya temui adalah Penambahan Tamu yang disediakan untuk Windows (32- dan 64-bit), OS / 2, Linux, dan beberapa sistem * NIX lainnya. Komentar dalam Makefile yang sesuai menyebutkan bahwa mereka semua dibangun pada mesin jarak jauh yang berbeda, dan saya jelas tidak menantikan untuk mengelola pabrik pembuatan seperti itu. Jadi solusi terakhir saya adalah membangun dari kode sumber semuanya, kecuali Penambahan, tetapi mengambil image ISO resmi dengan mereka dan hanya dimasukkan ke dalam distribusi saya apa adanya. Saya belum memeriksa apakah Penambahan memiliki mekanisme pengerasan yang sama, tetapi bahkan jika ada, saya belum pernah mendengar keluhan tentang hal itu.
Sebuah kata peringatan
• Pertimbangan keamanan
Pengerasan tidak ditambahkan atas kemauan, itu adalah solusi untuk menutup kerentanan di VB. Sayangnya, Oracle menolak untuk memberikan deskripsi rinci tentang masalah ini, meskipun sudah diperbaiki bertahun-tahun yang lalu. Secara umum, ini ada hubungannya dengan mekanisme injeksi DLL di Windows yang, dalam kasus VB, dapat menyebabkan peningkatan hak istimewa yang tidak sah pada komputer host, dan ada eksploitasi yang berfungsi untuk kerentanan ini. Jadi berhati-hatilah jika Anda memutuskan untuk menggunakan versi hardening-less.
• Penandatanganan driver
Dimulai dengan Vista, dalam versi Windows 64-bit pengguna tidak dapat memuat driver sewenang-wenang lagi. Driver harus ditandatangani oleh sertifikat dengan rantai sertifikat silang yang naik ke CA root Microsoft (dan di Windows 10 dengan Boot Aman diaktifkan driver harus ditandatangani oleh Microsoft sendiri). Sebelum Anda memulai perjalanan membangun VB, Anda perlu memutuskan bagaimana menyelesaikan masalah ini. Anda dapat menghabiskan sejumlah uang dan membeli sertifikat Anda sendiri, atau mencoba menghubungi beberapa perusahaan pihak ketiga yang menyediakan layanan penandatanganan untuk proyek-proyek sumber terbuka (jika mereka setuju untuk menandatangani driver yang rentan), atau mengatur Windows Anda ke dalam mode pengujian yang memungkinkan memuat driver. ditandatangani dengan sertifikat uji yang dibuat secara lokal.
Dalam artikel ini saya terutama akan menyiratkan skenario terakhir, tetapi saya akan menyebutkan bagaimana prosedur berubah jika Anda memiliki sertifikat komersial "dewasa".
Bangun persiapan lingkungan
Panduan resmi merekomendasikan untuk menggunakan Windows 7 hingga 10 sebagai sistem build. Saya melakukan semua pekerjaan di Windows 7 SP1 x64, dan saya tidak berpikir bahwa versi OS sangat mempengaruhi prosedur. Harap diingat bahwa mesin (nyata atau virtual) yang akan Anda gunakan untuk membangun VB harus memiliki koneksi Internet.
Lingkungan build membutuhkan cukup banyak alat. Jika beberapa program memiliki versi portabel saya lebih suka mengambil itu daripada menggunakan installer.
Sekarang, program-program berikut ini hanya dapat diperoleh sebagai distribusi yang dapat diinstal (setidaknya, secara resmi). Untuk Visual Studio dan SDK / WDK, penting untuk mengikuti urutan pemasangan seperti yang ditentukan di bawah ini. Setelah Anda selesai menggunakannya, saya sangat merekomendasikan untuk menjalankan Pembaruan Windows dan mengambil pembaruan terbaru untuk semua produk Microsoft.
Program lain diunduh sebagai arsip portabel atau kode sumber:
Anda juga membutuhkan arsip-arsip berikut:
Untuk apa semua ini Anda inginkan?Jika Anda tidak ingin membangun paket yang sama persis dengan saya, Anda mungkin dapat menyingkirkan beberapa alat yang disebutkan di atas. Jadi di sini saya akan memberikan beberapa detail untuk tujuan mereka dalam proses pembangunan.
- SDK 8.1
Build aktual dilakukan menggunakan SDK 7.1, tetapi Anda membutuhkan program SignTool dari 8.1, karena yang dari 7.1 tidak dapat melakukan penandatanganan ganda SHA-1 / SHA-256. Jika Anda memiliki SDK 8.1 yang diinstal di tempat lain, Anda dapat menyalin signtool.exe
dengan semua dependensinya dari sana, dan tentukan path ke sana dalam file LocalConfig.kmk
(lihat di bawah ). - WiX
Ini adalah kerangka kerja untuk membuat paket MSI. Meskipun distribusi VB final adalah EXE, itu berisi dua file MSI di dalamnya, jadi Anda perlu WiX untuk membangunnya. Namun, jika Anda hanya ingin membangun file biner VB tanpa mengemasnya, Anda dapat melakukannya tanpa WiX. - Sdl
Pustaka ini digunakan untuk VBoxSDL.exe
front-end tambahan sederhana yang dapat digunakan sebagai pengganti VirtualBox.exe
. Secara teori, jika Anda tidak memerlukan komponen itu, Anda harus dapat menjalankan build tanpa memiliki SDL, tetapi saya belum mencoba ini. - gSOAP
Perpustakaan ini digunakan untuk membangun VBoxWebSrv.exe
, layanan manajemen jarak jauh VB. Jika Anda tidak memiliki gSOAP, komponen ini akan dilompati selama pembuatan. - libvpx , libopus
Ini adalah codec video dan audio yang digunakan untuk merekam layar VM. Jika Anda tidak memilikinya, build masih akan selesai dengan sukses, dan VB akan tetap memiliki semua opsi untuk pengambilan video, tetapi opsi ini akan diabaikan (meskipun animasi pengambilan akan diputar, tidak ada rekaman aktual yang akan disimpan) . - Cygwin
Diperlukan untuk membangun libvpx. - MiKTeX
MiKTeX digunakan untuk menyusun dokumentasi PDF ( doc\UserManual.pdf
). Tanpa program ini, PDF akan secara diam-diam dihilangkan dari bangunan dan pengemasan. - NASM
Assembler digunakan saat membangun OpenSSL. Anda dapat membangunnya juga tanpa menggunakan assembler, tetapi saya masih merekomendasikan untuk menggunakannya untuk menghasilkan kode yang lebih optimal.
Berikut ini adalah ringkasan dari semua alat dan pustaka yang saya gunakan, termasuk versi persisnya (jika mungkin) dan jalur instalasi yang saya pilih pada sistem build saya. Penunjukan "
{x32|x64}
" digunakan untuk lokasi pemasangan versi 32-dan 64-bit yang terpisah.
Program / alat | Versi | Jalur pemasangan |
---|
Studio visual | 2010 Profesional | 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\ |
Lembar Gaya DocBook XSL | 1.69.1 | C:\Programs\DocBook\xsl\ |
Aplikasi Instalasi quirks
Di sini saya memberikan beberapa petunjuk tentang pemasangan beberapa alat yang disebutkan di atas di mana prosedurnya tidak jelas atau memerlukan tindakan tambahan.
• Windows SDK v7.1
Instalasi SDK ini mungkin akan gagal karena ia menyertakan pustaka compiler dan runtime yang sudah ketinggalan zaman. Setelah Anda menginstal VS 2010, ada versi yang lebih baru dari yang ada di sistem, sehingga yang lama gagal untuk menginstal, dan installer utama menganggapnya sebagai kesalahan kritis. Untuk mengatasi ini, Anda harus menghapus centang pada kotak centang yang sesuai, atau sebelum instalasi SDK, hapus instalan paket-paket seperti
"Microsoft Visual C ++ 2010 <arch> Redistributable" ,
"Microsoft Visual C ++ 2010 <arch> Runtime" ,
"Microsoft Visual C ++ Compiler ... " Biarkan SDK menginstal versi yang lebih lama, dan kemudian jalankan Pembaruan Windows untuk mendapatkan versi terbaru yang tersedia.
Ketika Anda menginstal SDK, pastikan Anda memeriksa sampel program (Windows Native Code Development -> Samples): mereka berisi beberapa skrip yang digunakan oleh aturan VB build. Tanpa mereka Anda tidak akan dapat membangun paket MSI.
• Windows SDK v8.1
Anda hanya perlu menginstal komponen "Kit Pengembangan Perangkat Lunak Windows".
• WDK v7.1
Anda hanya perlu menginstal komponen "Build Environments".
• Qt 5.6.3
Dimulai dengan Qt 5.7.0, untuk membangunnya Anda memerlukan Visual Studio 2012 atau lebih baru, jadi kami terjebak dengan 5.6.x.
Karena tidak ada build resmi untuk Visual Studio 2010, kami harus membuat Qt dari kode sumber sendiri.
- Buka paket arsip kode sumber Qt ke dalam
C:\Programs\Qt\
dan ganti nama direktori qt-everywhere-opensource-src-5.6.3
menjadi 5.6.3-src
. - Di sampingnya buat direktori
build-x32
mana build akan berlangsung. - Buka konsol dan jalankan perintah berikut untuk mempersiapkan lingkungan:
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
Perintah color
adalah opsional, menghilangkan warna hijau yang ditetapkan oleh skrip SetEnv.Cmd
. - Sekarang kita perlu menjalankan skrip
configure.bat
dari 5.6.3-src
. VB tidak menggunakan sebagian besar apa yang termasuk Qt, jadi kami dapat secara signifikan mengurangi waktu pembuatan dengan menonaktifkan berbagai komponen, tetapi harap perhatikan bahwa beberapa opsi sangat penting untuk VB. Khususnya, saya telah menemukan bahwa:- OpenGL ES 2 tidak didukung (ketika membangun VB, kompiler gagal menemukan beberapa file header).
- Dukungan FreeType harus diaktifkan (jika tidak, plugin
qoffscreen
tidak akan dibangun, dan diperlukan untuk VB).
Ini adalah baris perintah lengkap yang telah saya akhiri dengan: ..\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
- Jalur instalasi Qt yang ditentukan di sini (dalam opsi
-prefix
) di- -prefix
ke file kode sumber perantara oleh skrip configure, sehingga file biner juga akan mengingatnya. Aplikasi berbasis Qt apa pun yang dibangun menggunakan pustaka ini akan mencari plugin yang diperlukan di jalur itu terlebih dahulu, dan hanya jika mereka tidak dapat ditemukan, ia akan menggunakan lokasinya sendiri saat ini. Dalam kebanyakan kasus ini OK, tetapi misalkan pada komputer di mana VB kami diinstal, ada build lain dari Qt yang terletak di c:\Programs\Qt\5.6.3-x32
, tetapi dikompilasi dengan opsi yang berbeda atau oleh kompiler yang berbeda? Kemudian VB akan mencoba memuat plug-in dan crash (tidak kompatibel) tersebut.
Ada dua cara yang mungkin untuk menghindari masalah ini. Pertama adalah menambahkan ke instalasi file tambahan bernama qt.conf
dengan teks berikut: [Paths] Plugins=.
Yang lain adalah untuk memperbaiki jalur instalasi yang disimpan sebelum membangun Qt, sehingga menunjuk ke direktori aplikasi. Saya memutuskan untuk mengikuti cara yang terakhir, saya tidak suka gagasan memiliki file tambahan dengan apa yang dimiliki distribusi Oracle VB. Anda perlu membuka file C:\Programs\Qt\build-x32\qtbase\src\corelib\global\qconfig.cpp
dibuat oleh skrip configure, temukan baris berikut: static const char qt_configure_prefix_path_str [512 + 12] = "qt_prfxpath=c:/Programs/Qt/5.6.3-x32";
dan ganti jalur dengan satu titik, sehingga garis ini tampak seperti ini: static const char qt_configure_prefix_path_str [512 + 12] = "qt_prfxpath=.";
Perubahan ini hanya akan memengaruhi perilaku runtime VB. Langkah instalasi Qt sendiri akan menggunakan path asli, karena sekarang disimpan di Makefiles yang tidak kita modifikasi. - Selanjutnya, jalankan build menggunakan perintah
nmake
- Dan instal pustaka yang dibangun menggunakan
nmake install
Sekarang buka jendela konsol baru dan lakukan hal yang sama untuk versi 64-bit. Anda harus mengganti "x32" dengan "x64" di semua jalur, dan perintah persiapan lingkungan akan terlihat seperti ini:
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
Setelah Anda selesai menginstal, direktori
build-x32
,
build-x64
, dan
5.6.3-src
dapat dihapus.
• MinGW
Cukup bongkar arsip 32- dan 64-bit ke direktori instalasi masing-masing.
• Cygwin
Selama instalasi Anda harus memilih paket yang
make
dan
yasm
.
• SDL
- Buka paket arsip SDL dua kali ke jalur yang terpisah:
C:\Programs\SDL\x32\
dan C:\Programs\SDL\x64\
. - Pindahkan semua isi subdirektori
C:\Programs\SDL\x64\lib\x64\
ke direktori induknya (yaitu, ke dalam C:\Programs\SDL\x64\lib\
), lalu hapus subdirektori C:\Programs\SDL\x64\lib\x86
dan x64
. - Lakukan hal yang sama untuk versi 32-bit: pindahkan konten dari
C:\Programs\SDL\x32\lib\x86\
ke dalam C:\Programs\SDL\x32\lib\
, lalu hapus C:\Programs\SDL\x64\lib\x86
dan x64
.
• NASM
Buka paket arsip
nasm-2.14.02-win64.zip
ke
C:\Programs\
, lalu ganti nama direktori resultan
nasm-2.14.02
sebagai
nasm
.
• OpenSSL
- Buka paket arsip OpenSSL ke dalam
C:\Programs\OpenSSL\
dua kali, mengganti nama salinan direktori openssl-1.1.1b
sebagai openssl-1.1.1b-x32
dan openssl-1.1.1b-x64
. - Buka konsol, buat dan instal versi 32-bit dengan menjalankan:
"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
Jika langkah configure menghasilkan peringatan menakutkan tentang kompiler yang hilang, harap abaikan pesan ini, itu berbohong dengan sangat keterlaluan.
Jika Anda tidak ingin menggunakan NASM, lewati saja perintah dengan modifikasi PATH
, dan untuk skrip Configure
tentukan parameter tambahan no-asm
. - Sekarang buka jendela konsol baru dan lakukan hal yang sama untuk versi 64-bit:
"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
Menonaktifkan NASM sama dengan 32-bit. - Sekarang Anda dapat menghapus direktori
C:\Programs\OpenSSL\openssl-1.1.1b-x32
dan openssl-1.1.1b-x64
.
• CURL
- Bongkar arsip cURL ke dalam
C:\Programs\curl\
dan ganti nama subdirektori curl-7.64.1
menjadi curl-7.64.1-x32
. - Buka file
C:\Programs\curl\curl-7.64.1-x32\winbuild\MakefileBuild.vc
di editor teks, dan cari blok kode berikut (di sekitar baris No.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
Setelah baris ini tambahkan arahan baru: CFLAGS = $(CFLAGS) /DCURL_DISABLE_LDAP
Jika tidak, pembuatan VB akan gagal dengan kesalahan tautan. - Sekarang buka file
C:\Programs\curl\curl-7.64.1-x32\winbuild\gen_resp_file.bat
, dan setelah baris pertama ( @echo OFF
) masukkan perintah ini: cd .
Itu tidak melakukan apa-apa, kecuali mengatur ulang kode ERRORLEVEL
. Scriptnya sangat sederhana sehingga bisa diselesaikan tanpa menjalankan perintah apa pun yang akan mengubah kode kesalahan. Jadi jika kode itu bukan nol sebelum memulai skrip, ia akan mempertahankan nilainya pada keluar skrip, dan nmake
akan berpikir skrip yang mengembalikan kode kesalahan ini, dan menghentikan pembangunan dengan kegagalan. Menambahkan cd
palsu itu memperbaiki masalah. - Sekarang buat salinan lengkap
curl-7.64.1-x32
dengan nama curl-7.64.1-x64
. - Buka konsol, buat versi 32-bit dan salin file yang kami butuhkan:
"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\
- Buka jendela konsol lain dan buat versi 64-bit:
"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
Perhatikan bahwa selain apa yang kami lakukan untuk versi 32-bit, di sini kami juga menyalin file curl.exe
. Kami akan menggunakannya nanti, untuk mengunduh gambar tambahan tamu. - Direktori
C:\Programs\curl\curl-7.64.1-x32
dan curl-7.64.1-x64
tidak lagi diperlukan dan dapat dihapus.
• libvpx
- Buka paket arsip libvpx ke
C:\Programs\libvpx-build\
. - Luncurkan terminal Cygwin, pembangunan akan dilakukan di sana. Platform target kami adalah Visual Studio 2010; sistem build hanya mendukung sebagian saja: ia akan mencoba menjalankan build sebenarnya menggunakan
msbuild.exe
tetapi tidak berfungsi karena beberapa alasan; Saya gagal mencari tahu mengapa. Sebagai gantinya, kita cukup menjalankan Visual Studio itu sendiri dan menggunakannya untuk membangun proyek. Untungnya itu dapat digunakan dari baris perintah, jadi tidak perlu meluncurkan IDE yang sebenarnya (walaupun Anda bisa jika mau, dalam hal ini Anda harus memodifikasi variabel PATH
dan menambahkan path C:\Programs\cygwin64\bin
untuk itu, atau dengan cara lain memungkinkan VS untuk menemukan yasm.exe
terletak di sana dan diperlukan untuk membangun). Jadi, untuk melakukan pembangunan kedua arsitektur, jalankan perintah berikut di 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
- Tutup Cygwin, kita tidak akan membutuhkannya lagi. Direktori
C:\Programs\libvpx-build
dapat dihapus.
• libopus
- Buka paket arsip opus ke dalam
C:\Programs\libopus-build\
, buka subdirektori opus-1.3\win32\VS2015
. - Proyek ini dirancang untuk versi Visual Studio yang lebih baru, jadi kita perlu memodifikasinya untuk membuatnya dalam versi kami 2010. Anda dapat melakukannya baik menggunakan IDE, atau editor teks biasa. Saya memilih yang terakhir. Buka file
opus.vcxproj
dan lakukan hal berikut:- Temukan semua baris yang berisi teks
<PlatformToolset>v140</PlatformToolset>
dan ganti v140
dengan v100
. Jika Anda menggunakan IDE, ini adalah opsi konfigurasi "Platrofm Toolset" yang terletak di halaman Configuration Properties -> General. Jangan lupa tentang penyeleksi Konfigurasi dan Platform di bagian atas dialog. - Selanjutnya, cari blok kode ini:
<ItemDefinitionGroup> <ClCompile>
dan tambahkan tag baru di dalamnya: <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
Dalam IDE Anda dapat melakukannya dengan membuka halaman Configuration Properties -> C / C ++ -> Umum dan pengaturan "Format Informasi Debug" ke "ProgramDatabase (/ Zi)". Sebenarnya, Anda dapat mengaturnya ke nilai lain yang valid, kami tidak memerlukan database debugging sama sekali, tetapi dengan nilai yang tidak valid proyek akan gagal dibangun.
- Sekarang mari kita membangun versi Rilis untuk kedua platform (baik menggunakan VS IDE, atau baris perintah) dan salin
opus.lib
perpustakaan dan subdirektori include\
ke jalur tujuan kami: 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\
- Direktori
C:\Programs\libopus-build
dapat dihapus.
• gSOAP
Buka arsip, masuk ke subdirektori
gsoap-2.8\gsoap
dan bongkar isinya ke
C:\Programs\gSOAP\
. OpenSSL 1.1.x membutuhkan gSOAP versi 2.8.41 atau lebih tinggi. Jika karena alasan tertentu Anda ingin menggunakan versi yang lebih lama, Anda perlu menerapkan
tambalan yang dibuat oleh
Mattias Ellert . Menerapkan tambalan dapat dilakukan secara manual (formatnya mudah: buka file yang disebutkan, hapus baris yang ditandai dengan minus, tambahkan baris yang ditandai dengan plus; sisanya adalah konteks), atau dapatkan alat
patch
porting untuk Windows dan gunakan.
• MiKTeX
- Buka paket arsip ke
C:\Programs\MiKTeX\
. - Buka konsol dan pasang modul tambahan:
"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
Untuk XML DTD Anda perlu membuat direktori dan membongkar isi arsip di sana. Untuk XSL Stylesheets, semua konten sudah ada dalam satu direktori, jadi Anda perlu mengekstraknya dan hanya mengganti nama setelahnya.
Sentuhan terakhir
Lingkungan build hampir siap, hanya beberapa langkah lagi diperlukan. Unduh arsip kode sumber VirtualBox (jika Anda belum melakukannya) dan bongkar ke tempat Anda ingin bekerja. Saya memilih
C:\Devel\
untuk tujuan itu, meletakkan kode sumber yang sudah dibongkar dan mengganti subdirektori ke dalam
VirtualBox-src
.
• Menambahkan sertifikat
Jika Anda tidak memiliki sertifikat berbayar, saya sarankan Anda untuk setidaknya membuat yang ditandatangani sendiri: lebih mudah untuk membuat Windows memuat driver yang ditandatangani sendiri daripada yang tidak ditandatangani. Untuk melakukannya, buka konsol dengan hak yang lebih tinggi, dan jalankan perintah berikut yang akan menambah dua sertifikat (SHA-1 dan SHA-256) dan mengimpornya ke penyimpanan pribadi Anda:
"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
Anda dapat, tentu saja, memilih nama Anda sendiri untuk sertifikat daripada "Roga and Kopyta Ltd", dan jalur untuk menyimpan file. Sekarang kita perlu mendapatkan cap jempol dari sertifikat yang dihasilkan. Buka konsol manajemen Sertifikat (dengan menjalankan
certmgr.msc
) dan navigasikan ke penyimpanan Pribadi. Anda akan melihat dua sertifikat baru bernama "Roga and Kopyta Ltd" di sana. Klik dua kali yang pertama; dalam dialog yang muncul, buka tab
Detail . Bidang "Algoritme tanda tangan" berisi nama algoritme: sha256RSA atau sha1RSA. Gulir ke bawah untuk bidang "Thumbprint" yang berisi urutan angka heksadesimal. Salin nilai lengkap ini dan tulis di suatu tempat. Lakukan hal yang sama untuk sertifikat kedua; jangan lupa untuk menandai cap jempol mana yang untuk SHA-1, dan yang untuk SHA-256.
• Membangun xmllint
Salah satu langkah membangun akan membutuhkan program
xmllint
. Saya tidak memasukkannya ke daftar persyaratan build karena sumbernya dibundel dalam arsip VirtualBox. Tetapi Anda masih harus membangunnya sendiri, karena aturan VB build tidak melakukannya. Saya memilih
C:\Programs\xmllint
sebagai direktori tujuan.
- Salin direktori
C:\Devel\VirtualBox-src\src\libs\libxml2-2.9.4
ke dalam C:\Programs\
untuk memastikan build-nya tidak memengaruhi VB dengan cara apa pun. - Buka konsol dan jalankan perintah berikut:
"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
- Hapus direktori
C:\Programs\libxml2-2.9.4
.
• Modifikasi file VB
Sebelum memulai build, kita juga perlu membawa beberapa perubahan ke dalam kode sumber VB. Kumpulan lengkapnya disajikan di sini sebagai file tambalan yang dapat diunduh yang dapat diterapkan baik secara manual, atau menggunakan alat
patch
(yang perlu Anda unduh secara terpisah):
»
Vbox_build.patchJika tidak ada masalah menerapkan tambalan Anda dapat melompat ke
langkah berikutnya . Namun, jika Anda memiliki beberapa masalah dan memerlukan informasi lebih lanjut tentang perubahan tertentu, atau jika Anda hanya ingin memahami apa yang sedang diubah dan mengapa, Anda dipersilakan untuk melanjutkan dan membaca detail yang disediakan di bawah ini. Harap perhatikan bahwa perubahan datang ke sini dalam urutan yang berbeda dibandingkan dengan file tambalan. Path ke file ditentukan relatif ke direktori kode sumber VB
C:\Devel\VirtualBox-src
.
- File
configure.vbs
:- Baris kode:
if Shell(DosSlashes(strPathVC & "/bin/cl.exe"), True) <> 0 then
diganti dengan: if Shell(DosSlashes(strPathVC & "/bin/cl.exe") & " /?", True) <> 0 then
Baris ini melakukan pemeriksaan kompiler tetapi ia lupa bahwa cl.exe
tanpa argumen mengembalikan kesalahan, dan karenanya dianggap sebagai kompiler yang tidak valid. Menambahkan " /?
"Argumen membuatnya menampilkan bantuan dan keluar dengan kode 0 kesalahan. - Sekarang mari kita beralih ke fungsi
CheckForMinGW32Sub
. Seperti namanya, itu memeriksa validitas MinGW 32-bit. Namun, ini dirancang untuk versi 3.3.3, sementara saya menggunakan 4.5.4 yang memiliki struktur file / direktori yang berbeda, jadi saya telah mengganti seluruh fungsi dengan kode berikut (yang pada dasarnya hanya salinan dari CheckForMinGWw64Sub
disesuaikan untuk Varian 32-bit): 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
- Fungsi kami berikutnya adalah
CheckForCurlSub
, dan blok kode yang akan diedit adalah: if LogFileExists(strPathCurl, "include/curl/curl.h") _ And LogFindFile(strPathCurl, "libcurl.dll") <> "" _ And LogFindFile(strPathCurl, "libcurl.lib") <> "" _
Ia memeriksa validitas libcurl, tetapi membutuhkan versi yang terhubung secara dinamis dan gagal jika tidak ada file DLL yang dapat ditemukan. Kami menggunakan versi yang terhubung secara statis, sehingga pemeriksaan untuk DLL sayangnya harus pergi dan meninggalkan kami dengan: if LogFileExists(strPathCurl, "include/curl/curl.h") _ And LogFindFile(strPathCurl, "libcurl.lib") <> "" _
- Sekarang masuk ke fungsi
CheckForPython
mana variabel VBOX_BLD_PYTHON
dihasilkan: CfgPrint "VBOX_BLD_PYTHON := " & strPathPython & "\python.exe"
Garis miring terbalik di depan python.exe
harus diganti dengan yang maju: "/python.exe"
(tanpa perbaikan ini, beberapa pemeriksaan selama prosedur pembangunan akan gagal; Saya belum melihat efek buruk lainnya, tapi lebih cantik tanpa pesan kegagalan, dan dalam hal apapun lebih baik aman daripada menyesal). - Versi Windows dari skrip configure tidak mendukung libvpx dan libopus, jadi saya telah menambahkannya sendiri. Tentu saja, cara paling sederhana adalah hanya dengan jalur hardcode ke perpustakaan, tapi saya lebih suka mengimplementasikannya seperti semua komponen lainnya, dengan melewati jalur di baris perintah, dan memeriksa validitas yang tepat. Kode utama untuk ini terdiri dari dua fungsi pemeriksaan:
Penggunaan fungsi digunakan untuk mencetak daftar argumen baris perintah; tambahkan dua argumen baru kami di sana: Print " --with-libvpx=PATH " Print " --with-libopus=PATH "
Di awal fungsi, banyak variabel didefinisikan untuk menyimpan path ke komponen, kita perlu menambahkan dua yang baru di sana: strOptVpx = "" strOptOpus = ""
Sedikit lebih jauh ke bawah blok select-case
yang memproses argumen dan mengisi variabel; menambah kontribusi kami: case "--with-libvpx" strOptVpx = strPath case "--with-libopus" strOptOpus = strPath
Dan, akhirnya, hampir di bagian paling akhir file ada rantai semua panggilan fungsi cek, ini adalah tempat kami menambahkan panggilan dari dua fungsi baru kami: CheckForVpx strOptVpx CheckForOpus strOptOpus
- File selanjutnya adalah
src\VBox\Runtime\Makefile.kmk
. Kita perlu menemukan definisi variabel VBoxRT_LIBS.win
dan VBoxRT-x86_LIBS.win
, dan menambahkan dua pustaka baru untuk mereka, crypt32.lib
dan bcrypt.lib
. Jadi kode berikut: 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
berubah menjadi: 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
(jangan lewatkan backslash yang tertinggal setelah delayimp.lib
!); dan, masing-masing, blok ini: 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
menjadi: 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
Perubahan ini diperlukan untuk menautkan VBoxRT.dll
sukses. Saya tidak 100% yakin mengapa demikian, versi Oracle tidak memiliki ketergantungan waktu-muat pada crypt32.dll
, ini dimuat dalam run-time, jadi file LIB tidak diperlukan. Namun tanpa itu linker tidak dapat menemukan beberapa fungsi dan gagal. Saya menduga itu mungkin terkait dengan opsi build OpenSSL, tapi saya belum memeriksanya, menambahkan ketergantungan lebih mudah. Dan ketergantungan kedua, bcrypt.dll
, adalah persyaratan untuk OpenSSL 1.1.1 yang baru. - Jika Anda memiliki gSOAP versi 2.8.79 atau lebih tinggi, Anda harus mengedit file
src\VBox\Runtime\r3\win\VBoxRT-openssl-1.1plus.def
dan tambahkan baris berikut ke daftar ekspor: OpenSSL_version_num DH_generate_parameters_ex DH_new ASN1_STRING_get0_data
Daftar ini mendefinisikan fungsi mana yang diekspor oleh perpustakaan VBoxRT.dll
(yang berisi OpenSSL di dalamnya). Ketika alat VBoxWebSrv.exe
sedang ditautkan, tergantung pada versi gSOAP, mungkin memerlukan fungsi OpenSSL tambahan. Karena mereka tidak ada dalam daftar ekspor, penghubung menambahkan OpenSSL itu sendiri dan segera mengeluh tentang banyak konflik antara OpenSSL eksternal ini dan salinannya sendiri sudah dibangun ke dalam VBoxRT
. Menambahkan ekspor tersebut memperbaiki masalah. - Seperti yang telah saya sebutkan di awal, saya tidak membangun penambahan tamu, tetapi saya perlu memiliki image ISO sebagai bagian dari distribusi. Aturan pembuatan dirancang untuk skenario ini, tetapi mereka berharap bahwa gambar ISO siap secara ajaib akan muncul di tempat yang tepat pada waktu yang tepat. Saya telah menambahkan sihir ini ke file
src\VBox\Makefile.kmk
. Cari kode berikut: ifdef VBOX_WITH_ADDITIONS include $(PATH_SUB_CURRENT)/Additions/Makefile.kmk endif
dan tepat di bawahnya berlaku aturan untuk mengunduh otomatis file gambar: 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
Jika Anda mengedit file secara manual alih-alih menerapkan tambalan, harap perhatikan bahwa perintah aturan harus dimulai dengan karakter tabulasi. - Sebelum versi 6.0, dokumentasi adalah salah satu subsistem yang berhasil dibangun tanpa perubahan. Saya tidak tahu apa yang salah dengan itu, tapi itu didesain ulang sedemikian rupa sehingga tidak lagi berfungsi pada sistem build saya. Saya tidak tahu bagaimana Oracle sendiri membangun dokumentasi (mungkin pada sistem * NIX), tetapi bagi saya aturan build terus kehilangan garis miring, atau menambahkan kelebihannya, dan akibatnya mereka gagal menemukan file target karena ketidakcocokan dalam file katalog. Saya akhirnya berhasil menggabungkan beberapa perubahan yang memungkinkan untuk membangun dokumentasi tanpa kesalahan. Pertama-tama, salah satu direktori target tidak ada, sehingga beberapa file perantara tidak dapat dibuat. Masalah ini diperbaiki pada file
doc\manual\Makefile.kmk
, di dalam blok kode berikut: 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
Tepat setelah $$(RM)
saya telah menambahkan perintah untuk membuat direktori yang hilang: $$(QUIET)$$(MKDIR) -p "$$(@D)"
Sedangkan untuk garis miring, perbaikannya terletak di file doc\manual\Config.kmk
. Saya tidak dapat menemukan solusi "normal" untuk itu, tetapi ada solusi yang cukup baik untuk tujuan praktis, yang menyiratkan menduplikasi aturan substitusi jalur untuk jalur yang salah. Pertama, di bawah garis: 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
or 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)
or 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
Sekarang kita perlu membuat file LocalConfig.kmk
di direktori sumber VB, dan menulis di sana semua path dan membangun parameter. Anda dapat menggunakan teks berikut sebagai templat: 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
Anda harus mengedit templat ini:- Variabel
VBOX_CERTIFICATE_SUBJECT_NAME
dan masing-masing VBOX_CERTIFICATE_SHA2_SUBJECT_NAME
harus berisi nama sertifikat SHA-1 dan SHA-256. - Variabel
VBOX_CERTIFICATE_FINGERPRINT
dan VBOX_CERTIFICATE_SHA2_FINGERPRINT
harus mengandung cap jempol dari sertifikat tersebut; Anda telah menyalinnya sebelumnya dari konsol manajemen Sertifikat. - 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. - Variabel
VBOX_BUILD_PUBLISHER
menentukan akhiran branding dalam nomor versi. Secara default itu adalah "_OSE" (yaitu, versi produk lengkap adalah "6.0.4_OSE"). Anda dapat menentukan sufiks lain di sini, atau mengosongkannya untuk menyingkirkannya sama sekali. Tetapi jika Anda menghapus variabel sepenuhnya, itu akan menggunakan "_OSE" default.
Sisa variabel sebagian besar digunakan untuk mendeklarasikan komponen mana yang akan dibangun. Dan, tentu saja, deklarasi utama datang di bagian paling atas: matikan hardening.
Membangun kotak virtual
Akhirnya, kita sekarang dapat mulai membangun VirtualBox itu sendiri. Jika Anda biasanya lebih suka membangun untuk platform yang berbeda secara paralel, Anda harus melakukannya tanpa itu untuk saat ini, atau menggunakan dua salinan hierarki sumber terpisah, karena VB memiliki file konfigurasi umum yang dibuat sebelum pembuatan dan berisi data yang bergantung pada platform. Tidak akan baik bagi kompiler untuk tiba-tiba membuangnya dari lingkungan build 64-bit ke dalam 32-bit di tengah proses build.Jika Anda memerlukan tanda tangan driver yang kompatibel dengan Windows 10, silakan merujuk ke informasi yang diberikan setelah deskripsi prosedur utama.- Mari kita mulai dengan versi 64-bit. Buka konsol dan jalankan perintah berikut:
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.
Jika tidak ada di antara kita yang telah mengacaukan segalanya, semua rantai panjang ini akan membawa Anda installer VirtualBox baru yang mengkilap yang berbeda dari Oracle hanya dengan ikonnya, gambar Tentang, dan, tentu saja, kurangnya pengerasan yang mendalam. Tidak sulit untuk mengganti juga ikon dan gambar, tetapi saya tidak akan membahas topik ini di sini.Untuk kenyamanan saya telah membuat file batch tunggal yang mengotomatisasi pembuatan penuh VB. Anda dapat menggunakannya jika Anda perlu membangun pemasang lengkap secara teratur.Hanya beberapa kata lagi tentang menginstal distribusi yang dihasilkan jika Anda menggunakan sertifikat yang ditandatangani sendiri. Ketika tiba-tiba ditemukan, di Windows 8/10 tidak cukup untuk boot ke mode pengujian, instalasi masih gagal mengklaim bahwa tanda tangan driver tidak valid. Anda dapat mengatasi masalah ini dengan menambahkan sertifikat ke penyimpanan root CA Anda:- Buka dialog Properti penginstal VB dengan mengklik kanan dan memilih Properti , kemudian beralih ke tab Tanda Tangan Digital . Anda akan menemukan dua tanda tangan di sana, keduanya bernama "Roga and Kopyta Ltd", satu adalah sha1, yang lain sha256. Pilih yang pertama, klik Detail .
- Dialog lain muncul, di mana Anda perlu mengklik tombol Lihat Sertifikat .
- 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
Ketika saya selesai menulis artikel saya sendiri terkejut oleh volumenya. Pada awalnya saya berencana untuk pergi ke banyak detail tentang alasan untuk memilih cara ini atau itu untuk menyelesaikan setiap masalah, menjelaskan apa masalahnya, tepatnya, dan solusi alternatif apa yang mungkin berlaku. Tetapi segera menjadi jelas bahwa, jika dimuat dengan semua rincian ini, teks akan menjadi sangat besar. Saya harus minta maaf, untuk resep yang terlihat seperti "lakukan saja ini dan jangan bertanya". Saya sendiri tidak menyukai orang-orang itu, tetapi saya tidak bisa menemukan cara lain. Sesekali saya masih mencoba menguraikan apa yang sedang terjadi, untuk melunakkan kesan.Sejumlah besar detail tentang sistem build VB harus tetap berada di belakang layar; karena saya sama-sama merasa enggan untuk menggembungkan teks, dan, kadang-kadang, terlalu malas untuk mencari pendekatan yang berbeda, lebih efisien untuk menyelesaikan masalah. Lagipula, tujuan utama saya, pada awalnya, adalah untuk mendapatkan versi build dari VirtualBox saat ini. 4.3.12 sudah ketinggalan zaman pada saat itu, tetapi saya tidak bisa mengambil risiko memperbarui salah satu alat saya yang paling aktif digunakan ke versi yang diperkeras yang mungkin berhenti bekerja kapan saja. Meskipun, dari waktu ke waktu saya kembali dan, setelah menemukan sesuatu yang baru, tambahkan ke artikel ini.Saya berharap artikel ini akan menemukan audiensnya. Jika Anda tertarik untuk melihat dan menganalisis hasil akhir tetapi tidak ingin mengatur semua tumpukan program, Anda bisa mendapatkan versi distribusi saya dari sini:versi 6.0.4 . Semua driver (dan file lainnya) ditandatangani dengan sertifikat yang ditandatangani sendiri yang tidak tepercaya, jadi untuk menginstal ini dalam versi Windows 64-bit Anda harus reboot ke mode uji. Jika Anda memiliki pertanyaan, saran, rekomendasi, jangan ragu untuk menulis kepada saya baik di sini di komentar, atau melalui pesan pribadi. Semoga Open Source menyertai Anda!
Amandemen
Arsipkan• Artikel Rusia diterbitkan 01/21/2016
- VirtualBox 5.0.12.
• Pembaruan 05.24.2016
- Artikel ini diperbarui untuk VB 5.0.20, salah satu perubahan utama adalah penandatanganan ganda SHA-1 / SHA-256.
- Added disabling of forced signature checks if self-signed certificates are used.
- Added information about workaround for installation failure of the self-signed distribution.
- Library versions were updated.
- 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.
• Pembaruan 01/25/2019
- Artikel ini diperbarui untuk VB 6.0.2.
- Peningkatan penambahan penambahan Pengunjung membangun.
- cURL dan gSOAP dimutakhirkan; Lembar Gaya DocBook XSL diturunkan ke versi 1.69.1 (dokumentasi lebih cocok untuk versi itu).
- Kumpulan build lengkap dipisah dari teks artikel menjadi file yang dapat diunduh.
• Pembaruan 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.