docs/BUNDLE-X86-LIBS.md
The script box64-bundle-x86-libs.sh is provided to download, extract, and re-bundle x86_64 and x86 libraries for use with Box64/Box32 and Box86. This bundle improves Box emulation by providing libraries that are not wrapped yet. In a perfect world, the application or game would already provide these libraries but that is not always the case. The bundle archive provides a much smaller size compared to using a full root file system of an operating system.
Install required dependencies for the bundle script.
sudo pacman -S -y -u
sudo pacman -S binutils coreutils curl rpm-tools tar zstd
sudo apt-get update
sudo apt-get install binutils coreutils curl rpm2cpio tar zstd
sudo dnf install binutils coreutils curl tar zstd
Run box64-bundle-x86-libs.sh. This will create two archives:
box64-bundle-x86-libs.tar.gz = All of the extracted library files in the directory structure of usr/lib/box64-i386-linux-gnu and usr/lib/box64-x86_64-linux-gnu.box64-bundle-x86-pkgs.tar.gz = All of the Linux distribution packages used to extract the library files. This is only created for preservation purposes and is otherwise unused.Extract the library archive. Box will automatically search these paths for library files to emulate.
sudo tar --extract --no-same-owner --file box64-bundle-x86-libs.tar.gz --directory /
Add new packages to the box64-bundle-x86-libs.csv file in the format of <PACKAGE_URL>,<SHA256_CHECKSUM>.
Supported packages:
Preference of operating system packages that provide a library:
Some essential libraries will always be emulated and should be bundled. The full list can be found in the in the core source code.
Some essential library files will never be emulated (only natively wrapped instead) and should not be bundled. This includes glibc, OpenGL, Vulkan, and X11/Xorg libraries. The full list can be found in the library source code. Other libraries with lots of dependencies, such as GTK, require all dependencies to be installed for emulation to work. This becomes dependency hell and should be avoided.
For finding package names that contian a specific library file, use the pkgs.org website. Otherwise, use one of these package manager commands on a x86_64 Linux distribution:
apt-file <LIBRARY_FILE>dnf provides "*/<LIBRARY_FILE>*"xbps-query --repository --ownedby <LIBRARY_FILE>Once the package name is found, find the exact URL for downloading it.
<VERSION>-<RELEASE>-x86_64.eopkg" and "32bit-<VERSION>-<RELEASE>-x86_64.eopkg" packages.
<MAJOR>.<MINOR>" version directory first. Then explore "AppStream" and "BaseOS". The "x86_64" repository will contain both "x86_64.rpm" and "i686.rpm" packages.
Download the package and then find the checksum with the sha256sum command.
Major Linux distributions such as AlmaLinux and Debian provide archives of packages. Most rolling distributions such as Solus and Void Linux do not (one exception is Arch Linux which has the Arch Linux Archive (ALA)). In those cases, use the Internet Archive to archive any rolling release package used by Box by using the "Save Page Now" feature. If the error "Save Page Now browser crashed" appears, it can be safely ignored. The archive will still have been saved.