%global driver_version 3.7.0.23 %global kmod_version 3.8.23 %global source_file metax-driver-%{driver_version}-rpm-aarch64.run %global source_url https://repo.oepkgs.net/openEuler/rpm/openEuler-24.03-LTS-SP3/contrib/drivers/aarch64/Packages/%{source_file} %global payload_dir metax-driver-%{driver_version} %global driver_root /opt/mxdriver %global debug_package %{nil} %global _buildshell /bin/bash # Preserve the upstream prebuilt kernel modules and userspace binaries. %global __strip /bin/true %global __brp_strip %{nil} %global __brp_strip_comment_note %{nil} %global __brp_strip_static_archive %{nil} %global __arch_install_post %{nil} Name: maca-driver-aarch64 Version: %{driver_version} Release: 1%{?dist} Summary: Repacked MetaX MACA DKMS driver %{driver_version} aarch64 bundle License: MetaX License URL: https://www.metax-tech.com/ ExclusiveArch: aarch64 BuildRequires: bash BuildRequires: cpio BuildRequires: coreutils BuildRequires: gzip BuildRequires: rpm BuildRequires: tar BuildRequires: wget BuildRequires: xz AutoReqProv: no # Only the DKMS driver mode is packaged. Firmware and userspace management # components required by that mode are retained. Requires: metax-driver = %{version}-%{release} %description This is a bundle package for the repacked MetaX MACA driver %{driver_version} aarch64 payload. The build downloads the upstream Makeself installer without executing it, then repacks the DKMS driver sources and their required firmware and userspace payloads as separate RPM subpackages. %package -n metax-driver Summary: MetaX driver DKMS-mode meta package Requires: metax-linux-dkms = %{version}-%{release} Requires: mxfw = %{version}-%{release} Requires: mxsmt = %{version}-%{release} AutoReqProv: no %description -n metax-driver Meta package and version marker for the DKMS MetaX driver installation. %package -n mxfw Summary: MetaX GPU firmware AutoReqProv: no %description -n mxfw Repacked firmware binaries for supported MetaX GPUs. %package -n mxsmt Summary: MetaX system management toolset Requires: bash AutoReqProv: no %description -n mxsmt Repacked MetaX system management library and mx-smi command-line tool. %package -n metax-linux-dkms Summary: MetaX Linux driver DKMS source Requires: autoconf Requires: automake Requires: bash Requires: dkms >= 1.95 Requires: elfutils-libelf-devel AutoReqProv: no %description -n metax-linux-dkms Kernel module sources for MetaX Linux driver %{kmod_version}, packaged for DKMS-managed builds. %package -n metax-rdma-dkms Summary: MetaX RDMA driver DKMS source Requires: automake Requires: bash Requires: dkms >= 1.95 Requires: elfutils-libelf-devel Requires: metax-linux-dkms = %{version}-%{release} AutoReqProv: no %description -n metax-rdma-dkms Kernel module sources for MetaX RDMA driver %{kmod_version}, packaged for DKMS-managed builds. %package -n mxgvm-dkms Summary: MetaX GPU virtualization driver DKMS source Requires: autoconf Requires: automake Requires: bash Requires: dkms >= 1.95 Requires: elfutils-libelf-devel AutoReqProv: no %description -n mxgvm-dkms Kernel module sources for MetaX GPU virtualization driver %{kmod_version}, packaged for DKMS-managed builds. %prep rm -rf %{payload_dir} %{source_file} %build set -euo pipefail cd %{_builddir} wget --tries=0 \ --retry-connrefused \ --waitretry=30 \ --timeout=30 \ --read-timeout=30 \ --continue \ -O "%{source_file}" \ "%{source_url}" rm -rf %{payload_dir} sh "%{source_file}" --noexec --noprogress --target "%{payload_dir}" cd %{payload_dir} cat > .rpm-package-map <<'EOF' rpm/metax-driver-3.7.0.23-1.aarch64.rpm metax-driver rpm/mxfw_3.7.0-1.noarch.rpm mxfw rpm/mxsmt_3.7.0-1.aarch64.rpm mxsmt dkms_rpm/metax-linux-dkms-3.8.23-1.aarch64.rpm metax-linux-dkms dkms_rpm/metax-rdma-dkms-3.8.23-1.aarch64.rpm metax-rdma-dkms dkms_rpm/mxgvm-dkms-3.8.23-1.aarch64.rpm mxgvm-dkms EOF %install set -euo pipefail cd %{_builddir}/%{payload_dir} rm -rf %{buildroot} mkdir -p %{buildroot} mkdir -p .filelists mkdir -p %{buildroot}%{_docdir}/%{name} cat > %{buildroot}%{_docdir}/%{name}/README <<'EOF' This package is a repackaged MetaX MACA driver aarch64 bundle. The main bundle installs the kernel driver exclusively through DKMS. The prebuilt kernel module, non-DKMS RDMA/GVM, and hypervisor RPM payloads are not repackaged. The upstream Makeself installer is only extracted and is never executed. EOF while read -r rpm_relpath pkg; do rpm_path="$(pwd)/${rpm_relpath}" filelist=".filelists/${pkg}.files" payload_list=".filelists/${pkg}.payload" if [ ! -f "${rpm_path}" ]; then echo "missing RPM: ${rpm_path}" >&2 exit 1 fi echo "==> installing rpm payload for ${pkg}: ${rpm_relpath}" rpm2cpio "${rpm_path}" \ | cpio -t --quiet \ | awk ' $0 == "" || $0 == "." || $0 == "./" || $0 == "/" { next } { gsub(/^\.\//, "", $0) gsub(/^\//, "", $0) sub(/\/$/, "", $0) if ($0 != "") print "/" $0 } ' \ | sort -u > "${payload_list}" if [ ! -s "${payload_list}" ]; then echo "empty payload list for ${pkg}" >&2 rm -f -- "${payload_list}" exit 1 fi rpm -qpl --dump "${rpm_path}" \ | awk ' FNR == NR { payload[$0] = 1 next } NF < 11 { next } { mode = $(NF - 6) path = $1 for (i = 2; i <= NF - 10; i++) { path = path " " $i } gsub(/^\.\//, "", path) gsub(/^\//, "", path) sub(/\/$/, "", path) if (path == "") next path = "/" path if (!(path in payload)) next if (mode ~ /^04/) { print "%%dir " path } else { print path } } ' "${payload_list}" - \ | sort -u > "${filelist}" if [ ! -s "${filelist}" ]; then echo "empty file list for ${pkg}" >&2 rm -f -- "${payload_list}" exit 1 fi rm -f -- "${payload_list}" rpm2cpio "${rpm_path}" | (cd %{buildroot} && cpio -idmu --quiet) done < .rpm-package-map # Scriptlets below are adapted from the retained upstream RPMs. Runtime paths # are used directly because RPM_BUILD_ROOT is not meaningful at install. %postun -n mxfw -p /bin/sh rm -rf /lib/firmware/metax %post -n mxsmt -p /bin/sh ln -sfn %{driver_root}/bin/mx-smi /usr/bin/mx-smi ln -sfn %{driver_root}/share/mxsmi/mx-smi.1.gz /usr/share/man/man1/mx-smi.1.gz echo %{driver_root}/lib > /etc/ld.so.conf.d/mxsml.conf ldconfig %preun -n mxsmt -p /bin/sh if [ $1 -eq 0 ]; then if [[ "$(readlink -f /usr/bin/mx-smi)" = "%{driver_root}"* ]]; then rm -f /usr/bin/mx-smi rm -f /usr/share/man/man1/mx-smi.1.gz rm -f /etc/ld.so.conf.d/mxsml.conf fi fi %pre -n metax-linux-dkms -p /bin/sh if [ -n "$(lsinitrd | grep metax-linux.ko)" ]; then echo "remove old metax-linux.ko from initramfs" dracut -f --omit-drivers metax-linux || true fi %post -n metax-linux-dkms -p /bin/sh mkdir -p /etc/dracut.conf.d/ cat <<'EOF' > /etc/dracut.conf.d/omit-metax-linux.conf omit_drivers+=" metax-linux " EOF for POSTINST in /usr/lib/dkms/common.postinst /usr/share/metax-linux/postinst; do if [ -f $POSTINST ]; then $POSTINST metax-linux %{kmod_version} /usr/share/metax-linux exit $? fi echo "WARNING: $POSTINST does not exist." done echo -e "ERROR: DKMS version is too old and metax-linux was not" echo -e "built with legacy DKMS support." echo -e "You must either rebuild metax-linux with legacy postinst" echo -e "support or upgrade DKMS to a more current version." exit 1 %preun -n metax-linux-dkms -p /bin/sh echo -e echo -e "Uninstall of metax-linux module (version %{kmod_version}) beginning:" rm -f /etc/dracut.conf.d/*metax-linux* for kernel_dir in /lib/modules/*; do if [ -f "$kernel_dir/extra/Module.symvers" ]; then rm -f "$kernel_dir/extra/Module.symvers" fi done dkms remove -m metax-linux -v %{kmod_version} --all --rpm_safe_upgrade exit 0 %pre -n metax-rdma-dkms -p /bin/sh if [ -n "$(lsinitrd | grep metax-rdma.ko)" ]; then echo "remove old metax-rdma.ko from initramfs" dracut -f --omit-drivers metax-rdma || true fi %post -n metax-rdma-dkms -p /bin/sh mkdir -p /etc/dracut.conf.d/ cat <<'EOF' > /etc/dracut.conf.d/omit-metax-rdma.conf omit_drivers+=" metax-rdma " EOF for POSTINST in /usr/lib/dkms/common.postinst /usr/share/metax-rdma/postinst; do if [ -f $POSTINST ]; then $POSTINST metax-rdma %{kmod_version} /usr/share/metax-rdma exit $? fi echo "WARNING: $POSTINST does not exist." done echo -e "ERROR: DKMS version is too old and metax-rdma was not" echo -e "built with legacy DKMS support." echo -e "You must either rebuild metax-rdma with legacy postinst" echo -e "support or upgrade DKMS to a more current version." exit 1 %preun -n metax-rdma-dkms -p /bin/sh echo -e echo -e "Uninstall of metax-rdma module (version %{kmod_version}) beginning:" rm -f /etc/dracut.conf.d/*metax-rdma* dkms remove -m metax-rdma -v %{kmod_version} --all --rpm_safe_upgrade exit 0 %pre -n mxgvm-dkms -p /bin/sh if [ -n "$(lsinitrd | grep mxgvm.ko)" ]; then echo "remove old mxgvm.ko from initramfs" dracut -f --omit-drivers mxgvm || true fi %post -n mxgvm-dkms -p /bin/sh mkdir -p /etc/dracut.conf.d/ cat <<'EOF' > /etc/dracut.conf.d/omit-mxgvm.conf omit_drivers+=" mxgvm " EOF for POSTINST in /usr/lib/dkms/common.postinst /usr/share/mxgvm/postinst; do if [ -f $POSTINST ]; then $POSTINST mxgvm %{kmod_version} /usr/share/mxgvm exit $? fi echo "WARNING: $POSTINST does not exist." done echo -e "ERROR: DKMS version is too old and mxgvm was not" echo -e "built with legacy DKMS support." echo -e "You must either rebuild mxgvm with legacy postinst" echo -e "support or upgrade DKMS to a more current version." exit 1 %preun -n mxgvm-dkms -p /bin/sh echo -e echo -e "Uninstall of mxgvm module (version %{kmod_version}) beginning:" rm -f /etc/dracut.conf.d/*mxgvm* dkms remove -m mxgvm -v %{kmod_version} --all --rpm_safe_upgrade exit 0 %files %{_docdir}/%{name}/README %files -n metax-driver -f %{_builddir}/%{payload_dir}/.filelists/metax-driver.files %files -n mxfw -f %{_builddir}/%{payload_dir}/.filelists/mxfw.files %files -n mxsmt -f %{_builddir}/%{payload_dir}/.filelists/mxsmt.files %files -n metax-linux-dkms -f %{_builddir}/%{payload_dir}/.filelists/metax-linux-dkms.files %files -n metax-rdma-dkms -f %{_builddir}/%{payload_dir}/.filelists/metax-rdma-dkms.files %files -n mxgvm-dkms -f %{_builddir}/%{payload_dir}/.filelists/mxgvm-dkms.files %changelog * Wed Aug 05 2026 MetaX Packager - 3.7.0.23-1 - Repack the MetaX MACA aarch64 driver and DKMS RPM payloads. - Use the DKMS kernel driver for the default bundle installation. - Omit all prebuilt kernel, non-DKMS virtualization, and hypervisor subpackages.