#!/bin/sh # Run this script with your own user # Set up a directory for the installed Lisp libraries export DWIM_INSTALL_PATH=/opt/hu.dwim.number-toss export DWIM_WORKSPACE=${DWIM_INSTALL_PATH}/workspace export DWIM_PROJECT_NAME=hu.dwim.number-toss export DWIM_DAEMON_USER=number-toss-service mkdir --parents ${DWIM_WORKSPACE} # Install PostgreSQL sudo apt-get install postgresql # Configure PostgreSQL sudo -u postgres createdb ${DWIM_PROJECT_NAME} sudo -u postgres createuser --pwprompt --no-superuser --no-createdb --no-createrole ${DWIM_PROJECT_NAME} # Add a user that will be used to run the server process sudo adduser --disabled-login --disabled-password --no-create-home ${DWIM_DAEMON_USER} sudo adduser ${DWIM_DAEMON_USER} www-data sudo adduser ${DWIM_DAEMON_USER} darcs sudo adduser ${DWIM_DAEMON_USER} git # Install dependencies from source code repositories cd ${DWIM_WORKSPACE} cvs -z3 -d :pserver:anonymous:anonymous@common-lisp.net:/project/anaphora/cvsroot checkout -d anaphora src cvs -z3 -d :pserver:anonymous:anonymous@common-lisp.net:/project/cl-plus-ssl/cvsroot checkout -d cl+ssl cl+ssl cvs -z3 -d :pserver:anonymous:anonymous@common-lisp.net:/project/cl-plus-ssl/cvsroot checkout -d trivial-gray-streams trivial-gray-streams darcs get /opt/darcs/hu.dwim.asdf darcs get /opt/darcs/hu.dwim.build darcs get /opt/darcs/hu.dwim.common darcs get /opt/darcs/hu.dwim.common-lisp darcs get /opt/darcs/hu.dwim.computed-class darcs get /opt/darcs/hu.dwim.def darcs get /opt/darcs/hu.dwim.defclass-star darcs get /opt/darcs/hu.dwim.delico darcs get /opt/darcs/hu.dwim.environment darcs get /opt/darcs/hu.dwim.logger darcs get /opt/darcs/hu.dwim.number-toss darcs get /opt/darcs/hu.dwim.perec darcs get /opt/darcs/hu.dwim.quasi-quote darcs get /opt/darcs/hu.dwim.rdbms darcs get /opt/darcs/hu.dwim.serializer darcs get /opt/darcs/hu.dwim.syntax-sugar darcs get /opt/darcs/hu.dwim.util darcs get /opt/darcs/hu.dwim.walker darcs get /opt/darcs/hu.dwim.web-server darcs get /opt/darcs/local-time darcs get /opt/darcs/metacopy darcs get /opt/darcs/postmodern darcs get http://common-lisp.net/project/babel/darcs/babel darcs get http://common-lisp.net/project/cl-l10n/darcs/cl-l10n darcs get http://common-lisp.net/project/cl-l10n/darcs/cl-l10n-cldr darcs get http://common-lisp.net/project/clbuild/mirror/parse-number darcs get http://common-lisp.net/project/clbuild/mirror/split-sequence darcs get http://common-lisp.net/project/closer/darcs/closer-mop darcs get http://common-lisp.net/project/closer/darcs/lw-compat darcs get http://common-lisp.net/project/closer/repos/contextl darcs get http://common-lisp.net/project/ieee-floats/darcs/ieee-floats darcs get http://common-lisp.net/project/iterate/darcs/iterate darcs get http://common-lisp.net/project/rfc2109/darcs/rfc2109 darcs get http://common-lisp.net/project/trivial-utf-8/darcs/trivial-utf-8 darcs get http://common-lisp.net/project/ucw/darcs/rfc2388-binary darcs get http://common-lisp.net/~loliveira/darcs/trivial-features darcs get http://common-lisp.net/~loliveira/darcs/trivial-garbage darcs get http://common-lisp.net/~loliveira/ediware/cl-fad darcs get http://common-lisp.net/~loliveira/ediware/cl-ppcre darcs get http://common-lisp.net/~loliveira/ediware/flexi-streams git clone git://common-lisp.net/projects/alexandria/alexandria.git git clone git://common-lisp.net/projects/cffi/cffi.git git clone git://common-lisp.net/projects/mirror/cl-base64.git git clone git://common-lisp.net/projects/mirror/md5.git git clone git://common-lisp.net/projects/mirror/puri.git git clone git://dwim.hu/git/slime git clone git://github.com/antifuchs/idna.git git clone git://github.com/froydnj/ironclad.git git clone git://github.com/gwkkwg/cl-containers git clone git://github.com/gwkkwg/metabang-bind git clone git://github.com/gwkkwg/metatilities-base git clone git://github.com/gwkkwg/moptilities git clone git://gitorious.org/bordeaux-threads/bordeaux-threads.git git clone git://gitorious.org/iolib/iolib.git git clone http://common-lisp.net/project/qitab/git/command-line-arguments.git git clone http://repo.or.cz/r/closure-common.git git clone http://repo.or.cz/r/cxml.git # Compile and install libfixposix sudo apt-get install build-essential automake autoconf libtool cd ${DWIM_WORKSPACE}/libfixposix autoreconf -i mkdir build cd build ../configure make sudo make install sudo ldconfig # Build SBCL sudo apt-get install clisp cd ${DWIM_WORKSPACE}/sbcl sh ${DWIM_WORKSPACE}/sbcl/make.sh "clisp -ansi -on-error abort" # Set up file rights sudo chmod u+x,g+x,o-x ${DWIM_WORKSPACE}/hu.dwim.build/bin/*.sh sudo chmod u+x,g+x,o-x ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/*.sh sudo chmod -R o-rwx ${DWIM_WORKSPACE} sudo chmod o+rx /opt/${DWIM_PROJECT_NAME}/workspace/ sudo chmod o+rx /opt/${DWIM_PROJECT_NAME}/ sudo chmod o+rx /opt/${DWIM_PROJECT_NAME}/workspace/hu.dwim.number-toss/ sudo chmod o+rx /opt/${DWIM_PROJECT_NAME}/workspace/hu.dwim.number-toss/bin # Build the server executable sudo apt-get install libz-dev sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/build.sh # Configure the server as a unix service # Set up logging sudo mkdir --parents /var/log/${DWIM_PROJECT_NAME}/archive sudo chown -R ${DWIM_DAEMON_USER}:adm /var/log/${DWIM_PROJECT_NAME} sudo chmod ug=rwxs,o-rwx ${DWIM_INSTALL_PATH} /var/log/${DWIM_PROJECT_NAME} /var/log/${DWIM_PROJECT_NAME}/archive sudo chown root:adm ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/ ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/logrotate.conf sudo chmod u=rw,g=rx,o=rx ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/ sudo chmod u=rw,g=r,o=r ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/logrotate.conf sudo ln -s ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/logrotate.conf /etc/logrotate.d/${DWIM_PROJECT_NAME}.conf ln -s /var/log/${DWIM_PROJECT_NAME} ${DWIM_INSTALL_PATH}/log # Set up rc.d scripts to automatically start the server sudo mkdir --parents /var/run/${DWIM_PROJECT_NAME} sudo chown root:adm /var/run/${DWIM_PROJECT_NAME} ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/ ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/rc.d-script ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/ ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/rc.d-script ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/server-loop.sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/environment.sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/server-loop.sh sudo chmod ug=rwxs,o-rwx /var/run/${DWIM_PROJECT_NAME} sudo chmod u=rwx,g=rx,o=rx ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/ ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/ ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/ sudo chmod u=rwx,g=rx,o=rx ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/rc.d-script ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/rc.d-script ${DWIM_WORKSPACE}/hu.dwim.environment/etc/service-scripts/server-loop.sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/environment.sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/server-loop.sh ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/ sudo chmod u+x,g+x,o+x ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/bin/*.sh sudo ln -s ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/rc.d-script /etc/init.d/${DWIM_PROJECT_NAME} sudo update-rc.d ${DWIM_PROJECT_NAME} defaults # Set up a daily cron job sudo chmod u=rwx,g=rx,o=rx ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/ ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/cron.daily sudo chown root:adm ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/cron.daily sudo ln -s ${DWIM_WORKSPACE}/${DWIM_PROJECT_NAME}/etc/cron.daily /etc/cron.daily/00-${DWIM_PROJECT_NAME} # Increase the maximum amount of separate memory mappings on linux sudo echo "vm.max_map_count = 262144" >/etc/sysctl.d/30-sbcl.conf # Running the server to test /opt/${DWIM_PROJECT_NAME}/${DWIM_PROJECT_NAME} --verbose --repl