mirror of https://gitee.com/extrame/dget.git
修正bug
This commit is contained in:
parent
5c008ae23e
commit
e5df80f374
|
@ -1 +1 @@
|
|||
bin
|
||||
tmp_hyperledger/
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>404</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>404</h1>
|
||||
<p>Page not found</p>
|
||||
<P>你下载的链接不存在,可能是你拿到的链接是老版本的链接,请访问软件站点获得最新版本链接再下载
|
||||
点击这里访问<a href="https://gitee.com/extrame/dget">软件站点</a>
|
||||
</P>
|
||||
</body>
|
||||
</html>
|
|
@ -42,8 +42,8 @@ dget -arch linux/arm influxdb:1.8.3
|
|||
|
||||
## 直接下载链接
|
||||
|
||||
[windows x64版本](https://dget.oss-cn-beijing.aliyuncs.com/dget_windows_amd64_v_1_0_1.zip)
|
||||
[linux amd64版本](https://dget.oss-cn-beijing.aliyuncs.com/dget_linux_amd64_v_1_0_1.zip)
|
||||
[linux arm版本](https://dget.oss-cn-beijing.aliyuncs.com/dget_linux_arm_v_1_0_1.zip)
|
||||
[windows x64版本](./bin/windows_amd64/dget.exe)
|
||||
[linux amd64版本](./bin/linux_amd64/dget)
|
||||
[linux arm版本](./bin/linux_arm/dget)
|
||||
[Mac 传统版本](https://dget.oss-cn-beijing.aliyuncs.com/dget_darwin_amd64_v1_0_1.zip)
|
||||
[Mac arm64版本](https://dget.oss-cn-beijing.aliyuncs.com/dget_darwin_arm64_v1_0_1.zip)
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
go.mod
1
go.mod
|
@ -5,6 +5,7 @@ go 1.15
|
|||
require (
|
||||
github.com/boltdb/bolt v1.3.1
|
||||
github.com/docker/distribution v2.8.1+incompatible // indirect
|
||||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.0.2 // indirect
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
|
|
2
go.sum
2
go.sum
|
@ -3,6 +3,8 @@ github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx2
|
|||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4=
|
||||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
|
||||
|
|
60
install.go
60
install.go
|
@ -129,12 +129,13 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
|
||||
os.Exit(1)
|
||||
} else {
|
||||
var info manifestlist.ManifestList
|
||||
var bts []byte
|
||||
bts, err = io.ReadAll(resp.Body)
|
||||
|
||||
if err == nil {
|
||||
|
||||
switch resp.Header.Get("Content-Type") {
|
||||
case "application/vnd.docker.distribution.manifest.list.v2+json":
|
||||
var info manifestlist.ManifestList
|
||||
err = json.Unmarshal(bts, &info)
|
||||
|
||||
if err == nil {
|
||||
|
@ -161,8 +162,15 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
}
|
||||
|
||||
req.Header.Set("Accept", selectedManifest.MediaType)
|
||||
}
|
||||
case "application/vnd.docker.distribution.manifest.v1+prettyjws":
|
||||
req.Header.Set("Accept", "application/vnd.docker.distribution.manifest.v2+json")
|
||||
}
|
||||
|
||||
resp, err = http.DefaultClient.Do(req)
|
||||
|
||||
if err == nil {
|
||||
|
||||
var info Info
|
||||
err = json.NewDecoder(resp.Body).Decode(&info)
|
||||
|
||||
|
@ -170,19 +178,37 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
resp.Body.Close()
|
||||
logrus.Infof("获得Manifest信息,共%d层需要下载", len(info.Layers))
|
||||
|
||||
err = download(_registry, d, tag, info.Config.Digest, authHeader, info.Layers)
|
||||
if err != nil {
|
||||
goto response
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
response:
|
||||
return
|
||||
}
|
||||
|
||||
func download(_registry, d, tag string, digest digest.Digest, authHeader http.Header, layers []Layer) (err error) {
|
||||
var tmpDir = fmt.Sprintf("tmp_%s_%s", d, tag)
|
||||
err = os.MkdirAll(tmpDir, 0777)
|
||||
if err == nil {
|
||||
if _, e := os.Stat(filepath.Join(tmpDir, "repositories")); e == nil {
|
||||
logrus.Info(tmpDir, "is downloaded,use dir as cache")
|
||||
} else {
|
||||
req, err = http.NewRequest("GET", fmt.Sprintf("https://%s/v2/%s/blobs/%s", _registry, d, info.Config.Digest), nil)
|
||||
var req *http.Request
|
||||
req, err = http.NewRequest("GET", fmt.Sprintf("https://%s/v2/%s/blobs/%s", _registry, d, digest), nil)
|
||||
if err == nil {
|
||||
req.Header = authHeader
|
||||
var resp *http.Response
|
||||
resp, err = http.DefaultClient.Do(req)
|
||||
if err == nil {
|
||||
var dest *os.File
|
||||
dest, err = os.OpenFile(filepath.Join(tmpDir, info.Config.Digest.Encoded()+".json"), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
|
||||
dest, err = os.OpenFile(filepath.Join(tmpDir, digest.Encoded()+".json"), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
|
||||
if err == nil {
|
||||
var bts []byte
|
||||
bts, err = ioutil.ReadAll(resp.Body)
|
||||
|
@ -192,7 +218,7 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
|
||||
var config []PackageConfig
|
||||
config = append(config, PackageConfig{
|
||||
Config: info.Config.Digest.Encoded() + ".json",
|
||||
Config: digest.Encoded() + ".json",
|
||||
RepoTags: []string{d + ":" + tag},
|
||||
})
|
||||
if err == nil {
|
||||
|
@ -201,7 +227,7 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
if err == nil {
|
||||
parentid := ""
|
||||
var fakeLayerId string
|
||||
for n, layer := range info.Layers {
|
||||
for n, layer := range layers {
|
||||
namer := sha256.New()
|
||||
namer.Write([]byte(parentid + "\n" + layer.Digest + "\n"))
|
||||
fakeLayerId = hex.EncodeToString(namer.Sum(nil))
|
||||
|
@ -234,7 +260,7 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
if err == nil {
|
||||
if resp.StatusCode != 200 {
|
||||
err = fmt.Errorf("download from customized url fail for layer[%d]", n)
|
||||
goto response
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -245,9 +271,9 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
}
|
||||
}
|
||||
if err != nil {
|
||||
logrus.Errorf("请求第%d/%d层失败:%v", n+1, len(info.Layers), err)
|
||||
logrus.Errorf("请求第%d/%d层失败:%v", n+1, len(layers), err)
|
||||
} else {
|
||||
logrus.Infof("请求第%d/%d层成功", n+1, len(info.Layers))
|
||||
logrus.Infof("请求第%d/%d层成功", n+1, len(layers))
|
||||
}
|
||||
var dst *os.File
|
||||
dst, err = os.OpenFile(filepath.Join(layerDirName, "layer.tar.part"), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
|
||||
|
@ -259,7 +285,7 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
if err == nil {
|
||||
dst.Close()
|
||||
var layerInfo LayerInfo
|
||||
if n == len(info.Layers)-1 {
|
||||
if n == len(layers)-1 {
|
||||
layerInfo = lastLayerInfo
|
||||
}
|
||||
layerInfo.Id = fakeLayerId
|
||||
|
@ -280,12 +306,12 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
}
|
||||
}
|
||||
if err != nil {
|
||||
logrus.Errorf("保存第%d/%d层失败,%v", n+1, len(info.Layers), err)
|
||||
logrus.Errorf("保存第%d/%d层失败,%v", n+1, len(layers), err)
|
||||
} else {
|
||||
logrus.Infof("保存第%d/%d层成功", n+1, len(info.Layers))
|
||||
logrus.Infof("保存第%d/%d层成功", n+1, len(layers))
|
||||
}
|
||||
if err != nil {
|
||||
goto response
|
||||
return err
|
||||
} else {
|
||||
config[0].Layers = append(config[0].Layers, fakeLayerId+"/layer.tar")
|
||||
}
|
||||
|
@ -327,14 +353,6 @@ func Install(_registry, d, tag string, arch string, printInfo bool) (err error)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
response:
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue