#!/bin/bash RED="`echo -e "\e[31m"`" RESET="`echo -e "\e[0m"`" msg() { echo $RED"$@"$RESET } if ! grep contrib /etc/apt/sources.list >>/dev/null; then msg --- You do not have contrib in your /etc/apt/sources.list msg --- Please add this before continuing. msg --- For more information, see:$RESET man 5 sources.list exit 1 fi apt-get -uy install java-package gcc g++ locales-all ARCH="`uname -m`" if [ "$ARCH" == "x86_64" ]; then JAVAARCH="amd64" else JAVAARCH="i586" fi has_jdk() { if [ -f "$1"'/jdk-1_5_0_09-linux-'$JAVAARCH'.bin' -a \ "`stat -c "%s" "$1"'/jdk-1_5_0_09-linux-'$JAVAARCH'.bin'`" -gt "10485760" ] 2>/dev/null; then return 0 else return 1 fi } has_correct_java() { jv="`java -version 2>&1`" echo $jv | grep '1.5' >/dev/null j="$?" echo $jv | grep "Java(TM) 2 Runtime Environment" >/dev/null j2="$?" echo $jv | grep "gij" >/dev/null j3="$?" if [ "$j" -eq 0 -a "$j2" -eq 0 -a "$j3" -eq 1 ]; then return 0 else return 1 fi } usr="nobody" while ! has_correct_java; do while [ "$usr" == "nobody" ]; do msg --- Please enter user to fakeroot java as: echo This script assumes the user can use the fakeroot command, owns his own '$HOME', echo and only has the .deb-package that this script creates there. You might want to check. read -p "Username: " usr usrhome="`egrep "^$usr:" /etc/passwd|cut -d: -f6`" if [ ! -d $usrhome ]; then echo "The user's home directory $usrhome is invalid"; usr="nobody" fi done if has_jdk $usrhome; then msg --- File 'jdk-1_5_0_09-linux-'$JAVAARCH'.bin' already exists in $usrhome, msg --- assuming java is correctly downloaded. else msg --- Please enter a wget-able location of jdk-1_5_0_09-linux-"$JAVAARCH".bin msg --- See http://java.sun.com/products/archive/ read -p "URL: " URL wget --progress=dot "$URL" -O "$usrhome"'/jdk-1_5_0_09-linux-'$JAVAARCH'.bin' chown $usr "$usrhome"'/jdk-1_5_0_09-linux-'$JAVAARCH'.bin' fi # fakeroot can't be done as root. if ! has_jdk $usrhome; then echo File nonexistant or less than 10MiB, it looks unlikely to be the correct file. continue fi if [ -f "$usrhome/"*".deb" ]; then msg --- A .deb-file already exists in the user\'s home, assuming java msg --- is correctly fakerooted. else su - $usr -c 'fakeroot make-jpkg jdk-1_5_0_09-linux-'$JAVAARCH'.bin' fi dpkg -i $usrhome/*.deb msg --- If you have more than one Java-version, plese pick 1.5 here. update-alternatives --config java hash -r if ! has_correct_java; then msg --- Java still doesn\'t exist, or reports it\'s version to be something msg --- other than 1.5. YES="retry" read -p "${RED}Retry, exit, or continue?$RESET [r/e/c]: " YES case "$YES" in r|R|re*|Re*) continue;; e*|E*|q*|Q*) exit 1;; c*|C*) break;; *) echo "Not a valid option. Retrying per default." esac else msg --- Installation successful. fi done msg --- Installing dependencies. apt-get -uy install python-pyparsing w3c-markup-validator ant antlr python-numpy memcached subversion postgresql python-psycopg python-psycopg2 python-soappy python-libxml2 python-libxslt1 swig libglib2.0-dev python-dateutil python-adns libgmp3-dev python-lxml libservlet2.3-java zlib1g-dev python-setuptools hash -r easy_install phpserialize sed 's/w3c-markup-validator/w3c-validator/' -i /etc/apache2/conf.d/w3c-markup-validator.conf mkdir -p /data/src download() { if [ -f "`basename $1`" ]; then echo "`basename $1`" allready there. else echo "`pwd`/`basename $1` not found, downloading." wget --progress=dot "$1" -O "`basename $1`" || (rm -f "`basename $1`"; echo "Download fail"; exit 1) fi } if ! which python2.1 >/dev/null; then msg --- Instaling Python 2.1 for Jython-use. sleep 10 cd /data/src download "http://www.python.org/ftp/python/2.1.3/Python-2.1.3.tgz" tar -xvzf "Python-2.1.3.tgz" cd Python-2.1.3 ./configure make make install #Remove python-2.1 as default python version rm /usr/local/bin/python fi `/usr/lib/Jython-2.1/jython -c exit` if [ $? -eq 127 ]; then msg --- Installing Jython sleep 10 cd /data/src download http://mesh.dl.sourceforge.net/sourceforge/jython/jython-21.class java -classpath . jython-21 -o /usr/lib/Jython-2.1 demo lib source fi if ! which proctorbatch >/dev/null; then msg --- Installing Proctor cd /data/src download http://www.doughellmann.com/downloads/Proctor-1.5.tar.gz tar xvf Proctor-1.5.tar.gz cd Proctor-1.5 python setup.py install fi # {{{ Haskell if [ "$ARCH" == "x86_64" ]; then GHCURI="http://haskell.org/ghc/dist/6.12.1/ghc-6.12.1-x86_64-unknown-linux-n.tar.bz2" else GHCURI="http://www.haskell.org/ghc/dist/6.12.1/ghc-6.12.1-i386-unknown-linux-n.tar.bz2" fi if ! which ghc >/dev/null; then msg --- Installing GHC cd /data/src download $GHCURI tar xvf `basename $GHCURI` pushd ghc-*/ ./configure make install popd rm -rf ghc-*/ fi hash -r CABALURI="http://haskell.org/cabal/release/cabal-install-0.8.2/cabal-install-0.8.2.tar.gz" if ! which cabal >/dev/null; then cd /data/src download $CABALURI tar xvf "`basename $CABALURI`" pushd cabal-install*/ sh bootstrap.sh --global popd rm -rf cabal-install*/ hash -r fi cabal update if ! ghc-pkg list | grep tagchup >/dev/null; then msg --- Installing tagchup with cabal-install cabal install tagchup --global fi # }}} msg --- Installing/configuring PostgreSQL YES=n if [ -d '/data/postgresql' ]; then msg -- PostgreSQL appears to already be installed. read -p "${RED}Would you like to try to install it again?$RESET [y/n]: " YES case "$YES" in y*|Y*) YES=y;; *) YES=n;; esac fi if [ ! -d '/data/postgresql' -o "$YES" == "y" ]; then mkdir -p /data/postgresql chown postgres:postgres /data/postgresql su postgres -c'/usr/lib/postgresql/8.3/bin/initdb -D /data/postgresql/' PGCONF="/data/postgresql/postgresql.conf" CTLCONF="/etc/sysctl.conf" if grep max_connections $PGCONF >>/dev/null; then sed 's/#\?max_connections =.*/max_connections = 2000/' -i $PGCONF else echo "max_connections = 2000" >> $PGCONF fi if grep shared_buffers $PGCONF >>/dev/null; then sed 's/#\?shared_buffers =.*/shared_buffers = 256MB/' -i $PGCONF else echo "shared_buffers = 256MB" >> $PGCONF fi if grep work_mem $PGCONF >>/dev/null; then sed 's/#\?work_mem =.*/work_mem = 64MB/' -i $PGCONF else echo "work_mem = 64MB" >> $PGCONF fi if grep maintenance_work_mem $PGCONF >>/dev/null; then sed 's/#\?maintenance_work_mem =.*/maintenance_work_mem = 512MB/' -i $PGCONF else echo "maintenance_work_mem = 512MB" >> $PGCONF fi if grep checkpoint_segments $PGCONF >>/dev/null; then sed 's/#\?checkpoint_segments =.*/checkpoint_segments = 32/' -i $PGCONF else echo "checkpoint_segments = 32" >> $PGCONF fi if grep 'kernel.shmmax' $CTLCONF >>/dev/null; then sed 's/#\?kernel\.shmmax.*/kernel\.shmmax=549199872/' -i $CTLCONF else echo "kernel.shmmax=549199872" >>$CTLCONF fi if grep 'kernel.sem' $CTLCONF >>/dev/null; then sed 's/#\?kernel\.sem.*/kernel.sem=250 32000 32 512/' -i $CTLCONF else echo "kernel.sem=250 32000 32 512" >> $CTLCONF fi /sbin/sysctl -p nohup su postgres -c '/usr/lib/postgresql/8.3/bin/pg_ctl -D /data/postgresql -l /var/log/postgresql/pg.log start' >/dev/null 2>&1 & sleep 5 if ! ps aux|grep postgres >> /dev/null; then msg --- PostgreSQL wouldn\'t start for some reason. Inspecting log-file and bailing.. tail -50 /var/log/postgresql/pg.log exit 1 fi fi msg --- Installing eGovMon. mkdir -p /data/svn/eGovMon/ mkdir -p /var/log/egovmon mkdir -p /var/lock/subsys cd /data/svn/eGovMon svn co http://svn.egovmon.no/svn/eGovMon/trunk cd trunk python setup.py install msg --- Editing configuration-file. sed 's@>/data/svn/eGovMon<@>/data/svn/eGovMon/trunk<@' -i /etc/egovmon/initial.rdf sleep 10 vim /etc/egovmon/initial.rdf msg --- Done.