Installing ROCm-OpenCL runtime on Arch Linux
Table of Contents
Introduction⌗
Greetings folks, this is going to be a short but usefull one. For those in a hurry, skip to the Installation section.
Let’s start by setting context. What are we trying to solve here? We’re here because we want to
“recover” some passwords using hashcat. We have been through the excellent Arch Linux Wiki
documentation for installing hashcat, got
everything installed, tried using it, and got an error that the currently installed OpenCL
driver is unstable and cannot be used.
What is OpenCL anyway? It’s a framework that allows developers to write applications that can run on a variety of different processors without having to know much about the implementation details of each one of them. It’s out of scope for this article but more details about OpenCL can be found here.
The other question that comes to mind is why should we care about OpenCL and why does hashcat
need it? Short answer is that computing hashes on the GPU is considerably faster than computing
them on the CPU. We can run hashcat with the --force flag to force it to use the CPU
to compute hashes for password recovery but it will take a lot more time to get the job done vs
using the GPU.
The target machine used for this article is a Lenovo T495s laptop. It has an AMD Ryzen 5 PRO CPU and
a Radeon Vega Mobile GPU. When going through the normal installation steps for AMD GPUs, we can
naively go with the opencl-mesa runtime first since the package is in the official Arch Linux
repository and it supports the open source amdgpu driver. This is the OpenCL runtime hashcat
considers unstable and refuses to run on. What’s our open source alternative? the
rocm-opencl-runtime from the AUR.
This is where everything got complicated real fast. Adding to the complexity is insisting on
only using pacman as the package manager. For stubborn folks, there’s always a way and that’s what
we’re going to prove here so let’s get to work.
Installation⌗
Finding the Right Repositories⌗
First and foremost, we’re going to checkout the ROCm Arch
repository. It contains all the PKGBUILD files you will
need for what is in the official ROCm
repository. Had we been using yay as
our package manager, we could have simply followed the
instructions provided
in the ROCm Arch repository read me and be done with it. But that would have been way too easy.
Let’s keep our heads down and carry on.
After checking out the repository, we’re ready to start installing packages. The end goal here is
to get the rocm-opencl-runtime installed.
Installation Order and Dependencies⌗
One does not simply install the rocm-opencl-runtime package. We need to manually install its
dependencies first.
Here’s a complete list of what we will need to install and in what specific order. There is a possibility that some may already be installed. It’s safe to skip those.
- Build and install 
hsakmt-roct. - Build and install 
llvm-amdgpu. - Build and install 
rocm-device-libs. - Build and install 
hsa-rocr. - Build and install 
rocm_cmake. - Build and install 
comgr. - Build and install 
rocclr. 
When we’re done installing 1 through 7, we can finally build and install the rocm-opencl-runtime
package.
Something to note, the llvm-amdgpu package takes a while to compile and install. We can also
expect llvm-amdgpu to need extra dependencies not listed here. Install and carry on.
In my specific case, z3 and  ninja were missing.
Once rocm-opencl-runtime is installed, we can move on to testing.
Testing⌗
We are now able to use clinfo to list information related to the OpenCL installation. It will look
something like this:
$ clinfo
Number of platforms                               1
  Platform Name                                   AMD Accelerated Parallel Processing
  Platform Vendor                                 Advanced Micro Devices, Inc.
  Platform Version                                OpenCL 2.0 AMD-APP.dbg (3212.0)
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd cl_amd_event_callback
  Platform Extensions function suffix             AMD
  Platform Name                                   AMD Accelerated Parallel Processing
Number of devices                                 1
  Device Name                                     gfx902+xnack
  Device Vendor                                   Advanced Micro Devices, Inc.
  Device Vendor ID                                0x1002
  Device Version                                  OpenCL 2.0
  Driver Version                                  3212.0 (HSA1.1,LC)
  Device OpenCL C Version                         OpenCL C 2.0
  Device Type                                     GPU
  Device Board Name (AMD)                         AMD Ryzen 5 PRO 3500U w/ Radeon Vega Mobile Gfx
...
Now that the installation is validated, let’s give hashcat a spin and see if it still complains
about unstable drivers and implementations.
$ hashcat -mXXXX hashes.txt worldlist.txt
hashcat (v6.1.1) starting...
OpenCL API (OpenCL 2.0 AMD-APP.dbg (3212.0)) - Platform #1 [Advanced Micro Devices, Inc.]
=========================================================================================
* Device #1: gfx902+xnack, 3776/3888 MB (3305 MB allocatable), 11MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
INFO: All hashes found in potfile! Use --show to display them.
Started: Sun Jan 31 18:35:36 2021
Stopped: Sun Jan 31 18:35:38 2021
Perfect, hashcat can now leverage the GPU through the OpenCL runtime we just installed.
Conclusion⌗
There you have it, we were able to get the rocm-opencl-runtime package installed by using
pacman only. Honestly, it would have been a lot simpler to just use yay but we demonstrated that
it’s possible to do it with pacman with a little extra work. Bonus points, we were able to
“recover” passwords by having hashcat use the newly installed OpenCL runtime.
Hopefully these instructions have provided enough guidance to get everything running on your own system.
Thanks for reading and I’ll see you next time!
- redbay