dm-crypt で暗号化している SSD で TRIM を有効にする

dm-crypt で暗号化している SSD ではデフォルトでは TRIM (a.k.a discard) が無効になっています。 暗号化されたディスクで TRIM を有効化するべきかどうかというのはセキュリティ面から諸説あるようではあります。 理解が怪しいので、気になる人は Arch Wiki のこのあたりを読んでください。 https://wiki.archlinux.jp/index.php/Dm-crypt/%E7%89%B9%E8%A8%98%E4%BA%8B%E9%A0%85#.E3.82.BD.E3.83.AA.E3.83.83.E3.83.89.E3.82.B9.E3.83.86.E3.83.BC.E3.83.88.E3.83.89.E3.83.A9.E3.82.A4.E3.83.96_.28SSD.29_.E3.81.AE_Discard.2FTRIM_.E3.81.AE.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88 Arch Linux を前提としているので、他のディストリビューションでは動作しない可能性もあります。 起動中にパスワードを入力する場合 これは普通に cryptdeivce カーネルパラメータを使える場合で、一番シンプルです。 ただ、毎回パスワード入れている人は真面目な人だと思うので、TRIM したくならないのかもしれません。知りませんが。 これは allow-discard オプションを追加するだけいけるらしいです。試していないので実際に動くのかはよくわかりません。 どこにカーネルパラメータを書くかはブートローダー依存だと思うので、自分の環境に合うところに適当に書いてください。

Wireshark でオレオレプロトコルをいい感じに解析する

この記事は、CYBOZU SUMMER BLOG FES ‘24 (Garoon Stage) DAY 20 の記事です。 こんにちは! サイボウズ Garoon 開発チームの kofuk です。 CYBOZU SUMMER BLOG FES ‘24 も今日で最終日ですが、今日の話はまるっきり業務とは関係がありません。つまり夏の自由研究です。 普段はプロトコルの解析とは縁遠い生活を送っているのですが、たまにはバイト列と触れ合いたくなるのが人の性というものです。 いつもは意識することのないレイヤーに潜ってみることにしましょう! Wireshark とは? Wireshark に馴染みのない人もいるかもしれないので、まず Wireshark 自体について説明します。 Wireshark はざっくり言うとネットワークを流れているデータをキャプチャして解析するソフトウェアです1。 これを使うことで、例えばブラウザで Web サイトにアクセスした際に(Wi-Fi アダプタを介して)やり取りされているデータを GUI で見ることができます。

Hugo で OGP 画像を生成する

全国の Hugo ファンの皆さん、こんにちは(?) アドベントカレンダー以外でブログを書かない人になりつつあるので、 静的サイトジェネレータ (SSG) である Hugo を使って OGP 画像を自動生成した話でもしたいと思います1。 Hugo は Go 言語で書かれた SSG で、Go の template を使ってサイトのレイアウトを組んでいくことになります (テーマと呼ばれる、出来合いのレイアウトを使うこともでき、これも結局は Go の template で書かれています)。 テンプレートは記事の一覧や記事自体のページを作っていく、というのが基本の使い方になるのですが、 Hugo にはテンプレートの中で Sass や TypeScript のトランスパイルを行ったり、画像を生成したりする機能がついています2。 この機能を使って、OGP 画像を生成してみた、というのが今回やったことです。

PHPerKaigi 2024に参加しました!(オンラインで)

2024/3/7〜9 に中野セントラルパークカンファレンスで開催された PHPerKaigi 2024 に参加しました。(オンライン参加なので、現地には行っていません) PHPerKaigi 2024 https://phperkaigi.jp/2024/ PHPerKaigi(ペチパーカイギ)は、PHPer、つまり、現在PHPを使用している方、過去にPHPを使用していた方、これからPHPを使いたいと思っている方、そしてPHPが大好きな方たちが、技術的なノウハウとPHP愛を共有するためのイベントです。 オンラインではニコ生で現地の発表をリアルタイムで聞くことができました。これが非常に安定していて、発表を聞くぶんにはほとんど不自由を感じませんでした。 今回はオンライン参加だったので会場には行かなかったのですが、会場には最強インターネット環境が整備されていたり、ロッカーが提供されていたりしたらしいです。

aws-sdk-go-v2でGCSを叩いた際のSignatureDoesNotMatchに対処する

Google Cloud Storage は実は S3 互換の API が生えていて、既存の S3 を使うコードのオブジェクトの保存先を簡単に GCS に向けることができるようになっています。 理想的にはエンドポイントやトークンを差し替えれば移行できるのですが、他の S3 互換を謳うオブジェクトストレージと同じように単純にいかないことも多々あります。 最も一般的なエラーは S3 でサポートされているエンドポイントを互換オブジェクトストレージがサポートしていないという問題だと思いますが、 今回細かい部分の仕様の差異で AWS SDK で GCS のエンドポイントが叩けないという問題があったので、そのときにとった方法をメモしておきます。 雑な対処なので全く良い方法ではないですが。 起こったことと原因 aws-sdk-go-v2 で GCS に HMAC キーを使用してアクセスすると、正しいキーを指定しているにもかかわらず SignatureNoesNotMatch エラーが出ます。

