= CDS Indico 0.97b to 0.98rc1 migration on Debian Squeeze, ''by Cristiano Valli'' = == Source Documentation Reference == http://indico-software.org/wiki/Admin/Installation0.98 http://indico-software.org/wiki/Releases/Indico0.98-rc1#Upgrading http://indico-software.org/wiki/Releases/Indico0.97.1#fromv0.97borGitRepo == OS type == Debian GNU/Linux 6.0 \n \l == Debian Package Requirements: == You just have to install standard Indico required packages python-dev (straightforward) that's necessary to compile ZODB latest release using python setuptools easy_install util. This is the command you have to perform: {{{ #apt-get install apache2 libapache2-mod-wsgi python python-dev python-tz python-zopeinterface python-setuptools python-reportlab python-libxslt1 python-libxml2 python-imaging python-dateutil python-support libxslt1-dev libxml2-dev #a2enmod wsgi }}} == CDS Indico 0.98rc1 installation steps == Basically if you installed all packages required you can use python setuptools to install everything you need for successful Indico installation. These are actions you have to perform: # upgrade setuptools to latest release (from http://pypi.python.org/pypi/setuptools): {{{ #easy_install -U setuptools }}} # install Indico and all dependencies using setuptools: {{{ #easy_install indico Searching for indico Reading http://pypi.python.org/simple/indico/ Reading http://indico-software.org Reading http://indico-software.org/wiki/Releases/Indico0.98-rc1 Best match: indico 0.98-rc1 Downloading http://indico-software.org/download/indico/indico-0.98_rc1-py2.6.egg Processing indico-0.98_rc1-py2.6.egg creating /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg Extracting indico-0.98_rc1-py2.6.egg to /usr/local/lib/python2.6/dist-packages Adding indico 0.98-rc1 to easy-install.pth file Installing indico_livesync script to /usr/local/bin Installing indico_scheduler script to /usr/local/bin Installing indico_initial_setup script to /usr/local/bin Installing indico_ctl script to /usr/local/bin Installing indico_shell script to /usr/local/bin Installed /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg Reading http://indico-software.org/wiki/Admin/Installation/IndicoExtras Processing dependencies for indico Searching for argparse Reading http://pypi.python.org/simple/argparse/ Reading http://code.google.com/p/argparse/ Best match: argparse 1.2.1 Downloading http://argparse.googlecode.com/files/argparse-1.2.1.tar.gz Processing argparse-1.2.1.tar.gz Running argparse-1.2.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-VPCGu1/argparse-1.2.1/egg-dist-tmp-Tz9EQ3 warning: no previously-included files matching '*.pyc' found anywhere in distribution warning: no previously-included files matching '*.pyo' found anywhere in distribution warning: no previously-included files matching '*.orig' found anywhere in distribution warning: no previously-included files matching '*.rej' found anywhere in distribution no previously-included directories found matching 'doc/_build' no previously-included directories found matching 'env24' no previously-included directories found matching 'env25' no previously-included directories found matching 'env26' no previously-included directories found matching 'env27' zip_safe flag not set; analyzing archive contents... Adding argparse 1.2.1 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/argparse-1.2.1-py2.6.egg Searching for pyatom Reading http://pypi.python.org/simple/pyatom/ Reading http://bitbucket.org/sramana/pyatom Best match: pyatom 1.2 Downloading http://pypi.python.org/packages/source/p/pyatom/pyatom-1.2.tar.gz#md5=672f635773cf502813f908a0faae7d2e Processing pyatom-1.2.tar.gz Running pyatom-1.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-CDcrW1/pyatom-1.2/egg-dist-tmp-2CZaMa zip_safe flag not set; analyzing archive contents... Adding pyatom 1.2 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/pyatom-1.2-py2.6.egg Searching for icalendar Reading http://pypi.python.org/simple/icalendar/ Reading http://codespeak.net/icalendar/ Reading https://github.com/collective/icalendar Reading https://gihub.com/collective/icalendar Download error on https://gihub.com/collective/icalendar: timed out -- Some packages may not be found! Best match: icalendar 3.0.1b1 Downloading http://pypi.python.org/packages/source/i/icalendar/icalendar-3.0.1b1.tar.gz#md5=419a06afbd5eef1325c762baf5ae4ead Processing icalendar-3.0.1b1.tar.gz Running icalendar-3.0.1b1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-FfMH28/icalendar-3.0.1b1/egg-dist-tmp-9K1zNz warning: no previously-included files matching '*.pyc' found under directory 'src/icalendar' Adding icalendar 3.0.1b1 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/icalendar-3.0.1b1-py2.6.egg Searching for babel Reading http://pypi.python.org/simple/babel/ Reading http://babel.edgewall.org/ Reading http://babel.edgewall.org/wiki/Download Best match: Babel 0.9.6 Downloading http://pypi.python.org/packages/2.6/B/Babel/Babel-0.9.6-py2.6.egg#md5=e66698fb97c8dc0a7c6b7b86c91d62be Processing Babel-0.9.6-py2.6.egg creating /usr/local/lib/python2.6/dist-packages/Babel-0.9.6-py2.6.egg Extracting Babel-0.9.6-py2.6.egg to /usr/local/lib/python2.6/dist-packages Adding Babel 0.9.6 to easy-install.pth file Installing pybabel script to /usr/local/bin Installed /usr/local/lib/python2.6/dist-packages/Babel-0.9.6-py2.6.egg Searching for mako>=0.4.1 Reading http://pypi.python.org/simple/mako/ Reading http://www.makotemplates.org/ Best match: Mako 0.6.2 Downloading http://pypi.python.org/packages/source/M/Mako/Mako-0.6.2.tar.gz#md5=b467eb01c2227e205784faa3bef96725 Processing Mako-0.6.2.tar.gz Running Mako-0.6.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-aEikLi/Mako-0.6.2/egg-dist-tmp-6dMMsz warning: no files found matching '*.xml' under directory 'examples' warning: no files found matching '*.mako' under directory 'examples' warning: no files found matching 'ez_setup.py' no previously-included directories found matching 'doc/build/output' Adding Mako 0.6.2 to easy-install.pth file Installing mako-render script to /usr/local/bin Installed /usr/local/lib/python2.6/dist-packages/Mako-0.6.2-py2.6.egg Searching for pypdf Reading http://pypi.python.org/simple/pypdf/ Reading http://pybrary.net/pyPdf/ Reading http://stompstompstomp.com/pyPdf/ Download error on http://stompstompstomp.com/pyPdf/: [Errno -5] No address associated with hostname -- Some packages may not be found! Reading http://stompstompstomp.com/pyPdf/ Download error on http://stompstompstomp.com/pyPdf/: [Errno -5] No address associated with hostname -- Some packages may not be found! Reading http://stompstompstomp.com/pyPdf/ Download error on http://stompstompstomp.com/pyPdf/: [Errno -5] No address associated with hostname -- Some packages may not be found! Reading http://stompstompstomp.com/pyPdf/ Download error on http://stompstompstomp.com/pyPdf/: [Errno -5] No address associated with hostname -- Some packages may not be found! Best match: pyPdf 1.13 Downloading http://pybrary.net/pyPdf/pyPdf-1.13.zip Processing pyPdf-1.13.zip Running pyPdf-1.13/setup.py -q bdist_egg --dist-dir /tmp/easy_install-sd0d0P/pyPdf-1.13/egg-dist-tmp-euJ0Lx zip_safe flag not set; analyzing archive contents... Adding pyPdf 1.13 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/pyPdf-1.13-py2.6.egg Searching for zc.queue Reading http://pypi.python.org/simple/zc.queue/ Best match: zc.queue 1.3 Downloading http://pypi.python.org/packages/source/z/zc.queue/zc.queue-1.3.tar.gz#md5=93113bec10a9ddb51b774607fe2a683d Processing zc.queue-1.3.tar.gz Running zc.queue-1.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-YNpmt7/zc.queue-1.3/egg-dist-tmp-hkH05V Adding zc.queue 1.3 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/zc.queue-1.3-py2.6.egg Searching for lxml Reading http://pypi.python.org/simple/lxml/ Reading http://codespeak.net/lxml Best match: lxml 2.3.3 Downloading http://pypi.python.org/packages/source/l/lxml/lxml-2.3.3.tar.gz#md5=a7825793c69d004f388ec6600bad7a6f Processing lxml-2.3.3.tar.gz Running lxml-2.3.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-JkrfXI/lxml-2.3.3/egg-dist-tmp-1sZrc5 Building lxml version 2.3.3. Building without Cython. Using build configuration of libxslt 1.1.26 Building against libxml2/libxslt in the following directory: /usr/lib Adding lxml 2.3.3 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/lxml-2.3.3-py2.6-linux-i686.egg Searching for MarkupSafe>=0.9.2 Reading http://pypi.python.org/simple/MarkupSafe/ Reading http://dev.pocoo.org/ Best match: MarkupSafe 0.15 Downloading http://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.15.tar.gz#md5=4e7c4d965fe5e033fa2d7bb7746bb186 Processing MarkupSafe-0.15.tar.gz Running MarkupSafe-0.15/setup.py -q bdist_egg --dist-dir /tmp/easy_install-0Osck9/MarkupSafe-0.15/egg-dist-tmp-_ju01C Adding MarkupSafe 0.15 to easy-install.pth file Installed /usr/local/lib/python2.6/dist-packages/MarkupSafe-0.15-py2.6-linux-i686.egg Finished processing dependencies for indico }}} if you experience some errors during dependencies installation process you can use easy_install to setup manually, like: {{{ #easy_install -U pytz #easy_install -U reportlab #easy_install -U simplejson }}} this is an extract of standard Debian Lenny python installation libraries after indico setup: {{{ # ls /usr/local/lib/python2.6/dist-packages/ argparse-1.2.1-py2.6.egg JSTools-0.6-py2.6.egg reportlab-2.5-py2.6-linux-i686.egg ZConfig-2.9.2-py2.6.egg Babel-0.9.6-py2.6.egg lxml-2.3.3-py2.6-linux-i686.egg setuptools-0.6c11-py2.6.egg-info zc.queue-1.3-py2.6.egg cds_indico_extras-0.2-py2.6.egg Mako-0.6.2-py2.6.egg setuptools.pth zdaemon-2.0.4-py2.6.egg distribute-0.6.24-py2.6.egg MarkupSafe-0.15-py2.6-linux-i686.egg simplejson-2.3.2-py2.6-linux-i686.egg ZODB3-3.10.5-py2.6-linux-i686.egg easy-install.pth pyatom-1.2-py2.6.egg suds-0.4-py2.6.egg zope.event-3.5.1-py2.6.egg icalendar-3.0.1b1-py2.6.egg pyPdf-1.13-py2.6.egg transaction-1.2.0-py2.6.egg zope.index-3.6.3-py2.6-linux-i686.egg indico-0.98_rc1-py2.6.egg pytz-2011n-py2.6.egg zc.lockfile-1.0.0-py2.6.egg }}} # after indico installation (into /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg/) you will have 3 configuration files you have to edit for your custom indico site configuration: /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg/etc/indico.conf.sample /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg/etc/zdctl.conf.sample /usr/local/lib/python2.6/dist-packages/indico-0.98_rc1-py2.6.egg/etc/zodb.conf.sample you can copy to /root and rename to .conf and edit. #* Basically for indico.conf you have to change website URL service (HTTP and HTTPS), indico directory installation data and ApacheUser and Group (look for yours into /etc/apache2/envvars): {{{ BaseURL = "https://yourip" #if your indico can be reached using https BaseSecureURL = "https://yourip" ArchiveDir = "/opt/indico/archive" BinDir = "/opt/indico/bin" ConfigurationDir = "/opt/indico/etc" DocumentationDir = "/opt/indico/doc" HtdocsDir = "/opt/indico/htdocs" LogDir = "/opt/indico/log" UploadedFilesTempDir = "/opt/indico/tmp" XMLCacheDir = "/opt/indico/cache" #------------------------------------------------------------------------------ # SMTP #------------------------------------------------------------------------------ SmtpServer = "localhost" SmtpLogin = "" SmtpPassword = "" # If your SMTP server is using TLS write "yes", otherwise write "no" SmtpUseTLS = "no" #------------------------------------------------------------------------------ # EMAIL ADDRESSES #------------------------------------------------------------------------------ # SupportEmail is the email address where all automatically generated # application errors will be sent to. SupportEmail = "root@localhost" # PublicSupportEmail is an email address that will be shown in Indico and where # users are expected to find help when they have using the website. PublicSupportEmail = "root@localhost" #------------------------------------------------------------------------------ # APACHE #------------------------------------------------------------------------------ # If you change either ApacheUser or ApacheGroup after installation and you # are on Linux you need to chown -R the directories pointed at by # - LogDir # - UploadedFilesTempDir # ApacheUser is the user that Apache runs as (Look for "User" inside httpd.conf) ApacheUser = "www-data" # ApacheGroup is the group that Apache runs as (Look for "Group" inside httpd.conf) ApacheGroup = "www-data" }}} #* /opt/indico/etc/zodb.conf (just change for your ZODB path installation and log file): address 127.0.0.1:9675 monitor-address localhost:8091 path /opt/indico/db/Data.fs path /opt/indico/log/zeo.log format %(asctime)s %(message)s #* /opt/indico/etc/zdctl.conf (change user that will run daemon - have to be apache user - ZODB configuraration file and socket path): program runzeo -C /opt/indico/etc/zodb.conf user www-data daemon true directory /opt/indico/db socket-name /opt/indico/db/zdsock PYTHON_EGG_CACHE /opt/indico/tmp/egg-cache # now run indico initialization with your own setup configurations: {{{ #/usr/local/bin/indico_initial_setup --existing-config=/opt/indico/etc/indico.conf }}} # optional) if you have existing database and document's archive, you can import simply with scp from old machine (in the example old archives into /otp/indico/archive and old database into /opt/indico/db/Data.fs): {{{ #scp -r root@:/opt/indico/archive /opt/indico/. #scp -r root@:/opt/indico/db/Data.fs /opt/indico/db/. }}} if you have to migrate from old version (we did from 0.97b) you just have to: -start ZODB instance and migrate from previous DB version: cd /opt/indico zdaemon -C etc/zdctl.conf start python ./bin/migration/migrate_0.97_0.98.py --prev-version=0.97 -purge upcomingEvents from existing Database instance using this command: python -c "from MaKaC.common.db import DBMgr; DBMgr.getInstance().startRequest(); from indico.modules import ModuleHolder; del ModuleHolder()._getIdx()['upcoming_events']; DBMgr.getInstance().endRequest()" Remark: it's important to check permissions on indico destination directory! {{{ #chown -R www-data:www-data /opt/indico }}} There are also other tools that can be useful after a re-import of old archives. You can find into bin/maintenance/. You can use to rebuild category indexes, name, dates, cleanup existing websessions and pack database: {{{ #cd /opt/indico #python ./bin/maintenance/cleanupWebSessions.py #python ./bin/maintenance/category_integrity.py #python ./bin/maintenance/fix_utf8_errors.py #python ./bin/maintenance/packDB.py #python ./bin/maintenance/indexes/all_index_check.py #python ./bin/maintenance/indexes/reindexcategories.py #python ./bin/maintenance/indexes/reindexcategorynameindex.py #python ./bin/maintenance/indexes/reindexcategorydateindex.py }}} # to start CDS Indico you can use new scheduler: {{{ #sudo -u www-data /usr/local/bin/indico_scheduler -f start }}} you have 3 options: -start Indico daemon: {{{ #sudo -u www-data /usr/local/bin/indico_scheduler -f start }}} -stop: {{{ #sudo -u www-data /usr/local/bin/indico_scheduler stop }}} -restart: {{{ #sudo -u www-data /usr/local/bin/indico_scheduler stop #sudo -u www-data /usr/local/bin/indico_scheduler -f start }}} # add Indico configuration to your apache VirtualHost website config, just like this example (for HTTPS): {{{ #vi /etc/apache2/sites-enabled/ ... AddDefaultCharset UTF-8 NameVirtualHost *:443 ServerSignature On ServerAdmin webmaster@localhost ServerName ServerAlias DocumentRoot /opt/indico/htdocs Options FollowSymLinks AllowOverride None Alias /indico/images "/opt/indico/htdocs/images" Alias /indico/css "/opt/indico/htdocs/css" Alias /indico/js "/opt/indico/htdocs/js" Alias /indico/ihelp "/opt/indico/htdocs/ihelp" WSGIScriptAlias / "/opt/indico/htdocs/index.wsgi" BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown ... }}} # add Indico configuration to your apache VirtualHost website config, just like this example (for HTTP): {{{ #vi /etc/apache2/sites-enabled/ ... AddDefaultCharset UTF-8 NameVirtualHost *:80 ServerAdmin webmaster@localhost ServerName DocumentRoot /opt/indico/htdocs Alias /indico/images "/opt/indico/htdocs/images" Alias /indico/css "/opt/indico/htdocs/css" Alias /indico/js "/opt/indico/htdocs/js" Alias /indico/ihelp "/opt/indico/htdocs/ihelp" WSGIDaemonProcess WSGIDAEMON processes=1 threads=1 inactivity-timeout=3600 maximum-requests=10000 \ python-eggs=/opt/indico/tmp/egg-cache WSGIScriptAlias / "/opt/indico/htdocs/index.wsgi" WSGIProcessGroup WSGIDAEMON WSGIApplicationGroup %{GLOBAL} AllowOverride None Options None Order deny,allow Allow from all ... }}} # start apache2: {{{ #/etc/init.d/apache2 start }}} # start/stop of ZODB and Indico into indico init.d custom script: {{{ #!/bin/bash PATH=/usr/local/bin:/bin:/usr/bin DAEMON="Indico" ZODB_CMD="zdaemon -C /opt/indico/etc/zdctl.conf" INDICO_CMD="sudo -u www-data /usr/local/bin/indico_scheduler" # INDICO_CMD="python /usr/local/lib/python2.6/dist-packages/cds_indico-0.97.1-py2.6.egg/MaKaC/consoleScripts/taskDaemon.py" ## INDICO_CMD="python /usr/lib/python2.5/site-packages/cds_indico-0.97b-py2.5.egg/MaKaC/consoleScripts/taskDaemon.py" # Get lsb functions . /lib/lsb/init-functions . /etc/default/rcS case "$1" in start) log_begin_msg "Starting $DAEMON services..." # $DAEMON $OPTIONS_START $ZODB_CMD start $INDICO_CMD -f start log_end_msg $? ;; stop) log_begin_msg "Stopping $DAEMON services..." # $DAEMON $OPTIONS_STOP $ZODB_CMD stop kill -TERM `ps aux|grep indico|grep -v grep| awk '{print $2}'` kill -KILL `ps aux|grep indico|grep -v grep| awk '{print $2}'` #$INDICO_CMD stop log_end_msg $? ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0 }}} after this you can save and just to restart the entire chain you can type: {{{ #/etc/init.d/apache2 stop #/etc/init.d/indico stop #/etc/init.d/indico start #/etc/init.d/apache2 start }}}