Skip to main content

Neden SWUpdate?

Saha güncellemeleri kaçınılmazdır. SWUpdate ürün yazılımını, kök dosya sistemlerini ve uygulama katmanlarını güncellemek için sağlam, modüler bir çözüm sunar - hepsi yerleşik geri alma özelliğine sahiptir.
Açık kaynaklıdır, iyi belgelenmiştir ve A/B bölümleme düzeniyle sorunsuz bir şekilde entegre olur.

Web tarayıcısı GUI için SWUpdate

Mimariye genel bakış

SWUpdate birkaç temel bileşenden oluşur:

  • Güncelleme daemon'u (swupdate) - cihaz üzerinde çalışır ve güncellemeleri uygular
  • Güncelleme işleyicileri - neyin güncelleneceğini tanımlayın (rootfs, dosyalar, betikler, vb.)
  • İstemci arayüzleri - web arayüzü, REST API veya yerel CLI
  • sw-description dosyası - güncelleme paketinin yapısını ve mantığını tanımlar

Örnek güncelleme akışı

  1. Aşağıdakileri içeren bir güncelleme paketi (.swu) oluşturun:
    • Yeni bir kök dosya sistemi görüntüsü
    • Bu sw-description dosya
    • İsteğe bağlı komut dosyaları (özelleştirme veya doğrulama için)
      2.swupdate Güncellemeyi tanımlanan cihazlara yazar.
  2. Güncelleme sonrası komut dosyası başarıyı onaylar veya gerekirse bir geri alma işlemini tetikler.

Örnek

Bu örnekte, bir resmi Raspberry Pi OS Trixie görüntüsünü iki dosyaya ayırın:

  • 2025-10-01-raspios-trixie-arm64.boot.vfat
  • 2025-10-01-raspios-trixie-arm64.root.ext4

Bu dosyalar, aşağıdaki dosyalarda referans sw-description dosyasını .swu paketini oluşturmak için kullanın:

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"
        }
    ),
}

Aşağıdaki Lua betiği, bölüm UUID'lerini cmdline.txt ve fstab yanıp söndükten sonra:

#!/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.")

Kullanım swugenerator güncellemeyi paketlemek için:(https://github.com/sbabic/swugenerator).

Güncellemeyi uygulayın

Oluşturulan .swu dosyasını test etmek için:

  1. CM5'i kurtarma sistemine önyükleyin.
  2. Örneğin bir bağlama noktası oluşturun:
sudo mkdir -p /mnt/update
  1. Güncelleme dosyasını içeren bir NFS paylaşımını bağlayın:
sudo mount -t nfs :/path/to/share /mnt/update
  1. Güncellemeyi uygulayın:
sudo swupdate -i /mnt/update/update.swu

Entegrasyon olanakları

Yerel bir kullanıcı arayüzünden veya arka uç API'sinden güncellemeleri tetikleyin

  • Gelişmiş güvenlik için güncellemeleri imzalayın ve doğrulayın
  • Kullanım SWUpdate’s test veya hata ayıklama için web arayüzü
  • Kurtarma ve geri alma işlemlerini otomatikleştirmek için systemd hizmetleriyle birleştirin

Neden bu yığına uyuyor

ile birlikte rpi-image-gen ve rpi-sb-provisioner, SWUpdate resmi tamamlar:

  • Oluştur → rpi-image-gen (Görüntü oluşturma)
  • Dağıt → rpi-sb-provisioner (Cihaz hazırlama)
  • Korumak → SWUpdate (OTA güncellemeleri ve yaşam döngüsü yönetimi)

Sonuç olarak esnek, açık ve bakımı yapılabilir bir gömülü Linux platform - ürününüzle birlikte gelişen, ek yük getirmeyen bir platform Yocto.