initial import - meta-skynet - yocto meta-layer for skynet-os
HTML git clone https://git.drkhsh.at/meta-skynet.git
DIR Log
DIR Files
DIR Refs
DIR README
---
DIR commit 01808e4818738fda2e54b9cbace38eec572055bf
HTML Author: drkhsh <me@drkhsh.at>
Date: Mon, 3 Nov 2025 21:34:05 +0100
initial import
Diffstat:
A classes/rauc-integration.bbclass | 1 +
A conf/distro/skynet-distro.conf | 4 ++++
A conf/layer.conf | 13 +++++++++++++
A conf/machine/raspberrypi3-64.conf | 33 +++++++++++++++++++++++++++++++
A keys/development-1.cert.pem | 29 +++++++++++++++++++++++++++++
A keys/development-1.key.pem | 52 +++++++++++++++++++++++++++++++
A recipes-bsp/rpi-u-boot-scr/files/b… | 46 +++++++++++++++++++++++++++++++
A recipes-bsp/rpi-u-boot-scr/rpi-u-b… | 4 ++++
A recipes-core/base-files/base-files… | 4 ++++
A recipes-core/base-files/files/fstab | 14 ++++++++++++++
A recipes-core/bundles/files/develop… | 80 +++++++++++++++++++++++++++++++
A recipes-core/bundles/files/develop… | 28 ++++++++++++++++++++++++++++
A recipes-core/bundles/update-bundle… | 16 ++++++++++++++++
A recipes-core/images/skynet-image.bb | 8 ++++++++
A recipes-core/rauc/files/ca.cert.pem | 80 +++++++++++++++++++++++++++++++
A recipes-core/rauc/files/rauc-grow-… | 13 +++++++++++++
A recipes-core/rauc/files/system.conf | 17 +++++++++++++++++
A recipes-core/rauc/rauc-conf.bbappe… | 6 ++++++
A recipes-core/rauc/rauc_%.bbapend | 21 +++++++++++++++++++++
A recipes-core/udev/files/raspberryp… | 3 +++
A recipes-core/udev/udev-extraconf_%… | 6 ++++++
A recipes-kernel/linux/files/rauc.cfg | 8 ++++++++
A recipes-kernel/linux/linux-raspber… | 6 ++++++
A wic/sdimage-dual-raspberrypi.wks.in | 5 +++++
24 files changed, 497 insertions(+), 0 deletions(-)
---
DIR diff --git a/classes/rauc-integration.bbclass b/classes/rauc-integration.bbclass
@@ -0,0 +1 @@
+OVERRIDES .= "${@bb.utils.contains('DISTRO_FEATURES', 'rauc', ':rauc-integration', '', d)}"
DIR diff --git a/conf/distro/skynet-distro.conf b/conf/distro/skynet-distro.conf
@@ -0,0 +1,4 @@
+DISTRO_NAME = "Cyberdyne Systems Skynet OS Distribution"
+DISTROOVERRIDES = "skynet-dist"
+
+DISTRO_FEATURES:append = " rauc"
DIR diff --git a/conf/layer.conf b/conf/layer.conf
@@ -0,0 +1,13 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-rauc-raspberrypi"
+BBFILE_PATTERN_meta-rauc-raspberrypi = "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-rauc-raspberrypi = "6"
+
+LAYERDEPENDS_meta-rauc-raspberrypi = "core rauc raspberrypi"
+LAYERSERIES_COMPAT_meta-rauc-raspberrypi = "nanbield scarthgap"
DIR diff --git a/conf/machine/raspberrypi3-64.conf b/conf/machine/raspberrypi3-64.conf
@@ -0,0 +1,33 @@
+require conf/machine/raspberrypi3-64.conf
+
+MACHINEOVERRIDES =. "myrpi3-64:"
+
+# Use U-Boot for boot flow
+RPI_USE_U_BOOT = "1"
+UBOOT_MACHINE = "rpi_3_defconfig"
+
+# Add RAUC to image
+IMAGE_INSTALL:append = " rauc "
+
+# Dual rootfs layout
+WKS_FILE = "rpi-dualrootfs.wks.in"
+IMAGE_FSTYPES += "wic.bz2"
+
+# RAUC signing keys
+RAUC_KEY_FILE = "${LAYERDIR}/../keys/development-1.key.pem"
+RAUC_CERT_FILE = "${LAYERDIR}/../keys/development-1.cert.pem"
+
+# U-Boot environment configuration
+UBOOT_ENV = "u-boot-initial-env"
+UBOOT_ENV_SUFFIX = "txt"
+UBOOT_ENV_SIZE = "0x40000"
+UBOOT_ENV_IMAGE = "u-boot-env"
+UBOOT_ENV_FILE = "u-boot-initial-env.txt"
+
+# Install rauc-mark-good if you have it
+IMAGE_INSTALL:append = " rauc-mark-good "
+SYSTEMD_AUTO_ENABLE += "rauc-mark-good.service"
+
+# Generate boot.scr from boot.cmd
+BOOTCMD_FILE = "boot.cmd"
+IMAGE_BOOT_FILES += "boot.scr"
DIR diff --git a/keys/development-1.cert.pem b/keys/development-1.cert.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFAzCCAuugAwIBAgIUPgCbbFNCclfJYq8TK5yVDzNVaWQwDQYJKoZIhvcNAQEL
+BQAwETEPMA0GA1UEAwwGc2t5bmV0MB4XDTI1MTEwMzE0MjMzMVoXDTM1MTEwMTE0
+MjMzMVowETEPMA0GA1UEAwwGc2t5bmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAyv/3sK0rocx3JNrORSEtnlsl4qVOkhb1arsxDhAp2yu74CqMXD/n
+NMOVQddI0EAtXLLLQ55qqTJ4unm7yWU543rXIncrL6ooA/AJZzQo83ymDtOfjI6z
+3tK5mbaLXt9XJPaCYj5pIlcJFNva0WnNFZXMjFk/3kTOMitu74tItib729NSpFBy
+IdQgvjanp6e0aAi3GCM9Aiw3zzOEC9Ye75S9g4NmVE4yXgsmNlHXPvTLO9KD9Ro+
+QTQMvXhtmNwkzmBkDS6zc649kRZHRy4BXECYjut61qBrmSd0vEzodaW/5nlM9xCN
+7H7FGVqtAw6dbRFx8hex8tZ0KMnituKgzX6uNHlNkgY5s9GM8BFhh6l26gQ5LYEk
+Rvn7uHhE5RenhIPuMpjtQlnDDH9m5FMGwCDvobe8A5Q9eYyH6iA+AIuKAFTbH5w6
+Bg17oHCNHp71eWyzoxsYphDM7J/gtKSSrwow5Bx3tmA91pMtx/wemoZCuSCkg6Gr
+TpeYSPEvk0koozBdQdm7eaLCJHBPlEREyeeIoMubPdzEFGkalpsbW/DLIMx7qGJl
+CfOr1lQ1psd5xOmrF7KaFsHpsbbQEtSXVfW0uSrjpNjmpQ6F+mGVwWidSiR0KyQ5
+dBlAJOCsLYa/sYv157UTpfw8MjI6qEu8V6yZn5XTx8GFVOOsEeplA5UCAwEAAaNT
+MFEwHQYDVR0OBBYEFJ7Hs/qaoATvn2IvuJPj92hSY2kYMB8GA1UdIwQYMBaAFJ7H
+s/qaoATvn2IvuJPj92hSY2kYMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
+BQADggIBAI8O6AC2mrv5zhZGJ9WWYp5Wp54eyeAyl0FiDrO7tNH5k3D7+sW8V0fH
+oNV8skMRXKaCFezw+Mnj+KdMDBZmPbpIBcT/vvnbGrlhh+qCtNVCMEmzuHFd9IZ6
+C2+nmS5Zd55Uv5lJwM8ra3qag1aQCO1slHlf/XDJ49IyiaMlWNf+vG9I1UObLRqT
+z11zpRQSAGW4EIx+Dp/pNYZWyFYYA2EjT+EI4mISYQwTmYkCAedjWittvRRLOMNC
+SA9ocqgvMEhsMPmh68RSFqwAMEyWJ2TJG3DsbYZImtlrzpaZOe44eXfMRaB/YHpG
+ZUk6Lh1MGUjwzsHi/u1vEx1IyS+BrHtpLaw84b4yyzU9NAjzd7TzBiPCsQoHtsrY
+XA6G1gqzRedgRL/i8NiUl+aVeTxZbYubdaOTylGLj7+9wYfhmgPjqx5xK7bR0Fo3
+Ytc89POn0r7Yj2g3cObarpF4hP4TUHHuKL43N9WzWZ+aPwu+BwU0LPl9UIKE1TOM
+Nb8f0vAigOliApgdXeX2jet/sUIBZ9sW+s5Hzr8KjUyxrjBLyd1NqLuVa98vfRog
+E8yQkhwOix+o17ZPKPwkiCZCmg5jDr2rIo6L68jBbVLUtGVOag7XR7lBp6AgRPpP
+rriqEhBn2O5OXp5YAHtjgENOAnBMgT86FMQGDyiz8lEuO+iGExri
+-----END CERTIFICATE-----
DIR diff --git a/keys/development-1.key.pem b/keys/development-1.key.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+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
+0gQMNEtUuNsuHLkBbiNvEcdzGV/S
+-----END PRIVATE KEY-----
DIR diff --git a/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in b/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in
@@ -0,0 +1,46 @@
+fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
+
+test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
+test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
+test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
+test -n "${BOOT_DEV}" || setenv BOOT_DEV "mmc 0:1"
+
+setenv bootpart
+setenv raucslot
+
+for BOOT_SLOT in "${BOOT_ORDER}"; do
+ if test "x${bootpart}" != "x"; then
+ # skip remaining slots
+ elif test "x${BOOT_SLOT}" = "xA"; then
+ if itest ${BOOT_A_LEFT} -gt 0; then
+ setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
+ echo "Found valid RAUC slot A"
+ setenv bootpart "/dev/mmcblk0p2"
+ setenv raucslot "A"
+ setenv BOOT_DEV "mmc 0:2"
+ fi
+ elif test "x${BOOT_SLOT}" = "xB"; then
+ if itest ${BOOT_B_LEFT} -gt 0; then
+ setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
+ echo "Found valid RAUC slot B"
+ setenv bootpart "/dev/mmcblk0p3"
+ setenv raucslot "B"
+ setenv BOOT_DEV "mmc 0:3"
+ fi
+ fi
+done
+
+if test -n "${bootpart}"; then
+ setenv bootargs "${bootargs} root=${bootpart} rauc.slot=${raucslot}"
+ saveenv
+else
+ echo "No valid RAUC slot found. Resetting tries to 3"
+ setenv BOOT_A_LEFT 3
+ setenv BOOT_B_LEFT 3
+ saveenv
+ reset
+fi
+
+fatload mmc 0:1 ${kernel_addr_r} @@KERNEL_IMAGETYPE@@
+if test ! -e mmc 0:1 uboot.env; then saveenv; fi;
+@@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr}
DIR diff --git a/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend b/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend
@@ -0,0 +1,4 @@
+inherit rauc-integration
+
+FILESEXTRAPATHS:prepend:rauc-integration := "${THISDIR}/files:"
+SRC_URI:append:rauc-integration = " file://boot.cmd.in"
DIR diff --git a/recipes-core/base-files/base-files_%.bbappend b/recipes-core/base-files/base-files_%.bbappend
@@ -0,0 +1,4 @@
+FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/files:"
+
+# Add a mount point for a shared data partition
+dirs755 += "/data"
DIR diff --git a/recipes-core/base-files/files/fstab b/recipes-core/base-files/files/fstab
@@ -0,0 +1,14 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+/dev/root / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,ptmxmode=0666,gid=5 0 0
+tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
+/dev/mmcblk0p1 /boot vfat defaults 0 0
+/dev/mmcblk0p5 /data ext4 defaults 0 0
+/dev/mmcblk0p6 /home ext4 x-systemd.growfs 0 0
DIR diff --git a/recipes-core/bundles/files/development-1.cert.pem b/recipes-core/bundles/files/development-1.cert.pem
@@ -0,0 +1,80 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 2 (0x2)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: O=Test Org, CN=Test Org rauc CA Development
+ Validity
+ Not Before: Jan 1 00:00:00 1970 GMT
+ Not After : Dec 31 23:59:59 9999 GMT
+ Subject: O=Test Org, CN=Test Org Development-1
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:ac:2b:0f:05:02:d0:bb:b0:47:05:36:71:3c:20:
+ 0e:a7:76:8d:75:c1:23:5e:6c:7a:2d:94:ff:3c:17:
+ d8:0b:44:48:2a:82:03:92:c5:fd:33:76:0c:42:cf:
+ 4d:8a:c9:47:7f:af:52:7c:15:6c:3b:e7:60:d1:04:
+ 97:24:7b:07:1f:56:7d:6c:3f:31:e8:f9:36:7b:33:
+ 5b:cf:54:ea:37:98:a6:b1:9a:1d:da:96:a1:07:14:
+ 9c:15:80:4d:db:0c:03:86:ce:c7:3d:72:57:a2:da:
+ a0:c0:8c:b2:9a:a0:6a:e5:b8:5f:52:d2:f6:27:ca:
+ 48:f4:e3:86:eb:be:24:93:6a:af:60:68:7f:09:3b:
+ 81:96:ce:85:0c:63:93:d8:fa:91:dc:50:2e:77:bb:
+ bc:38:42:e9:86:d8:ac:33:dd:e6:d4:37:69:e3:01:
+ 8d:21:8f:a9:4a:7f:15:a5:aa:a9:be:fc:36:93:a4:
+ 10:0c:18:33:30:06:7f:1c:13:b3:a9:c6:57:d7:6b:
+ 96:45:15:e7:f5:8f:3d:48:e0:08:46:4f:7f:ef:14:
+ 77:95:25:25:9b:14:21:84:25:eb:37:0b:01:48:e6:
+ f5:c1:8b:61:c6:cb:8c:6b:a7:d8:d2:f9:31:e3:80:
+ 3f:78:ea:6a:41:6c:5d:4d:83:a6:54:0d:5b:c2:0e:
+ f6:ef
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 89:4C:FE:8A:60:4D:C9:6D:F7:A8:C0:04:49:7F:AA:05:92:29:17:FB
+ X509v3 Authority Key Identifier:
+ keyid:44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8
+ DirName:/O=Test Org/CN=Test Org rauc CA Development
+ serial:01
+
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Signature Algorithm: sha256WithRSAEncryption
+ 2c:d2:30:68:f5:84:52:1e:cf:ed:0d:fc:e7:02:69:0b:3b:f6:
+ c3:77:00:12:1d:2d:d0:8f:49:9e:5c:f1:00:7b:1d:4f:d5:a9:
+ 46:a5:df:54:90:50:b4:8f:8e:ba:4b:2d:82:74:eb:5b:a8:f5:
+ 45:7b:77:73:b1:9b:32:93:15:c0:5c:02:2a:ed:b0:1e:bb:d8:
+ 4e:41:17:20:af:04:46:21:20:7b:86:9f:32:ab:54:71:26:e8:
+ 0b:75:12:9c:63:53:4f:54:db:a7:f9:b2:fa:e9:ee:4a:9d:80:
+ ba:ae:3f:eb:ef:10:11:2d:4f:5a:34:fb:8b:45:10:63:0b:f8:
+ af:f3:8b:24:21:2a:e0:0b:44:38:44:b5:9d:6e:8a:ff:1f:bf:
+ 6e:44:21:22:ec:8a:8d:73:63:e5:df:1a:ec:2a:64:1f:97:f9:
+ 5c:3a:25:7f:03:80:4c:db:99:5e:f9:7d:2b:f1:d0:97:4d:95:
+ 6f:29:47:7b:3f:29:e3:96:25:b0:1c:f1:0b:8b:8b:ba:de:3b:
+ 3f:40:2e:bd:31:68:ea:a9:8f:dc:c9:09:22:df:76:69:08:5d:
+ 5d:a4:09:62:80:20:83:9e:bd:d4:a6:35:ee:97:50:66:39:62:
+ 66:1b:2e:75:f2:6d:e7:06:ae:67:5f:4b:63:5c:52:e7:5d:dd:
+ c9:0c:86:2b
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhUZXN0
+IE9yZzElMCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudDAgFw03
+MDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowNDERMA8GA1UECgwIVGVzdCBP
+cmcxHzAdBgNVBAMMFlRlc3QgT3JnIERldmVsb3BtZW50LTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCsKw8FAtC7sEcFNnE8IA6ndo11wSNebHotlP88
+F9gLREgqggOSxf0zdgxCz02KyUd/r1J8FWw752DRBJckewcfVn1sPzHo+TZ7M1vP
+VOo3mKaxmh3alqEHFJwVgE3bDAOGzsc9clei2qDAjLKaoGrluF9S0vYnykj044br
+viSTaq9gaH8JO4GWzoUMY5PY+pHcUC53u7w4QumG2Kwz3ebUN2njAY0hj6lKfxWl
+qqm+/DaTpBAMGDMwBn8cE7OpxlfXa5ZFFef1jz1I4AhGT3/vFHeVJSWbFCGEJes3
+CwFI5vXBi2HGy4xrp9jS+THjgD946mpBbF1Ng6ZUDVvCDvbvAgMBAAGjgZEwgY4w
+HQYDVR0OBBYEFIlM/opgTclt96jABEl/qgWSKRf7MGIGA1UdIwRbMFmAFEQMr0p0
+tMdlArKV8ZF8o8zmPpnooT6kPDA6MREwDwYDVQQKDAhUZXN0IE9yZzElMCMGA1UE
+AwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudIIBATAJBgNVHRMEAjAAMA0G
+CSqGSIb3DQEBCwUAA4IBAQAs0jBo9YRSHs/tDfznAmkLO/bDdwASHS3Qj0meXPEA
+ex1P1alGpd9UkFC0j466Sy2CdOtbqPVFe3dzsZsykxXAXAIq7bAeu9hOQRcgrwRG
+ISB7hp8yq1RxJugLdRKcY1NPVNun+bL66e5KnYC6rj/r7xARLU9aNPuLRRBjC/iv
+84skISrgC0Q4RLWdbor/H79uRCEi7IqNc2Pl3xrsKmQfl/lcOiV/A4BM25le+X0r
+8dCXTZVvKUd7PynjliWwHPELi4u63js/QC69MWjqqY/cyQki33ZpCF1dpAligCCD
+nr3UpjXul1BmOWJmGy518m3nBq5nX0tjXFLnXd3JDIYr
+-----END CERTIFICATE-----
DIR diff --git a/recipes-core/bundles/files/development-1.key.pem b/recipes-core/bundles/files/development-1.key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsKw8FAtC7sEcF
+NnE8IA6ndo11wSNebHotlP88F9gLREgqggOSxf0zdgxCz02KyUd/r1J8FWw752DR
+BJckewcfVn1sPzHo+TZ7M1vPVOo3mKaxmh3alqEHFJwVgE3bDAOGzsc9clei2qDA
+jLKaoGrluF9S0vYnykj044brviSTaq9gaH8JO4GWzoUMY5PY+pHcUC53u7w4QumG
+2Kwz3ebUN2njAY0hj6lKfxWlqqm+/DaTpBAMGDMwBn8cE7OpxlfXa5ZFFef1jz1I
+4AhGT3/vFHeVJSWbFCGEJes3CwFI5vXBi2HGy4xrp9jS+THjgD946mpBbF1Ng6ZU
+DVvCDvbvAgMBAAECggEASphBYq9sltVyf/ytpRpSnxYLhmiPFXs0mIlE6Nl/3qnQ
+BrLcL3yfDuvntg6xjx9UXistNtvlUDMYzJcLkV/InzhPEVZ0HnfTth9zeOpWrI30
+M2EN7EZ1MGcqlVpI4U5cPM1cn+/proLBQYv0WnCEwFFY477JrkXDxG7MZ1mz6TaL
+IGcCCIUu1BxECngQ344eaKrSR5F2MtlxAl19Pt5QSPfmuMdmElrK6RtBjnKrDu1K
+fe6DCfObZ3nbG2fhFV4uTxhlTC9lUmfTQMKR79rLmHNKnbMx74kFNvy3XlT2l35I
+ZVfRMLPWph7yMom9v/Im3Q70uhJ1lxyqbbl/DFZVmQKBgQDVo19SqR/QeDIxPIPn
+XvVWzo5ml3KO/dVxA8sok6twr+G7yUeIUnuauYFA/tX/FS32azFRa/7GjUfoTx3q
+GHK43TBCMyEt0we6WwZb+FkWa/b/RBoyD/audrpmgDDi1+fXPs8bBvoO8/oju20D
+I6wOjSovcIMaeLo/+u3U6ShNQwKBgQDOTpoGMsQzXchZfDmxL61h3j4Gtjrl4BpU
+WhAkJ9U2BRpL8NSZLErn5ik8MwgK2ut+YdU7aogI0D6Gc+4zZoJDEbhhmPD9cprv
+LMyfAKoisR01OyU57mMSGQq0dfjmK6PfYJdX5sQJGkMFptNAJLTDoYtmXItSICoY
+1j5KTvwe5QKBgGytxmErjfakHoxzh3pdERuOylwgMPPS5xCt6FyE+pLBtmisFQqh
+QyXLtpgUy1IPOSmBED6mXJ4u4uSn0sTymPG3+8PBdOB12RmREqQYq2E/nQ/wWg8b
+ldbcqShZkATl5pfV6M+L9gtDS/1/bA5LyExCvbISX29I+R5xDSnhTlI3AoGBAJRK
+VVXtOa/+UhtYOpPMxGCbgZQLemxvWB2XmxCR/SRWKJ+7XOU4vCLSAoO93qMG1szB
+/6Y0ndFP9hFo1SfnH+ybmR+18ksLDKisV+xWavSCwI7Zk5l/a4C/tT0fqyeu6JyQ
+bliFjBVK5i/yyNfLSo9v16ZdENuYOQofPSjmezytAoGBALhwvtzgqvqGSXID2w5N
+ullK8ny3WRa1o5DLXuMV19CvknmrN/zmmjQLblKkdp9VBb7uo8czon+qL1ZZyywC
+W2BmHfGMPUyQHux4btsdJhlWcS7z7aYXM9QWiKlI+EKLHLILYk+LPIEf85sUcOZV
+eCBpViT7fv2iv/0L+mzjWtLA
+-----END PRIVATE KEY-----
DIR diff --git a/recipes-core/bundles/update-bundle.bb b/recipes-core/bundles/update-bundle.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "RAUC bundle generator"
+
+inherit bundle
+
+RAUC_BUNDLE_COMPATIBLE = "${MACHINE}"
+RAUC_BUNDLE_VERSION = "v20200703"
+RAUC_BUNDLE_DESCRIPTION = "RAUC Demo Bundle"
+
+RAUC_BUNDLE_FORMAT = "verity"
+
+RAUC_BUNDLE_SLOTS = "rootfs"
+RAUC_SLOT_rootfs = "core-image-minimal"
+RAUC_SLOT_rootfs[fstype] = "ext4"
+
+RAUC_KEY_FILE = "${THISDIR}/files/development-1.key.pem"
+RAUC_CERT_FILE = "${THISDIR}/files/development-1.cert.pem"
DIR diff --git a/recipes-core/images/skynet-image.bb b/recipes-core/images/skynet-image.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Skynet OS image with RAUC support"
+
+require recipes-core/images/core-image-minimal.bb
+
+IMAGE_INSTALL:append = " rauc"
+IMAGE_FSTYPES:append = " ext4"
+WKS_FILE = "sdimage-dual-raspberrypi.wks.in"
+
DIR diff --git a/recipes-core/rauc/files/ca.cert.pem b/recipes-core/rauc/files/ca.cert.pem
@@ -0,0 +1,80 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: O=Test Org, CN=Test Org rauc CA Development
+ Validity
+ Not Before: Jan 1 00:00:00 1970 GMT
+ Not After : Dec 31 23:59:59 9999 GMT
+ Subject: O=Test Org, CN=Test Org rauc CA Development
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ RSA Public-Key: (2048 bit)
+ Modulus:
+ 00:c0:fe:7b:6c:c3:e3:47:cc:d4:15:e1:0c:b2:1c:
+ c9:f7:61:3e:42:d7:f1:a4:30:f2:db:0e:49:95:49:
+ 70:ee:97:6d:fe:48:5d:b9:22:63:47:e0:be:63:d7:
+ 68:9b:38:04:7d:7f:d9:65:ef:1d:6c:26:cb:05:7f:
+ 59:45:15:9d:76:59:c4:8d:59:a0:38:a0:25:fa:86:
+ 1b:f4:85:ff:cf:7c:c7:57:a3:7e:56:71:7d:69:c3:
+ 69:a7:fb:e6:8e:bc:f9:49:e2:f5:9a:97:e5:2d:75:
+ ef:f9:76:29:5f:76:11:1b:70:6f:4d:26:4f:e0:06:
+ 9b:8c:e3:76:91:81:4a:4e:98:5d:2e:f4:bd:23:4d:
+ e7:5d:9b:ea:68:4d:03:9e:35:90:c5:f2:8d:ae:ed:
+ 44:4f:f3:50:dc:2b:ef:ae:44:35:79:78:3d:65:4b:
+ d9:16:98:aa:be:08:47:25:af:68:1c:0b:8e:c1:aa:
+ 02:a7:61:4f:4d:15:1b:07:3c:4e:60:b3:9a:d5:c1:
+ 39:34:4e:8e:e7:93:46:f1:75:95:aa:16:9a:1d:e6:
+ 49:15:a5:ae:06:8a:45:16:a9:af:59:60:9b:c6:6d:
+ 3d:19:57:5d:de:31:d5:dc:96:0e:a4:25:fe:7a:07:
+ 71:c5:40:c0:a3:d0:d5:84:47:14:7a:5a:f1:07:75:
+ 79:35
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8
+ X509v3 Authority Key Identifier:
+ keyid:44:0C:AF:4A:74:B4:C7:65:02:B2:95:F1:91:7C:A3:CC:E6:3E:99:E8
+ DirName:/O=Test Org/CN=Test Org rauc CA Development
+ serial:01
+
+ X509v3 Basic Constraints:
+ CA:TRUE
+ Signature Algorithm: sha256WithRSAEncryption
+ 30:07:51:4d:d6:2c:0c:2f:3e:6c:5c:34:1f:07:21:8d:50:77:
+ 9a:a6:81:75:62:f0:fe:ff:3b:5b:d0:7c:d1:45:e7:e2:67:d4:
+ 23:cb:af:9a:8b:f4:2b:d2:33:3d:45:bb:a7:7d:b4:9b:41:db:
+ fb:62:ac:83:fc:41:ae:e5:dc:2d:df:7d:72:7e:df:34:01:60:
+ 94:7f:15:78:84:87:f0:23:e4:8e:b8:dc:71:cb:84:4b:25:bb:
+ 62:8f:fd:7f:d3:3c:1d:85:45:fb:03:7c:a2:bc:c4:a8:fa:2b:
+ ec:79:67:8d:f4:5f:37:a8:5a:54:bc:b3:78:11:0b:8b:29:90:
+ 8b:48:4a:d7:87:93:96:97:72:10:1d:70:29:f8:e4:c3:81:6d:
+ 7d:c3:6e:d4:c8:1b:0b:0d:f9:c0:b9:7b:11:54:e2:af:8b:a0:
+ 45:de:c2:67:81:8c:0c:9d:ba:a1:31:8b:f2:cc:da:c7:cc:6d:
+ 21:92:2a:57:29:9c:48:92:75:d9:1a:6e:d3:ee:53:66:83:2e:
+ 08:74:09:5d:78:13:99:34:7d:16:8c:ba:29:75:80:20:8b:ca:
+ 91:19:29:64:ef:64:37:de:5b:22:18:99:5b:63:69:9a:a2:44:
+ 21:70:30:41:f2:58:27:ab:4f:5c:d0:e1:94:5d:d1:5b:8d:fd:
+ bf:8f:a9:99
+-----BEGIN CERTIFICATE-----
+MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA6MREwDwYDVQQKDAhUZXN0
+IE9yZzElMCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudDAgFw03
+MDAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowOjERMA8GA1UECgwIVGVzdCBP
+cmcxJTAjBgNVBAMMHFRlc3QgT3JnIHJhdWMgQ0EgRGV2ZWxvcG1lbnQwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA/ntsw+NHzNQV4QyyHMn3YT5C1/Gk
+MPLbDkmVSXDul23+SF25ImNH4L5j12ibOAR9f9ll7x1sJssFf1lFFZ12WcSNWaA4
+oCX6hhv0hf/PfMdXo35WcX1pw2mn++aOvPlJ4vWal+Utde/5dilfdhEbcG9NJk/g
+BpuM43aRgUpOmF0u9L0jTeddm+poTQOeNZDF8o2u7URP81DcK++uRDV5eD1lS9kW
+mKq+CEclr2gcC47BqgKnYU9NFRsHPE5gs5rVwTk0To7nk0bxdZWqFpod5kkVpa4G
+ikUWqa9ZYJvGbT0ZV13eMdXclg6kJf56B3HFQMCj0NWERxR6WvEHdXk1AgMBAAGj
+gZQwgZEwHQYDVR0OBBYEFEQMr0p0tMdlArKV8ZF8o8zmPpnoMGIGA1UdIwRbMFmA
+FEQMr0p0tMdlArKV8ZF8o8zmPpnooT6kPDA6MREwDwYDVQQKDAhUZXN0IE9yZzEl
+MCMGA1UEAwwcVGVzdCBPcmcgcmF1YyBDQSBEZXZlbG9wbWVudIIBATAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAwB1FN1iwMLz5sXDQfByGNUHeapoF1
+YvD+/ztb0HzRRefiZ9Qjy6+ai/Qr0jM9RbunfbSbQdv7YqyD/EGu5dwt331yft80
+AWCUfxV4hIfwI+SOuNxxy4RLJbtij/1/0zwdhUX7A3yivMSo+ivseWeN9F83qFpU
+vLN4EQuLKZCLSErXh5OWl3IQHXAp+OTDgW19w27UyBsLDfnAuXsRVOKvi6BF3sJn
+gYwMnbqhMYvyzNrHzG0hkipXKZxIknXZGm7T7lNmgy4IdAldeBOZNH0WjLopdYAg
+i8qRGSlk72Q33lsiGJlbY2maokQhcDBB8lgnq09c0OGUXdFbjf2/j6mZ
+-----END CERTIFICATE-----
DIR diff --git a/recipes-core/rauc/files/rauc-grow-data-partition.service b/recipes-core/rauc/files/rauc-grow-data-partition.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Service to grow data partition size
+DefaultDependencies=no
+Before=home.mount
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/sbin/parted --script /dev/mmcblk0 resizepart 4 100%
+ExecStart=/usr/sbin/parted --script /dev/mmcblk0 resizepart 6 100%
+
+[Install]
+WantedBy=home.mount
DIR diff --git a/recipes-core/rauc/files/system.conf b/recipes-core/rauc/files/system.conf
@@ -0,0 +1,17 @@
+[system]
+compatible=@@MACHINE@@
+bootloader=uboot
+data-directory=/data/
+
+[keyring]
+path=/etc/rauc/ca.cert.pem
+
+[slot.rootfs.0]
+device=/dev/mmcblk0p2
+type=ext4
+bootname=A
+
+[slot.rootfs.1]
+device=/dev/mmcblk0p3
+type=ext4
+bootname=B
DIR diff --git a/recipes-core/rauc/rauc-conf.bbappend b/recipes-core/rauc/rauc-conf.bbappend
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+SRC_URI:append := " file://ca.cert.pem "
+
+do_install:prepend() {
+ sed -i "s/@@MACHINE@@/${MACHINE}/g" ${WORKDIR}/system.conf
+}
DIR diff --git a/recipes-core/rauc/rauc_%.bbapend b/recipes-core/rauc/rauc_%.bbapend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+SRC_URI:append := " \
+ file://rauc-grow-data-partition.service \
+"
+
+# additional dependencies required to run RAUC on the target
+RDEPENDS:${PN} += "u-boot-fw-utils u-boot-env"
+
+inherit systemd
+
+SYSTEMD_PACKAGES += "${PN}-grow-data-part"
+SYSTEMD_SERVICE:${PN}-grow-data-part = "rauc-grow-data-partition.service"
+
+PACKAGES += "rauc-grow-data-part"
+
+RDEPENDS:${PN}-grow-data-part += "parted"
+
+do_install:append() {
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/rauc-grow-data-partition.service ${D}${systemd_unitdir}/system/
+}
DIR diff --git a/recipes-core/udev/files/raspberrypi-rauc.rules b/recipes-core/udev/files/raspberrypi-rauc.rules
@@ -0,0 +1,3 @@
+/dev/mmcblk0p1
+/dev/mmcblk0p2
+/dev/mmcblk0p3
DIR diff --git a/recipes-core/udev/udev-extraconf_%.bbapend b/recipes-core/udev/udev-extraconf_%.bbapend
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/files:"
+SRC_URI:append:rpi = " file://raspberrypi-rauc.rules"
+
+do_install:append:rpi() {
+ install -m 0644 ${WORKDIR}/raspberrypi-rauc.rules ${D}${sysconfdir}/udev/mount.blacklist.d/
+}
DIR diff --git a/recipes-kernel/linux/files/rauc.cfg b/recipes-kernel/linux/files/rauc.cfg
@@ -0,0 +1,8 @@
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_DM_VERITY=y
+CONFIG_SQUASHFS=y
+CONFIG_CRYPTO_SHA256=y
+# For bundle streaming
+CONFIG_BLK_DEV_NBD=y
DIR diff --git a/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/recipes-kernel/linux/linux-raspberrypi_%.bbappend
@@ -0,0 +1,6 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+inherit rauc-integration
+
+SRC_URI:append:rauc-integration = " file://rauc.cfg"
+CMDLINE:remove:rauc-integration = "root=/dev/mmcblk0p2"
DIR diff --git a/wic/sdimage-dual-raspberrypi.wks.in b/wic/sdimage-dual-raspberrypi.wks.in
@@ -0,0 +1,5 @@
+part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4096 --size 100
+part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label rootfs_A --align 4096
+part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label rootfs_B --align 4096
+part /data --fixed-size 100M --ondisk mmcblk0 --fstype=ext4 --label data --align 4096
+part /home --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/home --ondisk mmcblk0 --fstype=ext4 --label homefs --align 1024 --size 500 --fsoptions "x-systemd.growfs"