Pages enfant
  • Installation sur une debian

Préambule

Nous décrivons ici l'installation d'un esup-portail 3.2 avec mysql et frontal apache sur une debian 5.0 ou 6.0, sous forme d'une liste d'instructions shell le plus reproductible/automatisé possible.

Nous supposons que vous possédez une infrastructure en place avec un DNS, CAS et un serveur openLDAP en production.

Dans ce qui va suivre, notre machine s'appelle entergo-unpidf.univ-paris1.fr

Références

Cet article se base sur les articles :

Télécharger les packages de source

En tant qu'utilisateur root :

mkdir -p /usr/local/src
cd /usr/local/src
sudo wget http://apache.multidist.com/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
sudo wget http://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz
sudo wget https://sourcesup.cru.fr/frs/download.php/3562/esup-uPortal-3.2.4-esup-1.0.0-RC3.tar.gz
echo '928a960268adf610a7d6fe5c4fcd0b20 *apache-tomcat-6.0.32.tar.gz' | md5sum -c -
echo 'cc5777c57c4e8269be5f3d1dc515301c *apache-ant-1.7.1-bin.tar.gz' | md5sum -c -
echo '17366476588f4bcaa3cc331232fc01b0 *esup-uPortal-3.2.4-esup-1.0.0-RC3.tar.gz' | md5sum -c -

Configurer le frontal apache

Créer /etc/apache2/sites-available/entergo-unpidf avec :

<VirtualHost *:80 >

<Proxy balancer://entCluster>
        BalancerMember ajp://localhost:8009 route=ent1 retry=1
        Order deny,allow
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://entCluster/ stickysession=JSESSIONID nofailover=Off

<Location /balancer-manager>
        SetHandler balancer-manager
        Order allow,deny
        Allow from xxx.univ-xxx.fr
</Location>

ServerName entergo-unpidf.univ-paris1.fr
ServerAlias entergo-unpidf

ErrorLog /var/log/apache2/entergo-unpidf-error.log
CustomLog /var/log/apache2/entergo-unpidf-access.log combined


# restreindre l'acces a certaines choses, notamment les web services
<Location ~ "/(EsupMonitor|private|problems|services|monitor)">
  Order allow,deny
  Allow from univ-paris1.fr
</Location>

# Interdit en mode non SSL
<Location /jkstatus>
  Order allow,deny
</Location>

</VirtualHost>

Puis

sudo a2enmod proxy_balancer proxy_ajp
sudo a2ensite entergo-unpidf
sudo a2dissite 000-default

sudo /etc/init.d/apache2 restart

Installer java

sudo apt-get install sun-java6-jdk

Configurer mysql

La base doit être en mode "insensible à la casse" pour respecter les standards SQL

cat <<EOF > /tmp/lower_case_table_names-esup.cnf
[mysqld]
lower_case_table_names=1
EOF
sudo cp /tmp/lower_case_table_names-esup.cnf /etc/mysql/conf.d/

sudo /etc/init.d/mysql restart

Installer ant dans /usr/local

sudo tar xzC /usr/local/ -f /usr/local/src/apache-ant-1.7.1-bin.tar.gz
sudo ln -s apache-ant-1.7.1 /usr/local/ant
sudo ln -s ../ant/bin/ant /usr/local/bin/ant

Créer l'utilisateur esup

sudo adduser --system --group --shell /bin/bash esup
sudo install -o esup -g esup -d /usr/local/esup

Installer tomcat dans /usr/local/esup

sudo -u esup tar xzC /usr/local/esup -f /usr/local/src/apache-tomcat-6.0.32.tar.gz
sudo -u esup ln -s apache-tomcat-6.0.32 /usr/local/esup/tomcat

Installer esup-uPortal dans /usr/local/esup

sudo -u esup tar xzC /usr/local/esup -f /usr/local/src/esup-uPortal-3.2.4-esup-1.0.0-RC3.tar.gz
sudo -u esup ln -s esup-uPortal-3.2.4-esup-1.0.0-RC3 /usr/local/esup/esup-package

