diff mbox

[1/4] docker: Move 'docker' directory to 'tools'

Message ID BLU436-SMTP693E30DBE3D8531E2C9ADAA3E90@phx.gbl
State Superseded
Headers show

Commit Message

Stephen Finucane Aug. 21, 2016, 3:15 p.m. UTC
...like the Vagrant scripts (which have been renamed also).

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
---
 .dockerignore                 |  2 +-
 Vagrantfile                   |  2 +-
 docker-compose.yml            |  6 +--
 docker/Dockerfile             | 46 -----------------------
 docker/bashrc                 |  5 ---
 docker/db/.dockerignore       |  1 -
 docker/db/.gitignore          |  1 -
 docker/db/Dockerfile          | 10 -----
 docker/entrypoint.sh          | 86 -------------------------------------------
 tools/docker/Dockerfile       | 46 +++++++++++++++++++++++
 tools/docker/bashrc           |  5 +++
 tools/docker/db/.dockerignore |  1 +
 tools/docker/db/.gitignore    |  1 +
 tools/docker/db/Dockerfile    | 10 +++++
 tools/docker/entrypoint.sh    | 86 +++++++++++++++++++++++++++++++++++++++++++
 tools/install/install.sh      | 75 -------------------------------------
 tools/vagrant/install.sh      | 75 +++++++++++++++++++++++++++++++++++++
 17 files changed, 229 insertions(+), 229 deletions(-)
 delete mode 100644 docker/Dockerfile
 delete mode 100644 docker/bashrc
 delete mode 100644 docker/db/.dockerignore
 delete mode 100644 docker/db/.gitignore
 delete mode 100644 docker/db/Dockerfile
 delete mode 100755 docker/entrypoint.sh
 create mode 100644 tools/docker/Dockerfile
 create mode 100644 tools/docker/bashrc
 create mode 100644 tools/docker/db/.dockerignore
 create mode 100644 tools/docker/db/.gitignore
 create mode 100644 tools/docker/db/Dockerfile
 create mode 100755 tools/docker/entrypoint.sh
 delete mode 100644 tools/install/install.sh
 create mode 100644 tools/vagrant/install.sh

Comments

Daniel Axtens Aug. 28, 2016, 4 a.m. UTC | #1
Stephen Finucane <stephenfinucane@hotmail.com> writes:

> ...like the Vagrant scripts (which have been renamed also).
>
> Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>

Looks good to me. I haven't checked it because it doesn't apply cleanly
for me, but I like the idea. I don't know if I'm quite in the position
to formally give it an Acked-by yet, but I'm happy to give it a +1 :)

Regards,
Daniel

