Compile Wine in Container (Distrobox)

Zhenbo Li September 06, 2025

Preface

A usable Wine build needs shared WoW64, and to compile it, multi-lib dependencies are required

As a Fedora Silverblue user, the conflict between i686 and x86_64 libs happens very frequently, and rpm-ostree install will be blocked for weeks. As suggested by Wine Wiki, I'm trying to compile wine within Distrobox

Create Distrobox Image

rpm-ostree install distrobox
# Fedora 42: distrobox: 1.8.1.2

distrobox create --name wine --init --image fedora:42
distrobox enter wine

By default, distrobox shows a lovely emoji 📦

Install Dependency

sudo dnf builddep wine.i686 wine.x86_64
# Some packages are coved by builddep, but somes are not. There are overlaps, definitely

sudo dnf install libgcc.i686 glibc-devel.i686 glibc.i686
sudo dnf install libX11-devel libX11-devel.i686 libXcomposite-devel libXcomposite-devel.i686 libXcomposite-devel.x86_64 libxcrypt-compat
sudo dnf install libxcrypt-compat.i686 libxcrypt-compat.x86_64 libXcursor-devel                           libXcursor-devel.i686 libXcursor-devel.x86_64 libXext-devel libXext-devel.i686 libXext-devel.x86_64 libXfixes-devel.i686                           libXfixes-devel.x86_64 libXfixes.i686 libXi-devel                           libXi-devel.i686 libXi-devel.x86_64 libXinerama-devel libXinerama-devel.x86_64                           libxml2-devel.i686 libXmu-devel libXrandr-devel                           libXrandr-devel.i686 libXrandr-devel.x86_64 libXrender-devel                           libXrender-devel.i686 libXrender-devel.x86_64 freetype-devel.x86_64                           freetype-devel.i686 fontforge.x86_64 fontforge.i686

sudo dnf install mesa-libGL-devel.i686 mesa-libGL-devel.x86_64 gnutls-devel.i686 gnutls-devel.x86_64
sudo dnf install pulseaudio-libs-devel.i686 pulseaudio-libs-devel.x86_64

Build Wine 64

According to Wine Wiki, I need to build the 64-bit version first.

export WINE_INSTALL_PATH="/home/lizhenbo/apps/wine" # make install as non-root later

mkdir -p ~/src/wine64 && cd ~/src/wine64

PKG_CONFIG_PATH=/usr/lib64/pkgconfig    \
    CFLAGS="-Og" CROSSCFLAGS="-Og" CC="sccache gcc" \
    i386_CC="sccache i686-w64-mingw32-gcc" x86_64_CC="sccache x86_64-w64-mingw32-gcc" \
    ~/src/wine/configure --enable-win64 --prefix=$WINE_INSTALL_PATH

make -j$(nproc)

# Just taking one second to show off my 16-core CPU and 64 GB of RAM

Outside the container, I can use wine64 directly. However, almost no Windows binaries can be executed by this 64-bit only wine.

./wine notepad
./wine "/var/home/lizhenbo/.wine/drive_c/Program Files/7-Zip/7zFM.exe"

Build Wine 32

mkdir -p ~/src/wine32 && cd ~/src/wine32

PKG_CONFIG_PATH=/usr/lib/pkgconfig    \
    CFLAGS="-Og" CROSSCFLAGS="-Og" CC="sccache gcc -m32" \
    ~/src/wine/configure --with-wine64=../wine64 --prefix=$WINE_INSTALL_PATH

make -j$(nproc)

# Configuration
./wine winecfg # Graphics -> Screen resolution -> 192 dpi
./wine ~/Downloads/"setup_slay_the_spire_2020-12-15-8735c9fe3cc2280b76aa3ec47c953352a7df1f65_(64bit)_(43443).exe"
./wine ~/.wine/drive_c/"GOG Games/Slay the Spire"/SlayTheSpire.exe

It worked well

Install Wine

According to Wine Wiki, I should install 32-bit first.

cd ~/src/wine32
make install -j$(nproc)
cd ~/src/wine64
make install -j$(nproc)

which wine
~/apps/wine/bin/wine

Quicknote about LSP

Some of Wine's header files are generated by Wine IDL, so I need to compile Wine once under the source code directory.

sudo dnf install bear

cd ~/src/wine

PKG_CONFIG_PATH=/usr/lib64/pkgconfig    \
    CFLAGS="-Og" CROSSCFLAGS="-Og" CC="sccache gcc" \
    i386_CC="sccache i686-w64-mingw32-gcc" x86_64_CC="sccache x86_64-w64-mingw32-gcc" \
    ./configure --enable-win64

bear -- make -j$(nproc)

Bartek Kryza has a great article about compile_commands.json