Page MenuHomeSealhub

Codeberg Cloud Init Script

Authored By
cichy1173
May 3 2026, 16:34
Size
3 KB
Referenced Files
None
Subscribers
None

Codeberg Cloud Init Script

#cloud-config
package_update: true
packages:
- qemu-guest-agent
- sudo
- lsb-release
- curl
- gnupg
- apt-transport-https
- make
- mc
- net-tools
- lsof
- htop
- cron
- jq
- zip
- telnet
- ca-certificates
- python3-yaml
write_files:
- path: /usr/local/bin/init.sh
content: |
#!/usr/bin/env bash
set -xe
export RUNNER_VERSION=$(curl -X 'GET' https://code.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq .name -r | cut -c 2-)
wget -O /home/${USERNAME}/forgejo-runner https://code.forgejo.org/forgejo/runner/releases/download/v$RUNNER_VERSION/forgejo-runner-$RUNNER_VERSION-linux-amd64
chmod +x /home/${USERNAME}/forgejo-runner
cd /home/${USERNAME} && ./forgejo-runner register --no-interactive --token ${CODEBERG_TOKEN} --name ${RUNNER_NAME} --instance https://codeberg.org
./forgejo-runner generate-config > /home/${USERNAME}/config.yml
# Allow Docker socket mount in CI job containers for docker buildx
python3 -c "
import yaml, sys
with open('/home/${USERNAME}/config.yml') as f:
cfg = yaml.safe_load(f)
cfg.setdefault('container', {})
cfg['container']['valid_volumes'] = ['/var/run/docker.sock']
cfg['container']['docker_host'] = 'unix:///var/run/docker.sock'
with open('/home/${USERNAME}/config.yml', 'w') as f:
yaml.dump(cfg, f, default_flow_style=False)
"
chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt -y update
sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
usermod -aG docker ${USERNAME}
curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up --auth-key=${TAILNET_KEY}
# Create the systemd service file
cat > /etc/systemd/system/forgejorunnerservice.service << 'EOF'
[Unit]
Description=Forgejo CI Runner Listening Service
After=network.target docker.service
Requires=docker.service
[Service]
Type=simple
User=${USERNAME}
WorkingDirectory=/home/${USERNAME}
ExecStart=/home/${USERNAME}/forgejo-runner --config /home/${USERNAME}/config.yml daemon
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Enable and start the service
systemctl daemon-reload
systemctl enable forgejorunnerservice.service
systemctl start forgejorunnerservice.service
permissions: '0755'
- path: /etc/systemd/system/init-script.service
content: |
[Unit]
Description=One-shot service for initializing Init Script
After=network.target
[Service]
User=root
Type=oneshot
ExecStart=/usr/local/bin/init.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
permissions: '0644'
runcmd:
- systemctl enable --now qemu-guest-agent
- systemctl enable --now init-script.service

File Metadata

Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1138447
Default Alt Text
Codeberg Cloud Init Script (3 KB)

Event Timeline