refactor
This commit is contained in:
31
.env
Normal file
31
.env
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#:CONFIGURATION FILE FOR BEARCLOUD
|
||||||
|
#:WARNING: DO NOT EDIT FILEPATH COMMENTS WITHOUT CONSENT OF substitution.sh
|
||||||
|
# /etc/hostname
|
||||||
|
CLOUD_HOSTNAME=localhost
|
||||||
|
|
||||||
|
# /etc/network/interfaces
|
||||||
|
CLOUD_GATEWAY_ADDRESS=10.0.0.119
|
||||||
|
|
||||||
|
# /root/.ssh/authorized_keys
|
||||||
|
HOST_SSH_PUBLIC_KEY=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN6GbswtvLbhmju/vBunpfPaqpcIuESJSLoR+Sz0ujTs cardno:F1D0_013135A1
|
||||||
|
|
||||||
|
# /etc/ssh/sshd_config.d/09-adjust-ssh-port.conf
|
||||||
|
HOST_SSH_PORT=2222
|
||||||
|
|
||||||
|
# /daemon/config.yaml
|
||||||
|
BUBBLE_SSH_PORT=22
|
||||||
|
|
||||||
|
# /etc/init.d/auth-server
|
||||||
|
BUBBLE_AUTH_ORG=cloud
|
||||||
|
BUBBLE_AUTH_TEAM=workspace
|
||||||
|
BUBBLE_AUTH_GITEA_URL=https://git.sfclub.cc
|
||||||
|
|
||||||
|
# /etc/conf.d/auth-server
|
||||||
|
BUBBLE_AUTH_GITEA_KEY=sk-xxxxxxxx
|
||||||
|
|
||||||
|
# /usr/bin/tsdns
|
||||||
|
TS_AUTHKEY=
|
||||||
|
HOMELAB_TLD=ice
|
||||||
|
HOMELAB_ZONE=cloud
|
||||||
|
ADVERTISE_ROUTE=10.1.0.0/24
|
||||||
|
TSDNS_SUBNET=10.1.0.0/24
|
||||||
31
.env.example
Normal file
31
.env.example
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#:CONFIGURATION FILE FOR BEARCLOUD
|
||||||
|
#:WARNING: DO NOT EDIT FILEPATH COMMENTS WITHOUT CONSENT OF substitution.sh
|
||||||
|
# /etc/hostname
|
||||||
|
CLOUD_HOSTNAME=localhost
|
||||||
|
|
||||||
|
# /etc/network/interfaces
|
||||||
|
CLOUD_GATEWAY_ADDRESS=10.0.0.119
|
||||||
|
|
||||||
|
# /root/.ssh/authorized_keys
|
||||||
|
HOST_SSH_PUBLIC_KEY=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN6GbswtvLbhmju/vBunpfPaqpcIuESJSLoR+Sz0ujTs cardno:F1D0_013135A1
|
||||||
|
|
||||||
|
# /etc/ssh/sshd_config.d/09-adjust-ssh-port.conf
|
||||||
|
HOST_SSH_PORT=2222
|
||||||
|
|
||||||
|
# /daemon/config.yaml
|
||||||
|
BUBBLE_SSH_PORT=22
|
||||||
|
|
||||||
|
# /etc/init.d/auth-server
|
||||||
|
BUBBLE_AUTH_ORG=cloud
|
||||||
|
BUBBLE_AUTH_TEAM=workspace
|
||||||
|
BUBBLE_AUTH_GITEA_URL=https://git.sfclub.cc
|
||||||
|
|
||||||
|
# /etc/conf.d/auth-server
|
||||||
|
BUBBLE_AUTH_GITEA_KEY=sk-xxxxxxxx
|
||||||
|
|
||||||
|
# /usr/bin/tsdns
|
||||||
|
TS_AUTHKEY=
|
||||||
|
HOMELAB_TLD=ice
|
||||||
|
HOMELAB_ZONE=cloud
|
||||||
|
ADVERTISE_ROUTE=10.1.0.0/24
|
||||||
|
TSDNS_SUBNET=10.1.0.0/24
|
||||||
28
BUILD.sh
28
BUILD.sh
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
|
|
||||||
hasunset=0
|
|
||||||
|
|
||||||
if [ "$UID" != "0" ]; then
|
if [ "$UID" != "0" ]; then
|
||||||
echo "This script must be run in root."
|
echo "This script must be run in root."
|
||||||
exit 2
|
exit 2
|
||||||
@@ -16,29 +14,11 @@ fi
|
|||||||
|
|
||||||
PATH="$PWD/scripts:$PATH"
|
PATH="$PWD/scripts:$PATH"
|
||||||
|
|
||||||
if [[ "$CLOUD_CONFIG_REPO" -eq "" ]]; then
|
validate.sh
|
||||||
echo "CLOUD_CONFIG_REPO is not set."
|
|
||||||
CLOUD_CONFIG_REPO="https://git.sfclub.cc/cloud/bearnet"
|
|
||||||
hasunset=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$CLOUD_CONFIG_REVISION" -eq "" ]]; then
|
if [[ "$?" != "0" ]]; then
|
||||||
echo "CLOUD_CONFIG_REVISION is not set."
|
echo "env validation failed"
|
||||||
CLOUD_CONFIG_REVISION="wish"
|
exit 1
|
||||||
hasunset=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$CLOUD_GATEWAY_ADDRESS" -eq "" ]]; then
|
|
||||||
echo "CLOUD_GATEWAY_ADDRESS is not set."
|
|
||||||
CLOUD_GATEWAY_ADDRESS="10.0.0.119"
|
|
||||||
hasunset=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$hasunset" -ne 0 ]]; then
|
|
||||||
echo ""
|
|
||||||
echo "Default values will be used for unset environments:"
|
|
||||||
echo ""
|
|
||||||
set | grep -E "^CLOUD_"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
IMAGE_TAG=$(git rev-parse --short HEAD)
|
IMAGE_TAG=$(git rev-parse --short HEAD)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ alpine-make-vm-image \
|
|||||||
--fs-skel-dir "$OVERLAY_DIR" \
|
--fs-skel-dir "$OVERLAY_DIR" \
|
||||||
--fs-skel-chown root:root \
|
--fs-skel-chown root:root \
|
||||||
--script-chroot \
|
--script-chroot \
|
||||||
--packages "git curl docker cronie openssh" \
|
--packages "curl docker openssh" \
|
||||||
"$IMAGE_FILE" \
|
"$IMAGE_FILE" \
|
||||||
"$CONFIGURE_SH" | tee $TMP
|
"$CONFIGURE_SH" | tee $TMP
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ rc-update add net.lo boot
|
|||||||
rc-update add net.eth0 default
|
rc-update add net.eth0 default
|
||||||
rc-update add acpid default
|
rc-update add acpid default
|
||||||
rc-update add docker default
|
rc-update add docker default
|
||||||
rc-update add cronie default
|
|
||||||
rc-update add sshd
|
rc-update add sshd
|
||||||
rc-update add auth-server
|
rc-update add auth-server
|
||||||
rc-update add bubble
|
rc-update add bubble
|
||||||
@@ -48,12 +47,5 @@ rm -rf \
|
|||||||
/usr/share/doc \
|
/usr/share/doc \
|
||||||
/usr/share/info
|
/usr/share/info
|
||||||
|
|
||||||
step 'Setup git user'
|
|
||||||
git config --global user.email bearnet+keeper@sab.ee
|
|
||||||
git config --global user.name "B.B.K.K.B.K.K"
|
|
||||||
adduser -S keeper
|
|
||||||
mkdir /users
|
|
||||||
chown keeper /users
|
|
||||||
|
|
||||||
echo ''
|
echo ''
|
||||||
echo '=== Configure script completed ==='
|
echo '=== Configure script completed ==='
|
||||||
|
|||||||
14
image/overlay/daemon/config.yaml
Normal file
14
image/overlay/daemon/config.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
address: ":_BUBBLE_SSH_PORT_"
|
||||||
|
network-group: "workspace"
|
||||||
|
server-key-file: "/etc/ssh/ssh_host_rsa_key"
|
||||||
|
|
||||||
|
workspace-parent: "/data/workspace"
|
||||||
|
global-share-dir: "/data/share"
|
||||||
|
auth-server: "http://localhost:8080/"
|
||||||
|
|
||||||
|
manager:
|
||||||
|
address: "0.0.0.0:7684"
|
||||||
|
|
||||||
|
templates:
|
||||||
|
".*":
|
||||||
|
image: ""
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# VARIABLES: _REVISION_ _REPO_
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
mkdir -p /users && chown keeper /users && chmod 644 /users
|
|
||||||
|
|
||||||
init_repo(){
|
|
||||||
su - keeper 'git clone -b _REVISION_ _REPO_ /users'
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ ! -d /users/.git ]]; then
|
|
||||||
init_repo
|
|
||||||
elif [[ -d /users && cd /users && ! su - keeper 'git pull origin _REVISION_' ]]; then
|
|
||||||
init_repo
|
|
||||||
fi
|
|
||||||
1
image/overlay/etc/conf.d/auth-server
Normal file
1
image/overlay/etc/conf.d/auth-server
Normal file
@@ -0,0 +1 @@
|
|||||||
|
GITEA_TOKEN=_BUBBLE_AUTH_GITEA_KEY_
|
||||||
1
image/overlay/etc/hostname
Normal file
1
image/overlay/etc/hostname
Normal file
@@ -0,0 +1 @@
|
|||||||
|
_CLOUD_HOSTNAME_
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/sbin/openrc-run
|
#!/sbin/openrc-run
|
||||||
command="/usr/bin/auth-server"
|
command="/usr/bin/auth-server"
|
||||||
command_background=true
|
command_background=true
|
||||||
command_args="-addr 0.0.0.0:8080 -root /users"
|
command_args="-org _BUBBLE_AUTH_ORG_ -team _BUBBLE_AUTH_TEAM_ -gitea-url _BUBBLE_AUTH_GITEA_URL_"
|
||||||
command_user="keeper"
|
command_user="keeper"
|
||||||
|
|
||||||
pidfile="/run/${RC_SVCNAME}.pid"
|
pidfile="/run/${RC_SVCNAME}.pid"
|
||||||
|
|||||||
9
image/overlay/etc/init.d/tsdns
Executable file
9
image/overlay/etc/init.d/tsdns
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need docker net
|
||||||
|
}
|
||||||
|
|
||||||
|
command="/usr/bin/tsdns"
|
||||||
|
command_background=true
|
||||||
|
pidfile="/run/${RC_SVCNAME}.pid"
|
||||||
7
image/overlay/etc/init.d/update-images
Executable file
7
image/overlay/etc/init.d/update-images
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need docker net
|
||||||
|
}
|
||||||
|
|
||||||
|
command="/usr/bin/update-images"
|
||||||
@@ -3,4 +3,4 @@ iface lo inet loopback
|
|||||||
|
|
||||||
auto eth0
|
auto eth0
|
||||||
iface eth0 inet dhcp
|
iface eth0 inet dhcp
|
||||||
post-up ip route del default || true; ip route add default via GATEWAY_ADDRESS
|
post-up ip route del default || true; ip route add default via _CLOUD_GATEWAY_ADDRESS_
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Port _HOST_SSH_PORT_
|
||||||
@@ -1 +1 @@
|
|||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN6GbswtvLbhmju/vBunpfPaqpcIuESJSLoR+Sz0ujTs cardno:F1D0_013135A1
|
_HOST_SSH_PUBLIC_KEY_
|
||||||
23
image/overlay/usr/bin/tsdns
Executable file
23
image/overlay/usr/bin/tsdns
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! docker network insepct "workspace" ]; then
|
||||||
|
docker network create \
|
||||||
|
--attachable \
|
||||||
|
--ipv4 \
|
||||||
|
--ip-range "_ADVERTISE_ROUTE_" \
|
||||||
|
--subnet "_TSDNS_SUBNET_" \
|
||||||
|
workspace
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker run -e "TS_AUTHKEY=_TS_AUTHKEY_" \
|
||||||
|
-e "HOMELAB_TLD=_HOMELAB_TLD_" \
|
||||||
|
-e "HOMELAB_ZONE=_HOMELAB_ZONE_" \
|
||||||
|
-e "TS_STATE_DIR=/tstate" \
|
||||||
|
-e "ADVERTISE_ROUTE=_ADVERTISE_ROUTE_" \
|
||||||
|
-e "TS_DEBUG_OMIT_LOCAL_ADDRS=true" \
|
||||||
|
--network "workspace" \
|
||||||
|
-p 41641:41641/udp
|
||||||
|
-v "/data/tsdns:/tstate"
|
||||||
|
--restart unless-stopped
|
||||||
|
ghcr.io/saltedfishclub/tsdns:latest
|
||||||
10
image/overlay/usr/bin/update-images
Executable file
10
image/overlay/usr/bin/update-images
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cleanup_() {
|
||||||
|
touch /.image-update-flag
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -f /.image-update-flag ]; then
|
||||||
|
docker pull
|
||||||
|
fi
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# min hour day month weekday command
|
|
||||||
*/15 * * * * /usr/bin/sh /daemon/update-keys.sh
|
|
||||||
32
image/substitution.sh
Executable file
32
image/substitution.sh
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
current_file=""
|
||||||
|
root="/kitchen/overlay"
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case "$line" in
|
||||||
|
\#\ /*)
|
||||||
|
current_file="${line#\# }"
|
||||||
|
;;
|
||||||
|
\#\:*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
*=*)
|
||||||
|
if [ -z "$current_file" ]; then
|
||||||
|
echo "warning: value without file: $line" >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
key="${line%%=*}"
|
||||||
|
value="${line#*=}"
|
||||||
|
key_esc=$(printf '%s' "$key" | sed 's/[]\/$*.^[]/\\&/g')
|
||||||
|
value_esc=$(printf '%s' "$value" | sed 's/[\/&]/\\&/g')
|
||||||
|
sed -i "s/_${key_esc}_/${value_esc}/g" "$root$current_file"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "unknown line: $line" >&2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
58
scripts/validate.sh
Executable file
58
scripts/validate.sh
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
root="$PWD/image/overlay"
|
||||||
|
env_file="${1:-.env}"
|
||||||
|
|
||||||
|
if [ ! -f "$env_file" ]; then
|
||||||
|
echo "cannot find $env_file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
current_file=""
|
||||||
|
|
||||||
|
fail=0
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case "$line" in
|
||||||
|
\#\ /*)
|
||||||
|
current_file="${line#\# }"
|
||||||
|
|
||||||
|
target="$root$current_file"
|
||||||
|
|
||||||
|
if [ ! -f "$target" ]; then
|
||||||
|
echo "missing file: $target" >&2
|
||||||
|
fail=1
|
||||||
|
current_file=""
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
\#\:*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
*=*)
|
||||||
|
if [ -z "$current_file" ]; then
|
||||||
|
echo "warning: value without file: $line" >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
key="${line%%=*}"
|
||||||
|
|
||||||
|
target="$root$current_file"
|
||||||
|
|
||||||
|
if ! grep -q "_${key}_" "$target"; then
|
||||||
|
echo "missing variable: _${key}_ in $target" >&2
|
||||||
|
fail=1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
"")
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "unknown line: $line" >&2
|
||||||
|
fail=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done < "$env_file"
|
||||||
|
|
||||||
|
exit "$fail"
|
||||||
@@ -3,22 +3,18 @@ FROM golang:1.25-alpine AS bubble-builder
|
|||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
RUN apk add git && git clone https://github.com/iceBear67/bubble . && go mod download && mkdir /build
|
RUN apk add git && git clone https://github.com/iceBear67/bubble . && go mod download && mkdir /build
|
||||||
RUN CGO_ENABLED=0 go build -o /build/daemon . && \
|
RUN CGO_ENABLED=0 go build -o /build/daemon . && \
|
||||||
CGO_ENABLED=0 go build -o /build/auth_server ./util/
|
CGO_ENABLED=0 go build -o /build/auth_server ./gitea-auth/
|
||||||
|
|
||||||
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
|
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
|
||||||
go build -o /build/daemon . && \
|
go build -o /build/daemon . && \
|
||||||
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
|
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
|
||||||
go build -o /build/auth_server ./util/
|
go build -o /build/auth_server ./gitea-auth/
|
||||||
|
|
||||||
FROM alpine:3.24 AS rootfs-builder
|
FROM alpine:3.24 AS rootfs-builder
|
||||||
ENV CLOUD_CONFIG_REPO="https://git.sfclub.cc/cloud/bearnet"
|
|
||||||
ENV CLOUD_CONFIG_REVISION="wish"
|
|
||||||
ENV CLOUD_GATEWAY_ADDRESS="10.0.0.119"
|
|
||||||
RUN apk update && apk add alpine-make-vm-image
|
RUN apk update && apk add alpine-make-vm-image
|
||||||
COPY ./image /kitchen
|
COPY ./image /kitchen
|
||||||
RUN sed -i "s#_REPO_#$CLOUD_CONFIG_REPO#g" /kitchen/overlay/daemon/update-keys.sh && \
|
COPY .env /kitchen/.env
|
||||||
sed -i "s#_REVISION_#$CLOUD_CONFIG_REVISION#g" /kitchen/overlay/daemon/update-keys.sh && \
|
RUN sh /kitchen/substitution.sh < /kitchen/.env
|
||||||
sed -i "s#GATEWAY_ADDRESS#$CLOUD_GATEWAY_ADDRESS#g" /kitchen/overlay/etc/network/interfaces
|
|
||||||
COPY --from=bubble-builder --chmod=755 /build/daemon /kitchen/overlay/usr/bin/bubble
|
COPY --from=bubble-builder --chmod=755 /build/daemon /kitchen/overlay/usr/bin/bubble
|
||||||
COPY --from=bubble-builder --chmod=755 /build/auth_server /kitchen/overlay/usr/bin/auth-server
|
COPY --from=bubble-builder --chmod=755 /build/auth_server /kitchen/overlay/usr/bin/auth-server
|
||||||
COPY ./secret/* /kitchen/overlay/etc/ssh/
|
COPY ./secret/* /kitchen/overlay/etc/ssh/
|
||||||
|
|||||||
Reference in New Issue
Block a user