add rpmbuild.py

This commit is contained in:
alexander stefanov 2024-11-16 00:38:41 +03:00
parent 5456c49b68
commit bd5cda66a4
3 changed files with 78 additions and 1 deletions

View file

@ -12,6 +12,7 @@ from utils.generate_spec import generate_spec_file
from utils.kernel import clone_kernel, make_kernel_tar
from utils.uboot import build_uboot
from utils.patch import apply_uboot_patches, apply_kernel_patches
from utils.rpmbuild import run_rpmbuild
BASE_DIR = os.getcwd()
@ -52,6 +53,12 @@ def main():
clone_kernel(TMP_DIR, BASE_DIR, config, vendor, device, kernel_dir)
kernel_rpm_dir = os.path.join(TMP_DIR, vendor, device, "kernel-build")
make_kernel_tar(kernel_dir, kernel_rpm_dir)
# Call rpmbuild to build the kernel RPM
try:
run_rpmbuild(kernel_rpm_dir, arch)
except Exception as e:
print(f"Failed to build RPM: {e}")
sys.exit(1)
else:
print("Skipping kernel build.")

View file

@ -25,7 +25,7 @@ grep -Irl /lib/modules | xargs sed -i -e 's,/lib/modules,%{_modulesdir},g' -e 's
%build
{MAKE_DEFCONFIG}
%make_build CROSS_COMPILE=/usr/bin/{ARCH}-linux-gnu- ARCH={KERNEL_ARCH}
%make_build -s CROSS_COMPILE=/usr/bin/{ARCH}-linux-gnu- ARCH={KERNEL_ARCH}
%install
# Install kernel modules, if any

70
utils/rpmbuild.py Normal file
View file

@ -0,0 +1,70 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import subprocess
def run_rpmbuild(kernel_build_dir, target_arch):
"""Run rpmbuild for the given kernel build directory and target architecture."""
# Ensure the kernel-build directory exists
if not os.path.isdir(kernel_build_dir):
print(f"Error: Kernel build directory '{kernel_build_dir}' does not exist.")
sys.exit(1)
# Change to the kernel-build directory
os.chdir(kernel_build_dir)
# Check if a spec file exists
spec_files = [f for f in os.listdir(kernel_build_dir) if f.endswith(".spec")]
if not spec_files:
print(f"Error: No spec files found in '{kernel_build_dir}'.")
sys.exit(1)
elif len(spec_files) > 1:
print(f"Warning: Multiple spec files found in '{kernel_build_dir}'. Using '{spec_files[0]}'.")
# Use the first spec file found
spec_file = spec_files[0]
# Define paths for RPM build directories
rpmdir = os.path.join(kernel_build_dir, "RPMS")
builddir = os.path.join(kernel_build_dir, "BUILD")
os.makedirs(rpmdir, exist_ok=True)
os.makedirs(builddir, exist_ok=True)
# Construct the rpmbuild command
rpmbuild_command = [
"rpmbuild", "-ba",
f"--target={target_arch}",
f"--define", f"_sourcedir {kernel_build_dir}",
f"--define", f"_rpmdir {rpmdir}",
f"--define", f"_builddir {builddir}",
spec_file
]
# Run the rpmbuild command
try:
print(f"Running rpmbuild for spec file: {spec_file} with target architecture: {target_arch}")
#subprocess.run(rpmbuild_command, check=True)
subprocess.run(
rpmbuild_command,
stdin=subprocess.DEVNULL, # Отключение ввода
stdout=sys.stdout, # Вывод в стандартный поток
stderr=sys.stderr, # Вывод ошибок
check=True
)
print(f"RPM build completed successfully. RPMs are located in: {rpmdir}")
except subprocess.CalledProcessError as e:
print(f"Error: rpmbuild failed with error code {e.returncode}")
sys.exit(1)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: rpmbuild.py <kernel-build-dir> <target-arch>")
sys.exit(1)
kernel_build_dir = sys.argv[1]
target_arch = sys.argv[2]
run_rpmbuild(kernel_build_dir, target_arch)