Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: Fail to build on s390x and 32-bit architectures #648

Open
folliehiyuki opened this issue Oct 16, 2024 · 8 comments
Open

Bug: Fail to build on s390x and 32-bit architectures #648

folliehiyuki opened this issue Oct 16, 2024 · 8 comments
Labels
bug external Submitted by non-maintainers

Comments

@folliehiyuki
Copy link

folliehiyuki commented Oct 16, 2024

stacker version

v1.0.0

Describe the bug

I'm trying to package stacker for AlpineLinux at https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/60169. CI in the MR fails for different architectures as listed below:

32-bit platforms (x86, armhf, armv7)

The error comes from building submodule https://github.com/project-machine/atomfs.

# machinerun.io/atomfs/squashfs
vendor/machinerun.io/atomfs/squashfs/verity.go:112:22: cannot use _Ctype_ulong(verity.HashOffset / uint64(os.Getpagesize())) (value of type _Ctype_ulong) as _Ctype_uint64_t value in assignment
vendor/machinerun.io/atomfs/squashfs/verity.go:113:29: cannot use _Ctype_ulong(verity.HashOffset) (value of type _Ctype_ulong) as _Ctype_uint64_t value in assignment

s390x

On s390x, Statfs_t struct has element Type of uint32. The type is int32 for 32-bit platforms. Ref: https://cs.opensource.google/go/x/sys/+/refs/tags/v0.26.0:unix/ztypes_linux_s390x.go

# stackerbuild.io/stacker/pkg/stacker
pkg/stacker/check.go:107:26: cannot use st.Type (variable of type uint32) as int64 value in map index

To reproduce

make -C cmd/stacker/lxc-wrapper LDLIBS="$(pkg-config --libs lxc) -lpthread -ldl" lxc-wrapper

go build -v \
	-tags exclude_graphdriver_btrfs,exclude_graphdriver_devicemapper,containers_image_openpgp,osusergo,netgo,external_libzstd \
	-ldflags "-X stackerbuild.io/stacker/pkg/lib.StackerVersion=v$pkgver -X stackerbuild.io/stacker/pkg/lib.LXCVersion=$(pkg-config --modversion lxc)" \
	./cmd/stacker

Expected behavior

The build succeeds.

Screenshots

No response

Additional context

No response

@rchincha rchincha added the external Submitted by non-maintainers label Oct 17, 2024
@rchincha
Copy link
Contributor

@folliehiyuki stacker for its isolation uses lxc which ties it closely to linux/amd64 arch (at least for now)

We are looking to build for other platform/arch maybe using qemu.

@hallyn
Copy link
Contributor

hallyn commented Oct 17, 2024

lxc on s390 should be fine. But github doesn't have s390x runners.

@folliehiyuki do you by any chance have a s390 that could be used as a self-hosted github action runner? :-)

@mikemccracken
Copy link
Contributor

I see that the PR has arch="all" :
https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/60169/diffs#c7e8b1dcf9ee996620985421d1559f431d242bc9_0_7

@folliehiyuki - unless you specifically want to include 32-bit platforms, would you be OK with adjusting this to just say arch="x86_64" so it can get merged and be available for the platform that (I believe) users are most likely to want to use stacker on?

@folliehiyuki
Copy link
Author

Sadly I only have x86_64 machines to test the package on. For AlpineLinux, if the package isn't broken (on an "unusable" level) on a specific architecture, it's encouraged to build and provide the package in the repo for as many architectures as possible.

With some naive patches, I've managed to get stacker built for x86_64, aarch64, loongarch64, ppc64le, riscv64 while x86, armhf, armv7 and s390x are current broken as reported here. lxc package is available on all AlpineLinux repositories, so it shouldn't be an issue for the build there.

If upstream can benefit from having the package in AlpineLinux repository, and is interested in making it built on other platforms, I'm happy to disable the build on those failing architectures for the time being.

@rchincha
Copy link
Contributor

If upstream can benefit from having the package in AlpineLinux repository, and is interested in making it built on other platforms, I'm happy to disable the build on those failing architectures for the time being.

Not sure what "upstream" means. But from stacker pov, we are happy to have it included/packaged as part of AlpineLinux repo.

@folliehiyuki
Copy link
Author

Not sure what "upstream" means.

Sorry! I was talking with the perspective of a downstream distro's package maintainer, so "upstream" means this repo here. I've disabled the alpine build on platforms where it failed.

@rchincha
Copy link
Contributor

@mikemccracken
Copy link
Contributor

🥳 nice to see it in there. Thanks @folliehiyuki !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug external Submitted by non-maintainers
Projects
None yet
Development

No branches or pull requests

4 participants