【问题标题】:How to install a Go app without using go get?如何在不使用 go get 的情况下安装 Go 应用程序?
【发布时间】:2017-08-28 07:27:21
【问题描述】:

我正在尝试在我的 ubuntu 机器上安装特定版本的 CockroachDB。我按照网站上的指南下载了 ~200MB 后,安装了最新版本:

$ go get -d github.com/cockroachdb/cockroach
$ cd $GOPATH/src/github.com/cockroachdb/cockroach
$ git checkout beta-20170330
$ make install

一个问题是/src/github.com/cockroachdb/cockroach 是 300MB,而如果我从 GitHub 页面下载最新版本,它只有 30MB。为什么?

我用git checkout v0.1-alpha切换到我想要的版本:

warning: unable to rmdir vendor: Directory not empty
Previous HEAD position was f0f5783... Merge pull request #14448 from BramGruneir/vendorsnappy
HEAD is now at 26088f8... Merge pull request #3475 from mrtracy/mtracy/code_review_feedback

但运行make install后失败:

github.com/agtorre/gocolorize                      99fea4bc9517 [checkout f42b554bf7f0]
github.com/biogo/store                             913427a1d5e8 [checkout 3b4c041f52c2]
github.com/cockroachdb/c-lz4                       834d3303c9e8 [checkout c40aaae2fc50]
github.com/cockroachdb/c-protobuf                  323984796a7b [checkout 6a18bfcdd516]
github.com/cockroachdb/c-rocksdb                   0dd42399d1f0 [checkout bf15ead80bdc]
github.com/cockroachdb/c-snappy                    c0cd3c9ce92f [checkout 5c6d0932e0ad]
github.com/cockroachdb/yacc                        7c99dfd2164a [get checkout 443154b1852a]
github.com/coreos/etcd                             38a914973544 [checkout 0eb46eb1457b]
github.com/cpuguy83/go-md2man                      a65d4d2de4d5 [get checkout 71acacd42f85]
github.com/docker/docker                           6311e9fc9d34 [get checkout 5e0283effa73]
github.com/elazarl/go-bindata-assetfs              30f82fa23fd8 [checkout d5cac425555c]
github.com/go-sql-driver/mysql                     9dee4ca50b83 [get checkout d512f204a577]
github.com/gogo/protobuf                           c0656edd0d9e [checkout 8658879224bd]
github.com/golang/lint                             cb00e5669539 [get checkout 32a87160691b]
github.com/google/btree                            316fb6d3f031 [checkout cc6329d4279e]
github.com/gordonklaus/ineffassign                 f0c5cfc1817d [get checkout 507e48671a07]
github.com/inconshreveable/mousetrap               76626ae9c91c [get OK]
github.com/jteeuwen/go-bindata                     a0ff2567cfb7 [get OK]
github.com/julienschmidt/httprouter                6f3f3919c878 [checkout f30ab90cccbd]
github.com/kisielk/errcheck                        23699b7e2cbf [get checkout 12fd1ab9811e]
github.com/kisielk/gotool                          0de1eaf82fa3 [get checkout 58a7a198f2ec]
github.com/kr/pretty                               cfb55aafdaf3 [get checkout e6ac2fc51e89]
github.com/kr/text                                 7cafcd837844 [get checkout bb797dc4fb83]
github.com/lib/pq                                  2704adc878c2 [checkout 11fc39a580a0]
github.com/mattn/go-runewidth                      14207d285c6c [checkout d96d1bd051f2]
github.com/mibk/dupl                               3447d9b0cb5a [get checkout 47b66d6a523f]
github.com/montanaflynn/stats                      f8cd06f93c6c [checkout 4dd27fe9ac79]
github.com/olekukonko/tablewriter                  febf2d34b54a [checkout 333c0610de34]
github.com/opennota/check                          11e2eec79ec4 [get checkout 591428223a6a]
github.com/peterh/liner                            88609521dc4b [checkout 4d47685ab2fd]
github.com/rcrowley/go-metrics                     1f30fe9094a5 [checkout 7839c01b09d2]
github.com/robfig/glock                            39b969c32281 [checkout cb3c3ec56de9]
github.com/russross/blackfriday                    5f33e7b78783 [get checkout d18b67ae0afd]
github.com/samalba/dockerclient                    a30362618471 [get checkout 4656b1bc6cbc]
github.com/shurcooL/sanitized_anchor_name          1dba4b3954bc [get checkout 10ef21a441db]
github.com/spf13/cobra                             7aeaa2cce6ae [checkout ee6224d01f6a]
github.com/spf13/pflag                             d16db1e50e33 [checkout 08b1a584251b]
github.com/tebeka/go2xunit                         13c29c7515e6 [get checkout 0519fcc9b45b]
github.com/termie/go-shutil                        bcacb06fecae [get OK]
golang.org/x/crypto                                88915ccf7aeb [checkout 7b85b097bf75]
golang.org/x/net                                   ffcf1bedda3b [checkout 21af302bb527]
golang.org/x/text                                  f4b4367115ec [checkout 00e205363f74]
golang.org/x/tools                                 620ecdb8d794 [checkout 1cdaff4a02c5]
gopkg.in/yaml.v1                                   9f9df34309c0 [OK]
cmd github.com/cockroachdb/c-protobuf/cmd/protoc                [built]
cmd github.com/cockroachdb/cockroach/protoc-gen-gogoroach       [error exit status 2]
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/gogoproto
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/vanity
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/testgen
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/defaultcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/embedcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/enumstringer
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/marshalto
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/oneofcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/populate
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/unmarshal
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/compare
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/description
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/equal
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/face
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/gostring
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/size
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/stringer
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/union
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/vanity/command
github.com/cockroachdb/cockroach/protoc-gen-gogoroach
# github.com/cockroachdb/cockroach/protoc-gen-gogoroach
protoc-gen-gogoroach/main.go:12: undefined: vanity.NotInPackageGoogleProtobuf
go install -tags ''  -ldflags '-X "github.com/cockroachdb/cockroach/util.buildTag=alpha-6447-g26088f8" -X "github.com/cockroachdb/cockroach/util.buildTime=2017/04/03 11:46:56" -X "github.com/cockroachdb/cockroach/util.buildDeps=github.com/cockroachdb/c-lz4:c40aaae2fc50293eb8750b34632bc3efe813e23f github.com/cockroachdb/cockroach:26088f81e5ecfb2fd63f8f15f524102c9a0c1c05 github.com/cockroachdb/cockroach/vendor:17711805119083543d94edac10e423260a597426 github.com/julienschmidt/httprouter:f30ab90cccbd5171771d26b6557d3c2f49e047a6 github.com/peterh/liner:4d47685ab2fd2dbb46c66b831344d558bc4be5b9 gopkg.in/yaml.v1:9f9df34309c04878acc86042b16630b0f696e1de"'
# github.com/cockroachdb/cockroach/cli
cli/sql_util.go:148: table.Append(row) used as value
Makefile:71: recipe for target 'install' failed
make: *** [install] Error 2

