[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug 1886793] Re: "go install" command fails while running inside s390x
From: |
Nirman Narang |
Subject: |
[Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu |
Date: |
Thu, 23 Jul 2020 11:24:15 -0000 |
I ran the following commands:
#apt install debootstrap
#debootstrap_dir=debootstrap
#debootstrap --arch=s390x --foreign sid "$debootstrap_dir"
#sudo mkdir -p "${debootstrap_dir}/usr/bin"
#sudo cp "$(which qemu-s390x-static)" "${debootstrap_dir}/usr/bin"
#sudo cp "$(which qemu-s390x)" "${debootstrap_dir}/usr/bin"
All commands above were successful except below one:
#sudo chroot "$debootstrap_dir" /debootstrap/debootstrap --second-stage
Gave following error:
W: Failure trying to run: dpkg --force-depends --install
/var/cache/apt/archives/base-passwd_3.5.47_s390x.deb
W: See //debootstrap/debootstrap.log for details (possibly the package libgcc1
is at fault)
Anyway, I proceeded:
# uname -m
s390x
# apt install golang-go
Reading package lists... Done
Building dependency tree... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
dpkg : Conflicts: dpkg:none
dpkg:none : Conflicts: dpkg but 1.20.5 is to be installed
golang-go : Depends: golang-1.14-go but it is not going to be installed
Depends: golang-src (>= 2:1.14~2) but it is not going to be
installed
libgcc1 : Depends: gcc-10-base (= 10.1.0-1) but 10.1.0-6+b1 is to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or
specify a solution).
# apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Correcting dependencies... Done
The following packages will be REMOVED:
dpkg:none libgcc1
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 85.0 kB disk space will be freed.
Do you want to continue? [Y/n] y
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
/usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or
directory
/usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or
directory
/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory
dpkg: error: parsing file '/var/lib/dpkg/status' near line 3918 package 'dpkg':
duplicate value for 'Package' field
E: Sub-process dpkg --set-selections returned an error code (2)
E: Couldn't record the approved state changes as dpkg selection states
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1886793
Title:
"go install" command fails while running inside s390x docker container
on x86_64 host using qemu
Status in QEMU:
New
Bug description:
Steps to reproduce the issue:
Register x86_64 host with the latest qemu-user-static.
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
Build the following Docker Image using following Dockerfile.s390x
using command docker build -t test/crossbuild:latest-s390x -f
Dockerfile.s390x .
Dockerfile.s390x
##############################################
FROM alpine:3.11 as qemu
ARG QEMU_VERSION=5.0.0-2
ARG QEMU_ARCHS="s390x"
RUN apk --update add curl
#Enable non-native runs on amd64 architecture hosts
RUN for i in ${QEMU_ARCHS}; do curl -L
https://github.com/multiarch/qemu-user-static/releases/download/v${QEMU_VERSION}/qemu-${i}-static.tar.gz
| tar zxvf - -C /usr/bin; done
RUN chmod +x /usr/bin/qemu-*
FROM s390x/golang:1.14.2-alpine3.11
MAINTAINER LoZ Open Source Ecosystem
(https://www.ibm.com/developerworks/community/groups/community/lozopensource)
ARG MANIFEST_TOOL_VERSION=v1.0.2
#Enable non-native builds of this image on an amd64 hosts.
#This must be the first RUN command in this file!
COPY --from=qemu /usr/bin/qemu-*-static /usr/bin/
#Install su-exec for use in the entrypoint.sh (so processes run as the right
user)
#Install bash for the entry script (and because it's generally useful)
#Install curl to download glide
#Install git for fetching Go dependencies
#Install ssh for fetching Go dependencies
#Install mercurial for fetching go dependencies
#Install wget since it's useful for fetching
#Install make for building things
#Install util-linux for column command (used for output formatting).
#Install grep and sed for use in some Makefiles (e.g. pulling versions out of
glide.yaml)
#Install shadow for useradd (it allows to use big UID)
RUN apk update && apk add --no-cache su-exec curl bash git openssh mercurial
make wget util-linux tini file grep sed shadow
RUN apk upgrade --no-cache
#Disable ssh host key checking
RUN echo 'Host *' >> /etc/ssh/ssh_config \
&& echo ' StrictHostKeyChecking no' >> /etc/ssh/ssh_config
#Disable cgo so that binaries we build will be fully static.
ENV CGO_ENABLED=0
#Recompile the standard library with cgo disabled. This prevents the
standard library from being
#marked stale, causing full rebuilds every time.
RUN go install -v std
#Install glide
RUN go get github.com/Masterminds/glide
ENV GLIDE_HOME /home/user/.glide
#Install dep
RUN go get github.com/golang/dep/cmd/dep
#Install ginkgo CLI tool for running tests
RUN go get github.com/onsi/ginkgo/ginkgo
#Install linting tools.
RUN wget -O - -q
https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s
v1.20.0
RUN golangci-lint --version
#Install license checking tool.
RUN go get github.com/pmezard/licenses
#Install tool to merge coverage reports.
RUN go get github.com/wadey/gocovmerge
#Install CLI tool for working with yaml files
RUN go get github.com/mikefarah/yaml
#Delete all the Go sources that were downloaded, we only rely on the binaries
RUN rm -rf /go/src/*
#Install vgo (should be removed once we take Go 1.11)
RUN go get -u golang.org/x/vgo
#Ensure that everything under the GOPATH is writable by everyone
RUN chmod -R 777 $GOPATH
RUN curl -sSL
https://github.com/estesp/manifest-tool/releases/download/${MANIFEST_TOOL_VERSION}/manifest-tool-linux-s390x
> manifest-tool && \
chmod +x manifest-tool && \
mv manifest-tool /usr/bin/
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/entrypoint.sh"]
##################################################################
The build just hangs at RUN go install -v std
Also, while running the same command inside s390x container on x86_64
host, error Illegal instruction (core dumped) is thrown.
Register x86_64 host with the latest qemu-user-static.
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker run -it -v /home/test/qemu-s390x-static:/usr/bin/qemu-s390x-
static s390x/golang:1.14.2-alpine3.11
Inside s390x container:
apk update && apk add --no-cache su-exec curl bash git openssh mercurial make
wget util-linux tini file grep sed shadow
apk upgrade --no-cache
#Disable cgo so that binaries we build will be fully static.
export CGO_ENABLED=0
go install -v std
This gives the following error:
Illegal instruction (core dumped)
Environment:
x86_64 Ub18.04 4.15.0-101-generic Ubuntu SMP x86_64 GNU/Linux
QEMU user static version: 5.0.0-2
Container application: Docker
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:22 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:10:54 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Additional information optionally:
When I build the same Dockerfile.s390x on an s390x machine, it is built
successfully.
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1886793/+subscriptions
- [Bug 1886793] [NEW] "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Nirman Narang, 2020/07/08
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Nirman Narang, 2020/07/08
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Laurent Vivier, 2020/07/08
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Nirman Narang, 2020/07/10
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Laurent Vivier, 2020/07/10
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu, Nirman Narang, 2020/07/14
- [Bug 1886793] Re: "go install" command fails while running inside s390x docker container on x86_64 host using qemu,
Nirman Narang <=