Skip to main content

কেন SWUpdate?

ফিল্ড আপডেট অনিবার্য। SWUpdate ফার্মওয়্যার, রুট ফাইলসিস্টেম এবং অ্যাপ্লিকেশন স্তরগুলি আপডেট করার জন্য একটি শক্তিশালী, মডুলার সমাধান সরবরাহ করে - সমস্ত অন্তর্নির্মিত রোলব্যাক ক্ষমতা সহ।
এটি ওপেন সোর্স, ভালভাবে নথিভুক্ত এবং একটি এ / বি পার্টিশন লেআউটের সাথে নির্বিঘ্নে সংহত করে।

SWUpdate জন্য ওয়েব ব্রাউজার GUI

আর্কিটেকচার ওভারভিউ

SWUpdate বেশ কয়েকটি মূল উপাদান নিয়ে গঠিত:

  • আপডেট ডেমন (swupdate) — ডিভাইসে চালিত হয় এবং আপডেট প্রয়োগ করে
  • হ্যান্ডলারগুলি আপডেট করুন - কী আপডেট করতে হবে তা সংজ্ঞায়িত করুন (রুটএফ, ফাইল, স্ক্রিপ্ট ইত্যাদি)
  • ক্লায়েন্ট ইন্টারফেস - ওয়েব ইন্টারফেস, রেস্ট এপিআই, বা স্থানীয় সিএলআই
  • sw-description ফাইল - আপডেট প্যাকেজের কাঠামো এবং যুক্তি সংজ্ঞায়িত করে

উদাহরণ আপডেট প্রবাহ

  1. একটি আপডেট প্যাকেজ (.swu) তৈরি করুন যা ধারণ করে:
    • একটি নতুন রুট ফাইল সিস্টেম চিত্র
    sw-description ফাইল
    • ঐচ্ছিক স্ক্রিপ্ট (কাস্টমাইজেশন বা যাচাইকরণের জন্য)
    2.swupdate সংজ্ঞায়িত ডিভাইসগুলিতে আপডেট লেখেন।
  2. একটি পোস্ট-আপডেট স্ক্রিপ্ট সাফল্য নিশ্চিত করে বা প্রয়োজনে রোলব্যাক ট্রিগার করে।

উদাহরণ

এই উদাহরণে, আমরা একটি অফিসিয়াল Raspberry Pi OS ট্রিক্সি চিত্রকে দুটি ফাইলে বিভক্ত করি:

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

এই ফাইলগুলি .swu প্যাকেজ তৈরি করতে sw-description ফাইলে উল্লেখ করা হয়:

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

নিম্নলিখিত লুয়া স্ক্রিপ্টটি ফ্ল্যাশ করার পরে cmdline.txt এবং fstab মধ্যে পার্টিশন ইউইউআইডিগুলি সামঞ্জস্য করে:

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

আপডেটটি বান্ডিল করতে swugenerator ব্যবহার করুন:(https://github.com/sbabic/swugenerator)।

আপডেট প্রয়োগ করুন

উত্পন্ন .swu ফাইলটি পরীক্ষা করতে:

  1. সিএম 5 উদ্ধার সিস্টেমে বুট করুন।
  2. একটি মাউন্ট পয়েন্ট তৈরি করুন, উদাহরণস্বরূপ:
sudo mkdir -p /mnt/update
  1. আপডেট ফাইল সমন্বিত একটি NFS শেয়ার মাউন্ট করুন:
sudo mount -t nfs :/path/to/share /mnt/update
  1. আপডেট প্রয়োগ করুন:
sudo swupdate -i /mnt/update/update.swu

ইন্টিগ্রেশন সম্ভাবনা

একটি স্থানীয় UI বা ব্যাকএন্ড API থেকে আপডেটগুলি ট্রিগার করুন

  • বর্ধিত নিরাপত্তার জন্য আপডেটগুলিতে সাইন ইন করুন এবং যাচাই করুন
  • পরীক্ষা বা ডিবাগিংয়ের জন্য SWUpdate’s ওয়েব ইন্টারফেস ব্যবহার করুন
  • পুনরুদ্ধার এবং রোলব্যাকগুলি স্বয়ংক্রিয় করতে systemd পরিষেবাগুলির সাথে একত্রিত করুন

কেন এটি এই স্ট্যাকটি ফিট করে

rpi-image-gen এবং rpi-sb-provisionerএকসাথে, SWUpdate ছবিটি সম্পূর্ণ করে:

  • বিল্ড → rpi-image-gen (চিত্র তৈরি)
  • rpi-sb-provisioner স্থাপন করুন (ডিভাইস প্রভিশনিং)
  • SWUpdate বজায় রাখুন (ওটিএ আপডেট এবং জীবনচক্র পরিচালনা)

ফলাফলটি একটি নমনীয়, উন্মুক্ত এবং রক্ষণাবেক্ষণযোগ্য এম্বেডেড Linux প্ল্যাটফর্ম - যা আপনার পণ্যের সাথে বিকশিত হয়, Yoctoএর ওভারহেড ছাড়াই।