Automate installation of DXVK, D9VK + Wine/Wine Staging & update GPU drivers + PlayonLinux wineprefixes (Debian/Ubuntu/Mint/Arch Linux/Manjaro)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

432 lines
18 KiB

1 year ago
1 year ago
5 years ago
5 years ago
5 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. # Wine/Wine Staging, DXVK, DXVK NVAPI, VKD3D Proton package bundle builder & auto-installer
  2. ![](https://i.imgur.com/5WCPioZ.png)
  3. Boost up your Wine experience with a taste of DXVK and automate installation of [DXVK](https://github.com/doitsujin/dxvk), [VKD3D Proton](https://github.com/HansKristian-Work/vkd3d-proton), [DXVK NVAPI](https://github.com/jp7677/dxvk-nvapi) & [Wine](https://www.winehq.org/)/[Wine Staging](https://github.com/wine-staging/wine-staging/) on Debian/Ubuntu/Mint/Arch Linux/Manjaro. Additionally, update your GPU drivers + PlayonLinux wineprefixes to use the latest Wine & DXVK combination available.
  4. ## About
  5. One-click solution for accessing bleeding-edge Wine/Wine Staging & DXVK packages _system-widely_ on Debian/Ubuntu/Mint and on Arch Linux/Manjaro. Alternatively, you can pick any version of Wine/Wine Staging & DXVK to be used.
  6. ![](https://i.imgur.com/Tqqi7pm.png)
  7. _Wine Staging 3.20, DXVK and winetricks on Debian 9. Normally, no winetricks or DXVK are available, and Wine is set to very old version 1.8.7 on Debian - leaving all the sweet candies out. Not anymore - let's end this misery and give user finally a choice._
  8. ## Motivation
  9. **Accessibility, lower the barrier.** Help people to get their hands on the latest (bleeding-edge) Wine/Wine Staging & DXVK software on major Linux distribution platforms without hassle or headaches.
  10. There is not an easy way to auto-install the latest Wine/Wine Staging & DXVK, especially on Debian/Ubuntu/Mint. The newest Wine/Wine Staging is not easily accessible on Debian-based Linux distributions, and DXVK is practically bundled to Lutris or Steam gaming platform as a form of Proton. However, not all Windows programs, like MS Office or Adobe Photoshop, could run under Linux Steam client: Many Windows programs actually rely on system-wide Wine installation which is why system-wide Wine/Wine Staging & DXVK auto-installation this script offers becomes quite handy.
  11. The solution provided here _is independent from Steam client or any other Wine management platform_. The latest Wine/Wine Staging & DXVK bundle will be accessible system-widely, not just via Steam, Lutris or PlayOnLinux. Provided PlayOnLinux prefix update is optional, as well.
  12. ----------------
  13. ## Adapt system-wide Wine/DXVK to your Steam Windows games
  14. If you want to easily use Wine/Wine Staging and DXVK with your Steam Windows games on Linux, you may want to check out my helper script [steam-launchoptions](https://github.com/Fincer/steam-launchoptions).
  15. With the helper script, you can set launch options for a single game/selected group of games/all games you have on your Steam account. You can customize the launch options for both Windows and Linux games and clean all existing launch options, too.
  16. ----------------
  17. ## Contents
  18. - **Wine/Wine Staging & DXVK:** Installation script for supported Linux distributions
  19. - **Nvidia drivers:** Installation script for supported Debian-based distributions. Independent script.
  20. - **Winetricks install** Installation script for supported Debian-based distributions. Can be run independently.
  21. - **Patches:** Possibility to use your custom patches with Wine & DXVK
  22. ----------------
  23. ## Requirements
  24. - **Linux Distribution:** Debian/Ubuntu/Mint OR Arch Linux/Manjaro. Variants may be compatible but they are not tested.
  25. - **RAM:** 4096 MB (DXVK build process may fail with less RAM available)
  26. - **Not listed as a hard dependency, but recommended for DXVK**: The latest Nvidia or AMD GPU drivers (Nvidia proprietary drivers // AMDGPU)
  27. - **Time:** it can take between 0.5-2 hours for the script to run. Compiling Wine takes _a lot of time_. You have been warned.
  28. ----------------
  29. ## Why to compile from source?
  30. Latest version of Wine/Wine Staging & DXVK are only available via git as source code which must be compiled before usage. Note that compiling Wine takes a lot of time. Compiling from source has its advantages and disadvantages, some of them listed below.
  31. **Advantages:**
  32. - packages are directly adapted to your system
  33. - packages do not rely on PPAs which may be abandoned in time
  34. - using Git sources provide the latest packages available publicly
  35. **Disadvantages:**
  36. - takes time & CPU processing power
  37. - is unreliable in some cases, the script may break easily due to rapid DXVK development or distro changes
  38. - may break working already-working versions of the packages (use `--no-install` parameter to avoid installation of DXVK & Wine, just as precaution)
  39. ----------------
  40. ## Script usage
  41. For short help instructions, run:
  42. ```
  43. bash updatewine.sh --help
  44. ```
  45. on the main script folder.
  46. You can pass arguments like:
  47. ```
  48. bash updatewine.sh --no-staging --no-install
  49. ```
  50. All supported arguments are:
  51. - `--no-staging` = Compile Wine instead of Wine Staging
  52. - `--no-install` = Do not install Wine or DXVK, just compile them. Note that Wine must be installed for DXVK compilation.
  53. - `--no-wine` = Do not compile or install Wine/Wine Staging
  54. - `--no-dxvk` = Do not compile or install DXVK
  55. - `--no-vkd3d` = Do not compile or install VKD3D Proton
  56. - `--no-nvapi` = Do not compile or install DXVK NVAPI
  57. - `--no-pol` = Do not update current user's PlayOnLinux Wine prefixes
  58. ### Force/Lock package versions
  59. You can force/lock specific Wine, Wine Staging, DXVK, meson & glslang versions.
  60. There are two variables for that, prefixed with **1)** _commit_ and **2)** _git branch_ in `options.conf` file.
  61. This is handy if you encounter issues during package compilation (DXVK/glslang or meson, for instance). You should consider forcing package versions either by defining the latest git commit which still works for you or by using a specific git branch for your build. You can do this by specifying the following variables in `updatewine.sh`:
  62. - Git commit:
  63. - `git_commithash_vkd3dproton`, `git_commithash_dxvknvapi`, `git_commithash_dxvk`, `git_commithash_wine`, `git_commithash_glslang`, `git_commithash_meson`
  64. - Git branch:
  65. - `git_branch_vkd3dproton`, `git_branch_dxvknvapi`, `git_branch_dxvk`, `git_branch_wine`, `git_branch_glslang`, `git_branch_meson`
  66. **These settings apply only on Debian/Ubuntu/Mint:**
  67. - `git_commithash_glslang`
  68. - `git_commithash_meson`
  69. - `git_branch_glslang`
  70. - `git_branch_meson`
  71. ### Force/Lock package versions: How-to (git commit)
  72. Each variable applies values which must be match package git commit tree. The value format is as follows:
  73. - **A)** 40 characters long commit hash. Use this if you want this commit to be the latest to be used in package compilation, not anything after it.
  74. - defined in git commit trees:
  75. - [VKD3D Proton commit tree](https://github.com/HansKristian-Work/vkd3d-proton/commits/master)
  76. - [DXVK NVAPI commit tree](https://github.com/jp7677/dxvk-nvapi/commits/master)
  77. - [DXVK commit tree](https://github.com/doitsujin/dxvk/commits/master)
  78. - [Wine commit tree](https://source.winehq.org/git/wine.git/) (or [GitHub mirror](https://github.com/wine-mirror/wine))
  79. - [glslang commit tree](https://github.com/KhronosGroup/glslang/commits/master)
  80. - [meson commit tree](https://github.com/mesonbuild/meson/commits/master)
  81. - You can obtain proper hash by opening the commit. Hash syntax is: `654544e96bfcd1bbaf4a0fc639ef655299276a39` etc...
  82. - **B)** keyword `HEAD`. This defined the specific package to use the latest commit available on repository (read: this is bleeding-edge version of the package)
  83. Git commit version freezing can be used on all supported platforms (Debian/Ubuntu/Mint/Arch Linux/Manjaro).
  84. ### Force/Lock package versions: How-to (git branch)
  85. Each variable applies values which must be match package git branch available. The value format is as follows:
  86. - **A)** Default value: _master_. This git branch includes usually the latest updates for a package
  87. - **B)** Custom value: _available branch_. Optionally, use a custom value. You can find valid branch names by checking the corresponding git package repository.
  88. Git branch selection can be used on all supported platforms (Debian/Ubuntu/Mint/Arch Linux/Manjaro).
  89. #### Force/Lock package versions: about Wine Staging
  90. When you install Wine Staging and you define specific vanilla Wine commit in `git_commithash_wine` (not `HEAD`) variable, _the latest available Wine Staging version compared to that vanilla Wine commit is used_. Practically, this usually means even slightly older package version since the last matching Wine Staging commit usually doesn't match the commit you define for vanilla Wine. In most cases, this shouldn't be a problem.
  91. Any other vanilla Wine git branch setting than _master_ will be ignored if Wine Staging is set to be compiled. _master_ branch is always used for Wine Staging compilation.
  92. ### Debian users: Winetricks installation
  93. **NOTE:** This section doesn't concern Ubuntu or Mint users.
  94. Since Debian doesn't provide winetricks package on official repositories, it is recommended that you use provided `debian_install_winetricks.sh` to install the latest Winetricks if needed.
  95. ----------------
  96. ## Custom patches for Wine, DXVK, DXVK NVAPI & VKD3D Proton
  97. You can apply your own patches for DXVK & Wine by dropping valid `.patch` or `.diff` files into the following folders:
  98. - VKD3D Proton: `vkd3d-proton_custom_patches`
  99. - DXVK NVAPI: `dxvk-nvapi_custom_patches`
  100. - DXVK: `dxvk_custom_patches`
  101. - Wine: `wine_custom_patches`
  102. Only patch files prefixed with `.diff` or `.patch` are applied.
  103. ## Disabled patches
  104. Folders `vkd3d-proton_disabled_patches`, `dxvk-nvapi_disabled_patches`, `dxvk_disabled_patches` and `wine_disabled_patches` are just for management purposes, they do not have a role in script logic at all.
  105. Wine patches are not related to Wine Staging patchset. You can use your custom Wine patches either with Wine Staging or vanilla Wine.
  106. ### Distinguish Wine staging and non-staging patches
  107. By using keywords `_staging` or `_nostaging` in your patch filename, you can quickly distinguish similar patches which are targeted either to Wine staging or Wine vanilla version.
  108. ----------------
  109. ## Compiled packages are stored for later usage
  110. Successfully compiled Wine & DXVK packages are stored in separate subfolders. Their locations are as follows.
  111. On Debian/Ubuntu/Mint:
  112. - `main-script-folder/debian/compiled_deb/`
  113. On Arch Linux:
  114. - `main-script-folder/arch/compiled_pkg/`
  115. The actual subfolders which hold compiled programs are generated according to buildtime timestamp, known as `build identifier`.
  116. ## DXVK usage
  117. **NOTE:** DXVK must be installed before applying these steps.
  118. To enable DXVK on an existing wineprefix, run
  119. ```
  120. WINEPREFIX=/path/to/my/wineprefix setup_dxvk install --symlink
  121. ```
  122. ## DXVK NVAPI usage
  123. **NOTE:** DXVK & DXVK NVAPI must be installed before applying these steps.
  124. **NOTE:** DXVK NVAPI requires DXVK to be installed on the same wineprefix. Therefore you need to apply `setup_dxvk` _before_ `setup_dxvk_nvapi` to the target wineprefix.
  125. Once you have applied `setup_dxvk` to your wineprefix, apply `setup_dxvk_nvapi`, as well. Run
  126. ```
  127. WINEPREFIX=/path/to/my/wineprefix setup_dxvk_nvapi install --symlink
  128. ```
  129. ## VKD3D Proton usage
  130. **NOTE:** VKD3D Proton must be installed before applying these steps.
  131. To enable VKD3D Proton on an existing wineprefix, run
  132. ```
  133. WINEPREFIX=/path/to/my/wineprefix setup_vkd3d_proton install --symlink
  134. ```
  135. ## Add DXVK to PlayOnLinux Wine prefixes
  136. To install DXVK on specific PlayOnLinux wineprefix which uses a different than `system` version of Wine, apply the following command syntax:
  137. ```
  138. WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/<myprefix>" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/<wineversion>/bin" setup_dxvk install --symlink
  139. ```
  140. With the same logic, you can install DXVK NVAPI and VKD3D Proton, as well.
  141. ### DXVK NVAPI
  142. ```
  143. WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/<myprefix>" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/<wineversion>/bin" setup_dxvk_nvapi install --symlink
  144. ```
  145. ### VKD3D Proton
  146. ```
  147. WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/<myprefix>" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/<wineversion>/bin" setup_vkd3d_proton install --symlink
  148. ```
  149. You need to set either `linux-amd64` or `linux-x86`, and `wineversion` + `myprefix` to match real ones, obviously.
  150. ### Manually uninstall temporary development packages (Debian/Ubuntu/Mint):
  151. Development packages can take extra space on your system so you may find useful to uninstall them. The script provides an automatic method for that but you can still use additional `debian_cleanup_devpkgs.sh` script which is targeted for uninstalling build time dependencies manually. The script uninstalls majority of Wine-Staging (Git), meson & glslang buildtime dependencies which may not be longer required. Be aware that while running the script, it doesn't consider if you need a development package for any other package compilation process (out of scope of Wine/DXVK)!
  152. To use `debian_cleanup_devpkgs.sh`, simply run:
  153. ```
  154. bash debian_cleanup_devpkgs.sh
  155. ```
  156. ---------------------------
  157. ### EXAMPLES:
  158. **NOTE:** If `--no-install` or `--no-pol` option is given, the script doesn't check for PlayOnLinux Wine prefixes. `--no-install` additionally skips system-wide installation of compiled packages.
  159. **NOTE:** PlayOnLinux Wine prefixes are checked for current user only.
  160. **1)** Compile Wine Staging, DXVK, DXVK NVAPI & VKD3D Proton, and make installable packages for them. Install the packages:
  161. `bash updatewine.sh`
  162. **2)** Compile DXVK, DXVK NVAPI & VKD3D Proton and make an installable package for them. Do not install these packages.
  163. `bash updatewine.sh --no-wine --no-install`
  164. **3)** Compile and install VKD3D Proton only. Do not install it.
  165. `bash updatewine.sh --no-wine --no-dxvk --no-nvapi --no-install`
  166. **4)** Compile Wine Staging and VKD3D Proton, and make an installable package for them. Do not install them.
  167. `bash updatewine.sh --no-dxvk --no-nvapi --no-install`
  168. **5)** Compile vanilla Wine and make an installable package for it. Do not install it.
  169. `bash updatewine.sh --no-staging --no-dxvk --no-nvapi --no-vkd3d --no-install`
  170. **6)** Compile vanilla Wine, DXVK & DXVK NVAPI, and make installable packages for them. Do not install them.
  171. `bash updatewine.sh --no-staging --no-vkd3d --no-install`
  172. **6)** Compile Wine Staging & DXVK, and make installable packages for them. Do not install them.
  173. `bash updatewine.sh --no-nvapi --no-vkd3d --no-install`
  174. **7)** Compile vanilla Wine & DXVK, and make installable packages for them. Install the packages.
  175. `bash updatewine.sh --no-staging --no-nvapi --no-vkd3d`
  176. **8)** Compile vanilla Wine & VKD3D Proton, and make an installable package for them. Install the packages, do not check PlayOnLinux wineprefixes.
  177. `bash updatewine.sh --no-staging --no-nvapi --no-dxvk --no-pol`
  178. ----------------
  179. ## GPU drivers
  180. For DXVK, it is strongly recommended that you install the latest Nvidia/AMDGPU drivers on your Linux distribution. For that purpose, Arch Linux/Manjaro users can use Arch/AUR package database. Debian/Ubuntu/Mint users should use provided scripts files
  181. ### GPU drivers on Debian/Ubuntu/Mint
  182. **Nvidia users**
  183. Use `debian_install_nvidia.sh` by running `bash debian_install_nvidia.sh`
  184. **AMD users**
  185. Not a solution provided yet.
  186. **NOTE:** The latest GPU drivers are usually NOT available on official Debian/Ubuntu/Mint package repositories, thus these helper scripts are provided.
  187. **NOTE:** Nvidia & AMD driver installer shell script can be run individually, as well. It is not bundled to the rest of the scripts in this repository, so feel free to grab them for other purposes, as well.
  188. ---------------------------
  189. ### NOTES
  190. The following section contains important notes about the script usage.
  191. **Do not pause a virtual machine**. It is not recommended to run this script in a virtualized environment (Oracle VirtualBox, for instance) if you plan to `Pause` the virtual machine during script runtime. This causes an internal sudo validate loop to get nuts. In normal environments and in normal runtime cases, this doesn't happen. Validate loop is required to keep sudo permissions alive for the script since the execution time exceeds default system-wide sudo timeout limit (which is a normal case).
  192. ---------------------------
  193. ### Script runtime test
  194. Runtime test done for the script to ensure it works as expected. Occasional test-runs are mandatory due to rapid development of the packages (Wine/DXVK) it handles.
  195. ```
  196. Compilation & installation status
  197. 2th November, 2022
  198. Distribution | Package Status
  199. -----------------------------------------
  200. Arch Linux | vkd3d-proton | Success
  201. | wine | Success
  202. | dxvk | Success
  203. | dxvk-nvapi | Success
  204. _____________|____________________|
  205. Linux Mint | vkd3d-proton | Success
  206. | wine | Success
  207. | dxvk | Build failure. Too old MinGW available (>= 11 required)
  208. | dxvk-nvapi | Build failure. Failure with directx-headers-dev
  209. ```
  210. #### Notes:
  211. Linux Mint build failures are likely trivial to fix with custom patches.
  212. ---------------------------
  213. ### TODO
  214. - Fix bug: when other than 'empty' values are used in Debian debdata files (conflicts,replaces ...etc), additional space is added to generated control file. However, Debian building system can't handle such situations, and throws an error instead. TL;DR: Remove spaces from generated control contents which is described by variable '_pkg_debcontrol'. Maybe a simple grep command can handle this?
  215. - Add compilation/installation script for the latest AMDGPU on Debian/Ubuntu/Mint
  216. - Find a way to handle real error events (ignore silenced errors)
  217. - Add info about selected commits and branches (if they have not been set to default)
  218. - Unify error & warning messages layout, unify internal variable & function names
  219. - Common script clean-up
  220. - Better handling for sudo validation loop function
  221. - may cause the terminal output to get nuts
  222. - when interrupting the script, the exit functionality may not be handled correctly?
  223. - The script doesn't handle SIGINT correctly while executing 'pkgdependencies' function
  224. - Add non-interactive mode for Puppet, Ansible, SaltStack and for better automation?
  225. - Consider the following topics/issues while developing
  226. - supress any warning messages, or terminate script execution if requirements not met
  227. - supply sudo password or run as root?
  228. - sudo validation loop, how to handle correctly?
  229. ---------------------------
  230. ### LICENSE
  231. This repository uses GPLv3 license. See [LICENSE](LICENSE) for details.