Skip to content
class.ISPConfigDebianOS.inc.php 43.5 KiB
Newer Older
<?php
/**
 * Description of class
 *
 * @author croydon
 */
class ISPConfigDebianOS extends ISPConfigBaseOS {
	public function getPackageVersion($package) {
		$cmd = 'dpkg --list ' . $package . ' 2>&1';
		$result = $this->exec($cmd);
		$version = false;
		$matches = array();
		if(preg_match_all('/^ii\s+\S+\s+(\S+)(?:\s|$)/m', $result, $matches, PREG_SET_ORDER)) {
			for($i = 0; $i < count($matches); $i++) {
				$tmp_version = $matches[$i][1];
				if(!$version || ISPProtectFunctions::version_compare($version, $tmp_version, '<')) {
					$version = $tmp_version;
				}
			}
		}
	public function getPackageAlias($package) {
		switch($package) {
			case 'libssl':
				$package = 'libssl[0-9]*';
				break;
			case 'kernel':
				$package = 'linux-image-[0-9]*';
				break;
		}
Marius Burkard's avatar
Marius Burkard committed
	public function getUpdateCommand($mode = 'update') {
		if($mode == 'prepare') {
			$cmd = 'DEBIAN_FRONTEND="noninteractive" apt-get update -qq -y';
		} elseif($mode == 'update') {
			// for updating all updateable packages
			$cmd = 'DEBIAN_FRONTEND="noninteractive" apt-get dist-upgrade -o Dpkg::Options::="--force-overwrite" -qq -y';
		} elseif($mode == 'install' || $mode == 'partly_update') {
			// for installing / updating specific packages
			$cmd = 'DEBIAN_FRONTEND="noninteractive" apt-get install -o Dpkg::Options::="--force-overwrite" -qq -y';
			$cmd .= ' <PACKAGES>';
		}
		$cmd = 'while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1 ; do sleep 2; done; ' . $cmd . ' 2>&1';
	public function getUpdatePackageRegex() {
		$regex = '^\w+\s+(?P<package>\S+)\s+(?:\[(?P<oldversion>\S+)\]\s*)?(?:\((?P<newversion>\S+))?(?:\s|$)';
	public function getInstallPackageRegex($mode = '') {
		if($mode == 'oldversion') {
			$regex = '(?P<package>\S+)\s+(?:(?P<oldversion>\d\S+)\s+)?\(.*\.deb';
		} elseif($mode == 'newversion') {
			$regex = '(?:^|\s+)(?P<package>\S+)\s+\((?P<newversion>\d\S*)\)\s+';
		} else {
			$regex = ''; // not on debian!
		}
	public function getRestartServiceCommand($service, $command = 'restart') {
Marius Burkard's avatar
Marius Burkard committed
		if($command != 'start' && $command != 'stop' && $command != 'status') {
			$command = 'restart';
		}

		switch($service) {
			case 'apache':
				$service = 'apache2';
				break;
			case 'pureftpd':
				$service = 'pure-ftpd-mysql';
				break;
		}
		return 'service ' . escapeshellarg($service) . ' ' . $command . ' 2>&1';
	}
Marius Burkard's avatar
Marius Burkard committed
	protected function updateMySQLConfig($mysql_root_pw) {
Marius Burkard's avatar
Marius Burkard committed
		ISPConfigLog::info('Writing MySQL config files.', true);
Marius Burkard's avatar
Marius Burkard committed
		$this->replaceContents('/etc/mysql/debian.cnf', array('/^password\s*=.*$/m' => 'password = ' . $mysql_root_pw));
		$this->replaceContents('/etc/mysql/mariadb.conf.d/50-server.cnf', array('/^bind-address/m' => '#bind-address', '/^sql-mode\s*=.*?$/m' => 'sql-mode = "NO_ENGINE_SUBSTITUTION"'), true, 'mysqld');
Marius Burkard's avatar
Marius Burkard committed
	}
Marius Burkard's avatar
Marius Burkard committed
	protected function getPackagesToInstall($section) {
		if($section === 'mail') {
			$packages = array(
				'dnsutils',
				'resolvconf',
				'clamav',
				'clamav-daemon',
Thom's avatar
Thom committed
				'clamav-docs',
				'zip',
Marius Burkard's avatar
Marius Burkard committed
				'unzip',
				'bzip2',
Thom's avatar
Thom committed
				'xz-utils',
				'lzip',
				'rar',
Marius Burkard's avatar
Marius Burkard committed
				'arj',
				'nomarch',
				'lzop',
				'cabextract',
				'apt-listchanges',
				'libnet-ldap-perl',
				'libauthen-sasl-perl',
				'daemon',
				'libio-string-perl',
				'libio-socket-ssl-perl',
				'libnet-ident-perl',
				'libnet-dns-perl',
Thom's avatar
Thom committed
				'libdbd-mysql-perl'
Marius Burkard's avatar
Marius Burkard committed
			);
Marius Burkard's avatar
Marius Burkard committed
			if(ISPConfig::shallInstall('local-dns')) {
				if(ISPConfig::wantsUnbound()) {
					$packages[] = 'unbound';
				} else {
					$packages[] = 'bind9';
				}
			if(ISPConfig::shallInstall('mail')) {
				$packages[] = 'spamassassin';
				if(ISPConfig::wantsAmavis()) {
					$packages[] = 'amavisd-new';
				} else {
					$packages[] = 'rspamd';
					$packages[] = 'redis-server';
				}
				$packages[] = 'postgrey';
			}
		} elseif($section === 'base') {
			$packages = array(
				'php-pear',
				'php-memcache',
				'php-imagick',
				'php-gettext',
				'mcrypt',
				'imagemagick',
				'libruby',
				'memcached',
				'php-apcu'
			);
Marius Burkard's avatar
Marius Burkard committed
		}
Marius Burkard's avatar
Marius Burkard committed
		return $packages;
	}
	protected function getApacheModulesToDisable() {
		$modules = array(
			'mpm_prefork'
		);
Marius Burkard's avatar
Marius Burkard committed
	protected function getApacheModulesToEnable() {
		$modules = array('suexec', 'rewrite', 'ssl', 'actions', 'include', 'dav_fs', 'dav', 'auth_digest', 'cgi', 'headers', 'proxy_fcgi', 'alias', 'http2', 'mpm_event');
Marius Burkard's avatar
Marius Burkard committed
		return $modules;
	}
Marius Burkard's avatar
Marius Burkard committed
	protected function setDefaultPHP() {
Thom Pol's avatar
Thom Pol committed
		ISPConfigLog::info('Setting default system php version.', true);
		$cmd = 'update-alternatives --set php /usr/bin/php7.0';
Marius Burkard's avatar
Marius Burkard committed
		$result = $this->exec($cmd);
		if($result === false) {
			throw new ISPConfigOSException('Command ' . $cmd . ' failed.');
Marius Burkard's avatar
Marius Burkard committed
		}

		if(ISPConfig::shallInstall('web')) {
			// When --use-php-system is used, there is no alternative for php-fpm.sock.
			if(ISPConfig::wantsPHP() === 'system') {
				$cmd = 'update-alternatives --set php-cgi /usr/bin/php-cgi7.0';
			} else {
				$cmd = 'update-alternatives --set php-cgi /usr/bin/php-cgi7.0 ; update-alternatives --set php-fpm.sock /run/php/php7.0-fpm.sock';
			}
			$result = $this->exec($cmd);
			if($result === false) {
				throw new ISPConfigOSException('Command ' . $cmd . ' failed.');
			}
		}
Marius Burkard's avatar
Marius Burkard committed
	}
Marius Burkard's avatar
Marius Burkard committed
	protected function installPHPMyAdmin($mysql_root_pw) {
		if(!ISPConfig::shallInstall('web') || !ISPConfig::shallInstall('pma')) {
			return;
Loading full blame...