Make machine-id persist (#649)

* Make machine-id persist

* update

* Adjustments

* cleanup

* fix cleanups

* small cleanup
This commit is contained in:
Pascal Vizeli 2020-05-04 15:11:43 +02:00 committed by GitHub
parent 15a80bb405
commit db184bf5d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 87 additions and 71 deletions

View File

@ -8,7 +8,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x8000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x8000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
mmc write ${ramdisk_addr_r} ${mmc_env} 0x40;"
run loadbootstate
@ -17,11 +17,11 @@ test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro"
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 rootfstype=squashfs ro"
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro rootwait"
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 rootfstype=squashfs ro rootwait"
# Load extraargs
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline

View File

@ -10,7 +10,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
mmc write ${ramdisk_addr_r} ${mmc_env} 0x10;"
run loadbootstate
@ -27,7 +27,7 @@ if test "${m}" = "custombuilt"; then setenv cmode "modeline=${modeline}"; fi
setenv bootargs_odroidc2 "no_console_suspend hdmimode=${m} ${cmode} m_bpp=${m_bpp} vout=${vout} net.ifnames=0 elevator=noop disablehpd=${hpd} max_freq=${max_freq} maxcpus=${maxcpus} monitor_onoff=${monitor_onoff} disableuhs=${disableuhs} mmc_removable=${mmc_removable} usbmulticam=${usbmulticam}"
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor cgroup_enable=memory"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"

View File

@ -10,7 +10,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
mmc write ${ramdisk_addr_r} ${mmc_env} 0x10;"
run loadbootstate
@ -29,7 +29,7 @@ if test "${hdmimode}" = "custombuilt"; then setenv cmode "modeline=${modeline}";
setenv bootargs_odroidn2 "clk_ignore_unused hdmimode=${hdmimode} cvbsmode=576cvbs max_freq_a53=${max_freq_a53} max_freq_a73=${max_freq_a73} maxcpus=${maxcpus} ${cmode} voutmode=${voutmode} disablehpd=${disablehpd} overscan=${overscan}"
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor cgroup_enable=memory"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"

View File

@ -12,7 +12,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
mmc write ${ramdisk_addr_r} ${mmc_env} 0x20;"
run loadbootstate
@ -33,7 +33,7 @@ if test "${external_watchdog}" = "true"; then setenv external_watchdog "external
setenv bootargs_odroidxu4 "${videoconfig} ${hdmi_phy_control} ${hid_quirks} smsc95xx.macaddr=${macaddr} ${external_watchdog}"
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor cgroup_enable=memory"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"

View File

@ -8,7 +8,7 @@ function hassos_pre_image() {
mkdir -p "${BOOT_DATA}/EFI/barebox"
cp "${BINARIES_DIR}/barebox.bin" "${BOOT_DATA}/EFI/BOOT/BOOTx64.EFI"
cp "${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb" "${BOOT_DATA}/EFI/barebox/state.dtb"
cp "${BR2_EXTERNAL_HASSOS_PATH}/bootloader/barebox-state-efi.dtb" "${BOOT_DATA}/EFI/barebox/state.dtb"
echo "console=tty1" > "${BOOT_DATA}/cmdline.txt"
}

View File

@ -8,7 +8,7 @@ function hassos_pre_image() {
mkdir -p "${BOOT_DATA}/EFI/barebox"
cp "${BINARIES_DIR}/barebox.bin" "${BOOT_DATA}/EFI/BOOT/BOOTx64.EFI"
cp "${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb" "${BOOT_DATA}/EFI/barebox/state.dtb"
cp "${BR2_EXTERNAL_HASSOS_PATH}/bootloader/barebox-state-efi.dtb" "${BOOT_DATA}/EFI/barebox/state.dtb"
echo "console=tty1" > "${BOOT_DATA}/cmdline.txt"
}

View File

@ -9,7 +9,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
${devtype} write ${ramdisk_addr_r} ${dev_env} 0x20;"
run loadbootstate
@ -18,7 +18,7 @@ test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait cgroup_enable=memory"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro"

View File

@ -9,7 +9,7 @@ setenv loadbootstate " \
setenv storebootstate " \
echo 'storing env...'; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT; \
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
${devtype} write ${ramdisk_addr_r} ${dev_env} 0x20;"
run loadbootstate
@ -18,7 +18,7 @@ test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
# HassOS bootargs
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait cgroup_enable=memory"
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait systemd.machine_id=${MACHINE_ID} cgroup_enable=memory"
# HassOS system A/B
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro"

View File

@ -8,11 +8,12 @@
state: state {
#address-cells = <1>;
#size-cells = <1>;
magic = <0xef98423f>;
compatible = "barebox,state";
backend = <&backend_state>;
backend-type = "raw";
backend-stridesize = <4048>;
magic = <0xef98423f>;
compatible = "barebox,state";
backend = <&backend_state>;
backend-type = "raw";
backend-stridesize = <4048>;
bootstate {
#address-cells = <1>;
@ -32,6 +33,7 @@
default = <20>;
};
};
B {
#address-cells = <1>;
#size-cells = <1>;
@ -46,11 +48,18 @@
default = <10>;
};
};
last_chosen@10 {
reg = <0x10 0x4>;
type = "uint32";
};
};
machine_id@14 {
reg = <0x14 0x24>;
type = "string";
default = "";
};
};
partitions {

View File

@ -3,3 +3,4 @@
global linux.bootargs.zram="zram.enabled=1 zram.num_devices=3"
global linux.bootargs.apparmor="apparmor=1 security=apparmor"
global linux.bootargs.misc="rootwait"
global linux.bootargs.systemd="systemd.machine_id=${state.machine_id}"

View File

@ -31,8 +31,5 @@ fi
##
# Fixups
# Rename CLI Hass.io
sed -i "s/hassio:172.30.32.2/supervisor:172.30.32.2/g" /mnt/data/hassos.json
exit 0

View File

@ -1,5 +1,3 @@
[Journal]
Storage=auto
Compress=yes
SystemMaxUse=12M
RuntimeMaxUse=10M

View File

@ -1 +0,0 @@
/usr/lib/systemd/system/hassos-persists-journald.service

View File

@ -0,0 +1 @@
/usr/lib/systemd/system/hassos-persists.service

View File

@ -1,2 +1,2 @@
d /mnt/data/supervisor
d /mnt/data/cli
d /mnt/data/supervisor - root root -
R /mnt/data/cli - - - -

View File

@ -1,3 +1,3 @@
# Cleanup lease files
e /var/lib/NetworkManager/*.lease - - - 14d
f /run/resolv.conf - - - -
f /run/resolv.conf - root root -

View File

@ -0,0 +1 @@
R /mnt/overlay/var/log/journal - - - -

View File

@ -1,14 +0,0 @@
[Unit]
Description=HassOS persists journald
Requires=var-log-journal.mount
After=sysinit.target systemd-journald.service
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
ExecStart=/usr/libexec/hassos-persists-journald
RemainAfterExit=true
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,13 @@
[Unit]
Description=HassOS persists data on bootstate
After=sysinit.target
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
ExecStart=/usr/libexec/hassos-persists
RemainAfterExit=true
[Install]
WantedBy=multi-user.target

View File

@ -1,11 +1,11 @@
[Unit]
Description=Systemd persistent logging
Requires=mnt-overlay.mount
After=mnt-overlay.mount
Requires=mnt-data.mount
After=mnt-data.mount
Before=systemd-journal-flush.service
[Mount]
What=/mnt/overlay/var/log/journal
What=/mnt/data/logs
Where=/var/log/journal
Type=None
Options=bind

View File

@ -0,0 +1,30 @@
#!/bin/sh
set -e
MACHINE_ID=$(cat /etc/machine-id)
###
# u-boot
if [ -e /usr/sbin/fw_setenv ]; then
# machine-id
if [ "$(fw_printenv -n MACHINE_ID)" != "${MACHINE_ID}" ]; then
echo "[info] set machine-id to ${MACHINE_ID}"
fw_setenv MACHINE_ID "${MACHINE_ID}"
else
echo "[info] machine-id is okay"
fi
###
# Barebox
else
# machine-id
if [ "$(barebox-state -g state.machine_id -i /etc/barebox-state.dtb)" != "${MACHINE_ID}" ]; then
echo "[info] set machine-id to ${MACHINE_ID}"
barebox-state -s "state.machine_id=${MACHINE_ID}" -i /etc/barebox-state.dtb
else
echo "[info] machine-id is okay"
fi
fi

View File

@ -1,19 +0,0 @@
#!/bin/sh
set -e
MACHINE_ID=$(cat /etc/machine-id)
# Loop all logs folder and move
for log_folder in /var/log/journal/*; do
# Not a log folder
if [ ! -d "${log_folder}" ]; then
continue
fi
# Current log folder
if (echo "${log_folder}" | grep "${MACHINE_ID}"); then
continue
fi
rm -rf "${log_folder}"
done

View File

@ -269,7 +269,7 @@ function _fix_disk_hyprid() {
local hdd_img="$(hassos_image_name img)"
sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" "${hdd_img}"
dd if="${BR2_EXTERNAL_HASSOS_PATH}/misc/mbr.img" of="${hdd_img}" conv=notrunc bs=512 count=1
dd if="${BR2_EXTERNAL_HASSOS_PATH}/bootloader/mbr.img" of="${hdd_img}" conv=notrunc bs=512 count=1
}
@ -278,7 +278,7 @@ function _fix_disk_spl_gpt() {
local spl_img="$(path_spl_img)"
sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" "${hdd_img}"
dd if="${BR2_EXTERNAL_HASSOS_PATH}/misc/mbr-spl.img" of="${hdd_img}" conv=notrunc bs=512 count=1
dd if="${BR2_EXTERNAL_HASSOS_PATH}/bootloader/mbr-spl.img" of="${hdd_img}" conv=notrunc bs=512 count=1
dd if="${spl_img}" of="${hdd_img}" conv=notrunc bs=512 seek=2 skip=2
}

View File

@ -81,12 +81,12 @@ function install_bootloader_config() {
# shellcheck disable=SC1117
echo -e "/dev/disk/by-partlabel/hassos-bootstate\t0x0000\t${BOOT_ENV_SIZE}" > "${TARGET_DIR}/etc/fw_env.config"
else
cp -f "${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb" "${TARGET_DIR}/etc/barebox-state.dtb"
cp -f "${BR2_EXTERNAL_HASSOS_PATH}/bootloader/barebox-state-efi.dtb" "${TARGET_DIR}/etc/barebox-state.dtb"
fi
# Fix MBR
if [ "${BOOT_SYS}" == "mbr" ]; then
mkdir -p "${TARGET_DIR}/usr/lib/udev/rules.d"
cp -f "${BR2_EXTERNAL_HASSOS_PATH}/misc/mbr-part.rules" "${TARGET_DIR}/usr/lib/udev/rules.d/"
cp -f "${BR2_EXTERNAL_HASSOS_PATH}/bootloader/mbr-part.rules" "${TARGET_DIR}/usr/lib/udev/rules.d/"
fi
}

View File

@ -1,5 +1,5 @@
#!/bin/sh
## OVA
dtc -@ -I dts -O dtb -o buildroot-external/misc/barebox-state-efi.dtb buildroot-external/misc/barebox-state-efi.dts
dtc -@ -I dts -O dtb -o buildroot-external/bootloader/barebox-state-efi.dtb buildroot-external/bootloader/barebox-state-efi.dts