#!/bin/bash # Made by Andrew Shark, The author of LinuxComp Tutorial Youtube channel # To install amdgpu-pro on ubuntu 19.04 we want to use the following: # ./amdgpu-install --pro --opencl=lagacy,pal # But there are several problems in 19.20-812932 release: # 1-19.10-785425) amdgpu-dkms fails to build in 19.10 (probably could be fixed, I did not explored it yet). I checked that this driver actually works without dkms version of amdgpu kernel modules, so solution is omitting it. # 1-19.20-812932) There is no such problem, it builds ok, so we can ignore problem 3 # 2) amdgpu-core checks ubuntu version before installation and refuses to continue if ubuntu version is not 18.04. Solution is to remove this check. It is in preinst script. # 3) amdgpu-pro(-hwe) and amdgpu-pro-lib32 depends on amdgpu(-hwe), however they should depend on amdgpu-lib(-hwe) instead. amdgpu(-hwe) itself depends on amdgpu-dkms and amdgpu-lib(-hwe). Because of this issue, amdgpu-dkms package is still in installation list when we use --no-dkms. So solution is to modify depends array of amdgpu-pro(-hwe) and amdgpu-pro-lib32. Or just use a fake empty amdgpu-dkms package. # 4) Then we need to edit packages hashsums and filesizes of modified packages in Packages file and hashsums of Packages file in Release file. # 5) And we need to edit amdgpu-install script to use hwe packages (they are more recent versions of non-hwe ones). # After that we could install amdgpu-pro 19.10-785425 in ubuntu 19.04. # Ok, lets start! # # Nuclear removing: # # If you forget to remove previous version of amdgpu-pro before installing a new one, you may stuck at situation with lots of broken packages, and amdgpu-uninstall script could not fix that. # # In this case run these commands to forcely remove packages belonging to amdgpu-pro and then run my script as normal. # # If it messed up in /usr/lib/x86_64-linux-gnu/dri/, then reinstall libgl1-mesa-dri and mesa-va-drivers # pkgs_to_rm=$(grep ^Package /var/lib/apt/lists/_var_opt_amdgpu-pro-local_._Packages | awk '{print $2}' | sort | uniq) # sudo dpkg --remove --force-remove-reinstreq $pkgs_to_rm # pkgs_to_rm32=$(grep ^Package /var/lib/apt/lists/_var_opt_amdgpu-pro-local_._Packages | awk '{print $2:i386}' | sort | uniq) # sudo dpkg --remove --force-remove-reinstreq $pkgs_to_rm32 # remove installation if it was done previously if command -v amdgpu-uninstall; then amdgpu-uninstall -y; elif command -v amdgpu-pro-uninstall; then amdgpu-pro-uninstall -y; fi # Solving problem 1: # There is no problem currently. # Solving problem 2: # ag_core_orig_md5=063710d823eb343f151f08ae7dd90f66 # original (with preinst script) DEBFILE="amdgpu-core_19.20-812932_all.deb" TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1 OUTPUT=`basename "$DEBFILE" .deb`.no_ub_ver_chk.deb dpkg-deb -x "$DEBFILE" "$TMPDIR" dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIAN rm "$TMPDIR"/DEBIAN/preinst rm -f $OUTPUT # remove modded deb if already exist dpkg -b "$TMPDIR" "$OUTPUT" rm -r "$TMPDIR" # for some reason hashsum is different after every build. Not explored why yet. So I will get it in this script dinamically ag_core_mod_md5=$(md5sum $OUTPUT | cut -f1 -d" ") ag_core_mod_sha1=$(sha1sum $OUTPUT | cut -f1 -d" ") ag_core_mod_sha256=$(sha256sum $OUTPUT | cut -f1 -d" ") ag_core_mod_size=$(wc -c < $OUTPUT) # # Solving problem 3: # # ag_dkms_orig_md5=5a1a0330f609c1b927a212bd4b14a95a # original amdgpu-dkms_19.10-785425_all.deb package # # rm -rf amdgpu-dkms-fake # mkdir -p amdgpu-dkms-fake/DEBIAN # echo -e " # Package: amdgpu-dkms # Version: 19.10-785425 # Architecture: all # Maintainer: Unreal Person # Section: misc # Priority: optional # Description: Fake empty package to workaround pro stack dependcy on dkms" > amdgpu-dkms-fake/DEBIAN/control # dpkg-deb --build amdgpu-dkms-fake > /dev/null # rm -rf amdgpu-dkms-fake # # ag_dkms_mod_md5=$(md5sum amdgpu-dkms-fake.deb | cut -f1 -d" ") # ag_dkms_mod_sha1=$(sha1sum amdgpu-dkms-fake.deb | cut -f1 -d" ") # ag_dkms_mod_sha256=$(sha256sum amdgpu-dkms-fake.deb | cut -f1 -d" ") # ag_dkms_mod_size=$(wc -c < amdgpu-dkms-fake.deb) # # Solving problem 4: sed -i "36{s/.*/Filename: .\/amdgpu-core_19.20-812932_all.no_ub_ver_chk.deb/}" Packages sed -i "37{s/.*/Size: $ag_core_mod_size/}" Packages sed -i "38{s/.*/MD5sum: $ag_core_mod_md5/}" Packages sed -i "39{s/.*/SHA1: $ag_core_mod_sha1/}" Packages sed -i "40{s/.*/SHA256: $ag_core_mod_sha256/}" Packages # sed -i "52{s/.*/Filename: .\/amdgpu-dkms-fake.deb/}" Packages # sed -i "53{s/.*/Size: $ag_dkms_mod_size/}" Packages # sed -i "54{s/.*/MD5sum: $ag_dkms_mod_md5/}" Packages # sed -i "55{s/.*/SHA1: $ag_dkms_mod_sha1/}" Packages # sed -i "56{s/.*/SHA256: $ag_dkms_mod_sha256/}" Packages packages_mod_sha256=$(sha256sum Packages | cut -f1 -d" ") packages_mod_size=$(wc -c < Packages) echo -e "Date: `date -R -u` SHA256: $packages_mod_sha256 $packages_mod_size Packages" > Release # Solving problem 5: sed -i '147{s/^\t/#/}' amdgpu-install # commenting out this condition: if dpkg -s "xserver-xorg-hwe-18.04" sed -i '151{s/^\t/#/}' amdgpu-install # and its closing fi # Finally, we are ready to install: ./amdgpu-install --pro --opencl=legacy,pal --no-dkms sudo ldconfig