create_ubuntu_bootstraps.sh 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #!/usr/bin/env bash
  2. ## A script for creating Ubuntu bootstraps for Wine compilation.
  3. ##
  4. ## debootstrap and perl are required
  5. ## root rights are required
  6. ##
  7. ## About 5.5 GB of free space is required
  8. ## And additional 2.5 GB is required for Wine compilation
  9. if [ "$EUID" != 0 ]; then
  10. echo "This script requires root rights!"
  11. exit 1
  12. fi
  13. if ! command -v debootstrap 1>/dev/null || ! command -v perl 1>/dev/null; then
  14. echo "Please install debootstrap and perl and run the script again"
  15. exit 1
  16. fi
  17. # Keep in mind that although you can choose any version of Ubuntu/Debian
  18. # here, but this script has only been tested with Ubuntu 18.04 Bionic
  19. export CHROOT_DISTRO="bionic"
  20. export CHROOT_MIRROR="https://ftp.uni-stuttgart.de/ubuntu/"
  21. # Set your preferred path for storing chroots
  22. # Also don't forget to change the path to the chroots in the build_wine.sh
  23. # script, if you are going to use it
  24. export MAINDIR=/opt/chroots
  25. export CHROOT_X64="${MAINDIR}"/${CHROOT_DISTRO}64_chroot
  26. export CHROOT_X32="${MAINDIR}"/${CHROOT_DISTRO}32_chroot
  27. prepare_chroot () {
  28. if [ "$1" = "32" ]; then
  29. CHROOT_PATH="${CHROOT_X32}"
  30. else
  31. CHROOT_PATH="${CHROOT_X64}"
  32. fi
  33. echo "Unmount chroot directories. Just in case."
  34. umount -Rl "${CHROOT_PATH}"
  35. echo "Mount directories for chroot"
  36. mount --bind "${CHROOT_PATH}" "${CHROOT_PATH}"
  37. mount -t proc /proc "${CHROOT_PATH}"/proc
  38. mount --bind /sys "${CHROOT_PATH}"/sys
  39. mount --make-rslave "${CHROOT_PATH}"/sys
  40. mount --bind /dev "${CHROOT_PATH}"/dev
  41. mount --bind /dev/pts "${CHROOT_PATH}"/dev/pts
  42. mount --bind /dev/shm "${CHROOT_PATH}"/dev/shm
  43. mount --make-rslave "${CHROOT_PATH}"/dev
  44. rm -f "${CHROOT_PATH}"/etc/resolv.conf
  45. cp /etc/resolv.conf "${CHROOT_PATH}"/etc/resolv.conf
  46. echo "Chrooting into ${CHROOT_PATH}"
  47. chroot "${CHROOT_PATH}" /usr/bin/env LANG=en_US.UTF-8 TERM=xterm PATH="/bin:/sbin:/usr/bin:/usr/sbin" /opt/prepare_chroot.sh
  48. echo "Unmount chroot directories"
  49. umount -l "${CHROOT_PATH}"
  50. umount "${CHROOT_PATH}"/proc
  51. umount "${CHROOT_PATH}"/sys
  52. umount "${CHROOT_PATH}"/dev/pts
  53. umount "${CHROOT_PATH}"/dev/shm
  54. umount "${CHROOT_PATH}"/dev
  55. }
  56. create_build_scripts () {
  57. sdl2_version="2.26.4"
  58. faudio_version="23.03"
  59. vulkan_headers_version="1.4.304"
  60. vulkan_loader_version="1.4.304"
  61. spirv_headers_version="sdk-1.3.239.0"
  62. libpcap_version="1.10.4"
  63. libxkbcommon_version="1.6.0"
  64. python3_version="3.12.4"
  65. meson_version="1.3.2"
  66. cmake_version="3.30.3"
  67. ccache_version="4.10.2"
  68. libglvnd_version="1.7.0"
  69. cat <<EOF > "${MAINDIR}"/prepare_chroot.sh
  70. #!/bin/bash
  71. apt-get update
  72. apt-get -y install nano
  73. apt-get -y install locales
  74. echo ru_RU.UTF_8 UTF-8 >> /etc/locale.gen
  75. echo en_US.UTF_8 UTF-8 >> /etc/locale.gen
  76. locale-gen
  77. echo deb '${CHROOT_MIRROR}' ${CHROOT_DISTRO} main universe > /etc/apt/sources.list
  78. echo deb '${CHROOT_MIRROR}' ${CHROOT_DISTRO}-updates main universe >> /etc/apt/sources.list
  79. echo deb '${CHROOT_MIRROR}' ${CHROOT_DISTRO}-security main universe >> /etc/apt/sources.list
  80. echo deb-src '${CHROOT_MIRROR}' ${CHROOT_DISTRO} main universe >> /etc/apt/sources.list
  81. echo deb-src '${CHROOT_MIRROR}' ${CHROOT_DISTRO}-updates main universe >> /etc/apt/sources.list
  82. echo deb-src '${CHROOT_MIRROR}' ${CHROOT_DISTRO}-security main universe >> /etc/apt/sources.list
  83. apt-get update
  84. apt-get -y upgrade
  85. apt-get -y dist-upgrade
  86. apt-get -y install software-properties-common
  87. add-apt-repository -y ppa:ubuntu-toolchain-r/test
  88. add-apt-repository -y ppa:cybermax-dexter/mingw-w64-backport
  89. apt-get update
  90. apt-get -y build-dep wine-development libsdl2 libvulkan1 python3
  91. apt-get -y install ccache gcc-11 g++-11 wget git gcc-mingw-w64 g++-mingw-w64 ninja-build
  92. apt-get -y install libxpresent-dev libjxr-dev libusb-1.0-0-dev libgcrypt20-dev libpulse-dev libudev-dev libsane-dev libv4l-dev libkrb5-dev libgphoto2-dev liblcms2-dev libcapi20-dev
  93. apt-get -y install libjpeg62-dev samba-dev
  94. apt-get -y install libpcsclite-dev libcups2-dev
  95. apt-get -y install python3-pip libxcb-xkb-dev libbz2-dev texinfo curl
  96. apt-get -y purge libvulkan-dev libvulkan1 libsdl2-dev libsdl2-2.0-0 libpcap0.8-dev libpcap0.8 --purge --autoremove
  97. apt-get -y purge *gstreamer* --purge --autoremove
  98. apt-get -y clean
  99. apt-get -y autoclean
  100. export PATH="/usr/local/bin:\${PATH}"
  101. mkdir /opt/build_libs
  102. cd /opt/build_libs
  103. wget -O sdl.tar.gz https://www.libsdl.org/release/SDL2-${sdl2_version}.tar.gz
  104. wget -O faudio.tar.gz https://github.com/FNA-XNA/FAudio/archive/${faudio_version}.tar.gz
  105. wget -O vulkan-loader.tar.gz https://github.com/KhronosGroup/Vulkan-Loader/archive/v${vulkan_loader_version}.tar.gz
  106. wget -O vulkan-headers.tar.gz https://github.com/KhronosGroup/Vulkan-Headers/archive/v${vulkan_headers_version}.tar.gz
  107. wget -O spirv-headers.tar.gz https://github.com/KhronosGroup/SPIRV-Headers/archive/${spirv_headers_version}.tar.gz
  108. wget -O libpcap.tar.gz https://www.tcpdump.org/release/libpcap-${libpcap_version}.tar.gz
  109. wget -O libxkbcommon.tar.xz https://xkbcommon.org/download/libxkbcommon-${libxkbcommon_version}.tar.xz
  110. wget -O python3.tar.gz https://www.python.org/ftp/python/${python3_version}/Python-${python3_version}.tgz
  111. wget -O meson.tar.gz https://github.com/mesonbuild/meson/releases/download/${meson_version}/meson-${meson_version}.tar.gz
  112. wget -O cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}.tar.gz
  113. wget -O ccache.tar.gz https://github.com/ccache/ccache/releases/download/v${ccache_version}/ccache-${ccache_version}.tar.gz
  114. wget -O libglvnd.tar.gz https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${libglvnd_version}/libglvnd-v${libglvnd_version}.tar.gz
  115. wget -O /usr/include/linux/ntsync.h https://raw.githubusercontent.com/zen-kernel/zen-kernel/refs/heads/6.13/main/include/uapi/linux/ntsync.h
  116. wget -O /usr/include/linux/userfaultfd.h https://raw.githubusercontent.com/zen-kernel/zen-kernel/refs/heads/6.13/main/include/uapi/linux/userfaultfd.h
  117. if [ -d /usr/lib/i386-linux-gnu ]; then wget -O wine.deb https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/main/binary-i386/wine-stable_4.0.3~bionic_i386.deb; fi
  118. if [ -d /usr/lib/x86_64-linux-gnu ]; then wget -O wine.deb https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/main/binary-amd64/wine-stable_4.0.3~bionic_amd64.deb; fi
  119. git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git -b 1.22
  120. wget https://raw.githubusercontent.com/Kron4ek/Wine-Builds/refs/heads/master/mingw-w64-build
  121. tar xf sdl.tar.gz
  122. tar xf faudio.tar.gz
  123. tar xf vulkan-loader.tar.gz
  124. tar xf vulkan-headers.tar.gz
  125. tar xf spirv-headers.tar.gz
  126. tar xf libpcap.tar.gz
  127. tar xf libxkbcommon.tar.xz
  128. tar xf python3.tar.gz
  129. tar xf cmake.tar.gz
  130. tar xf ccache.tar.gz
  131. tar xf libglvnd.tar.gz
  132. tar xf meson.tar.gz -C /usr/local
  133. ln -s /usr/local/meson-${meson_version}/meson.py /usr/local/bin/meson
  134. bash mingw-w64-build x86_64
  135. bash mingw-w64-build i686
  136. export CC=gcc-11
  137. export CXX=g++-11
  138. export CFLAGS="-O2"
  139. export CXXFLAGS="-O2"
  140. cd cmake-${cmake_version}
  141. ./bootstrap --parallel=$(nproc)
  142. make -j$(nproc) install
  143. cd ../ && mkdir build && cd build
  144. cmake ../ccache-${ccache_version} && make -j$(nproc) && make install
  145. cd ../ && rm -r build && mkdir build && cd build
  146. cmake ../SDL2-${sdl2_version} && make -j$(nproc) && make install
  147. cd ../ && rm -r build && mkdir build && cd build
  148. cmake ../FAudio-${faudio_version} && make -j$(nproc) && make install
  149. cd ../ && rm -r build && mkdir build && cd build
  150. cmake ../Vulkan-Headers-${vulkan_headers_version} && make -j$(nproc) && make install
  151. cd ../ && rm -r build && mkdir build && cd build
  152. cmake ../Vulkan-Loader-${vulkan_loader_version}
  153. make -j$(nproc)
  154. make install
  155. cd ../ && rm -r build && mkdir build && cd build
  156. cmake ../SPIRV-Headers-${spirv_headers_version} && make -j$(nproc) && make install
  157. cd ../ && dpkg -x wine.deb .
  158. cp opt/wine-stable/bin/widl /usr/bin
  159. rm -r build && mkdir build && cd build
  160. ../libpcap-${libpcap_version}/configure && make -j$(nproc) install
  161. cd ../ && rm -r build && mkdir build && cd build
  162. ../Python-${python3_version}/configure --enable-optimizations
  163. make -j$(nproc)
  164. make -j$(nproc) install
  165. pip3 install setuptools
  166. cd ../libxkbcommon-${libxkbcommon_version}
  167. meson setup build -Denable-docs=false
  168. meson compile -C build
  169. meson install -C build
  170. cd ../gstreamer
  171. meson setup build
  172. ninja -C build
  173. ninja -C build install
  174. cd ../libglvnd-v${libglvnd_version}
  175. meson setup build
  176. meson compile -C build
  177. meson install -C build
  178. cd /opt && rm -r /opt/build_libs
  179. EOF
  180. chmod +x "${MAINDIR}"/prepare_chroot.sh
  181. cp "${MAINDIR}"/prepare_chroot.sh "${CHROOT_X32}"/opt
  182. mv "${MAINDIR}"/prepare_chroot.sh "${CHROOT_X64}"/opt
  183. }
  184. mkdir -p "${MAINDIR}"
  185. debootstrap --arch amd64 $CHROOT_DISTRO "${CHROOT_X64}" $CHROOT_MIRROR
  186. debootstrap --arch i386 $CHROOT_DISTRO "${CHROOT_X32}" $CHROOT_MIRROR
  187. create_build_scripts
  188. prepare_chroot 32
  189. prepare_chroot 64
  190. rm "${CHROOT_X64}"/opt/prepare_chroot.sh
  191. rm "${CHROOT_X32}"/opt/prepare_chroot.sh
  192. clear
  193. echo "Done"