/ Go

Instalar Go en Alpine

Hola! Veremos cómo instalar Go en Alpine.

Una necesidad si estás desarrollando en Go. Usualmente si usas Alpine te encontrarás con una sola versión de go. Con este script podrás elegir la versión que deseas instalar.

#source https://github.com/docker-library/golang/blob/ee2d52a7ad3e077af02313cd4cd87fd39837412c/1.15/alpine3.12/Dockerfile
export PATH=/usr/local/go/bin:$PATH
apk add gnupg go bash
apk add --no-cache
ca-certificates
# set up nsswitch.conf for Go's "netgo" implementation
# - https://github.com/golang/go/blob/go1.9.1/src/net/conf.go#L194-L275
# - docker run --rm debian:stretch grep '^hosts:' /etc/nsswitch.conf
[ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf
apk add --no-cache --virtual .build-deps
apk add --no-cache --virtual gcc gnupg go musl-dev openssl
export
# set GOROOT_BOOTSTRAP such that we can actually build Go
GOROOT_BOOTSTRAP="$(go env GOROOT)"
# ... and set "cross-building" related vars to the installed system's values so that we create a build targeting the proper arch
# (for example, if our build host is GOARCH=amd64, but our build env/image is GOARCH=386, our build needs GOARCH=386)
GOOS="$(go env GOOS)"
GOARCH="$(go env GOARCH)"
GOHOSTOS="$(go env GOHOSTOS)"
GOHOSTARCH="$(go env GOHOSTARCH)"
;
# also explicitly set GO386 and GOARM if appropriate
# https://github.com/docker-library/golang/issues/184
apkArch="$(apk --print-arch)";
case "$apkArch" in
armhf) export GOARM='6' ;;
armv7) export GOARM='7' ;;
x86) export GO386='387' ;;
esac;
# https://github.com/golang/go/issues/38536#issuecomment-616897960
url='https://storage.googleapis.com/golang/go1.15.2.src.tar.gz';
sha256='28bf9d0bcde251011caae230a4a05d917b172ea203f2a62f2c2f9533589d4b4d';
wget -O go.tgz.asc "$url.asc";
wget -O go.tgz "$url";
echo "$sha256 *go.tgz" | sha256sum -c -;
# https://github.com/golang/go/issues/14739#issuecomment-324767697
export GNUPGHOME="$(mktemp -d)";
# https://www.google.com/linuxrepositories/
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 'EB4C 1BFD 4F04 2F6D DDCC EC91 7721 F63B D38B 4796';
gpg --batch --verify go.tgz.asc go.tgz;
gpgconf --kill all;
rm -rf "$GNUPGHOME" go.tgz.asc;
tar -C /usr/local -xzf go.tgz;
rm go.tgz;
goEnv="$(go env | sed -rn -e '/^GO(OS|ARCH|ARM|386)=/s//export 0/p')";
eval "$goEnv";
[ -n "$GOOS" ];
[ -n "$GOARCH" ];
(
cd /usr/local/go/src;
./make.bash;
);
apk del --no-network .build-deps;
# pre-compile the standard library, just like the official binary release tarballs do
go install std;
# go install: -race is only supported on linux/amd64, linux/ppc64le, linux/arm64, freebsd/amd64, netbsd/amd64, darwin/amd64 and windows/amd64
# go install -race std;
# remove a few intermediate / bootstrapping files the official binary release tarballs do not contain
rm -rf
/usr/local/go/pkg/*/cmd
/usr/local/go/pkg/bootstrap
/usr/local/go/pkg/obj
/usr/local/go/pkg/tool/*/api
/usr/local/go/pkg/tool/*/go_bootstrap
/usr/local/go/src/cmd/dist/dist
;
go version
view raw alpine.go.sh hosted with ❤ by GitHub