快轉到主要內容

告別離線安裝惡夢:研華解鎖 Ubuntu 套件管理的神秘力量

· loading
作者
Advantech ESS

想像一下,在沒有網路的工業現場、偏遠站點,或是對安全性要求極高的生產線上,當你需要為設備上的 Ubuntu 系統安裝一個新的應用程式或更新現有軟體時,卻發現缺少了必要的套件(dependencies)… 這是不是聽起來就像一場數位世界的「巧婦難為無米之炊」?

在工業電腦 (IPC) 領域,設備部署在隔離的生產環境中是家常便飯,網路連線往往是個奢望。這時候,如果想在這樣的環境中安裝一個應用程式,而它又依賴於系統中沒有的套件,該怎麼辦呢?

你可能會想到用光碟片來安裝,但光碟容量有限,不可能包含所有套件,而且現在很多 IPC 根本沒有光碟機了。或者,你也可以從有網路的電腦上下載套件,再一個一個複製過去。但問題來了:你需要哪些套件?它們之間又有什麼複雜的依賴關係?手動處理這些,簡直是場惡夢!

別擔心!研華的工程師們也遇到了這個挑戰,並且發揮了他們的聰明才智,找到了一個既巧妙又實用的解決方案!

我們的靈感來源:把 ISO 檔變成你的「隨身套件庫」!

現代 Linux 系統(包括 Ubuntu)有個很棒的功能,就是可以把一個 ISO 映像檔掛載(mount)成一個本地資料夾。這給了我們一個啟發:既然如此,我們能不能把所有需要的套件都打包進一個 ISO 檔裡,然後在離線主機上把這個 ISO 檔掛載起來,讓系統的套件管理工具(apt 或 apt-get)以為這是一個「本地的網路套件庫」呢?

答案是:可以! 而且我們的實驗證明,這個方法非常有效!

接下來,就讓我們一起看看研華工程師是如何一步步實現這個「離線套件管理魔法」的吧!

研華實驗室揭秘:離線套件庫的誕生之旅

整個過程可以分為幾個主要階段:準備、製作、部署、使用與收尾。聽起來有點像一場精心策劃的任務,對吧?

小提醒: ✍️ 如果在執行指令時遇到權限問題,請記得在指令前加上 sudo。 ✍️ 雖然範例中使用了相對路徑,但實際操作時建議使用絕對路徑,更不容易出錯喔!

階段一:準備你的「套件收集站」

首先,我們需要一個有網路的環境來收集所有目標主機可能需要的套件。這個環境越「乾淨」越好,因為這樣製作出來的 ISO 檔才會越小。最好的做法是從一個全新的系統開始建置。記住一個原則:環境越乾淨,ISO 檔就越小巧!

階段二:製作你的專屬「離線套件庫 ISO」

這是整個過程中最關鍵的一步!我們將在這個有網路的環境中,把需要的套件「抓」下來,並製作成一個特殊的 ISO 映像檔。

如果你執行指令時遇到找不到指令或錯誤,請先安裝相關的套件。

以下是製作 ISO 的指令步驟:

mkdir -p my-ISO

cd my-ISO
dpkg --get-selections | grep 'install' | awk '{ print $1; }' | xargs apt download
dpkg-scanpackages . | gzip -9c > Packages.gz

mkdir .disk
echo "My Dependencies - $(lsb_release -is) - $(lsb_release -rs)" > .disk/info

mkisofs -V MyDependencies -o MyDependencies.iso -r -J .
  • Line 1: 建立一個名為 my-ISO 的空資料夾,用來存放我們收集到的所有套件。資料夾名稱可以自己決定。
  • Line 3: 進入 my-ISO 資料夾,作為我們的工作目錄。
  • Line 4: 查詢目前系統中所有已安裝的套件,並將它們下載到當前資料夾。
  • Line 5: 產生一個名為 Packages.gz 的特殊壓縮檔。這個檔案是製作 ISO 映像檔的基礎,它包含了套件的索引資訊。檔案名稱也可以自己決定。
  • Line 7: 建立一個名為 .disk 的資料夾(注意開頭的點)。這個資料夾名稱是規範定義的,請不要更改。
  • Line 8:.disk 資料夾下建立一個名為 info 的資訊檔。這個檔案名稱也是規範定義的,請不要更改。
  • Line 10: 建立最終的 ISO 映像檔,名為 MyDependencies.iso
    • -V:指定 Volume ID (磁碟區名稱或標籤),可以自己取名。
    • -o:指定輸出檔案名稱,可以自己取名。
    • -r:設定檔案權限和模式為更實用的值。
    • -J:除了標準的 ISO9660 檔名外,也產生 Joliet 目錄記錄,以支援更長的檔名。

階段三:將 ISO 檔遷移到離線主機

這一步很簡單,就是用你熟悉的方式(例如 USB 隨身碟、內部網路傳輸等),把剛剛製作好的 MyDependencies.iso 檔案複製到目標離線主機上。

