Fedora 系 OS の Raspberry Pi で NVMe SSD を LUKS2 暗号化する
Raspberry Pi 5 の AlmaLinux 10.1 aarch64 で、NVMe SSD の root パーティションを LUKS2 暗号化し、起動時のパスフレーズ入力を省略する構成を作った。Raspberry Pi のファームウェアが読む /boot は暗号化せず、暗号化した root を initramfs 内の鍵で解除する構成である。
Raspberry Pi 5 の AlmaLinux 10.1 aarch64 で、NVMe SSD の root パーティションを LUKS2 暗号化し、起動時のパスフレーズ入力を省略する構成を作った。Raspberry Pi のファームウェアが読む /boot は暗号化せず、暗号化した root を initramfs 内の鍵で解除する構成である。
前回の手順で SSH X11 転送環境を組み、xeyes は無事 Windows 側に表示された。ところが nautilus がどうしても起動しない。DISPLAY は通っているのに、なぜこのアプリだけ落ちるのかを切り分けた記録。
Fedora 43 Server は、X サーバもデスクトップ環境も入っていなかった。ここから Windows 機に GUI アプリを表示させたい。デスクトップ環境は入れずに、SSH X11 転送でアプリを転送した備忘録。
自宅の LAN 用に、名前解決を速くしつつ広告もブロックする DNS サーバーを立てた。上流は Cloudflare の 1.1.1.1。Pi-hole を使わず、すでにインストール済みだった軽量な dnsmasq だけで完結させた記録である。SELinux にハマった話まで含めて残しておく。
同一 LAN 上の Fedora Server に myhost.local (mDNS) でアクセスしようとしたところ名前解決だけが失敗する現象に遭遇した。tcpdump でパケットを直接観測して切り分けたところ、原因は firewalld が mDNS の着信をブロックしていたことだった。
日々の業務で Python スクリプトを用いてデータ変換の自動化を行うと、次のような課題に直面することが多い。
Makefile は「依存関係」と「差分だけの再実行(インクリメンタルビルド)」を標準機能として備え、これらの課題を小さな記述で解決できる道具である。
Make は「依存関係がターゲットより新しいときにだけレシピを実行」する。これにより、元データや Python スクリプトを更新した場合に、必要な箇所のみが自動的に再実行される。
以下は raw データをクリーニングし、集計レポートを作る一連の処理を差分実行する例である。
# Makefile
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
.DELETE_ON_ERROR:
.ONESHELL:
.DEFAULT_GOAL := all
RAW_DIR := data/raw
CLEAN_DIR := data/clean
OUT_DIR := output
RAW := $(wildcard $(RAW_DIR)/*.csv)
CLEAN := $(patsubst $(RAW_DIR)/%.csv,$(CLEAN_DIR)/%.csv,$(RAW))
REPORT := $(OUT_DIR)/report.csv
# ディレクトリは順序限定依存(存在しなければ作るが、更新判定には使わない)
$(CLEAN_DIR) $(OUT_DIR):
mkdir -p $@
# 集計レポートはクリーン済み CSV と集計スクリプトに依存
$(REPORT): $(CLEAN) scripts/aggregate.py | $(OUT_DIR)
python scripts/aggregate.py -i $(CLEAN_DIR) -o $@
# 各 raw CSV から対応する clean CSV を生成
$(CLEAN_DIR)/%.csv: $(RAW_DIR)/%.csv scripts/clean.py | $(CLEAN_DIR)
python scripts/clean.py -i $< -o $@
.PHONY: all clean status
all: $(REPORT)
clean:
rm -rf $(CLEAN_DIR) $(OUT_DIR)
# 何が再ビルド対象かを確認するヘルパ
status:
@echo "RAW : $(RAW)"
@echo "CLEAN : $(CLEAN)"
@echo "REPORT: $(REPORT)"
@echo
@echo "Dry-run (what would run):"
@$(MAKE) -n all
この構成により次が実現できる。
# 初回(すべて生成)
make -j
# 一部の raw が更新(そのファイルのクリーンとレポートのみ再実行)
touch data/raw/a.csv
make -j
# クリーニングスクリプトが更新(全クリーンとレポートを再実行)
touch scripts/clean.py
make -j
# 集計スクリプトが更新(レポートのみ再実行)
touch scripts/aggregate.py
make
「何が走るか」を事前確認するには make -n が有効である。
例(簡便策):
PY_SRCS := $(wildcard scripts/**/*.py) $(wildcard scripts/*.py)
$(CLEAN_DIR)/%.csv: $(RAW_DIR)/%.csv $(PY_SRCS) | $(CLEAN_DIR)
python scripts/clean.py -i $< -o $@
make -j により独立したファイル変換を並列化できる。データ点数が多いほど効果が高い。| dir)で扱い、無駄な再ビルドを避ける。.DELETE_ON_ERROR を有効化する。.DEFAULT_GOAL := all で標準化し、make 一発で動かせるようにする。make -n(実行せず表示)、make --trace(どの判定で動くか表示)、make -d(詳細ログ)を使う。.PHONY: clean とし、生成物だけを削除するよう注意する。Python の実行環境も Make で管理できる。
VENV := .venv
PY := $(VENV)/bin/python
$(VENV)/bin/python: requirements.txt
python3 -m venv $(VENV)
$(VENV)/bin/pip install -r requirements.txt
touch $@
# 以降のレシピで $(PY) を使う
$(CLEAN_DIR)/%.csv: $(RAW_DIR)/%.csv scripts/clean.py | $(CLEAN_DIR) $(VENV)/bin/python
$(PY) scripts/clean.py -i $< -o $@
$(REPORT): $(CLEAN) scripts/aggregate.py | $(OUT_DIR) $(VENV)/bin/python
$(PY) scripts/aggregate.py -i $(CLEAN_DIR) -o $@
requirements.txt を更新すると必要な範囲でのみ再セットアップされる。
Amazon S3 Files は、S3 バケットを NFS ファイルシステムとして EC2 などのコンピュートリソースに直接マウントできるサービスである。データは S3 に保持されたまま、通常のファイル操作 (ls、cp、cat など) で読み書きできる。
pLaTeX を使って日本語の PDF 文書を作る手順をまとめた。ひな型の構成からコンパイル、よくあるエラーの対処まで解説する。
Linux (RHEL 系) に ISO イメージを使って TeX Live 2026 をインストールする手順をまとめた。RHEL 系全般に適用できる。
https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz
ここからダウンロードする。
参考: https://docs.rockylinux.org/8/guides/interoperability/import_rocky_to_wsl/
tar.xz を展開し、tar 形式にする。 tar にすることで、WSL2 へのインポートが可能となる。
cd ~/Downloads
xz -d Rocky-8-Container-Base.latest.x86_64.tar.xz
※Windows にインストール済みの bsdtar では展開不可。 ※xz コマンドがない場合は、cygwin64 でインストールするか、別の WSL ディストリビューションを用いて展開する。
WSL2 にイメージをインポートする。
wsl --import RockyLinux-8.10 $HOME .\Rocky-8-Container-Base.latest.x86_64.tar --version 2
wsl -l -v
ユーザー名: hikari の場合
wsl -d RockyLinux-8.10 -u root -- dnf install sudo passwd -ywsl -d RockyLinux-8.10 -u root -- adduser hikariwsl -d RockyLinux-8.10 -u root -- passwd -d hikariwsl -d RockyLinux-8.10 -u root -- usermod -aG wheel hikariwsl -d RockyLinux-8.10 -u root -- sed -i 's/^# %wheel/%wheel/' /etc/sudoerswsl -d RockyLinux-8.10 -u root -- echo -e "[user]\\ndefault=hikari" `| tee -a /etc/wsl.conf
wsl -d RockyLinux-8.10