Skip to content

Commit 2d1f977

Browse files
committed
chore(pack-images): use debian base
1 parent 92be42b commit 2d1f977

33 files changed

Lines changed: 407 additions & 266 deletions

Dockerfile.build

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ ARG pack_gid=1000
66

77
ADD rootfs /
88

9-
RUN groupadd drycc --gid ${pack_gid} && \
10-
useradd drycc -u ${pack_uid} -g ${pack_gid} -s /bin/bash -m
11-
RUN mkdir /app && \
12-
chown drycc:drycc /app
13-
RUN chmod +x /usr/local/bin/* && \
14-
install-tools.sh
9+
RUN groupadd drycc --gid ${pack_gid} \
10+
&& useradd drycc -u ${pack_uid} -g ${pack_gid} -s /bin/bash -m \
11+
&& chown -R drycc:drycc /usr/sbin/nginx /var/log/nginx \
12+
&& mkdir /app \
13+
&& chown drycc:drycc /app \
14+
&& chmod +x /usr/local/bin/*
1515

1616
ENV CNB_USER_ID=${pack_uid}
1717
ENV CNB_GROUP_ID=${pack_gid}

Dockerfile.run

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ARG BASE_IMAGE
22
FROM ${BASE_IMAGE}
33

4-
RUN ln -s /workspace /app
5-
64
ARG pack_uid=1000
75
ARG pack_gid=1000
86

9-
RUN groupadd drycc --gid ${pack_gid} && \
10-
useradd drycc -u ${pack_uid} -g ${pack_gid} -s /bin/bash -m
7+
RUN ln -s /workspace /app \
8+
&& groupadd drycc --gid ${pack_gid} \
9+
&& useradd drycc -u ${pack_uid} -g ${pack_gid} -s /bin/bash -m \
10+
&& chown -R drycc:drycc /usr/sbin/nginx /var/log/nginx
1111

1212
ARG STACK
1313
LABEL io.buildpacks.stack.id="${STACK}"

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ SHELL=/bin/bash -o pipefail
2222
pack:
2323
@docker build --pull -f Dockerfile.build \
2424
--build-arg STACK=drycc-${STACK} \
25-
--build-arg BASE_IMAGE=${DRYCC_REGISTRY}/drycc/stack-images:${STACK}-build \
25+
--build-arg BASE_IMAGE=${DRYCC_REGISTRY}/drycc/stack-images:${STACK} \
2626
-t ${DRYCC_REGISTRY}/drycc/pack:${VERSION}-build .
2727
@docker build --pull -f Dockerfile.run \
2828
--build-arg STACK=drycc-${STACK} \

README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,40 @@ with [Cloud Native Buildpacks'](https://buildpacks.io)
1414
## Usage
1515

1616
`pack build myapp --builder drycc/buildpacks:20`
17+
18+
## System
19+
20+
The basic image is based on Debian system, See the table below for system description:
21+
22+
STACK ID | Buildpacks image | Operating System
23+
-------------|---------------------------------|---------------------------------
24+
drycc-20 | docker.io/drycc/buildpacks:20 | Debian 11 Bullseye
25+
26+
The basic layer of buildpack supports custom software sources and custom software.
27+
For example, if we use alicloud to install libpq-dev, we can add `.deb-list` and `·source-list` files to the project.
28+
29+
```
30+
cat > ".source-list" <<EOL
31+
deb http://mirrors.cloud.aliyuncs.com/debian/ bullseye main non-free contrib
32+
deb-src http://mirrors.cloud.aliyuncs.com/debian/ bullseye main non-free contrib
33+
deb http://mirrors.cloud.aliyuncs.com/debian-security bullseye/updates main
34+
deb-src http://mirrors.cloud.aliyuncs.com/debian-security bullseye/updates main
35+
deb http://mirrors.cloud.aliyuncs.com/debian/ bullseye-updates main non-free contrib
36+
deb-src http://mirrors.cloud.aliyuncs.com/debian/ bullseye-updates main non-free contrib
37+
deb http://mirrors.cloud.aliyuncs.com/debian/ bullseye-backports main non-free contrib
38+
deb-src http://mirrors.cloud.aliyuncs.com/debian/ bullseye-backports main non-free contrib
39+
EOL
40+
41+
cat > ".deb-list" <<EOL
42+
libpq-dev
43+
EOL
44+
```
45+
46+
## Reference
47+
48+
Pack Images bundles the following technologies together into a single cohesive distribution:
49+
50+
* [Stack Images](https://github.com/drycc/stack-images)
51+
* [Pack Runtimes](https://github.com/drycc/pack-runtimes)
52+
* [Pack CLI](https://github.com/buildpacks/pack)
53+
* [Buildpacks lifecycle](https://github.com/buildpacks/lifecycle)

buildpacks/go/bin/build

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#!/usr/bin/env bash
2+
# shellcheck source=/dev/null
3+
. generate-layer.sh
24
set -eo pipefail
35

46
echo "---> Go Buildpack"
@@ -10,20 +12,20 @@ plan_path=$3
1012
# 2. DOWNLOAD go
1113
go_layer_dir="${layers_dir}/go"
1214
mkdir -p "${go_layer_dir}"
13-
arch=$(dpkg --print-architecture) # amd64 arm64
15+
arch=$(dpkg --print-architecture) # amd64 arm64
1416
# determine go version provided during detection
15-
go_version=$(< "${plan_path}" yj -t | jq -r '.entries[] | select(.name == "go") | .version')
17+
go_version=$(yj <"${plan_path}" -t | jq -r '.entries[] | select(.name == "go") | .version')
1618
remote_go_version='not found'
1719
if [[ -f "${go_layer_dir}.toml" ]]; then
18-
remote_go_version=$(< "${go_layer_dir}.toml" yj -t | jq -r .metadata 2>/dev/null || echo 'not found')
20+
remote_go_version=$(yj <"${go_layer_dir}.toml" -t | jq -r .metadata 2>/dev/null || echo 'not found')
1921
fi
20-
if [[ "${go_version}" == "${remote_go_version}" ]] ; then
22+
if [[ "${go_version}" == "${remote_go_version}" ]]; then
2123
echo "---> Reusing go"
2224
else
2325
echo "---> Downloading and extracting go ${go_version}"
2426
go_url=https://golang.org/dl/go${go_version}.linux-${arch}.tar.gz
2527
wget -q -O - "${go_url}" | tar -xzf - -C "${go_layer_dir}"
26-
cat > "${go_layer_dir}.toml" <<EOL
28+
cat >"${go_layer_dir}.toml" <<EOL
2729
cache = true
2830
build = true
2931
launch = true
@@ -40,17 +42,17 @@ export GOPATH="${go_cache_layer_dir}"
4042
local_mod_checksum=$(sha256sum go.mod | cut -d ' ' -f 1 || echo 'not found')
4143
remote_mod_checksum='not found'
4244
if [[ -f "${go_cache_layer_dir}.toml" ]]; then
43-
remote_mod_checksum=$(< "${go_cache_layer_dir}.toml" yj -t | jq -r .metadata 2>/dev/null || echo 'not found')
45+
remote_mod_checksum=$(yj <"${go_cache_layer_dir}.toml" -t | jq -r .metadata 2>/dev/null || echo 'not found')
4446
fi
4547
mkdir -p "${go_cache_layer_dir}"
4648

47-
if [[ -f go.mod && "${local_mod_checksum}" == "${remote_mod_checksum}" ]] ; then
49+
if [[ -f go.mod && "${local_mod_checksum}" == "${remote_mod_checksum}" ]]; then
4850
echo "---> Reusing go.mod"
4951
else
5052
echo "---> Installing go.mod with go mod vendor"
5153
rm "${go_cache_layer_dir}/pkg" -rf
5254
go mod download
53-
cat > "${go_cache_layer_dir}.toml" <<EOL
55+
cat >"${go_cache_layer_dir}.toml" <<EOL
5456
cache = true
5557
build = true
5658
launch = true

buildpacks/go/bin/detect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#!/usr/bin/env bash
22
set -eo pipefail
33

4-
# 1. CHECK IF APPLICABLE
4+
# 1. CHECK IF APPLICABLE
55
if [ ! -f "go.mod" ] && [ ! -f "setup.py" ]; then
6-
exit 100
6+
exit 100
77
fi
88

99
# 2. GET ARGS
@@ -12,11 +12,11 @@ plan_path=$2
1212
# 3. GET CONFIGURATION
1313
version=1.16
1414
if [[ -f go.mod ]]; then
15-
version=$(< go.mod grep 'go [1.*]' | tr -d 'go ')
15+
version=$(grep <go.mod 'go [1.*]' | tr -d 'go ')
1616
fi
1717

1818
# 4. DECLARE DEPENDENCIES
19-
cat >> "${plan_path}" <<EOL
19+
cat >>"${plan_path}" <<EOL
2020
# Buildpack provides this dependency
2121
#
2222
# NOTE: The dependency is provided during the 'build' process.

buildpacks/java/README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,17 @@
33
Compatible apps:
44
- Java apps
55

6-
### Usage
6+
## Usage
77

88
```bash
99
pack build java-project --builder drycc/buildpacks:20
10-
```
10+
```
11+
12+
## Version
13+
14+
You can generate a declared version of `.jdk-version` in the directory.
15+
16+
```
17+
cat > ".jdk-version" <<EOL
18+
x.y.z
19+
EOL

buildpacks/java/bin/build

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,82 @@
11
#!/usr/bin/env bash
2+
# shellcheck source=/dev/null
3+
. generate-layer.sh
24
set -eo pipefail
35

46
echo "---> Java Buildpack"
57
#amd64 aarch64
68
arch=$(dpkg --print-architecture)
79
if [ "${arch}" == "arm64" ]; then
8-
arch="aarch64"
10+
arch="aarch64"
911
fi
1012
# 1. GET ARGS
1113
bp_dir=$(
12-
cd "$(dirname "$0")"/..
13-
pwd
14+
cd "$(dirname "$0")"/..
15+
pwd
1416
)
1517
layers_dir=$1
1618
env_dir="$2/env"
1719
plan_path=$3
1820

1921
# 2. LOAD USER-PROVIDED BUILD-TIME ENVIRONMENT VARIABLES
20-
if compgen -G "${env_dir}"/* > /dev/null; then
22+
if compgen -G "${env_dir}"/* >/dev/null; then
2123
for var in "${env_dir}"/*; do
2224
declare "$(basename "${var}")=$(<"${var}")"
2325
done
2426
fi
2527

2628
# 3. INSTALL JAVA
2729
get_jdk_url() {
28-
if [ "${arch}" == "amd64" ]; then
29-
local arch="x64"
30+
if [ "${arch}" == "amd64" ]; then
31+
local arch="x64"
3032
fi
31-
if [ "${version}" == "8" ]; then
33+
if [ "${version}" == "8" ]; then
3234
echo "https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_${arch}_linux_8u292b10.tar.gz"
3335
elif [ "${version}" == "11" ]; then
3436
echo "https://github.com/AdoptOpenJDK/openjdk11-upstream-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_${arch}_linux_11.0.11_9.tar.gz"
3537
elif [ "${version}" == "16" ]; then
3638
echo "https://download.java.net/java/GA/jdk16.0.1/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-16.0.1_linux-${arch}_bin.tar.gz"
3739
elif [ "${version}" == "17" ]; then
3840
echo "https://download.java.net/java/early_access/jdk17/28/GPL/openjdk-17-ea+28_linux-${arch}_bin.tar.gz"
39-
elif [ "${version}" == "18" ]; then
40-
echo "https://download.java.net/java/early_access/jdk18/3/GPL/openjdk-18-ea+3_linux-${arch}_bin.tar.gz"
41-
else
42-
echo "${version}"
43-
fi
41+
elif [ "${version}" == "18" ]; then
42+
echo "https://download.java.net/java/early_access/jdk18/3/GPL/openjdk-18-ea+3_linux-${arch}_bin.tar.gz"
43+
else
44+
echo "${version}"
45+
fi
4446
}
4547

46-
version=$(< "${plan_path}" yj -t | jq -r '.entries[] | select(.name == "jdk") | .version')
48+
version=$(yj <"${plan_path}" -t | jq -r '.entries[] | select(.name == "jdk") | .version')
4749
jdk_url="$(get_jdk_url)"
4850

4951
# If it doesn't exist locally, create a JDK cache layer
5052
# This makes JDK available to subsequent buildpacks as well
5153
jdk_layer_dir=${layers_dir}/jdk
5254
if [[ -f "${jdk_layer_dir}.toml" ]]; then
53-
cached_jdk_url=$(< "${jdk_layer_dir}.toml" yj -t | jq -r .metadata.url 2>/dev/null || echo 'JDK TOML parsing failed')
55+
cached_jdk_url=$(yj <"${jdk_layer_dir}.toml" -t | jq -r .metadata.url 2>/dev/null || echo 'JDK TOML parsing failed')
5456
fi
5557

56-
if [[ "${jdk_url}" != "${cached_jdk_url}" ]] ; then
58+
if [[ "${jdk_url}" != "${cached_jdk_url}" ]]; then
5759
echo "---> Downloading JDK"
5860
rm -rf "${layers_dir}"/jdk
5961
mkdir -p "${layers_dir}"/jdk/env
6062
wget -q -O - "${jdk_url}" | tar pxz -C "${jdk_layer_dir}" --strip-components=1
61-
cat > "${jdk_layer_dir}.toml" << EOF
63+
cat >"${jdk_layer_dir}.toml" <<EOF
6264
launch = true
6365
build = true
6466
cache = true
6567
[metadata]
6668
version = "${version}"
6769
EOF
6870

69-
echo "${layers_dir}"/jdk > "${layers_dir}"/jdk/env/JAVA_HOME
71+
echo "${layers_dir}"/jdk >"${layers_dir}"/jdk/env/JAVA_HOME
7072
if [[ -z "${LD_LIBRARY_PATH}" ]]; then
71-
echo "${JAVA_HOME}/jre/lib/${arch}/server" > "${jdk_layer_dir}/env/LD_LIBRARY_PATH"
73+
echo "${JAVA_HOME}/jre/lib/${arch}/server" >"${jdk_layer_dir}/env/LD_LIBRARY_PATH"
7274
else
73-
echo "${JAVA_HOME}/jre/lib/${arch}/server:${LD_LIBRARY_PATH}" > "${jdk_layer_dir}"/env/LD_LIBRARY_PATH
75+
echo "${JAVA_HOME}/jre/lib/${arch}/server:${LD_LIBRARY_PATH}" >"${jdk_layer_dir}"/env/LD_LIBRARY_PATH
7476
fi
7577

7678
mkdir -p "${jdk_layer_dir}/profile.d"
77-
cat > "${jdk_layer_dir}/profile.d/jdk.sh" << EOF
79+
cat >"${jdk_layer_dir}/profile.d/jdk.sh" <<EOF
7880
export JAVA_HOME="${jdk_layer_dir}"
7981
if [[ -z \$LD_LIBRARY_PATH ]]; then
8082
export LD_LIBRARY_PATH="\$JAVA_HOME/jre/lib/${arch}/server"
@@ -97,33 +99,33 @@ source "$bp_dir/lib/gradle_build"
9799
source "$bp_dir/lib/maven_build"
98100
build_choice="maven"
99101
if [ -f pom.xml ] && [ -f gradlew ]; then
100-
if [[ -f .build-choice ]]; then
101-
build_choice=$(< .build-choice tr -d '[:space:]')
102-
fi
102+
if [[ -f .build-choice ]]; then
103+
build_choice=$(tr <.build-choice -d '[:space:]')
104+
fi
103105
elif [ -f pom.xml ] && [ ! -f gradlew ]; then
104-
build_choice="maven"
106+
build_choice="maven"
105107
elif [ -f gradlew ] && [ ! -f pom.xml ]; then
106-
build_choice="gradle"
108+
build_choice="gradle"
107109
fi
108110

109111
if [ "${build_choice}" == "maven" ]; then
110-
maven_build
112+
maven_build
111113
elif [ "${build_choice}" == "gradle" ]; then
112-
gradle_build
114+
gradle_build
113115
fi
114116

115117
# 6. SET DEFAULT START COMMAND
116118
if [ -f Procfile ]; then
117-
generate-launch.sh "${layers_dir}"
119+
generate-launch.sh "${layers_dir}"
118120
else
119-
target_dir="build/libs"
120-
# shellcheck disable=SC2044
121-
for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do
122-
cat >> "${layers_dir}/launch.toml" <<EOL
121+
target_dir="build/libs"
122+
# shellcheck disable=SC2044
123+
for jar_file in $(find "$target_dir" -maxdepth 1 -name "*.jar" -type f); do
124+
cat >>"${layers_dir}/launch.toml" <<EOL
123125
[[processes]]
124126
type = "web"
125127
command = "java -jar ${jar_file}"
126128
EOL
127-
break;
128-
done
129+
break
130+
done
129131
fi

buildpacks/java/bin/detect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env bash
22
set -eo pipefail
33

4-
# 1. CHECK IF APPLICABLE
5-
if [[ ! -f pom.xml ]] && [[ ! -f gradlew ]] ; then
4+
# 1. CHECK IF APPLICABLE
5+
if [[ ! -f pom.xml ]] && [[ ! -f gradlew ]]; then
66
exit 100
77
fi
88

@@ -12,10 +12,10 @@ plan_path=$2
1212
# 3. GET CONFIGURATION
1313
version=8
1414
if [[ -f .jdk-version ]]; then
15-
version=$(< .jdk-version tr -d '[:space:]')
15+
version=$(tr <.jdk-version -d '[:space:]')
1616
fi
1717
# 4. DECLARE DEPENDENCIES
18-
cat >> "${plan_path}" <<EOL
18+
cat >>"${plan_path}" <<EOL
1919
# Buildpack provides this dependency
2020
#
2121
# NOTE: The dependency is provided during the 'build' process.

buildpacks/java/lib/maven_build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ version = "${maven_version}"
3535
url = "${maven_url}"
3636
EOF
3737
fi
38-
export PATH="${PATH}:${layers_dir}/maven/bin"
38+
export PATH="${layers_dir}/maven/bin:${PATH}"
3939
echo "---> Running Maven Wrapper"
4040
mvn clean install -B -DskipTests
4141
fi

0 commit comments

Comments
 (0)