Skip to content

Commit 095055c

Browse files
authored
chore: switch to the internal devcontainer base (#794)
1 parent 1eef8e0 commit 095055c

14 files changed

Lines changed: 288 additions & 51 deletions

.devcontainer/Containerfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM ghcr.io/hadolint/hadolint:v2.14.0@sha256:27086352fd5e1907ea2b934eb1023f217c5ae087992eb59fde121dce9c9ff21e AS hadolint
2+
FROM registry.k8s.io/kustomize/kustomize:v5.8.1@sha256:899fcd3bc898160e62bcaf82932b0cb29ba38d16272353db2e7acbba82129429 AS kustomize
3+
4+
FROM scratch AS ctx
5+
COPY .devcontainer/build_files /
6+
COPY ansible/requirements.txt /requirements.txt
7+
8+
# hadolint ignore=DL3007
9+
FROM ghcr.io/marinatedconcrete/devcontainer-base:latest
10+
11+
USER root
12+
13+
COPY --chmod=0755 --from=hadolint /bin/hadolint /usr/local/bin/hadolint
14+
COPY --chmod=0755 --from=kustomize /app/kustomize /usr/local/bin/kustomize
15+
16+
RUN echo 'vscode ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/vscode \
17+
&& chmod 0440 /etc/sudoers.d/vscode \
18+
&& sed -i 's/^account include system-auth$/account sufficient pam_permit.so\n&/' /etc/pam.d/sudo
19+
20+
RUN --mount=type=bind,from=ctx,source=/,target=/ctx \
21+
--mount=type=cache,dst=/var/cache \
22+
--mount=type=cache,dst=/var/log \
23+
--mount=type=tmpfs,dst=/tmp \
24+
/ctx/build.sh
25+
26+
USER vscode

.devcontainer/Dockerfile

Lines changed: 0 additions & 19 deletions
This file was deleted.

.devcontainer/build_files/build.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
/ctx/packages.sh
6+
7+
usermod -aG docker vscode
8+
install -m 0755 /ctx/docker-init.sh /usr/local/share/docker-init.sh
9+
10+
pip3 install --no-cache-dir -r /ctx/requirements.txt
11+
12+
dnf clean all
13+
rm -rf /var/lib/dnf
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
fix_socket_permissions() {
6+
if [[ -S /var/run/docker.sock ]]; then
7+
chgrp docker /var/run/docker.sock
8+
chmod 0660 /var/run/docker.sock
9+
fi
10+
}
11+
12+
set_cgroup_nesting() {
13+
if [[ ! -f /sys/fs/cgroup/cgroup.controllers ]]; then
14+
return 0
15+
fi
16+
17+
mkdir -p /sys/fs/cgroup/init
18+
xargs -rn1 < /sys/fs/cgroup/cgroup.procs > /sys/fs/cgroup/init/cgroup.procs || :
19+
sed -e 's/ / +/g' -e 's/^/+/' < /sys/fs/cgroup/cgroup.controllers \
20+
> /sys/fs/cgroup/cgroup.subtree_control
21+
}
22+
23+
prepare_dind() {
24+
export container=docker
25+
26+
find /run /var/run -iname 'docker*.pid' -delete || :
27+
find /run /var/run -iname 'container*.pid' -delete || :
28+
29+
if [[ -d /sys/kernel/security ]] && ! mountpoint -q /sys/kernel/security; then
30+
mount -t securityfs none /sys/kernel/security || {
31+
echo >&2 'Could not mount /sys/kernel/security.'
32+
echo >&2 'AppArmor detection and --privileged mode might break.'
33+
}
34+
fi
35+
36+
if ! mountpoint -q /tmp; then
37+
mount -t tmpfs none /tmp
38+
fi
39+
40+
for _ in {1..5}; do
41+
if set_cgroup_nesting; then
42+
return 0
43+
fi
44+
echo >&2 'cgroup v2: failed to enable nesting, retrying...'
45+
sleep 1
46+
done
47+
}
48+
49+
containerd_arg() {
50+
local containerd_bin=""
51+
local containerd_sock="/run/containerd/containerd.sock"
52+
53+
for candidate in /usr/local/bin/containerd /usr/bin/containerd /usr/sbin/containerd; do
54+
if [[ -x "$candidate" ]]; then
55+
containerd_bin="$candidate"
56+
break
57+
fi
58+
done
59+
60+
if [[ -z "$containerd_bin" ]]; then
61+
return 0
62+
fi
63+
64+
mkdir -p /run/containerd
65+
if ! pgrep -x containerd >/dev/null 2>&1; then
66+
"$containerd_bin" > /tmp/containerd.log 2>&1 &
67+
fi
68+
69+
for _ in {1..50}; do
70+
if [[ -S "$containerd_sock" ]]; then
71+
printf -- '--containerd %s\n' "$containerd_sock"
72+
return 0
73+
fi
74+
sleep 0.1
75+
done
76+
}
77+
78+
if docker info >/dev/null 2>&1; then
79+
fix_socket_permissions
80+
exit 0
81+
fi
82+
83+
if ! pgrep -x dockerd >/dev/null 2>&1; then
84+
prepare_dind
85+
mkdir -p /run /var/lib/containerd /var/lib/docker
86+
read -r -a dockerd_containerd_arg <<< "$(containerd_arg)"
87+
dockerd "${dockerd_containerd_arg[@]}" > /tmp/dockerd.log 2>&1 &
88+
fi
89+
90+
for _ in {1..30}; do
91+
if docker info >/dev/null 2>&1; then
92+
fix_socket_permissions
93+
exit 0
94+
fi
95+
sleep 1
96+
done
97+
98+
cat /tmp/dockerd.log >&2
99+
exit 1
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
PACKAGES=(
6+
"edk2-ovmf"
7+
"libssh-devel"
8+
"openssh-clients"
9+
"openssl"
10+
"python3"
11+
"python3-pip"
12+
"qemu-img"
13+
"qemu-system-x86-core"
14+
"shellcheck"
15+
"yq"
16+
)
17+
18+
dnf upgrade -y
19+
dnf install \
20+
--setopt=install_weak_deps=False \
21+
-y \
22+
"${PACKAGES[@]}"
23+
24+
/ctx/packages/docker.sh
25+
/ctx/packages/github-cli.sh
26+
/ctx/packages/helm.sh
27+
/ctx/packages/kubectl.sh
28+
/ctx/packages/minikube.sh
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
install -d /etc/pki/rpm-gpg /etc/yum.repos.d
6+
curl -fsSL https://download.docker.com/linux/centos/gpg > /etc/pki/rpm-gpg/docker-ce.gpg
7+
8+
cat > /etc/yum.repos.d/docker-ce.repo <<'EOF'
9+
[docker-ce-stable]
10+
name=Docker CE Stable
11+
baseurl=https://download.docker.com/linux/centos/9/$basearch/stable
12+
enabled=1
13+
gpgcheck=1
14+
gpgkey=file:///etc/pki/rpm-gpg/docker-ce.gpg
15+
skip_if_unavailable=1
16+
module_hotfixes=1
17+
EOF
18+
19+
dnf install \
20+
--setopt=install_weak_deps=False \
21+
-y \
22+
containerd.io \
23+
docker-ce \
24+
docker-ce-cli
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
# renovate: datasource=github-releases depName=cli/cli
6+
GH_VERSION=2.95.0
7+
8+
rpm="$(mktemp --tmpdir gh.XXXXXX.rpm)"
9+
trap 'rm -f "${rpm}"' EXIT
10+
11+
curl \
12+
-fsSL \
13+
-o "${rpm}" \
14+
"https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.rpm"
15+
dnf install \
16+
--setopt=install_weak_deps=False \
17+
-y \
18+
"${rpm}"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
# renovate: datasource=github-releases depName=helm/helm
6+
HELM_VERSION=v3.21.1
7+
8+
tools_dir="$(mktemp -d)"
9+
trap 'rm -rf "${tools_dir}"' EXIT
10+
11+
curl \
12+
-fsSL \
13+
"https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz" |
14+
tar -xz -C "${tools_dir}"
15+
install -m 0755 "${tools_dir}/linux-amd64/helm" /usr/local/bin/helm
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
# renovate: datasource=github-releases depName=kubernetes/kubernetes
6+
KUBECTL_VERSION=v1.36.1
7+
8+
kubectl="$(mktemp --tmpdir kubectl.XXXXXX)"
9+
trap 'rm -f "${kubectl}"' EXIT
10+
11+
curl \
12+
-fsSL \
13+
-o "${kubectl}" \
14+
"https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl"
15+
install -m 0755 "${kubectl}" /usr/local/bin/kubectl
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
set -eoux pipefail
4+
5+
# renovate: datasource=github-releases depName=kubernetes/minikube
6+
MINIKUBE_VERSION=v1.38.1
7+
8+
minikube="$(mktemp --tmpdir minikube.XXXXXX)"
9+
trap 'rm -f "${minikube}"' EXIT
10+
11+
curl \
12+
-fsSL \
13+
-o "${minikube}" \
14+
"https://storage.googleapis.com/minikube/releases/${MINIKUBE_VERSION}/minikube-linux-amd64"
15+
install -m 0755 "${minikube}" /usr/local/bin/minikube

0 commit comments

Comments
 (0)