はじめに
Ansible の ExecutionEnvironment をビルドするツールである ansible-builder
がメジャーアップデートされ、 3.0.0
がリリースされました。
いままで ansible-builder の 1系を使っていたので、お試しで ansible-builder 3 を触ってビルドしてみたところ、/usr/bin/dnf: No such file or directory
というエラーで失敗したのでメモします。
環境
事象
execution-environment.yml を以下のように記述してビルドを実行したところ、エラーになってしまいました。
--- version: 3 images: base_image: name: quay.io/centos/centos:stream9 dependencies: galaxy: collections: - name: community.general version: 6.4.0 python: - ansible-lint==5.4.0 system: - git additional_build_files: - src: ./ansible.cfg dest: configs additional_build_steps: prepend_base: - ADD _build/configs/ansible.cfg ~/.ansible.cfg prepend_final: - RUN whoami - RUN cat /etc/os-release append_final: - RUN echo This is a post-install command! - RUN ls -la /etc
ansible-builder build -t nakayumc0278/custom-ee:001
エラーメッセージ
#26 3.830 + /usr/bin/dnf install -y dnf gcc git krb5-devel ・・・ #26 3.830 /output/scripts/assemble: line 75: /usr/bin/dnf: No such file or directory #26 ERROR: process "/bin/sh -c /output/scripts/assemble" did not complete successfully: exit code: 127 ERROR: failed to solve: process "/bin/sh -c /output/scripts/assemble" did not complete successfully: exit code: 127
結論から書くと、ansible-builder の 3系では、パッケージマネージャーがデフォルトで /usr/bin/dnf
になっていて、ベースイメージに dnf
が入っていないためでした。
ベースイメージのパッケージ一覧を確認してみると、確かに dnf
は入っていませんが、microdnf
というものが入っています。なにやら dnf
よりも軽量なパッケージマネージャーで docker イメージのサイズを小さくするために使われているようでした。
また、RHEL のアップストリーム版である Fedora では、dnf
を microdnf
に置き換わる計画をしているようです。
近いうちに microdnf
に置き換わるのかもしれません。
解決策
上の画像にもありますが、 ベースイメージには、dnf
の軽量版である microdnf
が入っています。
execution-environment.yml に options
の package_manager_path
で microdnf
を指定して追記することで解決できました。
追記後の execution-envoronment.yml
--- version: 3 images: base_image: name: quay.io/centos/centos:stream9 dependencies: galaxy: collections: - name: community.general version: 6.4.0 python: - ansible-lint==5.4.0 system: - git options: package_manager_path: /usr/bin/microdnf # 追記 additional_build_files: - src: ./ansible.cfg dest: configs additional_build_steps: prepend_base: - ADD _build/configs/ansible.cfg ~/.ansible.cfg prepend_final: - RUN whoami - RUN cat /etc/os-release append_final: - RUN echo This is a post-install command! - RUN ls -la /etc
実行結果
#34 [final 13/13] RUN rm -rf /output #34 DONE 0.5s #35 exporting to image #35 exporting layers #35 exporting layers 2.1s done #35 writing image sha256:126e70fa982cc99b488f740f828282efe390249f1ee97e3592d35e29c0fa3b5c done #35 naming to docker.io/nakayumc0278/ee001 done #35 DONE 2.1s Complete! The build context can be found at: /home/nakayumc/container/context