ubuntu-latest(Ubuntu 26.04)の「conda: command not found」:イメージに Miniconda が無く、$CONDA が空
GitHub の Ubuntu 26.04 のランナーのイメージには Miniconda が入っていません。イメージの告知には「removed from the Ubuntu 26.04 image due to maintenance reasons」(保守上の理由で 26.04 のイメージから外した)とあり(runner-images #14226)、イメージの説明書には環境変数 CONDA が値の無いまま残っています(Ubuntu2604-Readme.md・イメージ 20261026.180.1)。ubuntu-24.04 では Miniconda 26.9.4 が /usr/share/miniconda にあり、CONDA はそこを指します。そのため、ubuntu-latest で 24.04 から 26.04 に移ったジョブでは、$CONDA の先に conda がありません。
どう見えるか
GitHub Actions では、$CONDA/bin を PATH に足したステップの次のステップで落ちます:
Run conda env update --file environment.yml --name base /home/runner/work/_temp/....sh: line 1: conda: command not found Error: Process completed with exit code 127.
Azure Pipelines では次のとおりです(truera/trulens #2979):
line 1: conda: command not found ##[error]Bash exited with code '127'.
$CONDA/bin/conda を直に呼ぶステップや、$CONDA/etc/profile.d/conda.sh を読み込むステップは、line 1: /bin/conda: No such file or directory や line 1: /etc/profile.d/conda.sh: No such file or directory で落ちます。CONDA が空なので、パスが / から始まるからです。
当たるもの
- GitHub の雛形のワークフロー「Python Package using Anaconda」(actions/starter-workflows の
ci/python-package-conda.yml)。ubuntu-latestで動き、echo $CONDA/bin >> $GITHUB_PATHで conda を PATH に足します。CONDAが空だと足されるのは/binで、もとから PATH にあるので、次のステップで conda が見つかりません。 - Azure Pipelines の Microsoft の手順「Anaconda 環境でパイプラインを実行する」。その Ubuntu の欄は
echo "##vso[task.prependpath]$CONDA/bin"で conda を足します。告知は Azure DevOps も対象に挙げていて、trulens #2979 ではvmImage: ubuntu-latestの conda のジョブが、10月20日に ubuntu-24.04 の 20261012.334.1 で通り、次の日に ubuntu-26.04 の 20261018.168.1 で落ちました。パイプラインのほかのジョブは通っています。 $CONDA/bin/conda・$CONDA/bin/python・$CONDA/etc/profile.d/conda.shを使うステップ全般。conda-incubator/setup-minicondaは当たりません。インストーラーの入力が無いときはCONDAを通してイメージの Miniconda を使い、CONDAが空のときは代わりに最新の Miniconda のインストーラーをダウンロードします(アクションのコード・v4.1.0)。準備に時間はかかりますが、イメージに入っている conda には頼りません。
GitHub Actions での直し方:setup-miniconda に入れさせる
setup-miniconda は、あとのステップのために CONDA を設定し、conda を PATH に足します(アクションのコード・v4.1.0)。雛形のワークフローのほかのステップはそのままで動きます:
- uses: conda-incubator/setup-miniconda@v4
with:
miniforge-version: latest
activate-environment: ""
- name: Add conda to system path
run: |
echo $CONDA/bin >> $GITHUB_PATH
miniforge-version: latest は Miniforge を入れ、その既定のチャンネルは conda-forge です。外すと最新の Miniconda が入り、チャンネルは Anaconda の defaults になります。ビルドのマシンに入れた Miniconda のライセンスについて Anaconda から連絡を受けたある組織は、イメージのメンテナーに Miniforge への切り替えを求めています(runner-images #13433)。activate-environment: "" にすると、アクションがふだん作る test の環境を作りません。
Azure Pipelines での直し方:ステップで Miniforge を入れる
- bash: |
curl -fsSLo "$(Agent.TempDirectory)/miniforge.sh" https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
bash "$(Agent.TempDirectory)/miniforge.sh" -b -p "$(Agent.TempDirectory)/miniforge3"
echo "##vso[task.prependpath]$(Agent.TempDirectory)/miniforge3/bin"
displayName: Install Miniforge
-b はインストーラーを質問なしで進め、-p は入れる先を決めます。あとのステップで $CONDA を使っているところは、このパスに書き換えます。GitHub Actions でも、$RUNNER_TEMP と $GITHUB_PATH を使えば同じステップで入れられます。そのときは echo "CONDA=$RUNNER_TEMP/miniforge3" >> "$GITHUB_ENV" も足すと、$CONDA を使うステップがそのまま動きます。
または、当面は 24.04 にとどまる
runs-on: ubuntu-24.04、Azure Pipelines なら vmImage: ubuntu-24.04 にすると、Miniconda 26.9.4 と CONDA=/usr/share/miniconda が残ります。ジョブを 26.04 に移すときまで、変更を先に延ばすだけです。
26.04 のイメージから消えたほかのツール
告知の同じ表では、24.04 にあるツールがほかにも外れています:
- Julia(24.04 では 1.13.2):
julia-actions/setup-julia@v2で入れます。 - fastlane(24.04 では 2.241.1):
Gemfileから Bundler で入れるか、gem install fastlaneで入れます。 - グローバルに入っていた npm のモジュールの grunt・gulp・parcel・typescript・newman・webpack・webpack-cli・lerna:
devDependenciesに足してnpxで動かすか、ジョブの中でnpm install -gします。
見分け方
echo "CONDA=[$CONDA]"がCONDA=[]を表示します。- Set up job のステップ(Azure Pipelines では Initialize job)に、イメージ
ubuntu-26.04が出ます。 ls /usr/share/minicondaが失敗します。ubuntu-24.04ではインストールの中身が出ます。- 同じワークフローが
runs-on: ubuntu-24.04では通ります。
ほかの 26.04 の失敗
- setup-python の「The version ... with architecture 'x64' was not found」:setup-python には 26.04 向けの Python 3.8 と 3.9 のビルドが無く、ほかの版も新しいパッチリリースだけです。マイナーバージョンで指定するか、古い版は
ubuntu-24.04で。 - Ubuntu 26.04 の「cannot enable executable stack」:glibc 2.43 は実行可能なスタックを求めるライブラリーの
dlopenを断るので、Julia 1.10.0〜1.10.8・conda-forge の TensorFlow 2.19・一部の MEX ファイルが「Invalid argument」で落ちます。patchelf --clear-execstackでフラグを外します。 - Ubuntu 26.04 の PyCQA/bandit-action:アクションは Python 3.8(v1.0.1 では 3.9)を入れ、変える入力がありません。setup-python の 26.04 向けのビルドは 3.10 からなので、Bandit は自分のステップで動かします。
- Azure Pipelines の「Access to the path '/home/vsts' is denied」:26.04 ではエージェントのユーザーが
runnerなので、/home/vstsと書いたパスが失敗します。$(Pipeline.Workspace)や$HOMEから組み立てます。 - Ubuntu 26.04 の apt:名前が変わったパッケージと、無くなったパッケージ。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べるので、ubuntu-latest が移ったときに赤くなったワークフローがすぐ分かり、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、Anaconda と Miniconda は Anaconda, Inc. の商標、Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Anaconda, Inc.・Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · setup-python の「was not found」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English