= !RedHat = [[TOC]] We normally recommend users to install on Debian servers wherever possible as those scripts are the best maintained. If you need to install on a !RedHat-based system then you may find the notes on this page useful: == Fedora == We have no Sahana-specific documentation, however this Web2Py script could be useful: * https://github.com/web2py/web2py/blob/master/scripts/setup-web2py-fedora.sh Also see: * http://www.web2pyslices.com/slices/take_slice/98 == CentOS 5 == CentOS 5.x comes with just Python 2.4.3, so need to add the EPEL repository to upgrade to Python26 {{{ yum install -y lrzsz yum install -y sqlite-devel zlib-devel bzip2-devel libxslt-devel yum install -y gcc wget https://fedoraproject.org/static/217521F6.txt rpm --import 217521F6.txt vim /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 5 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL [epel-debuginfo] name=Extra Packages for Enterprise Linux 5 - $basearch - Debug #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL gpgcheck=1 [epel-source] name=Extra Packages for Enterprise Linux 5 - $basearch - Source #baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL gpgcheck=1 yum install -y python26 python26-devel yum install -y python26-imaging yum install -y httpd-devel wget http://dl.fedoraproject.org/pub/epel/5/SRPMS/python26-mod_wsgi-3.3-1.el5.src.rpm rpm -ivh python26-mod_wsgi-3.3-1.el5.src.rpm yum install -y redhat-rpm-config rpmbuild -bb /usr/src/redhat/SPECS/python26-mod_wsgi.spec rpm -ivh /usr/src/redhat/RPMS/x86_64/python26-mod_wsgi-3.3-1.x86_64.rpm cat << EOF > "/etc/httpd/conf.d/python26-mod_wsgi.conf" LoadModule wsgi_module modules/python26-mod_wsgi.so WSGISocketPrefix /var/run EOF wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz tar zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 /usr/bin/python26 setup.py install cd .. wget http://pypi.python.org/packages/source/l/lxml/lxml-2.3.4.tar.gz tar zxvf lxml-2.3.4.tar.gz cd lxml-2.3.4 /usr/bin/python26 setup.py install cd .. yum install -y rpm-build wget http://pkgs.repoforge.org/geos/geos-3.2.2-1.rf.src.rpm rpm -ivh geos-3.2.2-1.rf.src.rpm rpmbuild -bb /usr/src/redhat/SPECS/geos.spec rpm -ivh /usr/src/redhat/RPMS/x86_64/geos*.rpm wget http://pypi.python.org/packages/source/S/Shapely/Shapely-1.2.14.tar.gz tar zxvf Shapely-1.2.14.tar.gz cd Shapely-1.2.14 /usr/bin/python26 setup.py install cd .. yum install -y python26-numpy python26-numpy-devel yum install -y libpng-devel wget http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.1.0/matplotlib-1.1.0.tar.gz tar zxvf matplotlib-1.1.0.tar.gz cd matplotlib-1.1.0 /usr/bin/python26 setup.py install cd .. wget http://pypi.python.org/packages/source/x/xlwt/xlwt-0.7.4.tar.gz tar zxvf xlwt-0.7.4.tar.gz cd xlwt-0.7.4 /usr/bin/python26 setup.py install cd .. wget http://pypi.python.org/packages/source/x/xlrd/xlrd-0.7.7.tar.gz tar zxvf xlrd-0.7.7.tar.gz cd xlrd-0.7.7 /usr/bin/python26 setup.py install cd .. yum install -y freetype-devel wget http://www.reportlab.com/ftp/reportlab-2.5.tar.gz tar zxvf reportlab-2.5.tar.gz cd reportlab-2.5 /usr/bin/python26 setup.py install cd .. wget http://labix.org/download/python-dateutil/python-dateutil-1.5.tar.gz tar zxvf python-dateutil-1.5.tar.gz cd python-dateutil-1.5 /usr/bin/python26 setup.py install cd .. wget http://ipython.scipy.org/dist/0.10.2/ipython-0.10.2.tar.gz tar zxvf ipython-0.10.2.tar.gz cd ipython-0.10.2 /usr/bin/python26 setup.py install cd .. yum install -y mysql-server yum install -y phpMyAdmin yum install -y python26-mysqldb /etc/init.d/mysqld start chkconfig --level 3 mysqld on chkconfig --level 4 mysqld on chkconfig --level 5 mysqld on mysqladmin -u root -p password new-password yum install -y git adduser -rd /var/www/web2py web2py cd /var/www git clone git://github.com/web2py/web2py.git cat << EOF > "/var/www/web2py/routes.py" #!/usr/bin/python26 default_application = 'eden' default_controller = 'default' default_function = 'index' routes_onerror = [ ('eden/400', '!'), ('eden/401', '!'), ('eden/*', '/eden/errors/index'), ('*/*', '/eden/errors/index'), ] EOF sed -i 's|python|python26|' /var/www/web2py/wsgihandler.py ln -s /var/www/web2py /home/web2py ln -s /var/www/web2py ~ cd web2py cd applications git clone git://github.com/flavour/eden.git # Fix permissions chown web2py ~web2py/ chown web2py ~web2py/applications/admin/cache chown web2py ~web2py/applications/admin/cron chown web2py ~web2py/applications/admin/databases chown web2py ~web2py/applications/admin/errors chown web2py ~web2py/applications/admin/sessions chown web2py ~web2py/applications/eden chown web2py ~web2py/applications/eden/cache chown web2py ~web2py/applications/eden/cron mkdir -p ~web2py/applications/eden/databases chown web2py ~web2py/applications/eden/databases chown web2py ~web2py/applications/eden/errors chown web2py ~web2py/applications/eden/models chown web2py ~web2py/applications/eden/sessions chown web2py ~web2py/applications/eden/static/img/markers mkdir -p ~web2py/applications/eden/static/cache/chart chown web2py -R ~web2py/applications/eden/static/cache chown web2py ~web2py/applications/eden/uploads mkdir -p ~web2py/applications/eden/uploads/gis_cache mkdir -p ~web2py/applications/eden/uploads/images mkdir -p ~web2py/applications/eden/uploads/tracks chown web2py ~web2py/applications/eden/uploads/gis_cache chown web2py ~web2py/applications/eden/uploads/images chown web2py ~web2py/applications/eden/uploads/tracks ln -s /home/web2py/applications/eden ~ cat << EOF > "/usr/local/bin/backup" #!/bin/sh NOW=\$(date +"%Y-%m-%d") mysqldump sahana > /root/backup-\$NOW.sql OLD=\$(date --date='7 day ago' +"%Y-%m-%d") rm -f /root/backup-\$OLD.sql EOF chmod +x /usr/local/bin/backup cat << EOF > "/usr/local/bin/compile" #!/bin/sh cd ~web2py python26 web2py.py -S eden -M -R applications/eden/static/scripts/tools/compile.py service httpd restart EOF chmod +x /usr/local/bin/compile cat << EOF > "/usr/local/bin/pull" #!/bin/sh cd ~web2py/applications/eden sed -i 's/settings.base.migrate = False/settings.base.migrate = True/g' models/000_config.py git pull # Maintenance ln -sf /etc/httpd/conf/maintenance.conf /etc/httpd/conf/vhosts.conf service httpd reload killall -u web2py python rm -rf compiled cd ~web2py sudo -H -u web2py python26 web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py cd ~web2py/applications/eden sed -i 's/settings.base.migrate = True/settings.base.migrate = False/g' models/000_config.py cd ~web2py python26 web2py.py -S eden -M -R applications/eden/static/scripts/tools/compile.py ln -sf /etc/httpd/conf/production.conf /etc/httpd/conf/vhosts.conf cd ~web2py && sudo -H -u web2py python web2py.py -K eden -Q >/dev/null 2>&1 & service httpd reload EOF chmod +x /usr/local/bin/pull cat << EOF2 > "/usr/local/bin/clean" #!/bin/sh # Maintenance ln -sf /etc/httpd/conf/maintenance.conf /etc/httpd/conf/vhosts.conf service httpd reload killall -u web2py python cd ~web2py/applications/eden rm -f databases/* rm -f errors/* rm -f sessions/* rm -rf uploads/* sed -i 's/settings.base.migrate = False/settings.base.migrate = True/g' models/000_config.py sed -i 's/settings.base.prepopulate = 0/#settings.base.prepopulate = 0/g' models/000_config.py rm -rf compiled mysqladmin -f drop sahana mysqladmin create sahana cd ~web2py sudo -H -u web2py python26 web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py cd ~web2py/applications/eden sed -i 's/settings.base.migrate = True/settings.base.migrate = False/g' models/000_config.py sed -i 's/#settings.base.prepopulate = 0/settings.base.prepopulate = 0/g' models/000_config.py cd ~web2py python26 web2py.py -S eden -M -R applications/eden/static/scripts/tools/compile.py ln -sf /etc/httpd/conf/production.conf /etc/httpd/conf/vhosts.conf cd ~web2py && sudo -H -u web2py python web2py.py -K eden -Q >/dev/null 2>&1 & service httpd reload EOF2 chmod +x /usr/local/bin/clean cat << EOF > "/usr/local/bin/w2p" #!/bin/sh cd ~web2py python26 web2py.py -S eden -M EOF chmod +x /usr/local/bin/w2p }}} {{{ #!/bin/sh # Script to configure an Eden server # - assumes that install-eden-apache-mysql.sh has been run echo -e "What domain name should we use? : \c " read DOMAIN echo -e "What host name should we use? : \c " read hostname sitename=$hostname".$DOMAIN" echo -e "What is the current root MySQL password: \c " read rootpw # @ToDo: Generate a random password echo -e "What should be the MySQL password for user 'sahana': \c " read password echo "Now reconfiguring system to use the hostname: $hostname" cd /etc filename="hosts" sed -i "s|localdomain localhost|localdomain localhost $hostname|" $filename cd /etc filename="hostname" echo $hostname > $filename cd /etc filename="mailname" echo $sitename > $filename # ----------------------------------------------------------------------------- # Update system # in case run at a much later time than the install script # ----------------------------------------------------------------------------- yum update # If using the bleeding edge Web2py: cd ~web2py git pull cd ~web2py/applications/eden git pull # ----------------------------------------------------------------------------- # Email # ----------------------------------------------------------------------------- #echo configure for Internet mail delivery #dpkg-reconfigure exim4-config # ----------------------------------------------------------------------------- # Apache Web server # ----------------------------------------------------------------------------- echo "Setting up Web server" sed -i 's|#NameVirtualHost \*:80|NameVirtualHost \*:80|' /etc/httpd/conf/httpd.conf cat << EOF >> "/etc/httpd/conf/httpd.conf" Include conf/vhosts.conf EOF cat << EOF > "/etc/httpd/conf/production.conf" ServerName $hostname.$DOMAIN ServerAdmin webmaster@$DOMAIN DocumentRoot /var/www/web2py/applications WSGIScriptAlias / /var/www/web2py/wsgihandler.py ## Edit the process and the maximum-requests to reflect your RAM WSGIDaemonProcess web2py user=web2py group=web2py home=/var/www/web2py processes=4 maximum-requests=100 RewriteEngine On # Stop GoogleBot from slowing us down RewriteRule .*robots\.txt$ /eden/static/robots.txt [L] # extract desired cookie value from multiple-cookie HTTP header #RewriteCond %{HTTP_COOKIE} registered=([^;]+) # check that cookie value is correct #RewriteCond %1 ^yes$ #RewriteRule ^/$ /eden/ [R,L] #RewriteRule ^/$ /eden/static/index.html [R,L] RewriteCond %{REQUEST_URI} !/phpmyadmin(.*) RewriteCond %{REQUEST_URI} !/eden/(.*) RewriteRule /(.*) /eden/$1 [R] ### static files do not need WSGI Order Allow,Deny Allow from all SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary ExpiresActive On ExpiresByType text/html "access plus 1 day" ExpiresByType text/javascript "access plus 1 week" ExpiresByType text/css "access plus 2 weeks" ExpiresByType image/ico "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ### everything else goes over WSGI Order deny,allow Allow from all WSGIProcessGroup web2py ErrorLog /var/log/httpd/$hostname_error.log LogLevel warn CustomLog /var/log/httpd/$hostname_access.log combined EOF ln -sf /etc/httpd/conf/production.conf /etc/httpd/conf/vhosts.conf service httpd restart cat << EOF > "/etc/httpd/conf/maintenance.conf" ServerName $hostname.$DOMAIN ServerAdmin webmaster@$DOMAIN DocumentRoot /var/www RewriteEngine On RewriteCond %{REQUEST_URI} !/phpmyadmin(.*) RewriteRule ^/(.*) /maintenance.html Order deny,allow Allow from all ErrorLog /var/log/httpd/maintenance_error.log LogLevel warn CustomLog /var/log/httpd/maintenance_access.log combined EOF # ----------------------------------------------------------------------------- # MySQL Database # ----------------------------------------------------------------------------- echo "Setting up Database" # Allow root user to access database without entering password cat << EOF > "/root/.my.cnf" [client] user=root EOF echo "password='$rootpw'" >> "/root/.my.cnf" # Create database mysqladmin create sahana # Create user for Sahana application echo "CREATE USER 'sahana'@'localhost' IDENTIFIED BY '$password';" > "/tmp/mypass" echo "GRANT ALL PRIVILEGES ON *.* TO 'sahana'@'localhost' WITH GRANT OPTION;" >> "/tmp/mypass" mysql < /tmp/mypass rm -f /tmp/mypass # Schedule backups for 02:01 daily echo "1 2 * * * * root /usr/local/bin/backup" >> "/etc/crontab" # ----------------------------------------------------------------------------- # Sahana Eden # ----------------------------------------------------------------------------- echo "Setting up Sahana" # Copy Templates cp ~web2py/applications/eden/modules/templates/000_config.py ~web2py/applications/eden/models sed -i 's|EDITING_CONFIG_FILE = False|EDITING_CONFIG_FILE = True|' ~web2py/applications/eden/models/000_config.py sed -i "s|akeytochange|$sitename$password|" ~web2py/applications/eden/models/000_config.py sed -i "s|127.0.0.1:8000|$sitename|" ~web2py/applications/eden/models/000_config.py sed -i 's|base.cdn = False|base.cdn = True|' ~web2py/applications/eden/models/000_config.py # Configure Database sed -i 's|#settings.database.db_type = "mysql"|settings.database.db_type = "mysql"|' ~web2py/applications/eden/models/000_config.py sed -i "s|#settings.database.password = \"password\"|settings.database.password = \"$password\"|" ~web2py/applications/eden/models/000_config.py # Create the Tables & Populate with base data sed -i 's|settings.base.prepopulate = 0|settings.base.prepopulate = 1|' ~web2py/applications/eden/models/000_config.py sed -i 's|settings.base.migrate = False|settings.base.migrate = True|' ~web2py/applications/eden/models/000_config.py cd ~web2py sudo -H -u web2py python web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py # Configure for Production sed -i 's|settings.base.prepopulate = 1|settings.base.prepopulate = 0|' ~web2py/applications/eden/models/000_config.py sed -i 's|settings.base.migrate = True|settings.base.migrate = False|' ~web2py/applications/eden/models/000_config.py cd ~web2py sudo -H -u web2py python web2py.py -S eden -R applications/eden/static/scripts/tools/compile.py # Add Scheduler sed -i 's|exit 0|cd ~web2py \&\& python26 web2py.py -K eden -Q >/dev/null 2>\&1 \&|' /etc/rc.local echo "exit 0" >> /etc/rc.local #read -p "Press any key to Reboot..." echo "Now rebooting.." reboot # END }}} @ToDo: matplotlib config (/etc/matplotlibrc not found) === Next === [wiki:UserGuidelines/Admin Administration Guide] === CentOS alternate options === These are notes on some possible alternate options Install a local version of Python27: {{{ mkdir -p /opt/python2.7 wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 tar -jxvf Python-2.7.3.tar.bz2 cd Python-2.7.3 ./configure --prefix=/opt/python2.7 --with-threads --enable-shared make && make install cd .. ln -s /opt/python2.7/lib/libpython2.7.so /usr/lib ln -s /opt/python2.7/lib/libpython2.7.so.1.0 /usr/lib ln -s /opt/python2.7/bin/python /usr/local/bin/python ln -s /opt/python2.7/bin/python /usr/bin/python2.7 ln -s /opt/python2.7/lib/python2.7.so /opt/python2.6/lib/python2.7/config/ /sbin/ldconfig wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz tar -xzf mod_wsgi-3.3.tar.gz cd mod_wsgi-3.3 ./configure --with-python=/usr/local/bin/python make && make install cd .. echo "LoadModule wsgi_module modules/mod_wsgi.so" > /etc/httpd/conf.d/wsgi.conf Use: /opt/python2.7/bin/python wget http://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.3.tar.gz tar zxvf MySQL-python-1.2.3.tar.gz cd MySQL-python-1.2.3 /opt/python2.7/bin/python setup.py install cd .. # PostgreSQL 8.1.x in CentOS 5! Better to use MySQL #wget http://pkgs.repoforge.org/proj/proj-4.7.0-1.el5.rf.i386.rpm #wget http://pkgs.repoforge.org/postgis/postgis-1.3.6-1.el5.rf.i386.rpm #rpm -ivh proj-4.7.0-1.el5.rf.i386.rpm #rpm -ivh postgis-1.3.6-1.el5.rf.i386.rpm #yum install postgresql postgresql-server postgresql-devel #wget http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz #tar zxvf psycopg2-2.4.2.tar.gz #cd psycopg2-2.4.2 #/opt/python2.6/bin/python setup.py install #cd .. #/etc/init.d/postgresql start }}}