1338 lines
44 KiB
Bash
1338 lines
44 KiB
Bash
# Maintainer: Toolybird <toolybird at tuta dot io>
|
|
#
|
|
# WORK IN PROGRESS
|
|
#
|
|
# <rant>This thing is a packaging nightmare!! The upstream build system is
|
|
# *especially* distro unfriendly (build on Centos 7...WTF?). Building from
|
|
# source to proper Arch standards is "interesting" to say the least.</rant>
|
|
#
|
|
# NOTE: upstream uses losetup (root) for disk image preparation and GRUB
|
|
# installation. Solved by utilizing libguestfs/QEMU.
|
|
#
|
|
# NOT INCLUDED (compared to upstream): ARM64, MIPS64, LiveCD.
|
|
#
|
|
# PROBLEMS: FIXME
|
|
#
|
|
# - ancient pkg versions used in the build
|
|
# - includes bundled / vendored sources
|
|
# - some third party / pre-compiled / downloaded binaries are used
|
|
#
|
|
# This PKGBUILD is based on "INSTALL/all_in_one.sh". The upstream build
|
|
# environment is Centos 7 (as root!). See "DOC/BuildVentoyFromSource.txt" and
|
|
# GitHub CI/docker files. The Ventoy code is unfortunately built upon very old
|
|
# and outdated pkgs. In order to achieve an initial working build, I've simply
|
|
# tried to replicate upstream procedures as much as possible. Some patches are
|
|
# required to successfully build on a modern Arch system. The main components of
|
|
# Ventoy are heavily modified versions of:
|
|
#
|
|
# - grub (Jul 2019) (2.04)
|
|
# - ipxe (Sep 2019) (3fe683e)
|
|
# - edk2 (Dec 2019) (201911)
|
|
#
|
|
# Please see the "License" folder for full details of various other bits that
|
|
# have been modified.
|
|
|
|
pkgname=ventoy
|
|
pkgver=1.0.99
|
|
_grub_ver=2.04 # (Jul 2019)
|
|
#_unifont_ver=15.0.01 # FIXME see NOTE below
|
|
_ipxe_ver=3fe683e # (Sep 29 2019)
|
|
_edk2_ver=stable201911 # (Dec 2019)
|
|
_diet_ver=0.34 # FIXME AUR pkg needs a patch, see below, build our own (64/32)
|
|
_musl_ver=1.2.5 # upstream uses 1.2.1, use repo for 64-bit, build our own 32-bit
|
|
_kern_hdrs_musl_ver=4.19.88 # for busybox 32-bit
|
|
_fuse_ver=2.9.9 # need a static lib built against musl, build our own (64/32)
|
|
_exfat_ver=1.3.0 # (Sep 2018) old! FIXME see comments below for why we build our own
|
|
_lz4_ver=1.8.1.2 # (Jan 2018) old! FIXME statically linked into unsquashfs
|
|
_xz_ver=5.0.4 # (Jun 2012) old! FIXME statically linked into unsquashfs
|
|
_lzo_ver=2.08 # (Jun 2014) old! FIXME statically linked into unsquashfs
|
|
_zstd_ver=1.4.4 # (Nov 2019) old! FIXME statically linked into unsquashfs
|
|
_zlib_ver=1.3.1 # need a static 32-bit lib for unsquashfs, build our own
|
|
_squash_ver=4.4 # (Aug 2019) old! FIXME for unsquashfs
|
|
_dm_ver=1.02.28 # (Sep 2008) old! FIXME for dmsetup
|
|
_zstd1_ver=1.0.0 # (Sep 2016) old! FIXME for standalone zstdcat
|
|
_xz_embed_ver=20130513 # (May 2013) old! FIXME for xzminidec
|
|
_busybox_ver=1.32.0 # (Jun 2020) old! FIXME
|
|
_crypt_ver=1.7.5 # (Apr 2017) old! FIXME for veritysetup
|
|
_lunzip_ver=1.11 # (Jan 2019) old! FIXME
|
|
_wimboot_ver=2.7.3 # (Apr 2021) old! FIXME
|
|
pkgrel=1
|
|
pkgdesc="A new bootable USB solution"
|
|
arch=(x86_64)
|
|
url="https://www.ventoy.net/"
|
|
license=(GPL-3.0-or-later)
|
|
depends=(bash dosfstools)
|
|
makedepends=(
|
|
acpica # edk2
|
|
cdrtools # EfiISO
|
|
cpio # IMG/USB prep
|
|
device-mapper # grub2
|
|
freetype2 # grub2
|
|
fuse2 # grub2 exfat
|
|
git # ipxe
|
|
gtk3 # GUI
|
|
kernel-headers-musl # busybox
|
|
lib32-gcc-libs # 32-bit squashfs-tools lz4 xz lzo zstd vblade
|
|
lib32-glibc # 32-bit dietlibc vtoytool dmsetup zstdcat xzminidec busybox lunzip
|
|
libguestfs # IMG/USB prep
|
|
linux # libguestfs
|
|
musl # vtoycli fuse fuseiso xzminidec busybox
|
|
nasm # edk2
|
|
python # grub2 edk2
|
|
python-setuptools # edk2 (python-3.12+)
|
|
qt5-base # GUI
|
|
ttf-dejavu # grub2
|
|
)
|
|
optdepends=(
|
|
'gtk3: for GTK GUI'
|
|
'parted: for preferred CLI partitioner'
|
|
'polkit: for GUI privilege escalation'
|
|
'qt5-base: for Qt GUI'
|
|
)
|
|
conflicts=(ventoy-bin)
|
|
# A regression in latest pacman unsets MAKEFLAGS when using !buildflags.
|
|
# https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/issues/25
|
|
# Workaround it for now by manually unsetting VARS. See (way down) below in build() function.
|
|
#options=(!buildflags)
|
|
source=(
|
|
"$pkgname-$pkgver.tar.gz::https://github.com/ventoy/Ventoy/archive/refs/tags/v$pkgver.tar.gz"
|
|
https://ftp.gnu.org/gnu/grub/grub-"$_grub_ver".tar.xz
|
|
ventoy-grub-fix-build-with-binutils-2.36.patch::https://git.savannah.gnu.org/cgit/grub.git/patch/configure.ac?id=b9827513
|
|
# https://ftp.gnu.org/gnu/unifont/unifont-"$_unifont_ver/unifont-$_unifont_ver".bdf.gz
|
|
git+https://github.com/ipxe/ipxe.git#commit="$_ipxe_ver"
|
|
https://github.com/tianocore/edk2/archive/refs/tags/edk2-"$_edk2_ver".zip
|
|
ventoy-fix-ucs-2-lookup-on-python-3.9.patch::https://github.com/tianocore/edk2/commit/5d864834.patch
|
|
ventoy-fix-array.array.tostring-removal-in-python-3.9.patch::https://github.com/tianocore/edk2/commit/43bec9ea.patch
|
|
https://www.fefe.de/dietlibc/dietlibc-"$_diet_ver".tar.xz
|
|
dietlibc-headers-fix.patch::https://salsa.debian.org/debian/dietlibc/-/raw/master/debian/patches/bugfixes/newer-linux-headers.diff
|
|
https://musl.libc.org/releases/musl-"$_musl_ver".tar.gz
|
|
kernel-headers-musl-"$_kern_hdrs_musl_ver".tar.gz::https://github.com/sabotage-linux/kernel-headers/archive/v"$_kern_hdrs_musl_ver".tar.gz
|
|
https://github.com/libfuse/libfuse/releases/download/fuse-"$_fuse_ver/fuse-$_fuse_ver".tar.gz
|
|
exfat-"$_exfat_ver".tar.gz::https://github.com/relan/exfat/archive/refs/tags/v"$_exfat_ver".tar.gz
|
|
https://github.com/madler/zlib/releases/download/v"$_zlib_ver/zlib-$_zlib_ver".tar.xz
|
|
squashfs-tools-"$_squash_ver".tar.gz::https://github.com/plougher/squashfs-tools/archive/refs/tags/"$_squash_ver".tar.gz
|
|
http://vault.centos.org/5.3/os/SRPMS/device-mapper-"$_dm_ver"-2.el5.src.rpm
|
|
zstd-"$_zstd1_ver".tar.gz::https://github.com/facebook/zstd/archive/refs/tags/v"$_zstd1_ver".tar.gz
|
|
https://tukaani.org/xz/xz-embedded-"$_xz_embed_ver".tar.gz
|
|
https://busybox.net/downloads/busybox-"$_busybox_ver".tar.bz2
|
|
https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/v"${_crypt_ver%.*}"/cryptsetup-"$_crypt_ver".tar.xz
|
|
wimboot-"$_wimboot_ver".tar.gz::https://github.com/ipxe/wimboot/archive/v"$_wimboot_ver".tar.gz
|
|
wimboot-binutils-2.42-fix.patch
|
|
)
|
|
noextract=(
|
|
grub-"$_grub_ver".tar.xz
|
|
edk2-"$_edk2_ver".zip
|
|
fuse-"$_fuse_ver".tar.gz
|
|
exfat-"$_exfat_ver".tar.gz
|
|
zlib-"$_zlib_ver".tar.xz
|
|
squashfs-tools-"$_squash_ver".tar.gz
|
|
device-mapper-"$_dm_ver"-2.el5.src.rpm
|
|
zstd-"$_zstd1_ver".tar.gz
|
|
xz-embedded-"$_xz_embed_ver".tar.gz
|
|
busybox-"$_busybox_ver".tar.bz2
|
|
cryptsetup-"$_crypt_ver".tar.xz
|
|
wimboot-"$_wimboot_ver".tar.gz
|
|
)
|
|
sha256sums=('2557ccdeaf8b0e517087afb63f65c4e2a32ef3f15bd196b7f828d93d586ca7b9'
|
|
'e5292496995ad42dabe843a0192cf2a2c502e7ffcc7479398232b10a472df77d'
|
|
'db2a9018392a3984d1e1e649bde0ffc19c90fa4d96b9fd2d4caaf9c1ca2af68b'
|
|
'5ee49d23d376aeea24269f7605fcaa7fbd326c04cda4e31b8eb7fa15a540ef44'
|
|
'c6f691aa91afbaab811a369fe729f61d8e5b58bb5ad79a45446c9ee849c1a60b'
|
|
'SKIP' # Cannot rely on GitHub to maintain a stable patch checksum
|
|
'SKIP' # Cannot rely on GitHub to maintain a stable patch checksum
|
|
'7994ad5a63d00446da2e95da1f3f03355b272f096d7eb9830417ab14393b3ace'
|
|
'313aa962c7f80a02f41758d90d6f67687c77c74a6126b060337f248bc1b637f6'
|
|
'a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4'
|
|
'd104397fc657ffb0f0bda46f54fd182b76a9ebc324149c183a4ff8c86a8db53d'
|
|
'd0e69d5d608cc22ff4843791ad097f554dd32540ddc9bed7638cc6fea7c1b4b5'
|
|
'689bcb4a639acd2d45e6fa0ff455f7f18edb2421d4f4f42909943775adc0e375'
|
|
'38ef96b8dfe510d42707d9c781877914792541133e1870841463bfa73f883e32'
|
|
'a7fa4845e9908523c38d4acf92f8a41fdfcd19def41bd5090d7ad767a6dc75c3'
|
|
'599a630fdf020282e27c66aa2b4f3d624d731bd150749a8d7b74f544be03b2bb'
|
|
'197e6ef74da878cbf72844f38461bb18129d144fd5221b3598e973ecda6f5963'
|
|
'19577e9f68a2d4e08bb5564e3946e35c6323276cb6749c101c86e26505e3bf0e'
|
|
'c35d87f1d04b2b153d33c275c2632e40d388a88f19a9e71727e0bbbff51fe689'
|
|
'2b30cd1d0dd606a53ac77b406e1d37798d4b0762fa89de6ea546201906a251bd'
|
|
'3cf04ca4a5b4466e624570d980638f8ab72feaed9b94106dd6ed2bed674a4cdf'
|
|
'8121a64145ff317693de80148fbdca6cb73d3f2ed92f66b946949750ab71afe9')
|
|
|
|
# Some components below are notated as follows:
|
|
#
|
|
# 'HOST' -> a tool that runs on Arch itself. e.g. it might be part of the
|
|
# install routine to set up (install) a Ventoy USB drive. Usually a "normal"
|
|
# x86_64 binary.
|
|
#
|
|
# 'IMG/USB' -> a tool that is "embedded" into a Ventoy USB drive. The tool is
|
|
# stored inside a cpio archive on the ESP and is typically involved in the
|
|
# process of booting ISO's. There will usually be an additional 32-bit binary.
|
|
# These tools are meant to be small and self-contained and are often statically
|
|
# linked against dietlibc or musl.
|
|
|
|
prepare() {
|
|
cd Ventoy-$pkgver
|
|
: "${_DIFF:=0}" # "1" to generate diffs for easier inspection of Ventoy mod's.
|
|
|
|
# Create our own INSTALL trees
|
|
mv -v INSTALL{,.upstream}
|
|
mv -v IMG/cpio_x86{,.upstream}
|
|
|
|
(
|
|
# Refer "GRUB2/buildgrub.sh"
|
|
cd GRUB2
|
|
mkdir -v SRC NBP PXE
|
|
tar -xf "$srcdir"/grub-$_grub_ver.tar.xz -C SRC
|
|
cp -av MOD_SRC/grub-$_grub_ver SRC
|
|
|
|
if ((_DIFF)); then
|
|
tar -xf "$srcdir"/grub-$_grub_ver.tar.xz -C SRC --xform "s|\(grub-$_grub_ver\)|\1.orig|"
|
|
diff -urN SRC/grub-$_grub_ver{.orig,} > ventoy-$pkgver-grub-$_grub_ver.patch || :
|
|
fi
|
|
|
|
# Fix build for newer toolchain.
|
|
patch -d SRC/grub-$_grub_ver -Np1 -i "$srcdir"/ventoy-grub-fix-build-with-binutils-2.36.patch
|
|
|
|
# Tweak font path.
|
|
sed -i 's|\(/usr/share/fonts/dejavu\)|\1 /usr/share/fonts/TTF|g' SRC/grub-$_grub_ver/configure.ac
|
|
|
|
# NOTE: Upstream builds don't include this. Yet they ship their own
|
|
# {ascii,unicode}.pf2 font files...how are they derived? FIXME
|
|
# gzip -cd "$srcdir"/unifont-$_unifont_ver.bdf.gz > SRC/grub-$_grub_ver/unifont.bdf
|
|
)
|
|
|
|
(
|
|
# Refer "IPXE/buildipxe.sh"
|
|
cd IPXE
|
|
tar -xf ipxe_org_code/ipxe-$_ipxe_ver.tar.bz2
|
|
cp -av ipxe_mod_code/ipxe-$_ipxe_ver .
|
|
|
|
if ((_DIFF)); then
|
|
# The bundled tarball has been independently verified as being identical
|
|
# to a git checkout. But might as well use the git version for comparison.
|
|
diff -urN -x .git "$srcdir"/ipxe ipxe-$_ipxe_ver > ventoy-$pkgver-ipxe-$_ipxe_ver.patch || :
|
|
fi
|
|
|
|
rm -rfv ipxe-$_ipxe_ver/src/{bin,drivers}
|
|
)
|
|
|
|
(
|
|
# Refer "EDK2/buildedk.sh"
|
|
cd EDK2
|
|
bsdtar -xf "$srcdir"/edk2-$_edk2_ver.zip
|
|
cp -av edk2_mod/edk2-edk2-$_edk2_ver .
|
|
|
|
if ((_DIFF)); then
|
|
bsdtar -xf "$srcdir"/edk2-$_edk2_ver.zip -s "|edk2-edk2-$_edk2_ver|~.orig|"
|
|
diff -urN edk2-edk2-$_edk2_ver{.orig,} > ventoy-$pkgver-edk2-$_edk2_ver.patch || :
|
|
fi
|
|
|
|
cd edk2-edk2-$_edk2_ver
|
|
|
|
# Remove -Werror for successful build (as per main Arch repo).
|
|
sed -i 's/ -Werror//g' BaseTools/Conf/*.template BaseTools/Source/C/Makefiles/*.makefile
|
|
|
|
# Fix build with newer toolchain.
|
|
sed -i 's/GCC48/GCC5/' ../build.sh
|
|
|
|
# Fix build against recent python.
|
|
patch -Np1 -i "$srcdir"/ventoy-fix-ucs-2-lookup-on-python-3.9.patch
|
|
patch -Np1 -i "$srcdir"/ventoy-fix-array.array.tostring-removal-in-python-3.9.patch
|
|
)
|
|
|
|
(
|
|
cd "$srcdir"/dietlibc-$_diet_ver
|
|
|
|
# Fix from Debian. Avoid errors when compiling apps against recent kernel headers. FIXME
|
|
patch -Np1 -i "$srcdir"/dietlibc-headers-fix.patch
|
|
|
|
# <cpuid.h> compile fix
|
|
sed -i 's/__leaf/__LEAF/' include/sys/cdefs.h
|
|
)
|
|
|
|
(
|
|
cd SQUASHFS
|
|
if ((_DIFF)); then
|
|
tar -xf "$srcdir"/squashfs-tools-$_squash_ver.tar.gz --xform "s|\(squashfs-tools-$_squash_ver\)|\1.orig|"
|
|
diff -urN squashfs-tools-$_squash_ver{.orig,} > ventoy-$pkgver-squashfs-tools-$_squash_ver.patch || :
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd Ventoy2Disk
|
|
if ((_DIFF)); then
|
|
tar -xf "$srcdir"/xz-embedded-$_xz_embed_ver.tar.gz -C Ventoy2Disk --xform "s|\(xz-embedded-$_xz_embed_ver\)|\1.orig|"
|
|
diff -urN Ventoy2Disk/xz-embedded-$_xz_embed_ver{.orig,} > ventoy-$pkgver-xz-embedded-$_xz_embed_ver.patch || :
|
|
fi
|
|
)
|
|
|
|
(
|
|
cd wimboot
|
|
# Some *.S files are missing from the bundled source. We will grab them from the tarball.
|
|
tar -xf "$srcdir"/wimboot-$_wimboot_ver.tar.gz --xform "s|\(wimboot-$_wimboot_ver\)|\1.orig|"
|
|
|
|
if ((_DIFF)); then
|
|
diff -ur wimboot-$_wimboot_ver{.orig,}/src > ventoy-$pkgver-wimboot-$_wimboot_ver.patch || :
|
|
fi
|
|
|
|
# Fix build with recent binutils.
|
|
cd wimboot-$_wimboot_ver.orig
|
|
patch -Np1 -i "$srcdir"/wimboot-binutils-2.42-fix.patch
|
|
)
|
|
}
|
|
|
|
_build_grub() (
|
|
echo ":: grub"
|
|
# Refer "GRUB2/buildgrub.sh"
|
|
cd Ventoy-$pkgver/GRUB2
|
|
local _VT_GRUB_DIR=$PWD
|
|
|
|
(
|
|
cd SRC/grub-$_grub_ver
|
|
./autogen.sh
|
|
)
|
|
|
|
cp -a SRC/grub-$_grub_ver SRC/grub-x86_64-efi
|
|
cp -a SRC/grub-$_grub_ver SRC/grub-i386-efi
|
|
cp -a SRC/grub-$_grub_ver SRC/grub-i386-pc
|
|
|
|
mkdir -pv ../INSTALL/{EFI/BOOT,grub/i386-pc}
|
|
local _conf_args=(--prefix="$_VT_GRUB_DIR"/INSTALL --disable-werror)
|
|
|
|
_build_grub-x86_64-efi() (
|
|
cd SRC/grub-x86_64-efi
|
|
./configure --with-platform=efi "${_conf_args[@]}"
|
|
make
|
|
sh install.sh uefi
|
|
)
|
|
|
|
_build_grub-i386-efi() (
|
|
cd SRC/grub-i386-efi
|
|
./configure --target=i386 --with-platform=efi "${_conf_args[@]}"
|
|
make
|
|
sh install.sh i386efi
|
|
)
|
|
|
|
_build_grub-i386-pc() (
|
|
cd SRC/grub-i386-pc
|
|
./configure --target=i386 --with-platform=pc "${_conf_args[@]}"
|
|
make
|
|
sh install.sh
|
|
)
|
|
|
|
_build_grub-x86_64-efi
|
|
_build_grub-i386-efi
|
|
_build_grub-i386-pc
|
|
|
|
# Copy over the ancillary stuff.
|
|
local _d
|
|
for _d in distro fonts help menu themes; do
|
|
cp -av ../INSTALL.upstream/grub/$_d ../INSTALL/grub
|
|
done
|
|
cp -av ../INSTALL.upstream/grub/*.cfg ../INSTALL/grub
|
|
)
|
|
|
|
_build_ipxe() (
|
|
echo ":: ipxe"
|
|
# Refer "IPXE/buildipxe.sh"
|
|
cd Ventoy-$pkgver/IPXE/ipxe-$_ipxe_ver/src
|
|
|
|
make bin/ipxe.lkrn NO_WERROR=1 V=1
|
|
install -Dv bin/ipxe.lkrn "$srcdir"/Ventoy-$pkgver/INSTALL/ventoy/ipxe.krn
|
|
)
|
|
|
|
_build_edk2() (
|
|
echo ":: edk2"
|
|
# Refer "EDK2/buildedk.sh"
|
|
cd Ventoy-$pkgver/EDK2
|
|
|
|
(
|
|
cd edk2-edk2-$_edk2_ver
|
|
make -C BaseTools
|
|
)
|
|
|
|
mkdir -pv ../INSTALL/ventoy
|
|
sh ./build.sh ia32
|
|
sh ./build.sh
|
|
)
|
|
|
|
_build_dietlibc() (
|
|
echo ":: dietlibc"
|
|
# Refer "DOC/installdietlibc.sh"
|
|
cd dietlibc-$_diet_ver
|
|
make
|
|
make i386
|
|
)
|
|
|
|
_build_musl32() (
|
|
echo ":: musl32"
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 2.3
|
|
(
|
|
cd musl-$_musl_ver
|
|
|
|
CFLAGS=-m32 \
|
|
./configure --prefix="$srcdir"/musl32 --syslibdir="$srcdir"/musl32/lib \
|
|
--target=i386 --build=i386
|
|
make
|
|
make install
|
|
)
|
|
|
|
cd kernel-headers-$_kern_hdrs_musl_ver
|
|
make ARCH=x86 prefix="$srcdir"/musl32 install
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_vtoytool() (
|
|
echo ":: vtoytool"
|
|
# Refer "VtoyTool/build.sh"
|
|
cd Ventoy-$pkgver/VtoyTool
|
|
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-x86_64/diet -Os gcc -DVTOY_X86_64 -D_FILE_OFFSET_BITS=64 ./*.c BabyISO/*.c \
|
|
-IBabyISO -Wall -DBUILD_VTOY_TOOL -DUSE_DIET_C -o vtoytool_64
|
|
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-i386/diet -Os gcc -DVTOY_I386 -D_FILE_OFFSET_BITS=64 -m32 ./*.c BabyISO/*.c \
|
|
-IBabyISO -Wall -DBUILD_VTOY_TOOL -DUSE_DIET_C -o vtoytool_32
|
|
|
|
strip --strip-all vtoytool_{64,32}
|
|
rm -rfv vtoytool
|
|
install -Dvt vtoytool/00 vtoytool_{64,32}
|
|
)
|
|
|
|
# HOST
|
|
_build_vtoycli() (
|
|
echo ":: vtoycli"
|
|
# Refer "vtoycli/fat_io_lib/buildlib.sh" and "vtoycli/build.sh"
|
|
#
|
|
# Upstream builds small and static here, but this is a "host" binary so we
|
|
# don't really need that, nor do we need a 32-bit binary. A "normal" GCC
|
|
# binary would do. FIXME
|
|
|
|
cd Ventoy-$pkgver/vtoycli
|
|
|
|
(
|
|
cd fat_io_lib/release
|
|
rm -rfv ../{include,lib}
|
|
|
|
# GCC-14 build fix
|
|
sed -i '/fat_cache.h/a #include "fat_format.h"' fat_filelib.c
|
|
|
|
musl-gcc -O2 -D_FILE_OFFSET_BITS=64 fat*.c -c
|
|
ar -rc libfat_io_64.a ./*.o
|
|
rm -fv ./*.o
|
|
|
|
# gcc -m32 -O2 -D_FILE_OFFSET_BITS=64 fat*.c -c
|
|
# ar -rc libfat_io_32.a ./*.o
|
|
# rm -fv ./*.o
|
|
|
|
mkdir -v ../{include,lib}
|
|
mv -v ./*.a ../lib/
|
|
cp -av ./*.h ../include/
|
|
)
|
|
|
|
local _SRCS=(vtoycli.c vtoyfat.c vtoygpt.c crc32.c partresize.c)
|
|
|
|
musl-gcc -Os -static -D_FILE_OFFSET_BITS=64 \
|
|
"${_SRCS[@]}" -Ifat_io_lib/include fat_io_lib/lib/libfat_io_64.a -o vtoycli_64
|
|
|
|
# "$srcdir"/dietlibc-$_diet_ver/bin-i386/diet -Os gcc -D_FILE_OFFSET_BITS=64 -m32 \
|
|
# "${_SRCS[@]}" -Ifat_io_lib/include fat_io_lib/lib/libfat_io_32.a -o vtoycli_32
|
|
|
|
strip --strip-all vtoycli_64
|
|
# strip --strip-all vtoycli_32
|
|
install -Dv vtoycli_64 ../INSTALL/tool/x86_64/vtoycli
|
|
# install -Dv vtoycli_32 ../INSTALL/tool/i386/vtoycli
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_fuseiso() (
|
|
echo ":: fuseiso"
|
|
# Refer "FUSEISO/build.sh"
|
|
cd Ventoy-$pkgver/FUSEISO
|
|
|
|
__build_libfuse_static() (
|
|
# Refer "FUSEISO/build_libfuse.sh"
|
|
tar -xf "$srcdir"/fuse-$_fuse_ver.tar.gz
|
|
cd fuse-$_fuse_ver
|
|
mkdir -v build{64,32}
|
|
|
|
local _conf_args=(
|
|
--disable-shared
|
|
--disable-util
|
|
--disable-example
|
|
CFLAGS=-Os
|
|
)
|
|
|
|
(
|
|
cd build64
|
|
CC=musl-gcc \
|
|
../configure "${_conf_args[@]}"
|
|
make V=1
|
|
)
|
|
|
|
(
|
|
cd build32
|
|
CC="$srcdir/musl32/bin/musl-gcc -m32" \
|
|
LDFLAGS="-Wl,-melf_i386" \
|
|
../configure "${_conf_args[@]}"
|
|
make V=1
|
|
)
|
|
)
|
|
|
|
__build_libfuse_static
|
|
|
|
rm -fv vtoy_fuse_iso_*
|
|
|
|
musl-gcc -static -O2 -D_FILE_OFFSET_BITS=64 vtoy_fuse_iso.c -Ifuse-$_fuse_ver/include \
|
|
fuse-$_fuse_ver/build64/lib/.libs/libfuse.a -o vtoy_fuse_iso_64
|
|
|
|
"$srcdir"/musl32/bin/musl-gcc -m32 -static -O2 -D_FILE_OFFSET_BITS=64 \
|
|
vtoy_fuse_iso.c -Ifuse-$_fuse_ver/include -Wl,-melf_i386 \
|
|
fuse-$_fuse_ver/build32/lib/.libs/libfuse.a -o vtoy_fuse_iso_32
|
|
|
|
strip --strip-all vtoy_fuse_iso_{64,32}
|
|
)
|
|
|
|
# HOST
|
|
_build_exfat() (
|
|
echo ":: exfat"
|
|
# Refer "ExFAT/buidexfat.sh"
|
|
#
|
|
# This is the FUSE based pkg. The version in the repo "exfat-utils" is going
|
|
# away in favor of the kernel based "exfatprogs" [1]. Ventoy is apparently not
|
|
# yet ready for the newer "exfatprogs" tools. Upstream builds want to link
|
|
# "libfuse.a" statically, however this is a "host" binary so there's no need.
|
|
# Additionally, Ventoy modifies it slightly with the sed below. Although, it
|
|
# appears the mod is only applicable to "mount.exfat-fuse" which we don't need
|
|
# (see below). FIXME
|
|
#
|
|
# [1] https://bugs.archlinux.org/task/72629
|
|
|
|
cd Ventoy-$pkgver/ExFAT
|
|
|
|
tar -xf "$srcdir"/exfat-$_exfat_ver.tar.gz
|
|
cd exfat-$_exfat_ver
|
|
|
|
sed "/printf.*VERSION/a\\\tif (access(\"/etc/initrd-release\", F_OK) >= 0) argv[0][0] = '@';" \
|
|
-i fuse/main.c
|
|
autoreconf -i
|
|
./configure
|
|
make
|
|
|
|
# NOTE: AFAICT "mount.exfat-fuse" is used only in the LiveCD which is of no use to us.
|
|
# If it turns out that it is required, a runtime dep on "fuse2" will be needed.
|
|
|
|
# strip --strip-all fuse/mount.exfat-fuse
|
|
strip --strip-all mkfs/mkexfatfs
|
|
|
|
# install -Dvt ../../INSTALL/tool/x86_64 fuse/mount.exfat-fuse
|
|
install -Dvt ../../INSTALL/tool/x86_64 mkfs/mkexfatfs
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_unsquashfs() (
|
|
echo ":: unsquashfs"
|
|
# Refer "SQUASHFS/build.txt"
|
|
cd Ventoy-$pkgver/SQUASHFS/SRC
|
|
CFLAGS=-Os
|
|
local _libdir="$srcdir"/Ventoy-$pkgver/SQUASHFS/LIB
|
|
|
|
__build_lz4_static() (
|
|
# Refer "SQUASHFS/SRC/build_lz4.sh"
|
|
# The bundled lz4 tarball (ver 1.8.1.2 Jan 2018) has been independently
|
|
# verified as being identical to the one available on GitHub.
|
|
|
|
tar -xf lz4-$_lz4_ver.tar.gz
|
|
sed -i "s/@\$(CC)/\$(CC)/" lz4-$_lz4_ver/lib/Makefile
|
|
cp -a lz4-$_lz4_ver{,-32}
|
|
|
|
(
|
|
cd lz4-$_lz4_ver
|
|
make -C lib
|
|
make -C lib install PREFIX="$_libdir"/LZ4
|
|
)
|
|
|
|
(
|
|
cd lz4-$_lz4_ver-32
|
|
CC="gcc -m32" \
|
|
make -C lib
|
|
make -C lib install PREFIX="$_libdir"32/LZ4
|
|
)
|
|
)
|
|
|
|
__build_xz_static() (
|
|
# Refer "SQUASHFS/SRC/build_lzma.sh"
|
|
# The bundled liblzma/xz zip file contents have been independently verified
|
|
# as being identical to (ver 5.0.4 Jun 2012) available on [1], apart from
|
|
# the addition of a single file "liblzma-builder.sh".
|
|
#
|
|
# [1] https://tukaani.org/xz/old.html
|
|
|
|
bsdtar -xf liblzma-master.zip
|
|
cp -a liblzma-master{,-32}
|
|
|
|
local _conf_args=(
|
|
--disable-shared
|
|
--disable-xz
|
|
--disable-xzdec
|
|
--disable-lzmadec
|
|
--disable-lzmainfo
|
|
--enable-small
|
|
)
|
|
|
|
(
|
|
cd liblzma-master
|
|
./configure --prefix="$_libdir"/LZMA "${_conf_args[@]}"
|
|
make
|
|
make install
|
|
)
|
|
|
|
(
|
|
cd liblzma-master-32
|
|
CC="gcc -m32" \
|
|
./configure --prefix="$_libdir"32/LZMA "${_conf_args[@]}"
|
|
make
|
|
make install
|
|
)
|
|
)
|
|
|
|
__build_lzo_static() (
|
|
# Refer "SQUASHFS/SRC/build_lzo.sh"
|
|
# The bundled lzo tarball (ver 2.08 Jun 2014) contents have been
|
|
# independently verified as being identical to the 2.08 tarball available
|
|
# on [1], apart from a 1 line change in "configure{,.ac}" and a minor change
|
|
# in "include/lzo/lzodefs.h" but these appear to be tweaks by lzo upstream.
|
|
#
|
|
# [1] https://www.oberhumer.com/opensource/lzo/download/lzo-2.08.tar.gz
|
|
|
|
tar -xf lzo-$_lzo_ver.tar.gz
|
|
cp -a lzo-$_lzo_ver{,-32}
|
|
|
|
(
|
|
cd lzo-$_lzo_ver
|
|
./configure --prefix="$_libdir"/LZO
|
|
make V=1
|
|
make install
|
|
)
|
|
|
|
(
|
|
cd lzo-$_lzo_ver-32
|
|
CC="gcc -m32" \
|
|
./configure --prefix="$_libdir"32/LZO
|
|
make V=1
|
|
make install
|
|
)
|
|
)
|
|
|
|
__build_zstd_static() (
|
|
# Refer "SQUASHFS/SRC/build_zstd.sh"
|
|
# The bundled zstd tarball (ver 1.4.4 Nov 2019) has been independently
|
|
# verified as being identical to the one available on GitHub.
|
|
|
|
tar -xf zstd-$_zstd_ver.tar.gz
|
|
cp -a zstd-$_zstd_ver{,-32}
|
|
|
|
(
|
|
cd zstd-$_zstd_ver
|
|
ZSTD_LIB_COMPRESSION=0 make -C lib
|
|
make -C lib install PREFIX="$_libdir"/ZSTD
|
|
)
|
|
|
|
(
|
|
cd zstd-$_zstd_ver-32
|
|
export CC="gcc -m32"
|
|
ZSTD_LIB_COMPRESSION=0 make -C lib
|
|
make -C lib install PREFIX="$_libdir"32/ZSTD
|
|
)
|
|
)
|
|
|
|
__build_zlib_static-32() (
|
|
tar -xf "$srcdir"/zlib-$_zlib_ver.tar.xz
|
|
cd zlib-$_zlib_ver
|
|
|
|
CC="gcc -m32" \
|
|
./configure --static
|
|
make
|
|
)
|
|
|
|
__build_lz4_static
|
|
__build_xz_static
|
|
__build_lzo_static
|
|
__build_zstd_static
|
|
__build_zlib_static-32
|
|
|
|
cd "$srcdir"/Ventoy-$pkgver/SQUASHFS
|
|
unset CFLAGS
|
|
cp -a squashfs-tools-4.4/squashfs-tools{,-32}
|
|
rm -fv unsquashfs_*
|
|
|
|
(
|
|
cd squashfs-tools-4.4/squashfs-tools
|
|
sed -i 's|LIBS) -o|LIBS) /usr/lib/libz.a -o|' Makefile
|
|
make unsquashfs LZ4_LIBDIR="$_libdir"/LZ4 LZMA_LIBDIR="$_libdir"/LZMA \
|
|
LZO_LIBDIR="$_libdir"/LZO ZSTD_LIBDIR="$_libdir"/ZSTD
|
|
|
|
strip --strip-all unsquashfs
|
|
cp -av unsquashfs ../../unsquashfs_64
|
|
)
|
|
|
|
(
|
|
cd squashfs-tools-4.4/squashfs-tools-32
|
|
sed -i "s|LIBS) -o|LIBS) ../../SRC/zlib-$_zlib_ver/libz.a -o|" Makefile
|
|
CC="gcc -m32" \
|
|
make unsquashfs LZ4_LIBDIR="$_libdir"32/LZ4 LZMA_LIBDIR="$_libdir"32/LZMA \
|
|
LZO_LIBDIR="$_libdir"32/LZO ZSTD_LIBDIR="$_libdir"32/ZSTD
|
|
|
|
strip --strip-all unsquashfs
|
|
cp -av unsquashfs ../../unsquashfs_32
|
|
)
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_vblade() (
|
|
echo ":: vblade"
|
|
# Refer "VBLADE/vblade-master/build.sh"
|
|
cd Ventoy-$pkgver/VBLADE/vblade-master
|
|
rm -fv vblade_*
|
|
|
|
# Need -fcommon for build to succeed FIXME
|
|
gcc linux.c aoe.c ata.c bpf.c -Os -o vblade_64 -fcommon
|
|
gcc linux.c aoe.c ata.c bpf.c -Os -m32 -o vblade_32 -fcommon
|
|
|
|
strip --strip-all vblade_{64,32}
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_dmsetup() (
|
|
echo ":: dmsetup"
|
|
# Refer "DMSETUP/build.txt"
|
|
cd Ventoy-$pkgver/DMSETUP
|
|
rm -fv dmsetup*
|
|
bsdtar -O -xvf "$srcdir"/device-mapper*.rpm device-mapper*.tgz | tar -xzf -
|
|
|
|
tee -a device-mapper.$_dm_ver/include/configure.h.in > /dev/null << _EOF_
|
|
#ifndef UINT32_MAX
|
|
#define UINT32_MAX (4294967295U)
|
|
#endif
|
|
|
|
#ifndef UINT64_C
|
|
#define UINT64_C(c) c ## ULL
|
|
#endif
|
|
_EOF_
|
|
|
|
# GCC-14 build fixes
|
|
sed -i '/ctype.h/a #include <strings.h>' device-mapper.$_dm_ver/lib/libdm-report.c
|
|
sed -i '/langinfo.h/a #include <strings.h>' device-mapper.$_dm_ver/dmsetup/dmsetup.c
|
|
|
|
cp -a device-mapper.$_dm_ver{,-32}
|
|
|
|
(
|
|
cd device-mapper.$_dm_ver
|
|
CC="$srcdir/dietlibc-$_diet_ver/bin-x86_64/diet gcc" \
|
|
./configure
|
|
sed -i '/rpl_malloc/d' include/configure.h
|
|
make
|
|
strip --strip-all dmsetup/dmsetup
|
|
cp -av dmsetup/dmsetup ../dmsetup64
|
|
)
|
|
|
|
(
|
|
cd device-mapper.$_dm_ver-32
|
|
CC="$srcdir/dietlibc-$_diet_ver/bin-i386/diet gcc -m32" \
|
|
./configure
|
|
sed -i '/rpl_malloc/d' include/configure.h
|
|
make
|
|
strip --strip-all dmsetup/dmsetup
|
|
cp -av dmsetup/dmsetup ../dmsetup32
|
|
)
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_zstdcat() (
|
|
echo ":: zstdcat"
|
|
# Refer "ZSTD/build.txt"
|
|
cd Ventoy-$pkgver/ZSTD
|
|
rm -fv zstdcat*
|
|
tar -xf "$srcdir"/zstd-$_zstd1_ver.tar.gz
|
|
cp -a zstd-$_zstd1_ver{,-32}
|
|
|
|
local _compile_opts1=(
|
|
-I../lib -I../lib/common -I../lib/dictBuilder -I../lib/legacy -Wall -DZSTD_LEGACY_SUPPORT=1
|
|
../lib/decompress/zstd_decompress.c -c -o ../lib/decompress/zstd_decompress.o
|
|
)
|
|
|
|
local _compile_opts2=(
|
|
-I../lib -I../lib/common -I../lib/dictBuilder -I../lib/legacy -Wall -DZSTD_LEGACY_SUPPORT=1
|
|
../lib/decompress/zstd_decompress.o ../lib/decompress/huf_decompress.c ../lib/common/entropy_common.c
|
|
../lib/common/fse_decompress.c ../lib/common/xxhash.c ../lib/common/zstd_common.c
|
|
../lib/compress/zstd_compress.c ../lib/compress/fse_compress.c ../lib/compress/huf_compress.c
|
|
../lib/legacy/zstd_v01.c ../lib/legacy/zstd_v02.c ../lib/legacy/zstd_v03.c ../lib/legacy/zstd_v04.c
|
|
../lib/legacy/zstd_v05.c ../lib/legacy/zstd_v06.c ../lib/legacy/zstd_v07.c ../lib/dictBuilder/divsufsort.c
|
|
../lib/dictBuilder/zdict.c zstdcli.c fileio.c bench.c datagen.c dibio.c -o zstd
|
|
)
|
|
|
|
(
|
|
cd zstd-$_zstd1_ver/programs
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-x86_64/diet -Os gcc -pipe -nostdinc -falign-loops=32 "${_compile_opts1[@]}"
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-x86_64/diet -Os gcc -pipe -nostdinc "${_compile_opts2[@]}"
|
|
strip --strip-all zstd
|
|
cp -av zstd ../../zstdcat64
|
|
)
|
|
|
|
(
|
|
cd zstd-$_zstd1_ver-32/programs
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-i386/diet -Os gcc -m32 -pipe -nostdinc -falign-loops=32 "${_compile_opts1[@]}"
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-i386/diet -Os gcc -m32 -pipe -nostdinc "${_compile_opts2[@]}"
|
|
strip --strip-all zstd
|
|
cp -av zstd ../../zstdcat
|
|
)
|
|
|
|
install -Dvt ../IMG/cpio_x86/ventoy/tool zstdcat{,64}
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_xzminidec() (
|
|
echo ":: xzminidec"
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section(s) 4.15 and 4.16
|
|
cd Ventoy-$pkgver/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
|
|
|
make -f ventoy_makefile CC="$srcdir/dietlibc-$_diet_ver/bin-i386/diet gcc -Os -m32 -std=gnu89"
|
|
mv -v xzminidec{,32}
|
|
make clean
|
|
rm -v bytetest.o
|
|
|
|
make -f ventoy_makefile CC="$srcdir/dietlibc-$_diet_ver/bin-x86_64/diet gcc -Os -std=gnu89"
|
|
mv -v xzminidec{,64}
|
|
make clean
|
|
rm -v bytetest.o
|
|
|
|
make -f ventoy_makefile CC="musl-gcc -Os -static -std=gnu89"
|
|
mv -v xzminidec{,64_musl}
|
|
make clean
|
|
rm -v bytetest.o
|
|
|
|
strip --strip-all xzminidec{32,64}*
|
|
install -Dvt ../../../../IMG/cpio_x86/ventoy/busybox xzminidec{32,64}*
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_busybox() (
|
|
echo ":: busybox"
|
|
# Refer "BUSYBOX/build.txt"
|
|
cd Ventoy-$pkgver/BUSYBOX
|
|
mkdir -pv ../IMG/cpio_x86/ventoy/busybox
|
|
|
|
(
|
|
# Refer "BUSYBOX/chmod/build.sh"
|
|
cd chmod
|
|
rm -vf vtchmod*{32,64}*
|
|
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-x86_64/diet gcc -Os vtchmod.c -o vtchmod64
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-i386/diet gcc -Os -m32 vtchmod.c -o vtchmod32
|
|
musl-gcc -Os -static vtchmod.c -o vtchmod64_musl
|
|
strip --strip-all vtchmod{64,32} vtchmod64_musl
|
|
cp -avt ../../IMG/cpio_x86/ventoy/busybox vtchmod{64,32} vtchmod64_musl
|
|
)
|
|
|
|
tar -xf "$srcdir"/busybox-$_busybox_ver.tar.bz2
|
|
|
|
cp -a busybox-$_busybox_ver{,-xzcat64}
|
|
cp -a busybox-$_busybox_ver{,-xzcat32}
|
|
cp -a busybox-$_busybox_ver{,-32}
|
|
|
|
(
|
|
cd busybox-$_busybox_ver-xzcat64
|
|
cp -av ../x86_64_xzcat.config .config
|
|
make CC=musl-gcc V=1
|
|
mv -v busybox xzcat64_musl
|
|
xz xzcat64_musl
|
|
cp -avt ../../IMG/cpio_x86/ventoy/busybox xzcat64_musl.xz
|
|
)
|
|
|
|
(
|
|
cd busybox-$_busybox_ver-xzcat32
|
|
sed 's/# CONFIG_LFS is not set/CONFIG_LFS=y/' ../x86_64_xzcat.config > .config
|
|
make CC="$srcdir/musl32/bin/musl-gcc -m32 -Wl,-melf_i386" V=1
|
|
mv -v busybox xzcat32_musl
|
|
xz xzcat32_musl
|
|
cp -avt ../../IMG/cpio_x86/ventoy/busybox xzcat32_musl.xz
|
|
)
|
|
|
|
(
|
|
cd busybox-$_busybox_ver
|
|
make defconfig
|
|
sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config
|
|
make CC=musl-gcc V=1
|
|
mv -v busybox busybox64
|
|
xz busybox64
|
|
cp -avt ../../IMG/cpio_x86/ventoy/busybox busybox64.xz
|
|
)
|
|
|
|
(
|
|
cd busybox-$_busybox_ver-32
|
|
make defconfig
|
|
sed -i 's/# CONFIG_STATIC is not set/CONFIG_STATIC=y/' .config
|
|
make CC="$srcdir/musl32/bin/musl-gcc -m32 -Wl,-melf_i386" V=1
|
|
mv -v busybox busybox32
|
|
xz busybox32
|
|
cp -avt ../../IMG/cpio_x86/ventoy/busybox busybox32.xz
|
|
)
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_lunzip() (
|
|
echo ":: lunzip"
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 4.19
|
|
# The bundled lunzip tarball (ver 1.11 Jan 2019) has been independently
|
|
# verified as being identical to the one available on [1].
|
|
#
|
|
# [1] http://download.savannah.gnu.org/releases/lzip/lunzip/
|
|
|
|
cd Ventoy-$pkgver/LZIP
|
|
rm -fv lunzip*{32,64}
|
|
tar -xf lunzip-$_lunzip_ver.tar.gz
|
|
cp -a lunzip-$_lunzip_ver{,-32}
|
|
|
|
(
|
|
cd lunzip-$_lunzip_ver
|
|
./configure CC="$srcdir/dietlibc-$_diet_ver/bin-x86_64/diet gcc" CFLAGS=-Os
|
|
make
|
|
strip --strip-all lunzip
|
|
cp -av lunzip ../lunzip64
|
|
)
|
|
|
|
(
|
|
cd lunzip-$_lunzip_ver-32
|
|
./configure CC="$srcdir/dietlibc-$_diet_ver/bin-i386/diet gcc -m32" CFLAGS=-Os
|
|
make
|
|
strip --strip-all lunzip
|
|
cp -av lunzip ../lunzip32
|
|
)
|
|
|
|
# Undocumented!
|
|
rm -fv lz4cat*
|
|
"$srcdir"/dietlibc-$_diet_ver/bin-x86_64/diet -Os gcc -D_FILE_OFFSET_BITS=64 smallz4cat.c -o lz4cat64
|
|
strip --strip-all lz4cat64
|
|
install -Dvt ../IMG/cpio_x86/ventoy/tool lz4cat64
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_verity() (
|
|
echo ":: verity"
|
|
# Refer "cryptsetup/cryptsetup-build.txt"
|
|
# Needed for *experimental* FydeOS/CloudReady support.
|
|
|
|
cd Ventoy-$pkgver/cryptsetup
|
|
tar -xf "$srcdir"/cryptsetup-$_crypt_ver.tar.xz
|
|
cp -a cryptsetup-$_crypt_ver{,-32}
|
|
|
|
(
|
|
rm -v veritysetup64
|
|
cd cryptsetup-$_crypt_ver
|
|
./configure --enable-static --host=x86_64-pc-linux-gnu
|
|
make
|
|
cd src
|
|
gcc -Wall -O2 -o veritysetup veritysetup-utils_crypt.o veritysetup-utils_loop.o veritysetup-utils_tools.o \
|
|
veritysetup-veritysetup.o -lpopt -ldevmapper -lgcrypt -luuid .././lib/.libs/libcryptsetup.a
|
|
strip --strip-all veritysetup
|
|
cp -av veritysetup ../../veritysetup64
|
|
)
|
|
|
|
# Ugh, this needs multilib (lib32-e2fsprogs lib32-popt lib32-libgcrypt) and
|
|
# a 32-bit libdevmapper which doesn't actually exist in the repo. Just use the
|
|
# upstream provided 32-bit binary for now. FIXME
|
|
|
|
# rm -v veritysetup32
|
|
# cd cryptsetup-$_crypt_ver-32
|
|
# CC="gcc -m32" \
|
|
# ./configure --enable-static --host=x86_64-pc-linux-gnu
|
|
# make
|
|
# cd src
|
|
# gcc -m32 -Wall -O2 -o veritysetup veritysetup-utils_crypt.o veritysetup-utils_loop.o veritysetup-utils_tools.o \
|
|
# veritysetup-veritysetup.o -lpopt -ldevmapper -lgcrypt -luuid .././lib/.libs/libcryptsetup.a
|
|
# strip --strip-all veritysetup
|
|
# cp -av veritysetup ../../veritysetup32
|
|
)
|
|
|
|
# IMG/USB
|
|
_build_wimboot() (
|
|
echo ":: wimboot"
|
|
# Refer "wimboot/build.sh"
|
|
cd Ventoy-$pkgver/wimboot/wimboot-$_wimboot_ver/src
|
|
|
|
# Grab the missing *.S files
|
|
cp -av ../../wimboot-$_wimboot_ver.orig/src/*.S .
|
|
sed -i '/^CFLAGS/s/ -Werror//' Makefile
|
|
|
|
# pesign (if installed) appears to make no difference, ignore.
|
|
make wimboot.x86_64 wimboot.i386.efi
|
|
xz wimboot.{x86_64,i386.efi}
|
|
install -Dvt "$srcdir"/Ventoy-$pkgver/INSTALL/ventoy wimboot.{x86_64,i386.efi}.xz
|
|
)
|
|
|
|
_pack_ventoy() (
|
|
echo ":: pack"
|
|
# Refer "INSTALL/ventoy_pack.sh"
|
|
# 3RD PARTY BINARIES ALERT! FIXME
|
|
|
|
cd Ventoy-$pkgver
|
|
local _LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now,-z,pack-relative-relocs"
|
|
|
|
(
|
|
cd IMG
|
|
sed -i '/arm64 #/i exit 0' mkcpio.sh
|
|
install -dv cpio_x86/ventoy/{busybox,tool}
|
|
cp -avt cpio_x86/ventoy/tool cpio_x86.upstream/ventoy/tool/*.sh
|
|
|
|
# 32-bit tiny lz4cat binary FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 5.1
|
|
cp -avt cpio_x86/ventoy/tool cpio_x86.upstream/ventoy/tool/lz4cat
|
|
|
|
# 32-bit busybox ar binary FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 5.2
|
|
cp -avt cpio_x86/ventoy/tool cpio_x86.upstream/ventoy/tool/ar
|
|
|
|
# 32-bit busybox inotifyd binary FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 5.3
|
|
cp -avt cpio_x86/ventoy/tool cpio_x86.upstream/ventoy/tool/inotifyd
|
|
|
|
# 32-bit busybox ash binary FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 5.4
|
|
cp -avt cpio_x86/ventoy/busybox cpio_x86.upstream/ventoy/busybox/ash
|
|
|
|
# 64-bit busybox ash binary FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 4.18
|
|
# For some unknown reason this is the only binary built with uclibc.
|
|
# Please see: https://github.com/ventoy/Ventoy/issues/2183
|
|
cp -avt cpio_x86/ventoy/busybox cpio_x86.upstream/ventoy/busybox/64h
|
|
|
|
# patch for device-mapper kernel modules FIXME
|
|
# Refer "DMPATCH/readme.txt"
|
|
cp -avt cpio_x86/ventoy/tool cpio_x86.upstream/ventoy/tool/dm_patch_*
|
|
|
|
sh mkcpio.sh
|
|
install -Dvm 644 -t ../INSTALL/ventoy ventoy.cpio ventoy_x86.cpio
|
|
|
|
# "IMG/vtloopex" contains pre-compiled binary kernel modules (dm-mod) for
|
|
# stuff like LibreELEC, openwrt, etc. FIXME
|
|
sh mkloopex.sh
|
|
)
|
|
|
|
(
|
|
# "IMG/Unix" contains pre-compiled binary kernel modules (geom_ventoy) for
|
|
# various BSD's, FreeBSD, etc. FIXME
|
|
cd Unix
|
|
sh pack_unix.sh
|
|
)
|
|
|
|
(
|
|
# HOST
|
|
cd LinuxGUI
|
|
sed -i '/dos2unix/d' language.sh
|
|
sh language.sh
|
|
|
|
mkdir -pv ../INSTALL/tool/x86_64
|
|
|
|
sed -e '/^build.*i386/d;/^build.*aarch64/d;/^build.*mips/d;/^build.*gtk2/d;/^export/d' \
|
|
-e "/\$XXLIB/a \ $_LDFLAGS \\\\" \
|
|
-e "/VTOY_GUI/s/$/ $_LDFLAGS/" -i.bak build.sh build_gtk.sh
|
|
sh build.sh
|
|
sh build_gtk.sh
|
|
|
|
sed -e '/^if.*CentOS8/,+6d;/^build.*aarch64$/d;/^build.*mips64el$/d' \
|
|
-e '/QT_INC.*gcc_64/a \ QT_INC_PATH="/usr/include/qt"' \
|
|
-e '/QT_LIB.*gcc_64/a \ QT_LIB_PATH="/usr/lib"' \
|
|
-e "/LFLAGS.*PATH\"/a \ LFLAGS+=\" $_LDFLAGS\"" -i.bak build_qt.sh
|
|
sh build_qt.sh
|
|
)
|
|
|
|
(
|
|
# HOST
|
|
cd Plugson
|
|
sed -e '/^build.*i386/d;/^build.*aarch64/d;/^build.*mips/d' \
|
|
-e "/\$XXLIB/a \ $_LDFLAGS \\\\" -i.bak build.sh
|
|
sh build.sh
|
|
sh pack.sh
|
|
)
|
|
|
|
(
|
|
# HOST
|
|
# Upstream builds small and static here, but this is a "host" binary so we
|
|
# don't really need that. A "normal" GCC binary would do. FIXME
|
|
cd Vlnk
|
|
local _SRCS=(src/crc32.c src/main_linux.c src/vlnk.c)
|
|
|
|
musl-gcc -Os -static -D_FILE_OFFSET_BITS=64 "${_SRCS[@]}" -Isrc -o vlnk
|
|
strip --strip-all vlnk
|
|
install -Dvt ../INSTALL/tool/x86_64 vlnk
|
|
|
|
sh pack.sh
|
|
)
|
|
|
|
(
|
|
cd EfiISO
|
|
sed -i 's/-P/-publisher/' mkefiiso.sh
|
|
sh mkefiiso.sh
|
|
)
|
|
|
|
# Binary EFI Secure Boot stuff FIXME
|
|
# These files are taken from various projects. "?" denotes unverified/unknown origin
|
|
|
|
local _efi_files=(
|
|
BOOTIA32.EFI # shim 32-bit ver 15.6 # SUISBD [1] based on Fedora
|
|
BOOTX64.EFI # shim 64-bit ver 15.7 # ? SUSE Linux Enterprise ?
|
|
grub.efi # preloader 64-bit # SUISBD [1]
|
|
grubia32.efi # preloader 32-bit # SUISBD [2]
|
|
mmia32.efi # MokManager 32-bit ver 15.6 # same length as SUISBD [1] (but 261 bytes differ) based on Fedora
|
|
MokManager.efi # MokManager 64-bit ver 15.7 # ? SUSE Linux Enterprise ?
|
|
)
|
|
|
|
# This file is also from SUISBD
|
|
install -vm 644 INSTALL.upstream/tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer INSTALL/tool
|
|
(
|
|
cd INSTALL.upstream/EFI/BOOT
|
|
install -Dvt "$srcdir"/Ventoy-$pkgver/INSTALL/EFI/BOOT "${_efi_files[@]}"
|
|
)
|
|
# [1] https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases/download/3-4/Super-UEFIinSecureBoot-Disk_minimal_v3-4.zip
|
|
# [2] https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases/download/3-3/Super-UEFIinSecureBoot-Disk_minimal_v3-3.zip
|
|
|
|
# More EFI stuff. Should be buildable with EDK2 FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 4.17
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/iso9660_{x64,ia32}.efi
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/udf_{x64,ia32}.efi
|
|
|
|
# Windows stuff. Apparently buildable with Microsoft Visual Studio FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 4.4
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/vtoyjump{64,32}.exe
|
|
|
|
# 3rd party Windows stuff FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section(s) 5.12 and 5.8
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/7z
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/imdisk
|
|
|
|
# Unknown Windows crap. Config data for Windows Boot Manager? Where from? FIXME
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/common_{bcd,bootmgr}.xz
|
|
|
|
# From syslinux. Could we use our own repo version? FIXME
|
|
# Refer "DOC/BuildVentoyFromSource.txt" Section 5.9
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/memdisk
|
|
|
|
# DragonFly BSD stuff FIXME
|
|
# Refer "Unix/ventoy_unix/DragonFly/mkinitrd.sh"
|
|
cp -avt INSTALL/ventoy INSTALL.upstream/ventoy/dragonfly.mfs.xz
|
|
)
|
|
|
|
_create_img() (
|
|
echo ":: image"
|
|
# Refer "INSTALL/ventoy_pack.sh"
|
|
mkdir -pv Ventoy-$pkgver/INSTALL
|
|
cd Ventoy-$pkgver/INSTALL
|
|
|
|
# Create a 256M Ventoy disk image, partition/format a 32M ESP
|
|
dd if=/dev/zero of=img.bin bs=1M count=256 status=none
|
|
echo -e 'size=223M, type=7, bootable\n size=32M, type=U\n' | sfdisk img.bin
|
|
guestfish add img.bin : run : mkfs vfat /dev/sda2 label:VTOYEFI
|
|
|
|
# Create a 64M "scratch" disk image / ext4 partition
|
|
dd if=/dev/zero of=scratch.bin bs=1M count=64 status=none
|
|
echo -e 'size=+\n' | sfdisk scratch.bin
|
|
guestfish add scratch.bin : run : mkfs ext4 /dev/sda1 label:SCRATCH
|
|
|
|
# Copy our GRUB stuff into the scratch disk
|
|
tar -czvf - -C "$srcdir"/Ventoy-$pkgver/INSTALL grub/i386-pc |
|
|
guestfish add scratch.bin : run : mount /dev/sda1 / : tar-in - / compress:gzip
|
|
tar -czvf - -C "$srcdir"/Ventoy-$pkgver/GRUB2 INSTALL |
|
|
guestfish add scratch.bin : run : mount /dev/sda1 / : tar-in - / compress:gzip
|
|
|
|
# Do the GRUB install business
|
|
#
|
|
# XXX (ab)using `guestfish debug sh "args ..."' like this is a dirty hack. FIXME. Pls see:
|
|
# https://www.libguestfs.org/guestfs-faq.1.html#whats-the-difference-between-guestfish-and-virt-rescue
|
|
#
|
|
# We should be using `guestfish sh command' or maybe `guestfish command "args ..."' but we
|
|
# cannot do so because we don't have a proper guest filesystem.
|
|
# https://www.libguestfs.org/guestfish.1.html#sh
|
|
# https://www.libguestfs.org/guestfish.1.html#command
|
|
#
|
|
# Possible alternative for a guest image -> Arch Boxes basic qcow2...or maybe we just don't
|
|
# use guestfish here at all and instead use something like [1] with an Arch ISO.
|
|
#
|
|
# [1] https://gitlab.archlinux.org/archlinux/ci-scripts/-/blob/master/scripts/build_in_archiso_vm.sh
|
|
|
|
guestfish add img.bin : add scratch.bin : run : mount /dev/sdb1 / : debug sh \
|
|
"/sysroot/INSTALL/sbin/grub-bios-setup --skip-fs-probe --directory=/sysroot/grub/i386-pc /dev/sda"
|
|
|
|
(
|
|
cd grub
|
|
tar -czf help.tar.gz help
|
|
rm -rf help
|
|
|
|
vtlangtitle=$(grep VTLANG_LANGUAGE_NAME menu/zh_CN.json | awk -F\" '{print $4}')
|
|
{
|
|
echo "menuentry \"zh_CN - $vtlangtitle\" --class=menu_lang_item --class=debug_menu_lang --class=F5tool {"
|
|
echo " vt_load_menu_lang zh_CN"
|
|
echo "}"
|
|
} >> menulang.cfg
|
|
|
|
# shellcheck disable=SC2010 # FIXME
|
|
ls -1 menu | grep -v 'zh_CN' | sort | while read -r vtlang; do
|
|
vtlangname=${vtlang%.*}
|
|
vtlangtitle=$(grep VTLANG_LANGUAGE_NAME menu/"$vtlang" | awk -F\" '{print $4}')
|
|
{
|
|
echo "menuentry \"$vtlangname - $vtlangtitle\" --class=menu_lang_item --class=debug_menu_lang --class=F5tool {"
|
|
echo " vt_load_menu_lang $vtlangname"
|
|
echo "}"
|
|
} >> menulang.cfg
|
|
done
|
|
|
|
{
|
|
echo "menuentry \"\$VTLANG_RETURN_PREVIOUS\" --class=vtoyret VTOY_RET {"
|
|
echo " echo \"Return ...\""
|
|
echo "}"
|
|
} >> menulang.cfg
|
|
|
|
tar -czf menu.tar.gz menu
|
|
rm -rf menu
|
|
|
|
rm -fv i386-pc/*.img
|
|
)
|
|
|
|
# Apparently grub.cfg needs to be located at the front of the partition, copy it first..
|
|
guestfish add img.bin : run : mount /dev/sda2 / : mkdir /grub : copy-in grub/grub.cfg /grub
|
|
|
|
# ..and now the rest
|
|
tar -czvf - --exclude=grub.cfg -C grub . |
|
|
guestfish add img.bin : run : mount /dev/sda2 / : tar-in - /grub compress:gzip
|
|
tar -czvf - ventoy EFI |
|
|
guestfish add img.bin : run : mount /dev/sda2 / : tar-in - / compress:gzip
|
|
guestfish add img.bin : run : mount /dev/sda2 / : copy-in tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer /
|
|
|
|
# Just *WTF* is going on here? FIXME
|
|
dd status=none bs=1024 count=16 if=/dev/zero of=/tmp/mount.exfat-fuse_aarch64
|
|
guestfish add img.bin : run : mount /dev/sda2 / : mkdir /tool : copy-in /tmp/mount.exfat-fuse_aarch64 /tool
|
|
|
|
# Prepare the final "payload" dir
|
|
curver=$(grep 'set.*VENTOY_VERSION=' ./grub/grub.cfg | awk -F'"' '{print $2}')
|
|
tmpdir=ventoy-$curver
|
|
|
|
mkdir -pv "$tmpdir"/{boot,ventoy}
|
|
echo "$curver" > "$tmpdir"/ventoy/version
|
|
dd if=img.bin of="$tmpdir"/boot/boot.img bs=1 count=512 status=none
|
|
dd if=img.bin of="$tmpdir"/boot/core.img bs=512 count=2047 skip=1 status=none
|
|
xz --check=crc32 "$tmpdir"/boot/core.img
|
|
|
|
cp -avt "$tmpdir" tool ../INSTALL.upstream/plugin ../LinuxGUI/WebUI
|
|
sed -i 's/.*SCRIPT_DEL_THIS \(.*\)/\1/g' "$tmpdir"/WebUI/index.html
|
|
|
|
cp -avt "$tmpdir"/tool \
|
|
../INSTALL.upstream/tool/{distro_gui_type.json,VentoyGTK.glade,ventoy_lib.sh,VentoyWorker.sh}
|
|
|
|
cp -avt "$tmpdir" VentoyGUI.x86_64 VentoyVlnk.sh \
|
|
../INSTALL.upstream/{Ventoy2Disk,VentoyWeb,VentoyPlugson,CreatePersistentImg,ExtendPersistentImg}.sh
|
|
|
|
# 32MB ESP image
|
|
dd status=none if=img.bin of="$tmpdir"/ventoy/ventoy.disk.img bs=512 count=65536 skip=458752
|
|
xz --check=crc32 "$tmpdir"/ventoy/ventoy.disk.img
|
|
|
|
chmod -v +x "$tmpdir"{,/tool}/*.sh
|
|
cp -avt "$tmpdir"/tool ../LANGUAGES/languages.json
|
|
|
|
# Fix ups
|
|
sed -e 's|./log.txt|/var/log/ventoy.log|' \
|
|
-e "/^vtdebug()/a \ test -w /var/log && \\\\" -i "$tmpdir"/{Ventoy2Disk,tool/ventoy_lib}.sh
|
|
|
|
sed -i 's|log.txt|/var/log/ventoy.log|' "$tmpdir/"WebUI/static/js/languages.js \
|
|
"$tmpdir"/tool/{languages.json,VentoyWorker.sh} "$tmpdir"/VentoyWeb.sh
|
|
|
|
sed -e '/^chmod/d' -e '/^echo.*decompress/d' \
|
|
-e '/^echo.*2D/s|^|test -w /var/log \&\& |' \
|
|
-e '/^date/s|^|test -w /var/log \&\& |' -i "$tmpdir"/Ventoy2Disk.sh
|
|
|
|
sed -e 's|#!/bin/sh|#!/usr/bin/env bash|' -i "$tmpdir"/tool/{VentoyWorker.sh,ventoy_lib.sh}
|
|
)
|
|
|
|
build() {
|
|
# Workaround for abovementioned pacman regression.
|
|
unset CPPFLAGS CFLAGS DEBUG_CFLAGS CXXFLAGS DEBUG_CXXFLAGS LDFLAGS LTOFLAGS RUSTFLAGS DEBUG_RUSTFLAGS
|
|
|
|
_build_grub
|
|
_build_ipxe
|
|
_build_edk2
|
|
_build_dietlibc
|
|
_build_musl32
|
|
_build_vtoytool
|
|
_build_vtoycli
|
|
_build_fuseiso
|
|
_build_exfat
|
|
_build_unsquashfs
|
|
_build_vblade
|
|
_build_dmsetup
|
|
_build_zstdcat
|
|
_build_xzminidec
|
|
_build_busybox
|
|
_build_lunzip
|
|
_build_verity
|
|
_build_wimboot
|
|
_pack_ventoy
|
|
_create_img
|
|
}
|
|
|
|
package() {
|
|
mkdir -pv "$pkgdir"/{opt,usr/{bin,share/{applications,pixmaps}}}
|
|
|
|
cp -arv Ventoy-$pkgver/INSTALL/ventoy-$pkgver "$pkgdir"/opt/ventoy
|
|
|
|
# Everything below this line -> Credits: https://aur.archlinux.org/packages/ventoy-bin
|
|
tee "$pkgdir"/usr/bin/ventoy > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
cd /opt/ventoy || exit 1
|
|
exec ./Ventoy2Disk.sh "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/bin/ventoygui > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
cd /opt/ventoy || exit 1
|
|
./VentoyGUI.x86_64 "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/bin/ventoyplugson > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
cd /opt/ventoy || exit 1
|
|
exec ./VentoyPlugson.sh "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/bin/ventoyweb > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
cd /opt/ventoy || exit 1
|
|
exec ./VentoyWeb.sh "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/bin/ventoy-persistent > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
exec /opt/ventoy/CreatePersistentImg.sh "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/bin/ventoy-extend-persistent > /dev/null << _EOF_
|
|
#!/bin/sh
|
|
|
|
exec /opt/ventoy/ExtendPersistentImg.sh "\$@"
|
|
_EOF_
|
|
|
|
tee "$pkgdir"/usr/share/applications/ventoy.desktop > /dev/null << _EOF_
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Icon=ventoy
|
|
Name=Ventoy
|
|
Exec=ventoygui --xdg
|
|
Terminal=false
|
|
Hidden=false
|
|
Categories=Utility
|
|
Comment=Ventoy2Disk GUI
|
|
_EOF_
|
|
|
|
chmod -v 755 "$pkgdir"/usr/bin/*
|
|
cp -av Ventoy-$pkgver/LinuxGUI/WebUI/static/img/VentoyLogo.png "$pkgdir"/usr/share/pixmaps/ventoy.png
|
|
}
|