From c1826010cbed92cdacb0b12722e6c523f9a21284 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Fri, 27 Mar 2015 13:28:33 +0100 Subject: WIP --- Makefile | 75 +++++++++++++------------- makerelease.erl | 4 +- packaging/docker/README | 23 ++++++-- packaging/docker/base-debian:jessie/Dockerfile | 3 +- packaging/docker/build-from-source.sh | 5 ++ packaging/docker/build.sh | 5 -- packaging/docker/catlfish-dev/Dockerfile | 27 ++++++---- packaging/docker/catlfish-dev/supervisord.conf | 2 +- packaging/docker/erlang/Dockerfile | 2 +- 9 files changed, 83 insertions(+), 63 deletions(-) create mode 100755 packaging/docker/build-from-source.sh delete mode 100755 packaging/docker/build.sh diff --git a/Makefile b/Makefile index 58a1160..90c7bd0 100644 --- a/Makefile +++ b/Makefile @@ -1,48 +1,45 @@ +# Makefile for catlfish + +PREFIX=rel + build all: ./make.erl clean: -rm ebin/*.beam + release: all - rm -rf rel - mkdir rel - ./makerelease.erl - (cd rel; ln -s ../../plop/test .) - cp httpd_props.conf rel - cp catlfish.config rel - cp storage_node.config rel - cp storage_node_httpd.conf rel - mkdir rel/catlfish - cp -r webroot rel/catlfish - test -d rel/catlfish/webroot/log || mkdir rel/catlfish/webroot/log + -rm -rf $(PREFIX) + mkdir $(PREFIX) + ./makerelease.erl $(PREFIX) -include test/test.mk tests-prepare: - rm -r rel/mergedb || true - mkdir rel/mergedb - mkdir rel/mergedb/chains - touch rel/mergedb/logorder - rm -r rel/known_roots || true - mkdir rel/known_roots - cp tools/testcerts/roots/* rel/known_roots - cp -r test/config/privatekeys rel - cp -r test/config/publickeys rel - rm -r rel/tests || true + rm -r $(PREFIX)/mergedb || true + mkdir $(PREFIX)/mergedb + mkdir $(PREFIX)/mergedb/chains + touch $(PREFIX)/mergedb/logorder + rm -r $(PREFIX)/known_roots || true + mkdir $(PREFIX)/known_roots + cp tools/testcerts/roots/* $(PREFIX)/known_roots + cp -r test/config/privatekeys $(PREFIX) + cp -r test/config/publickeys $(PREFIX) + rm -r $(PREFIX)/tests || true @for machine in $(MACHINES); do \ tools/compileconfig.py --config=test/catlfish-test.cfg --localconfig test/catlfish-test-local-$$machine.cfg ; \ - mkdir -p rel/tests/machine/machine-$$machine/db ; \ - touch rel/tests/machine/machine-$$machine/db/index ; \ - touch rel/tests/machine/machine-$$machine/db/newentries ; \ + mkdir -p $(PREFIX)/tests/machine/machine-$$machine/db ; \ + touch $(PREFIX)/tests/machine/machine-$$machine/db/index ; \ + touch $(PREFIX)/tests/machine/machine-$$machine/db/newentries ; \ done - tools/compileconfig.py --config=test/catlfish-test.cfg --localconfig test/catlfish-test-local-signing.cfg + tools/compileconfig.py --config test/catlfish-test.cfg --localconfig test/catlfish-test-local-signing.cfg @for node in $(NODES); do \ mkdir -p test/nodes/$$node/log ; \ - cp test/config/$$node.config rel ; \ + cp test/config/$$node.config $(PREFIX) ; \ done tests-start: @for node in $(NODES); do \ - (cd rel ; bin/run_erl -daemon ../test/nodes/$$node/ ../test/nodes/$$node/log/ "exec bin/erl -config $$node") \ + (cd $(PREFIX) ; bin/run_erl -daemon ../test/nodes/$$node/ ../test/nodes/$$node/log/ "exec bin/erl -config $$node") \ done @for i in 1 2 3 4 5 6 7 8 9 10; do \ echo "waiting for system to start" ; \ @@ -58,20 +55,20 @@ tests-start: done tests-run: - @(cd rel && python ../tools/testcase1.py ) || (echo "Tests failed" ; false) - @(cd rel && python ../tools/fetchallcerts.py $(BASEURL)) || (echo "Verification failed" ; false) - @(cd rel && rm -f submittedcerts) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert1.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert2.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert3.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert4.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert5.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/pre1.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/pre2.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) - @(cd rel && python ../tools/merge.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false) + @(cd $(PREFIX) && python ../tools/testcase1.py ) || (echo "Tests failed" ; false) + @(cd $(PREFIX) && python ../tools/fetchallcerts.py $(BASEURL)) || (echo "Verification failed" ; false) + @(cd $(PREFIX) && rm -f submittedcerts) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert1.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert2.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert3.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert4.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/cert5.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/pre1.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/submitcert.py --parallel=1 --store ../tools/testcerts/pre2.txt --check-sct --sct-file=submittedcerts $(BASEURL)) || (echo "Submission failed" ; false) + @(cd $(PREFIX) && python ../tools/merge.py --config ../test/catlfish-test.cfg --localconfig ../test/catlfish-test-local-merge.cfg) || (echo "Merge failed" ; false) tests-run2: - @(cd rel ; python ../tools/verifysct.py --sct-file=submittedcerts --parallel 1 $(BASEURL)) || echo "Verification of SCT:s failed" + @(cd $(PREFIX) ; python ../tools/verifysct.py --sct-file=submittedcerts --parallel 1 $(BASEURL)) || echo "Verification of SCT:s failed" tests-stop: @for node in $(NODES); do \ diff --git a/makerelease.erl b/makerelease.erl index f72fdb6..898dab7 100755 --- a/makerelease.erl +++ b/makerelease.erl @@ -1,7 +1,7 @@ #!/usr/bin/env escript %% -*- erlang -*- -main(_) -> +main([dest_dir]) -> {ok, Conf} = file:consult("reltool.config"), {ok, Spec} = reltool:get_target_spec(Conf), - ok = reltool:eval_target_spec(Spec, code:root_dir(), "rel"). + ok = reltool:eval_target_spec(Spec, code:root_dir(), dest_dir). diff --git a/packaging/docker/README b/packaging/docker/README index 0a75c10..147fa41 100644 --- a/packaging/docker/README +++ b/packaging/docker/README @@ -1,14 +1,27 @@ -Requirements: +Information about creating a docker image for running catlfish from a +binary release or with catlfish built from source. + + +Requirements +------------ + - lack of expectations regarding security -- docker doesn't verify downloaded images - a 64-bit Linux system - lxc-docker version 1.3 or later -Build a docker image with catlfish. Note that you will have to cd into -this directory, catlfish/packaging/docker, in order for docker to find -the appropriate docker files. - $ ./build.sh +Building an image +----------------- + +Run build-from-release.sh or build-from-source.sh to build a docker +image with catlfish. Note that you will have to cd into this +directory, catlfish/packaging/docker, in order for docker to find the +appropriate docker files. + + +Running it +---------- Run the resulting image in interactive mode. diff --git a/packaging/docker/base-debian:jessie/Dockerfile b/packaging/docker/base-debian:jessie/Dockerfile index 6a30a45..dbd5d37 100644 --- a/packaging/docker/base-debian:jessie/Dockerfile +++ b/packaging/docker/base-debian:jessie/Dockerfile @@ -1,5 +1,6 @@ FROM debian:jessie RUN apt-get update RUN echo 'debconf debconf/frontend select noninteractive' | debconf-set-selections -RUN apt-get install -y -q supervisor +RUN apt-get -y -q upgrade +RUN apt-get -y -q install supervisor RUN mkdir -p /var/log/supervisor diff --git a/packaging/docker/build-from-source.sh b/packaging/docker/build-from-source.sh new file mode 100755 index 0000000..2b47222 --- /dev/null +++ b/packaging/docker/build-from-source.sh @@ -0,0 +1,5 @@ +#! /bin/sh + +docker build -t base base-debian:jessie +docker build -t erlang erlang +docker build -t catlfish catlfish-dev diff --git a/packaging/docker/build.sh b/packaging/docker/build.sh deleted file mode 100755 index 2b47222..0000000 --- a/packaging/docker/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/sh - -docker build -t base base-debian:jessie -docker build -t erlang erlang -docker build -t catlfish catlfish-dev diff --git a/packaging/docker/catlfish-dev/Dockerfile b/packaging/docker/catlfish-dev/Dockerfile index cbfc285..4300b5e 100644 --- a/packaging/docker/catlfish-dev/Dockerfile +++ b/packaging/docker/catlfish-dev/Dockerfile @@ -1,26 +1,35 @@ +# Catlfish expects to find its configuration in +# /usr/local/etc/catlfish/catlfish.config so mounting +# /usr/local/etc/catlfish is recommended. This can be done using the +# `-v' flag to `docker run'. Example: + +# $ docker run -v /etc/catlfish:/usr/local/etc/catlfish catlfish + FROM erlang RUN apt-get update RUN echo 'debconf debconf/frontend select noninteractive' | debconf-set-selections -RUN apt-get install -y -q \ - gcc \ - git \ - make +RUN apt-get -y -q install gcc git make -WORKDIR /opt +WORKDIR /usr/local/src -RUN git clone -b v2.12.2 https://github.com/mochi/mochiweb +RUN curl https://www.ct.nordu.net/dist/mochiweb-v2.12.2.tar.gz | tar xf - RUN make -C mochiweb -RUN git clone -b 2.1.1 https://github.com/basho/lager +RUN curl https://www.ct.nordu.net/dist/lager-2.1.1.tar.gz | tar xf - RUN make -C lager -RUN git clone -b 1.1.0 https://github.com/benoitc/hackney.git +RUN curl https://www.ct.nordu.net/dist/hackney-1.1.0.tar.gz | tar xf - RUN make -C hackney REBAR=../lager/rebar RUN git clone https://git.nordu.net/plop.git RUN make -C plop RUN git clone https://git.nordu.net/catlfish.git -RUN make -C catlfish all release +RUN make -C catlfish all +RUN make -C catlfish PREFIX=/usr/local/catlfish release + +VOLUME /usr/local/catlfish +VOLUME /var/local/db/catlfish ADD supervisord.conf /etc/supervisor/ +WORKDIR /usr/local/etc/catlfish diff --git a/packaging/docker/catlfish-dev/supervisord.conf b/packaging/docker/catlfish-dev/supervisord.conf index c973bff..d857e54 100644 --- a/packaging/docker/catlfish-dev/supervisord.conf +++ b/packaging/docker/catlfish-dev/supervisord.conf @@ -2,4 +2,4 @@ nodaemon=true [program:catlfish] -command=/opt/catlfish/rel/bin/erl -config catlfish +command=/usr/local/catlfish/bin/erl -config catlfish diff --git a/packaging/docker/erlang/Dockerfile b/packaging/docker/erlang/Dockerfile index c33a22b..531064d 100644 --- a/packaging/docker/erlang/Dockerfile +++ b/packaging/docker/erlang/Dockerfile @@ -1,7 +1,7 @@ FROM base RUN apt-get update RUN echo 'debconf debconf/frontend select noninteractive' | debconf-set-selections -RUN apt-get install -y -q \ +RUN apt-get -y -q install \ erlang-base \ erlang-crypto \ erlang-dev \ -- cgit v1.1