source: lliurex-openmeetings/trunk/fuentes/install-files/usr/sbin/lliurex-openmeetings @ 635

Last change on this file since 635 was 635, checked in by jrpelegrina, 5 years ago

First release to xenial

  • Property svn:executable set to *
File size: 12.8 KB
Line 
1#!/usr/bin/python -u
2
3import MySQLdb as mdb
4import sys
5
6import os
7import shutil
8import ConfigParser
9
10from jinja2 import Environment
11from jinja2.loaders import FileSystemLoader
12from jinja2 import Template
13import xmlrpclib
14
15VAR_DIR="/var/lib/openmeetings/"
16BASE_DIR="/usr/share/lliurex-openmeetings/"
17FILES_DIR="lliurex-files/"
18TAR_FILE=BASE_DIR+"apache-openmeetings-3.0.1.tar.gz"
19MYSQL_CONNECTOR=BASE_DIR+FILES_DIR+"mysql-connector-java-5.1.30-bin.jar"
20MENUBAR_JS=BASE_DIR+FILES_DIR+"jquery.ui.menubar.js"
21N4D_HOOK=BASE_DIR+"n4d-hooks/openmeetings.py"
22SERVICE_LAUNCHER=BASE_DIR+FILES_DIR+"lliurex-openmeetings-service"
23JODCONVERTER_PATH=BASE_DIR+"jodconverter/"
24
25INDEX_FILE=BASE_DIR+FILES_DIR+"lliurexlab.conf"
26
27ORIGINAL_WWW_FILE="/etc/apache2/sites-available/lliurexlab.conf"
28DIVERTED_WWW_FILE="/etc/apache2/sites-available/lliurexlab.diverted"
29
30class LliurexOpenmeetings:
31       
32        def __init__(self):
33               
34                pass
35               
36        #def __init__
37       
38        def get_n4d_key(self):
39               
40                try:
41                       
42                        f=open("/etc/n4d/key")
43                        self.n4d_key=f.readline().strip("\n")
44                        f.close()
45                       
46                except:
47                        print("[!] You need root privileges [!]")
48                        sys.exit(1)
49
50
51        #def get_n4d_key
52       
53        def create_var_dir(self,dir=None):
54               
55                print("* Creating /var dir ...")
56               
57                if dir==None:
58                        dir=VAR_DIR
59               
60                if os.path.exists(dir):
61                        os.system("rm -rf " + dir)
62               
63                os.makedirs(dir)
64                       
65        #def create_var_dir
66       
67        def extract_tar(self,tar_file=None,dest_dir=None):
68               
69                print("* Extracting openmeetings tar ...")
70               
71                if tar_file==None:
72                        tar_file=TAR_FILE
73                       
74                if dest_dir==None:
75                        dest_dir=VAR_DIR
76               
77                cmd="tar -xvzf %s -C %s 1>/dev/null"%(tar_file,dest_dir)
78                os.system(cmd)
79               
80        #def extract_tar
81       
82        def copy_mysql_connector(self,dest_dir):
83               
84                print("* Copying mysql connector ...")
85               
86                shutil.copy(MYSQL_CONNECTOR,dest_dir)
87               
88        #def extract_mysql_connector
89       
90        def create_db_user(self):
91       
92                print("* Creating mysql user ...")
93               
94                db_pass=self.template["db_pass"]
95                db_user=self.template["db_user"]
96                cmd='mysql -uroot -p$(mysql_root_passwd -g) -e "GRANT ALL PRIVILEGES ON openmeetings.* TO \'%s\'@localhost IDENTIFIED BY \'%s\'"'%(db_user,db_pass)
97                os.system(cmd)
98               
99        #def generate_user
100       
101        def fix_persistence_file(self,file_path=None):
102               
103                print("* Fixing persiscence file ...")
104               
105               
106               
107                if file_path==None:
108                        file_path=VAR_DIR+"webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml"
109               
110                f=open(file_path)
111                content="".join(f.readlines())
112                f.close()
113               
114                content=content.replace("Username=root","Username="+self.template["db_user"])
115                content=content.replace("Password=","Password="+self.template["db_pass"])
116                file_path=VAR_DIR+"webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml"
117               
118                f=open(file_path,"w")
119                f.write(content)
120                f.close()
121               
122                cmd="chmod 600 %s"%(file_path)
123                os.system(cmd)
124               
125        #def fix_persistence_file
126       
127        def fix_private_rooms(self,path=None):
128               
129                print("* Fixing private rooms ...")
130               
131                if path==None:
132                        path=VAR_DIR+"webapps/openmeetings/js/jquery.ui.menubar.js"     
133               
134                shutil.copy(MENUBAR_JS,path)
135               
136               
137               
138        #def fix_private_rooms
139       
140        def remove_private_rooms_applet(self):
141               
142                print("* Removing private rooms applet ...")
143               
144                user=self.template["db_user"]
145                password=self.template["db_pass"]
146               
147                con=mdb.connect('localhost',user,password,"openmeetings")
148                cur=con.cursor()
149                query="UPDATE configuration SET conf_value='0' WHERE ID=38"
150                cur.execute(query)
151                con.commit()
152               
153        #def remove_private_rooms_applet
154       
155        def init_db(self):
156               
157                print("* Initializing db ...")
158                user=self.template["admin"]
159                password=self.template["password"]
160                email=self.template["email"]
161                db_user=self.template["db_user"]
162                db_pass=self.template["db_pass"]
163               
164                cmd='mysql -uroot -p$(mysql_root_passwd -g) -e "drop database IF EXISTS openmeetings"'
165                os.system(cmd)
166               
167                cmd=VAR_DIR+"admin.sh -i -v -tz Europe/Madrid -email %s -group webbase -user %s --smtp-server localhost --db-type mysql --db-name openmeetings --email-auth-user noreply@webbase-design.de --password %s --system-email-address noreply@lliurex.net --db-user %s --db-host localhost --db-pass %s 1>/dev/null 2>/dev/null"%(email,user,password,db_user,db_pass)
168                os.system(cmd)
169               
170               
171        #def init_db
172       
173        def fix_bin_paths(self):
174               
175                print("* Fixing binary paths ...")
176                user=self.template["db_user"]
177                password=self.template["db_pass"]
178               
179                con=mdb.connect('localhost',user,password,"openmeetings")
180                cur=con.cursor()
181               
182                query=[]
183                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=18")
184                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=19")
185                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=20")
186                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=21")
187                query.append("UPDATE configuration SET conf_value='%s' WHERE ID=23"%JODCONVERTER_PATH)
188               
189                for q in query:
190                        #print("\t"+q+ " ...")
191                        cur.execute(q)
192                       
193                con.commit()
194               
195        #def fix_bin_paths
196       
197       
198        def fix_login_zone(self):
199               
200                print("* Fixing login landing zone ...")
201                user=self.template["db_user"]
202                password=self.template["db_pass"]
203               
204                con=mdb.connect('localhost',user,password,"openmeetings")
205                cur=con.cursor()
206               
207                query=[]
208               
209                query.append("UPDATE configuration SET conf_value='rooms/public' WHERE ID=52")
210               
211                for q in query:
212                        #print("\t"+q+ " ...")
213                        cur.execute(q)
214                       
215                con.commit()
216               
217        #def fix_bin_paths
218       
219        def fix_login_combobox(self):
220               
221               
222                print("* Fixing login combobox ...")
223                user=self.template["db_user"]
224                password=self.template["db_pass"]
225               
226                con=mdb.connect('localhost',user,password,"openmeetings")
227                cur=con.cursor()
228               
229                query=[]
230               
231                query.append("UPDATE configuration SET conf_value='1' WHERE ID=50")
232               
233                for q in query:
234                        #print("\t"+q+ " ...")
235                        cur.execute(q)
236                       
237                con.commit()
238               
239        #def fix_bin_paths     
240
241
242
243       
244        def add_lliurex_group(self):
245               
246                print("* Adding LliureX group ...")
247                user=self.template["db_user"]
248                password=self.template["db_pass"]
249               
250                con=mdb.connect('localhost',user,password,"openmeetings")
251                cur=con.cursor()
252               
253                #query="DELETE from organisation;"
254                #cur.execute(query)
255                query="INSERT INTO organisation(deleted,insertedby,name,starttime) VALUES(0,1,'Lliurex Default Group',NOW())"
256                cur.execute(query)
257                con.commit()
258               
259        #def add_lliurex_group
260       
261        def remove_default_rooms(self):
262               
263                print("* Removing default rooms ...")
264                user=self.template["db_user"]
265                password=self.template["db_pass"]
266               
267                con=mdb.connect('localhost',user,password,"openmeetings")
268                cur=con.cursor()
269               
270                query="DELETE from room;"
271                cur.execute(query)
272                con.commit()
273               
274        #def remove_default_rooms
275       
276        def add_llx_room(self):
277               
278                print("* Adding LLX room ...")
279                user=self.template["db_user"]
280                password=self.template["db_pass"]
281               
282                con=mdb.connect('localhost',user,password,"openmeetings")
283                cur=con.cursor()
284               
285               
286                cur.execute("SELECT MAX(id) from organisation WHERE name='Lliurex Default Group'")
287                data=cur.fetchone()
288                organization_id=str(data[0])           
289               
290                query="INSERT INTO room (allow_font_styles, allow_recording, allow_user_questions, appointment, auto_video_select, chat_moderated, chat_opened, comment_field, deleted, files_opened, hide_actions_menu, hide_activities_and_actions, hide_chat, hide_files_explorer, hide_screen_sharing, hide_top_bar, hide_whiteboard, is_audio_only, is_closed, isdemoroom, ismoderatedroom, ispublic, name, numberOfPartizipants, show_microphone_status, sip_enabled, starttime, wait_for_recording, roomtypes_id) VALUES(1,0,1,  0,0,    1,1,'',0,0,0,0,0,0,0,0,0,0,     0,0,0,1,'LliureX Room',32,0,0,NOW(),0,1)"
291               
292                cur.execute(query)
293                con.commit()   
294               
295                cur.execute("SELECT MAX(id) from room WHERE name='LliureX Room'")
296                data=cur.fetchone()
297                room_id=str(data[0])           
298               
299                query="INSERT INTO rooms_organisation(deleted,rooms_id,organisation_id) VALUES(0,%s,%s)"%(room_id,organization_id)
300                cur.execute(query)
301                con.commit()
302               
303               
304               
305        #def adding_llx_room
306       
307        def parse_template(self,f):
308               
309                config = ConfigParser.ConfigParser()
310                config.optionxform=str
311                config.read(f)
312               
313                self.template={}
314                try:
315
316                        self.template["db_user"]=config.get("openmeetings","db_user")
317                        self.template["db_pass"]=config.get("openmeetings","db_pass")
318                        self.template["admin"]=config.get("openmeetings","admin")
319                        self.template["password"]=config.get("openmeetings","password")
320                        self.template["email"]=config.get("openmeetings","email")
321                       
322                       
323                        print("* Template parsed succesfuly.")
324                        #print(self.template)
325                        return True
326                except Exception as e:
327                        print("[!] Error:",e)
328                        self.usage()
329               
330        #def parse_template
331       
332        def configure_ldap(self,project_dir=None):
333               
334                print("* Configuring ldap bind ...")
335               
336                if project_dir==None:
337                        project_dir=VAR_DIR
338                       
339                dest_file=project_dir+"/webapps/openmeetings/conf/lliurex_ldap.cfg"
340               
341                template=BASE_DIR+FILES_DIR
342                tpl_env = Environment(loader=FileSystemLoader(template))
343                ldap_template = tpl_env.get_template("lliurex_ldap.cfg")
344               
345                client=xmlrpclib.ServerProxy("https://localhost:9779")
346                vars=client.get_variable_list("","VariablesManager",["CLIENT_LDAP_URI_NOSSL","LDAP_BASE_DN"])
347                vars["CLIENT_LDAP_URI"]=vars["CLIENT_LDAP_URI_NOSSL"].replace("=",":")
348                vars["LDAP_BASE_DN"]=vars["LDAP_BASE_DN"].replace("=",":")
349               
350                f=open("/etc/lliurex-secrets/passgen/ldap.secret")
351                vars["LDAP_PASSWORD"]=f.readline().strip("\n")
352                f.close()
353               
354                content = ldap_template.render(vars).encode('UTF-8')
355               
356                f=open(dest_file,"w")
357                f.write(content)
358                f.close()
359               
360                os.system("chmod 600 %s"%dest_file)
361               
362               
363                user=self.template["db_user"]
364                password=self.template["db_pass"]
365               
366                con=mdb.connect('localhost',user,password,"openmeetings")
367                cur=con.cursor()
368               
369                query=[]
370               
371                query.append("INSERT INTO `ldapconfig` VALUES (NULL,'\0',NULL,'lliurex_ldap.cfg','\0',NULL,NOW(),'','LliureX LDAP Configuration',NULL,1,NULL)")
372                for q in query:
373                        #print("\t"+q+ " ...")
374                        cur.execute(q)
375                       
376                con.commit()
377               
378               
379        #def configure_ldap
380       
381        def fix_service_launcher(self,dir=None):
382               
383                print("* Adding service launcher script ...")
384               
385                if dir==None:
386                        dir=VAR_DIR
387                       
388                f=open("/usr/share/lliurex-openmeetings/lliurex-files/lliurex-openmeetings-service")
389                lines=f.readlines()
390                f.close()
391               
392                f=open("/usr/sbin/lliurex-openmeetings-service","w")
393                for line in lines:
394                        if "%%RED5_HOME%%" in line:
395                                line=line.replace("%%RED5_HOME%%",dir)
396                        f.write(line)
397                       
398                f.close()
399               
400                os.system("chmod +x /usr/sbin/lliurex-openmeetings-service")
401               
402               
403        #def fix_service_launcher
404       
405        def add_current_ldap_users(self):
406               
407                print("* Adding current LDAP users ...")
408               
409                c=xmlrpclib.ServerProxy("https://localhost:9779")
410                c.add_current_ldap_users(self.n4d_key,"LliurexOpenmeetings")
411               
412               
413        #def add_ldap_users
414       
415        def add_n4d_hooks(self):
416               
417                print("* Adding N4D hooks ...")
418                path="/usr/share/n4d/hooks/openmeetings/"
419               
420                if not os.path.exists(path):
421                        os.mkdir(path)
422                       
423                if os.path.exists(path+"openmeetings.py"):
424                        os.remove(path+"openmeetings.py")
425                       
426                shutil.copy(N4D_HOOK,path)
427               
428        #def configure_n4d_hooks
429       
430        def mysql_service_init(self):
431               
432                print("* Initializing mysql root passwd (if needed) ...")
433               
434                os.system("sudo mysql_root_passwd -i")
435               
436        #def mysql_service_init
437       
438        def add_index_diversion(self):
439               
440               
441                if not os.path.exists(DIVERTED_WWW_FILE):
442                       
443                        if os.path.exists(ORIGINAL_WWW_FILE):
444                       
445                                print("* Diverting index file ...")
446                       
447                                cmd="dpkg-divert --package lliurex-openmeetings --rename --quiet --add --divert  %s %s"%(DIVERTED_WWW_FILE,ORIGINAL_WWW_FILE)
448                                os.system(cmd)
449                                shutil.copy(INDEX_FILE,ORIGINAL_WWW_FILE)
450                               
451                                print("* Reloading apache ...")
452                                os.system("service apache2 reload")
453               
454               
455        #def add_index_diversion
456       
457        def parse_args(self,args):
458               
459                available=["--template","-t"]
460               
461                try:
462                       
463                        if args[0] not in available:
464                                self.usage()
465
466                       
467                        for i in range(0,len(args)):
468                                if args[i] in ["--template","-t"]:
469                                        self.parse_template(args[i+1])
470                                        i+=2
471                       
472                                if i>len(args):
473                                        break
474                except Exception as e:
475                       
476                        self.usage()
477               
478
479
480                try:
481                        self.get_n4d_key()
482                        self.create_var_dir()
483                        self.extract_tar()
484                        self.copy_mysql_connector(VAR_DIR+"webapps/openmeetings/WEB-INF/lib/")
485                        self.fix_persistence_file()
486                        self.fix_private_rooms()
487                        self.add_n4d_hooks()
488                        self.mysql_service_init()
489                        self.create_db_user()
490                        self.init_db()
491                        self.fix_bin_paths()
492                        self.remove_private_rooms_applet()
493                        self.remove_default_rooms()
494                        self.fix_login_zone()
495                        self.fix_login_combobox()
496                        self.configure_ldap()
497                        self.add_lliurex_group()
498                        self.add_llx_room()
499                        self.add_current_ldap_users()
500                        self.fix_service_launcher()
501                        self.add_index_diversion()
502                       
503                        sys.exit(0)
504                except Exception as e:
505                        print "[ERROR]",e
506                        sys.exit(1)
507                       
508               
509        #def parse_args
510       
511        def usage(self):
512               
513                print("")
514                print("USAGE: lliurex-openmeetings --template|-t TEMPLATE_FILE")
515                print("")
516                print("Template content:\n")
517                print("[openmeetings]")
518                print("db_user=user")
519                print("db_pass=password")
520                print("admin=user")
521                print("password=password")
522                print("email=uno@dos.com")
523                print("")
524               
525                sys.exit(0)
526               
527               
528        #def usage
529       
530#class LliurexOpenmeetings
531
532
533
534if __name__=="__main__":
535       
536        lom=LliurexOpenmeetings()
537        lom.parse_args(sys.argv[1:])
538       
539       
Note: See TracBrowser for help on using the repository browser.