fix 自定义registry

This commit is contained in:
Liu Ming 2023-05-04 14:31:48 +08:00
parent b1272ed2fc
commit 40d176f952
4 changed files with 62 additions and 7 deletions

39
Gmakefile Normal file
View File

@ -0,0 +1,39 @@
env.linux {
GOOS: linux
GOARCH: amd64
}
client {
go build .
}
linux(.linux) {
go build -o ./bin/${GOOS}_$GOARCH/ ./cmd/dget
}
env.linux_arm {
GOOS: linux
GOARCH: arm
}
linux_arm (.linux_arm){
go build -o ./bin/${GOOS}_$GOARCH/ ./cmd/dget
}
env.darwin {
GOOS: darwin
GOARCH: amd64
}
darwin (.darwin){
go build -o ./bin/${GOOS}_$GOARCH/ ./cmd/dget
}
env.windows {
GOOS: windows
GOARCH: amd64
}
windows (.windows){
go build -o ./bin/${GOOS}_$GOARCH/ ./cmd/dget
}

View File

@ -22,6 +22,14 @@ dget influxdb:1.8.3
成功的话会直接生成tar.gz包
## 关于从第三方registry下载
```
dget alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:220901.1
```
形如上述调用方法直接在包名称前面跟上服务器地址即可v1.0.1)
## 选择架构
最近很多的包都推出了多架构,命令增加了选择架构的功能

View File

@ -13,6 +13,8 @@ func main() {
debug := flag.Bool("debug", false, "打印调试信息")
printInfo := flag.Bool("print", false, "只打印获取信息")
arch := flag.String("arch", "linux/amd64", "指定架构")
var registry string
flag.StringVar(&registry, "registry", "registry-1.docker.io", "指定镜像仓库")
flag.Parse()
@ -36,8 +38,13 @@ func main() {
if !found {
tag = "latest"
}
partsOfPkg := strings.Split(pkg, "/")
if len(partsOfPkg) == 3 {
registry = partsOfPkg[0]
pkg = strings.Join(partsOfPkg[1:], "/")
}
}
err := dget.Install(pkg, tag, *arch, *printInfo)
err := dget.Install(registry, pkg, tag, *arch, *printInfo)
if err != nil {
logrus.Fatalln("下载发生错误", err)
}

View File

@ -22,7 +22,7 @@ import (
"github.com/sirupsen/logrus"
)
const _registry = "registry-1.docker.io"
// const _registry = "registry-1.docker.io"
const _authUrl = "https://auth.docker.io/token"
const _regService = "registry.docker.io"
@ -69,7 +69,7 @@ type PackageConfig struct {
Layers []string
}
func Install(d, tag string, arch string, printInfo bool) (err error) {
func Install(_registry, d, tag string, arch string, printInfo bool) (err error) {
var authUrl = _authUrl
var regService = _regService
resp, err := http.Get(fmt.Sprintf("https://%s/v2/", _registry))
@ -92,8 +92,9 @@ func Install(d, tag string, arch string, printInfo bool) (err error) {
resp.Body.Close()
var accessToken string
logrus.Debugln("reg_service", regService)
logrus.Debugln("authUrl", authUrl)
accessToken, err = getAuthHead("application/vnd.docker.distribution.manifest.v2+json", authUrl, regService, d)
accessToken, err = getAuthHead(authUrl, regService, d)
if err == nil {
var req *http.Request
@ -337,14 +338,14 @@ response:
return
}
func getAuthHead(u, a, r, d string) (string, error) {
func getAuthHead(a, r, d string) (string, error) {
resp, err := http.Get(fmt.Sprintf("%s?service=%s&scope=repository:%s:pull", a, r, d))
defer resp.Body.Close()
if err == nil {
defer resp.Body.Close()
var results map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&results)
logrus.Debug(results)
if err == nil {
if err == nil && results["access_token"] != nil {
return results["access_token"].(string), nil
}
}