Configurer esup-uPortal

cd /usr/local/esup/esup-package
sudo -u esup cp build.sample.properties build.properties
sudo -u esup perl -pi -e 's!^java_home=\S+!java_home=/usr/lib/jvm/java-6-sun!' build.properties
sudo -u esup perl -pi -e 's!^server.home=\S+!server.home=/usr/local/esup/tomcat!' build.properties

sudo -u esup cp config.sample.properties config.properties
sudo -u esup perl -pi -e 's!^use.embedded.maven=\S+!use.embedded.maven=true!' config.properties

Puis configurer tomcat.* , esup.public.host , esup.ldap.* , esup.cas.* et esup.db.* dans config.properties :

# pour "ant _tomcat.init" :
tomcat.reloadable=true
tomcat.port.shutdown=8005
tomcat.port.http=8080
tomcat.port.jk=8009
...
esup.public.host=entergo-unpidf.univ-paris1.fr
...
esup.ldap.url=ldap://ldap-test.univ-paris1.fr
esup.ldap.baseDN=dc=univ-xxx,dc=fr
esup.ldap.bindDN=cn=xxx,ou=xxx,dc=univ-xxx,dc=fr
esup.ldap.bindPasswd=xxx
...
esup.cas.host=cas.univ-xxx.fr
esup.cas.uri=/cas
...
esup.db.username=xxx
esup.db.password=xxx
...
esup.db.type=mysql
esup.db.url=jdbc:mysql://localhost/uportal
esup.db.className=com.mysql.jdbc.Driver

Configurer tomcat

esup-uPortail est fourni avec des fichiers de configuration dans update/Tomcat/conf/, pour les installer :

sudo -u esup sh -c 'cd /usr/local/esup/esup-package ; ant _tomcat.init -Dtomcat.update=true -Dtomcat.reloadable=false'

(nb: il faut appeler la tache _tomcat.init car elle n'est pas effectuée quand on n'utilise pas le embbeded tomcat)

Créer l'utilisateur de la base de données et la base de données

(nb : les commandes ci-dessous suppose que le mot de passe root mysql est stocké dans /root/.my.cnf)

root_password=`sudo sed -n 's/password="\(.*\)"/\1/p' /root/.my.cnf`
dbvar() { sed -n 's![[:space:]]*!!g; s/esup.db.'$1'=//p' /usr/local/esup/esup-package/config.properties; }
username=`dbvar username`
password=`dbvar password`
database=`dbvar url | sed 's!jdbc:mysql://localhost/!!'`
echo "grant all on $database.* to $username identified by '$password';" | mysql -uroot -p"$root_password"
mysqladmin -u"$username" -p"$password" create "$database"

Compiler esup-uPortal

sudo su - esup
cd /usr/local/esup/esup-package
ant getcomponents unzip init deploy db.test db.init

Démarrage à la main de esup-portail

sudo -u esup /usr/local/esup/esup-package/start-esup.sh

Démarrage automatique de esup-portail

cat <<'EOF' > /tmp/esup
#! /bin/bash
#
# Warning: throw a daemon each time it is invoked
# don't mind if other instances are running
#
### BEGIN INIT INFO
# Provides:          esup
# Required-Start:    $local_fs $remote_fs $network $syslog mysql
# Required-Stop:     $local_fs $remote_fs $network $syslog mysql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop Esup server
### END INIT INFO

ESUP_HOME=/usr/local/esup/esup-package/
ESUP_USER=esup
case "$1" in
  start)
    echo -ne "Starting esup.\n"
    /bin/su $ESUP_USER $ESUP_HOME/start-esup.sh
    ;;

  stop)
    echo -ne "Stopping esup.\n"
    /bin/su $ESUP_USER $ESUP_HOME/stop-esup.sh
    ;;

  *)
    echo "Usage: /etc/init.d/esup {start|stop}"
    exit 1
    ;;
esac

exit 0
EOF

