Compte Rendu d'exploitation du workshop
vous Vous retrouverez sur cette page un compte rendu d'exploitation du workshop / tutoriel d'installation d'esup-uportal V4 qui a eu lieu le 16 Mai 2013 à Paris 5
il s'agit de mon interprétation du déroulement du tutoriel, sujet a à modifications car encore en cours de finalisation sur ma VM ...
il est aussi largement verbeux, pour des raisons d’ignorances sur certaines taches, notamment le detail du deploiement du portail portail
enfin certaines parties, notamment sur la fin, restent approximatives et non encore validées
Références
ci dessous les elements necessaires à la réalisation de ce TP
[Attention : la machine virtuelle et la présentation ont depuis été stockées sur le stockage pérenne d'esup-portail.org, voir la page "Machine virtuelle et supports - Esup V4.0" accessible aux adhérents]
Le 14 mai 2013 à 16:34, Vincent Bonamy<Vincent.Bonamy@univ-rouen.fr> a écrit :
...
dans ce TP nous allons dérouler le tuto pas a à pas tel qu'il a été jouer joué le jour de la formation, en suivant globalement ce qui est décrit dans le readme:
https://github.com/EsupPortail/esup-uportal/blob/master/README
Ldap
le la VM contient un annuaire ldap , et l'utilitaire graphique qui va bien pour visulaiser les entrée entrées de l'annuaire: jxplorer
esup@esup4:~$ ls
Bureau Documents Downloads Images jxplorer Modèles Musique Public Téléchargements Vidéos
esup@esup4:~$ cd jxplorer/
esup@esup4:~/jxplorer$ ./jxplorer.sh
...
Serveur HTTP apache
Module apache
modules
...
apache
...
ajouté
...
(proxy-ajp
...
...)
root@esup4:/etc/apache2# ls mods-enabled/
alias.conf cgid.conf mime.load rewrite.load
alias.load cgid.load negotiation.conf setenvif.conf
auth_basic.load deflate.conf negotiation.load setenvif.load
authn_file.load deflate.load proxy_ajp.load ssl.conf
authz_default.load dir.conf proxy_balancer.conf ssl.load
authz_groupfile.load dir.load proxy_balancer.load status.conf
authz_host.load env.load proxy.conf status.load
authz_user.load expires.load proxy.load
autoindex.conf headers.load reqtimeout.conf
autoindex.load mime.conf reqtimeout.load
...
un vhost pour cas et 2 ent pour simuler une un load balancer
root@esup4:/etc/apache2/sites-enabled# ls
cas.univ.fr ent1.univ.fr ent2.univ.fr ent.univ.fr
Ports apache
il faut jouer avec les numeros de port (ici cas à un ajp en 9009) car tout ce passe sur le meme et unique host, encore une fois c'est propre a la VM et a ce TP .
cas.univ.fr: ProxyPass / ajp://localhost:9009/ retry=1
Balancer apache
visualisation des vhost configuré dans apache et verification syntatxe des fichiers de conf
root@esup4:/etc/apache2/sites-enabled# export APACHE_RUN_USER=www-dataroot@esup4:/etc/apache2/sites-enabled# export APACHE_RUN_GROUP=www-dataroot@esup4root@esup4:/etc/apache2/sites-enabled# grep BalancerMem *
entapache2 -t -D DUMP_VHOSTS
VirtualHost configuration:wildcard NameVirtualHosts and _default_ servers:*:443 is a NameVirtualHostdefault server cas.univ.fr: BalancerMember ajp://ent1-app:8009 retry=1
ent (/etc/apache2/sites-enabled/cas.univ.fr:18)
port 443 namevhost cas.univ.fr: BalancerMember ajp://ent2-app:8009 retry=1 (/etc/apache2/sites-enabled/cas.univ.fr:18)
port 443 namevhost ent.univ.fr (/etc/apache2/sites-enabled/ent.univ.fr:15) port 443 namevhost ent1.univ.fr (/etc/apache2/sites-enabled/ent1.univ.fr:1) port 443 namevhost ent2.univ.fr (/etc/apache2/sites-enabled/ent2.univ.fr:1)*:80 is a NameVirtualHost default server cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr:1) port 80 namevhost cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr:1) port 80 namevhost ent.univ.fr (/etc/apache2/sites-enabled/ent.univ.fr:1)Syntax OK
2014
root@esup4:~# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
*:80 is a NameVirtualHost
default server cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr.conf:1)
port 80 namevhost cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr.conf:1)
alias cas
port 80 namevhost ent.univ.fr (/etc/apache2/sites-enabled/ent.univ.fr.conf:1)
alias ent
*:443 is a NameVirtualHost
default server cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr.conf:15)
port 443 namevhost cas.univ.fr (/etc/apache2/sites-enabled/cas.univ.fr.conf:15)
alias cas
port 443 namevhost ent.univ.fr (/etc/apache2/sites-enabled/ent.univ.fr.conf:15)
alias ent
port 443 namevhost ent1.univ.fr (/etc/apache2/sites-enabled/ent1.univ.fr.conf:1)
alias ent1
port 443 namevhost ent2.univ.fr (/etc/apache2/sites-enabled/ent2.univ.fr.conf:1)
alias ent2
Ports apache
il faut jouer avec les numeros de ports (ici cas à un ajp en 9009) car tout se passe sur le meme et unique host, encore une fois c'est propre à la VM et à ce TP .
cas.univ.fr: ProxyPass / ajp://localhost:9009/ retry=1
Balancer apache
root@esup4:/etc/apache2/sites-enabled# grep BalancerMem *
ent.univ.fr: BalancerMember ajp://ent1-app:8009 route=ent1 retry=1
ent.univ.fr: BalancerMember ajp://ent2-app:8009 route=ent2 retry=1
Note : dans la VM fournie, et c'est un oubli, il manque les route=ent1 et route=ent2
Réécriture cookies apache
il est important quand on gere plusieurs instances de l'ENT pour des raison raisons de load balancing, que quand la route change (on passe de ent1 a ent2 par exemple) de reécrire le cookie
...
les cookies seront alors nommés du type "sticky.1ent1" ou "sticky.2ent2" en fonction de l'ent ciblé par le client, qu'on on peut aussi s'en servir pour modifier a à la main l'affectation d'un ent si necessaire (debug par exemple)
...
comme la VM du TP contient déjà un esup4 operationnele operationnel (deja configuré et deployé) , il faut pour le rejouer, repartir de zero, donc ici exeptionnellement on commence a par un drop de la database. par un drop de la database.
postgres=# drop DATABASE esup4;
DROP DATABASE
postgres=# create DATABASE esup4;
CREATE DATABASE
postgres=# \c esup4
psql (8.4.17)
Vous êtes maintenant connecté à la base de données « esup4 ».
postgres=# create USER esup4 with password 'esup';
ERREUR: le rôle « esup4 » existe déjà
postgres=# grant all on database esup4 to esup4;
GRANT
2014
# su - postgres
postgres@esup4:~$ psql
postgres=# \?
postgres=# \l
Liste des bases de données
Nom | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès
-----------+--------------+----------+-----------------+--------------+-----------------------
esup4 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 lignes)postgres=# drop DATABASE esup4;
DROP DATABASE
postgres=# create DATABASE esup4;
CREATE DATABASE
postgres=# \c esup4
psql (8.4.17)
Vous êtes maintenant connecté à la base de données « esup4 ».
postgres=# create USER esup4 with password 'esup';
ERREUR: le rôle « esup4 » existe déjà
postgres=# grant all on database esup4 to esup4;
GRANT
Arborescence de travail /opt
...
RAZ TP
on va rejouer le TP a à zero donc on efface tout ce qui a deja été fait vis a vis de tomcat et esup-uportal
...
si cette commande echoue sur un connection timeout ou fatal ... c'est qu'il faut y aller plutot en https qu'en git (cas lors du TP en wifi derriere eduspot )qu'en git (cas lors du TP en wifi derriere eduspot )
esup@esup4:/opt$ git clone https://github.com/EsupPortail/esup-uportal.git
Cloning into esup-uportal...
remote: Counting objects: 161312, done.
remote: Compressing objects: 100% (45456/45456), done.
remote: Total 161312 (delta 92606), reused 158205 (delta 89900)
Receiving objects: 100% (161312/161312), 131.12 MiB | 1.96 MiB/s, done.
Resolving deltas: 100% (92606/92606), done.
2014
$ git clone gitesup@esup4:/opt$ git clone https://github.com/EsupPortail/esup-uportal.git
CloningClonage intodans 'esup-uportal'...
remote: Counting objects: 161312167658, done.
remote: Compressing objects: 100% (4545645830/4545645830), done.
remote: Total 161312167658 (delta 9260695561), reused 158205167658 (delta 8990095561)
ReceivingRéception objectsd'objets: 100% (161312167658/161312167658), 131133.1286 MiB | 1210.9600 MiBKiB/s, done.
ResolvingRésolution des deltas: 100% (9260695561/9260695561), done.
Vérification de la connectivité... fait.
cela prend un certains temps ! (+sieurs minutes)
cela clone localement de depot github d'esup-portal et forck la branche master
...
diff --git a/filters/esup.properties b/filters/esup.properties
index 7c6b3d6..0f13984 100644
--- a/filters/esup.properties
+++ b/filters/esup.properties
@@ -38,8 +38,8 @@
environment.build.hsql.port=8887
## Server Path configuration
-environment.build.server.webapps=/home/esup4/webapps
-environment.build.server.home=/home/esup4/apache-tomcat-6.0.35
+environment.build.server.webapps=/opt/tomcat-esup/webapps
+environment.build.server.home=/opt/tomcat-esup
################################################################################
## Database configuration section ##
@@ -54,32 +54,32 @@ environment.build.server.home=/home/esup4/apache-tomcat-6.0.35
#environment.build.hibernate.connection.password=esup4
# PostGreSQL properties to uncomment :
-#environment.build.hibernate.connection.driver_class=org.postgresql.Driver
-#environment.build.hibernate.connection.url=jdbc:postgresql://sql.univ.fr:5432/esup4
-#environment.build.hibernate.connection.username=esup4
-#environment.build.hibernate.connection.password=esup4
+environment.build.hibernate.connection.driver_class=org.postgresql.Driver
+environment.build.hibernate.connection.url=jdbc:postgresql://sql.univ.fr:5432/esup4
+environment.build.hibernate.connection.username=esup4
+environment.build.hibernate.connection.password=esup
-environment.build.hibernate.dialect=org.hibernate.dialect.HSQLDialect
+environment.build.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
# JNDI property to uncomment :
#environment.build.hibernate.connection.jndiname=jdbc/uPortalDB
# uPortal server configuration properties
-environment.build.uportal.server=esup4.univ.fr
-environment.build.real.uportal.server=esup4.univ.fr
+environment.build.uportal.server=${univEntServerHost}
+environment.build.real.uportal.server=${univEntServerHostNum}
environment.build.uportal.protocol=https
environment.build.uportal.context=/uPortal
environment.build.real.uportal.context=/uPortal
environment.build.uportal.email.fromAddress=portal4@univ.fr
# CAS server configuration properties
-environment.build.cas.server=auth.univ.fr
+environment.build.cas.server=cas.univ.fr
environment.build.cas.protocol=https
-environment.build.cas.context=/cas
+environment.build.cas.context=
# LDAP
-environment.build.ldap.url=ldaps://ldap1.univ.fr:636 ldaps://ldap2.univ.fr:636
-environment.build.ldap.baseDn=dc=univ,dc=fr
+environment.build.ldap.url=ldap://ldap.univ.fr:389
+environment.build.ldap.baseDn=dc=esup-portail,dc=org
environment.build.ldap.userName=
environment.build.ldap.password=
environment.build.ldap.pooled=false
@@ -87,7 +87,7 @@ environment.build.ldap.uidAttr=uid
# Logs
-environment.build.log.logfileDirectory=/home/esup4/logs
+environment.build.log.logfileDirectory=/opt/tomcat-esup/logs
environment.build.log.logfileName=uPortal.log
environment.build.log.size=1024
environment.build.log.rootLevel=INFO
uportal-portlets-overlay/pom.xml et uportal-ear/pom.xml
dans le pom.xml de uportal-portlets-overlay on retire les portlet inutiles (le CAS interne et pluto-testsuite)
diff --git a/uportal-portlets-overlay/pom.xml b/uportal-portlets-overlay/pom.xml
index 20c11e5..18c9f53 100644
--- a/uportal-portlets-overlay/pom.xml
+++ b/uportal-portlets-overlay/pom.xml
@@ -18,12 +18,10 @@
<modules>
<module>BookmarksPortlet</module>
<module>CalendarPortlet</module>
- <module>cas</module>
<module>cas-proxy-test-portlet</module>
<module>email-preview</module>
<module>FunctionalTestsPortlet</module>
<module>jasig-widget-portlets</module>
- <module>pluto-testsuite</module>
<module>NewsReaderPortlet</module>
<module>NotificationPortlet</module>
<module>SimpleContentPortlet</module> <module>pluto-testsuite</module>
<module>NewsReaderPortlet</module>
<module>NotificationPortlet</module>
<module>SimpleContentPortlet</module>
diff --git a/uportal-ear/pom.xml b/uportal-ear/pom.xml
index fee7e30..492ab02 100755
--- a/uportal-ear/pom.xml
+++ b/uportal-ear/pom.xml
+ <!--
<dependency>
<groupId>org.jasig.portal.portlets-overlay</groupId>
<artifactId>cas</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>org.jasig.portal.portlets-overlay</groupId>
<artifactId>pluto-testsuite</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
+ -->
Postgres driver
reference README:
* ajout dépendance Postgresql
* emacs pom.xml
* on décommente le bloc situé sous le commentaire "<!-- POSTGRESQL driver. Uncomment if you need to -->"
...
la plus grosse commande, clean on nettoie tout (il faudra donc tout recompiler) et initportal on refait tout le portail + BD, sortie complete et tres verbeuse ci-dessous, mais cela permet de voir en detail tout ce qui se passe
...
remarque: calendar et weather portlet ne marche pas en IP privé !
Deuxieme deploiement
apres ce deploiement initial en allant sur http://ent.univ.fr (redirigé en https par le rewrite rule d'apache2) on tombe bien sur le portail
la premiere fois que j'ai voulu m'identifier, apres une bonne redirection sur cas.univ.fr + login esup et pass esup j'ai eu le droit à une curieuse erreure de "too many redirect, loop, pb cookie ..." , ce n'ai qu'apres avoir tout arreté (tomcat-esup, tomcat-cas, apache2) et relancé un 2eme deploiement (plus léger; deploy-ear)
esup@esup4:/opt/esup-uportal$ ant -Dmaven.test.skip=true clean deploy-earpuis relance en sens inverse des services (apache2, tomcat-cas, tomcat-esup), que j'ai pu enfin aller sur le portail et m'y connecter en tant qu'esup
https://ent.univ.fr/uPortal/f/welcome/normal/render.uP
VOUS ÊTES CONNECTÉ(E) EN TANT QUE ESUP
Encodage postgresql
ref slides page 25 pb encodages
...
esup@esup4:/opt/esup-uportal/uportal-portlets-overlay$ /etc/init.d/tomcat-esup stop
esup@esup4:/opt/esup-uportal/uportal-portlets-overlay$ rm /opt/tomcat-esup/webapps/porlets-pas-necessaires...
esup@esup4:/opt/esup-uportal/uportal-portlets-overlay$ ant clean deploy-ear
Il faut aussi modifier le fichier uportal-ear/pom.xmlAjout groupe DSI
toute personne du departmentNumber = DSI (ldap) sera dans le groupe dynamique uportal DSI
...
<group>
<group-key>pags_root</group-key>
<group-name>PAGS Root</group-name>
<group-description>Root group for all PAGS groups. Convenience for adding PAGS groups to a local group.</group-description>
<members>
<member-key>all_users</member-key>
<member-key>Groupe_DSI</member-key>
</members>
</group>
Fragments
ref slide page 32
on va rattacher un fragment au groupe DSI
...
vide cache, deconnexion/ connexion pour voir le difference
verification graphique IHM web
ref: slide page 34
fragment owners verfier les membres, retrouve t-on notre dsi-lo, car apres les portlet qui vont etre rattaché a ce graement depandent de ça
il faut faire partie de fragment-layout-owner pour voire toutes les portlets dans l'interface.
Look
Look changement logo
ref slide page 35
esup@esup4:/opt/esup-uportal$ cp /home/esup/Bureau/tmp/esup-ondule.png uportal-war/src/main/webapp/media/skins/universality/uportal3/images/portal_logo.png
git diff
diff --git a/uportal-war/src/main/webapp/media/skins/universality/uportal3/images/portal_logo.png b/uportal-war/src/main/webapp/media/
index 6c28c64..f508c15 100755
Binary files a/uportal-war/src/main/webapp/media/skins/universality/uportal3/images/portal_logo.png and b/uportal-war/src/main/webapp/
reload navigateur + CTRL+R, le logo apparaitslide 35
changement CSS
pour l'exercice on vire retire le footer uportal "portalpagefooter...."
esup@esup4:/opt/esup-uportal$ ls uportal-war/src/main/webapp/media/skins/
icons muniversality universality
universility pour desktop
muniversality pour mobiles
on va ajouter un fichier univ-fr.css qui ne ferra que supprimer le footer, il faut decalrer ce css dans le common_skin.xml
esup@esup4:/opt/esup-uportal$ vim /opt/esup-uportal/uportal-war/src/main/webapp/media/skins/universality/common/common_skin.xml
...
creation du fichier univ-fr.css retirant le footer
esup@esup4:/opt/esup-uportal/uportal-war/src/main/webapp/media/skins/universality/common/css$ cat univ-fr.css
#portalfooter
display: none
on deploie a nouveau,
deploy-ear va faire une compression des css
deploy-ear => donc refait les portlet aussi
tomcat-esup restart
les ressource et javascript aggregé sont aggregés (compression) , donc ne pas copier le css tel quel dans l'arborescence tomcat !
sinon possibilité de "disable aggregation" via l'IHM si on veux s'en passer
Git Update socle
recuperer les modifications sur le socle depuis github
fusioner ma version avec celle des devellopeurs
esup@esup4:/opt/esup-uportal$ git remote -v
origin https://github.com/EsupPortail/esup-uportal.git (fetch)
origin https://github.com/EsupPortail/esup-uportal.git (push)
git push pull = fetch + merge
esup@esup4:/opt/esup-uportal$ git fetch origin
esup@esup4:/opt/esup-uportal$ git branch -a
* esup4-univ
master
remotes/origin/CCTP
remotes/origin/HEAD -> origin/master
remotes/origin/grouperGroupStrore
remotes/origin/master
esup@esup4:/opt/esup-uportal$ git branch
* esup4-univ
master
esup@esup4:/opt/esup-uportal$ git merge origin/master
ant clean deploy-ear
preconisation de l'usage de git mergetool pour gerer les conflit de merge, graphique plus pratique
cf https://wiki.jasig.org/display/UPC/Git+Workflow+for+Vendor+Branching
Git serveur , bare local
on peux aussi se faire un serveur git local
esup@esup4:/opt/esup-uportal$ cd /tmp
esup@esup4:/tmp$ git clone --bare /opt/esup-uportal/ esup-uportal.git
Cloning into bare repository esup-uportal.git...
done.
esup@esup4:/tmp$ git clone file:///tmp/esup-uportal.git clone-esup-uportal
Cloning into clone-esup-uportal...
remote: Counting objects: 161312, done.
remote: Compressing objects: 100% (42750/42750), done.
remote: Total 161312 (delta 92606), reused 161312 (delta 92606)
Receiving objects: 100% (161312/161312), 131.19 MiB | 28.16 MiB/s, done.
Resolving deltas: 100% (92606/92606), done.
peut-etre plus didactif, autre methode:
on aurait pu faire un mkdir /tmp/esup4-bare
git init --bare
puis git push depuis /opt/esup-uportal vers le bare de /tmp/esup4-bare
Portlet
ref slide page 38
exemple incomplet avec esup-twitter.warSlide 38 Portlet
target
ant deployPortletApp
-DportletApp=/opt/esup-uportal/target/tmp/esup-twitter.war
tomcat-esup restart pour la prise en compte de cette portlet (sauf si usage de lambda probe ...)
portlet esup-filemanager
esup@esup4:/opt$ git clone https://github.com/EsupPortail/esup-filemanager.git
Cloning into esup-filemanager...
remote: Counting objects: 4438, done.
remote: Compressing objects: 100% (2156/2156), done.
remote: Total 4438 (delta 1540), reused 4420 (delta 1524)
Receiving objects: 100% (4438/4438), 1.61 MiB | 781 KiB/s, done.
Resolving deltas: 100% (1540/1540), done.
esup@esup4:/opt$ ls
apache-tomcat-6.0.37 apache-tomcat-6.0.37.tar.gz cas esup-env esup-filemanager esup-uportal portlets tomcat-esup
esup@esup4:/opt$ cd esup-filemanager
esup@esup4:/opt/esup-filemanager$ git tag
esup-filemanager-2.1.0
esup-filemanager-2.2.0
esup-filemanager-2.2.1
esup-filemanager-2.2.2
esup@esup4:/opt/esup-filemanager$ git checkout -b esup4-filemanager esup-filemanager-2.2.2
Switched to a new branch 'esup4-filemanager'
on a plus besoin de la branche master
esup@esup4:/opt/esup-filemanager$ git branch -a
* esup4-filemanager
master
remotes/origin/HEAD -> origin/master
remotes/origin/esup-filemanager-portlet_1_0
remotes/origin/master
esup@esup4:/opt/esup-filemanager$ git branch -D master
Deleted branch master (was 7fc866b).
esup@esup4:/opt/esup-filemanager$ git branch -a
* esup4-filemanager
remotes/origin/HEAD -> origin/master
remotes/origin/esup-filemanager-portlet_1_0
remotes/origin/master
on modifi modifie que le partage "bob" ne soit plus a la racine mais dans /home/esup
esup@esup4:/opt/esup-filemanager$ git diff
diff --git a/src/main/webapp/WEB-INF/context/drives.xml b/src/main/webapp/WEB-INF/context/drives.xml
index 51f0fb1..c8a4d70 100644
--- a/src/main/webapp/WEB-INF/context/drives.xml
+++ b/src/main/webapp/WEB-INF/context/drives.xml
@@ -126,7 +126,8 @@
<bean class="org.esupportail.portlet.filemanager.services.vfs.VfsAccessImpl" lazy-init="true">
<property name="driveName" value="bob"/>
<property name="icon" value="/esup-filemanager/img/drives/root.png" />
- <property name="uri" value="file:///"/>
+ <!-- <property name="uri" value="file:///"/> -->
+ <property name="uri" value="file:///home/esup"/>
<property name="contextToken" value="justbob"/>
<property name="resourceUtils" ref="resourceUtils"/>
</bean>