+
Skip to content

Cri-o build failure in Ubuntu with v1.31.x #9277

Closed
@subash-m

Description

@subash-m

What happened?

Cri-o v1.31.9 build failed in Ubuntu environment:

make install
go version go1.22.12 4493 X:boringcrypto linux/amd64
make[1]: Entering directory '/sparta/input/crio'
go build -trimpath  -ldflags '-s -w -X github.com/cri-o/cri-o/internal/version.buildDate='2025-06-20T09:18:03Z' ' -tags "containers_image_ostree_stub  exclude_graphdriver_btrfs btrfs_noversion containers_image_openpgp seccomp selinux  exclude_graphdriver_devicemapper" -o bin/crio ./cmd/crio
make -C pinns
make[2]: Entering directory '/sparta/input/crio/pinns'
cc -std=c99 -Os -Wall -Werror -Wextra -static -O3 -o src/pinns.o -c src/pinns.c
cc -std=c99 -Os -Wall -Werror -Wextra -static -O3 -o src/sysctl.o -c src/sysctl.c
cc -o ../bin/pinns src/pinns.o src/sysctl.o -std=c99 -Os -Wall -Werror -Wextra -static  
strip -s ../bin/pinns
make[2]: Leaving directory '/sparta/input/crio/pinns'
install  -D -m 755 bin/crio /usr/local/bin/crio
install  -D -m 755 bin/pinns /usr/local/bin/pinns
install  -d -m 755 /usr/local/share/man/man5
install  -d -m 755 /usr/local/share/man/man8
install  -m 644 docs/crio.conf.5 docs/crio.conf.d.5 -t /usr/local/share/man/man5
install: cannot stat 'docs/crio.conf.5': No such file or directory
install: cannot stat 'docs/crio.conf.d.5': No such file or directory
make[1]: *** [Makefile:278: install.man-nobuild] Error 1
make[1]: Leaving directory '/sparta/input/crio'
make: *** [Makefile:127: build-crio-debian] Error 2

What did you expect to happen?

I wanted the Cri-o v1.31.9 build to succeed similar to other cri-o minor versions.
Example: Cri-o v1.30.14 build output snippet:

make install
go version go1.22.12 4493 X:boringcrypto linux/amd64
make[1]: Entering directory '/sparta/input/crio'
go build  -trimpath  -ldflags '-s -w -X github.com/cri-o/cri-o/internal/version.buildDate='2025-06-04T23:37:01Z' ' -tags "containers_image_ostree_stub  exclude_graphdriver_btrfs btrfs_noversion exclude_graphdriver_devicemapper libdm_no_deferred_remove containers_image_openpgp seccomp selinux " -o bin/crio github.com/cri-o/cri-o/cmd/crio
make -C pinns
make[2]: Entering directory '/sparta/input/crio/pinns'
cc -std=c99 -Os -Wall -Werror -Wextra -static -O3 -o src/pinns.o -c src/pinns.c
cc -std=c99 -Os -Wall -Werror -Wextra -static -O3 -o src/sysctl.o -c src/sysctl.c
cc -o ../bin/pinns src/pinns.o src/sysctl.o -std=c99 -Os -Wall -Werror -Wextra -static  
strip -s ../bin/pinns
make[2]: Leaving directory '/sparta/input/crio/pinns'
install  -D -m 755 bin/crio /usr/local/bin/crio
install  -D -m 755 bin/pinns /usr/local/bin/pinns
(/sparta/input/crio/build/bin/go-md2man -in docs/crio.8.md -out docs/crio.8.tmp && touch docs/crio.8.tmp && mv docs/crio.8.tmp docs/crio.8) || \
	(/sparta/input/crio/build/bin/go-md2man -in docs/crio.8.md -out docs/crio.8.tmp && touch docs/crio.8.tmp && mv docs/crio.8.tmp docs/crio.8)
