6月も終わりに近づいた某日。私は密かに焦っていました。
我が家のLAN環境の一翼を担うRPI 3B
そのOSであるRaspberry Pi OS busterのサポートが
6月いっぱいで切れてしまう。
たしか2020年あたりに、サーバー用としてX環境なしでクリーンインストールしたと記憶するこのbuster。今日に至るまでその機能は膨張を続け、現在では
- LAN用dns+dhcpdサーバー(dnsmasq)
- 自分向けウェブサーバ(apache)
- メインのwifi電波が届かない場所での、wifiの電波の補完(hostapd)
- dynamic dnsの自動アップデート(独自スクリプト)
- ファイルサーバー(sshfs)
などなど、多数のサーバー機能が渦を巻く、謎マシーンに成り果ててしまいました。
自分向けウェブサーバーは、個人で作ったウェブアプリやcgiを自分のスマホ等から呼び出すために用意したもので、このようなものについてはとりあえず止まってくれてもいいのですが、dnsmasqあたりになると、停止すると家全体のwifi環境が使えなくなってしまいます。
ある意味困ってしまうのが、これだけいろいろ動かしても、RPI 3Bの1G ramにはまだ余裕があって快適に使えてしまうことです。OSが少々古くてもサーバーとして使う分には問題はほとんど起こらないので、わざわざアップグレードしてゴタゴタを持ち込む理由もなく、今日までそのまま使い続けて来たのですが、そのOSのサポートがついに打ち切られるというところにまで到達してしまったのです。
予定として考えていたのは
現在のOS(buster)を
最新OS(bookworm)にアップグレードする
ということなのですが、そのためには
buster => bullseye => bookworm
の2段階アップグレードが必要
です。
bullseyeからbookwormへのアップグレード方法については、以前ブログにポストしました
さらにはbuster => bullseye => bookworm への2段階アップグレードについてもRPI 4Bで経験済みです。
今回は4Bのときとは違い、X11環境やwayland環境を考える必要のないヘッドレスなRPI 3Bですから、アップグレード自体は4Bより簡単なはずなのですが、
アップグレードをする気が
さっぱり起こらない…
アップグレードは簡単でも、各種サーバー類の再調整が面倒くさそうというのが頭の片隅にあるのが原因だと思うのですが、どうしてもやりはじめる踏ん切りがつかず、ずるずると期日が下がり、6月ももう残り1週間強。
これはいよいよまずいなー
そんな時のことです。なんとなくネットをぼーと眺めていたら
大谷翔平(ドジャース)
対エンゼルス戦を、6月22日(土)abemaで無料生中継!
という内容が目に止まりました。
メジャーリーグでもただでやってるのかー
abemaすげーな
とぼんやり考えながら、
土曜日だし、
たまにはライブで大谷翔平でも見てみるかなー
と、またまたぼんやり考えていたら…ある素敵な(あるいはおバカな?)アイデアが頭に浮かんでしまいました。
大谷翔平を見ながら
サーバーアップグレードするというのは
どうだろう〜。
アップグレード中は多数のファイルをネットから取得するので時間がかかります。まじめにマシンの前に座っていたらストレスが貯まるので、暇つぶしが必要です。野球見ながらアップグレードというのは、なかなかいいかもしれない。
そういう訳で、私はついに決断しました。
6月22日(土)、午前11時、
abemaの大谷生中継開始と同時に
RPI 3Bのアップグレードをプレイボール(?)
思えば多分、私はこういうきっかけを求めてさまよっていたのかもしれません(嘘) もう期日的に後はないので、不退転の覚悟で6/22アップグレードを決行すべく、準備を進めることにしました。
大谷翔平の中継前にやったこと
apache, hostapdなど、止めれば良いものはとりあえず止めました。dns+dhcpd(dnsmasq)については、そのまま止めるとLANが死んでしまうので、メインのルーター機器のdns+dhcpd機能を一時的に復活させ、LANとRPI 3Bの機能を切り離しました。
そして、各種データ、OSもバックアップを取り、何度アップデートに失敗しても元の状態に戻せる体制を構築。
中継日前日までにサーバーの状態の下調べをしておいて、実際の作業は当日の朝から始めたのですが、午前11時の試合開始に間に合わせるのがなかなか大変でした(笑)
試合観戦のルール(レギュレーション)
これから野球を見ながらアップグレードを決行するわけですが、がっちり野球を見てしまうとアップグレードが進みません(笑) そういう訳で次のようなルールで野球を観戦するものとしました。
- 入力作業中は、入力作業に集中して野球は無視。その他のときに野球を観戦。
- 大谷翔平の打席中は、大谷翔平を観戦。
そしてこれから重要なのですが、目標として、野球の試合時間内でアップグレード作業の完了を目指すものとします。つまりはこのアップグレードは
ラズパイOSの2段階アップグレードのリアルタイムアタック(RTA)
目標タイムは、試合時間終了までのアップグレード完了
と設定しました。
6月22日午前11時、いよいよドジャース対エンゼルス戦スタート
ついに試合(そしてアップグレードRTA)の開始です。野球の方の先行はエンゼルス、後攻がドジャース。
私はそれほど野球に詳しくなくて、メジャーリーグをまともにみるのはこれが初めてぐらいなのですが、とりあえずテレビ(というか実際はノートPC)画面のスコアの見方(どこがアウト表示か等、日本のものほど親切に表示されない)もよく分からないといったレベルでした。
abemaの中継陣は、やはりそこはプロでありまして、
普通に見てると、解説に聞き入ってしまって、
アップグレードが一向に進まない(笑)
解説に気を取られながら、ごちゃごちゃやってはみるが、なんだか考えがまとまらないうちに、ドジャースの攻撃が始まり、さっそく大谷翔平が登場。
11:20 大谷翔平第一打席、きわどい球を見送り、フォアボール。
このままではいつまで経ってもアップグレードが終わらないので、テレビの音量を下げてみると、これでようやく頭の中で考えがまとまるようになりました。下記のページを参考にbusterからbullseyeへのアップグレードを開始。
まずはlibgcc-8-devとgcc-8-baseのアップグレードから始めます。
そういう訳で、出足で早速遅れながらも悟った真実
野球観戦アップグレードRTAは
集中力の戦いだ!
と書いてみると、なにやらアスリートぽくてかっこいいですかね(笑) なんだかすごいスポーツをやってるような気分になってくるのが不思議です(嘘)
busterからbullseyeにアップグレード
debian系のlinuxのアップグレードは、aptのsourceを書き換えて、apt full-upgrade するのが基本なのですが、busterからbullseyeへのアップグレードでは、事前の libgcc-8-dev と gcc-8-base のアップグレードが必要でした。
その後は通常どおり full-upgrade を実行、ファイルの大量ダウンロードが始まります。
そうこうしているうち、大谷の次の打順が回ってきます(本当に時間の進行がやたら速く感じられます)
12:00 大谷第二打席、またフォアボールで出塁
相手方ピッチャーがかなりエキサイトしていたので、どうしたのかと思いましたが、どうやら腕の張りが致命的に悪化してしまっていたようです。
一方で、ファイルのダウンロードはいつまで経っても終了せず、大量に時間を消費。そして早くもそのまま、大谷の次の打順、運命の第三打席がやってきます。
12:20 大谷第三打席、
特大ホームランで2点先制〜!!!
古巣エンゼルスから初めて奪ったホームランだそうで、記念すべき打席だったと言えるでしょう。それをライブで見れたことにちょっと感動〜! はいいのですが、
いや流石に、
もうそろそろ
ダウンロード終わってくれても良くないか?
どうもopenjdkのダウンロードにやたら引っかかってしまったようで、いつまで経ってもダウンロードが終わらない。これは困ります。大幅な時間のロスです。
大谷ホームランとは裏腹に
暗雲立ち込み始める、私のアップグレードRTA
すると、RTAの状況に呼応するかのように、ドジャースにも暗雲が立ち込め始めます。
12:50 ドジャース、デッドボールで押し出しの失点。その後のエンゼルスは更に1点追加し、ドジャーズは2対2の同点に追いつかれる
ここにきてようやくファイルのダウンロードが完了。そのインストールが始まります。もう野球の方は6回なのだが、果たしてbookwormへのアップグレードは試合終了に間に合うのか?
ファイルのインストールが終了し、bullseyeへアップグレードがようやく終了したころ、またまた大谷の打席が回ってきます。
13:20 大谷第四打席、ビッチャーが打球を取りそこねる間大谷は全力疾走し、一塁打
まるでイチローみたいなヒットですが、大谷でもこういう打ち方をすることがあるのですね。ちなみにその直後二塁への盗塁を試みた大谷ですが、これはあえなく失敗してアウト。
とはいえ今のところ、大谷は全打席出塁ですね。これはさすがではないでしょうか?
bullseyeからbookwormへ
ゲームはもう9回。よほど長い延長線にでもならないかぎりは、bookwormのインストールを試合中に終えるのは難しいだろうという敗北感が漂い始めます。でも、
負けると分かっていても、
あえてやってみる。
それがラズパイユーザーのロマンではないのか?
いや、そんな嫌なロマンは大半のユーザーがお断りだろうと思いますが、だからといってこのまま放っておくわけにも行かないのでbookwormへのアップデートに淡々と移ります。が、ここで大問題勃発。
アップグレードが終了したbullseyeで
ネットの名前解決ができない。
ネットにつながらないので、
bookworm用ファイルのダウンロードができない。
/etc/resolv.confがlocalhostを参照しているようで、無理やり書き換えるのも後々なにかに響きそう予感もするので、原因究明に入ります。この手のトラブルは時間を大量消費します。終盤に来てのこのミスはとても痛い。
そうこうしているうちに、
13:40 ゲームは延長先に突入。タイブレークによりランナー1、2塁から始まった10回表、エンゼルスが1点を入れて勝ち越しに成功
メジャーでも延長はタイブレークなんだというのにちょっと驚きましたが、ランナー1、2塁から、失点1点というのはそれほど悪くないのではないか? 裏のドジャースの攻撃に期待がかかりますが…
13:50 10回裏、ドジャース無得点で敗退
そして
私のbookwormアップグレードRTAも敗退
ああ、あっさり終わっちまったよ。というか、メジャーって試合終わるの早すぎない? 日本みたいに終電間際まで戦えよ…って、最近は日本でもそういうことなくなったんでしたっけ? メジャーでも視聴者離れ対策でゲーム時間のコンパクト化が進められているとは聞いていましたが、タイブレークもその一環なのでしょうか?
ドジャースは負けても、bookwormアップグレードの孤独な戦いは続く…
先程の/etc/resolve.confの問題ですか、dnsmasqをインストールするだけで/etc/resolvconf/update.d/dnsmasq というファイルが作成されてしまうのが原因だったようです。dnsmasqを停止するだけではなく、アンインストールするとことで、ようやく正常な名前解決ができ、ネットから必要なファイルをダウンロードすることが可能になりました。
bookwormへの細かいアップデート方法はとうの昔に忘れてしまったので、自分が書いたブログ記事を自分で見ながらアップデートを進めます。
apt sourceを書き換えるまでは普通の手続きですが、今回はfull-upgradeをする前に、ディレクトリ構成を変更して、kernelを入れ替えることが必要になります。
その後full-upgradeを実行。これでうまく行くはず、だったのですが…
ファイルインストール時にエラー出現!
archive ‘/var/cache/apt/archives/dphys-swapfile_20100506-7.1+rpi3_all.deb’ uses unknown compression for member ‘control.tar.zst‘
えーっ、まじですかっ〜! 以前アップグレードの記事を書いた時は相当色々テストをしていて、事実RPI 4Bをアップグレードしたときは何の問題もなく実行できましたから。あれだけテストしたはずの盤石のアップグレード手続きで、まさかのエラーですか…
このエラーはメンタルに響き、そして、私の脳裏に突如現れたあの有名なフレーズ
燃え尽きたぜ…真っ白にな…
ドジャースも負け、RTAにも負け、そしてついにアップグレードにも負け
ついに私(のメンタル)がノックアウト
いつの間にやら競技が野球からボクシングに入れ替わってしまいましたが、とにかくRTA継続は不可能ということで、
今回のアップグレードRTAは
開始約4時間
戦意消失によるTKOでリタイア
という結果に終わりました。
bookwormアップグレードに失敗した原因
リタイア後は、某イタリアン系ファミレスチェーンで、白ワインのデカンタを煽り、その後は自宅でふて寝。ようやく目が覚めたのは夜更けすぎでありましたでしょうか?
その後、先程のエラーの原因を調べてみました。ダウンロードしたdphys-swapfileパッケージがzstd形式で圧縮されていたのですが、bullseyeのパッケージマネージャ(dpkg)がその解凍に対応していなかったのが原因のようです。
zstd形式のパッケージはbullseyeのdpkgで扱うことはできないので、full-upgradeする前にdpkgをbookworm版のdpkgにアップデートしておくことが現在では必要になります。
zstdによるパッケージ圧縮は最近導入されたもののようで、dphys-swapfileも3月あたりにアップデートされるまではzstd圧縮ではなかったものと想像されます。去年までアップデートで問題が起こらなかったのは、当時はまだzstdによる圧縮パッケージがほとんど導入されていなかったからだと思います。
日付は変わって、23日(日)のお昼すぎから、保存しておいたバックアップファイルから、アップデート前のbusterを復元。22日(土)に行ったアップデート手続きを繰り返しました。dnsmasqで起こる問題も予想できていましたし、今回はなぜかファイルのダウンロードも超高速(ほんと22日のあの遅さは何だったんだろう…)。bullseyeからbookwormへのfull-upgrade前にdpkgをアップデートすることも忘れず行いました。夕方にはあっさりアップグレードが終了してしまいました。このペースならあるいは試合時間内2段階アップグレード達成もあったかもしれません。
野球観戦しながらのdebainアップグレードRTAで、試合時間内クリアは可能なのか
今回の成果(なのか?)をまとめてみます。
- 通常の1段階アップグレードなら試合時間内での終了は可能。実際buster => bullseyeのアップグレードは試合時間内に成功しています。
- とはいえ、buster => bullseye => bookwormの2段階アップデートでの達成はさすがに無理があった。
- buster => bookwormへの一発アップグレードを決行すれば時間内クリアも可能かもしれないが、以前 こちら で書いたような失敗例があるのでお勧めできない。
- apt full-upgrade時のaptサーバーのレスポンス速度が地味に重要だが、これは運次第でどうしようもなさそう。
そして何より重要なのが
- バックアップは何より大切。どんなに準備していても失敗は必ずある。
本当に、大切なサーバーでのバックアップなしアップグレードは、酒酔い運転と同じくらい危険なのでやめておきましょう。
そして、今回の結論ですが、
野球観戦しながらのdebianアップグレードRTAは意外とお勧め
通常の一段階アップグレードなら、野球の試合時間とアップグレードの時間がそこそこ上手に釣り合っているのがポイントで、途中のファイルダウンロードの時間を、試合を見ながら快適に潰していくことが可能です。普段の野球観戦では展開が遅くて退屈だと感じてしまうライトな野球ファン(私のこと)でも、RTAで試合時間内クリアを目指すとなると、自然と「頼むからもっと試合展開遅くしてくれ」と懇願するようになるという、とても濃厚な数時間が体験できます(笑)
busterからbookwormにアップデートしたRPI 3Bのその後
OSはアップデートできても、各種サーバーの仕様の変化などもあるので、ぼちぼち暇を見つけながら1週間ほどをかけて修正していった結果、だいたいアップグレード前の機能を取り戻すことができました。
クリーンアップデートではこうも簡単に機能回復することはできないので、RTAには負けましたが、アップグレードには勝利したと言っていいでしょう。
ラズパイの公式OSはdebian linuxのポートで、ポートした最新版をサポートする他、一つ前のバージョンもlegacyと呼びサポートしています。現在の最新版bookwormは、次のdebianバージョンがラズパイにポートされた時点でlegacy扱いになり、その次のdebianバージョンがラズパイにポートされると、サポート切れとなると思われますので、今後3年ほどは現在のbookwormをRPI 3Bで快適に利用することができそうです。
久々の最新OSのRPI 3B。気分が清々しく、いい感じです。
コメント