mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 18:00:08 +00:00
Merge pull request #4858 from proppy/cross-go2docker
contrib/go2docker: always cross compile binary to linux_amd64
This commit is contained in:
commit
672c55bdb3
@ -6,7 +6,7 @@
|
|||||||
`SCRATCH` for go packages.
|
`SCRATCH` for go packages.
|
||||||
|
|
||||||
It is based on the [Docker Image Specification v1.0.0](https://github.com/docker/docker/blob/master/image/spec/v1.md).
|
It is based on the [Docker Image Specification v1.0.0](https://github.com/docker/docker/blob/master/image/spec/v1.md).
|
||||||
l
|
|
||||||
## Usage
|
## Usage
|
||||||
```
|
```
|
||||||
go2docker [-image NAMESPACE/BASENAME] [PACKAGES]
|
go2docker [-image NAMESPACE/BASENAME] [PACKAGES]
|
||||||
|
4480
contrib/go2docker/cacerts.go
Normal file
4480
contrib/go2docker/cacerts.go
Normal file
File diff suppressed because it is too large
Load Diff
@ -27,6 +27,7 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@ -68,6 +69,27 @@ func main() {
|
|||||||
args = flag.Args()
|
args = flag.Args()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check for go
|
||||||
|
goBin, err := exec.LookPath("go")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("`go` executable not found: %v, see %q ", err, "golang.org/doc/install")
|
||||||
|
}
|
||||||
|
toolPath := filepath.Dir(goBin)
|
||||||
|
// check for linux_amd64 toolchain
|
||||||
|
crossPath := filepath.Join(toolPath, "linux_amd64")
|
||||||
|
if _, crossErr := os.Stat(crossPath); os.IsNotExist(crossErr) {
|
||||||
|
// check for make.bash
|
||||||
|
makeBash, err := filepath.Abs(filepath.Join(toolPath, "..", "src", "make.bash"))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to resolve make.bash path: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := os.Stat(makeBash); os.IsNotExist(err) {
|
||||||
|
log.Fatalf("`make.bash` not found %q: %v", err)
|
||||||
|
}
|
||||||
|
makeBashCmd := fmt.Sprintf("(cd %s; GOOS=linux GOARCH=amd64 ./make.bash --no-clean)", filepath.Dir(makeBash))
|
||||||
|
log.Fatalf("`go %s` toolchain not found: %v, run: %q", "linux_amd64", crossErr, makeBashCmd)
|
||||||
|
}
|
||||||
|
|
||||||
fpath, err := filepath.Abs(args[0])
|
fpath, err := filepath.Abs(args[0])
|
||||||
ext := filepath.Ext(fpath)
|
ext := filepath.Ext(fpath)
|
||||||
basename := filepath.Base(fpath[:len(fpath)-len(ext)])
|
basename := filepath.Base(fpath[:len(fpath)-len(ext)])
|
||||||
@ -84,9 +106,25 @@ func main() {
|
|||||||
}
|
}
|
||||||
aout := filepath.Join(tmpDir, basename)
|
aout := filepath.Join(tmpDir, basename)
|
||||||
command := append([]string{"go", "build", "-o", aout, "-a", "-tags", "netgo", "-installsuffix", "netgo"}, args...)
|
command := append([]string{"go", "build", "-o", aout, "-a", "-tags", "netgo", "-installsuffix", "netgo"}, args...)
|
||||||
if _, err := exec.Command(command[0], command[1:]...).Output(); err != nil {
|
cmd := exec.Command(command[0], command[1:]...)
|
||||||
log.Fatalf("failed to run command %q: %v", strings.Join(command, " "), err)
|
gopath := os.Getenv("GOPATH")
|
||||||
|
cmd.Env = []string{
|
||||||
|
"GOOS=linux",
|
||||||
|
"GOARCH=amd64",
|
||||||
|
"GOPATH=" + gopath,
|
||||||
}
|
}
|
||||||
|
stderr, err := cmd.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to get process stderr: %v", err)
|
||||||
|
}
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
log.Fatalf("failed to start command %q: %v", strings.Join(command, " "), err)
|
||||||
|
}
|
||||||
|
io.Copy(os.Stderr, stderr)
|
||||||
|
if err := cmd.Wait(); err != nil {
|
||||||
|
log.Fatalf("command %q failed: %v", strings.Join(command, " "), err)
|
||||||
|
}
|
||||||
|
|
||||||
imageIDBytes := make([]byte, 32)
|
imageIDBytes := make([]byte, 32)
|
||||||
if _, err := rand.Read(imageIDBytes); err != nil {
|
if _, err := rand.Read(imageIDBytes); err != nil {
|
||||||
log.Fatalf("failed to generate ID: %v")
|
log.Fatalf("failed to generate ID: %v")
|
||||||
@ -160,6 +198,16 @@ func main() {
|
|||||||
if _, err := io.Copy(ftw, file); err != nil {
|
if _, err := io.Copy(ftw, file); err != nil {
|
||||||
log.Fatalf("failed to write /%s body: %v", aout, err)
|
log.Fatalf("failed to write /%s body: %v", aout, err)
|
||||||
}
|
}
|
||||||
|
certBytes := []byte(caCerts)
|
||||||
|
if err := ftw.WriteHeader(&tar.Header{
|
||||||
|
Name: "/etc/ssl/certs/ca-certificates.crt",
|
||||||
|
Size: int64(len(certBytes)),
|
||||||
|
}); err != nil {
|
||||||
|
log.Fatalf("failed to write ca-certificates.crt header: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := ftw.Write(certBytes); err != nil {
|
||||||
|
log.Fatalf("failed to write ca-certificates.crt body: %v", err)
|
||||||
|
}
|
||||||
if err := ftw.Close(); err != nil {
|
if err := ftw.Close(); err != nil {
|
||||||
log.Fatalf("failed to close layer.tar: %v", err)
|
log.Fatalf("failed to close layer.tar: %v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user