diff --git a/src/SPC/builder/linux/SystemUtil.php b/src/SPC/builder/linux/SystemUtil.php index 34b9cdef..e04c8e10 100644 --- a/src/SPC/builder/linux/SystemUtil.php +++ b/src/SPC/builder/linux/SystemUtil.php @@ -209,4 +209,21 @@ class SystemUtil } return $ret; } + + /** + * Get fully-supported linux distros. + * + * @return string[] List of supported Linux distro name for doctor + */ + public static function getSupportedDistros(): array + { + return [ + // debian-like + 'debian', 'ubuntu', 'Deepin', + // rhel-like + 'redhat', + // alpine + 'alpine', + ]; + } } diff --git a/src/SPC/doctor/item/LinuxToolCheckList.php b/src/SPC/doctor/item/LinuxToolCheckList.php index 01df03d6..f57f01ce 100644 --- a/src/SPC/doctor/item/LinuxToolCheckList.php +++ b/src/SPC/doctor/item/LinuxToolCheckList.php @@ -62,6 +62,7 @@ class LinuxToolCheckList 'ubuntu', 'alpine', 'redhat', + 'Deepin', 'debian' => CheckResult::fail(implode(', ', $missing) . ' not installed on your system', 'install-linux-tools', [$distro, $missing]), default => CheckResult::fail(implode(', ', $missing) . ' not installed on your system'), }; @@ -70,7 +71,7 @@ class LinuxToolCheckList } /** @noinspection PhpUnused */ - #[AsCheckItem('if necessary packages are installed', limit_os: 'Linux')] + #[AsCheckItem('if necessary linux headers are installed', limit_os: 'Linux')] public function checkSystemOSPackages(): ?CheckResult { if (SystemUtil::isMuslDist()) { @@ -90,7 +91,7 @@ class LinuxToolCheckList public function fixBuildTools(array $distro, array $missing): bool { $install_cmd = match ($distro['dist']) { - 'ubuntu', 'debian' => 'apt-get install -y', + 'ubuntu', 'debian', 'Deepin' => 'apt-get install -y', 'alpine' => 'apk add', 'redhat' => 'dnf install -y', default => throw new RuntimeException('Current linux distro does not have an auto-install script for musl packages yet.'), @@ -101,7 +102,7 @@ class LinuxToolCheckList logger()->warning('Current user is not root, using sudo for running command'); } try { - $is_debian = in_array($distro['dist'], ['debian', 'ubuntu']); + $is_debian = in_array($distro['dist'], ['debian', 'ubuntu', 'Deepin']); $to_install = $is_debian ? str_replace('xz', 'xz-utils', $missing) : $missing; // debian, alpine libtool -> libtoolize $to_install = str_replace('libtoolize', 'libtool', $to_install); diff --git a/src/SPC/doctor/item/OSCheckList.php b/src/SPC/doctor/item/OSCheckList.php index 8c7aa762..eef30f60 100644 --- a/src/SPC/doctor/item/OSCheckList.php +++ b/src/SPC/doctor/item/OSCheckList.php @@ -13,13 +13,14 @@ class OSCheckList { use UnixSystemUtilTrait; - #[AsCheckItem('if current OS are supported', level: 999)] + #[AsCheckItem('if current OS are supported', level: 1000)] public function checkOS(): ?CheckResult { if (!in_array(PHP_OS_FAMILY, ['Darwin', 'Linux', 'BSD', 'Windows'])) { return CheckResult::fail('Current OS is not supported: ' . PHP_OS_FAMILY); } $distro = PHP_OS_FAMILY === 'Linux' ? (' ' . SystemUtil::getOSRelease()['dist']) : ''; - return CheckResult::ok(PHP_OS_FAMILY . ' ' . php_uname('m') . $distro . ', supported'); + $known_distro = PHP_OS_FAMILY === 'Linux' && in_array(SystemUtil::getOSRelease()['dist'], SystemUtil::getSupportedDistros()); + return CheckResult::ok(PHP_OS_FAMILY . ' ' . php_uname('m') . $distro . ', supported' . ($known_distro ? '' : ' (but not tested on this distro)')); } }