mirror of
https://github.com/rosalinux/image-builder.git
synced 2025-02-23 02:12:52 +00:00
add rpmbuild.py
This commit is contained in:
parent
5456c49b68
commit
bd5cda66a4
3 changed files with 78 additions and 1 deletions
7
build.py
7
build.py
|
@ -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.")
|
||||
|
||||
|
|
|
@ -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
70
utils/rpmbuild.py
Normal 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)
|
Loading…
Add table
Reference in a new issue