From fc5466c451b84491e0eb7992d2183d4cb755e03d Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 28 Aug 2026 11:25:43 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat(container):=20npm=20=E3=82=B0=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=AB=E3=82=92=20ubuntu=20=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=B6=E3=81=A7=E6=9B=B4=E6=96=B0=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=80=81=E3=83=99=E3=83=BC=E3=82=B9=E3=82=92?= =?UTF-8?q?=20Ubuntu=2026.04=20LTS=20=E3=81=B8=E6=9B=B4=E6=96=B0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit npm のグローバル prefix が既定の /usr (root 所有) だったため、ubuntu ユーザでの `npm i -g` が EACCES で失敗し、codex などの自動バージョンアップが行えなかった。 - npm グローバル prefix を /usr/local/share/npm-global へ移し、ENV で全シェルに効かせる (置き場所とパーミッション設計は Dev Containers 標準に合わせた) - npm グループ + setgid + umask 0002 で、UID/GID を振り直しても壊れない形にする - trygroup / bi-tools の `npm i -g` を root から ubuntu 実行へ変更する (root で入れると root 所有ファイルが混ざり ubuntu が更新できなくなるため) - lfm へ NPM_CONFIG_PREFIX / PATH を追加する (副次的に、これまで欠けていた codex・gemini・yarn・tsc の実行ファイルも通るようになる) - ベースイメージを ubuntu:noble (24.04) から ubuntu:26.04 LTS へ更新する (最新 LTS。system python が 3.12 から 3.14 になる) Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01EwCPSHW7XBt9zbFi6opWBg --- containers/base/Dockerfile | 31 +++++++++++++++++++++++++++---- containers/bi-tools/Dockerfile | 6 ++++-- containers/lfm/Dockerfile | 5 ++++- containers/trygroup/Dockerfile | 8 +++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/containers/base/Dockerfile b/containers/base/Dockerfile index 5d0b8e8e..b8984237 100644 --- a/containers/base/Dockerfile +++ b/containers/base/Dockerfile @@ -1,8 +1,11 @@ # ================================== # devbase-base: 共通基盤イメージ -# Ubuntu noble + 共通ツール群 +# Ubuntu 26.04 LTS (resolute) + 共通ツール群 # ================================== -FROM ubuntu:noble +# 26.04 は 2026-04 リリースの最新 LTS (サポート 2031-04 まで)。 +# 24.04 (noble) からの主な差分は system python が 3.12 -> 3.14 になること。 +# 3.12/3.13 は既定リポジトリに無いため、必要なら `uv python install 3.12` を使う。 +FROM ubuntu:26.04 ENV DEBIAN_FRONTEND=noninteractive @@ -59,8 +62,18 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get clean; \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/* +# npm のグローバル prefix を /usr/local/share/npm-global に置く。 +# 既定の /usr/lib/node_modules + /usr/bin は root しか書けず、ubuntu ユーザでの +# `npm i -g`(codex などの自動バージョンアップ)が EACCES で失敗するため。 +# 置き場所とパーミッション設計は Dev Containers 標準 +# (devcontainers/images の javascript-node) に合わせている。 +# ディレクトリはユーザー作成後に ubuntu:npm 所有 + setgid へ変更する。 +ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global +ENV PATH="/usr/local/share/npm-global/bin:${PATH}" + # AWS CLI + gcloud SDK + uv + npm globals(1レイヤーにまとめる) RUN set -eux; \ + mkdir -p "$NPM_CONFIG_PREFIX"; \ # AWS CLI v2 curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o /tmp/awscliv2.zip; \ unzip -q /tmp/awscliv2.zip -d /tmp; \ @@ -93,7 +106,8 @@ RUN set -eux; \ docker-credential-gcr cloud-run-proxy 2>&1 || true; \ # uv (Python パッケージマネージャー) curl -LsSf https://astral.sh/uv/install.sh | sh; \ - # npm グローバルパッケージ + # npm グローバルパッケージ(umask 0002 で npm グループにも書き込み権を残す) + umask 0002; \ npm i -g yarn @playwright/test aws-cdk aws-cdk-lib typescript @google/gemini-cli @openai/codex; \ # クリーンアップ rm -rf /tmp/* /var/tmp/* \ @@ -122,7 +136,16 @@ RUN groupadd -f users; \ usermod -aG users,docker $USERNAME; \ echo '%users ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/users; \ echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME; \ - chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME + chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME; \ + # npm グローバル領域を sudo なしで更新できるようにする。 + # 所有を $USERNAME:npm にし、ディレクトリへ setgid を付けて + # 後から誰が入れてもグループが npm のまま揃うようにする + # (UID/GID を振り直しても壊れない Dev Containers 方式)。 + groupadd -r npm; \ + usermod -aG npm $USERNAME; \ + chown -R $USERNAME:npm "$NPM_CONFIG_PREFIX"; \ + chmod -R g+rwX "$NPM_CONFIG_PREFIX"; \ + find "$NPM_CONFIG_PREFIX" -type d -exec chmod g+s {} + USER ${USERNAME} WORKDIR /tmp diff --git a/containers/bi-tools/Dockerfile b/containers/bi-tools/Dockerfile index 31e1ae8f..cfd1d441 100644 --- a/containers/bi-tools/Dockerfile +++ b/containers/bi-tools/Dockerfile @@ -23,8 +23,10 @@ FROM devbase-base:latest -# --- root: グローバル npm CLI(Lightdash クライアント)--- -USER root +# --- ubuntu: グローバル npm CLI(Lightdash クライアント)--- +# npm のグローバル prefix (/usr/local/share/npm-global) は base で ubuntu 所有にしてあるため +# root へ切り替えずにインストールする(root で入れると ubuntu が更新できなくなる)。 +USER ubuntu RUN set -eux; \ npm i -g @lightdash/cli; \ lightdash --version diff --git a/containers/lfm/Dockerfile b/containers/lfm/Dockerfile index cbb3453b..9e3015bd 100644 --- a/containers/lfm/Dockerfile +++ b/containers/lfm/Dockerfile @@ -85,7 +85,10 @@ COPY --from=devbase-base:latest /home/ubuntu/.local /home/ubuntu/.local RUN ln -sf /usr/lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm && \ ln -sf /usr/lib/node_modules/npm/bin/npx-cli.js /usr/bin/npx -ENV PATH="/home/ubuntu/.local/bin:/opt/google-cloud-sdk/bin:${PATH}" +# npm のグローバル prefix は base と同じ(上の COPY /usr/local で取り込み済み。 +# COPY --from は所有者を保持するので ubuntu 所有のまま = sudo なしで `npm i -g` できる)。 +ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global +ENV PATH="/usr/local/share/npm-global/bin:/home/ubuntu/.local/bin:/opt/google-cloud-sdk/bin:${PATH}" # 確認 RUN gh --version && node --version && npm --version && aws --version && gcloud --version diff --git a/containers/trygroup/Dockerfile b/containers/trygroup/Dockerfile index f0614420..5d8d07a9 100644 --- a/containers/trygroup/Dockerfile +++ b/containers/trygroup/Dockerfile @@ -5,12 +5,14 @@ FROM devbase-base:latest -# --- root レイヤー: pnpm(npm グローバル) --- -USER root +# --- user レイヤー: pnpm(npm グローバル) --- +# npm のグローバル prefix (/usr/local/share/npm-global) は base で ubuntu 所有にしてあるため +# root へ切り替えずにインストールする(root で入れると ubuntu が更新できなくなる)。 +USER ubuntu RUN set -eux; \ npm i -g pnpm; \ npm cache clean --force; \ - rm -rf /root/.npm + rm -rf ~/.npm # --- user レイヤー: Poetry --- # uv との競合回避: From e49c096731e603b261fc8f832068899ba5ad7669 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 28 Aug 2026 11:38:09 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix(container):=20npm=20=E3=82=B0=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=90=E3=83=AB=E9=A0=98=E5=9F=9F=E3=81=AE=E6=A8=A9?= =?UTF-8?q?=E9=99=90=E4=BB=98=E4=B8=8E=E3=82=92=E3=83=AC=E3=82=A4=E3=83=A4?= =?UTF-8?q?=E3=83=BC=E8=82=A5=E5=A4=A7=E3=81=AA=E3=81=97=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=80=81lfm=20=E3=81=AE=20npm=20GID=20=E3=82=92=E6=8F=83?= =?UTF-8?q?=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cross-review (gemini, round 1) の指摘 2 件へ対応。 - containers/base/Dockerfile: ユーザー/グループ作成を npm install レイヤーより 前へ移し、chown -R / chmod -R / setgid を npm install と同じ RUN 内で実施する。 従来は別レイヤーで chown -R していたため、数百MBの node_modules が メタデータ変更だけのために新レイヤーへ丸ごと複製されていた。 あわせて prefix ディレクトリを install -d -m 2775 -o ubuntu -g npm で作る。 - containers/base/Dockerfile: npm グループの GID を ARG NPM_GID=2000 で固定する。 派生イメージ (lfm) と GID を揃えるため。 - containers/lfm/Dockerfile: base と同じ GID で npm グループを作り、 ubuntu を所属させる。base から COPY した /usr/local 配下のファイルは GID 数値しか保持しないため、グループ定義が無いと GID が未定義になり setgid が効かず sudo なしの `npm i -g` ができなかった。 lfm 側で chown -R はしない(同じレイヤー肥大を招くため)。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01EwCPSHW7XBt9zbFi6opWBg --- containers/base/Dockerfile | 57 +++++++++++++++++++++++--------------- containers/lfm/Dockerfile | 19 ++++++++++--- 2 files changed, 49 insertions(+), 27 deletions(-) diff --git a/containers/base/Dockerfile b/containers/base/Dockerfile index b8984237..b51e567b 100644 --- a/containers/base/Dockerfile +++ b/containers/base/Dockerfile @@ -62,18 +62,45 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get clean; \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/* /var/tmp/* +# ユーザー設定 +# npm グローバル領域 (後述の NPM_CONFIG_PREFIX) を sudo なしで更新できるようにするため、 +# ユーザーとグループは npm パッケージのインストールより「前」に作っておく。 +# こうすると所有者・パーミッションの変更を install と同じ RUN 内で完結でき、 +# 数百MBの node_modules がメタデータ変更だけのために新しいレイヤーへ +# 丸ごと複製されるのを避けられる。 +ARG USERNAME="ubuntu" +# npm グループの GID は派生イメージ (containers/lfm) と揃える必要があるため固定する。 +# lfm は base から /usr/local を COPY するだけで base のグループ定義を引き継がないため、 +# GID が動的だと COPY されたファイルの GID が派生側で未定義になる。 +# 2000 は Ubuntu の system group (<1000) とも既定ユーザー ubuntu (1000) とも衝突しない。 +ARG NPM_GID="2000" +RUN set -eux; \ + groupadd -f users; \ + groupadd -f docker; \ + groupadd -g "$NPM_GID" npm; \ + if ! id -u $USERNAME >/dev/null 2>&1; then \ + useradd -m -s /bin/bash $USERNAME; \ + fi; \ + usermod -aG users,docker,npm $USERNAME; \ + echo '%users ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/users; \ + echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME; \ + chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME + # npm のグローバル prefix を /usr/local/share/npm-global に置く。 # 既定の /usr/lib/node_modules + /usr/bin は root しか書けず、ubuntu ユーザでの # `npm i -g`(codex などの自動バージョンアップ)が EACCES で失敗するため。 # 置き場所とパーミッション設計は Dev Containers 標準 # (devcontainers/images の javascript-node) に合わせている。 -# ディレクトリはユーザー作成後に ubuntu:npm 所有 + setgid へ変更する。 +# ディレクトリは ubuntu:npm 所有 + setgid で作る(下の RUN で実施)。 ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global ENV PATH="/usr/local/share/npm-global/bin:${PATH}" # AWS CLI + gcloud SDK + uv + npm globals(1レイヤーにまとめる) RUN set -eux; \ - mkdir -p "$NPM_CONFIG_PREFIX"; \ + # 所有を $USERNAME:npm、ディレクトリへ setgid を付けて作る。 + # 後から誰が入れてもグループが npm のまま揃う + # (UID/GID を振り直しても壊れない Dev Containers 方式)。 + install -d -m 2775 -o "$USERNAME" -g npm "$NPM_CONFIG_PREFIX"; \ # AWS CLI v2 curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o /tmp/awscliv2.zip; \ unzip -q /tmp/awscliv2.zip -d /tmp; \ @@ -109,6 +136,11 @@ RUN set -eux; \ # npm グローバルパッケージ(umask 0002 で npm グループにも書き込み権を残す) umask 0002; \ npm i -g yarn @playwright/test aws-cdk aws-cdk-lib typescript @google/gemini-cli @openai/codex; \ + # root が作ったファイルも ubuntu が上書きできるように揃える。 + # install レイヤーと同じ RUN なのでレイヤーの複製は発生しない。 + chown -R "$USERNAME":npm "$NPM_CONFIG_PREFIX"; \ + chmod -R g+rwX "$NPM_CONFIG_PREFIX"; \ + find "$NPM_CONFIG_PREFIX" -type d -exec chmod g+s {} +; \ # クリーンアップ rm -rf /tmp/* /var/tmp/* \ /root/.npm /root/.cache /root/.config \ @@ -126,27 +158,6 @@ ENV PATH="/root/.local/bin:/opt/google-cloud-sdk/bin:${PATH}" # 確認 RUN gh --version && node --version && npm --version && aws --version && gcloud --version && session-manager-plugin --version -# ユーザー設定 -ARG USERNAME="ubuntu" -RUN groupadd -f users; \ - groupadd -f docker; \ - if ! id -u $USERNAME >/dev/null 2>&1; then \ - useradd -m -s /bin/bash $USERNAME; \ - fi; \ - usermod -aG users,docker $USERNAME; \ - echo '%users ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/users; \ - echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME; \ - chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME; \ - # npm グローバル領域を sudo なしで更新できるようにする。 - # 所有を $USERNAME:npm にし、ディレクトリへ setgid を付けて - # 後から誰が入れてもグループが npm のまま揃うようにする - # (UID/GID を振り直しても壊れない Dev Containers 方式)。 - groupadd -r npm; \ - usermod -aG npm $USERNAME; \ - chown -R $USERNAME:npm "$NPM_CONFIG_PREFIX"; \ - chmod -R g+rwX "$NPM_CONFIG_PREFIX"; \ - find "$NPM_CONFIG_PREFIX" -type d -exec chmod g+s {} + - USER ${USERNAME} WORKDIR /tmp diff --git a/containers/lfm/Dockerfile b/containers/lfm/Dockerfile index 9e3015bd..0bcb9cb7 100644 --- a/containers/lfm/Dockerfile +++ b/containers/lfm/Dockerfile @@ -86,7 +86,9 @@ RUN ln -sf /usr/lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm && \ ln -sf /usr/lib/node_modules/npm/bin/npx-cli.js /usr/bin/npx # npm のグローバル prefix は base と同じ(上の COPY /usr/local で取り込み済み。 -# COPY --from は所有者を保持するので ubuntu 所有のまま = sudo なしで `npm i -g` できる)。 +# COPY --from は所有者を保持するので ubuntu:npm 所有のまま = sudo なしで `npm i -g` できる。 +# ただし npm グループの定義自体は COPY されないので、下のユーザー設定で +# base と同じ GID で作り直して整合させる)。 ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global ENV PATH="/usr/local/share/npm-global/bin:/home/ubuntu/.local/bin:/opt/google-cloud-sdk/bin:${PATH}" @@ -95,9 +97,18 @@ RUN gh --version && node --version && npm --version && aws --version && gcloud - # ユーザー設定 ARG USERNAME="ubuntu" -RUN usermod -aG users,docker $USERNAME && \ - echo '%users ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/users && \ - echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME && \ +# npm グループの GID は containers/base/Dockerfile の ARG NPM_GID と必ず一致させる。 +# COPY --from が持ち込んだ /usr/local/share/npm-global 配下のファイルは GID 数値だけを +# 保持するため、lfm 側に同じ GID のグループが無いと GID が未定義のまま残り、 +# setgid ディレクトリも効かず ubuntu が sudo なしで `npm i -g` できなくなる。 +# ここで chown -R し直さないのは、数百MBの node_modules が丸ごと +# 新しいレイヤーへ複製されイメージが肥大化するため。 +ARG NPM_GID="2000" +RUN set -eux; \ + groupadd -g "$NPM_GID" npm; \ + usermod -aG users,docker,npm $USERNAME; \ + echo '%users ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/users; \ + echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME; \ chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME USER ${USERNAME} From 38d0008cec48b8c42257a0dbcce4e5e4f2ef9640 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 28 Aug 2026 12:07:44 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix(container):=2026.04=20=E7=A7=BB?= =?UTF-8?q?=E8=A1=8C=E3=81=AB=E4=BC=B4=E3=81=84=20php=20=E3=82=92=208.5=20?= =?UTF-8?q?=E5=8C=96=E3=81=97=20noble=20=E8=A1=A8=E8=A8=98=E3=81=A8=20lfm?= =?UTF-8?q?=20=E3=81=AE=E9=9D=9E=E4=BA=92=E6=8F=9B=E3=82=92=E6=95=B4?= =?UTF-8?q?=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - containers/php: php8.3-* → php8.5-*(26.04 標準リポジトリに php8.3 は無く php8.5 8.5.4 がある) - containers/php85: ondrej PPA が resolute 未対応 (dists/resolute が 404) のため標準リポジトリ利用へ切り替え - containers/snapshot: FROM ubuntu:noble → ubuntu:26.04 - docs/developer/{extending,contributing}.md: ubuntu:noble 表記を ubuntu:26.04 へ更新 - containers/lfm: base(26.04/glibc 2.43) と lfm(CUDA 12.6.3-ubuntu24.04/glibc 2.39) の 既知の非互換と、解消に CUDA 13.3.1-ubuntu26.04 への更新が必要である旨をコメントで明記 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01EwCPSHW7XBt9zbFi6opWBg --- containers/lfm/Dockerfile | 11 +++++++++++ containers/php/Dockerfile | 14 ++++++++------ containers/php85/Dockerfile | 8 ++++---- containers/snapshot/Dockerfile | 4 ++-- docs/developer/contributing.md | 2 +- docs/developer/extending.md | 6 +++--- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/containers/lfm/Dockerfile b/containers/lfm/Dockerfile index 0bcb9cb7..923079f1 100644 --- a/containers/lfm/Dockerfile +++ b/containers/lfm/Dockerfile @@ -75,6 +75,17 @@ RUN locale-gen en_US.UTF-8 && \ FROM cudabase # devbase-base から共通ツールをコピー +# +# 【既知の非互換 / 未解消】glibc バージョン不整合 +# devbase-base は ubuntu:26.04 (glibc 2.43) ベースだが、この lfm は +# nvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04 (glibc 2.39) ベースのままである。 +# そのため下の COPY で持ち込まれる node / gh 等のバイナリは、新しい glibc の +# シンボルを要求して実行時に "GLIBC_2.4x not found" で失敗する可能性が高い。 +# +# 解消には lfm のベースを nvidia/cuda の ubuntu26.04 タグへ更新する必要があるが、 +# 26.04 向けタグは CUDA 13.3.1 系のみで 12.6.3 は存在しないため、CUDA / cuDNN の +# メジャーアップグレードを伴う。PyTorch 等の GPU ライブラリ互換検証が別途必要になる +# ため、本 PR のスコープ外として後続対応とする(PR 本文「やらないこと / フォローアップ」参照)。 COPY --from=devbase-base:latest /usr/local /usr/local COPY --from=devbase-base:latest /usr/bin/gh /usr/bin/node /usr/bin/ COPY --from=devbase-base:latest /usr/lib/node_modules /usr/lib/node_modules diff --git a/containers/php/Dockerfile b/containers/php/Dockerfile index 53fb97dc..632dddf7 100644 --- a/containers/php/Dockerfile +++ b/containers/php/Dockerfile @@ -1,18 +1,20 @@ # Dockerfile.dev - devbase互換の開発コンテナ -# devbase-baseをベースに、PHP 8.3 + MySQL Client + 一般的なPHP拡張を追加 +# devbase-baseをベースに、PHP 8.5 + MySQL Client + 一般的なPHP拡張を追加 FROM devbase-base:latest USER root -# PHP 8.3 + 必要な拡張 + MySQL Client をUbuntuリポジトリからインストール +# PHP 8.5 + 必要な拡張 + MySQL Client をUbuntuリポジトリからインストール +# base が ubuntu:26.04 (resolute) になったため php8.3-* は標準リポジトリに存在しない。 +# 26.04 の標準リポジトリが php8.5 (8.5.4) を提供するので PPA は不要。 RUN set -eux; \ apt-get update; \ apt-get install -y \ - php8.3-fpm php8.3-cli php8.3-common \ - php8.3-gd php8.3-bcmath php8.3-mysql \ - php8.3-zip php8.3-exif php8.3-redis \ - php8.3-mbstring php8.3-xml php8.3-curl \ + php8.5-fpm php8.5-cli php8.5-common \ + php8.5-gd php8.5-bcmath php8.5-mysql \ + php8.5-zip php8.5-exif php8.5-redis \ + php8.5-mbstring php8.5-xml php8.5-curl \ default-mysql-client; \ rm -rf /var/lib/apt/lists/* diff --git a/containers/php85/Dockerfile b/containers/php85/Dockerfile index 5424f880..37f194ec 100644 --- a/containers/php85/Dockerfile +++ b/containers/php85/Dockerfile @@ -5,11 +5,11 @@ FROM devbase-base:latest USER root -# Ondřej Surý PPA追加 + PHP 8.5 + 必要な拡張 + MySQL Client をインストール +# PHP 8.5 + 必要な拡張 + MySQL Client をUbuntuリポジトリからインストール +# base が ubuntu:26.04 (resolute) になり、標準リポジトリが php8.5 (8.5.4) を +# 提供するようになったため ppa:ondrej/php は不要になった。 +# (ondrej PPA は resolute 向けの dist を公開しておらず、追加すると apt-get update が失敗する) RUN set -eux; \ - apt-get update; \ - apt-get install -y software-properties-common; \ - add-apt-repository -y ppa:ondrej/php; \ apt-get update; \ apt-get install -y \ php8.5-fpm php8.5-cli php8.5-common \ diff --git a/containers/snapshot/Dockerfile b/containers/snapshot/Dockerfile index 878f4f1f..6519c7ef 100644 --- a/containers/snapshot/Dockerfile +++ b/containers/snapshot/Dockerfile @@ -1,8 +1,8 @@ # ================================== # devbase-snapshot: スナップショット専用軽量イメージ -# Ubuntu noble + tar + zstd のみ +# Ubuntu 26.04 + tar + zstd のみ # ================================== -FROM ubuntu:noble +FROM ubuntu:26.04 RUN apt-get update -qq \ && apt-get install -y --no-install-recommends zstd \ diff --git a/docs/developer/contributing.md b/docs/developer/contributing.md index d520e60d..cdc0dc9a 100644 --- a/docs/developer/contributing.md +++ b/docs/developer/contributing.md @@ -199,7 +199,7 @@ def cmd_env_sync(devbase_root: Path, args) -> int: | 項目 | ルール | |------|--------| -| ベースイメージ | バージョンを明示する(`ubuntu:noble` 等、`latest` は避ける) | +| ベースイメージ | バージョンを明示する(`ubuntu:26.04` 等、`latest` は避ける) | | RUN コマンド | 論理的なグループ単位でまとめる。1行1コマンドの羅列は避ける | | 実行ユーザー | 最終的に `USER ubuntu` で実行する | | キャッシュ | apt のキャッシュはレイヤー内で削除する | diff --git a/docs/developer/extending.md b/docs/developer/extending.md index c5abf52d..d28121d0 100644 --- a/docs/developer/extending.md +++ b/docs/developer/extending.md @@ -241,14 +241,14 @@ devbase のコンテナイメージは `containers/` ディレクトリに定義 ```mermaid flowchart TB - Ubuntu["ubuntu:noble"] --> Base["devbase-base
Docker CLI, Python 3"] + Ubuntu["ubuntu:26.04"] --> Base["devbase-base
Docker CLI, Python 3"] Base --> General["devbase-general
AWS CLI, gcloud, Node.js, etc."] Base --> Go["devbase-go
Go 開発環境"] General --> PHP["devbase-php
PHP 8.3, Composer"] General --> LaTeX["devbase-latex
LaTeX"] General --> LFM["devbase-lfm
Rust, gfortran, MeCab"] - Ubuntu2["ubuntu:noble"] --> Snapshot["devbase-snapshot
zstd のみ(軽量)"] + Ubuntu2["ubuntu:26.04"] --> Snapshot["devbase-snapshot
zstd のみ(軽量)"] ``` ### 手順 1: ディレクトリとDockerfileの作成 @@ -285,7 +285,7 @@ USER ubuntu |------|-----------| | AWS CLI / gcloud / Node.js 等の一般的な開発ツールが必要 | `devbase-general` | | 最小限のツールだけでよい(Docker CLI + Python 3) | `devbase-base` | -| Docker も不要で極めて軽量なイメージが必要 | `ubuntu:noble` から直接構築 | +| Docker も不要で極めて軽量なイメージが必要 | `ubuntu:26.04` から直接構築 | ### 手順 2: ビルドと compose.yml への組み込み From adbda8d3abf73b41e3fc458d7ffa8ea75c831e0f Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 28 Aug 2026 12:57:33 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix(container):=20lfm=20=E3=82=92=20CUDA=20?= =?UTF-8?q?13.3.1=20/=20Ubuntu=2026.04=20=E5=8C=96=E3=81=97=20docs=20?= =?UTF-8?q?=E3=81=AE=E7=89=88=E6=95=B0=E8=A1=A8=E8=A8=98=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E9=9A=8F=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit devbase-base が ubuntu:26.04 (glibc 2.43) になったことで、 nvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04 (glibc 2.39) ベースだった lfm では COPY --from で持ち込まれる node / gh 等が動かず、直後の確認 RUN でビルド自体が 失敗する状態だった。cudabase を nvidia/cuda:13.3.1-cudnn-devel-ubuntu26.04 へ 更新して glibc を整合させる(nvidia/cuda の ubuntu26.04 タグは CUDA 13.3.1 系のみ)。 あわせて docs に残っていた Ubuntu Noble / PHP 8.3 の表記を 26.04 / 8.5 へ更新する。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01EwCPSHW7XBt9zbFi6opWBg --- containers/lfm/Dockerfile | 19 ++++++++----------- docs/developer/extending.md | 2 +- docs/plugin-dev/compose-yml-guidelines.md | 6 +++--- docs/plugin-dev/quickstart.md | 6 +++--- docs/user/container-operations.md | 8 ++++---- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/containers/lfm/Dockerfile b/containers/lfm/Dockerfile index 923079f1..3345090f 100644 --- a/containers/lfm/Dockerfile +++ b/containers/lfm/Dockerfile @@ -6,7 +6,7 @@ # ================================== # Stage: CUDA ベース + 追加パッケージ # ================================== -FROM nvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04 AS cudabase +FROM nvidia/cuda:13.3.1-cudnn-devel-ubuntu26.04 AS cudabase ENV DEBIAN_FRONTEND=noninteractive @@ -76,16 +76,13 @@ FROM cudabase # devbase-base から共通ツールをコピー # -# 【既知の非互換 / 未解消】glibc バージョン不整合 -# devbase-base は ubuntu:26.04 (glibc 2.43) ベースだが、この lfm は -# nvidia/cuda:12.6.3-cudnn-devel-ubuntu24.04 (glibc 2.39) ベースのままである。 -# そのため下の COPY で持ち込まれる node / gh 等のバイナリは、新しい glibc の -# シンボルを要求して実行時に "GLIBC_2.4x not found" で失敗する可能性が高い。 -# -# 解消には lfm のベースを nvidia/cuda の ubuntu26.04 タグへ更新する必要があるが、 -# 26.04 向けタグは CUDA 13.3.1 系のみで 12.6.3 は存在しないため、CUDA / cuDNN の -# メジャーアップグレードを伴う。PyTorch 等の GPU ライブラリ互換検証が別途必要になる -# ため、本 PR のスコープ外として後続対応とする(PR 本文「やらないこと / フォローアップ」参照)。 +# 【重要】cudabase の Ubuntu バージョンは devbase-base と必ず一致させること。 +# 下の COPY は node / gh 等の「ビルド済みバイナリ」を持ち込むため、 +# devbase-base (ubuntu:26.04 / glibc 2.43) より古い OS の上に置くと +# "GLIBC_2.4x not found" で即座に壊れる。そのため cudabase には +# nvidia/cuda の ubuntu26.04 タグを使用する。 +# なお nvidia/cuda の ubuntu26.04 タグは CUDA 13.3.1 系のみが提供されているため、 +# containers/base の Ubuntu を上げる際は CUDA のバージョンも追随させる必要がある。 COPY --from=devbase-base:latest /usr/local /usr/local COPY --from=devbase-base:latest /usr/bin/gh /usr/bin/node /usr/bin/ COPY --from=devbase-base:latest /usr/lib/node_modules /usr/lib/node_modules diff --git a/docs/developer/extending.md b/docs/developer/extending.md index d28121d0..a0a4da13 100644 --- a/docs/developer/extending.md +++ b/docs/developer/extending.md @@ -244,7 +244,7 @@ flowchart TB Ubuntu["ubuntu:26.04"] --> Base["devbase-base
Docker CLI, Python 3"] Base --> General["devbase-general
AWS CLI, gcloud, Node.js, etc."] Base --> Go["devbase-go
Go 開発環境"] - General --> PHP["devbase-php
PHP 8.3, Composer"] + General --> PHP["devbase-php
PHP 8.5, Composer"] General --> LaTeX["devbase-latex
LaTeX"] General --> LFM["devbase-lfm
Rust, gfortran, MeCab"] diff --git a/docs/plugin-dev/compose-yml-guidelines.md b/docs/plugin-dev/compose-yml-guidelines.md index 4aa70651..cb885d3c 100644 --- a/docs/plugin-dev/compose-yml-guidelines.md +++ b/docs/plugin-dev/compose-yml-guidelines.md @@ -149,13 +149,13 @@ flowchart TD | イメージ | ベース | 主要ツール | 典型的な用途 | |---------|--------|-----------|-------------| -| `base` | Ubuntu Noble | Docker CLI、Python 3 | 軽量な自動化・スクリプト | +| `base` | Ubuntu 26.04 | Docker CLI、Python 3 | 軽量な自動化・スクリプト | | `general` | base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | Webアプリ、インフラ管理 | | `go` | base | Go開発環境 | APIサーバー、CLIツール | -| `php` | general | PHP 8.3、Composer | Laravel、WordPress | +| `php` | general | PHP 8.5、Composer | Laravel、WordPress | | `latex` | general | LaTeX | 論文、技術文書、レポート | | `lfm` | general | Rust、gfortran、MeCab | 数値計算、自然言語処理 | -| `snapshot` | Ubuntu Noble | zstd | スナップショットの取得・復元 | +| `snapshot` | Ubuntu 26.04 | zstd | スナップショットの取得・復元 | ### 4.2 標準イメージの使用 diff --git a/docs/plugin-dev/quickstart.md b/docs/plugin-dev/quickstart.md index aec54434..13c43574 100644 --- a/docs/plugin-dev/quickstart.md +++ b/docs/plugin-dev/quickstart.md @@ -330,14 +330,14 @@ flowchart LR | イメージ | ベース | 主要ツール | 推奨用途 | |---------|--------|-----------|---------| -| `base` | Ubuntu Noble | Docker CLI、Python 3 | 軽量な開発環境 | +| `base` | Ubuntu 26.04 | Docker CLI、Python 3 | 軽量な開発環境 | | `general` | base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | 汎用開発 | | `go` | base | Go開発環境 | Go言語プロジェクト | -| `php` | general | PHP 8.3、Composer | PHP 8.3 系プロジェクト | +| `php` | general | PHP 8.5、Composer | PHP 8.5 系プロジェクト | | `php85` | general | PHP 8.5、Composer | PHP 8.5 系プロジェクト | | `latex` | general | LaTeX | 文書・論文作成 | | `lfm` | general | Rust、gfortran、MeCab | 数値計算・自然言語処理 | -| `snapshot` | Ubuntu Noble | zstd | スナップショット専用 | +| `snapshot` | Ubuntu 26.04 | zstd | スナップショット専用 | ### 5.5 Git管理のガイドライン diff --git a/docs/user/container-operations.md b/docs/user/container-operations.md index b140ec57..ccf2d5cc 100644 --- a/docs/user/container-operations.md +++ b/docs/user/container-operations.md @@ -194,7 +194,7 @@ devbase のコンテナイメージは用途に応じた階層構造になって ```mermaid graph TD - A[Ubuntu Noble] --> B[base] + A[Ubuntu 26.04] --> B[base] B --> C[general] B --> G[go] C --> D[php] @@ -214,14 +214,14 @@ graph TD | イメージ | ベース | 主な内容 | 用途 | |---------|-------|---------|------| -| **base** | Ubuntu Noble | Docker CLI、Python 3 | 最小限の開発環境 | +| **base** | Ubuntu 26.04 | Docker CLI、Python 3 | 最小限の開発環境 | | **general** | base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | 汎用開発環境 | -| **php** | general | PHP 8.3、Composer、MySQL Shell | PHP 8.3 系 開発 | +| **php** | general | PHP 8.5、Composer、MySQL Shell | PHP 8.5 系 開発 | | **php85** | general | PHP 8.5、Composer、MySQL Shell | PHP 8.5 系 開発 | | **latex** | general | LaTeX | 文書作成 | | **lfm** | general | Rust、gfortran、MeCab | 数値計算・自然言語処理 | | **go** | base | Go 開発環境 | Go 開発 | -| **snapshot** | Ubuntu Noble | zstd のみ(約 80MB) | スナップショット専用 | +| **snapshot** | Ubuntu 26.04 | zstd のみ(約 80MB) | スナップショット専用 | ### AI CLI エイリアス