optimize install musl wrapper and cross make function

This commit is contained in:
crazywhalecc 2023-10-22 16:55:02 +08:00
parent ca1189b6ca
commit b6409bded4
No known key found for this signature in database
GPG Key ID: 1F4BDD59391F2680

View File

@ -61,25 +61,7 @@ class LinuxMuslCheck
if (!file_exists($cross_compile_lib) || !file_exists($cross_compile_gcc)) { if (!file_exists($cross_compile_lib) || !file_exists($cross_compile_gcc)) {
$this->installMuslCrossMake(); $this->installMuslCrossMake();
} }
// TODO: add path using putenv instead of editing /etc/profile
$prefix = '';
if (get_current_user() !== 'root') {
$prefix = 'sudo ';
logger()->warning('Current user is not root, using sudo for running command');
}
$profile = '/etc/profile';
if (file_exists('~/.bash_profile')) {
$profile = '~/.bash_profile';
} elseif (file_exists('~/.profile')) {
$profile = '~/.profile';
}
if (!file_exists($profile)) {
shell(true)->exec($prefix . 'touch ' . $profile);
}
if (!getenv('PATH') || !str_contains(getenv('PATH'), '/usr/local/musl/bin')) {
$fix_path = 'echo "export PATH=/usr/local/musl/bin:$PATH" >> ' . $profile . ' && export PATH=/usr/local/musl/bin:$PATH';
shell(true)->exec($prefix . $fix_path);
}
return true; return true;
} catch (RuntimeException) { } catch (RuntimeException) {
return false; return false;
@ -98,32 +80,36 @@ class LinuxMuslCheck
$prefix = 'sudo '; $prefix = 'sudo ';
logger()->warning('Current user is not root, using sudo for running command'); logger()->warning('Current user is not root, using sudo for running command');
} }
$musl_version_name = 'musl-1.2.4';
$musl_source = [ $musl_source = [
'type' => 'url', 'type' => 'url',
'url' => 'https://musl.libc.org/releases/musl-1.2.4.tar.gz', 'url' => "https://musl.libc.org/releases/{$musl_version_name}.tar.gz",
]; ];
Downloader::downloadSource('musl-1.2.4', $musl_source); Downloader::downloadSource($musl_version_name, $musl_source);
FileSystem::extractSource('musl-1.2.4', DOWNLOAD_PATH . '/musl-1.2.4.tar.gz'); FileSystem::extractSource($musl_version_name, DOWNLOAD_PATH . "/{$musl_version_name}.tar.gz");
$musl_gcc_install_cmd = 'cd ' . SOURCE_PATH . '/musl-1.2.4 && \ shell(true)->cd(SOURCE_PATH . "/{$musl_version_name}")
./configure --enable-wrapper=gcc && \ ->exec('./configure --enable-wrapper=gcc')
make -j && make install'; ->exec('make -j')
shell(true)->exec($prefix . $musl_gcc_install_cmd); ->exec("{$prefix}make install");
} }
/** /**
* @throws DownloaderException * @throws DownloaderException
* @throws RuntimeException
* @throws FileSystemException * @throws FileSystemException
* @throws RuntimeException
* @throws WrongUsageException
*/ */
public function installMuslCrossMake(): void public function installMuslCrossMake(): void
{ {
$arch = arch2gnu(php_uname('m')); $arch = arch2gnu(php_uname('m'));
$musl_compile_source = [ $musl_compile_source = [
'type' => 'url', 'type' => 'url',
'url' => "https://musl.cc/{$arch}-linux-musl-cross.tgz", 'url' => "https://dl.static-php.dev/static-php-cli/deps/musl-toolchain/{$arch}-musl-toolchain.tgz",
]; ];
logger()->info('Downloading ' . $musl_compile_source['url']);
Downloader::downloadSource('musl-compile', $musl_compile_source); Downloader::downloadSource('musl-compile', $musl_compile_source);
FileSystem::extractSource('musl-compile', DOWNLOAD_PATH . "/{$arch}-linux-musl-cross.tgz"); logger()->info('Extracting musl-cross');
FileSystem::extractSource('musl-compile', DOWNLOAD_PATH . "/{$arch}-musl-toolchain.tgz");
shell(true)->exec('cp -rf ' . SOURCE_PATH . '/musl-compile/* /usr/local/musl'); shell(true)->exec('cp -rf ' . SOURCE_PATH . '/musl-compile/* /usr/local/musl');
} }
} }