如果我能安装从 GitHub 下载的特定版本,我将不胜感激,因为它体积更小,结构更简洁。但它缺少一些文件,例如 .go-version .bootstrapfatal: Not a git repository (or any of the parent directories): .git

go get 自己插入这些文件吗?如何初始化它们?

难道不应该有更好的方法来做到这一点,而不必每次运行make install 时都额外下载 100MB?

【问题讨论】:

  • 蟑螂回购的克隆>300MB。你在看什么只有30MB? Cockroachdb 并不意味着通过go get 安装,因此如果这是您的目标,您需要阅读他们关于如何从源代码构建的文档。如果他们的构建说明不起作用,那么您可以向他们提出问题。
  • @JimB 我相信 30MB 来自从 github ui 下载 zip/tar 文件。

标签: github go cockroachdb


【解决方案1】:

使用go get 下载cockroachdb 我得到一个大小为664MB 的$GOPATH/src/github.com/cockroachdb/cockroach

然后我尝试克隆 cockroachdb 的 github 存储库,它的大小为 304MB,其中大部分是因为 .git 隐藏文件夹为 263MB。

从 github ui 下载一个 zipfile 并解压它,我最终得到一个 42MB 的文件夹。

纯 git 克隆 repo 和 zipfile 版本缺少 vendor folder which you can read about here。它又占了 302MB。当go get 用于下载 repo 时,该文件夹中填充了 cockroachdb 的依赖项(我猜它遵循您可以在 github 页面上看到的 cockroach 供应商 repo 的链接)。

自从我从主分支完成此操作后,我的大小与v0.1-alpha 版本有点不同。但我猜它的大小差异有类似的原因。

要使用 zipfile 使其“工作”,您可以尝试将 zipfile 解压缩到 $GOPATH/src/github.com/cockroachdb/cockroach。然后在该文件夹中执行git init。然后按照该标签中的自述文件中的说明进行操作,指示您应该运行make build。不过我相信你还是需要去获取一些 cockroachdb 的依赖,所以按照官方的说明可能会简单很多。

我没有尝试过,但你确定make install 每次运行它都会导致新的下载?

【讨论】:

  • /cockroach文件夹替换zip内容,从go get版本复制.go-version.bootstrap,运行make build,这是我遇到的:# github.com/cockroachdb/cockroach/pkg/util/log pkg/util/log/flags.go:28: not enough arguments in call to logflags.InitFlags have (*syncutil.Mutex, *bool, *logDirName, *bool, *level, *moduleSpec, *traceLocation) want (sync.Locker, *bool, flag.Value, *bool, *bool, flag.Value, flag.Value, flag.Value) Makefile:122: recipe for target 'install' failed make: *** [install] Error 2
  • 将第 74 行中的 logflags.go 中的 sync.Locker 更改为 *syncutil.Mutex,遇到此错误:# github.com/cockroachdb/cockroach/pkg/util/log/logflags pkg/util/log/logflags/logflags.go:74: undefined: syncutil in syncutil.Mutex Makefile:122: recipe for target 'install' failed make: *** [install] Error 2 已恢复更改。再次运行make build。不知何故它现在起作用了!!!!!!! exec 文件自然在/bin 中。我make clean 再试一次,以确保下次运行 build 时,exec 文件位于 cockroach 文件夹中。为什么它的行为如此随意!?
  • @d9ngle 你确定你使用的是从正确的分支下载吗?我认为它将包含源代码树中的所有文件。此外,如果您只需要构建应用程序,那么一旦构建了应用程序,您就可以删除源(如果您需要空间)。这是您构建 cockroachdb 以用于 docker 图像还是图像大小很重要的问题?
【解决方案2】:

我使用 git checkout v0.1-alpha 切换到我想要的版本

v0.1-alpha 是古老的,肯定不是你想要的(我对它不再构建它并不感到惊讶;从那时起我们提高了构建过程的可重复性)。最新版本(截至撰写本文时)是beta-YYYYMMDD 形式的版本。

CockroachDB binary releases 可以在没有go get 的情况下安装。我们目前正在修改安装说明以使用源 tarball 代替 go getgit clone

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多