Stonking(Ubuntu 26.10)の開発; OpenSSL4移行とpollinate削除に伴うトラブル
今週のstonkingは、全体的に「リスクのあるチャレンジに伴う失敗」とその解決が行われた一週間でした。まず、OpenSSL 4.0の導入に伴って、baculaとsssdがFTBFSを起こしています。
これは予想されていた内容(OpenSSL 4.0の導入の最大の壁は「既存のOpenSSLを利用した実装と互換性があるとは限らない」です)で、順次解消していくことになるでしょう。
類似する事案としてはpollinateの削除に伴う問題として、各種Cloud Imageにおいてcurlが意図せず消えてしまったという問題が起きています。
これは「Cloud Imageを構成するパッケージリストにはpollinateが入っていた」「pollinateからの依存関係でcurlが入っていた」という状態でpollinateを削除したことで発生したものです。一定以上に複雑なシステムの開発中には比較的よくある、「なにかの事故が起きるかもしれないが、消してみるまでは事前に予想しきれない」という性質のものです。ひとまずは期待されていた結果ではないのでcurlを個別指定して直すという応急処置が採られています。
一方、「そもそもCloud Imageにおいてcurlは必須なのか」という別の命題があり、少なくとも起動する上では必須ではないし、追加インストールも可能であるということから、あらためて「そもそもcurlが含まれているという期待そのものが正しいのか」という議論が展開されています。論理の構成要素としては、「少なくとも起動する上でcurlは必須ではない」(cloud-init等はcurlに依存していない)、「必要ならネットワーク経由でインストールすればよい」「ネットワーク経由でインストールできない疑似閉域網であれば、curlが使われる可能性もまた小さい」ということで、『どちらかというと削除でよさそう』という気配がしています。
こうした中で7月末にはstonkingのSnapshot 3がリリースされるべきなのですが(予定では7月30日にリリースされるはずでした)、8月6日時点でもまだリリースアナウンスがありません。またそもそもDaily ISOの作成まわりは新しい仕組みへの移行に伴う混乱が解決しきっておらず、今ひとつ不透明な状態が続いています。
また、stonkingと過去のリリースを対象にした変更点として、hwctl[1]コマンドが.debパッケージからsnap onlyへ切り替えられる予定です。「gnome-control-centerやその他のフロントエンドとの統合、およびセキュリティ強化のためのアーキテクチャ変更計画に伴う」とされており、『Ubuntu Certifiedかどうかを確認できる』よりも踏み込んだなんらかの拡張が行われるのではないかと見られます。この変更は過去のリリースにも影響を及ぼし、少なくともresolute(26.04)のhwctlパッケージはstonkingでの対応後にダミーパッケージ(Snap版が導入されるフック)に変更される見込みです。
「コンテナにおける神話」の解体
コンテナの利用についての神話を解体する記事がDiscourseに投稿されています。
主な主張は以下のようなもので、「ついつい実施されてしまうイマイチな因習」を回避するための知識としてまとめられています。
- かつて雑に流行った「1コンテナ1プロセス」ではなく、現代のコンテナベースのアプリケーションは「1コンテナ1サービス」として設計され、適切なPID 1としてプロセススーパーバイザーが導入されるべきである。
- distrolessや最小容量そのものは重要だが、それそのものが何かを保証するものではない。オーガニックな食物が健康を保証するわけではないのと同じように、それで必要条件が満たされると思うべきではない。パッケージのメタデータを削除しておくとセキュリティースキャナーが「脆弱なバージョンのパッケージは含まれていない」と誤認してしまって便利だが、これに依存するべきではなく、メタデータが何らかの形で残されるほうが偽陰性を防げて良い。
- 何も考えずに最新版に追従することは良くない。「新しい」ものが必ずしも「安全」とは限らず、未知のバグや脆弱性が存在することがありえる。プロダクション環境で追従するべきは「安定している」「継続的に『なにも壊さない』アップデートが提供されている」タグが付与されたものである。
- コンテナイメージに付与するラベルのバージョン継承に注意する。ベースイメージにラベルを付けてしまうと、そのベースイメージを継承するすべてのコンテナに同じラベルが付いてしまう。
- コンテナからrootユーザーや1000未満のシステムユーザーの持つべきUIDを排除することは重要だが、同じようにUID 1000といった「衝突しがちなUID」を利用してはいけない。ホスト上で衝突しないような大きな番号のUIDを選択し、かつ、データを共有するようなコンテナ間ではUIDに整合性を持たせる必要がある。
- コンテナイメージには「適切な」ビルドメタデータを持たせておくほうがよい。可視性とデバッグ機能を向上させることができる。だからと言って、OCIの設定全体を埋め込むのはやめよう。
- 「自分の思い込みに疑問を持ちましょう。ドキュメントを読みましょう。ステージング環境で不具合をテストしましょう」(Challenge your assumptions. Read the docs. Break things in staging.)