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

Last change on this file since 645 was 645, checked in by mabarracus, 4 years ago

fix

  • Property svn:executable set to *
File size: 12.9 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.7.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                cmd='mysql -uroot -p$(mysql_root_passwd -g) -e "create database openmeetings default charset set utf8"'
167                os.system(cmd)
168               
169                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)
170                os.system(cmd)
171               
172               
173        #def init_db
174       
175        def fix_bin_paths(self):
176               
177                print("* Fixing binary paths ...")
178                user=self.template["db_user"]
179                password=self.template["db_pass"]
180               
181                con=mdb.connect('localhost',user,password,"openmeetings")
182                cur=con.cursor()
183               
184                query=[]
185                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=18")
186                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=19")
187                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=20")
188                query.append("UPDATE configuration SET conf_value='/usr/bin/' WHERE ID=21")
189                query.append("UPDATE configuration SET conf_value='%s' WHERE ID=23"%JODCONVERTER_PATH)
190               
191                for q in query:
192                        #print("\t"+q+ " ...")
193                        cur.execute(q)
194                       
195                con.commit()
196               
197        #def fix_bin_paths
198       
199       
200        def fix_login_zone(self):
201               
202                print("* Fixing login landing zone ...")
203                user=self.template["db_user"]
204                password=self.template["db_pass"]
205               
206                con=mdb.connect('localhost',user,password,"openmeetings")
207                cur=con.cursor()
208               
209                query=[]
210               
211                query.append("UPDATE configuration SET conf_value='rooms/public' WHERE ID=52")
212               
213                for q in query:
214                        #print("\t"+q+ " ...")
215                        cur.execute(q)
216                       
217                con.commit()
218               
219        #def fix_bin_paths
220       
221        def fix_login_combobox(self):
222               
223               
224                print("* Fixing login combobox ...")
225                user=self.template["db_user"]
226                password=self.template["db_pass"]
227               
228                con=mdb.connect('localhost',user,password,"openmeetings")
229                cur=con.cursor()
230               
231                query=[]
232               
233                query.append("UPDATE configuration SET conf_value='1' WHERE ID=50")
234               
235                for q in query:
236                        #print("\t"+q+ " ...")
237                        cur.execute(q)
238                       
239                con.commit()
240               
241        #def fix_bin_paths     
242
243
244
245       
246        def add_lliurex_group(self):
247               
248                print("* Adding LliureX group ...")
249                user=self.template["db_user"]
250                password=self.template["db_pass"]
251               
252                con=mdb.connect('localhost',user,password,"openmeetings")
253                cur=con.cursor()
254               
255                #query="DELETE from organisation;"
256                #cur.execute(query)
257                query="INSERT INTO organisation(deleted,insertedby,name,starttime) VALUES(0,1,'Lliurex Default Group',NOW())"
258                cur.execute(query)
259                con.commit()
260               
261        #def add_lliurex_group
262       
263        def remove_default_rooms(self):
264               
265                print("* Removing default rooms ...")
266                user=self.template["db_user"]
267                password=self.template["db_pass"]
268               
269                con=mdb.connect('localhost',user,password,"openmeetings")
270                cur=con.cursor()
271               
272                query="DELETE from room;"
273                cur.execute(query)
274                con.commit()
275               
276        #def remove_default_rooms
277       
278        def add_llx_room(self):
279               
280                print("* Adding LLX room ...")
281                user=self.template["db_user"]
282                password=self.template["db_pass"]
283               
284                con=mdb.connect('localhost',user,password,"openmeetings")
285                cur=con.cursor()
286               
287               
288                cur.execute("SELECT MAX(id) from organisation WHERE name='Lliurex Default Group'")
289                data=cur.fetchone()
290                organization_id=str(data[0])           
291               
292                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)"
293               
294                cur.execute(query)
295                con.commit()   
296               
297                cur.execute("SELECT MAX(id) from room WHERE name='LliureX Room'")
298                data=cur.fetchone()
299                room_id=str(data[0])           
300               
301                query="INSERT INTO rooms_organisation(deleted,rooms_id,organisation_id) VALUES(0,%s,%s)"%(room_id,organization_id)
302                cur.execute(query)
303                con.commit()
304               
305               
306               
307        #def adding_llx_room
308       
309        def parse_template(self,f):
310               
311                config = ConfigParser.ConfigParser()
312                config.optionxform=str
313                config.read(f)
314               
315                self.template={}
316                try:
317
318                        self.template["db_user"]=config.get("openmeetings","db_user")
319                        self.template["db_pass"]=config.get("openmeetings","db_pass")
320                        self.template["admin"]=config.get("openmeetings","admin")
321                        self.template["password"]=config.get("openmeetings","password")
322                        self.template["email"]=config.get("openmeetings","email")
323                       
324                       
325                        print("* Template parsed succesfuly.")
326                        #print(self.template)
327                        return True
328                except Exception as e:
329                        print("[!] Error:",e)
330                        self.usage()
331               
332        #def parse_template
333       
334        def configure_ldap(self,project_dir=None):
335               
336                print("* Configuring ldap bind ...")
337               
338                if project_dir==None:
339                        project_dir=VAR_DIR
340                       
341                dest_file=project_dir+"/webapps/openmeetings/conf/lliurex_ldap.cfg"
342               
343                template=BASE_DIR+FILES_DIR
344                tpl_env = Environment(loader=FileSystemLoader(template))
345                ldap_template = tpl_env.get_template("lliurex_ldap.cfg")
346               
347                client=xmlrpclib.ServerProxy("https://localhost:9779")
348                vars=client.get_variable_list("","VariablesManager",["CLIENT_LDAP_URI_NOSSL","LDAP_BASE_DN"])
349                vars["CLIENT_LDAP_URI"]=vars["CLIENT_LDAP_URI_NOSSL"].replace("=",":")
350                vars["LDAP_BASE_DN"]=vars["LDAP_BASE_DN"].replace("=",":")
351               
352                f=open("/etc/lliurex-secrets/passgen/ldap.secret")
353                vars["LDAP_PASSWORD"]=f.readline().strip("\n")
354                f.close()
355               
356                content = ldap_template.render(vars).encode('UTF-8')
357               
358                f=open(dest_file,"w")
359                f.write(content)
360                f.close()
361               
362                os.system("chmod 600 %s"%dest_file)
363               
364               
365                user=self.template["db_user"]
366                password=self.template["db_pass"]
367               
368                con=mdb.connect('localhost',user,password,"openmeetings")
369                cur=con.cursor()
370               
371                query=[]
372               
373                query.append("INSERT INTO `ldapconfig` VALUES (NULL,'\0',NULL,'lliurex_ldap.cfg','\0',NULL,NOW(),'','LliureX LDAP Configuration',NULL,1,NULL)")
374                for q in query:
375                        #print("\t"+q+ " ...")
376                        cur.execute(q)
377                       
378                con.commit()
379               
380               
381        #def configure_ldap
382       
383        def fix_service_launcher(self,dir=None):
384               
385                print("* Adding service launcher script ...")
386               
387                if dir==None:
388                        dir=VAR_DIR
389                       
390                f=open("/usr/share/lliurex-openmeetings/lliurex-files/lliurex-openmeetings-service")
391                lines=f.readlines()
392                f.close()
393               
394                f=open("/usr/sbin/lliurex-openmeetings-service","w")
395                for line in lines:
396                        if "%%RED5_HOME%%" in line:
397                                line=line.replace("%%RED5_HOME%%",dir)
398                        f.write(line)
399                       
400                f.close()
401               
402                os.system("chmod +x /usr/sbin/lliurex-openmeetings-service")
403               
404               
405        #def fix_service_launcher
406       
407        def add_current_ldap_users(self):
408               
409                print("* Adding current LDAP users ...")
410               
411                c=xmlrpclib.ServerProxy("https://localhost:9779")
412                c.add_current_ldap_users(self.n4d_key,"LliurexOpenmeetings")
413               
414               
415        #def add_ldap_users
416       
417        def add_n4d_hooks(self):
418               
419                print("* Adding N4D hooks ...")
420                path="/usr/share/n4d/hooks/openmeetings/"
421               
422                if not os.path.exists(path):
423                        os.mkdir(path)
424                       
425                if os.path.exists(path+"openmeetings.py"):
426                        os.remove(path+"openmeetings.py")
427                       
428                shutil.copy(N4D_HOOK,path)
429               
430        #def configure_n4d_hooks
431       
432        def mysql_service_init(self):
433               
434                print("* Initializing mysql root passwd (if needed) ...")
435               
436                os.system("sudo mysql_root_passwd -i")
437               
438        #def mysql_service_init
439       
440        def add_index_diversion(self):
441               
442               
443                if not os.path.exists(DIVERTED_WWW_FILE):
444                       
445                        if os.path.exists(ORIGINAL_WWW_FILE):
446                       
447                                print("* Diverting index file ...")
448                       
449                                cmd="dpkg-divert --package lliurex-openmeetings --rename --quiet --add --divert  %s %s"%(DIVERTED_WWW_FILE,ORIGINAL_WWW_FILE)
450                                os.system(cmd)
451                                shutil.copy(INDEX_FILE,ORIGINAL_WWW_FILE)
452                               
453                                print("* Reloading apache ...")
454                                os.system("service apache2 reload")
455               
456               
457        #def add_index_diversion
458       
459        def parse_args(self,args):
460               
461                available=["--template","-t"]
462               
463                try:
464                       
465                        if args[0] not in available:
466                                self.usage()
467
468                       
469                        for i in range(0,len(args)):
470                                if args[i] in ["--template","-t"]:
471                                        self.parse_template(args[i+1])
472                                        i+=2
473                       
474                                if i>len(args):
475                                        break
476                except Exception as e:
477                       
478                        self.usage()
479               
480
481
482                try:
483                        self.get_n4d_key()
484                        self.create_var_dir()
485                        self.extract_tar()
486                        self.copy_mysql_connector(VAR_DIR+"webapps/openmeetings/WEB-INF/lib/")
487                        self.fix_persistence_file()
488                        self.fix_private_rooms()
489                        self.add_n4d_hooks()
490                        self.mysql_service_init()
491                        self.create_db_user()
492                        self.init_db()
493                        self.fix_bin_paths()
494                        self.remove_private_rooms_applet()
495                        self.remove_default_rooms()
496                        self.fix_login_zone()
497                        self.fix_login_combobox()
498                        self.configure_ldap()
499                        self.add_lliurex_group()
500                        self.add_llx_room()
501                        self.add_current_ldap_users()
502                        self.fix_service_launcher()
503                        self.add_index_diversion()
504                       
505                        sys.exit(0)
506                except Exception as e:
507                        print "[ERROR]",e
508                        sys.exit(1)
509                       
510               
511        #def parse_args
512       
513        def usage(self):
514               
515                print("")
516                print("USAGE: lliurex-openmeetings --template|-t TEMPLATE_FILE")
517                print("")
518                print("Template content:\n")
519                print("[openmeetings]")
520                print("db_user=user")
521                print("db_pass=password")
522                print("admin=user")
523                print("password=password")
524                print("email=uno@dos.com")
525                print("")
526               
527                sys.exit(0)
528               
529               
530        #def usage
531       
532#class LliurexOpenmeetings
533
534
535
536if __name__=="__main__":
537       
538        lom=LliurexOpenmeetings()
539        lom.parse_args(sys.argv[1:])
540       
541       
Note: See TracBrowser for help on using the repository browser.