diff options
-rw-r--r-- | PKGBUILD | 29 | ||||
-rw-r--r-- | PKGBUILD.template | 97 | ||||
-rw-r--r-- | update.py | 84 |
3 files changed, 167 insertions, 43 deletions
@@ -13,7 +13,7 @@ pkgname=("${_pkgname}-versioned-bin" "${_versioned_pkgname}-docs-bin") pkgver=${_pkgver} pkgrel=${_pkgrel} -pkgdesc='Repackaging of the Arch kernel with a unique package name for each version' +pkgdesc="The LTS Linux kernel and modules | repackaged with a unique package name for each version" url="https://www.kernel.org/" arch=(x86_64) license=(GPL2) @@ -45,34 +45,39 @@ sha256sums=('8a1868396e1683996261a2cff5c963357c315ee0bab17eb64216039120da6ecf' '0615ed8e4d048c76692beed94121c1d5b92653afe76a95ce3f5c8b74d1131bf5') package_linux-lts-versioned-bin() { - pkgdesc="Dummy package depending on ${_versioned_pkgname}-bin" - depends=("${_versioned_pkgname}-bin") - optdepends=('grub-hook: to run grub-mkconfig when kernels are added/removed') + pkgdesc="Dummy package depending on ${_versioned_pkgname}-bin" + depends=("${_versioned_pkgname}-bin") + optdepends=('grub-hook: to run grub-mkconfig when kernels are added/removed') } package_linux-lts-versioned-headers-bin() { - pkgdesc="Dummy package depending on ${_versioned_pkgname}-headers-bin" - depends=("${_versioned_pkgname}-headers-bin") + pkgdesc="Dummy package depending on ${_versioned_pkgname}-headers-bin" + depends=("${_versioned_pkgname}-headers-bin") } package_linux-lts-versioned-docs-bin() { - pkgdesc="Dummy package depending on ${_versioned_pkgname}-docs-bin" - depends=("${_versioned_pkgname}-docs-bin") + pkgdesc="Dummy package depending on ${_versioned_pkgname}-docs-bin" + depends=("${_versioned_pkgname}-docs-bin") } package_linux5.10.17-1-lts-bin() { - pkgdesc="The Linux kernel and modules, version ${KERNNAME}" - depends=(coreutils kmod initramfs) + pkgdesc="The LTS Linux kernel and modules, version ${KERNNAME}" + depends=(coreutils + initramfs + kmod) conflicts=("${_pkgname}") optdepends=('crda: to set the correct wireless channels of your country' 'linux-firmware: firmware images needed for some devices') + provides=(VIRTUALBOX-GUEST-MODULES + WIREGUARD-MODULE) + replaces=(wireguard-lts) tar -xf "${_kernpkg}" -C "${pkgdir}" rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} sed -ic "s/${_pkgname}/${KERNNAME}/" "${pkgdir}/usr/lib/modules/${KERNNAME}/pkgbase" } package_linux5.10.17-1-lts-headers-bin() { - pkgdesc="Headers and scripts for building modules for the Linux kernel ${KERNNAME}" + pkgdesc="Headers and scripts for building modules for the LTS Linux kernel ${KERNNAME}" conflicts=("${_pkgname}-headers") tar -xf "${_headerspkg}" -C "${pkgdir}" rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} @@ -80,7 +85,7 @@ package_linux5.10.17-1-lts-headers-bin() { } package_linux5.10.17-1-lts-docs-bin() { - pkgdesc="Documentation for the Linux kernel ${KERNNAME}" + pkgdesc="Documentation for the LTS Linux kernel ${KERNNAME}" conflicts=("${_pkgname}-docs") tar -xf "${_docspkg}" -C "${pkgdir}" rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} diff --git a/PKGBUILD.template b/PKGBUILD.template new file mode 100644 index 000000000000..9e013f9351d8 --- /dev/null +++ b/PKGBUILD.template @@ -0,0 +1,97 @@ +# Maintainer: Chris Billington <chrisjbillington@gmail.com> +_pkgname=linux-lts +_pkgver=%PKGVER +_pkgrel=%PKGREL +pkgbase="${_pkgname}-versioned-bin" +KERNNAME="${_pkgver}-${_pkgrel}-lts" +_versioned_pkgname="linux${_pkgver}-${_pkgrel}-lts" +pkgname=("${_pkgname}-versioned-bin" + "${_pkgname}-versioned-headers-bin" + "${_pkgname}-versioned-docs-bin" + "${_versioned_pkgname}-bin" + "${_versioned_pkgname}-headers-bin" + "${_versioned_pkgname}-docs-bin") +pkgver=${_pkgver} +pkgrel=${_pkgrel} +pkgdesc="%KERN_PKGDESC | repackaged with a unique package name for each version" +url="%URL" +arch=(x86_64) +license=(GPL2) +options=('!strip') + +_kernpkg=${_pkgname}-${_pkgver}-${_pkgrel}-${arch}.pkg.tar.zst +_headerspkg=${_pkgname}-headers-${_pkgver}-${_pkgrel}-${arch}.pkg.tar.zst +_docspkg=${_pkgname}-docs-${_pkgver}-${_pkgrel}-${arch}.pkg.tar.zst + +# See if the sources are available from our own mirror: +_kernsrc=$(pacman -Sp "${_pkgname}" 2> /dev/null) +_headerssrc=$(pacman -Sp "${_pkgname}-headers" 2> /dev/null) +_docssrc=$(pacman -Sp "${_pkgname}-docs" 2> /dev/null) + +# If not, then use the Arch Linux archive: +if [ "$(basename "${_kernsrc}" 2> /dev/null)" != "${_kernpkg}" ]; then + _arch_archive=https://archive.archlinux.org/packages/.all + _kernsrc=${_arch_archive}/${_kernpkg} + _headerssrc=${_arch_archive}/${_headerspkg} + _docssrc=${_arch_archive}/${_docspkg} +fi + +source=("${_kernsrc}" + "${_headerssrc}" + "${_docssrc}") + +sha256sums=('0358dc97518d1e1dcb8aae3b0a3c9d0e43dd69708cd92ecef22e6e9dd3f9d1c8' + 'b6f662509ddcaa185f8eef31157cbb1e576efa6453e1a86c440bd3a21e1bc591' + '19802a951538749da4d5120ff89d1fc792e4bb8f465c1d3455d3803084e5f922') + +package_linux-lts-versioned-bin() { + pkgdesc="Dummy package depending on ${_versioned_pkgname}-bin" + depends=("${_versioned_pkgname}-bin") + optdepends=('grub-hook: to run grub-mkconfig when kernels are added/removed') +} + +package_linux-lts-versioned-headers-bin() { + pkgdesc="Dummy package depending on ${_versioned_pkgname}-headers-bin" + depends=("${_versioned_pkgname}-headers-bin") +} + +package_linux-lts-versioned-docs-bin() { + pkgdesc="Dummy package depending on ${_versioned_pkgname}-docs-bin" + depends=("${_versioned_pkgname}-docs-bin") +} + +package_linux%PKGVER-%PKGREL-lts-bin() { + pkgdesc="%KERN_PKGDESC, version ${KERNNAME}" + %KERN_DEPENDS + %KERN_CONFLICTS + %KERN_OPTDEPENDS + %KERN_PROVIDES + %KERN_REPLACES + tar -xf "${_kernpkg}" -C "${pkgdir}" + rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} + sed -ic "s/${_pkgname}/${KERNNAME}/" "${pkgdir}/usr/lib/modules/${KERNNAME}/pkgbase" +} + +package_linux%PKGVER-%PKGREL-lts-headers-bin() { + pkgdesc="%HEADERS_PKGDESC ${KERNNAME}" + %HEADERS_DEPENDS + %HEADERS_CONFLICTS + %HEADERS_OPTDEPENDS + %HEADERS_PROVIDES + %HEADERS_REPLACES + tar -xf "${_headerspkg}" -C "${pkgdir}" + rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} + mv "${pkgdir}/usr/src/"{"${_pkgname}","${_versioned_pkgname}"} +} + +package_linux%PKGVER-%PKGREL-lts-docs-bin() { + pkgdesc="%DOCS_PKGDESC ${KERNNAME}" + %DOCS_DEPENDS + %DOCS_CONFLICTS + %DOCS_OPTDEPENDS + %DOCS_PROVIDES + %DOCS_REPLACES + tar -xf "${_docspkg}" -C "${pkgdir}" + rm "${pkgdir}"/{.MTREE,.BUILDINFO,.PKGINFO} + mv "${pkgdir}/usr/share/doc/"{"${_pkgname}","${_versioned_pkgname}"} +} diff --git a/update.py b/update.py index 4573517fc5f1..574c65810450 100644 --- a/update.py +++ b/update.py @@ -1,40 +1,62 @@ +import sys import subprocess import json -import sys +import string +from pathlib import Path # Script to update the PKGBUILD to the latest [core]/linux -url = "https://www.archlinux.org/packages/core/x86_64/linux-lts/json/" - -data = subprocess.check_output(['curl', '-s', url]).decode() -info = json.loads(data) -latest_pkgver = info['pkgver'] -latest_pkgrel = info['pkgrel'] - -pkgver, pkgrel = subprocess.check_output( - ['bash', '-c', 'source PKGBUILD; echo ${_pkgver} ${_pkgrel}'] -).decode('utf8').strip().split() - -if (pkgver, pkgrel) != (latest_pkgver, latest_pkgrel): - print("linux-lts-versioned-bin out of date!") - with open('PKGBUILD') as f: - pkgbuild = f.read() - - replacements = ( - (f'_pkgver={pkgver}', f'_pkgver={latest_pkgver}'), - (f'_pkgrel={pkgrel}', f'_pkgrel={latest_pkgrel}'), - ( - f'{pkgver}-{pkgrel}', - f'{latest_pkgver}-{latest_pkgrel}', - ), - ) +def get_info(pkgname): + url = f"https://archlinux.org/packages/core/x86_64/{pkgname}/json/" + data = subprocess.check_output(['curl', '-s', url]).decode() + return json.loads(data) + +class Template(string.Template): + delimiter="%" + +def arr(name, values): + delimiter = '\n' + ' ' * (len(name) + 4) + values = [f"'{value}'" if ':' in value else value for value in values] + return f"{name}=({delimiter.join(values)})" + +kern_info = get_info('linux-lts') +headers_info = get_info('linux-lts-headers') +docs_info = get_info('linux-lts-docs') + +template = Template(Path('PKGBUILD.template').read_text()) - for a, b in replacements: - pkgbuild = pkgbuild.replace(a, b) +pkgbuild = template.substitute( + PKGVER=kern_info['pkgver'], + PKGREL=kern_info['pkgrel'], + URL=kern_info['url'], + KERN_PKGDESC=kern_info['pkgdesc'], + KERN_DEPENDS=arr("depends", kern_info['depends']), + KERN_CONFLICTS=arr("conflicts", kern_info['conflicts'] + ['"${_pkgname}"']), + KERN_OPTDEPENDS=arr("optdepends", kern_info['optdepends']), + KERN_PROVIDES=arr("provides", kern_info['provides']), + KERN_REPLACES=arr("replaces", kern_info['replaces']), + HEADERS_PKGDESC=headers_info['pkgdesc'], + HEADERS_DEPENDS=arr("depends", headers_info['depends']), + HEADERS_CONFLICTS=arr( + "conflicts", headers_info['conflicts'] + ['"${_pkgname}-headers"'] + ), + HEADERS_OPTDEPENDS=arr("optdepends", headers_info['optdepends']), + HEADERS_PROVIDES=arr("provides", headers_info['provides']), + HEADERS_REPLACES=arr("replaces", headers_info['replaces']), + DOCS_PKGDESC=docs_info['pkgdesc'], + DOCS_DEPENDS=arr("depends", docs_info['depends']), + DOCS_CONFLICTS=arr("conflicts", docs_info['conflicts'] + ['"${_pkgname}-docs"']), + DOCS_OPTDEPENDS=arr("optdepends", docs_info['optdepends']), + DOCS_PROVIDES=arr("provides", docs_info['provides']), + DOCS_REPLACES=arr("replaces", docs_info['replaces']), +) - with open('PKGBUILD', 'w') as f: - f.write(pkgbuild) +# Delete empty arrays: +pkgbuild = '\n'.join(line for line in pkgbuild.splitlines() if not line.endswith('=()')) +Path('PKGBUILD').write_text(pkgbuild + '\n') +if subprocess.check_output(['git', 'diff', 'PKGBUILD']).strip(): + print("linux-lts-versioned-bin is out of date!") subprocess.check_call(['updpkgsums']) with open('.SRCINFO', 'w') as f: @@ -42,7 +64,7 @@ if (pkgver, pkgrel) != (latest_pkgver, latest_pkgrel): subprocess.check_call(['git', 'add', 'PKGBUILD', '.SRCINFO']) subprocess.check_call( - ['git', 'commit', '-m', f'{latest_pkgver}-{latest_pkgrel}'] + ['git', 'commit', '-m', f"{kern_info['pkgver']}-{kern_info['pkgrel']}"] ) def yn_choice(message, default='y'): @@ -57,4 +79,4 @@ if (pkgver, pkgrel) != (latest_pkgver, latest_pkgrel): if yn_choice('git push?'): subprocess.check_call(['git', 'push']) else: - print("linux-lts-versioned-bin is up to date")
\ No newline at end of file + print("linux-lts-versioned-bin is up to date") |