sudo install /tmp/esup /etc/init.d/esup
sudo insserv esup || sudo update-rc.d esup defaults 90 10

Premier admin

Le premier administrateur est "admin". Pour utiliser ce login non ldap avec un mot de passe maison :

sudo su - esup
cd /usr/local/esup/esup-package
ant user.add -Dusername=admin

Puis accéder à http://entergo-unpidf.univ-paris1.fr/private/

Configurer https

Créer /etc/apache2/sites-available/entergo-unpidf-ssl :

<VirtualHost *:443 >

<Proxy balancer://entCluster>
        BalancerMember ajp://localhost:8009 route=ent1 retry=1
        Order deny,allow
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://entCluster/ stickysession=JSESSIONID nofailover=Off

<Location /balancer-manager>
        SetHandler balancer-manager
        Order allow,deny
        Allow from xxx.univ-xxx.fr
</Location>

ServerName entergo-unpidf.univ-paris1.fr
ServerAlias entergo-unpidf

ErrorLog /var/log/apache2/entergo-unpidf-ssl-error.log
CustomLog /var/log/apache2/entergo-unpidf-ssl-access.log combined

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /usr/local/etc/ssl/certs/entergo-unpidf.univ-paris1.fr.crt
SSLCertificateKeyFile /usr/local/etc/ssl/private/entergo-unpidf.univ-paris1.fr.key
SSLCertificateChainFile /usr/local/etc/ssl/certs/cachain.crt

# restreindre l'acces a certaines choses, notamment les web services
<Location ~ "/(EsupMonitor|private|problems|services)">
  Order allow,deny
  Allow from univ-paris1.fr
</Location>

# Interdit en mode non SSL
<Location /jkstatus>
  Order allow,deny
</Location>

</VirtualHost>

Puis

sudo a2ensite entergo-unpidf-ssl

sudo /etc/init.d/apache2 restart

nb : les /etc/apache2/sites-available/entergo-unpidf et entergo-unpidf-ssl sont presque les même.

  • Aucune étiquette

Commentaire

  1. Ci-dessous l'ajout mis en place fin 2014 sur l'esup-uportal de l'université Paris 1 pour s'assurer que le JSESSIONID est regénéré, et plus particulièrement pour s'assurer que le JSESSIONID vide est refusé (cas incompréhensible rencontré sur 2 google chrome...)

    • ajouter lib/org/esupportail/tomcat/ChangeSessionIdValve.java
    package org.esupportail.tomcat;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import org.apache.catalina.Manager;
    import org.apache.catalina.Session;
    import org.apache.catalina.connector.Request;
    import org.apache.catalina.connector.Response;
    import org.apache.catalina.valves.ValveBase;
    
    
    public final class ChangeSessionIdValve extends ValveBase {
        protected String loginPath = null;
    
        public void setLoginPath(String loginPath) {
            this.loginPath = loginPath;
        }
    
        public void invoke(Request request, Response response) throws IOException, ServletException {
            Session session = request.getSessionInternal(true);
            String requestURI = request.getDecodedRequestURI();
    
            if (session != null && loginPath != null && requestURI.equals(loginPath)) {
                Manager manager = request.getContext().getManager();
                manager.changeSessionId(session);
                request.changeSessionId(session.getId());
            }       
            getNext().invoke(request, response);
        }
    }
    • à compiler avec :
    classpath=.:`echo $(ls {lib,shared/lib}/*.jar) | sed 's/ /:/g'`
    javac -cp $classpath lib/org/esupportail/tomcat/ChangeSessionIdValve.java
    • puis mettre dans conf/server.xml :
    --- a/conf/server.xml
    +++ b/conf/server.xml
    @@ -55,6 +55,9 @@
                            
                                    <Context path="" docBase="/usr/local/esup/esup-uPortal-3.2.4-esup-1.0.0-RC3/Portail/webapps/uPortal"
                                            crossContext="true" reloadable="false">
    +
    +                                               <Valve className="org.esupportail.tomcat.ChangeSessionIdValve" loginPath="/Login"/>
    +