BuildVentoyFromSource.txt 12.6 KB
Newer Older
longpanda's avatar
longpanda committed
1
2

==========================================
Nikolas Garofil's avatar
Nikolas Garofil committed
3
1. Compile Environment
longpanda's avatar
longpanda committed
4
==========================================
Nikolas Garofil's avatar
Nikolas Garofil committed
5
    My build environment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
6
    Ventoy is based on many open source projects, so the build environment is important. I suggest you first test it on a virtual machine.
longpanda's avatar
longpanda committed
7
8
9
10
11
12
13
14
15
16

1.1 Install CentOS 7.8
    I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
    
1.2 Install Packages    
    yum install \
        libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
        mpfr.i686 mpfr-devel.i686 zlib.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
        flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
        libvirt* vte* NetworkManager-bluetooth brlapi fuse-devel dejavu* gnu-efi* pesign shim \
longpanda's avatar
longpanda committed
17
        iscsi-initiator-utils grub2-tools zip nasm acpica-tools glibc-static zlib-static xorriso
longpanda's avatar
longpanda committed
18
19
20
21
22
23
    


==========================================
2. Download Source Code
==========================================
24
2.1 Download Ventoy source code from GitHub and decompress it. 
longpanda's avatar
longpanda committed
25
    Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory layout).
longpanda's avatar
longpanda committed
26
    
27
2.2 Download third-party source code and tool
longpanda's avatar
longpanda committed
28
29
    
    https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz                    ===>  /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
30
    https://musl.libc.org/releases/musl-1.2.1.tar.gz                     ===>  /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
longpanda's avatar
longpanda committed
31
32
33
34
35
36
    https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz                        ===>  /home/Ventoy-master/GRUB2/grub-2.04.tar.xz
    https://codeload.github.com/tianocore/edk2/zip/edk2-stable201911     ===>  /home/Ventoy-master/EDK2/edk2-edk2-stable201911.zip
    https://codeload.github.com/relan/exfat/zip/v1.3.0                   ===>  /home/Ventoy-master/ExFAT/exfat-1.3.0.zip
    https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9           ===>  /home/Ventoy-master/ExFAT/libfuse-fuse-2.9.9.zip
    https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz           ===>  /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
    https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
37
    http://ftp.loongnix.cn/toolchain/gcc/release/mips/gcc7/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz ===> /opt/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz    
38
39
    https://github.com/ventoy/musl-cross-make/releases/download/latest/output.tar.bz2 ===> /opt/output.tar.bz2

longpanda's avatar
longpanda committed
40

41
42
    http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/vmlinuz64 ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/vmlinuz64
    http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
43
    http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz    
longpanda's avatar
longpanda committed
44

45
2.3 Prepare third-party tools
46
47
48
49
50
51
52
    cd /home/Ventoy-master/DOC/
    tar xf musl-1.2.1.tar.gz
    cd musl-1.2.1
    ./configure && make install

    tar xf /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz  -C /opt
    tar xf /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2  -C /opt
53
54
55
    tar xf /opt/output.tar.bz2  -C /opt
    mv /opt/output /opt/mips64el-linux-musl-gcc730
    
56

Nikolas Garofil's avatar
Nikolas Garofil committed
57
2.4 Set PATH environment
58
    export PATH=$PATH:/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin:/opt/aarch64--uclibc--stable-2020.08-1/bin:/opt/mips64el-linux-musl-gcc730/bin
59
60
    better to add this line to /root/.bashrc and relogin as root

longpanda's avatar
longpanda committed
61
62
63
64

==========================================
3. All in one script
==========================================
65
    I have made an all-in-one script `all_in_one.sh`. You can run this script to build and pack ventoy.
longpanda's avatar
longpanda committed
66
67
68
69
70
    If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
    
    cd /home/Ventoy-master/INSTALL
    sh all_in_one.sh

longpanda's avatar
longpanda committed
71
    It should be noted that:
72
    1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other parts contain binaries and are rarely modified, so will not be recompiled everytime.
longpanda's avatar
longpanda committed
73
74
       You can rebuild these parts separately if you want.
       
75
76
77
    2. Some parts of Ventoy have a 32-bit and 64-bit version (like 4.9, 4.10, 4.11 follows)
       all_in_one.sh only builds the 64bit version of them. If you want to rebuild the 32bit verison, you should create a 32-bit CentOS environment and build them.
       Fortunately these parts are rarely modified, so you only need to build once or you can directly use the binaries I have built.
longpanda's avatar
longpanda committed
78

79
    Besides, after a full compile and packaging, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
longpanda's avatar
longpanda committed
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110

