RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
EUGI Gateway Infrastructure
Contract ID:
ANNEX C
Installation and Configuration Plan
EUREL INTERNATIONAL S.A. DRAFT 1.1|1
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
Owners: EUREL INTERNATIONAL S.A.
Name Email Phone Role
parl.europa.eu
Revision History
Date Reason for change(s) Author(s)
13/01/2023 Draft 1.0 Alain Piefort
Approved by: European Parliament
Phase Name Date Signature
EUREL INTERNATIONAL S.A. DRAFT 1.1|2
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
1 EUGI Framework architecture
1.1 General architecture of the data flux between EUGI and ELVIS
EUREL INTERNATIONAL S.A. DRAFT 1.1|3
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
1.2 Services implemented on EUGI:
1.2.1 MepPlaces (webservices + jms messenger)
Allow the voting system to push informations on card insertion and card extraction events
1.2.2 VotingList (listener)
Listen the votinglist topic to be notified of the availability of a voting list, then get it from the web
service
1.2.3 VotingResults (jms messenger)
Push the voting results (only the figures) on the fly
1.2.4 RawList (WebService + jms messenger)
Push the notification of availability of a rawlist (voting results in extenso) to the rawlist topic ;
Soap web service to allow the rawlist client (Actes) to get the rawlist xml file
1.2.5 Carton (listener)
Listen the carton topic to get the varoious messages to be displayed on the voting terminal screens
(messages, speakers list)
2 EUGI Gateway Environment Installation
2.1 Development/Pre-Production environment:
The installation phase will be applied on both development environment and pre-
production as well.
2.2 CentOS 6.6 operating systems installation
1. Installing and configuring the operating system CentOS 6.6:
Complete installation from the DVD:
Language: English
Keyboard: belgium (be-latin1)
Time zone: Europe / Brussels Europe / Paris
Hostnames: Eugi03 - 04 (Prod Bru) ; Eugi01 - 02 (Prod Str) ; EugiXX_pp (for PP/Dev))
Eth0: 10.4.1.147-8 (Prod Bru); Eth0: 10.4.33.147-8 (Prod Str); (179) for production
env. and 10.4.11.181(182) for pre-production
For the Production environment, use the logical Drive A : RAID1; 300Gb, and Logical
Drive B : RAID1; 600Gb following the Partition:
Drive A: /boot/efi (20Gb)
Swap (64Gb)£
/ (ext4 – rest of the capacity)
Drive B: / (ext4 - max size)
Version: web Server + customize now
Apps: select graphics, internet apps, internet browser, office suite, and tech.
writing
EUREL INTERNATIONAL S.A. DRAFT 1.1|4
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
Base: select Hw monitor utilities, network tools + wireshark
Desktop: select desktops, fonts, general purpose desktop, graphic. admin.
tools, kde and Xwindow
Dev: select all + all gcc
High availability: select all + corosync+pacemaker+pcs
Load Balancing: Select
Servers: select system admin. tools
network configuration (eth0): hostname: Eugi01 (02,03,04)
IP: 10.4.1.147 (148)
subnet mask: 255.255.255.128
gateway: 10.4.1.129
for root user, use the eugi password (eURp4RL)
create the standard user for the server: “eugi” with same password
after server installation, log on as root
config network and config files are:
/etc/sysconfig/network
...
HOSTNAME= Eugi01
GATEWAY = 10.1.1.254
...
/etc/sysconfig/network-scripts/ifcfg-eth0
...
BOOTPROT = static
BROADCAST = 10.4.1.255
GATEWAY = 10.4.1.129
...
ETHTOOL_OPTS = "100 speed full duplex autoneg off"
...
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 mysql.eugi.internal
10.4.1.133 BruVoteDC01.pevote.eu BruVoteDC01
10.4.1.171 BruVoteSql01
10.4.1.172 BruVoteSql02
10.4.1.173 BruVoteSql03
10.4.1.174 BruVoteSql04
10.4.1.175 BruSQL
10.4.1.131 BruSQL_pp
136.173.97.191 simple.appsrv
10.22.247.77 simplepp.appsrv
10.120.206.93 simpledv.appsrv
10.120.219.167 simpleqdv.appsrv
136.173.12.228 eiciappdev2
10.220.35.3 www.alv2old.ep.parl.union.eu
10.220.34.20 www.alv2.ep.parl.union.eu
10.220.34.12 www.alv2pp.ep.parl.union.eu
10.220.34.1 www.alv2dv.ep.parl.union.eu
EUREL INTERNATIONAL S.A. DRAFT 1.1|5
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
10.120.219.138 www.alvlxdv.ep.parl.union.eu
10.4.1.147 eugi3
10.4.1.148 eugi4
10.4.1.143 eugi3pp
10.4.1.144 eugi4pp
10.4.33.175 StrSQL
10.4.33.131 StrSQL_pp
2.3 Configuring High Availability with heartbeat
1. HeartBeat config file
/etc/ha.d/haresources
eugi3 IPaddr::10.4.1.149/25/eth0 tomcat
/etc/ha.d/ha.cf
use_logd
debug 1
keepalive 2 # The keepalive directive sets the interval between heartbeat packets
deadtime 20 #how long until the host is declared dead
warntime 10 #how long before issuing "late heartbeat" warning
initdead 40 # Very first dead time (initdead)
udpport 694
ucast eth2 192.168.0.4
ping 10.4.1.129
crm off
auto_failback off # determines whether a resource will automatically fail back to its
"primary" node
node eugi3 eugi4
respawn hacluster /usr/lib/heartbeat/ipfail
/etc/ha.d/authkeys
auth 1
1 sha1 ef122aa3
2.4 MySql installation (from the CD CentOS)
config MySQL:
mysql -u root -e "create schema eugi;"
mysql -u root eugi < eugi.sql
mysqladmin - u root -p myinteur.23
2.5 Create /var/eugi and /var/eugi/documents directories
Copy files voting-schema.xsd and budget-schema.xsd in /var/eugi/
2.6 Java Installation
Version 1.7.0_65
EUREL INTERNATIONAL S.A. DRAFT 1.1|6
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
The env. variable must be defined in the script /etc/bashrc
(add the line Export JAVA_HOME=/usr/java/jre1.7.0_65)
2.7 Apache-Tomcat Installation
Copy the directory Apache-Tomcat-8.0.15 in /opt
2.8 HornetQ Installation
Copy the directory HornetQ-2.2.14-final in /opt
2.9 EUGI Config
2.9.1 eugi.properties (PP)
###############################################################################
##### PROPERTIES FOR EUGI SERVICES #####
###############################################################################
###############################################################################
###################### Bruxelles =0 ; Strasbourg=100 ##########################
###############################################################################
systemId = EUGI-BRUXELLES
eugi.aula.number =0
#systemId = EUGI-STRASBOURG
#eugi.aula.number = 100
###############################################################################
################## Properties for Eugi VS Data Model Service ##################
###############################################################################
####### EUGI SYSTEM MONITOR DB PROPERTIES (MYSQL)#########
##### TEST ENV #####
#eugi.database.driver = com.mysql.jdbc.Driver
#eugi.database.url = jdbc:mysql://127.0.0.1:3306/eugi
#eugi.database.user = root
#eugi.database.password =
#eugi.database.c3p0.acquireIncrement = 5
#eugi.database.c3p0.initialPoolSize = 45
#eugi.database.c3p0.maxpoolsize = 300
#eugi.database.c3p0.minpoolsize = 40
#eugi.database.c3p0.maxstat = 50
#eugi.database.c3p0.numHelperThreads = 300
#eugi.database.c3p0.maxAdministrativeTaskTime = 0
#eugi.database.c3p0.testconncheckout = false
#eugi.database.c3p0.idleconntestperiod = 10800
#eugi.database.c3p0.maxidletime = 0
#eugi.database.c3p0.autocommitclose = true
#eugi.database.h8.dialect = org.hibernate.dialect.MySQLDialect
#eugi.database.h8.showsql = true
##### PRODUCTION ENV #####
eugi.database.driver = com.mysql.jdbc.Driver
eugi.database.url = jdbc:mysql://127.0.0.1:3306/eugi
eugi.database.user = root
eugi.database.password = myinteur.23
eugi.database.c3p0.acquireIncrement = 5
eugi.database.c3p0.initialPoolSize = 45
eugi.database.c3p0.maxpoolsize = 300
eugi.database.c3p0.minpoolsize = 40
eugi.database.c3p0.maxstat = 50
EUREL INTERNATIONAL S.A. DRAFT 1.1|7
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
eugi.database.c3p0.numHelperThreads = 300
eugi.database.c3p0.maxAdministrativeTaskTime = 0
eugi.database.c3p0.testconncheckout = true
eugi.database.c3p0.idleconntestperiod = 10800
eugi.database.c3p0.maxidletime = 0
eugi.database.c3p0.autocommitclose = true
eugi.database.h8.dialect = org.hibernate.dialect.MySQLDialect
eugi.database.h8.showsql = false
####### VOTING SYSTEM DB PROPERTIES (MsSQL)#########
##### TEST ENV #####
##vs.database.driver =
#vs.database.url = jdbc:mysql://localhost:3306/parlamento_1
##vs.database.driver = org.postgresql.Driver
#vs.database.driver = com.mysql.jdbc.Driver
#vs.database.user = root
#vs.database.password =
#vs.database.c3p0.acquireIncrement = 5
#vs.database.c3p0.initialPoolSize = 45
#vs.database.c3p0.maxpoolsize = 300
#vs.database.c3p0.minpoolsize = 40
#vs.database.c3p0.maxstat = 50
#vs.database.c3p0.numHelperThreads = 300
#vs.database.c3p0.maxAdministrativeTaskTime = 0
#vs.database.c3p0.testconncheckout = false
#vs.database.c3p0.idleconntestperiod = 10800
#vs.database.c3p0.maxidletime = 0
#vs.database.c3p0.autocommitclose = true
##vs.database.h8.dialect = org.hibernate.dialect.PostgreSQL9Dialect
#vs.database.h8.dialect = org.hibernate.dialect.MySQLDialect
#vs.database.h8.showsql = true
##### PRODUCTION ENV #####
vs.database.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
vs.database.url = jdbc:sqlserver://BruSQL;databaseName=parlamento_cluster
vs.database.user = sa
vs.database.password = eURp4RL
vs.database.c3p0.acquireIncrement = 5
vs.database.c3p0.initialPoolSize = 45
vs.database.c3p0.maxpoolsize = 300
vs.database.c3p0.minpoolsize = 40
vs.database.c3p0.maxstat = 50
vs.database.c3p0.numHelperThreads = 300
vs.database.c3p0.maxAdministrativeTaskTime = 0
vs.database.c3p0.testconncheckout = true
vs.database.c3p0.idleconntestperiod = 10800
vs.database.c3p0.maxidletime = 0
vs.database.c3p0.autocommitclose = true
vs.database.h8.dialect = org.hibernate.dialect.SQLServer2012Dialect
vs.database.h8.showsql = false
###############################################################################
################## Properties for Eugi Voting List Service ####################
###############################################################################
#### JMS configuration (Notification Topic) ####
jms.votinglist.topic.connectionfactory = ConnectionFactory
jms.votinglist.topic.user = EUGI
jms.votinglist.topic.password = e|_|6I
jms.votinglist.topic.subscriptionId = EugiBrxDurableVotingList
jms.votinglist.topic.clientId = EugiVotingListClientId
jms.votinglist.topic.name = alv.pub.votinglist
#jms.votinglist.topic.selector = data_type='VOTING_LISTS_WITHOUT_RESULT' AND client='HEMICYCLE'
#jms.votinglist.topic.selector = data_type='VOTING_LISTS_WITHOUT_RESULT'
jms.votinglist.topic.selector = data_type='VOTING_LISTS_WITHOUT_RESULT' OR data_type='VOTING_LISTS_BUDGET'
EUREL INTERNATIONAL S.A. DRAFT 1.1|8
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
#jms.votinglist.topic.host = 127.0.0.1
#jms.votinglist.topic.port = 5445
#jms.votinglist.topic.host = simple.appsrv
jms.votinglist.topic.host = simplepp.appsrv
#jms.votinglist.topic.host = simpledv.appsrv
jms.votinglist.topic.port = 63987
#### JMS configuration (Response Queue) ####
jms.votinglist.queue.user = EUGI
jms.votinglist.queue.password = e|_|6I
jms.votinglist.queue.name = alv.pub.votinglistresponse
#jms.votinglist.queue.host = 127.0.0.1
#jms.votinglist.queue.port = 5445
#jms.votinglist.queue.host = simple.appsrv
jms.votinglist.queue.host = simplepp.appsrv
#jms.votinglist.queue.host = simpledv.appsrv
jms.votinglist.queue.port = 63987
#### Elvis WS Client configuration #####
#ws.votinglist.endpoint = http://www.alv2.ep.parl.union.eu/alv-interaction-standard-export-producer-war/ws/
DocumentRetrieverEndpoint?wsdl
ws.votinglist.endpoint = http://www.alv2pp.ep.parl.union.eu/alv-interaction-standard-export-producer-war/ws/
DocumentRetrieverEndpoint?wsdl
#ws.votinglist.endpoint = http://www.alv2dv.ep.parl.union.eu/alv-interaction-standard-export-producer-war/ws/
DocumentRetrieverEndpoint?wsdl
#### D U M M Y S T R A T E G I E S ##########################################
## if you're debugging and don't have an ELVIS environment, use this
##eugi.votinglist.documentRetriever.strategy = eugi.votinglist.documentRetriever.StrategyDummyRetriever
#eugi.votinglist.documentRetriever.strategy = eugi.votinglist.documentRetriever.StrategyLoadLocally
#eugi.votinglist.response.strategy = eugi.votinglist.response.StrategyDummyResponse
#eugi.votinglist.streamWriter.path = /var/eugi/documents/
#eugi.votinglist.streamReader.documentPattern = /var/eclipse/eugi/EugiVotingList/test/{DOCID}.xml
## or
#### E L V I S S T R A T E G I E S ##########################################
## if you use ELVIS uncomment the following lines
eugi.votinglist.documentRetriever.strategy = eugi.votinglist.documentRetriever.StrategyLoadFromElvis
eugi.votinglist.response.strategy = eugi.votinglist.response.StrategyResponseSender
eugi.votinglist.streamWriter.path = /var/eugi/documents/
#### XSD for VotingList Validation ##########################################
eugi.voting.document.xsd.voting = /var/eugi/voting-schema.xsd
eugi.voting.document.xsd.budget = /var/eugi/budget-schema.xsd
eugi.votinglist.validateDocuments = true
###############################################################################
################## Properties for Eugi Voting Results Service #################
###############################################################################
#### JMS configuration ####
jms.votingresults.topic.user = eugiVotingResultsTopicUser
jms.votingresults.topic.password = eugiVotingResultsTopicUser.23
jms.votingresults.topic.name = votingResultsDurableTopic
jms.votingresults.queue.user = eugiVotingResultsQueueUser
jms.votingresults.queue.password = eugiVotingResultsQueueUser.23
jms.votingresults.queue.name = votingResultsResponseQueue
###############################################################################
##################### Properties for Eugi Raw List Service ####################
###############################################################################
#### JMS configuration ####
EUREL INTERNATIONAL S.A. DRAFT 1.1|9
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
jms.rawlist.topic.user = eugiRawListTopicUser
jms.rawlist.topic.password = eugiRawListTopicUser.23
jms.rawlist.topic.name = rawListDurableTopic
###############################################################################
##################### Properties for Eugi Mep Place Service ###################
###############################################################################
#### JMS configuration ####
jms.mepplace.topic.user = eugiMepPlacesTopicUser
jms.mepplace.topic.password = eugiMepPlacesTopicUser.23
jms.mepplace.topic.name = mepPlacesDurableTopic
#### Message Listener configuration #####
eugi.mepplace.maxtimeout =5
eugi.mepplace.maxmessages = 30
eugi.mepplace.onlyHemicycle = false
###############################################################################
##################### Properties for Carton Service ##########################
###############################################################################
eugi.carton.dataSource1 = /opt/apache-tomcat-8.0.15/conf/carton-db-1.cfg.xml
eugi.carton.dataSource2 = /opt/apache-tomcat-8.0.15/conf/carton-db-2.cfg.xml
eugi.carton.topic = carton.pub.output
eugi.carton.username = EUGI
eugi.carton.password = e|_|6I
#eugi.carton.selector = TARGET='P1' or TARGET='Px'
eugi.carton.selector = TARGET='P1' or TARGET='Px' or TARGET='Discussion' or TARGET='Orateur'
#eugi.carton.host = 127.0.0.1
#eugi.carton.port = 5445
#eugi.carton.host = simple.appsrv
eugi.carton.host = simplepp.appsrv
#eugi.carton.host = simpledv.appsrv
eugi.carton.port = 63987
###############################################################################
##################### Properties for Eugi Service Monitor #####################
###############################################################################
eugi.monitor.repetition.limit =3
#### Seconds for starvation breaking
monitor.max.starvation.time = 60
#### Internal Condition Monitor Timer (CRON format)
# every 10 sec
eugi.ICM.cron = */10 * * * * *
#### External Condition Monitor Timer (CRON format)
# every 1 sec
eugi.ECM.cron = */1 * * * * *
## HORNETQ RETRY OPTIONS ##
# retry-interval: This optional parameter determines the period in milliseconds between subsequent reconnection attempts, if the connection to the
target server has failed.
# The default value is 2000 milliseconds.
hornetq.retryinterval = 2000
# max-retry-interval: This optional parameter determines the maximum retry interval that will be used.
# When setting retry-interval-multiplier it would otherwise be possible that subsequent retries exponentially increase to ridiculously large values.
# By setting this parameter you can set an upper limit on that value.
# The default value is 2000 milliseconds.
hornetq.maxretryinterval = 60000
# reconnect-attempts: This optional parameter determines the total number of reconnect attempts to make before giving up and shutting down.
EUREL INTERNATIONAL S.A. DRAFT 1.1|10
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
# A value of -1 signifies an unlimited number of attempts.
# The default value is 0
hornetq.reconnectattempts = 100
# retry-interval-multiplier: This optional parameter determines determines a multiplier to apply to the time since the last retry to compute the time
to the next retry.
# This allows you to implement an exponential backoff between retry attempts.
# Let's take an example: If we set retry-interval to 1000 ms and we set retry-interval-multiplier to 2.0, then,
# if the first reconnect attempt fails, we will wait 1000 ms then 2000 ms then 4000 ms between subsequent reconnection attempts.
# The default value is 1.0 meaning each reconnect attempt is spaced at equal intervals.
hornetq.retryintervalmultiplier = 1.2
# connectionTTL: HornetQ connection time to live.
hornetq.connectionttl = -1
hornetq.jms.connectionfactory = ConnectionFactory
hornetq.jms.providerUrl = jnp://localhost:1099
2.9.2 Copy Script tomcat ins etc/init.d
2.9.3 configure the ports in .../deploy/hornetq.sar/jms-ds.xml
2.9.4 configure the ports in .../deploy/hornetq-ra.rar/META-INF/ra.xml
The topic names are case sensitive
2.9.5 name of users and passwords are in..../conf/props/hornetq-users.properties
3 Network Configuration:
IPs :
Eugi01: 10.4.33.147
Eugi02: 10.4.33.148
Eugi Str: 10.4.33.149 (Virtual Cluster IP)
Eugi03: 10.4.1.147
Eugi04: 10.4.1.148
EugiBru: 10.4.1.149 (Virtual Cluster IP)
Eugi01pp: 10.4.1.145
4 Start up
This paragraph explains how to start-up EUGI services. To ensure a proper start-up of EUGI services, check
that the following requirements are met:
1. The network is operating correctly,
2. SQL Server hosting the Voting System data is running,
3. MySQL hosting tomcat and EUGI services data is running.
EUGI services rely on the Apache-Tomcat Application server. The start-up of EUGI services mainly relates
with the start-up of tomcat on the servers.
EUREL INTERNATIONAL S.A. DRAFT 1.1|11
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
4.1 Boot start up
By default, no user interaction is needed to start-up the EUGI services, since they start-up automatically
(together with MySQL Server and tomcat) at server start-up. The start-up process is activated by an init.d
script located in the /etc/init.d folder and called tomcat.
4.2 Check if service is running
There are at least three ways to check that the system is running:
1. A quick check can be made by point a Web browser to the address of tomcat, e.g.
http://10.4.1.149:8080/ (for Brussels) and http://10.4.33.149:8080/ (for Strasbourg) and
see if the server replies (the client computer must be, of course, in the same subnet),
2. A better check can be done on the server itself (e.g. given connecting via SSH to the server)
and issue the command ‘ps aux | grep java’ to see if the tomcat Application Server is
running,
3. The definitive check can be done on the server itself by going in the /var/eugi/log folder
where EUGI services write log lines about current system activity. Specifically EUGI shall
write a line every 30 seconds stating that the service is “active and monitoring”.
4.3 Manual Start/stop
If necessary a manual restart can be issued by using the provided init.d script:
1. To stop the tomcat Application Server: ‘/etc/init.d/tomcat stop’,
2. To start the JBoss Application Server: ‘/etc/init.d/tomcat start’
4.4 Shut down
The shut-down of the system is done automatically when the server is powered off. There are two ways to
shut-down the system:
1. Log on to the server console and type: ‘halt –p’. This will stop all the services and power off
the server,
2. Press briefly the power button on the server chassis. This will tell the operating system to
cleanly stop all the services and power off the server.
Be aware that pressing the power button for too long will cause the server to immediately turn off. This can
cause severe damage on the data as the operating system won’t have the time to flush any cache. We
strongly suggest never to do so.
5 Logs and Diagnostic
Every subsystem of EUGI writes log files on the disk to ensure proper diagnostics activities if something fails
either at the application level or at system level. Log files should be enough complete, but more verbose log
levels exist. Those log levels can be enabled only when necessary to avoid unnecessary disk usage and
performance waste.
1. Tomcat standard log files, located in the /var/eugi/log subfolder. This folder contains the
Catalina.log file with information about Tomcat system start-up and server.log with
EUREL INTERNATIONAL S.A. DRAFT 1.1|12
RCV transmission for Committee Meetings
Contract ID:
Installation and Configuration Plan
information about tomcat standard operations. Those operations might involved processes
and functions related to EUGI as well,
2. EUGI services log file, located in the /var/eugi/log subfolder. The file, named eugi.log,
contains all the information about processes execute by EUGI.
EUREL INTERNATIONAL S.A. DRAFT 1.1|13