Files
WPIQ/wo/core/variables.py
Malin eaa5a95168
Some checks failed
CI / test WordOps (ubuntu-22.04) (push) Has been cancelled
CI / test WordOps (ubuntu-24.04) (push) Has been cancelled
fix: make lsphp opcache conditional — not available for PHP 8.5
lsphp85-opcache doesn't exist in the LiteSpeed repo (opcache is
bundled in the base lsphp85 package). Only add opcache as a
separate package for PHP 7.4-8.4.

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

230 lines
7.9 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", "pear", "redis",
"snmp", "sqlite3", "tidy"]
# opcache is a separate package only on older PHP versions
if version_number in ('7.4', '8.0', '8.1', '8.2', '8.3', '8.4'):
wo_module.append("opcache")
# 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