(/sparta/input/crio/build/bin/go-md2man -in docs/crio.conf.5.md -out docs/crio.conf.5.tmp && touch docs/crio.conf.5.tmp && mv docs/crio.conf.5.tmp docs/crio.conf.5) || \
	(/sparta/input/crio/build/bin/go-md2man -in docs/crio.conf.5.md -out docs/crio.conf.5.tmp && touch docs/crio.conf.5.tmp && mv docs/crio.conf.5.tmp docs/crio.conf.5)
(/sparta/input/crio/build/bin/go-md2man -in docs/crio.conf.d.5.md -out docs/crio.conf.d.5.tmp && touch docs/crio.conf.d.5.tmp && mv docs/crio.conf.d.5.tmp docs/crio.conf.d.5) || \
	(/sparta/input/crio/build/bin/go-md2man -in docs/crio.conf.d.5.md -out docs/crio.conf.d.5.tmp && touch docs/crio.conf.d.5.tmp && mv docs/crio.conf.d.5.tmp docs/crio.conf.d.5)
install  -d -m 755 /usr/local/share/man/man5
install  -d -m 755 /usr/local/share/man/man8
install  -m 644 docs/crio.conf.5 docs/crio.conf.d.5 -t /usr/local/share/man/man5
install  -m 644 docs/crio.8 -t /usr/local/share/man/man8
install  -d -m 755 /usr/local/share/bash-completion/completions
install  -d -m 755 /usr/local/share/fish/completions
install  -d -m 755 /usr/local/share/zsh/site-functions
install  -D -m 644 -t /usr/local/share/bash-completion/completions completions/bash/crio
install  -D -m 644 -t /usr/local/share/fish/completions completions/fish/crio.fish
install  -D -m 644 -t /usr/local/share/zsh/site-functions  completions/zsh/_crio
install  -D -m 644 contrib/systemd/crio.service /usr/local/lib/systemd/system/crio.service
install  -D -m 644 contrib/systemd/crio-wipe.service /usr/local/lib/systemd/system/crio-wipe.service
./bin/crio -d "" --config=""  config > crio.conf

How can we reproduce it (as minimally and precisely as possible)?

I was able to reproduce locally in Mac by invoking the following make target with Cri-o v1.31.9.

❯ make install.man
install  -d -m 755 /usr/local/share/man/man5
install  -d -m 755 /usr/local/share/man/man8
install  -m 644 docs/crio.conf.5 docs/crio.conf.d.5 -t /usr/local/share/man/man5
install: docs/crio.conf.5: No such file or directory
make: *** [install.man-nobuild] Error 71
❯

Anything else we need to know?

The issue got introduced by commit: 1f212dc7bd4f5977be526447e1a55625747ecbb9, where the following code section got moved after the make target: "install.man".

MANPAGES_MD := $(wildcard docs/*.md)
MANPAGES    := $(MANPAGES_MD:%.md=%)

docs/%.5: docs/%.5.md ${GO_MD2MAN}
	(${GO_MD2MAN} -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || \
		(${GO_MD2MAN} -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@)

docs/%.8: docs/%.8.md ${GO_MD2MAN}
	(${GO_MD2MAN} -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || \
		(${GO_MD2MAN} -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@)

I validated that re-arranging these above targets above "install.man" is able to resolve the issue.

  • A refactor moved docs/%.5 and docs/%.8 after install.man.
  • Additionally, the assumption was made that the .5, .8 doc files were pre-generated by other targets.
  • install.man directly depends on files, but does not ensure that pattern rules are matched before the dependency is evaluated.

CRI-O and Kubernetes version

$ crio --version
Not applicable for this issue
$ kubectl version --output=json
Not applicable for this issue

OS version

# On Linux:
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ uname -a
Linux 71177c10-f7fc-4110-85f6-b87758d756ac 5.15.0-308.179.6.3.el9uek.x86_64 #2 SMP Tue May 13 20:29:18 PDT 2025 x86_64 x86_64 x86_64 GNU/Linux

Additional environment details (AWS, VirtualBox, physical, etc.)

OKE

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载