|
| 1 | +#!/usr/bin/env python3 |
| 2 | + |
| 3 | +import os |
| 4 | +from tomllib import loads as toml_loads |
| 5 | +from requests import get |
| 6 | +from pathlib import Path |
| 7 | +from subprocess import run |
| 8 | + |
| 9 | +CWD = os.getcwd() |
| 10 | + |
| 11 | +# dependency modifier |
| 12 | +def add_depends(package_dir: str, package_name: str, |
| 13 | + depends: list[str]) -> None: |
| 14 | + """Add dependencies to a package |
| 15 | + Args: |
| 16 | + package_dir (str): a directory where package sources are located |
| 17 | + package_name (str): a name of package |
| 18 | + depends (list[str]): a list of dependencies to add |
| 19 | + """ |
| 20 | + depends_list: str = ', '.join(depends) |
| 21 | + depends_line: str = f'misc:Depends={depends_list}\n' |
| 22 | + |
| 23 | + substvars_file = Path(f'{package_dir}/debian/{package_name}.substvars') |
| 24 | + substvars_file.write_text(depends_line) |
| 25 | + |
| 26 | + |
| 27 | +# find kernel version and source path |
| 28 | +defaults_file: str = Path('../../../data/defaults.toml').read_text() |
| 29 | +KERNEL_VER: str = toml_loads(defaults_file).get('kernel_version') |
| 30 | +KERNEL_FLAVOR: str = toml_loads(defaults_file).get('kernel_flavor') |
| 31 | +KERNEL_SRC: str = Path.cwd().as_posix() + '/linux' |
| 32 | +# define variables |
| 33 | +PACKAGE_NAME: str = 'vyos-drivers-realtek-r8126' |
| 34 | +PACKAGE_VERSION: str = '10.016.00' |
| 35 | +PACKAGE_DIR: str = f'{PACKAGE_NAME}-{PACKAGE_VERSION}' |
| 36 | +SOURCES_ARCHIVE: str = f'r8126-{PACKAGE_VERSION}.tar.bz2' |
| 37 | +SOURCES_URL: str = f'https://packages.vyos.net/source-mirror/{SOURCES_ARCHIVE}' |
| 38 | + |
| 39 | +# download sources |
| 40 | +sources_archive = Path(SOURCES_ARCHIVE) |
| 41 | +sources_archive.write_bytes(get(SOURCES_URL).content) |
| 42 | + |
| 43 | +# prepare sources |
| 44 | +debmake_cmd: list[str] = [ |
| 45 | + 'debmake', '-e', 'support@vyos.io', '-f', 'VyOS Support', '-p', |
| 46 | + PACKAGE_NAME, '-u', PACKAGE_VERSION, '-a', SOURCES_ARCHIVE |
| 47 | +] |
| 48 | +run(debmake_cmd) |
| 49 | + |
| 50 | +# add kernel to dependencies |
| 51 | +add_depends(PACKAGE_DIR, PACKAGE_NAME, |
| 52 | + [f'linux-image-{KERNEL_VER}-{KERNEL_FLAVOR}']) |
| 53 | + |
| 54 | +# configure build rules |
| 55 | +build_rules_text: str = '''#!/usr/bin/make -f |
| 56 | +# config |
| 57 | +export KERNELDIR := {KERNEL_SRC} |
| 58 | +PACKAGE_BUILD_DIR := debian/{PACKAGE_NAME} |
| 59 | +KVER := {KERNEL_VER}-{KERNEL_FLAVOR} |
| 60 | +MODULES_DIR := updates/drivers/net/ethernet |
| 61 | +# main packaging script based on dh7 syntax |
| 62 | +%: |
| 63 | +\tdh $@ |
| 64 | +
|
| 65 | +override_dh_clean: |
| 66 | +\tdh_clean --exclude=debian/{PACKAGE_NAME}.substvars |
| 67 | +
|
| 68 | +override_dh_prep: |
| 69 | +\tdh_prep --exclude=debian/{PACKAGE_NAME}.substvars |
| 70 | +
|
| 71 | +override_dh_auto_clean: |
| 72 | +\tmake clean |
| 73 | +
|
| 74 | +override_dh_auto_build: |
| 75 | +\techo "KERNELDIR=${{KERNELDIR}}" |
| 76 | +\techo "CURDIR=${{CURDIR}}" |
| 77 | +\tmake -C ${{KERNELDIR}} M=${{CURDIR}}/src modules |
| 78 | +
|
| 79 | +override_dh_auto_install: |
| 80 | +\tinstall -D -m 644 src/r8126.ko ${{PACKAGE_BUILD_DIR}}/lib/modules/${{KVER}}/${{MODULES_DIR}}/r8126.ko |
| 81 | +\t${{KERNELDIR}}/../sign-modules.sh ${{PACKAGE_BUILD_DIR}}/lib |
| 82 | +'''.format(KERNEL_SRC=KERNEL_SRC, PACKAGE_NAME=PACKAGE_NAME, KERNEL_VER=KERNEL_VER, KERNEL_FLAVOR=KERNEL_FLAVOR) |
| 83 | + |
| 84 | +build_rules_path = Path(f'{PACKAGE_DIR}/debian/rules') |
| 85 | +build_rules_path.write_text(build_rules_text, encoding='utf-8') |
| 86 | + |
| 87 | +# build a package |
| 88 | +debuild_cmd: list[str] = ['debuild'] |
| 89 | +run(debuild_cmd, cwd=PACKAGE_DIR, check=True) |
| 90 | + |
| 91 | +# Sign generated Kernel modules |
| 92 | +clean_cmd: list[str] = ['rm', '-rf', PACKAGE_DIR] |
| 93 | +run(clean_cmd, cwd=CWD, check=True) |
0 commit comments