summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--classes/image_types_ostree.bbclass48
-rw-r--r--classes/image_types_ota.bbclass4
-rw-r--r--classes/sota_raspberrypi.bbclass5
-rw-r--r--recipes-sota/aktualizr/aktualizr_git.bb32
-rw-r--r--recipes-sota/aktualizr/files/aktualizr-manual-provision.service13
-rw-r--r--recipes-sota/rvi-sota-client/rvi-sota-client_git.bb16
6 files changed, 91 insertions, 27 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass
index 59d4510..2a74e51 100644
--- a/classes/image_types_ostree.bbclass
+++ b/classes/image_types_ostree.bbclass
@@ -3,6 +3,7 @@
3inherit image 3inherit image
4 4
5IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ 5IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \
6 openssl-native:do_populate_sysroot \
6 virtual/kernel:do_deploy \ 7 virtual/kernel:do_deploy \
7 ${OSTREE_INITRAMFS_IMAGE}:do_image_complete" 8 ${OSTREE_INITRAMFS_IMAGE}:do_image_complete"
8 9
@@ -16,6 +17,36 @@ OSTREE_KERNEL ??= "${KERNEL_IMAGETYPE}"
16 17
17export SYSTEMD_USED = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', '', d)}" 18export SYSTEMD_USED = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', '', d)}"
18 19
20python () {
21 if d.getVar("SOTA_PACKED_CREDENTIALS", True):
22 if d.getVar("SOTA_AUTOPROVISION_CREDENTIALS", True):
23 bb.warn("SOTA_AUTOPROVISION_CREDENTIALS are overriden by those in SOTA_PACKED_CREDENTIALS")
24 if d.getVar("SOTA_AUTOPROVISION_URL", True):
25 bb.warn("SOTA_AUTOPROVISION_URL is overriden by the one in SOTA_PACKED_CREDENTIALS")
26
27 if d.getVar("SOTA_AUTOPROVISION_URL_FILE", True):
28 bb.warn("SOTA_AUTOPROVISION_URL_FILE is overriden by the one in SOTA_PACKED_CREDENTIALS")
29
30 if d.getVar("OSTREE_PUSH_CREDENTIALS", True):
31 bb.warn("OSTREE_PUSH_CREDENTIALS are overriden by those in SOTA_PACKED_CREDENTIALS")
32
33 d.setVar("SOTA_AUTOPROVISION_CREDENTIALS", "%s/sota_credentials/autoprov_credentials.p12" % d.getVar("DEPLOY_DIR_IMAGE", True))
34 d.setVar("SOTA_AUTOPROVISION_URL_FILE", "%s/sota_credentials/autoprov.url" % d.getVar("DEPLOY_DIR_IMAGE", True))
35 d.setVar("OSTREE_PUSH_CREDENTIALS", "%s/sota_credentials/treehub.json" % d.getVar("DEPLOY_DIR_IMAGE", True))
36}
37
38IMAGE_DEPENDS_ostreecredunpack = "unzip-native:do_populate_sysroot"
39
40IMAGE_CMD_ostreecredunpack () {
41 if [ ${SOTA_PACKED_CREDENTIALS} ]; then
42 rm -rf ${DEPLOY_DIR_IMAGE}/sota_credentials
43
44 unzip ${SOTA_PACKED_CREDENTIALS} -d ${DEPLOY_DIR_IMAGE}/sota_credentials
45 fi
46}
47
48IMAGE_TYPEDEP_ostree = "ostreecredunpack"
49
19IMAGE_CMD_ostree () { 50IMAGE_CMD_ostree () {
20 if [ -z "$OSTREE_REPO" ]; then 51 if [ -z "$OSTREE_REPO" ]; then
21 bbfatal "OSTREE_REPO should be set in your local.conf" 52 bbfatal "OSTREE_REPO should be set in your local.conf"
@@ -114,6 +145,23 @@ IMAGE_CMD_ostree () {
114 ln -sf var/roothome root 145 ln -sf var/roothome root
115 fi 146 fi
116 147
148 # deploy SOTA credentials
149 if [ -n "${SOTA_AUTOPROVISION_CREDENTIALS}" ]; then
150 EXPDATE=`openssl pkcs12 -in ${SOTA_AUTOPROVISION_CREDENTIALS} -password "pass:" -nodes 2>/dev/null | openssl x509 -noout -enddate | cut -f2 -d "="`
151
152 if [ `date +%s` -ge `date -d "${EXPDATE}" +%s` ]; then
153 bberror "Certificate ${SOTA_AUTOPROVISION_CREDENTIALS} has expired on ${EXPDATE}"
154 fi
155
156 mkdir -p var/sota
157 cp ${SOTA_AUTOPROVISION_CREDENTIALS} var/sota/sota_provisioning_credentials.p12
158 if [ -n "${SOTA_AUTOPROVISION_URL_FILE}" ]; then
159 export SOTA_AUTOPROVISION_URL=`cat ${SOTA_AUTOPROVISION_URL_FILE}`
160 fi
161 echo "SOTA_GATEWAY_URI=${SOTA_AUTOPROVISION_URL}" > var/sota/sota_provisioning_url.env
162 fi
163
164
117 # Creating boot directories is required for "ostree admin deploy" 165 # Creating boot directories is required for "ostree admin deploy"
118 166
119 mkdir -p boot/loader.0 167 mkdir -p boot/loader.0
diff --git a/classes/image_types_ota.bbclass b/classes/image_types_ota.bbclass
index cb71899..8108d51 100644
--- a/classes/image_types_ota.bbclass
+++ b/classes/image_types_ota.bbclass
@@ -98,7 +98,11 @@ IMAGE_CMD_otaimg () {
98 HOME_TMP=`mktemp -d ${WORKDIR}/home-tmp-XXXXX` 98 HOME_TMP=`mktemp -d ${WORKDIR}/home-tmp-XXXXX`
99 tar --xattrs --xattrs-include='*' -C ${HOME_TMP} -xf ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2 ./usr/homedirs ./var/sota || true 99 tar --xattrs --xattrs-include='*' -C ${HOME_TMP} -xf ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2 ./usr/homedirs ./var/sota || true
100 mv ${HOME_TMP}/var/sota ${PHYS_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/ || true 100 mv ${HOME_TMP}/var/sota ${PHYS_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/ || true
101 # Create /var/sota if it doesn't exist yet
102 mkdir -p ${PHYS_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/sota || true
101 mv ${HOME_TMP}/usr/homedirs/home ${PHYS_SYSROOT}/ || true 103 mv ${HOME_TMP}/usr/homedirs/home ${PHYS_SYSROOT}/ || true
104 # Ensure that /var/local exists (AGL symlinks /usr/local to /var/local)
105 install -d ${PHYS_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/local
102 rm -rf ${HOME_TMP} 106 rm -rf ${HOME_TMP}
103 107
104 # Calculate image type 108 # Calculate image type
diff --git a/classes/sota_raspberrypi.bbclass b/classes/sota_raspberrypi.bbclass
index 7b67c0f..b6cf639 100644
--- a/classes/sota_raspberrypi.bbclass
+++ b/classes/sota_raspberrypi.bbclass
@@ -1,10 +1,7 @@
1IMAGE_CLASSES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'image_types_uboot sdcard_image-rpi-ota', '', d)}" 1IMAGE_CLASSES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'image_types_uboot sdcard_image-rpi-ota', '', d)}"
2IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'rpi-sdimg-ota', 'rpi-sdimg', d)}" 2IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'rpi-sdimg-ota', 'rpi-sdimg', d)}"
3 3
4### both rpi-sdimg and rpi-sdimg-ota broken 4IMAGE_FSTYPES_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'wic rpi-sdimg', '', d)}"
5IMAGE_FSTYPES += "ext4.xz ext4.bmap tar.xz"
6
7IMAGE_FSTYPES_remove = "wic"
8 5
9KERNEL_IMAGETYPE_sota = "uImage" 6KERNEL_IMAGETYPE_sota = "uImage"
10PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" 7PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot"
diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb
index e8a1a5e..fa71af8 100644
--- a/recipes-sota/aktualizr/aktualizr_git.bb
+++ b/recipes-sota/aktualizr/aktualizr_git.bb
@@ -2,24 +2,38 @@ SUMMARY = "Aktualizr SOTA Client"
2DESCRIPTION = "SOTA Client application written in C++" 2DESCRIPTION = "SOTA Client application written in C++"
3HOMEPAGE = "https://github.com/advancedtelematic/aktualizr" 3HOMEPAGE = "https://github.com/advancedtelematic/aktualizr"
4SECTION = "base" 4SECTION = "base"
5
6LICENSE = "MPL-2.0" 5LICENSE = "MPL-2.0"
7LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=9741c346eef56131163e13b9db1241b3" 6LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=9741c346eef56131163e13b9db1241b3"
7DEPENDS = "boost curl openssl jansson libsodium ostree"
8SRCREV = "4e9344ae375a444f02b964dca52fe808010d17df"
9PV = "1.0+git${SRCPV}"
8 10
9inherit cmake systemd 11SRC_URI = " \
12 git://github.com/advancedtelematic/aktualizr \
13 file://aktualizr-manual-provision.service \
14 "
10 15
11S = "${WORKDIR}/git" 16S = "${WORKDIR}/git"
12PV = "1.0+git${SRCPV}" 17SYSTEMD_SERVICE_${PN} = "aktualizr.service"
13 18
14SRCREV = "4e9344ae375a444f02b964dca52fe808010d17df" 19inherit cmake systemd
15 20
16SRC_URI = "git://github.com/advancedtelematic/aktualizr" 21EXTRA_OECMAKE = "-DWARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_OSTREE=ON"
17 22
18DEPENDS = "boost curl openssl jansson libsodium ostree" 23export SOTA_AUTOPROVISION_CREDENTIALS
19RDEPENDS = ""
20 24
21EXTRA_OECMAKE = "-DWARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_OSTREE=ON" 25do_install_append() {
26 if [ -n "$SOTA_AUTOPROVISION_CREDENTIALS" ]; then
27 bbwarn "Aktualizr recipe currently lacks support for SOTA_AUTOPROVISION_CREDENTIALS. No systemd service will be created"
28 else
29 install -d ${D}/${systemd_unitdir}/system
30 install -m 0644 ${WORKDIR}/aktualizr-manual-provision.service ${D}/${systemd_unitdir}/system/aktualizr.service
31 fi
32}
33
34RDEPENDS = ""
22 35
23FILES_${PN} = " \ 36FILES_${PN} = " \
24 ${bindir}/aktualizr \ 37 ${bindir}/aktualizr \
25 " 38 ${systemd_unitdir}/system/aktualizr.service \
39 "
diff --git a/recipes-sota/aktualizr/files/aktualizr-manual-provision.service b/recipes-sota/aktualizr/files/aktualizr-manual-provision.service
new file mode 100644
index 0000000..a70f2f9
--- /dev/null
+++ b/recipes-sota/aktualizr/files/aktualizr-manual-provision.service
@@ -0,0 +1,13 @@
1[Unit]
2Description=Aktualizr SOTA Client
3Wants=network-online.target
4After=network.target network-online.target
5Requires=network-online.target
6
7[Service]
8RestartSec=10
9Restart=always
10ExecStart=/usr/bin/aktualizr --config /sysroot/boot/sota.toml --loglevel 2
11
12[Install]
13WantedBy=multi-user.target
diff --git a/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb b/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb
index 9a3dbf9..9ba11ea 100644
--- a/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb
+++ b/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb
@@ -153,6 +153,7 @@ RDEPENDS_${PN} = " libcrypto \
153 python-json \ 153 python-json \
154 " 154 "
155 155
156export SOTA_PACKED_CREDENTIALS
156export SOTA_AUTOPROVISION_CREDENTIALS 157export SOTA_AUTOPROVISION_CREDENTIALS
157export SOTA_AUTOPROVISION_URL 158export SOTA_AUTOPROVISION_URL
158 159
@@ -171,7 +172,7 @@ do_install() {
171 172
172 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then 173 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
173 install -d ${D}/${systemd_unitdir}/system 174 install -d ${D}/${systemd_unitdir}/system
174 if [ -n "$SOTA_AUTOPROVISION_CREDENTIALS" ]; then 175 if [ -n "$SOTA_AUTOPROVISION_CREDENTIALS" -o -n "$SOTA_PACKED_CREDENTIALS" ]; then
175 install -c ${S}/run/sota_client_uptane_auto.service ${D}${systemd_unitdir}/system/sota_client.service 176 install -c ${S}/run/sota_client_uptane_auto.service ${D}${systemd_unitdir}/system/sota_client.service
176 else 177 else
177 install -c ${S}/run/sota_client_ostree.service ${D}${systemd_unitdir}/system/sota_client.service 178 install -c ${S}/run/sota_client_ostree.service ${D}${systemd_unitdir}/system/sota_client.service
@@ -184,17 +185,4 @@ do_install() {
184 install -c ${S}/run/sota_certificates ${D}${sysconfdir} 185 install -c ${S}/run/sota_certificates ${D}${sysconfdir}
185 ln -fs /lib ${D}/lib64 186 ln -fs /lib ${D}/lib64
186 187
187 if [ -n "$SOTA_AUTOPROVISION_CREDENTIALS" ]; then
188 EXPDATE=`openssl pkcs12 -in $SOTA_AUTOPROVISION_CREDENTIALS -password "pass:" -nodes 2>/dev/null | openssl x509 -noout -enddate | cut -f2 -d "="`
189
190 if [ `date +%s` -ge `date -d "${EXPDATE}" +%s` ]; then
191 bberror "Certificate ${SOTA_AUTOPROVISION_CREDENTIALS} has expired on ${EXPDATE}"
192 fi
193
194 install -d ${D}/var
195 install -d ${D}/var/sota
196 install -m 0655 $SOTA_AUTOPROVISION_CREDENTIALS ${D}/var/sota/sota_provisioning_credentials.p12
197 echo "SOTA_GATEWAY_URI=$SOTA_AUTOPROVISION_URL" > ${D}/var/sota/sota_provisioning_url.env
198 fi
199
200} 188}