summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PKGBUILD29
-rw-r--r--PKGBUILD.template97
-rw-r--r--update.py84
3 files changed, 167 insertions, 43 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 44dce3683cf5..a9f021ad0008 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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")