Files
WPIQ/wo/core/variables.py
Malin 06352bbc30
Some checks failed
CI / test WordOps (ubuntu-22.04) (push) Has been cancelled
CI / test WordOps (ubuntu-24.04) (push) Has been cancelled
fix: align LSPHP module list with actual OLS repo packages
LSPHP packages don't have separate gd, mbstring, xml, zip, soap,
imap modules - these are bundled in lsphp-common. Updated module
list to only include packages that exist in the OLS repository:
common, curl, igbinary, imagick, intl, memcached, msgpack, mysql,
opcache, pear, redis, snmp, sqlite3, tidy.

Also update default PHP version to 8.5.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:51:26 +01:00

226 lines
7.7 KiB
Python

"""WordOps core variable module"""
import configparser
import os
import sys
from datetime import datetime
from re import match
from socket import getfqdn
from shutil import copy2
from distro import distro, linux_distribution
from sh import git
class WOVar():
"""Intialization of core variables"""
# WordOps version
wo_version = "3.22.0"
# WordOps packages versions
wo_adminer = "4.8.1"
wo_phpmyadmin = "5.2.0"
wo_extplorer = "2.1.15"
wo_dashboard = "1.3"
# Get WPCLI path
wpcli_url = "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"
wo_wpcli_path = '/usr/local/bin/wp'
# Current date and time of System
wo_date = datetime.now().strftime('%d%b%Y-%H-%M-%S')
# WordOps core variables
# linux distribution
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()
# Get timezone of system
if os.path.isfile('/etc/timezone'):
with open("/etc/timezone", mode='r', encoding='utf-8') as tzfile:
wo_timezone = tzfile.read().replace('\n', '')
if wo_timezone == "Etc/UTC":
wo_timezone = "UTC"
else:
wo_timezone = "Europe/Amsterdam"
# Get FQDN of system
wo_fqdn = getfqdn()
# 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
config = configparser.ConfigParser()
config.read(os.path.expanduser("~") + '/.gitconfig')
try:
wo_user = config['user']['name']
wo_email = config['user']['email']
except Exception:
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")
wo_user = input("Enter your name: ")
while wo_user == "":
print("Unfortunately, this can't be left blank")
wo_user = input("Enter your name: ")
wo_email = input("Enter your email: ")
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...")
wo_email = input("Enter your email: ")
git.config("--global", "user.name", "{0}".format(wo_user))
git.config("--global", "user.email", "{0}".format(wo_email))
if not os.path.isfile('/root/.gitconfig'):
copy2(os.path.expanduser("~") + '/.gitconfig', '/root/.gitconfig')
# 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"
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
# OpenLiteSpeed path constants
wo_ols_conf_dir = '/usr/local/lsws/conf'
wo_ols_vhost_dir = '/usr/local/lsws/conf/vhosts'
wo_ols_bin = '/usr/local/lsws/bin/openlitespeed'
wo_ols_ctrl = '/usr/local/lsws/bin/lswsctrl'
# OpenLiteSpeed repo and packages
wo_ols_repo = ("deb [signed-by=/usr/share/keyrings/openlitespeed-archive-keyring.gpg] "
"http://rpms.litespeedtech.com/debian/ "
"{0} main".format(wo_platform_codename))
wo_ols = ["openlitespeed"]
wo_ols_repo_key = "https://rpms.litespeedtech.com/debian/lst_repo.gpg"
wo_php_versions = {
'php74': '7.4',
'php80': '8.0',
'php81': '8.1',
'php82': '8.2',
'php83': '8.3',
'php84': '8.4',
'php85': '8.5',
}
def generate_lsphp_modules(version_prefix, version_number):
"""Generate LSPHP module package list for a given PHP version.
LSPHP packages use lsphpXX- naming (no dot in version).
Note: gd, mbstring, xml, zip, soap, imap are bundled in
lsphp-common and do not have separate packages."""
short_ver = version_number.replace('.', '')
wo_module = ["common", "curl", "igbinary",
"imagick", "intl", "memcached", "msgpack",
"mysql", "opcache", "pear", "redis",
"snmp", "sqlite3", "tidy"]
# lsphp packages: lsphpXX, lsphpXX-common, lsphpXX-curl, etc.
php_modules = ["lsphp{0}".format(short_ver)]
php_modules.extend(["lsphp{0}-{1}".format(short_ver, module) for module in wo_module])
if version_prefix == 'php74':
php_modules.extend(["lsphp{0}-json".format(short_ver)])
return php_modules
wo_php74 = generate_lsphp_modules('php74', '7.4')
wo_php80 = generate_lsphp_modules('php80', '8.0')
wo_php81 = generate_lsphp_modules('php81', '8.1')
wo_php82 = generate_lsphp_modules('php82', '8.2')
wo_php83 = generate_lsphp_modules('php83', '8.3')
wo_php84 = generate_lsphp_modules('php84', '8.4')
wo_php85 = generate_lsphp_modules('php85', '8.5')
wo_php_extra = ["graphviz"]
wo_mysql = [
"mariadb-server", "percona-toolkit",
"mariadb-common", "python3-mysqldb"]
if wo_distro == 'raspbian':
mariadb_ver = '10.3'
elif wo_platform_codename == 'trixie':
mariadb_ver = ''
wo_mysql = wo_mysql + ["mariadb-backup"]
else:
mariadb_ver = '11.4'
wo_mysql = wo_mysql + ["mariadb-backup"]
wo_mysql_client = ["mariadb-client", "python3-mysqldb"]
wo_fail2ban = ["fail2ban"]
wo_clamav = ["clamav", "clamav-freshclam"]
# APT repositories
if mariadb_ver:
wo_mysql_repo = ("deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] "
"http://deb.mariadb.org/"
f"{mariadb_ver}/{wo_distro} {wo_platform_codename} main")
else:
# trixie: use native Debian mariadb packages, no external repo
wo_mysql_repo = ""
mariadb_repo_key = "https://mariadb.org/mariadb_release_signing_key.pgp"
if wo_distro == 'ubuntu':
# LSPHP comes from LiteSpeed repo (same as OLS)
wo_php_repo = wo_ols_repo
wo_goaccess_repo = ("ppa:alex-p/goaccess")
else:
# LSPHP comes from LiteSpeed repo (same as OLS)
wo_php_repo = wo_ols_repo
wo_php_key = wo_ols_repo_key
wo_redis_key_url = "https://packages.redis.io/gpg"
wo_redis_repo = (
"deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] "
f"https://packages.redis.io/deb {wo_platform_codename} main")
wo_redis = ['redis-server']
netdata_script_url = "https://get.netdata.cloud/kickstart.sh"
# 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