diff options
Diffstat (limited to 'maca-driver-aarch64.spec')
| -rw-r--r-- | maca-driver-aarch64.spec | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/maca-driver-aarch64.spec b/maca-driver-aarch64.spec new file mode 100644 index 0000000..7772152 --- /dev/null +++ b/maca-driver-aarch64.spec @@ -0,0 +1,348 @@ +%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 <packager@example.invalid> - 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. |
