#!/usr/bin/python3 -u import sys, os import subprocess import argparse import platform import shutil import pathlib import distro import pwd import getpass #import pymysql.cursors #pymysql.install_as_MySQLdb pyv=platform.python_version_tuple() if pyv[0]!='3': print('Need python 3 for execute this script') sys.exit(1) parser = argparse.ArgumentParser(description='Script for create a new wordpress site.') parser.add_argument('--domain', help='The domain where is the site', required=True) parser.add_argument('--home_user', help='The name of the new user', required=True) parser.add_argument('--user', help='The name of the new user', required=True) parser.add_argument('--path', help='The path of the wordpress install') parser.add_argument('--server_mysql', help='Server of MySQL database', required=True) parser.add_argument('--port_mysql', help='The port of the MySQL server', required=True, type=int) parser.add_argument('--php_version', help='PHP version', required=True) args = parser.parse_args() php_version=args.php_version php_command='/usr/bin/php'+str(php_version) linux_distro=distro.id() if linux_distro=='arch': php_command='/usr/bin/php-legacy' system_user=getpass.getuser() apache_cmd='apache2' apachectl='apache2ctl' if linux_distro!='debian' and linux_distro!='ubuntu': apache_cmd='httpd' apachectl='apachectl' if linux_distro=='rocky' or linux_distro=='fedora' or linux_distro=='almalinux' or linux_distro=='centos': apache_group='apache' php_command=php_command.replace('.', '') if linux_distro=='arch': apache_group='http' home_user=args.home_user if home_user.find('/', -1)==-1: print("Error: you need backslash in home_user option") exit(1) home_user_default=home_user.replace('/htdocs/', '') stat_group=os.stat(home_user) uid=stat_group.st_uid user=pwd.getpwuid(uid)[0] if args.path and args.path!='/': home_user=args.home_user.replace('/htdocs/', args.path) """ if not os.path.isdir(home_user): #os.mkdir(home_user) if subprocess.call("sudo su %s -s /bin/bash -c 'mkdir -p %s'" % (user, home_user), shell=True) > 0: print("Error, cannot create phpmyadmin folder sudo su %s -s /bin/bash -c 'mkdir -p %s'" % (args.user, home_user)+"\n") sys.exit(1) else: print("Error, exists a directory with same name, i cannot install phpmyadmin in this folder") sys.exit(1) """ #os.chdir(home_user) else: home_user=args.home_user phpmyadmin_dir=args.home_user.replace('/htdocs/', '/phpmyadmin/') if os.path.isdir(phpmyadmin_dir): print('Cleaning directory %s because is not empty, probably by an error in other install' % phpmyadmin_dir) if subprocess.call("sudo su %s -s /bin/bash -c 'rm -f -r %s'" % (user, phpmyadmin_dir), shell=True) > 0: print('Error: cannot clean to {}\n'.format(phpmyadmin_dir)) sys.exit(1) #os.chdir(home_user) #print(home_user) #sys.exit(0) # Php-fpm for user #if not os.path.isfile('/etc/') #shutil.chown('/var/www/sites/'+args.domain, 'hosting', 'hosting') #Dash, the default debian stretch shell, don't support <<< #sudo debconf-set-selections <<< 'mariadb-server mariadb-server/root_password password your_password' #sudo debconf-set-selections <<< 'mariadb-server mariadb-server/root_password_again password your_password' print('Installing phpmyadmin...') # composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev --working-dir={} ret_install=subprocess.call("sudo su %s -s /bin/bash -c '%s /usr/local/bin/composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev --working-dir=%s'" % (user, php_command, home_user_default), shell=True) if ret_install > 0 and ret_install!=5: print('Error: cannot install phpmyadmin with composer in {} with code {}\n'.format(home_user, ret_install)) sys.exit(1) if ret_install==5: print('Updating phpmyadmin using composer...\n') if subprocess.call("sudo su %s -s /bin/bash -c 'cd %s && %s /usr/local/bin/composer update'" % (user,home_user_default+'/phpmyadmin/', php_command), shell=True) > 0: print('Error: cannot update phpmyadmin with composer in {}\n'.format(home_user)) sys.exit(1) if home_user.find('/htdocs/', -8)!=-1: if subprocess.call("sudo su %s -s /bin/bash -c 'cd %s && mv htdocs htdocs_old && mv phpmyadmin htdocs'" % (user, home_user_default), shell=True) > 0: print('Error: cannot move phpmyadmin to {}\n'.format(home_user)) sys.exit(1) pass else: if args.path!='/phpmyadmin/': if subprocess.call("sudo su %s -s /bin/bash -c 'cd %s && mv phpmyadmin %s'" % (user, home_user_default, home_user), shell=True) > 0: print('Error: cannot move phpmyadmin to {}\n'.format(home_user)) sys.exit(1) pass if args.server_mysql: #echo "\$cfg['Servers'][\$i]['host'] = '$MYSQL_HOST';" >> config.inc.php # $cfg['Servers'][$i]['host'] = '%s'; config_servers=''; if subprocess.call("sudo su {} -s /bin/bash -c 'cp {}/config.sample.inc.php {}/config.inc.php && echo \"\$cfg[\\\"Servers\\\"][\$i][\\\"host\\\"] = \\\"{}:{}\\\";\" >> {}/config.inc.php'".format(user, home_user, home_user, args.server_mysql, args.port_mysql, home_user), shell=True) > 0: print('Error: cannot update config of phpmyadmin {}\n'.format(home_user)) sys.exit(1) """ if subprocess.call("sudo mv %s %s & rmdir %s" % (home_user+'/phpmyadmin/*', home_user), shell=True) > 0: print('Error: cannot move phpmyadmin to {}'.format(home_user)) sys.exit(1) """ if args.path!='/': alias_apache=" Alias {} {} \n\ \n\ Options FollowSymLinks MultiViews \n\ AllowOverride All \n\ Require all granted \n\ \n\ \n\ ProxyPass ! \n\ \n\ ".format(args.path[:-1], home_user, home_user, args.path[:-1]) base_name_file='{}-{}.conf'.format(args.domain, os.path.basename(args.path[:1])) name_file='/home/{}/{}-{}.conf'.format(system_user, args.domain, os.path.basename(args.path[:1])) with open(name_file, 'w') as f: f.write(alias_apache) print('Updating apache configuration for wordpress outside of htdocs...\n') if subprocess.call('sudo mv {} /etc/{}/vhosts.d/extra && sudo chown root:root /etc/{}/vhosts.d/extra/{}'.format(name_file, apache_cmd, apache_cmd, base_name_file), shell=True) > 0: print('Error') sys.exit(1) print('Restarting apache...') if subprocess.call('sudo '+apachectl+' configtest && sudo systemctl restart '+apache_cmd, shell=True) > 0: subprocess.call('sudo rm /etc/{}/vhosts.d/extra/{}'.format(apache_cmd, base_name_file), shell=True) print('Error: Error in configtest\n') sys.exit(1) print('phpmyadmin installed!')