initial commit
This commit is contained in:
commit
f9b7913992
4 changed files with 143 additions and 0 deletions
8
Dockerfile
Normal file
8
Dockerfile
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
FROM ubuntu:16.10
|
||||
MAINTAINER Dalton Hubble <dghubble@gmail.com>
|
||||
ARG CL_CHANNEL
|
||||
ARG CL_VERSION
|
||||
COPY scripts /scripts
|
||||
RUN /scripts/build
|
||||
EXPOSE 2222
|
||||
ENTRYPOINT ["/scripts/start"]
|
||||
63
README.md
Normal file
63
README.md
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
# coreos-kvm [](https://quay.io/repository/dghubble/coreos-kvm)
|
||||
|
||||
`coreos-kvm` is a container images which runs a QEMU/KVM CoreOS VM.
|
||||
|
||||
## Usage
|
||||
|
||||
Run the container image as a privileged container. Provide Ignition or Cloud-Config user-data to provision the guest instance.
|
||||
|
||||
# config
|
||||
sudo docker run --name kvm --privileged -e CONFIG_FILE=/userdata/config.yaml -v $PWD/examples/config.yaml:/userdata/config.yaml quay.io/dghubble/coreos-kvm
|
||||
|
||||
# ignition
|
||||
sudo docker run --name kvm --privileged -e IGNITION_CONFIG_FILE=/userdata/ignition.json -v $PWD/examples/ignition.json:/userdata/ignition.json quay.io/dghubble/coreos-kvm
|
||||
|
||||
# cloud-config
|
||||
sudo docker run --name kvm --privileged -e CLOUD_CONFIG_FILE=/userdata/cloud.yaml -v $PWD/examples/cloud.yaml:/userdata/cloud.yaml quay.io/dghubble/coreos-kvm
|
||||
|
||||
SSH into the container IP on port 2222.
|
||||
|
||||
sudo docker network inspect bridge
|
||||
ssh -p 2222 core@172.17.0.2
|
||||
|
||||
The container runs a local port (2222) forward to the CoreOS VM (22).
|
||||
|
||||
### Environment Variables
|
||||
|
||||
| env variable | example |
|
||||
|----------------------|-------------------------|
|
||||
| CONFIG_FILE | /userdata/config.yaml |
|
||||
| IGNITION_CONFIG_FILE | /userdata/ignition.json |
|
||||
| CLOUD_CONFIG_FILE | /userdata/cloud.yaml |
|
||||
| VM_NAME | coreos-kvm |
|
||||
| VM_MEMORY | 4G |
|
||||
| VM_DISK_SIZE | 12G |
|
||||
| HOSTFWD | hostfwd=tcp::2222-:22 |
|
||||
|
||||
## Development
|
||||
|
||||
To develop the container image, build it locally.
|
||||
|
||||
### Container Image
|
||||
|
||||
Build the container image.
|
||||
|
||||
make docker-image
|
||||
|
||||
### Run
|
||||
|
||||
Run the container image as a privileged container. Provide Ignition or Cloud-Config user-data to provision the guest instance.
|
||||
|
||||
# config
|
||||
sudo docker run --name kvm --privileged -e CONFIG_FILE=/userdata/config.yaml -v $PWD/examples/config.yaml:/userdata/config.yaml dghubble/coreos-kvm
|
||||
|
||||
# ignition
|
||||
sudo docker run --name kvm --privileged -e IGNITION_CONFIG_FILE=/userdata/ignition.json -v $PWD/examples/ignition.json:/userdata/ignition.json dghubble/coreos-kvm
|
||||
|
||||
# cloud-config
|
||||
sudo docker run --name kvm --privileged -e CLOUD_CONFIG_FILE=/userdata/cloud.yaml -v $PWD/examples/cloud.yaml:/userdata/cloud.yaml dghubble/coreos-kvm
|
||||
|
||||
Remove the container from another terminal.
|
||||
|
||||
sudo docker stop kvm
|
||||
sudo docker rm kvm
|
||||
23
build
Executable file
23
build
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env bash
|
||||
set -exu
|
||||
|
||||
# dependencies
|
||||
apt-get update
|
||||
apt-get install -y \
|
||||
curl \
|
||||
bzip2 \
|
||||
openssh-client \
|
||||
qemu-kvm
|
||||
|
||||
URL="http://${CL_CHANNEL}.release.core-os.net/amd64-usr/${CL_VERSION}/coreos_production_qemu_image.img.bz2"
|
||||
echo "Downloading Container Linux $CL_CHANNEL $CL_VERSION $URL"
|
||||
curl -O $URL
|
||||
bzip2 -d coreos_production_qemu_image.img.bz2
|
||||
|
||||
curl -L https://github.com/coreos/container-linux-config-transpiler/releases/download/v0.3.0/ct-v0.3.0-x86_64-unknown-linux-gnu -o ct
|
||||
chmod +x ct
|
||||
|
||||
apt-get remove -y curl bzip2
|
||||
apt-get autoremove -y
|
||||
apt-get clean
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
49
start
Executable file
49
start
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
set -eox pipefail
|
||||
|
||||
VM_NAME="${VM_NAME:-coreos-kvm}"
|
||||
VM_MEMORY="${VM_MEMORY:-4G}"
|
||||
VM_DISK_SIZE="${VM_DISK_SIZE:-12G}"
|
||||
# hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport
|
||||
HOSTFWD="${HOSTFWD:-hostfwd=tcp::2222-:22}"
|
||||
|
||||
if [ -n "${CLOUD_CONFIG_FILE}" ]; then
|
||||
echo "Setting cloud config file: ${CLOUD_CONFIG_FILE}"
|
||||
mkdir -p "${PWD}/openstack/latest"
|
||||
cp "${CLOUD_CONFIG_FILE}" "${PWD}/openstack/latest/user_data"
|
||||
cat "${PWD}/openstack/latest/user_data"
|
||||
set -- \
|
||||
-fsdev local,id=conf,security_model=none,readonly,path="${PWD}" \
|
||||
-device virtio-9p-pci,fsdev=conf,mount_tag=config-2 "$@"
|
||||
fi
|
||||
|
||||
if [ -n "${IGNITION_CONFIG_FILE}" ]; then
|
||||
echo "Setting ignition config file: ${IGNITION_CONFIG_FILE}"
|
||||
cat "${IGNITION_CONFIG_FILE}"
|
||||
set -- -fw_cfg name=opt/com.coreos/config,file="${IGNITION_CONFIG_FILE}" "$@"
|
||||
fi
|
||||
|
||||
if [ -n "$CONFIG_FILE" ]; then
|
||||
echo "Transpiling config file: ${CONFIG_FILE}"
|
||||
cat "${CONFIG_FILE}"
|
||||
./ct -in-file $CONFIG_FILE -out-file ${PWD}/ignition.json
|
||||
echo "Setting ignition config file ${PWD}/ignition.json"
|
||||
cat "${PWD}/ignition.json"
|
||||
set -- -fw_cfg name=opt/com.coreos/config,file="${PWD}/ignition.json" "$@"
|
||||
fi
|
||||
|
||||
qemu-img resize ./coreos_production_qemu_image.img "${VM_DISK_SIZE}"
|
||||
|
||||
# https://alpha.release.core-os.net/amd64-usr/current/coreos_production_qemu.sh
|
||||
qemu-system-x86_64 \
|
||||
-name "${VM_NAME}" \
|
||||
-enable-kvm \
|
||||
-cpu host \
|
||||
-m "${VM_MEMORY}" \
|
||||
-net nic,model=virtio \
|
||||
-net user,"${HOSTFWD}",hostname="${VM_NAME}" \
|
||||
-drive if=virtio,file=./coreos_production_qemu_image.img \
|
||||
-nographic \
|
||||
-machine accel=kvm \
|
||||
-smp 2 \
|
||||
"$@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue