mirror of
https://github.com/rosalinux/image-builder.git
synced 2025-02-23 10:22:50 +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.kernel import clone_kernel, make_kernel_tar
|
||||||
from utils.uboot import build_uboot
|
from utils.uboot import build_uboot
|
||||||
from utils.patch import apply_uboot_patches, apply_kernel_patches
|
from utils.patch import apply_uboot_patches, apply_kernel_patches
|
||||||
|
from utils.rpmbuild import run_rpmbuild
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = os.getcwd()
|
BASE_DIR = os.getcwd()
|
||||||
|
@ -52,6 +53,12 @@ def main():
|
||||||
clone_kernel(TMP_DIR, BASE_DIR, config, vendor, device, kernel_dir)
|
clone_kernel(TMP_DIR, BASE_DIR, config, vendor, device, kernel_dir)
|
||||||
kernel_rpm_dir = os.path.join(TMP_DIR, vendor, device, "kernel-build")
|
kernel_rpm_dir = os.path.join(TMP_DIR, vendor, device, "kernel-build")
|
||||||
make_kernel_tar(kernel_dir, kernel_rpm_dir)
|
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:
|
else:
|
||||||
print("Skipping kernel build.")
|
print("Skipping kernel build.")
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ grep -Irl /lib/modules | xargs sed -i -e 's,/lib/modules,%{_modulesdir},g' -e 's
|
||||||
|
|
||||||
%build
|
%build
|
||||||
{MAKE_DEFCONFIG}
|
{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
|
||||||
# Install kernel modules, if any
|
# 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