システムをすべてlxcで動かそうとしているのだが、lxcでUbuntu 24.04を起動して、homebrewをインストールをしようとすると、パッケージ展開で、/var/tmpのところでパーミッションの設定ができず、bad addressというツレないエラーがでる。散々、AIに聞いてみたが、環境依存というか、QNAPのカーネルの問題でダメらしい。 fchmodat2() と言う関数のせいらしいんだが、 fchmodat2() を使わないtarコマンド、そもそも fchmodat2() を使わないBSD tarとかでも試したんだが、ラチが開かない。(そもそも別な問題があるんじゃないかと)
それにしてもhomebrewが動かない環境は使いにくい。一方、これからのLinuxのパッケージシステムはコンテナに移行するという噂も。RHEL10などはそうなっているとか(未確認)。じゃぁ、homebrewをコンテナで動かせないか?散々ググったが、homebrewからdockerを入れる記事はあるんだが、homebrewのdockerイメージの話はなく。しかし、homebrewのイメージがあった。
https://hub.docker.com/r/homebrew/brew
ということは、いけるんじゃない?しかし、やはり、記事は見つからず。。。AIに再度聞いてみた。
閑話休題
やり方
dockerがインストールされた環境を用意。決して、homebrewからdockerを入れてはいけない。それができる環境なら、この先の話は全く意味ない。差し詰め、「お前はもう出来ている」。AIが書いたのをそのまま貼り付ける。
#!/bin/bash
set -e
# 🔧 設定
BREW_CONTAINER_NAME=homebrew-container
BREW_IMAGE=homebrew/brew
BREW_VOLUME=homebrew_data
BREW_HOME_VOLUME=homebrew_home
# 🛠️ Docker ボリュームの作成(永続化)
docker volume inspect $BREW_VOLUME > /dev/null 2>&1 || docker volume create $BREW_VOLUME
docker volume inspect $BREW_HOME_VOLUME > /dev/null 2>&1 || docker volume create $BREW_HOME_VOLUME
# 🧱 コンテナ作成(初回のみ)
if ! docker ps -a --format '{{.Names}}' | grep -q "^${BREW_CONTAINER_NAME}$"; then
echo "📦 Creating container $BREW_CONTAINER_NAME…”
docker run -dit \
--name $BREW_CONTAINER_NAME \
-v $BREW_VOLUME:/home/linuxbrew/.linuxbrew \
-v $BREW_HOME_VOLUME:/home/linuxbrew \
--workdir /home/linuxbrew \
$BREW_IMAGE \
bash
fi
# 🧩 ホストに brew コマンドのシェルラッパーを作成
BREW_WRAPPER=/usr/local/bin/brew-docker
cat << 'EOF' | sudo tee $BREW_WRAPPER > /dev/null
#!/bin/bash
docker exec -it homebrew-container brew “$@“
EOF
sudo chmod +x $BREW_WRAPPER
# 🔧 パスを通す(必要に応じて ~/.bashrc に追加)
if ! echo "$PATH" | grep -q "/usr/local/bin"; then
echo '⚠️ brew-docker にパスが通っていません。/usr/local/bin を PATH に追加してください。’
fi
echo
echo "✅ セットアップ完了!以下のように使えます:”
echo
echo " brew-docker install wget”
echo " brew-docker list”
echo
echo "インストール済みのパッケージは永続化されます。"
使い方(パッケージのインストール)
brew-docker install awscli
この方法でインストールすると、普通には呼べないのでラッパーが必要
cat < 'EOF' > /usr/local/bin/docker-brew
#!/bin/bash
# コンテナ名(あなたの brew コンテナ名)
CONTAINER_NAME="homebrew-container”
# 引数がない場合は bash を開く
if [ $# -eq 0 ]; then
docker exec -it "$CONTAINER_NAME” bash
else
docker exec -it "$CONTAINER_NAME" “$@“
fi
EOF
sudo chmod +x /usr/local/bin/docker-brew
使い方(brewで入れたコマンドを呼び出す)
コマンドを使う場合
docker-brew aws —version
シェルに入る時
docker-brew
とりあえず出来た。環境設定や補完は使えないと思う。そういう機能は諦めた方がいい。。。じゃぁ、あんまし意味がないじゃん。コマンド毎にラッパーを作るしかないらしい。やり方はメモったけど、微妙なのでここでは割愛。
要は、Ubuntu 24.04のクラウドイメージでhomebrewが動いてくれればいいのだけど。最後の技は、仮想マシンなんだけど、あんな高コストなものは使いたくない。ちなみに、22.04のクラウドイメージは、homebrewは普通に動く。