2021/2/3

mender.io code reading...

都是用 go 寫的。
和 bootloader (uboot) 溝通(作用)部份,是 installer/bootenv.go
用的是 uboot 的 userland tools:
  • fw_printenv
  • fw_setenv
  • /etc/fw_env.config
用在WriteEnv( )上,而使用 WriteEnv 的。就只有 dual_rootfs_device.go
CommitUpdate()
Rollback()
InstallUpdate()
配合官方的 state-scripts 文件來看..
-- state script 就是mender 提供的 callback function,mender 把狀態分為 9 個狀態。然後每個狀太的 enter, leave 都會 call 對應名稱的 shell script

有關 root filesystem 的 script,例如 retrain-ssh-keys,就是把新 root partition mount 近來,然後把目前 root fs 的 key date copy 過去。
然後 script 的開頭...
current=$(/sbin/fw_printenv mender_boot_part | awk -F = '{ print $2 }')

if [ $current = "2" ]; then
    newroot=/dev/mmcblk0p3
elif [ $current = "3" ]; then
    newroot=/dev/mmcblk0p2
else
    echo "Unexpected current root: $current" >&2
    exit 1
fi
從 uboot 的 env 知道目前的 boot partition,然後令一個就是 update partition

沒有留言:

張貼留言