Mastodonのフロントエンドをカスタマイズしてみよう

この記事は「Cybozu Frontend Advent Calendar 2023」 13 日目の記事です。 一家に一台 Mastodon とはよく言ったもので1、今や Mastodon のサーバは人々の生活に必要不可欠なものになっています。(そんなことはない) そして、自分で Mastodon のサーバを立てると、Mastodon 自体を改造する必要に迫られたり、細かい不便を解消するために手を入れたくなったりしてくるものです2。 この記事では、私が Mastodon のフロントエンドに手を入れた際の知見を共有します。 ちなみに業務ではフロントエンドとはかなり遠い領域を触っていて、フロントエンドは何も分かりません。 Mastodon とは? (↑分かりやすいらしい動画。kofuk は真面目に見たことがないですが)

ISUCONに出た

「初めて蟹を見た kofuk」というふざけた名前のチームで @uta8a と ISUCON13 に出ました。 当日のリポジトリも公開しています。 GitHub - uta8a/isucon13q-2023-11-25: ISUCON 13 https://github.com/uta8a/isucon13q-2023-11-25 ISUCON 13. Contribute to uta8a/isucon13q-2023-11-25 development by creating an account on GitHub. パフォーマンスに詳しくない人がほとんど準備せずに行くとこういう景色になるという感じで、結果は褒められたものではなかったです。 ただ ISUCON は人それぞれのレベルで頑張れるイベントで知識が薄くても暇になるということはないという感じで、良いイベントだなーと思いました。 めちゃくちゃ楽しかったです。 ちなみにチーム名はこれ↓が元ネタです。 蟹を初めて見た上田晋也みたいなツイートを見て電車で大笑いしていてマジで恥ずかしい — kofuk (@man_2_fork) April 14, 2023 uta8a が詳しくブログに書いてくれました。 ISUCON13に出た https://blog.uta8a.net/post/2023-11-25-isucon13f 初めて蟹を見た kofuk というチームでISUCON13に出ました。最終スコアは1万ちょいくらいです

Daidoquer2(Discord読み上げボット)を使った記録

Daidoquer2 (ddq2) という艮鮟鱇さんが作った読み上げボットをローカルのマシンで立ち上げ、 Discord のテキストチャンネルに書いた内容がボイスチャンネルで読み上げられるようにしたという記録です。 割と苦戦して、艮鮟鱇さんにヘルプ求めまくりながらやったところなんとか動くようになりました。 問題の原因はほとんど使っていた Docker イメージが古かっただけということもしなくもない。 TL; DR 的なサムシング 書いていたら思いの外前置きが長くなったので、(たぶん)順当に構築できた場合の手順との差分を最初に書いておきます。 docker-compose.yml が指しているイメージを最新にする ddq2 の images のところを書き換え ここを見て最新のやつを使ったほうが良さげ 他の人が喋っていたら音量を下げる機能を無効化する なぜか FFmpeg が死亡するので config/runtime.exs の ms_before_stop_low_voice を 0 に設定 Daidoquer2 って何なのよ (たぶん)数多ある Discord の読み上げボットの 1 つです。README が詳しいのでここであんまり書いても仕方ないんですが、Discord のボイスチャンネルで喋れない人が、 テキストチャンネルに何か投げるとそれが合成音声でボイスチャンネルに流される感じです。

Arch Linuxでext4のrootfsをLUKSで暗号化する

既存のファイルシステムを暗号化もできるらしい。 とりあえず使い捨ての環境でやってみたのでメモしておく。使ってる環境でやるならバックアップ取ってからやった方がいいと思う。 まず、Arch のインストールメディアで起動する。 ここでは /dev/nvme0n1p2 に rootfs があって、それ以上は分割されていないものとする。 複数のパーティションを 1 つの暗号化パーティションに入れることができるかは分からない。 LUKS のヘッダ分のスペースを空けないといけないので、まず ext4 のファイルシステムを縮小する。 僕はデータが入り切る最小サイズまで縮小した。計算が得意な人はギリギリのサイズに縮小してもいいと思うけど、 ext4 だとデータはあんまりバラけてないはず(多分)なのでどのくらい意味があるのかは不明。 (あと、僕はどうせミスる)

Arch Linuxを暗号化したディスクにインストールする

Arch Linux を LVM on LUKS の root filesystem にインストールしたのでメモ。 LVM を使うこと自体は完全にオプションで、LUKS の上に ext4 のファイルシステムを作っても別に良い(はず)。 これがどういう構成かというと、物理パーティションの上に LUKS で暗号化したパーティションを作り、 その上の LVM2 の LV の上の ext4 のパーティションに rootfs を作るというもの(オフチョベットしたテフをマブガッドしてリットにしてそうな説明)。 (意外にもとハマらずにできたので情報としての価値は低めです。) インストールガイド に従ってパーティションを切るところまでやる。 パーティションはこんな感じで切った。 ディレクトリ 範囲 説明 /boot 1 MiB–1 GiB ブートローダとか諸々用 / 残り全部 残りのディレクトリ用。暗号化する。LVMを使うので後で分割も可能。 /boot 大きめっすね。