কেন SWUpdate?
ফিল্ড আপডেট অনিবার্য। SWUpdate ফার্মওয়্যার, রুট ফাইলসিস্টেম এবং অ্যাপ্লিকেশন স্তরগুলি আপডেট করার জন্য একটি শক্তিশালী, মডুলার সমাধান সরবরাহ করে - সমস্ত অন্তর্নির্মিত রোলব্যাক ক্ষমতা সহ।
এটি ওপেন সোর্স, ভালভাবে নথিভুক্ত এবং একটি এ / বি পার্টিশন লেআউটের সাথে নির্বিঘ্নে সংহত করে।
আর্কিটেকচার ওভারভিউ
SWUpdate বেশ কয়েকটি মূল উপাদান নিয়ে গঠিত:
- আপডেট ডেমন (swupdate) — ডিভাইসে চালিত হয় এবং আপডেট প্রয়োগ করে
- হ্যান্ডলারগুলি আপডেট করুন - কী আপডেট করতে হবে তা সংজ্ঞায়িত করুন (রুটএফ, ফাইল, স্ক্রিপ্ট ইত্যাদি)
- ক্লায়েন্ট ইন্টারফেস - ওয়েব ইন্টারফেস, রেস্ট এপিআই, বা স্থানীয় সিএলআই
- sw-description ফাইল - আপডেট প্যাকেজের কাঠামো এবং যুক্তি সংজ্ঞায়িত করে
উদাহরণ আপডেট প্রবাহ
- একটি আপডেট প্যাকেজ (.swu) তৈরি করুন যা ধারণ করে:
• একটি নতুন রুট ফাইল সিস্টেম চিত্র
• sw-description ফাইল
• ঐচ্ছিক স্ক্রিপ্ট (কাস্টমাইজেশন বা যাচাইকরণের জন্য)
2.swupdate সংজ্ঞায়িত ডিভাইসগুলিতে আপডেট লেখেন। - একটি পোস্ট-আপডেট স্ক্রিপ্ট সাফল্য নিশ্চিত করে বা প্রয়োজনে রোলব্যাক ট্রিগার করে।
উদাহরণ
এই উদাহরণে, আমরা একটি অফিসিয়াল 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 ফাইলটি পরীক্ষা করতে:
- সিএম 5 উদ্ধার সিস্টেমে বুট করুন।
- একটি মাউন্ট পয়েন্ট তৈরি করুন, উদাহরণস্বরূপ:
sudo mkdir -p /mnt/update- আপডেট ফাইল সমন্বিত একটি NFS শেয়ার মাউন্ট করুন:
sudo mount -t nfs :/path/to/share /mnt/update- আপডেট প্রয়োগ করুন:
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এর ওভারহেড ছাড়াই।
এই সিরিজের নিবন্ধ
- Raspberry Pi Compute Module 5জন্য একটি উত্পাদন-প্রস্তুত Linux তৈরি করা
- স্টক ওএস থেকে প্রোডাকশন প্ল্যাটফর্ম
- কাস্টমাইজিং Raspberry Pi OS উইথ rpi-image-gen
- সিস্টেম দৃঢ়তা - একটি A/B রুট ফাইল সিস্টেম লেআউট ডিজাইন করা
- প্রভিশনিং - rpi-sb-provisionerদিয়ে প্রথম বুট স্বয়ংক্রিয় করা
- ওটিএ এবং লাইফসাইকেল - SWUpdate সাথে সফ্টওয়্যার আপডেট
সূত্র
- 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