1
0
mirror of https://github.com/Adam-Ant/DroneAgentBuilder synced 2024-11-05 08:46:23 +00:00

Initial Commit

This commit is contained in:
Adam Dodman 2018-02-06 01:36:23 +00:00
commit b3835c64ea
8 changed files with 203 additions and 0 deletions

66
AlpineBaseNotes.md Normal file
View File

@ -0,0 +1,66 @@
# To create an alpine base image:
Spin up a new VM:
- 512MB RAW Disk image (hence called alpine.img)
- Virtio Network bridge
- ISO of Alpine Virtual ed. attached
Inside the VM:
- Add the following to /etc/network/interfaces:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
hostname alpine
- `/etc/init.d/networking restart`
- Run `setup-alpine`:
- gb
- gb
- alpine
- eth0
- dhcp
- no
- [Enter twice]
- UTC
- none
- 1
- openssh
- busybox
- sda
- sys
- y
- `passwd -d root`
- `poweroff`
Make sure the VM is stopped.
Run `virt-sysprep -a alpine.img`
Run `xz -k -verbose -T4 --best --block-size=16777216 alpine.img`
Create the index file as below. <> Shows commands to generate the required data. Replace version as needed.
```
[alpine-37]
name=Alpine 3.7
osinfo=alpine
arch=x86_64
file=alpine.img.xz
checksum=<sha512sum alpine.img.xz>
format=raw
size=<du -s alpine.img>
compressed_size=<du -s alpine.img.xz>
expand=/dev/sda3
```
Sign the index file:
`gpg --clearsign --armor index`
Upload the generated `index.asc` and `alpine.img.xz` files to a web server.

8
Readme.md Normal file
View File

@ -0,0 +1,8 @@
# Alpine Drone Agent builder
Create a VM for setting a drone build agent.
Put alpinelinux.\* into /etc/xdg/virt-builder/repos.d/
Put your credentials into dronecfg, then
Run with `virt-builder --size 10G --format qcow2 --commands-from-file builder-commands`

5
alpinelinux.conf Normal file
View File

@ -0,0 +1,5 @@
# Put this file in /etc/xdg/virt-builder/repos.d to use the Alpine base images
[Alpine]
uri=https://adam-ant.co.uk/builder/index.asc
gpgkey=file:///etc/xdg/virt-builder/repos.d/alpinelinux.gp

53
alpinelinux.gpg Normal file
View File

@ -0,0 +1,53 @@
# Put this file in /etc/xdg/virt-builder/repos.d to use the Alpine base images
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
3ya6/GAAIAeCGnw=
=jF2v
-----END PGP PUBLIC KEY BLOCK-----

37
builder_commands Normal file
View File

@ -0,0 +1,37 @@
# Enable the community repo
edit /etc/apk/repositories:'s/^#\(.*community\)/\1/g'
# Setup the new MOTD
run motd.sh
# Disallow root login
root-password disabled
edit /etc/ssh/sshd_config:'/^PermitRootLogin yes/d'
# Set up the docker user
update
install docker
install sudo
install shadow
run-command adduser -D -G docker docker
run-command { echo changeme; echo changeme; } | passwd docker
run-command echo changeme | chage -d 0 docker
run-command echo 'docker ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/docker-nopasswd
chmod 0640:/etc/sudoers.d/*
# Install docker
install docker
run-command rc-update add docker boot
run-command service docker start
# Install docker-compose
install python
install py-pip
run-command pip install docker-compose
uninstall py-pip
# Set up pruning docker every 15 minutes. Useful for build agents
run-command rc-update add crond
run-command echo '*/15 * * * * docker system prune -a -f --filter until=10m' | crontab -u docker -
# Install the drone-agent starters

2
drone-agent.start Normal file
View File

@ -0,0 +1,2 @@
#! /bin/sh
docker-compose -f /etc/drone-compose.yml up --force-recreate -d

14
drone-compose.yml Normal file
View File

@ -0,0 +1,14 @@
version: '3.1'
# Run this on a dedicated box only!
# It WILL make a mess of the docker daemon
services:
agent:
image: drone/agent:0.8.4
container_name: drone-agent
command: agent
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
env_file: /etc/dronecfg

18
motd.sh Normal file
View File

@ -0,0 +1,18 @@
#!/bin/sh
source /etc/os-release
cat << EOF > /etc/motd
$PRETTY_NAME ($VERSION_ID) Docker Host
Built as a CI runner for Docker-based CI platforms
such as Drone-CI https://github.com/drone/drone
See the Alpine Wiki for how-to guides and
general information about administrating
Alpine systems and development.
See <http://wiki.alpinelinux.org>
EOF