diff --git a/.drone.yml b/.drone.yml index 1f6a0ab..0dee1cc 100644 --- a/.drone.yml +++ b/.drone.yml @@ -28,10 +28,12 @@ services: image: debian:buster commands: - .drone/auth1-setup.sh + - sleep infinity - name: coffee image: debian:buster commands: - .drone/coffee-setup.sh + - sleep infinity trigger: branch: diff --git a/.drone/auth1-setup.sh b/.drone/auth1-setup.sh index 57baa61..a96d017 100755 --- a/.drone/auth1-setup.sh +++ b/.drone/auth1-setup.sh @@ -46,7 +46,7 @@ cp .drone/nsswitch.conf /etc/nsswitch.conf service nslcd start ldapadd -c -f .drone/data.ldif -Y EXTERNAL -H ldapi:/// if [ -z "$CI" ]; then - ldapadd -c -f .drone/uwldap_data.ldif -Y EXTERNAL -H ldapi:/// + ldapadd -c -f .drone/uwldap_data.ldif -Y EXTERNAL -H ldapi:/// ||: fi # KERBEROS @@ -95,12 +95,10 @@ done apt install -y netcat-openbsd # sync with phosphoric-acid -nc -l 0.0.0.0 9000 +nc -l 0.0.0.0 9000 & if [ -z "$CI" ]; then # sync with coffee - nc -l 0.0.0.0 9001 + nc -l 0.0.0.0 9001 & # sync with mail - nc -l 0.0.0.0 9002 + nc -l 0.0.0.0 9002 & fi - -sleep infinity diff --git a/.drone/coffee-setup.sh b/.drone/coffee-setup.sh index 454fc2c..02ecc55 100755 --- a/.drone/coffee-setup.sh +++ b/.drone/coffee-setup.sh @@ -18,7 +18,7 @@ service mysql stop sed -E -i 's/^(bind-address[[:space:]]+= 127.0.0.1)$/#\1/' /etc/mysql/mariadb.conf.d/50-server.cnf service mysql start cat </dev/null' HUP +trap 'running=0; kill -TERM $! 2>/dev/null' TERM INT +trap 'running=0; kill -KILL $! 2>/dev/null' EXIT + +while [ "$running" = 1 ]; do + "$@" & + wait + sleep "$TIMEOUT" +done diff --git a/README.md b/README.md index ab010a5..771f798 100644 --- a/README.md +++ b/README.md @@ -10,26 +10,37 @@ overview of its architecture. If you are not modifying code related to email or Mailman, then you may use Docker containers instead, which are much easier to work with than the VM. ``` -docker.sh up +docker-compose up -d # or without -d to run in the foreground ``` This will create some containers with the bare minimum necessary for ceod to -run. Run `docker logs -f phosphoric-acid` and wait until you see the line -`sleep infinity`. Then attach to each of phosphoric-acid, mail and coffee, -and start ceod (see 'Running the application', below). Once inside a container, -make sure to `cd` into the current working directory on the host. - -To use ceo, run the following inside the phosphoric-acid container: +run, and start ceod on each of phosphoric-acid, mail, and coffee container. +You can check the containers status using: +```sh +docker-compose logs -f ``` -login - - -. venv/bin/activate -python -m ceo + +To use ceo, run the following: +```sh +docker-compose exec phosphoric-acid bash +su ctdalek +python -m ceo # the password for kerobos is krb5 ``` This should bring up the TUI. +Normally, ceod should autoamtically restart when the source files are changed. +To manually restart the service, run: +```sh +docker-compose kill -s SIGHUP phosphoric-acid +``` + +To stop the containers, run: +```sh +docker-compose down +``` +Alternatively, if you started docker-compose in the foreground, just press Ctrl-C. + ### VM -If you are making changes related to email or Mailman, you will need the full +If you need the full environment running in VM, follow the guide on [syscom dev environment](https://git.uwaterloo.ca/csc/syscom-dev-environment). This will setup all of the services needed for ceo to work. You should clone this repo in the phosphoric-acid container under ctdalek's home directory; you diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7c4ea6f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,44 @@ +version: "3.6" + +x-common: &common + image: python:3.7-buster + volumes: + - .:$PWD + environment: + FLASK_APP: ceod.api + FLASK_ENV: development + working_dir: $PWD + entrypoint: + - ./docker-entrypoint.sh + +services: + auth1: + <<: *common + image: debian:buster + hostname: auth0 + command: auth1 + + coffee: + <<: *common + command: coffee + hostname: coffee + depends_on: + - auth1 + + mail: + <<: *common + command: mail + hostname: mail + depends_on: + - auth1 + + phosphoric-acid: + <<: *common + command: phosphoric-acid + hostname: phosphoric-acid + depends_on: + - auth1 + - coffee + - mail + +# vim: expandtab sw=2 ts=2 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..8d430b2 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh -e +host="$1" +[ -x ".drone/$host-setup.sh" ] && "./.drone/$host-setup.sh" + +if [ "$host" = auth1 ]; then + exec sleep infinity +else + python3 -m pip install -r requirements.txt -r dev-requirements.txt + exec ./.drone/supervise.sh flask run -h 0.0.0.0 -p 9987 +fi diff --git a/docker.sh b/docker.sh deleted file mode 100755 index 9c6fdf9..0000000 --- a/docker.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -set -x - -case $1 in - up) - if ! [ -d venv ]; then - docker run --rm -v "$PWD:$PWD" -w "$PWD" python:3.7-buster \ - sh -c "python -m venv venv && . venv/bin/activate && pip install -r dev-requirements.txt && pip install -r requirements.txt" - fi - docker network create ceod - for host in auth1 coffee mail phosphoric-acid; do - if [ $host = auth1 ]; then - image=debian:buster - else - image=python:3.7-buster - fi - docker run \ - --detach \ - --name $host \ - --hostname $host \ - --network ceod \ - --volume "$PWD:$PWD" \ - --workdir "$PWD" \ - --env FLASK_APP=ceod.api \ - --env FLASK_ENV=development \ - $image .drone/$host-setup.sh - done - ;; - down) - for host in auth1 coffee mail phosphoric-acid; do - docker kill $host - docker rm $host - done - docker network rm ceod - ;; - *) - echo 'Usage: docker.sh ' >&2 - exit 1 - ;; -esac