Files
WPIQ/wo/core/variables.py

235 lines
8.1 KiB
Python
Raw Normal View History

2019-08-16 23:26:23 +02:00
"""WordOps core variable module"""
import configparser
2019-09-04 20:36:15 +02:00
import os
import sys
2019-10-02 13:13:32 +02:00
from datetime import datetime
from re import match
from socket import getfqdn
from shutil import copy2
2019-09-04 20:36:15 +02:00
from distro import distro, linux_distribution
2019-10-02 13:13:32 +02:00
from sh import git
2019-08-16 23:26:23 +02:00
2019-10-02 13:13:32 +02:00
class WOVar():
2019-08-16 23:26:23 +02:00
"""Intialization of core variables"""
# WordOps version
2024-04-21 21:39:24 +02:00
wo_version = "3.20.0"
2019-08-16 23:26:23 +02:00
# WordOps packages versions
2024-04-21 18:18:13 +02:00
wo_wp_cli = "2.10.0"
wo_adminer = "4.8.1"
2022-09-09 14:28:42 +02:00
wo_phpmyadmin = "5.2.0"
2023-01-05 22:02:52 +01:00
wo_extplorer = "2.1.15"
2024-04-21 17:40:53 +02:00
wo_dashboard = "1.3"
2019-08-16 23:26:23 +02:00
# Get WPCLI path
wo_wpcli_path = '/usr/local/bin/wp'
# Current date and time of System
2019-10-02 13:13:32 +02:00
wo_date = datetime.now().strftime('%d%b%Y-%H-%M-%S')
2019-08-16 23:26:23 +02:00
# WordOps core variables
# linux distribution
2022-10-25 10:35:22 +02:00
if sys.version_info <= (3, 5):
wo_distro = linux_distribution(
full_distribution_name=False)[0].lower()
wo_platform_version = linux_distribution(
full_distribution_name=False)[1].lower()
# distro codename (bionic, xenial, stretch ...)
wo_platform_codename = linux_distribution(
full_distribution_name=False)[2].lower()
else:
wo_distro = distro.id()
wo_platform_version = distro.version()
# distro codename (bionic, xenial, stretch ...)
wo_platform_codename = distro.codename()
2019-08-16 23:26:23 +02:00
# Get timezone of system
if os.path.isfile('/etc/timezone'):
with open("/etc/timezone", mode='r', encoding='utf-8') as tzfile:
2019-08-16 23:26:23 +02:00
wo_timezone = tzfile.read().replace('\n', '')
if wo_timezone == "Etc/UTC":
wo_timezone = "UTC"
else:
wo_timezone = "Europe/Amsterdam"
# Get FQDN of system
2019-10-02 13:13:32 +02:00
wo_fqdn = getfqdn()
2019-08-16 23:26:23 +02:00
# WordOps default webroot path
wo_webroot = '/var/www/'
# WordOps default renewal SSL certificates path
wo_ssl_archive = '/etc/letsencrypt/renewal'
# WordOps default live SSL certificates path
wo_ssl_live = '/etc/letsencrypt/live'
# PHP user
wo_php_user = 'www-data'
# WordOps git configuration management
2019-08-16 23:26:23 +02:00
config = configparser.ConfigParser()
config.read(os.path.expanduser("~") + '/.gitconfig')
2019-08-16 23:26:23 +02:00
try:
wo_user = config['user']['name']
wo_email = config['user']['email']
except Exception:
2019-10-02 13:13:32 +02:00
print("WordOps (wo) require an username & and an email "
"address to configure Git (used to save server configurations)")
print("Your informations will ONLY be stored locally")
2019-08-16 23:26:23 +02:00
wo_user = input("Enter your name: ")
2019-10-02 13:13:32 +02:00
while wo_user == "":
print("Unfortunately, this can't be left blank")
wo_user = input("Enter your name: ")
2019-08-16 23:26:23 +02:00
wo_email = input("Enter your email: ")
2019-10-02 13:13:32 +02:00
while not match(r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$",
wo_email):
print("Whoops, seems like you made a typo - "
"the e-mail address is invalid...")
2019-10-02 13:13:32 +02:00
wo_email = input("Enter your email: ")
git.config("--global", "user.name", "{0}".format(wo_user))
git.config("--global", "user.email", "{0}".format(wo_email))
2019-08-16 23:26:23 +02:00
if not os.path.isfile('/root/.gitconfig'):
copy2(os.path.expanduser("~") + '/.gitconfig', '/root/.gitconfig')
2019-08-16 23:26:23 +02:00
# MySQL hostname
wo_mysql_host = ""
config = configparser.RawConfigParser()
if os.path.exists('/etc/mysql/conf.d/my.cnf'):
cnfpath = "/etc/mysql/conf.d/my.cnf"
else:
cnfpath = os.path.expanduser("~") + "/.my.cnf"
2019-08-16 23:26:23 +02:00
if [cnfpath] == config.read(cnfpath):
try:
wo_mysql_host = config.get('client', 'host')
except configparser.NoOptionError:
wo_mysql_host = "localhost"
else:
wo_mysql_host = "localhost"
# WordOps stack installation variables
# Nginx repo and packages
if wo_distro == 'ubuntu':
wo_nginx_repo = "ppa:wordops/nginx-wo"
2020-10-15 13:24:00 +02:00
wo_extra_repo = (
"deb http://download.opensuse.org"
"/repositories/home:/virtubox:"
2020-10-15 13:25:07 +02:00
"/WordOps/xUbuntu_{0}/ /".format(wo_platform_version))
2019-08-27 22:21:22 +02:00
else:
if wo_distro == 'debian':
if wo_platform_codename == 'jessie':
wo_deb_repo = "Debian_8.0"
elif wo_platform_codename == 'stretch':
wo_deb_repo = "Debian_9.0"
elif wo_platform_codename == 'buster':
wo_deb_repo = "Debian_10"
elif wo_platform_codename == 'bullseye':
wo_deb_repo = "Debian_11"
2023-06-24 23:49:10 +03:00
elif wo_platform_codename == 'bookworm':
wo_deb_repo = "Debian_12"
2019-08-27 22:21:22 +02:00
elif wo_distro == 'raspbian':
if wo_platform_codename == 'stretch':
wo_deb_repo = "Raspbian_9.0"
elif wo_platform_codename == 'buster':
wo_deb_repo = "Raspbian_10"
elif wo_platform_codename == 'bullseye':
wo_deb_repo = "Raspbian_11"
2019-08-27 22:21:22 +02:00
# debian/raspbian nginx repository
wo_nginx_repo = ("deb http://download.opensuse.org"
"/repositories/home:"
"/virtubox:/WordOps/{0}/ /"
.format(wo_deb_repo))
2019-08-16 23:26:23 +02:00
wo_nginx = ["nginx-custom", "nginx-wo"]
2023-08-01 18:25:59 +02:00
wo_nginx_key = 'FB898660'
2019-08-16 23:26:23 +02:00
2023-08-05 15:47:01 +02:00
wo_php_versions = {
'php72': '7.2',
'php73': '7.3',
'php74': '7.4',
'php80': '8.0',
'php81': '8.1',
'php82': '8.2',
2023-11-23 21:33:09 +01:00
'php83': '8.3',
2023-08-05 15:47:01 +02:00
}
2023-08-05 17:31:10 +02:00
def generate_php_modules(version_prefix, version_number):
wo_module = ["bcmath", "cli", "common", "curl", "fpm", "gd", "igbinary",
"imagick", "imap", "intl", "mbstring", "memcached", "msgpack",
2023-11-30 23:30:24 +01:00
"mysql", "opcache", "readline", "redis", "soap", "xdebug",
2023-08-05 17:31:10 +02:00
"xml", "zip"]
2023-08-05 17:53:40 +02:00
php_modules = ["php{0}-{1}".format(version_number, module) for module in wo_module]
2023-08-05 17:31:10 +02:00
if version_prefix == 'php72' or version_prefix == 'php73':
2023-08-05 17:53:40 +02:00
php_modules.append("php{0}-recode".format(version_number))
2023-08-05 17:31:10 +02:00
elif version_prefix == 'php74':
2023-11-30 23:30:24 +01:00
php_modules.extend(["php{0}-geoip".format(version_number),
"php{0}-json".format(version_number)])
2023-08-05 17:31:10 +02:00
return php_modules
wo_php72 = generate_php_modules('php72', '7.2')
wo_php73 = generate_php_modules('php73', '7.3')
wo_php74 = generate_php_modules('php74', '7.4')
wo_php80 = generate_php_modules('php80', '8.0')
wo_php81 = generate_php_modules('php81', '8.1')
wo_php82 = generate_php_modules('php82', '8.2')
2023-11-23 21:33:09 +01:00
wo_php83 = generate_php_modules('php83', '8.3')
2020-10-12 10:20:03 +02:00
wo_php_extra = ["graphviz"]
2019-08-16 23:26:23 +02:00
2020-10-28 11:45:30 +01:00
wo_mysql = [
"mariadb-server", "percona-toolkit",
"mariadb-common", "python3-mysqldb"]
2019-10-12 11:07:25 +02:00
if wo_distro == 'raspbian':
2023-08-05 17:31:10 +02:00
mariadb_ver = '10.3'
2019-09-06 13:17:37 +02:00
else:
2023-04-03 16:11:04 +08:00
mariadb_ver = '10.11'
2020-10-28 11:45:30 +01:00
wo_mysql = wo_mysql + ["mariadb-backup"]
2019-09-06 13:17:37 +02:00
2020-10-28 11:45:30 +01:00
wo_mysql_client = ["mariadb-client", "python3-mysqldb"]
2019-08-16 23:26:23 +02:00
wo_fail2ban = ["fail2ban"]
2019-08-31 12:18:16 +02:00
wo_clamav = ["clamav", "clamav-freshclam"]
2019-10-31 15:42:42 +01:00
wo_ubuntu_backports = 'ppa:jonathonf/backports'
2019-08-16 23:26:23 +02:00
# APT repositories
wo_mysql_repo = ("deb [arch=amd64,arm64,ppc64el] "
"http://mariadb.mirrors.ovh.net/MariaDB/repo/"
"{version}/{distro} {codename} main"
.format(version=mariadb_ver,
distro=wo_distro,
codename=wo_platform_codename))
2019-08-16 23:26:23 +02:00
if wo_distro == 'ubuntu':
2019-09-23 12:24:10 +02:00
wo_php_repo = "ppa:ondrej/php"
wo_goaccess_repo = ("ppa:alex-p/goaccess")
2019-08-16 23:26:23 +02:00
else:
2019-09-23 12:24:10 +02:00
wo_php_repo = (
"deb https://packages.sury.org/php/ {codename} main"
.format(codename=wo_platform_codename))
2023-08-01 18:25:59 +02:00
wo_php_key = '95BD4743'
2022-10-20 12:55:51 +02:00
wo_redis_key_url = "https://packages.redis.io/gpg"
wo_redis_repo = ("deb https://packages.redis.io/deb {codename} main"
.format(codename=wo_platform_codename))
2019-08-16 23:26:23 +02:00
2019-09-04 16:55:58 +02:00
wo_redis = ['redis-server']
2019-08-16 23:26:23 +02:00
# Repo path
wo_repo_file = "wo-repo.list"
wo_repo_file_path = ("/etc/apt/sources.list.d/" + wo_repo_file)
# Application dabase file path
basedir = os.path.abspath(os.path.dirname('/var/lib/wo/'))
wo_db_uri = 'sqlite:///' + os.path.join(basedir, 'dbase.db')
def __init__(self):
pass