Top/EBUG勉強会/20210828_fiupdate

河豚板のアップデートツール

EBUG 第78回会合(オンライン)
2021年8月28日
川俣吉広、kaw@on.rim.or.jp

OpenBSDネイティブのアップデートツール

OpenBSDでは、現在、以下のようなアップデートツールが提供されている。

これらのツールのうち、sysupgradeとsyspatchは河豚板では使用できない。
Vanilla OpenBSDとは、カーネルの設定とファイルシステムのレイアウトが異なるため。

sysmergeとpkg_addは河豚板でも問題なく使用することができる。

fiupdate - 河豚板のアップデートツール

河豚板は、OpenBSDに追従して年に2回リリースを更新する。
また、その間にEratta対応(patch適用)や河豚板自身の機能追加・バグフィクスなどがあり、概ね十数回以上のアップデートを行っている。

LiveUSBに対して、このような修正を容易に行うため、FuguIta-6.7-*-202010071よりfiupdate (FuguIta Update)というツールを作成し、配布物に同梱している。

fiupdateは、LiveUSB中のカーネルとファイルシステム・イメージ全体を新しいもので置き換える。そのため、基本的には同一バージョンのOpenBSDがベースになっていれば、任意のリリースに更新することができる。ダウングレードも可能。
(OpenBSDのsyspatchは、step by stepで1つづつ新しいリリースに更新することが必須で、一足飛びに最新リリースに更新することはできない)

LiveDVDについてはコンテンツの上書きが物理的に不可能なため、従来どおり、メディアを最新版に作り直すこととなる。

fiupdateの実行

配布サイトよりISOイメージファイルとMD5をダウンロードし、fiupdateを実行する

# ftp https://jp1.dl.fuguita.org/FuguIta-6.9-amd64-202108131.iso.gz
# ftp https://jp2.dl.fuguita.org/MD5
# fiupdate 202108131

ダウンロードするファイルはLiveUSB用の*.img.gzではなく、LiveDVD用の*.iso.gzファイルであることに注意。

fiupdate実行中は、以下のような処理が行われる

設計と実装

エラー検出

fiupdateの動作は、基本的には現行のカーネルとファイルシステム・イメージをダウンロードしたISOイメージの中のもので上書きするだけで、原理は非常に単純である。
ただし、ファイルの上書きが失敗することは致命的であるため、極力避けなければならない。そのため、fiupdateは、大部分が実行環境のチェックとエラーの検出・処理のためのコードとなっている。

ライブアップデートにした理由

アップデートの方法として、現在稼働していない別のメディアに対して適用を行う、というやりかたも考えられるが、以下のようなデメリットがある

そのため、fiupdateでは「今、動いている」メディアのみを対象としてアップデートを行うこととした。

ライブアップデートの検討事項

fiupdateが上書きするファイルシステム・イメージは、OpenBSDのファイルツリー全体が格納されており、上書きされている時もマウントされてアクティブな状態にある。そのため、イメージファイルが上書きされるとシステムはまともに動かなくなる。

制限事項


Top/EBUG勉強会/20210828_fiupdate
recent(50)
2024-03-19 2024-02-17 2024-01-31 2023-12-24 2023-12-20 2023-11-05 2023-10-04 2023-08-28 2023-06-21 2023-06-19 2023-06-03 2023-05-30 2023-05-20 2023-05-01 2023-04-30 2023-04-23 2023-04-13 2023-04-12 2023-03-17 2023-02-24 2023-02-23 2023-02-22 2022-12-23 2022-12-13 2022-11-17 2022-11-15 2022-11-14 2022-11-13 2022-11-05 2022-09-28 2022-08-08 2022-04-11

Front page   Edit Freeze Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes
Last-modified: 2021-08-28 (Sat) 09:52:27