> ---
>  .dockerignore                 |  2 +-
>  Vagrantfile                   |  2 +-
>  docker-compose.yml            |  6 +--
>  docker/Dockerfile             | 46 -----------------------
>  docker/bashrc                 |  5 ---
>  docker/db/.dockerignore       |  1 -
>  docker/db/.gitignore          |  1 -
>  docker/db/Dockerfile          | 10 -----
>  docker/entrypoint.sh          | 86 -------------------------------------------
>  tools/docker/Dockerfile       | 46 +++++++++++++++++++++++
>  tools/docker/bashrc           |  5 +++
>  tools/docker/db/.dockerignore |  1 +
>  tools/docker/db/.gitignore    |  1 +
>  tools/docker/db/Dockerfile    | 10 +++++
>  tools/docker/entrypoint.sh    | 86 +++++++++++++++++++++++++++++++++++++++++++
>  tools/install/install.sh      | 75 -------------------------------------
>  tools/vagrant/install.sh      | 75 +++++++++++++++++++++++++++++++++++++
>  17 files changed, 229 insertions(+), 229 deletions(-)
>  delete mode 100644 docker/Dockerfile
>  delete mode 100644 docker/bashrc
>  delete mode 100644 docker/db/.dockerignore
>  delete mode 100644 docker/db/.gitignore
>  delete mode 100644 docker/db/Dockerfile
>  delete mode 100755 docker/entrypoint.sh
>  create mode 100644 tools/docker/Dockerfile
>  create mode 100644 tools/docker/bashrc
>  create mode 100644 tools/docker/db/.dockerignore
>  create mode 100644 tools/docker/db/.gitignore
>  create mode 100644 tools/docker/db/Dockerfile
>  create mode 100755 tools/docker/entrypoint.sh
>  delete mode 100644 tools/install/install.sh
>  create mode 100644 tools/vagrant/install.sh
>
> diff --git a/.dockerignore b/.dockerignore
> index 24473bb..83cfa98 100644
> --- a/.dockerignore
> +++ b/.dockerignore
> @@ -1,3 +1,3 @@
>  .vagrant
> -docker/db
> +tools/docker/db
>  
> diff --git a/Vagrantfile b/Vagrantfile
> index b316d41..2ddbca0 100644
> --- a/Vagrantfile
> +++ b/Vagrantfile
> @@ -22,5 +22,5 @@ Vagrant.configure(2) do |config|
>    #   vb.memory = "1024"
>    # end
>  
> -  config.vm.provision :shell, :path => "tools/install/install.sh"
> +  config.vm.provision :shell, :path => "tools/vagrant/install.sh"
>  end
> diff --git a/docker-compose.yml b/docker-compose.yml
> index 881a72a..7db3486 100644
> --- a/docker-compose.yml
> +++ b/docker-compose.yml
> @@ -5,12 +5,12 @@
>  # or upgrade to v2 and use the build-arg to override it.
>  
>  db:
> -  build: docker/db
> +  build: tools/docker/db
>    volumes:
> -   - ./docker/db/data:/var/lib/mysql
> +   - ./tools/docker/db/data:/var/lib/mysql
>  web:
>    build: .
> -  dockerfile: ./docker/Dockerfile
> +  dockerfile: ./tools/docker/Dockerfile
>    command: python3 manage.py runserver 0.0.0.0:8000
>    volumes:
>      - .:/home/patchwork/patchwork/
> diff --git a/docker/Dockerfile b/docker/Dockerfile
> deleted file mode 100644
> index ea2a8fc..0000000
> --- a/docker/Dockerfile
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -FROM ubuntu
> -
> -ARG UID=1000
> -
> -ENV PROJECT_HOME /home/patchwork/patchwork
> -
> -ENV db_user root
> -ENV db_pass password
> -
> -ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
> -ENV DEBIAN_FRONTEND noninteractive
> -ENV PYTHONUNBUFFERED 1
> -
> -# System
> -RUN apt-get update -qq && \
> -    apt-get install -y --no-install-recommends \
> -    python-dev python-pip python-setuptools python-wheel \
> -    python3-dev python3-pip python3-setuptools python3-wheel \
> -    libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
> -    chromium-browser build-essential && \
> -    ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
> -
> -# User
> -RUN useradd --uid=$UID --create-home patchwork
> -
> -# Python requirements.
> -# If you update requirements, you should rebuild the container.
> -# entrypoint.sh will prompt you to do this.
> -COPY requirements-*.txt /tmp/
> -RUN pip3  install virtualenv tox && \
> -    pip3  install -r /tmp/requirements-dev.txt
> -# we deliberately leave the requirements files in tmp so we can
> -# ping the user in entrypoint.sh if the change them!
> -
> -COPY docker/bashrc /tmp/bashrc
> -
> -# we put the code in ~/patchwork rather than ~ so that we
> -# can put in these bashrc snippets without dirtying the
> -# working directory
> -RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
> -
> -COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
> -
> -ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
> -USER patchwork
> -WORKDIR /home/patchwork/patchwork
> diff --git a/docker/bashrc b/docker/bashrc
> deleted file mode 100644
> index eb2ed7d..0000000
> --- a/docker/bashrc
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -# This snippet is appended to ~/.bashrc when the container is created
> -
> -alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
> -alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
> -
> diff --git a/docker/db/.dockerignore b/docker/db/.dockerignore
> deleted file mode 100644
> index 1269488..0000000
> --- a/docker/db/.dockerignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -data
> diff --git a/docker/db/.gitignore b/docker/db/.gitignore
> deleted file mode 100644
> index 60baa9c..0000000
> --- a/docker/db/.gitignore
> +++ /dev/null
> @@ -1 +0,0 @@
> -data/*
> diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile
> deleted file mode 100644
> index 5df9b5a..0000000
> --- a/docker/db/Dockerfile
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -FROM mysql:5.7
> -
> -ENV MYSQL_ROOT_PASSWORD password
> -ENV MYSQL_USER patchwork
> -ENV MYSQL_PASSWORD password
> -
> -# We don't want to use the MYSQL_DATABASE env here because
> -# we want to be able to create the database with UTF-8 explictly.
> -# We also can't load in the data because it's in XML, yay.
> -
> diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
> deleted file mode 100755
> index 8efaada..0000000
> --- a/docker/entrypoint.sh
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -#!/bin/bash
> -set -euo pipefail
> -
> -# functions
> -
> -test_db_connection() {
> -    mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
> -}
> -
> -reset_data() {
> -    mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
> -DROP DATABASE IF EXISTS patchwork;
> -CREATE DATABASE patchwork CHARACTER SET utf8;
> -GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
> -GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
> -FLUSH PRIVILEGES;
> -EOF
> -
> -    # load initial data
> -    python3 $PROJECT_HOME/manage.py migrate #> /dev/null
> -    python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
> -    python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
> -    python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
> -}
> -
> -# the script begins!
> -
> -# check if patchwork is mounted. Checking if we exist is a
> -# very good start!
> -if [ ! -f ~patchwork/patchwork/docker/entrypoint.sh ]; then
> -    echo "The patchwork directory doesn't seem to be mounted!"
> -    echo "Are you using docker-compose?"
> -    echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
> -    exit 1
> -fi
> -
> -# check if we need to rebuild because requirements changed
> -for x in /tmp/requirements-*.txt; do
> -    if ! cmp $x ~/patchwork/$(basename $x); then
> -        echo "A requirements file has changed."
> -        echo "Please rebuild the patchwork image:"
> -        echo "    docker-compose build web"
> -        exit 1
> -    fi
> -done
> -
> -# check if mysql is connected
> -if ! test_db_connection; then
> -    echo "MySQL seems not to be connected, or the patchwork user is broken"
> -    echo "MySQL may still be starting. Waiting 5 seconds."
> -    sleep 5
> -    if ! test_db_connection; then
> -        echo "Still cannot connect to MySQL."
> -        echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
> -        sleep 15
> -        if ! test_db_connection; then
> -            echo "Still cannot connect to MySQL. Giving up."
> -            echo "Are you using docker-compose? If not, have you set up the link correctly?"
> -            exit 1
> -        fi
> -    fi
> -fi
> -
> -# rebuild mysql db
> -# do this on --reset or if the db doesn't exist
> -if [[ "$1" == "--reset" ]]; then
> -    shift
> -    reset_data
> -elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
> -    reset_data
> -fi
> -
> -if [ $# -eq 0 ]; then
> -    # we probably ran with --reset and nothing else
> -    # just exit cleanly
> -    exit 0
> -elif [ "$1" == "--shell" ]; then
> -    exec bash
> -elif [ "$1" == "--quick-test" ]; then
> -    export PW_SKIP_BROWSER_TESTS=yes
> -    python3 manage.py test
> -elif [ "$1" == "--test" ]; then
> -    xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
> -else # run whatever CMD is set to
> -    $@
> -fi
> diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
> new file mode 100644
> index 0000000..99a03bd
> --- /dev/null
> +++ b/tools/docker/Dockerfile
> @@ -0,0 +1,46 @@
> +FROM ubuntu
> +
> +ARG UID=1000
> +
> +ENV PROJECT_HOME /home/patchwork/patchwork
> +
> +ENV db_user root
> +ENV db_pass password
> +
> +ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
> +ENV DEBIAN_FRONTEND noninteractive
> +ENV PYTHONUNBUFFERED 1
> +
> +# System
> +RUN apt-get update -qq && \
> +    apt-get install -y --no-install-recommends \
> +    python-dev python-pip python-setuptools python-wheel \
> +    python3-dev python3-pip python3-setuptools python3-wheel \
> +    libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
> +    chromium-browser build-essential && \
> +    ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
> +
> +# User
> +RUN useradd --uid=$UID --create-home patchwork
> +
> +# Python requirements.
> +# If you update requirements, you should rebuild the container.
> +# entrypoint.sh will prompt you to do this.
> +COPY requirements-*.txt /tmp/
> +RUN pip3  install virtualenv tox && \
> +    pip3  install -r /tmp/requirements-dev.txt
> +# we deliberately leave the requirements files in tmp so we can
> +# ping the user in entrypoint.sh if the change them!
> +
> +COPY tools/docker/bashrc /tmp/bashrc
> +
> +# we put the code in ~/patchwork rather than ~ so that we
> +# can put in these bashrc snippets without dirtying the
> +# working directory
> +RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
> +
> +COPY tools/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
> +
> +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
> +USER patchwork
> +WORKDIR /home/patchwork/patchwork
> diff --git a/tools/docker/bashrc b/tools/docker/bashrc
> new file mode 100644
> index 0000000..eb2ed7d
> --- /dev/null
> +++ b/tools/docker/bashrc
> @@ -0,0 +1,5 @@
> +# This snippet is appended to ~/.bashrc when the container is created
> +
> +alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
> +alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
> +
> diff --git a/tools/docker/db/.dockerignore b/tools/docker/db/.dockerignore
> new file mode 100644
> index 0000000..1269488
> --- /dev/null
> +++ b/tools/docker/db/.dockerignore
> @@ -0,0 +1 @@
> +data
> diff --git a/tools/docker/db/.gitignore b/tools/docker/db/.gitignore
> new file mode 100644
> index 0000000..60baa9c
> --- /dev/null
> +++ b/tools/docker/db/.gitignore
> @@ -0,0 +1 @@
> +data/*
> diff --git a/tools/docker/db/Dockerfile b/tools/docker/db/Dockerfile
> new file mode 100644
> index 0000000..5df9b5a
> --- /dev/null
> +++ b/tools/docker/db/Dockerfile
> @@ -0,0 +1,10 @@
> +FROM mysql:5.7
> +
> +ENV MYSQL_ROOT_PASSWORD password
> +ENV MYSQL_USER patchwork
> +ENV MYSQL_PASSWORD password
> +
> +# We don't want to use the MYSQL_DATABASE env here because
> +# we want to be able to create the database with UTF-8 explictly.
> +# We also can't load in the data because it's in XML, yay.
> +
> diff --git a/tools/docker/entrypoint.sh b/tools/docker/entrypoint.sh
> new file mode 100755
> index 0000000..bad507d
> --- /dev/null
> +++ b/tools/docker/entrypoint.sh
> @@ -0,0 +1,86 @@
> +#!/bin/bash
> +set -euo pipefail
> +
> +# functions
> +
> +test_db_connection() {
> +    mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
> +}
> +
> +reset_data() {
> +    mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
> +DROP DATABASE IF EXISTS patchwork;
> +CREATE DATABASE patchwork CHARACTER SET utf8;
> +GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
> +GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
> +FLUSH PRIVILEGES;
> +EOF
> +
> +    # load initial data
> +    python3 $PROJECT_HOME/manage.py migrate #> /dev/null
> +    python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
> +    python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
> +    python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
> +}
> +
> +# the script begins!
> +
> +# check if patchwork is mounted. Checking if we exist is a
> +# very good start!
> +if [ ! -f ~patchwork/patchwork/tools/docker/entrypoint.sh ]; then
> +    echo "The patchwork directory doesn't seem to be mounted!"
> +    echo "Are you using docker-compose?"
> +    echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
> +    exit 1
> +fi
> +
> +# check if we need to rebuild because requirements changed
> +for x in /tmp/requirements-*.txt; do
> +    if ! cmp $x ~/patchwork/$(basename $x); then
> +        echo "A requirements file has changed."
> +        echo "Please rebuild the patchwork image:"
> +        echo "    docker-compose build web"
> +        exit 1
> +    fi
> +done
> +
> +# check if mysql is connected
> +if ! test_db_connection; then
> +    echo "MySQL seems not to be connected, or the patchwork user is broken"
> +    echo "MySQL may still be starting. Waiting 5 seconds."
> +    sleep 5
> +    if ! test_db_connection; then
> +        echo "Still cannot connect to MySQL."
> +        echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
> +        sleep 15
> +        if ! test_db_connection; then
> +            echo "Still cannot connect to MySQL. Giving up."
> +            echo "Are you using docker-compose? If not, have you set up the link correctly?"
> +            exit 1
> +        fi
> +    fi
> +fi
> +
> +# rebuild mysql db
> +# do this on --reset or if the db doesn't exist
> +if [[ "$1" == "--reset" ]]; then
> +    shift
> +    reset_data
> +elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
> +    reset_data
> +fi
> +
> +if [ $# -eq 0 ]; then
> +    # we probably ran with --reset and nothing else
> +    # just exit cleanly
> +    exit 0
> +elif [ "$1" == "--shell" ]; then
> +    exec bash
> +elif [ "$1" == "--quick-test" ]; then
> +    export PW_SKIP_BROWSER_TESTS=yes
> +    python3 manage.py test
> +elif [ "$1" == "--test" ]; then
> +    xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
> +else # run whatever CMD is set to
> +    $@
> +fi
> diff --git a/tools/install/install.sh b/tools/install/install.sh
> deleted file mode 100644
> index 3edec85..0000000
> --- a/tools/install/install.sh
> +++ /dev/null
> @@ -1,75 +0,0 @@
> -#!/bin/bash
> -
> -# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
> -
> -echo -e "\n--- Configuring environment ---\n"
> -
> -PROJECT_NAME=patchwork
> -PROJECT_HOME=/vagrant
> -WORKON_HOME=$PROJECT_HOME/.virtualenvs
> -
> -db_user=root
> -db_pass=password
> -
> -export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
> -export DEBIAN_FRONTEND=noninteractive
> -
> -echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
> -echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
> -
> -echo -e "\n--- Updating packages list ---\n"
> -
> -apt-get update -qq
> -
> -echo -e "\n--- Installing system packages ---\n"
> -
> -apt-get install -y python python3-dev python3-pip mysql-server \
> -    libmysqlclient-dev curl > /dev/null
> -
> -echo -e "\n--- Installing Python dependencies ---\n"
> -
> -pip3 -q install virtualenv tox
> -pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
> -
> -echo -e "\n--- Configuring database ---\n"
> -
> -mysql -u$db_user -p$db_pass << EOF
> -DROP DATABASE IF EXISTS patchwork;
> -CREATE DATABASE patchwork CHARACTER SET utf8;
> -GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
> -EOF
> -
> -chmod a+x $PROJECT_HOME/manage.py
> -
> -echo -e "\n--- Loading initial data ---\n"
> -
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> -    default_tags > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> -    default_states > /dev/null
> -sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> -    default_projects > /dev/null
> -
> -echo -e "\n--- Configuring environment ---\n"
> -
> -cat >> /home/vagrant/.bashrc << EOF
> -export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
> -
> -alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
> -alias createsu='python3 /vagrant/manage.py createsuperuser'
> -cd /vagrant
> -EOF
> -
> -echo "Done."
> -echo "You may now log in:"
> -echo "    $ vagrant ssh"
> -echo "Once logged in, start the server using the 'runserver' alias:"
> -echo "    $ runserver"
> -echo "You may wish to create a superuser for use with the admin console:"
> -echo "    $ createsuperuser"
> -echo "For information on the above, and some examples on loading sample date,"
> -echo "please refer to the documentation found in the 'doc' folder."
> -echo "Alternatively, check out the docs online:"
> -echo "    https://patchwork.readthedocs.org/en/latest/development/"
> -echo "Happy patchworking."
> diff --git a/tools/vagrant/install.sh b/tools/vagrant/install.sh
> new file mode 100644
> index 0000000..3edec85
> --- /dev/null
> +++ b/tools/vagrant/install.sh
> @@ -0,0 +1,75 @@
> +#!/bin/bash
> +
> +# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
> +
> +echo -e "\n--- Configuring environment ---\n"
> +
> +PROJECT_NAME=patchwork
> +PROJECT_HOME=/vagrant
> +WORKON_HOME=$PROJECT_HOME/.virtualenvs
> +
> +db_user=root
> +db_pass=password
> +
> +export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
> +export DEBIAN_FRONTEND=noninteractive
> +
> +echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
> +echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
> +
> +echo -e "\n--- Updating packages list ---\n"
> +
> +apt-get update -qq
> +
> +echo -e "\n--- Installing system packages ---\n"
> +
> +apt-get install -y python python3-dev python3-pip mysql-server \
> +    libmysqlclient-dev curl > /dev/null
> +
> +echo -e "\n--- Installing Python dependencies ---\n"
> +
> +pip3 -q install virtualenv tox
> +pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
> +
> +echo -e "\n--- Configuring database ---\n"
> +
> +mysql -u$db_user -p$db_pass << EOF
> +DROP DATABASE IF EXISTS patchwork;
> +CREATE DATABASE patchwork CHARACTER SET utf8;
> +GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
> +EOF
> +
> +chmod a+x $PROJECT_HOME/manage.py
> +
> +echo -e "\n--- Loading initial data ---\n"
> +
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> +    default_tags > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> +    default_states > /dev/null
> +sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
> +    default_projects > /dev/null
> +
> +echo -e "\n--- Configuring environment ---\n"
> +
> +cat >> /home/vagrant/.bashrc << EOF
> +export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
> +
> +alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
> +alias createsu='python3 /vagrant/manage.py createsuperuser'
> +cd /vagrant
> +EOF
> +
> +echo "Done."
> +echo "You may now log in:"
> +echo "    $ vagrant ssh"
> +echo "Once logged in, start the server using the 'runserver' alias:"
> +echo "    $ runserver"
> +echo "You may wish to create a superuser for use with the admin console:"
> +echo "    $ createsuperuser"
> +echo "For information on the above, and some examples on loading sample date,"
> +echo "please refer to the documentation found in the 'doc' folder."
> +echo "Alternatively, check out the docs online:"
> +echo "    https://patchwork.readthedocs.org/en/latest/development/"
> +echo "Happy patchworking."
> -- 
> 2.7.4
>
> _______________________________________________
> Patchwork mailing list
> Patchwork@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
Stephen Finucane Aug. 29, 2016, 11:23 p.m. UTC | #2
On 28 Aug 14:00, Daniel Axtens wrote:
> Stephen Finucane <stephenfinucane@hotmail.com> writes:
> 
> > ...like the Vagrant scripts (which have been renamed also).
> >
> > Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
> 
> Looks good to me. I haven't checked it because it doesn't apply cleanly
> for me, but I like the idea. I don't know if I'm quite in the position
> to formally give it an Acked-by yet, but I'm happy to give it a +1 :)

This applied cleanly to master for me? I assume you've just made local
changes?

I'd appreciate the 'Acked-by' just so I can track it in Patchwork :)

Stephen
Daniel Axtens Aug. 31, 2016, 12:13 a.m. UTC | #3
Somehow pressed 'r' instead of 'R' and failed to send this to the
list, sorry!

The key bit:
Acked-by: Daniel Axtens <dja@axtens.net>

Regards,
Daniel

Daniel Axtens <dja@axtens.net> writes:

> Stephen Finucane <stephenfinucane@hotmail.com> writes:
>
>> On 28 Aug 14:00, Daniel Axtens wrote:
>>> Stephen Finucane <stephenfinucane@hotmail.com> writes:
>>> 
>>> > ...like the Vagrant scripts (which have been renamed also).
>>> >
>>> > Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
>>> 
>>> Looks good to me. I haven't checked it because it doesn't apply cleanly
>>> for me, but I like the idea. I don't know if I'm quite in the position
>>> to formally give it an Acked-by yet, but I'm happy to give it a +1 :)
>>
>> This applied cleanly to master for me? I assume you've just made local
>> changes?
>
> Probably? Idk.
>
> I wasn't quite sure about the ettiquite of Acked-by in Patchwork - but
> if you're happy, I'm happy:
>
> Acked-by: Daniel Axtens <dja@axtens.net>
>
> Regards,
> Daniel
>
>>
>> I'd appreciate the 'Acked-by' just so I can track it in Patchwork :)
>>
>> Stephen
Stephen Finucane Sept. 1, 2016, 6:17 p.m. UTC | #4
On 31 Aug 10:13, Daniel Axtens wrote:
> Somehow pressed 'r' instead of 'R' and failed to send this to the
> list, sorry!
> 
> The key bit:
> Acked-by: Daniel Axtens <dja@axtens.net>

Merged the v2 of this. Thanks for the review, Daniel.
diff mbox

Patch

diff --git a/.dockerignore b/.dockerignore
index 24473bb..83cfa98 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,3 +1,3 @@ 
 .vagrant
-docker/db
+tools/docker/db
 
diff --git a/Vagrantfile b/Vagrantfile
index b316d41..2ddbca0 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -22,5 +22,5 @@  Vagrant.configure(2) do |config|
   #   vb.memory = "1024"
   # end
 
-  config.vm.provision :shell, :path => "tools/install/install.sh"
+  config.vm.provision :shell, :path => "tools/vagrant/install.sh"
 end
diff --git a/docker-compose.yml b/docker-compose.yml
index 881a72a..7db3486 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,12 +5,12 @@ 
 # or upgrade to v2 and use the build-arg to override it.
 
 db:
-  build: docker/db
+  build: tools/docker/db
   volumes:
-   - ./docker/db/data:/var/lib/mysql
+   - ./tools/docker/db/data:/var/lib/mysql
 web:
   build: .
-  dockerfile: ./docker/Dockerfile
+  dockerfile: ./tools/docker/Dockerfile
   command: python3 manage.py runserver 0.0.0.0:8000
   volumes:
     - .:/home/patchwork/patchwork/
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 100644
index ea2a8fc..0000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1,46 +0,0 @@ 
-FROM ubuntu
-
-ARG UID=1000
-
-ENV PROJECT_HOME /home/patchwork/patchwork
-
-ENV db_user root
-ENV db_pass password
-
-ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
-ENV DEBIAN_FRONTEND noninteractive
-ENV PYTHONUNBUFFERED 1
-
-# System
-RUN apt-get update -qq && \
-    apt-get install -y --no-install-recommends \
-    python-dev python-pip python-setuptools python-wheel \
-    python3-dev python3-pip python3-setuptools python3-wheel \
-    libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
-    chromium-browser build-essential && \
-    ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
-
-# User
-RUN useradd --uid=$UID --create-home patchwork
-
-# Python requirements.
-# If you update requirements, you should rebuild the container.
-# entrypoint.sh will prompt you to do this.
-COPY requirements-*.txt /tmp/
-RUN pip3  install virtualenv tox && \
-    pip3  install -r /tmp/requirements-dev.txt
-# we deliberately leave the requirements files in tmp so we can
-# ping the user in entrypoint.sh if the change them!
-
-COPY docker/bashrc /tmp/bashrc
-
-# we put the code in ~/patchwork rather than ~ so that we
-# can put in these bashrc snippets without dirtying the
-# working directory
-RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
-
-COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
-
-ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
-USER patchwork
-WORKDIR /home/patchwork/patchwork
diff --git a/docker/bashrc b/docker/bashrc
deleted file mode 100644
index eb2ed7d..0000000
--- a/docker/bashrc
+++ /dev/null
@@ -1,5 +0,0 @@ 
-# This snippet is appended to ~/.bashrc when the container is created
-
-alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
-alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
-
diff --git a/docker/db/.dockerignore b/docker/db/.dockerignore
deleted file mode 100644
index 1269488..0000000
--- a/docker/db/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@ 
-data
diff --git a/docker/db/.gitignore b/docker/db/.gitignore
deleted file mode 100644
index 60baa9c..0000000
--- a/docker/db/.gitignore
+++ /dev/null
@@ -1 +0,0 @@ 
-data/*
diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile
deleted file mode 100644
index 5df9b5a..0000000
--- a/docker/db/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@ 
-FROM mysql:5.7
-
-ENV MYSQL_ROOT_PASSWORD password
-ENV MYSQL_USER patchwork
-ENV MYSQL_PASSWORD password
-
-# We don't want to use the MYSQL_DATABASE env here because
-# we want to be able to create the database with UTF-8 explictly.
-# We also can't load in the data because it's in XML, yay.
-
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
deleted file mode 100755
index 8efaada..0000000
--- a/docker/entrypoint.sh
+++ /dev/null
@@ -1,86 +0,0 @@ 
-#!/bin/bash
-set -euo pipefail
-
-# functions
-
-test_db_connection() {
-    mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
-}
-
-reset_data() {
-    mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
-DROP DATABASE IF EXISTS patchwork;
-CREATE DATABASE patchwork CHARACTER SET utf8;
-GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
-GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
-FLUSH PRIVILEGES;
-EOF
-
-    # load initial data
-    python3 $PROJECT_HOME/manage.py migrate #> /dev/null
-    python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
-    python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
-    python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
-}
-
-# the script begins!
-
-# check if patchwork is mounted. Checking if we exist is a
-# very good start!
-if [ ! -f ~patchwork/patchwork/docker/entrypoint.sh ]; then
-    echo "The patchwork directory doesn't seem to be mounted!"
-    echo "Are you using docker-compose?"
-    echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
-    exit 1
-fi
-
-# check if we need to rebuild because requirements changed
-for x in /tmp/requirements-*.txt; do
-    if ! cmp $x ~/patchwork/$(basename $x); then
-        echo "A requirements file has changed."
-        echo "Please rebuild the patchwork image:"
-        echo "    docker-compose build web"
-        exit 1
-    fi
-done
-
-# check if mysql is connected
-if ! test_db_connection; then
-    echo "MySQL seems not to be connected, or the patchwork user is broken"
-    echo "MySQL may still be starting. Waiting 5 seconds."
-    sleep 5
-    if ! test_db_connection; then
-        echo "Still cannot connect to MySQL."
-        echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
-        sleep 15
-        if ! test_db_connection; then
-            echo "Still cannot connect to MySQL. Giving up."
-            echo "Are you using docker-compose? If not, have you set up the link correctly?"
-            exit 1
-        fi
-    fi
-fi
-
-# rebuild mysql db
-# do this on --reset or if the db doesn't exist
-if [[ "$1" == "--reset" ]]; then
-    shift
-    reset_data
-elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
-    reset_data
-fi
-
-if [ $# -eq 0 ]; then
-    # we probably ran with --reset and nothing else
-    # just exit cleanly
-    exit 0
-elif [ "$1" == "--shell" ]; then
-    exec bash
-elif [ "$1" == "--quick-test" ]; then
-    export PW_SKIP_BROWSER_TESTS=yes
-    python3 manage.py test
-elif [ "$1" == "--test" ]; then
-    xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
-else # run whatever CMD is set to
-    $@
-fi
diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
new file mode 100644
index 0000000..99a03bd
--- /dev/null
+++ b/tools/docker/Dockerfile
@@ -0,0 +1,46 @@ 
+FROM ubuntu
+
+ARG UID=1000
+
+ENV PROJECT_HOME /home/patchwork/patchwork
+
+ENV db_user root
+ENV db_pass password
+
+ENV DJANGO_SETTINGS_MODULE patchwork.settings.dev
+ENV DEBIAN_FRONTEND noninteractive
+ENV PYTHONUNBUFFERED 1
+
+# System
+RUN apt-get update -qq && \
+    apt-get install -y --no-install-recommends \
+    python-dev python-pip python-setuptools python-wheel \
+    python3-dev python3-pip python3-setuptools python3-wheel \
+    libmysqlclient-dev mysql-client curl unzip xvfb chromium-chromedriver \
+    chromium-browser build-essential && \
+    ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
+
+# User
+RUN useradd --uid=$UID --create-home patchwork
+
+# Python requirements.
+# If you update requirements, you should rebuild the container.
+# entrypoint.sh will prompt you to do this.
+COPY requirements-*.txt /tmp/
+RUN pip3  install virtualenv tox && \
+    pip3  install -r /tmp/requirements-dev.txt
+# we deliberately leave the requirements files in tmp so we can
+# ping the user in entrypoint.sh if the change them!
+
+COPY tools/docker/bashrc /tmp/bashrc
+
+# we put the code in ~/patchwork rather than ~ so that we
+# can put in these bashrc snippets without dirtying the
+# working directory
+RUN cat /tmp/bashrc >> /home/patchwork/.bashrc
+
+COPY tools/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
+
+ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
+USER patchwork
+WORKDIR /home/patchwork/patchwork
diff --git a/tools/docker/bashrc b/tools/docker/bashrc
new file mode 100644
index 0000000..eb2ed7d
--- /dev/null
+++ b/tools/docker/bashrc
@@ -0,0 +1,5 @@ 
+# This snippet is appended to ~/.bashrc when the container is created
+
+alias runserver='python3 $PROJECT_HOME/manage.py runserver 0.0.0.0:8000'
+alias createsu='python3 $PROJECT_HOME/manage.py createsuperuser'
+
diff --git a/tools/docker/db/.dockerignore b/tools/docker/db/.dockerignore
new file mode 100644
index 0000000..1269488
--- /dev/null
+++ b/tools/docker/db/.dockerignore
@@ -0,0 +1 @@ 
+data
diff --git a/tools/docker/db/.gitignore b/tools/docker/db/.gitignore
new file mode 100644
index 0000000..60baa9c
--- /dev/null
+++ b/tools/docker/db/.gitignore
@@ -0,0 +1 @@ 
+data/*
diff --git a/tools/docker/db/Dockerfile b/tools/docker/db/Dockerfile
new file mode 100644
index 0000000..5df9b5a
--- /dev/null
+++ b/tools/docker/db/Dockerfile
@@ -0,0 +1,10 @@ 
+FROM mysql:5.7
+
+ENV MYSQL_ROOT_PASSWORD password
+ENV MYSQL_USER patchwork
+ENV MYSQL_PASSWORD password
+
+# We don't want to use the MYSQL_DATABASE env here because
+# we want to be able to create the database with UTF-8 explictly.
+# We also can't load in the data because it's in XML, yay.
+
diff --git a/tools/docker/entrypoint.sh b/tools/docker/entrypoint.sh
new file mode 100755
index 0000000..bad507d
--- /dev/null
+++ b/tools/docker/entrypoint.sh
@@ -0,0 +1,86 @@ 
+#!/bin/bash
+set -euo pipefail
+
+# functions
+
+test_db_connection() {
+    mysqladmin -h $PW_TEST_DB_HOST -u patchwork --password=password ping > /dev/null 2> /dev/null
+}
+
+reset_data() {
+    mysql -u$db_user -p$db_pass -h $PW_TEST_DB_HOST << EOF
+DROP DATABASE IF EXISTS patchwork;
+CREATE DATABASE patchwork CHARACTER SET utf8;
+GRANT ALL ON patchwork.* TO 'patchwork' IDENTIFIED BY 'password';
+GRANT ALL PRIVILEGES ON test_patchwork.* TO 'patchwork'@'%';
+FLUSH PRIVILEGES;
+EOF
+
+    # load initial data
+    python3 $PROJECT_HOME/manage.py migrate #> /dev/null
+    python3 $PROJECT_HOME/manage.py loaddata default_tags #> /dev/null
+    python3 $PROJECT_HOME/manage.py loaddata default_states #> /dev/null
+    python3 $PROJECT_HOME/manage.py loaddata default_projects #> /dev/null
+}
+
+# the script begins!
+
+# check if patchwork is mounted. Checking if we exist is a
+# very good start!
+if [ ! -f ~patchwork/patchwork/tools/docker/entrypoint.sh ]; then
+    echo "The patchwork directory doesn't seem to be mounted!"
+    echo "Are you using docker-compose?"
+    echo "If not, you need -v PATH_TO_PATCHWORK:/home/patchwork/patchwork"
+    exit 1
+fi
+
+# check if we need to rebuild because requirements changed
+for x in /tmp/requirements-*.txt; do
+    if ! cmp $x ~/patchwork/$(basename $x); then
+        echo "A requirements file has changed."
+        echo "Please rebuild the patchwork image:"
+        echo "    docker-compose build web"
+        exit 1
+    fi
+done
+
+# check if mysql is connected
+if ! test_db_connection; then
+    echo "MySQL seems not to be connected, or the patchwork user is broken"
+    echo "MySQL may still be starting. Waiting 5 seconds."
+    sleep 5
+    if ! test_db_connection; then
+        echo "Still cannot connect to MySQL."
+        echo "Maybe you are starting the db for the first time. Waiting 15 seconds."
+        sleep 15
+        if ! test_db_connection; then
+            echo "Still cannot connect to MySQL. Giving up."
+            echo "Are you using docker-compose? If not, have you set up the link correctly?"
+            exit 1
+        fi
+    fi
+fi
+
+# rebuild mysql db
+# do this on --reset or if the db doesn't exist
+if [[ "$1" == "--reset" ]]; then
+    shift
+    reset_data
+elif ! ( echo ';' | mysql -h db -u patchwork -ppassword patchwork 2> /dev/null ); then
+    reset_data
+fi
+
+if [ $# -eq 0 ]; then
+    # we probably ran with --reset and nothing else
+    # just exit cleanly
+    exit 0
+elif [ "$1" == "--shell" ]; then
+    exec bash
+elif [ "$1" == "--quick-test" ]; then
+    export PW_SKIP_BROWSER_TESTS=yes
+    python3 manage.py test
+elif [ "$1" == "--test" ]; then
+    xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
+else # run whatever CMD is set to
+    $@
+fi
diff --git a/tools/install/install.sh b/tools/install/install.sh
deleted file mode 100644
index 3edec85..0000000
--- a/tools/install/install.sh
+++ /dev/null
@@ -1,75 +0,0 @@ 
-#!/bin/bash
-
-# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
-
-echo -e "\n--- Configuring environment ---\n"
-
-PROJECT_NAME=patchwork
-PROJECT_HOME=/vagrant
-WORKON_HOME=$PROJECT_HOME/.virtualenvs
-
-db_user=root
-db_pass=password
-
-export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
-export DEBIAN_FRONTEND=noninteractive
-
-echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
-echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
-
-echo -e "\n--- Updating packages list ---\n"
-
-apt-get update -qq
-
-echo -e "\n--- Installing system packages ---\n"
-
-apt-get install -y python python3-dev python3-pip mysql-server \
-    libmysqlclient-dev curl > /dev/null
-
-echo -e "\n--- Installing Python dependencies ---\n"
-
-pip3 -q install virtualenv tox
-pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
-
-echo -e "\n--- Configuring database ---\n"
-
-mysql -u$db_user -p$db_pass << EOF
-DROP DATABASE IF EXISTS patchwork;
-CREATE DATABASE patchwork CHARACTER SET utf8;
-GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
-EOF
-
-chmod a+x $PROJECT_HOME/manage.py
-
-echo -e "\n--- Loading initial data ---\n"
-
-sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
-sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
-    default_tags > /dev/null
-sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
-    default_states > /dev/null
-sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
-    default_projects > /dev/null
-
-echo -e "\n--- Configuring environment ---\n"
-
-cat >> /home/vagrant/.bashrc << EOF
-export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
-
-alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
-alias createsu='python3 /vagrant/manage.py createsuperuser'
-cd /vagrant
-EOF
-
-echo "Done."
-echo "You may now log in:"
-echo "    $ vagrant ssh"
-echo "Once logged in, start the server using the 'runserver' alias:"
-echo "    $ runserver"
-echo "You may wish to create a superuser for use with the admin console:"
-echo "    $ createsuperuser"
-echo "For information on the above, and some examples on loading sample date,"
-echo "please refer to the documentation found in the 'doc' folder."
-echo "Alternatively, check out the docs online:"
-echo "    https://patchwork.readthedocs.org/en/latest/development/"
-echo "Happy patchworking."
diff --git a/tools/vagrant/install.sh b/tools/vagrant/install.sh
new file mode 100644
index 0000000..3edec85
--- /dev/null
+++ b/tools/vagrant/install.sh
@@ -0,0 +1,75 @@ 
+#!/bin/bash
+
+# Script to set up Patchwork on a Vagrant-powered Ubuntu Trusty host
+
+echo -e "\n--- Configuring environment ---\n"
+
+PROJECT_NAME=patchwork
+PROJECT_HOME=/vagrant
+WORKON_HOME=$PROJECT_HOME/.virtualenvs
+
+db_user=root
+db_pass=password
+
+export DJANGO_SETTINGS_MODULE=patchwork.settings.dev
+export DEBIAN_FRONTEND=noninteractive
+
+echo "mysql-server mysql-server/root_password password $db_pass" | debconf-set-selections
+echo "mysql-server mysql-server/root_password_again password $db_pass" | debconf-set-selections
+
+echo -e "\n--- Updating packages list ---\n"
+
+apt-get update -qq
+
+echo -e "\n--- Installing system packages ---\n"
+
+apt-get install -y python python3-dev python3-pip mysql-server \
+    libmysqlclient-dev curl > /dev/null
+
+echo -e "\n--- Installing Python dependencies ---\n"
+
+pip3 -q install virtualenv tox
+pip3 -q install -r $PROJECT_HOME/requirements-dev.txt
+
+echo -e "\n--- Configuring database ---\n"
+
+mysql -u$db_user -p$db_pass << EOF
+DROP DATABASE IF EXISTS patchwork;
+CREATE DATABASE patchwork CHARACTER SET utf8;
+GRANT ALL ON patchwork.* TO 'patchwork'@'localhost' IDENTIFIED BY 'password';
+EOF
+
+chmod a+x $PROJECT_HOME/manage.py
+
+echo -e "\n--- Loading initial data ---\n"
+
+sudo -E -u vagrant python3 $PROJECT_HOME/manage.py migrate > /dev/null
+sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
+    default_tags > /dev/null
+sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
+    default_states > /dev/null
+sudo -E -u vagrant python3 $PROJECT_HOME/manage.py loaddata \
+    default_projects > /dev/null
+
+echo -e "\n--- Configuring environment ---\n"
+
+cat >> /home/vagrant/.bashrc << EOF
+export DJANGO_SETTINGS_MODULE='patchwork.settings.dev'
+
+alias runserver='python3 /vagrant/manage.py runserver 0.0.0.0:8000'
+alias createsu='python3 /vagrant/manage.py createsuperuser'
+cd /vagrant
+EOF
+
+echo "Done."
+echo "You may now log in:"
+echo "    $ vagrant ssh"
+echo "Once logged in, start the server using the 'runserver' alias:"
+echo "    $ runserver"
+echo "You may wish to create a superuser for use with the admin console:"
+echo "    $ createsuperuser"
+echo "For information on the above, and some examples on loading sample date,"
+echo "please refer to the documentation found in the 'doc' folder."
+echo "Alternatively, check out the docs online:"
+echo "    https://patchwork.readthedocs.org/en/latest/development/"
+echo "Happy patchworking."