Kwa nini SWUpdate?
Sasisho za shamba haziepukiki. SWUpdate hutoa suluhisho thabiti, la kawaida la kusasisha firmware, mifumo ya faili ya mizizi, na tabaka za programu - zote zikiwa na uwezo wa kurejesha uliojengewa ndani.
Ni chanzo wazi, imeandikwa vizuri, na inaunganishwa bila mshono na mpangilio wa kizigeu cha A / B.
Muhtasari wa usanifu
SWUpdate ina vipengele kadhaa muhimu:
- Sasisha daemon (swupdate) - inaendesha kwenye kifaa na kutumia sasisho
- Sasisha washughulikiaji - fafanua nini cha kusasisha (rootfs, faili, hati, nk)
- Miingiliano ya mteja - kiolesura cha wavuti, API ya REST, au CLI ya ndani
- sw-description faili - inafafanua muundo na mantiki ya kifurushi cha sasisho
Mfano wa mtiririko wa sasisho
- Jenga kifurushi cha sasisho (.swu) ambacho kina:
• Picha mpya ya mfumo wa faili ya mizizi
• Faili ya sw-description
• Hati za hiari (kwa ubinafsishaji au uthibitishaji)
2.swupdate anaandika sasisho kwa vifaa vilivyoainishwa. - Hati ya baada ya kusasisha inathibitisha mafanikio au huchochea urejeshaji ikiwa ni lazima.
Mfano
Katika mfano huu, tuligawanya picha rasmi ya Raspberry Pi OS Trixie katika faili mbili:
- 2025-10-01-raspios-trixie-arm64.boot.vfat
- 2025-10-01-raspios-trixie-arm64.root.ext4
Faili hizi zinarejelewa katika faili ya sw-description ili kuunda kifurushi cha .swu:
software =
{
version = "0.1.0";
description = "Firmware update for XXXXX Project";
hardware-compatibility: [ "1.0", "1.2", "1.3"];
images: (
{
filename = "2025-10-01-raspios-trixie-arm64.boot.vfat";
device = "/dev/mmcblk0p1";
compressed = "zlib";
installed-directly = true;
},
{
filename = "2025-10-01-raspios-trixie-arm64.root.ext4";
device = "/dev/mmcblk0p2";
compressed = "zlib";
installed-directly = true;
}
);
scripts: (
{
type: "lua",
filename: "repair-disk-uuid.lua"
}
),
}Hati ifuatayo ya Lua hurekebisha UUID za kizigeu katika cmdline.txt na fstab baada ya kuwaka:
#!/usr/bin/lua
-- helper: run shell command and capture output
function run(cmd)
local f = io.popen(cmd)
local out = f:read("*a")
f:close()
return (out:gsub("%s+$", ""))
end
-- detect PARTUUIDs
local root_part = "/dev/mmcblk0p2"
local boot_part = "/dev/mmcblk0p1"
local root_uuid = run("blkid -s PARTUUID -o value " .. root_part)
local boot_uuid = run("blkid -s PARTUUID -o value " .. boot_part)
print("Rootfs PARTUUID: " .. root_uuid)
print("Boot PARTUUID: " .. boot_uuid)
-- mount points
os.execute("mkdir -p /mnt/root /mnt/boot")
os.execute("mount " .. root_part .. " /mnt/root")
os.execute("mount " .. boot_part .. " /mnt/boot")
-- update cmdline.txt
local cmdline_path = "/mnt/boot/cmdline.txt"
local file = io.open(cmdline_path, "r")
local text = file:read("*a")
file:close()
text = text:gsub("root=PARTUUID=[^ ]+", "root=PARTUUID=" .. root_uuid)
file = io.open(cmdline_path, "w")
file:write(text)
file:close()
-- update /etc/fstab
local fstab_path = "/mnt/root/etc/fstab"
local fstab = io.open(fstab_path, "r")
local content = fstab:read("*a")
fstab:close()
-- replace root line
content = content:gsub("PARTUUID=[^%s]+%s+/%s", "PARTUUID=" .. root_uuid .. " /")
-- replace boot line (/boot or /boot/firmware)
content = content:gsub("PARTUUID=[^%s]+%s+/boot", "PARTUUID=" .. boot_uuid .. " /boot")
fstab = io.open(fstab_path, "w")
fstab:write(content)
fstab:close()
os.execute("sync")
os.execute("umount /mnt/boot")
os.execute("umount /mnt/root")
print("All PARTUUIDs updated successfully.")Tumia swugenerator kuunganisha sasisho:(https://github.com/sbabic/swugenerator).
Tumia sasisho
Ili kujaribu faili ya .swu inayozalishwa:
- Anzisha CM5 kwenye mfumo wa uokoaji.
- Unda sehemu ya mlima, kwa mfano:
sudo mkdir -p /mnt/update- Weka hisa ya NFS iliyo na faili ya sasisho:
sudo mount -t nfs :/path/to/share /mnt/update- Tumia sasisho:
sudo swupdate -i /mnt/update/update.swuUwezekano wa ujumuishaji
Anzisha sasisho kutoka kwa UI ya ndani au API ya nyuma
- Saini na uthibitishe masasisho kwa usalama ulioimarishwa
- Tumia kiolesura SWUpdate’s wavuti kwa majaribio au utatuzi
- Changanya na huduma za systemd ili kugeuza urejeshaji na urejeshaji kiotomatiki
Kwa nini inafaa stack hii
Pamoja na rpi-image-gen na rpi-sb-provisioner, SWUpdate inakamilisha picha:
- Jenga → rpi-image-gen (Uundaji wa picha)
- Tuma → rpi-sb-provisioner (Utoaji wa kifaa)
- Dumisha → SWUpdate (sasisho za OTA na usimamizi wa mzunguko wa maisha)
Matokeo yake ni jukwaa la Linux linaloweza kubadilika, lililo wazi na linaloweza kudumishwa - ambalo hubadilika na bidhaa yako, bila kichwa cha juu cha Yocto.
Makala katika mfululizo huu
- Kujenga Linux Tayari kwa Uzalishaji kwa Raspberry Pi Compute Module 5
- Kutoka kwa OS ya hisa hadi jukwaa la uzalishaji
- Kubinafsisha Raspberry Pi OS na rpi-image-gen
- Uimara wa Mfumo - Kubuni Mpangilio wa Mfumo wa Faili wa Mizizi ya A/B
- Utoaji - Kuweka Kiotomatiki Boot ya Kwanza na rpi-sb-provisioner
- OTA na Lifecycle - Sasisho za Programu na SWUpdate
Vyanzo
- rpi-image-gen: https://github.com/raspberrypi/rpi-image-gen
- rpi-sb-provisioner: https://github.com/raspberrypi/rpi-sb-provisioner
- SWUpdate: https://github.com/sbabic/swupdate
- swugenerator: https://github.com/sbabic/swugenerator