Преглед изворни кода

[Rebase] Revert to upstream docker scripts

Achilleas Koutsou пре 6 година
родитељ
комит
6ecfb83a23
5 измењених фајлова са 80 додато и 70 уклоњено
  1. BIN
      docker/aarch64/resin-xbuild
  2. BIN
      docker/armhf/resin-xbuild
  3. 5 3
      docker/build-go.sh
  4. 14 14
      docker/build.sh
  5. 61 53
      docker/start.sh

BIN
docker/aarch64/resin-xbuild


BIN
docker/armhf/resin-xbuild


+ 5 - 3
docker/build-go.sh

@@ -5,26 +5,28 @@ set -x
 set -e
 
 # Components versions
-export GOLANG_VERSION="1.9.2"
+export GOLANG_VERSION="1.8"
 export GOLANG_SRC_URL="https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz"
 export GOLANG_SRC_SHA256="406865f587b44be7092f206d73fc1de252600b79b3cacc587b74b5ef5c623596"
 
 
 # Install build tools
+apk add --no-cache --no-progress --virtual build-deps-go gcc musl-dev openssl go
 
 export GOROOT_BOOTSTRAP="$(go env GOROOT)"
 
 # Download Go
 wget -q "$GOLANG_SRC_URL" -O golang.tar.gz
-# echo "$GOLANG_SRC_SHA256  golang.tar.gz" | sha256sum -c -
+echo "$GOLANG_SRC_SHA256  golang.tar.gz" | sha256sum -c -
 tar -C /usr/local -xzf golang.tar.gz
 rm golang.tar.gz
 
 # Build
 cd /usr/local/go/src
 # see https://golang.org/issue/14851
