Skip to main content

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.

GUI ya kivinjari cha wavuti kwa SWUpdate

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

  1. 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.
  2. 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:

  1. Anzisha CM5 kwenye mfumo wa uokoaji.
  2. Unda sehemu ya mlima, kwa mfano:
sudo mkdir -p /mnt/update
  1. Weka hisa ya NFS iliyo na faili ya sasisho:
sudo mount -t nfs :/path/to/share /mnt/update
  1. Tumia sasisho:
sudo swupdate -i /mnt/update/update.swu

Uwezekano 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.