From 3025b3e8c3a4adf2d023a02d0dc1b2db79586552 Mon Sep 17 00:00:00 2001 From: yzewei Date: Mon, 20 May 2024 16:41:14 +0800 Subject: [PATCH 1/4] add portainer 2.11.1 Signed-off-by: yzewei --- .../2.11.1/0001-add-loong64-support.patch | 167 ++++++++++++++++++ portainer/portainer/2.11.1/Makefile | 38 ++++ portainer/portainer/2.11.1/docker-compose.yml | 12 ++ 3 files changed, 217 insertions(+) create mode 100644 portainer/portainer/2.11.1/0001-add-loong64-support.patch create mode 100644 portainer/portainer/2.11.1/Makefile create mode 100644 portainer/portainer/2.11.1/docker-compose.yml diff --git a/portainer/portainer/2.11.1/0001-add-loong64-support.patch b/portainer/portainer/2.11.1/0001-add-loong64-support.patch new file mode 100644 index 0000000..7cf166b --- /dev/null +++ b/portainer/portainer/2.11.1/0001-add-loong64-support.patch @@ -0,0 +1,167 @@ +From be26de17e2e18b5d84b61b0e237702a6d3df3d7e Mon Sep 17 00:00:00 2001 +From: yzewei +Date: Mon, 20 May 2024 15:37:30 +0800 +Subject: [PATCH] add loong64 support + +Signed-off-by: yzewei +--- + api/database/boltdb/db.go | 2 +- + api/database/boltdb/export.go | 2 +- + api/go.mod | 10 +++++----- + api/go.sum | 21 ++++++++++++++------- + build/linux/alpine.Dockerfile | 2 +- + 5 files changed, 22 insertions(+), 15 deletions(-) + +diff --git a/api/database/boltdb/db.go b/api/database/boltdb/db.go +index 8ffe14b..e35a8a1 100644 +--- a/api/database/boltdb/db.go ++++ b/api/database/boltdb/db.go +@@ -10,7 +10,7 @@ import ( + "path" + "time" + +- "github.com/boltdb/bolt" ++ bolt "go.etcd.io/bbolt" + dserrors "github.com/portainer/portainer/api/dataservices/errors" + "github.com/sirupsen/logrus" + ) +diff --git a/api/database/boltdb/export.go b/api/database/boltdb/export.go +index 3d04f2a..531dc26 100644 +--- a/api/database/boltdb/export.go ++++ b/api/database/boltdb/export.go +@@ -4,7 +4,7 @@ import ( + "encoding/json" + "time" + +- "github.com/boltdb/bolt" ++ bolt "go.etcd.io/bbolt" + "github.com/sirupsen/logrus" + ) + +diff --git a/api/go.mod b/api/go.mod +index 8619507..3f59dc7 100644 +--- a/api/go.mod ++++ b/api/go.mod +@@ -8,7 +8,6 @@ require ( + github.com/aws/aws-sdk-go-v2 v1.11.1 + github.com/aws/aws-sdk-go-v2/credentials v1.6.2 + github.com/aws/aws-sdk-go-v2/service/ecr v1.10.1 +- github.com/boltdb/bolt v1.3.1 + github.com/coreos/go-semver v0.3.0 + github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 + github.com/dgrijalva/jwt-go v3.2.0+incompatible +@@ -37,12 +36,13 @@ require ( + github.com/rkl-/digest v0.0.0-20180419075440-8316caa4a777 + github.com/robfig/cron/v3 v3.0.1 + github.com/sirupsen/logrus v1.8.1 +- github.com/stretchr/testify v1.7.0 ++ github.com/stretchr/testify v1.8.1 ++ go.etcd.io/bbolt v1.3.10 + golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d +- golang.org/x/sync v0.0.0-20210220032951-036812b2e83c ++ golang.org/x/sync v0.5.0 + gopkg.in/alecthomas/kingpin.v2 v2.2.6 +- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ++ gopkg.in/yaml.v3 v3.0.1 + k8s.io/api v0.22.2 + k8s.io/apimachinery v0.22.2 + k8s.io/client-go v0.22.2 +@@ -102,7 +102,7 @@ require ( + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 // indirect +- golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 // indirect ++ golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect + golang.org/x/text v0.3.6 // indirect + golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect +diff --git a/api/go.sum b/api/go.sum +index b04a82a..844d282 100644 +--- a/api/go.sum ++++ b/api/go.sum +@@ -112,8 +112,6 @@ github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edY + github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= + github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= + github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +-github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= +-github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= + github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= + github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= + github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +@@ -697,14 +695,19 @@ github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+ + github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= + github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= + github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= ++github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= ++github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= + github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= + github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= + github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= + github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= + github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= + github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= + github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= ++github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= ++github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= ++github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= ++github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= + github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= + github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= + github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +@@ -747,6 +750,8 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go + go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= + go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= + go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= ++go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0= ++go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ= + go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= + go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= + go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +@@ -858,8 +863,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ + golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= + golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= ++golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= ++golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= + golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= + golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= + golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +@@ -924,8 +929,9 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w + golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= + golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= + golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 h1:RqytpXGR1iVNX7psjB3ff8y7sNFinVFvkx1c8SjBkio= + golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= ++golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= ++golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= + golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= + golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= + golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= +@@ -1093,8 +1099,9 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= + gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= + gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= ++gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= ++gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= + gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= + gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= + gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +diff --git a/build/linux/alpine.Dockerfile b/build/linux/alpine.Dockerfile +index 6108c4c..2c0abf7 100644 +--- a/build/linux/alpine.Dockerfile ++++ b/build/linux/alpine.Dockerfile +@@ -1,4 +1,4 @@ +-FROM alpine:latest ++FROM lcr.loongnix.cn/library/alpine:3.18 + + COPY dist / + +-- +2.41.0 + diff --git a/portainer/portainer/2.11.1/Makefile b/portainer/portainer/2.11.1/Makefile new file mode 100644 index 0000000..f1800c4 --- /dev/null +++ b/portainer/portainer/2.11.1/Makefile @@ -0,0 +1,38 @@ +# This file is generated by the template. + +REGISTRY ?=lcr.loongnix.cn +ORGANIZATION ?=portainer +REPOSITORY ?=portainer +TAG ?=2.11.1 +LATEST ?=true + +IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):$(TAG) +LATEST_IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):latest +URL=https://github.com/portainer/portainer +PATCH=0001-add-loong64-support.patch + +default: image + +src: clean + git clone -b 2.11.1 --depth 1 $(URL) && \ + cd $(REPOSITORY) && \ + git apply ../0001-add-loong64-support.patch && cd api && go mod vendor + cd $(REPOSITORY) && bash build/build_binary.sh linux loong64 +image: + cd $(REPOSITORY) && docker build \ + --build-arg http_proxy=$(http_proxy) \ + --build-arg https_proxy=$(https_proxy) \ + -t $(IMAGE) -f build/linux/alpine.Dockerfile \ + . + +push: + docker push $(IMAGE) + #latest image + @if [ $(LATEST) = "true" ]; \ + then \ + docker tag $(IMAGE) $(LATEST_IMAGE); \ + docker push $(LATEST_IMAGE); \ + fi + +clean: + rm -rf $(REPOSITORY) diff --git a/portainer/portainer/2.11.1/docker-compose.yml b/portainer/portainer/2.11.1/docker-compose.yml new file mode 100644 index 0000000..dfdf061 --- /dev/null +++ b/portainer/portainer/2.11.1/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3' +services: + portainer: + image: portainer:latest + ports: + - "9000:9000" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - portainer_data:/data +volumes: + portainer_data: + From 6d316bec49894776e83d7ade60c2b4d087529f3d Mon Sep 17 00:00:00 2001 From: yzewei Date: Tue, 21 May 2024 14:19:33 +0800 Subject: [PATCH 2/4] add portainer 2.11.1 Signed-off-by: yzewei --- ...=> 0001-add-loong64-support-abi-2.0.patch} | 72 ++++++++++++++++--- portainer/portainer/2.11.1/Makefile | 27 ++++--- portainer/portainer/2.11.1/base.Dockerfile | 7 ++ portainer/portainer/2.11.1/docker-compose.yml | 9 ++- 4 files changed, 93 insertions(+), 22 deletions(-) rename portainer/portainer/2.11.1/{0001-add-loong64-support.patch => 0001-add-loong64-support-abi-2.0.patch} (80%) create mode 100644 portainer/portainer/2.11.1/base.Dockerfile diff --git a/portainer/portainer/2.11.1/0001-add-loong64-support.patch b/portainer/portainer/2.11.1/0001-add-loong64-support-abi-2.0.patch similarity index 80% rename from portainer/portainer/2.11.1/0001-add-loong64-support.patch rename to portainer/portainer/2.11.1/0001-add-loong64-support-abi-2.0.patch index 7cf166b..0035c13 100644 --- a/portainer/portainer/2.11.1/0001-add-loong64-support.patch +++ b/portainer/portainer/2.11.1/0001-add-loong64-support-abi-2.0.patch @@ -1,16 +1,18 @@ -From be26de17e2e18b5d84b61b0e237702a6d3df3d7e Mon Sep 17 00:00:00 2001 +From 718e9ccdbb3e76471f14f2fc03e5eba9b70a7552 Mon Sep 17 00:00:00 2001 From: yzewei -Date: Mon, 20 May 2024 15:37:30 +0800 -Subject: [PATCH] add loong64 support +Date: Tue, 21 May 2024 10:48:47 +0800 +Subject: [PATCH] add loong64 support (abi-2.0) Signed-off-by: yzewei --- - api/database/boltdb/db.go | 2 +- - api/database/boltdb/export.go | 2 +- - api/go.mod | 10 +++++----- - api/go.sum | 21 ++++++++++++++------- - build/linux/alpine.Dockerfile | 2 +- - 5 files changed, 22 insertions(+), 15 deletions(-) + api/database/boltdb/db.go | 2 +- + api/database/boltdb/export.go | 2 +- + api/go.mod | 10 +++++----- + api/go.sum | 21 ++++++++++++++------- + build/download_docker_compose_binary.sh | 14 ++++++++++---- + build/linux/Dockerfile | 4 +++- + build/linux/alpine.Dockerfile | 5 +++-- + 7 files changed, 37 insertions(+), 21 deletions(-) diff --git a/api/database/boltdb/db.go b/api/database/boltdb/db.go index 8ffe14b..e35a8a1 100644 @@ -152,8 +154,51 @@ index b04a82a..844d282 100644 gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +diff --git a/build/download_docker_compose_binary.sh b/build/download_docker_compose_binary.sh +index 63ea5b0..a3181db 100755 +--- a/build/download_docker_compose_binary.sh ++++ b/build/download_docker_compose_binary.sh +@@ -45,13 +45,19 @@ function download_plugin() { + FILENAME="$FILENAME.exe" + TARGET_FILENAME="$TARGET_FILENAME.exe" + fi +- +- wget -O "dist/$TARGET_FILENAME" "https://github.com/docker/compose-cli/releases/download/v$PLUGIN_VERSION/$FILENAME" +- chmod +x "dist/$TARGET_FILENAME" ++ ++ if [[ "$PLATFORM" == "loong64" ]]; then ++ URL="http://cloud.loongnix.cn/releases/loongarch64/docker/compose/2.22.0/docker-compose-loong64-v2.22.0-rc.1.tar.gz" ++ wget -O "dist/$TARGET_FILENAME" $URL ++ chmod +x "dist/$TARGET_FILENAME" ++ fi ++ ++# wget -O "dist/$TARGET_FILENAME" "https://github.com/docker/compose-cli/releases/download/v$PLUGIN_VERSION/$FILENAME" ++# chmod +x "dist/$TARGET_FILENAME" + } + + if [ "${PLATFORM}" == 'linux' ] && [ "${ARCH}" != 'amd64' ]; then + download_plugin "$PLATFORM" "$ARCH" "$DOCKER_COMPOSE_VERSION" + fi + +-download_binary "$PLATFORM" "$ARCH" "$DOCKER_COMPOSE_VERSION" +\ No newline at end of file ++download_binary "$PLATFORM" "$ARCH" "$DOCKER_COMPOSE_VERSION" +diff --git a/build/linux/Dockerfile b/build/linux/Dockerfile +index c07dc6d..bec8ef7 100644 +--- a/build/linux/Dockerfile ++++ b/build/linux/Dockerfile +@@ -1,6 +1,8 @@ +-FROM portainer/base ++FROM lcr.loongnix.cn/portainer/base:latest + + COPY dist / ++COPY public /public ++COPY storybook /storybook + + VOLUME /data + WORKDIR / diff --git a/build/linux/alpine.Dockerfile b/build/linux/alpine.Dockerfile -index 6108c4c..2c0abf7 100644 +index 6108c4c..053c11d 100644 --- a/build/linux/alpine.Dockerfile +++ b/build/linux/alpine.Dockerfile @@ -1,4 +1,4 @@ @@ -162,6 +207,13 @@ index 6108c4c..2c0abf7 100644 COPY dist / +@@ -9,4 +9,5 @@ EXPOSE 9000 + EXPOSE 9443 + EXPOSE 8000 + +-ENTRYPOINT ["/portainer"] ++#ENTRYPOINT ["/portainer"] ++ENTRYPOINT ["/bin/sh"] -- 2.41.0 diff --git a/portainer/portainer/2.11.1/Makefile b/portainer/portainer/2.11.1/Makefile index f1800c4..09a99b1 100644 --- a/portainer/portainer/2.11.1/Makefile +++ b/portainer/portainer/2.11.1/Makefile @@ -6,27 +6,36 @@ REPOSITORY ?=portainer TAG ?=2.11.1 LATEST ?=true -IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):$(TAG) -LATEST_IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):latest +IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY)-ce:$(TAG) +LATEST_IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY)-ce:latest URL=https://github.com/portainer/portainer -PATCH=0001-add-loong64-support.patch +PATCH=0001-add-loong64-support-abi-2.0.patch default: image src: clean + wget https://github.com/Loongson-Cloud-Community/portainer/releases/download/2.11.1/portainer-fronted.tar.gz && tar xf portainer-fronted.tar.gz && rm portainer-fronted.tar.gz && \ git clone -b 2.11.1 --depth 1 $(URL) && \ - cd $(REPOSITORY) && \ - git apply ../0001-add-loong64-support.patch && cd api && go mod vendor + cd $(REPOSITORY) && \ + git apply ../$(PATCH) && cd api && go mod vendor cd $(REPOSITORY) && bash build/build_binary.sh linux loong64 -image: - cd $(REPOSITORY) && docker build \ +download: src + mkdir -p dist && cd dist && \ + wget -O kubectl http://cloud.loongnix.cn/releases/loongarch64/kubernetes/kubernetes/v1.20.0/kubectl && chmod +x kubectl && \ + wget http://cloud.loongnix.cn/releases/loongarch64/docker/cli/24.0.6/cli-loong64-24.0.6.tar.gz && tar xf cli-loong64-24.0.6.tar.gz && cp build/* ./ && rm -rf build cli-loong64-24.0.6.tar.gz && \ + wget http://cloud.loongnix.cn/releases/loongarch64/docker/compose/2.22.0/docker-compose-loong64-v2.22.0-rc.1.tar.gz && tar xf docker-compose-loong64-v2.22.0-rc.1.tar.gz && cp docker-compose-loong64-v2.22.0-rc.1/* ./ && rm -rf docker-compose-loong64-v2.22.0-rc.1 docker-compose-loong64-v2.22.0-rc.1.tar.gz && \ + cp ../portainer/dist/portainer ./ +image: download + docker build -t lcr.loongnix.cn/portainer/base:latest -f base.Dockerfile . + docker build \ --build-arg http_proxy=$(http_proxy) \ --build-arg https_proxy=$(https_proxy) \ - -t $(IMAGE) -f build/linux/alpine.Dockerfile \ + -t $(IMAGE) -f portainer/build/linux/Dockerfile \ . push: docker push $(IMAGE) + docker push lcr.loongnix.cn/portainer/base:latest #latest image @if [ $(LATEST) = "true" ]; \ then \ @@ -35,4 +44,4 @@ push: fi clean: - rm -rf $(REPOSITORY) + rm -rf $(REPOSITORY) public storybook dist diff --git a/portainer/portainer/2.11.1/base.Dockerfile b/portainer/portainer/2.11.1/base.Dockerfile new file mode 100644 index 0000000..043d9d7 --- /dev/null +++ b/portainer/portainer/2.11.1/base.Dockerfile @@ -0,0 +1,7 @@ +FROM lcr.loongnix.cn/library/alpine:3.19 as base +RUN apk --no-cache --update upgrade && apk --no-cache add ca-certificates +RUN mkdir /buildtmp + +FROM scratch +COPY --from=base /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=base /buildtmp /tmp diff --git a/portainer/portainer/2.11.1/docker-compose.yml b/portainer/portainer/2.11.1/docker-compose.yml index dfdf061..b3201cb 100644 --- a/portainer/portainer/2.11.1/docker-compose.yml +++ b/portainer/portainer/2.11.1/docker-compose.yml @@ -1,7 +1,10 @@ -version: '3' +version: '2' services: - portainer: - image: portainer:latest + portainer-prod: + # image: portainer:latest + #image: portainer/update:latest + image: lcr.loongnix.cn/portainer/portainer:2.11.1 + container_name: portainer-prod ports: - "9000:9000" volumes: From 8e0faa44c297d300db15933ed26522410d01c0c1 Mon Sep 17 00:00:00 2001 From: yzewei Date: Tue, 21 May 2024 14:29:41 +0800 Subject: [PATCH 3/4] add redis 5.0.14 Signed-off-by: yzewei --- library/redis/5.0.14/Makefile | 22 +++ library/redis/5.0.14/debian/Dockerfile | 135 ++++++++++++++++++ .../redis/5.0.14/debian/docker-entrypoint.sh | 24 ++++ portainer/portainer/2.11.1/Makefile | 8 +- 4 files changed, 185 insertions(+), 4 deletions(-) create mode 100644 library/redis/5.0.14/Makefile create mode 100644 library/redis/5.0.14/debian/Dockerfile create mode 100755 library/redis/5.0.14/debian/docker-entrypoint.sh diff --git a/library/redis/5.0.14/Makefile b/library/redis/5.0.14/Makefile new file mode 100644 index 0000000..b1d7fe1 --- /dev/null +++ b/library/redis/5.0.14/Makefile @@ -0,0 +1,22 @@ +# This file is generated by the template. + +REGISTRY?=lcr.loongnix.cn +ORGANIZATION?=library +REPOSITORY?=redis +TAG?=5.0.14 +VERSION?=5.0.14 + +IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):$(TAG) + +default: image + +image: + docker build \ + --build-arg https_proxy=$(https_proxy) \ + -t $(IMAGE) \ + -t $(IMAGE)-sid \ + ./debian + +push: + docker push $(IMAGE) + docker push $(IMAGE)-sid diff --git a/library/redis/5.0.14/debian/Dockerfile b/library/redis/5.0.14/debian/Dockerfile new file mode 100644 index 0000000..f36a923 --- /dev/null +++ b/library/redis/5.0.14/debian/Dockerfile @@ -0,0 +1,135 @@ +FROM lcr.loongnix.cn/library/debian:sid + +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +RUN set -eux; \ + groupadd -r -g 999 redis; \ + useradd -r -g redis -u 999 redis + +# runtime dependencies +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ +# add tzdata explicitly for https://github.com/docker-library/redis/issues/138 (see also https://bugs.debian.org/837060 and related) + tzdata \ + ; \ + rm -rf /var/lib/apt/lists/* + +# grab gosu for easy step-down from root +# https://github.com/tianon/gosu/releases +ENV GOSU_VERSION 1.17 +#ADD gosu /usr/local/bin/gosu +RUN set -eux; \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends ca-certificates gnupg wget; \ + rm -rf /var/lib/apt/lists/*; \ + dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \ + case "$dpkgArch" in \ + #loongarch64) GOSU_REPO="http://cloud.loongnix.cn/releases/loongarch64/tianon/gosu/1.17/gosu-loongarch64";; \ + loongarch64) GOSU_REPO="http://cloud.loongnix.cn/releases/loongarch64/tianon/gosu/1.14/gosu-1.14_Linux_loong64.tar.gz";; \ + *) GOSU_REPO="https://github.com/tianon/gosu";; \ + esac; \ +# wget -O /usr/local/bin/gosu "${GOSU_REPO}/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ + wget -O gosu.tar.gz http://cloud.loongnix.cn/releases/loongarch64/tianon/gosu/1.14/gosu-1.14_Linux_loong64.tar.gz && tar xf gosu.tar.gz && cp gosu-loong64 /usr/local/bin/gosu && rm gosu.tar.gz; \ + apt-mark auto '.*' > /dev/null; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; + +RUN chmod +x /usr/local/bin/gosu; \ + gosu nobody true; + +ENV REDIS_VERSION 5.0.14 +ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-5.0.14.tar.gz + +RUN set -eux; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + wget \ + \ + dpkg-dev \ + gcc \ + libc6-dev \ + libssl-dev \ + make \ + ; \ + rm -rf /var/lib/apt/lists/*; \ + \ + wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL"; \ + mkdir -p /usr/src/redis; \ + tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1; \ + rm -f /usr/src/redis/deps/jemalloc/build-aux/config.guess /usr/src/redis/deps/jemalloc/build-aux/config.sub; \ + wget -O /usr/src/redis/deps/jemalloc/build-aux/config.sub "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD"; \ + wget -O /usr/src/redis/deps/jemalloc/build-aux/config.guess "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD"; \ + rm redis.tar.gz + +# disable Redis protected mode [1] as it is unnecessary in context of Docker +# (ports are not automatically exposed when running inside Docker, but rather explicitly by specifying -p / -P) +# [1]: https://github.com/redis/redis/commit/edd4d555df57dc84265fdfb4ef59a4678832f6da +RUN grep -E '^ *createBoolConfig[(]"protected-mode",.*, *1 *,.*[)],$' /usr/src/redis/src/config.c; \ + sed -ri 's!^( *createBoolConfig[(]"protected-mode",.*, *)1( *,.*[)],)$!\10\2!' /usr/src/redis/src/config.c; \ + grep -E '^ *createBoolConfig[(]"protected-mode",.*, *0 *,.*[)],$' /usr/src/redis/src/config.c; \ +# for future reference, we modify this directly in the source instead of just supplying a default configuration flag because apparently "if you specify any argument to redis-server, [it assumes] you are going to specify everything" +# see also https://github.com/docker-library/redis/issues/4#issuecomment-50780840 +# (more exactly, this makes sure the default behavior of "save on SIGTERM" stays functional by default) + \ +# https://github.com/jemalloc/jemalloc/issues/467 -- we need to patch the "./configure" for the bundled jemalloc to match how Debian compiles, for compatibility +# (also, we do cross-builds, so we need to embed the appropriate "--build=xxx" values to that "./configure" invocation) + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + extraJemallocConfigureFlags="--build=$gnuArch"; \ +# https://salsa.debian.org/debian/jemalloc/-/blob/c0a88c37a551be7d12e4863435365c9a6a51525f/debian/rules#L8-23 + dpkgArch="$(dpkg --print-architecture)"; \ + case "${dpkgArch##*-}" in \ + amd64 | i386 | x32) extraJemallocConfigureFlags="$extraJemallocConfigureFlags --with-lg-page=12" ;; \ + *) extraJemallocConfigureFlags="$extraJemallocConfigureFlags --with-lg-page=16" ;; \ + esac; \ + extraJemallocConfigureFlags="$extraJemallocConfigureFlags --with-lg-hugepage=21"; \ + grep -F 'cd jemalloc && ./configure ' /usr/src/redis/deps/Makefile; \ + sed -ri 's!cd jemalloc && ./configure !&'"$extraJemallocConfigureFlags"' !' /usr/src/redis/deps/Makefile; \ + grep -F "cd jemalloc && ./configure $extraJemallocConfigureFlags " /usr/src/redis/deps/Makefile; \ + \ + export BUILD_TLS=yes; \ + make -C /usr/src/redis -j "$(nproc)" all; \ + make -C /usr/src/redis install; \ + \ +# TODO https://github.com/redis/redis/pull/3494 (deduplicate "redis-server" copies) + serverMd5="$(md5sum /usr/local/bin/redis-server | cut -d' ' -f1)"; export serverMd5; \ + find /usr/local/bin/redis* -maxdepth 0 \ + -type f -not -name redis-server \ + -exec sh -eux -c ' \ + md5="$(md5sum "$1" | cut -d" " -f1)"; \ + test "$md5" = "$serverMd5"; \ + ' -- '{}' ';' \ + -exec ln -svfT 'redis-server' '{}' ';' \ + ; \ + \ + rm -r /usr/src/redis; \ + \ + apt-mark auto '.*' > /dev/null; \ + [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \ + find /usr/local -type f -executable -exec ldd '{}' ';' \ + | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); print so }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + | xargs -r apt-mark manual \ + ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + \ + redis-cli --version; \ + redis-server --version; \ + \ + echo '{"spdxVersion":"SPDX-2.3","SPDXID":"SPDXRef-DOCUMENT","name":"redis-server-sbom","packages":[{"name":"redis-server","versionInfo":"6.0.20","SPDXID":"SPDXRef-Package--redis-server","externalRefs":[{"referenceCategory":"PACKAGE-MANAGER","referenceType":"purl","referenceLocator":"pkg:generic/redis-server@6.0.20?os_name=debian&os_version=buster"}],"licenseDeclared":"BSD-3-Clause"}]}' > /usr/local/redis.spdx.json + +RUN mkdir /data && chown redis:redis /data +VOLUME /data +WORKDIR /data + +COPY docker-entrypoint.sh /usr/local/bin/ +ENTRYPOINT ["docker-entrypoint.sh"] + +EXPOSE 6379 +CMD ["redis-server"] diff --git a/library/redis/5.0.14/debian/docker-entrypoint.sh b/library/redis/5.0.14/debian/docker-entrypoint.sh new file mode 100755 index 0000000..24d5c71 --- /dev/null +++ b/library/redis/5.0.14/debian/docker-entrypoint.sh @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +# or first arg is `something.conf` +if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then + set -- redis-server "$@" +fi + +# allow the container to be started with `--user` +if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then + find . \! -user redis -exec chown redis '{}' + + exec gosu redis "$0" "$@" +fi + +# set an appropriate umask (if one isn't set already) +# - https://github.com/docker-library/redis/issues/305 +# - https://github.com/redis/redis/blob/bb875603fb7ff3f9d19aad906bd45d7db98d9a39/utils/systemd-redis_server.service#L37 +um="$(umask)" +if [ "$um" = '0022' ]; then + umask 0077 +fi + +exec "$@" \ No newline at end of file diff --git a/portainer/portainer/2.11.1/Makefile b/portainer/portainer/2.11.1/Makefile index 09a99b1..ec87dcf 100644 --- a/portainer/portainer/2.11.1/Makefile +++ b/portainer/portainer/2.11.1/Makefile @@ -17,13 +17,13 @@ src: clean wget https://github.com/Loongson-Cloud-Community/portainer/releases/download/2.11.1/portainer-fronted.tar.gz && tar xf portainer-fronted.tar.gz && rm portainer-fronted.tar.gz && \ git clone -b 2.11.1 --depth 1 $(URL) && \ cd $(REPOSITORY) && \ - git apply ../$(PATCH) && cd api && go mod vendor + git apply ../$(PATCH) && cd api && go mod tidy && go mod vendor cd $(REPOSITORY) && bash build/build_binary.sh linux loong64 download: src mkdir -p dist && cd dist && \ - wget -O kubectl http://cloud.loongnix.cn/releases/loongarch64/kubernetes/kubernetes/v1.20.0/kubectl && chmod +x kubectl && \ - wget http://cloud.loongnix.cn/releases/loongarch64/docker/cli/24.0.6/cli-loong64-24.0.6.tar.gz && tar xf cli-loong64-24.0.6.tar.gz && cp build/* ./ && rm -rf build cli-loong64-24.0.6.tar.gz && \ - wget http://cloud.loongnix.cn/releases/loongarch64/docker/compose/2.22.0/docker-compose-loong64-v2.22.0-rc.1.tar.gz && tar xf docker-compose-loong64-v2.22.0-rc.1.tar.gz && cp docker-compose-loong64-v2.22.0-rc.1/* ./ && rm -rf docker-compose-loong64-v2.22.0-rc.1 docker-compose-loong64-v2.22.0-rc.1.tar.gz && \ + http_proxy="" wget -O kubectl http://cloud.loongnix.cn/releases/loongarch64/kubernetes/kubernetes/v1.20.0/kubectl && chmod +x kubectl && \ + http_proxy="" wget http://cloud.loongnix.cn/releases/loongarch64/docker/cli/24.0.6/cli-loong64-24.0.6.tar.gz && tar xf cli-loong64-24.0.6.tar.gz && cp build/* ./ && rm -rf build cli-loong64-24.0.6.tar.gz && \ + http_proxy="" wget http://cloud.loongnix.cn/releases/loongarch64/docker/compose/2.22.0/docker-compose-loong64-v2.22.0-rc.1.tar.gz && tar xf docker-compose-loong64-v2.22.0-rc.1.tar.gz && cp docker-compose-loong64-v2.22.0-rc.1/* ./ && rm -rf docker-compose-loong64-v2.22.0-rc.1 docker-compose-loong64-v2.22.0-rc.1.tar.gz && \ cp ../portainer/dist/portainer ./ image: download docker build -t lcr.loongnix.cn/portainer/base:latest -f base.Dockerfile . From 2025e101c26c8dd783f6ab0d45d987d6f73332ac Mon Sep 17 00:00:00 2001 From: yangzewei Date: Tue, 21 May 2024 20:43:40 +0800 Subject: [PATCH 4/4] add python 2.7-jdk8 Signed-off-by: yangzewei --- library/python/2.7-jdk8/Makefile | 30 ++++ library/python/2.7-jdk8/debian/Dockerfile | 159 ++++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 library/python/2.7-jdk8/Makefile create mode 100644 library/python/2.7-jdk8/debian/Dockerfile diff --git a/library/python/2.7-jdk8/Makefile b/library/python/2.7-jdk8/Makefile new file mode 100644 index 0000000..7b923e5 --- /dev/null +++ b/library/python/2.7-jdk8/Makefile @@ -0,0 +1,30 @@ +# This file is generated by the template. + +REGISTRY ?=lcr.loongnix.cn +ORGANIZATION ?=library +REPOSITORY ?=python +TAG ?=2.7-jdk8 +LATEST ?=true + +IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):$(TAG) +LATEST_IMAGE=$(REGISTRY)/$(ORGANIZATION)/$(REPOSITORY):latest + +default: image + +image: + docker build \ + --build-arg http_proxy=$(http_proxy) \ + --build-arg https_proxy=$(https_proxy) \ + -t $(IMAGE) \ + -t $(IMAGE)-sid \ + ./debian + +push: + docker push $(IMAGE) + docker push $(IMAGE)-sid + #latest image + @if [ $(LATEST) = "true" ]; \ + then \ + docker tag $(IMAGE) $(LATEST_IMAGE); \ + docker push $(LATEST_IMAGE); \ + fi diff --git a/library/python/2.7-jdk8/debian/Dockerfile b/library/python/2.7-jdk8/debian/Dockerfile new file mode 100644 index 0000000..a48afed --- /dev/null +++ b/library/python/2.7-jdk8/debian/Dockerfile @@ -0,0 +1,159 @@ +FROM lcr.loongnix.cn/library/debian:sid + +LABEL maintainer="yangzewei@loongson.cn" + +# ensure local python is preferred over distribution python +ENV PATH /usr/local/bin:$PATH + +# http://bugs.python.org/issue19846 +# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. +ENV LANG C.UTF-8 + +# runtime dependencies +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + netbase \ + ; \ + rm -rf /var/lib/apt/lists/* + +ENV PYTHON_VERSION 2.7.10 + +RUN set -eux; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + dpkg-dev \ + gcc \ + gnupg dirmngr \ + libbluetooth-dev \ + libbz2-dev \ + libc6-dev \ + libexpat1-dev \ + libffi-dev \ + libgdbm-dev \ + liblzma-dev \ + libncursesw5-dev \ + libreadline-dev \ + libsqlite3-dev \ + libssl-dev \ + make \ + tk-dev \ + uuid-dev \ + wget \ + xz-utils \ + zlib1g-dev \ + openjdk-8-jdk \ + ; \ + wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; \ + mkdir -p /usr/src/python; \ + tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \ + rm python.tar.xz; \ + \ + cd /usr/src/python; \ +# update config.sub && config.guess + wget -O ./config.sub "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD"; \ + wget -O ./config.guess "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD"; \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + ./configure \ + --build="$gnuArch" \ + --with-ssl \ + --with-system-ffi \ + --enable-shared \ + --with-ensurepip=upgrade \ + --with-system-expat \ + ; \ + nproc="$(nproc)"; \ + make -j "$nproc" \ + LDFLAGS="-Wl,--strip-all" \ + +# setting PROFILE_TASK makes "--enable-optimizations" reasonable: https://bugs.python.org/issue36044 / https://github.com/docker-library/python/issues/160#issuecomment-509426916 + PROFILE_TASK='-m test.regrtest --pgo \ + test_array \ + test_base64 \ + test_binascii \ + test_binhex \ + test_binop \ + test_bytes \ + test_c_locale_coercion \ + test_class \ + test_cmath \ + test_codecs \ + test_compile \ + test_complex \ + test_csv \ + test_decimal \ + test_dict \ + test_float \ + test_fstring \ + test_hashlib \ + test_io \ + test_iter \ + test_json \ + test_long \ + test_math \ + test_memoryview \ + test_pickle \ + test_re \ + test_set \ + test_slice \ + test_struct \ + test_threading \ + test_time \ + test_traceback \ + test_unicode \ + ' \ + ; \ + make install; \ + \ + cd /; \ + rm -rf /usr/src/python; \ + \ + find /usr/local -depth \ + \( \ + \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \ + -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \ + -o \( -type f -a -name 'wininst-*.exe' \) \ + \) -exec rm -rf '{}' + \ + ; \ + \ + ldconfig; \ + \ + find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \ + | awk '/=>/ { print $(NF-1) }' \ + | sort -u \ + | xargs -r dpkg-query --search \ + | cut -d: -f1 \ + | sort -u \ + ; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/* /var/cache/apt/* /tmp/*; \ + \ + python2 --version + +# make some useful symlinks that are expected to exist ("/usr/local/bin/python" and friends) +#RUN set -eux; \ +# for src in idle pydoc python2 python2-config; do \ +# dst="$(echo "$src" | tr -d 2)"; \ +# [ -s "/usr/local/bin/$src" ]; \ +# [ ! -e "/usr/local/bin/$dst" ]; \ +# ln -svT "$src" "/usr/local/bin/$dst"; \ +# done + +# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value ''" +# https://github.com/pypa/get-pip +ENV PYTHON_GET_PIP_URL https://bootstrap.pypa.io/pip/2.7/get-pip.py + +WORKDIR /build +RUN wget https://files.pythonhosted.org/packages/24/49/7f567b628e14ee004938eec256cffeae7097db9e28576911ae7b84d2ff07/setuptools-41.1.0.post1.tar.gz && \ + tar -zxvf setuptools-41.1.0.post1.tar.gz && \ + cd setuptools-41.1.0.post1/ && python setup.py install && \ + wget https://files.pythonhosted.org/packages/aa/1a/62fb0b95b1572c76dbc3cc31124a8b6866cbe9139eb7659ac7349457cf7c/pip-19.2.2.tar.gz && \ + tar -zxvf pip-19.2.2.tar.gz && cd pip-19.2.2/ && python setup.py install && \ + rm -rf /build + +CMD ["python2"] +