==========================================
4. Build every part of Ventoy
==========================================
4.1 == Build grub2 ==
    cd /home/Ventoy-master/GRUB2
    sh buildgrub.sh
      
4.2 == Build ipxe.krn ==
    cd /home/Ventoy-master/IPXE
    sh buildipxe.sh
      
4.3 == Build Ventoy2Disk.exe ==
    Ventoy2Disk.exe is the installer in Windows platform. And it must be built in Windows with Microsoft Visual Studio (2013+).   
    Open /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk.sln with Visual Studio and build it.
   
4.4 == Build vtoyjump64.exe/vtoyjump32.exe ==
    vtoyjump64.exe/vtoyjump32.exe is used to mount iso file in windows PE. You should install Microsoft Visual Studio (2013+) to build it.
    Open /home/Ventoy-master/vtoyjump/vtoyjump.sln with Visual Studio and build it (64&32).
   
4.5 == Build dmsetup ==
    Please refer to DMSETUP/build.txt
   
4.6 == Build ventoy_x64.efi ==
    cd /home/Ventoy-master/EDK2
    sh buildedk.sh
   
4.7 == Build VtoyTool ==
    cd /home/Ventoy-master/VtoyTool
    sh build.sh

111
112
4.8 == Build vtoycli ==    
    cd /home/Ventoy-master/vtoycli/fat_io_lib
longpanda's avatar
longpanda committed
113
    sh buildlib.sh
114
    cd /home/Ventoy-master/vtoycli
longpanda's avatar
longpanda committed
115
116
117
118
119
120
121
122
123
124
    sh build.sh

4.9 == Build exfat-util ==
    cd /home/Ventoy-master/ExFAT
    sh buidlibfuse.sh
    sh buidexfat.sh
    
    After that, copy EXFAT/shared/mkexfatfs         ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
    After that, copy EXFAT/shared/mount.exfat-fuse  ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64

125
    Use the same build step to build exfat-util 32-bit in a 32-bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
longpanda's avatar
longpanda committed
126
127
128
129
130
131

4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
    cd /home/Ventoy-master/FUSEISO
    sh build_libfuse.sh
    sh build.sh
    
132
    Use the same build step to build in a 32-bit CentOS system and get vtoy_fuse_iso_32
longpanda's avatar
longpanda committed
133
134
135
136
137
138
139
140
141
142
143
   
4.11 == Build unsquashfs_64/unsquashfs_32 ==
    cd /home/Ventoy-master/SQUASHFS/SRC
    sh build_lz4.sh
    sh build_lzma.sh
    sh build_lzo.sh
    sh build_zstd.sh
    
    cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
    sh build.sh
    
144
    Use the same build step to build in a 32-bit CentOS system and get unsquashfs_32
longpanda's avatar
longpanda committed
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
   
4.12 == Build vblade_64/vblade_32 ==
    cd /home/Ventoy-master/VBLADE/vblade-master
    sh build.sh
   
4.13 == Build zstdcat ==
    Please refer to ZSTD/build.txt

4.14 == Build vtoy_gen_uuid ==
    cd /home/Ventoy-master/GenUUID
    sh build.sh
    
4.15 == Build xzminidec32 ==
   cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
   make -f ventoy_makefile
   strip --strip-all xzminidec

4.16 == Build xzminidec64 ==
   cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
   make -f ventoy_makefile64
   strip --strip-all xzminidec

4.17 == Build iso9660_x64.efi ==
   This efi driver is from https://github.com/pbatard/efifs
   Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)

4.18 IMG/cpio/ventoy/busybox/64h
  https://www.uclibc.org/downloads/binaries/0.9.30.1/mini-native-x86_64.tar.bz2
  https://busybox.net/downloads/busybox-1.32.0.tar.bz2
  use BUSYBOX/x86_64_ash.config and uclibc to build busybox-1.32

4.19 == Build lunzip32/lunzip64 ==
  http://mirror.yongbok.net/nongnu/lzip/lunzip/lunzip-1.11.tar.gz
  PATH=$PATH:/opt/diet/bin
  ./configure --disable-nls CC='diet gcc -nostdinc'
  make
  strip --strip-all lunzip
  
  #aarch64
  ./configure --disable-nls CC='aarch64-buildroot-linux-uclibc-gcc -static'
  make
  aarch64-buildroot-linux-uclibc-strip --strip-all lunzip



==========================================
5. Binaries
==========================================
  There some binaries in Ventoy install package. These files are downloaded from other open source project's website, such as busybox.
  Here is the list of the binaries, their SHA-256 and the download urls:   

5.1 IMG/cpio/ventoy/tool/lz4cat
  https://create.stephan-brumme.com/smallz4   smallz4cat-x32-v1.4
  SHA-256: 13d293ddeedb469f51da41167f79b2cbdb904e681716f6e6191b233dbb162438
   
5.2 IMG/cpio/ventoy/tool/ar
  https://busybox.net/downloads/binaries/1.30.0-i686   busybox_AR
  SHA-256: f29b7d81a983c0c85d22496f4a833c18f2528a1b666eb7d47c93084c1ed66ae0  
  
5.3 IMG/cpio/ventoy/tool/inotifyd
  https://busybox.net/downloads/binaries/1.30.0-i686   busybox_INOTIFYD
  SHA-256: 3532162a8695e91a1ed9ddea28b2cb22259a90e93d5d9c4a517b6c36842c686f  

5.4 IMG/cpio/ventoy/busybox/ash
  https://busybox.net/downloads/binaries/1.27.1-i686   busybox_ASH
  SHA-256: 44a6274bca580c2758ffc173fc76d18bb855b1fe8dcf70efd9ee75cbd57dee97  

5.5 IMG/cpio/ventoy/busybox/tmpxz
  https://busybox.net/downloads/binaries/1.27.1-i686   busybox_XZ
  SHA-256: f6cdb6293680424c29b89bde0685ca27f455166c9b302cd6082ef90681456291  

5.6 INSTALL/tool/i386/xzcat
  https://busybox.net/downloads/binaries/1.30.0-i686/   busybox_XZCAT
  SHA-256: 7399db642c2beaf52a16ab5264ffc55cfd1ff5699a524f63e5d48edf84e20f44  
  
5.7 INSTALL/tool/i386/hexdump
  https://busybox.net/downloads/binaries/1.30.0-i686/   busybox_HEXDUMP
  SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af  

5.8 imdisk
  download http://www.ltr-data.se/files/imdiskinst.exe and extract it by 7zip.
  
  INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys  SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
  INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe  SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
  INSTALL/ventoy/imdisk/64/imdisk.cpl --> cpl/amd64/imdisk.cpl  SHA-256: aea2ebbea2b073c947263744962af8a3eab025ff4c9d825c543e380e738a4c99
  
  INSTALL/ventoy/imdisk/32/imdisk.sys --> sys/i386/imdisk.sys  SHA-256: a94caec2f71a924d6a914c093ad4b905d7cfdea3f515ed48aaa8c3950b2dc191
  INSTALL/ventoy/imdisk/32/imdisk.exe --> cli/i386/imdisk.exe  SHA-256: 33b53858e2139704cf603b115a3e5e1dfd4daeaaed4d3e03c633f2df3b55dbaa
  INSTALL/ventoy/imdisk/32/imdisk.cpl --> cpl/i386/imdisk.cpl  SHA-256: b781d3e2d286ac8bf548f44e50cbbb3fe78203296e41e4d2e73b407668f88f2d
  
5.9 INSTALL/ventoy/memdisk
  https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
  decompress it and memdisk is at syslinux-6.03/bios/memdisk/memdisk
  SHA-256: 3f6cd656b8a14109cd3f906fee2dd2e75418f983a5e1bfdb64f44f7765588cbb
  

5.10 UEFIinSecureBoot
 https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases   Super-UEFIinSecureBoot-Disk_minimal_v3.zip
 unzip it and get Super-UEFIinSecureBoot-Disk_minimal.img, extract the img by 7zip.
 
 INSTALL/EFI/BOOT/BOOTX64.EFI --> EFI/BOOT/BOOTX64.EFI  SHA-256: 475552c7476ad45e42344eee8b30d44c264d200ac2468428aa86fc8795fb6e34
 INSTALL/EFI/BOOT/grubx64.efi --> EFI/BOOT/grubx64.efi  SHA-256: 25d858157349dc52fa70f3cdf5c62fe1e0bae37ddfc3a6b6528af9a3c745775f
 INSTALL/EFI/BOOT/MokManager.efi --> EFI/BOOT/MokManager.efi  SHA-256: 3bf1f46cee0832355c7dd1dba880dea9bcaa78cc44375a1559d43bc9db18933b


5.11 INSTALL/tool/ash
 https://busybox.net/downloads/binaries/1.31.0-i686-uclibc/   busybox_ASH
 SHA-256: 2943f02f85fee0c9551aec47110a558a73f919c032b3c51e56d6f197b5ec4d7b  
   
5.12 7za.exe
 download from https://www.7-zip.org/a/7z1900-extra.7z
 ISNTALL/ventoy/7z/64/7za.exe  SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
 ISNTALL/ventoy/7z/32/7za.exe  SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d