遅ればせながらあけましておめでとうございます。2026年もよろしくお願いいたします。
写真は羽田沖で撮影した今年の初日の出です。今年の元旦は雲が多く、7時すぎにようやく太陽が姿を表してくれました。
メモリークリスマス!
前回に引き続き、今回も Intel MPK/PKU 関連のお話です。
自分はハードウェア支援のメモリ安全性やアクセス制御に興味があり、昨今、Rust 向けにこんなライブラリを試作しています。
yotiosoft/mprotect-rs: An implementation of mprotect() and pkey_mprotect() for Rust. This enables Rust to set access rights to each pages, using PTE flags or Intel MPK (Memory Protection Keys).
まだまだ開発途中で未完成ですが、今回はこのライブラリの簡単な紹介と、今後目指す理想像についてお話したいと思います。
今回はハードウェアレベルでメモリ保護を実現する Intel MPK (Memory Protection Keys) のユーザ空間向けの機能、Intel PKU (Protection Keys for Userspace) で遊んでみたという内容になります。
Intel PKU を使うと、ユーザ空間内に複数個のサンドボックスを作成でき、なおかつハードウェア制御により高速なアクセス制御が可能になります。Intel PKU は登場してから10年たった今でも論文などで様々な利用方法が提案されている非常に奥の深い機能なんですが(あまり実用例は聞かないけど)、今回は導入編として、ゆるく触ってみる程度にしたいと思います。
以前、cron と rtcwake を使って通常の Linux PC で決まった時間に自動起動させる方法についてまとめました。
cronとrtcwakeでLinux PCが決まった時間帯だけ起動するようにする | 為せばnull
自宅の Raspberry Pi 5 サーバでもこれができないかなと思ったんですが、ラズパイは設定先が異なっていたのでメモしておきます。
自宅の Raspberry Pi サーバで samba で NAS を運用しているんですが、iPad からだけなぜか「読み取り専用」となってしまって書き込めない問題が起きていました。Windows からでも macOS からでも普通に書き込めるのに、iPad だけ書き込めません。
というわけで、今回はこれをサクッと解決しましょう。
先日、うっかり 350GB ほどの大規模圧縮ファイル(tar.bz2 形式)を Google Drive にアップロードしてしまいました。目的は NAS を dm-crypt 化する際(下記の記事)のファイル一次退避のため。
NAS用の外付けHDDをLVM化してついでに暗号化もする | 為せばnull
しかし困ったことに、アップロードはうまくいったのに対し、ダウンロードがうまくいきません。
ダウンロードエラーとなり、途中で中断されてしまいます。
これではファイルが Google Drive に閉じ込められてしまってローカルに戻すことができません。
今回はその解決策として、Google Drive 上の大規模単一ファイルを数個に分割し、ダウンロードして再結合するまでの手順をメモしていきたいと思います。
最近は GitHub Actions を使って、GitHub に commit するたびにビルドからテストまで自動で行うようにしています。
しかし、外部 API の API キーを扱うようなテストの場合、ログやテストコードから API キーが流出することは避けたいですよね。あるいは、パスワードがコードやログから流出することも避けたいです。今回は、GitHub Environments を使って、これらの機密情報が外部に漏れないようにしていきます。
新しい勤め先ではパソコンカタカタのお仕事でして、一日中職場にある Ubuntu のデスクトップ PC を使います。また、コロナ禍以降は職場はハイブリット制になっていまして、週何回出社という目標さえ守っていれば、週何日かはリモートワークできます。
それ自体はいいんですが、そうなると毎日出社するわけではないので、家から SSH 接続で仕事する日もあります。そのたびに誰かに毎日電源スイッチを押すよう頼むのも面倒ですし、毎日つけっぱなしにしておくのも電気がもったいない…
というわけで、平日の始業時間になったら PC を自動で起動し、終業時間になったら自動でシャットダウンするよう Ubuntu デスクトップにて設定しました。
Webブラウザからコンテナ内のターミナルにアクセスできるようにしたい!という欲が出てきたので作りました。
普通は SSH でシェルに繋げば済む話ですが、最終的には自分の Web サイト上で自作 OS を試用できるようにしたいという願望があります。v86 のように WASM で動く仮想マシンを使うアプローチもありますが、まずは実装が簡単そうなサーバサイドでコンテナを動かすアプローチで実装してみたいと思います。
現在、Raspberry Pi 5 で運用している NAS サーバはサーバアプリケーションに samba を利用しており、記憶媒体は USB 接続の外付け HDD で運用しています。この HDD は論理パーティションで区切っているのですが、今回は NAS サーバに Linux の LVM2 を導入し、柔軟にサイズ変更などが可能な論理ボリュームに移行したいと思います。
また、現在の HDD では USB を挿すだけで誰の PC からもデータが見える状態ですので、ついでに論理ボリュームの暗号化もしていきます。