階段四:掛載 ISO 映像檔

現在,我們要在離線主機上把這個 ISO 檔「啟用」起來,讓系統能夠讀取裡面的內容。

mkdir -p my-mount-point
mount -o loop MyDependencies.iso my-mount-point
cp -rf my-mount-point my-repo
  • Line 1: 建立一個空資料夾作為 ISO 映像檔的掛載點。資料夾名稱 my-mount-point 可以自己決定。
  • Line 2:MyDependencies.iso 映像檔掛載到剛剛建立的掛載點資料夾。
  • Line 3: 將掛載點資料夾的內容完整複製到一個新的資料夾 my-repo。為什麼要複製呢?因為 ISO 檔通常是以唯讀方式掛載的,而作為一個本地套件來源庫,我們需要它是可寫入的。你可以更改目標資料夾名稱。

階段五:將本地資料夾添加為套件來源

接下來,我們要告訴系統的套件管理工具 apt,去哪裡找到我們的「隨身套件庫」。

首先,為了保險起見,先備份系統原有的套件來源設定檔:

mv -f /etc/apt/sources.list /etc/apt/sources.list.BAK

然後,建立一個新的設定檔,指向我們的本地套件庫:

echo "deb [trusted=yes] file:/full/path/to/my-repo ./" > /etc/apt/sources.list

請注意,這裡的 /full/path/to/my-repo 需要替換成你實際複製套件庫資料夾的完整路徑。

階段六:更新系統套件來源列表

執行這個指令,讓系統重新整理套件來源資訊,認識我們的本地套件庫:

apt update

階段七:開始安裝你需要的套件吧!

見證奇蹟的時刻到了!現在,你就可以像在有網路的環境中一樣,使用 aptapt-get 指令來安裝所有你需要的套件了!系統會自動從你剛剛設定的本地套件庫中尋找並解析所有依賴關係,然後完成安裝。如果你的目標應用程式本身就能處理依賴關係,甚至可以直接安裝應用程式本身,一步到位!

階段八:收尾工作

任務完成後,建議將系統恢復到原始狀態,移除我們添加的本地套件來源設定,並卸載 ISO 映像檔。

mv -f /etc/apt/sources.list.BAK /etc/apt/sources.list
umount my-mount-point
rm -rf my-mount-point
rm -rf my-repo
apt update
  • Line 1: 恢復系統原有的套件來源設定檔。
  • Line 2: 從作業系統中卸載 ISO 映像檔。
  • Line 3 和 Line 4: 移除我們建立的中間資料夾。
  • Line 5: 再次更新系統套件來源列表。

實驗成果與應用價值

透過這個方法,我們成功地在一個完全離線的 Ubuntu 環境中,實現了套件的自動化安裝與依賴解析。這意味著:

  • 大幅簡化離線部署: 不再需要手動下載和追蹤複雜的套件依賴關係。
  • 提高效率與可靠性: 像在線一樣使用 apt,安裝過程更順暢、錯誤更少。
  • 適用於各種離線場景: 無論是工廠自動化、能源監控、交通運輸,還是任何網路受限的邊緣運算應用,都能輕鬆應對軟體部署與更新的需求。
  • 展現研華的創新能力: 這是研華工程師針對實際工業應用痛點,自主研究並驗證的有效解決方案。

與傳統手動方式相比,這個方法不僅節省了大量的時間和人力,更重要的是,它提供了一個標準化、可靠的離線軟體部署流程。

結論與未來展望

這次實驗成功地證明了,即使在沒有網路的嚴苛環境下,我們依然有辦法透過巧妙的技術手段,讓 Ubuntu 的套件管理工具發揮作用。這只是研華在解決工業物聯網挑戰方面的一個縮影。

我們深知,工業現場的需求千變萬化,技術挑戰層出不窮。研華始終致力於深入理解客戶的實際應用場景,並投入持續的研發,尋找創新、可靠的解決方案。這次的離線套件管理方法,正是我們積極探索、不斷進步的體現。

未來,我們也將持續優化這個流程,甚至考慮將其整合到我們的軟體工具或服務中,讓客戶能夠更輕鬆地在各種複雜環境下部署和管理他們的 Advantech 設備與應用。

如果您在離線環境下的軟體部署或套件管理方面遇到任何挑戰,或者對這項技術感興趣,歡迎隨時與您的研華 AE 或銷售業務聯繫。我們樂於分享更多經驗,並提供專業的支援!

相關文章

告別開機威脅!研華帶你深入了解 Secure Boot 與最新資安防護技術
· loading
當系統「藍屏」時,Advantech 工程師如何找出真相?深入解析記憶體傾印 (Memory Dump) 的秘密!
· loading
資料安全大作戰:Advantech 如何在麒麟系統上打造堅實的 RAID1 防線?
· loading