Files
buildDebianImRpi64/generate-recipe.py

148 lines
4.7 KiB
Python
Raw Normal View History

Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
#!/usr/bin/python3
import re
import sys
import subprocess
from pathlib import Path
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
# pylint: disable=invalid-name
### Sanity/usage checks
if len(sys.argv) != 3:
print("E: need 2 arguments", file=sys.stderr)
sys.exit(1)
arch = sys.argv[1]
if arch not in ['armhf', 'arm64']:
print("E: unsupported arch %s" % arch, file=sys.stderr)
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
sys.exit(1)
suite = sys.argv[2]
if suite not in ['bookworm', 'trixie', 'forky', 'sid']:
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
print("E: unsupported suite %s" % suite, file=sys.stderr)
sys.exit(1)
target_yaml = 'raspi_%s_%s.yaml' % (arch, suite)
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
### Setting variables based on suite and version starts here
# Arch, kernel, DTB:
if arch == 'armhf':
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
arch = 'armhf'
linux = 'linux-image-armmp'
dtb = '/usr/lib/linux-image-*-armmp/bcm*rpi*.dtb'
elif arch == 'arm64':
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
linux = 'linux-image-arm64'
dtb = '/usr/lib/linux-image-*-arm64/broadcom/bcm*rpi*.dtb'
# wireless/bluetooth firmware:
if arch != 'armhf':
wireless_firmware = 'firmware-brcm80211'
bluetooth_firmware = 'bluez-firmware'
else:
wireless_firmware = ''
bluetooth_firmware = ''
# Pi 4 on buster required some backports. Let's keep variables around, ready to
# be used whenever we need to pull specific things from backports.
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
backports_enable = False
backports_suite = '%s-backports' % suite
# Serial console:
if arch == 'armhf':
serial = 'ttyAMA0,115200'
elif arch == 'arm64':
serial = 'ttyS1,115200'
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
# CMA fixup:
extra_chroot_shell_cmds = []
if arch == 'arm64':
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
extra_chroot_shell_cmds = [
"sed -i 's/cma=64M //' /boot/firmware/cmdline.txt",
]
# Hostname:
hostname = 'rpi-%s' % arch
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
# Nothing yet!
extra_root_shell_cmds = []
### The following prepares substitutions based on variables set earlier
# Enable backports with a reason, or add commented-out entry:
if backports_enable:
backports_stanza = """
%s
deb http://deb.debian.org/debian/ %s main non-free-firmware
""" % (backports_enable, backports_suite)
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
else:
# ugh
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
backports_stanza = """
# Backports are _not_ enabled by default.
# Enable them by uncommenting the following line:
# deb http://deb.debian.org/debian %s main non-free-firmware
""" % backports_suite
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
2026-03-27 00:44:08 +01:00
# Enable updates and security for everyone but sid:
if suite != 'sid':
2026-03-27 00:44:08 +01:00
updates_stanza = 'deb http://deb.debian.org/debian %s-updates main non-free-firmware' % suite
security_stanza = 'deb http://security.debian.org/debian-security %s-security main non-free-firmware' % suite
else:
2026-03-27 00:44:08 +01:00
updates_stanza = ''
security_stanza = ''
gitcommit = subprocess.getoutput("git show -s --pretty='format:%C(auto)%h (%s, %ad)' --date=short ")
buildtime = subprocess.getoutput("date --utc +'%Y-%m-%d %H:%M'")
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
### Write results:
def align_replace(text, pattern, replacement):
"""
This helper lets us keep the indentation of the matched pattern
with the upcoming replacement, across multiple lines. Naive
implementation, please make it more pythonic!
"""
lines = text.splitlines()
for i, line in enumerate(lines):
m = re.match(r'^(\s+)%s' % pattern, line)
if m:
indent = m.group(1)
del lines[i]
for r in replacement:
lines.insert(i, '%s%s' % (indent, r))
i = i + 1
break
return '\n'. join(lines) + '\n'
with open('raspi_master.yaml', 'r') as in_file:
with open(target_yaml, 'w') as out_file:
in_text = in_file.read()
out_text = in_text \
.replace('__RELEASE__', suite) \
.replace('__ARCH__', arch) \
.replace('__LINUX_IMAGE__', linux) \
.replace('__DTB__', dtb) \
.replace('__WIRELESS_FIRMWARE__', wireless_firmware) \
.replace('__BLUETOOTH_FIRMWARE__', bluetooth_firmware) \
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
.replace('__SERIAL_CONSOLE__', serial) \
.replace('__HOST__', hostname) \
.replace('__GITCOMMIT__', gitcommit) \
.replace('__BUILDTIME__', buildtime)
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
out_text = align_replace(out_text, '__EXTRA_ROOT_SHELL_CMDS__', extra_root_shell_cmds)
out_text = align_replace(out_text, '__EXTRA_CHROOT_SHELL_CMDS__', extra_chroot_shell_cmds)
2026-03-27 00:44:08 +01:00
out_text = align_replace(out_text, '__UPDATES_', updates_stanza.splitlines())
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
out_text = align_replace(out_text, '__BACKPORTS__', backports_stanza.splitlines())
out_text = align_replace(out_text, '__SECURITY__', security_stanza.splitlines())
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
# Try not to keep lines where the placeholder was replaced
# with nothing at all (including on a "list item" line):
filtered = [x for x in out_text.splitlines()
if not re.match(r'^\s+$', x)
and not re.match(r'^\s+-\s*$', x)]
Generate recipes using a Python script instead of multiplying sed calls. This is a proof of concept rather than an ideal, final situation. It can be used this way: for v in 1 2 3 4 ; do for s in buster bullseye; do ./generate-recipe.py $v $s done done and it has been verified to produce very similar results compared to the existing many-sed approach. Differences are as follows: - Missing newline after some backports stanza, due to the removal of the other APT line. There's already MR#51 that aims at fixing some newline-related issues anyway, so this can be addressed separately. - Less schizophrenia in the generated sources.list for buster/4, as we are now only showing a reason for enabling the backports, instead of starting by explaining why backports are disabled by default. - Dropping APT::Default-Release = buster in the buster/4 case, which is no longer needed as we are pulling things from buster-backports rather than pulling them from unstable (see 57e90df103). - No longer trying to fix the firmware package name by throwing a broken sed at rpi-reconfigure-raspi-firmware.service in the buster/4 case: the syntax was buggy and fixing it would have made us try to replace raspi-firmware with raspi-firmware/buster-backports, while the correct thing to do is to not touch it in the first place (raspi-firmware is the correct name for the firmware package, pulled from buster-backports). As a side effect, this transforms the existing __EXTRA_SHELL_CMDS__ into a slightly more explicit __EXTRA_ROOT_SHELL_CMDS__ which now has its __EXTRA_CHROOT_SHELL_CMDS__ twin. That's the entry point that was missing and made 45cb5619d4 necessary in the past.
2021-08-28 04:01:30 +02:00
out_file.write('\n'.join(filtered) + "\n")