-# patch -p2 -i /app/gogs/build/docker/no-pic.patch
+patch -p2 -i /app/gogs/build/docker/no-pic.patch
 ./make.bash
 
 # Clean
 rm /app/gogs/build/docker/*.patch
+apk del build-deps-go

+ 14 - 14
docker/build.sh

@@ -6,26 +6,26 @@ set -e
 export GOPATH=/tmp/go
 export PATH=/usr/local/go/bin:${PATH}:${GOPATH}/bin
 
+# Install build deps
+apk --no-cache --no-progress add --virtual build-deps build-base linux-pam-dev
+
 # Build Gogs
-rm -rf ${GOPATH}/src/github.com/G-Node/gogs
-mkdir -p ${GOPATH}/src/github.com/G-Node/
-ln -s /app/gogs/build ${GOPATH}/src/github.com/G-Node/gogs
-cd ${GOPATH}/src/github.com/G-Node/gogs
+mkdir -p ${GOPATH}/src/github.com/gogs/
+ln -s /app/gogs/build ${GOPATH}/src/github.com/gogs/gogs
+cd ${GOPATH}/src/github.com/gogs/gogs
 # Needed since git 2.9.3 or 2.9.4
 git config --global http.https://gopkg.in.followRedirects true
-
-touch *
-make bindata
 make build TAGS="sqlite cert pam"
 
-
 # Cleanup GOPATH
-#rm -r $GOPATH
+rm -r $GOPATH
 
+# Remove build deps
+apk --no-progress del build-deps
 
-# Create git user for Gogs
+# Move to final place
+mv /app/gogs/build/gogs /app/gogs/
 
-addgroup  git
-adduser --home /data/git --shell /bin/sh --ingroup git --disabled-password git
-passwd -d git
-echo "export GOGS_CUSTOM=${GOGS_CUSTOM}" >> /etc/profile
+# Cleanup go
+rm -rf /tmp/go
+rm -rf /usr/local/go

+ 61 - 53
docker/start.sh

@@ -1,65 +1,73 @@
 #!/bin/sh
 
-# directory setup
-mkdir -p /data/ssh
-mkdir -p /data/gogs/log
-mkdir -p /data/gogs/data
+create_socat_links() {
+    # Bind linked docker container to localhost socket using socat
+    USED_PORT="3000:22"
+    while read NAME ADDR PORT; do
+        if test -z "$NAME$ADDR$PORT"; then
+            continue
+        elif echo $USED_PORT | grep -E "(^|:)$PORT($|:)" > /dev/null; then
+            echo "init:socat  | Can't bind linked container ${NAME} to localhost, port ${PORT} already in use" 1>&2
+        else
+            SERV_FOLDER=/app/gogs/docker/s6/SOCAT_${NAME}_${PORT}
+            mkdir -p ${SERV_FOLDER}
+            CMD="socat -ls TCP4-LISTEN:${PORT},fork,reuseaddr TCP4:${ADDR}:${PORT}"
+            echo -e "#!/bin/sh\nexec $CMD" > ${SERV_FOLDER}/run
+            chmod +x ${SERV_FOLDER}/run
+            USED_PORT="${USED_PORT}:${PORT}"
+            echo "init:socat  | Linked container ${NAME} will be binded to localhost on port ${PORT}" 1>&2
+        fi
+    done << EOT
+    $(env | sed -En 's|(.*)_PORT_([0-9]+)_TCP=tcp://(.*):([0-9]+)|\1 \3 \4|p')
+EOT
+}
 
-#SSH setup
-# Check if host keys are present, else create them
-if ! test -f /data/ssh/ssh_host_rsa_key; then
-    ssh-keygen -q -f /data/ssh/ssh_host_rsa_key -N '' -t rsa
-fi
+cleanup() {
+    # Cleanup SOCAT services and s6 event folder
+    # On start and on shutdown in case container has been killed
+    rm -rf $(find /app/gogs/docker/s6/ -name 'event')
+    rm -rf /app/gogs/docker/s6/SOCAT_*
+}
 
-if ! test -f /data/ssh/ssh_host_dsa_key; then
-    ssh-keygen -q -f /data/ssh/ssh_host_dsa_key -N '' -t dsa
-fi
+create_volume_subfolder() {
+    # Create VOLUME subfolder
+    for f in /data/gogs/data /data/gogs/conf /data/gogs/log /data/git /data/ssh; do
+        if ! test -d $f; then
+            mkdir -p $f
+        fi
+    done
+}
 
-if ! test -f /data/ssh/ssh_host_ecdsa_key; then
-    ssh-keygen -q -f /data/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
-fi
+setids() {
+    PUID=${PUID:-1000}
+    PGID=${PGID:-1000}
+    groupmod -o -g "$PGID" git
+    usermod -o -u "$PUID" git
+}
 
-if ! test -f /data/ssh/ssh_host_ed25519_key; then
-    ssh-keygen -q -f /data/ssh/ssh_host_ed25519_key -N '' -t ed25519
-fi
+setids
+cleanup
+create_volume_subfolder
 
-if ! test -d ~git/.ssh; then
-    mkdir -p ~git/.ssh
-    chmod 700 ~git/.ssh
+LINK=$(echo "$SOCAT_LINK" | tr '[:upper:]' '[:lower:]')
+if [ "$LINK" = "false" -o "$LINK" = "0" ]; then
+    echo "init:socat  | Will not try to create socat links as requested" 1>&2
+else
+    create_socat_links
 fi
 
-#Gogs setup
-if ! test -f ~git/.ssh/environment; then
-    echo "GOGS_CUSTOM=${GOGS_CUSTOM}" > ~git/.ssh/environment
-    chmod 600 ~git/.ssh/environment
+CROND=$(echo "$RUN_CROND" | tr '[:upper:]' '[:lower:]')
+if [ "$CROND" = "true" -o "$CROND" = "1" ]; then
+    echo "init:crond  | Cron Daemon (crond) will be run as requested by s6" 1>&2
+    rm -f /app/gogs/docker/s6/crond/down
+else
+    # Tell s6 not to run the crond service
+    touch /app/gogs/docker/s6/crond/down
 fi
 
-cd /app/gogs
-
-# check authorized keys
-if ! test -f /data/git/.ssh/authorized_keys; then
-    echo "" > /data/git/.ssh/authorized_keys
-fi
-# check authorized keys
-if ! test -d /data/.ssh; then
-    mkdir -p /data/.ssh
-fi
-
-# Link volumed data with app data
-ln -sf /data/gogs/log  ./log
-ln -sf /data/gogs/data ./data
-ln -s /data/git/.ssh/authorized_keys /data/.ssh/authorized_keys
-
-# Backward Compatibility with Gogs Container v0.6.15
-ln -sf /data/git /home/git
-
-chown -R git:git /data /app/gogs ~git/
-chmod 0755 /data /data/gogs ~git/
-
-# Set correct right to ssh keys
-chown -R root:root /data/ssh/*
-chmod 0700 /data/ssh
-chmod 0600 /data/ssh/*
 # Exec CMD or S6 by default if nothing present
-supervisord -c /app/gogs/docker/supervisord.conf
-
+if [ $# -gt 0 ];then
+    exec "$@"
+else
+    exec /bin/s6-svscan /app/gogs/docker/s6/
+fi