Top/EBUG勉強会/20210828_fiupdate

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

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

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

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

これらのツールのうち、sysupdateと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)
2022-11-29 2022-11-26 2022-11-25 2022-11-17 2022-11-15 2022-11-14 2022-11-13 2022-11-12 2022-11-08 2022-11-05 2022-10-18 2022-09-28 2022-08-08 2022-08-07 2022-04-11 2022-03-10 2022-01-19 2021-12-11 2021-10-02 2021-08-28 2021-05-31 2021-05-21 2021-05-14 2021-04-16 2020-10-07 2020-07-22 2020-06-20 2020-06-14 2020-05-15 2020-02-28 2020-02-07 2019-12-11 2019-10-09 2019-05-25 2019-04-04

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