552 lines
17 KiB
PHP
552 lines
17 KiB
PHP
<?php
|
|
/*
|
|
Copyright 2019 whatever127
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
function sortBySize($a, $b) {
|
|
global $files;
|
|
|
|
if ($files[$a]['size'] == $files[$b]['size']) {
|
|
return 0;
|
|
}
|
|
|
|
return ($files[$a]['size'] < $files[$b]['size']) ? -1 : 1;
|
|
}
|
|
|
|
//Create aria2 download package with conversion script
|
|
function createUupConvertPackage(
|
|
$url,
|
|
$archiveName,
|
|
$virtualEditions = 0,
|
|
$desiredVE = array('Enterprise'),
|
|
$moreOptions = [],
|
|
$app = null
|
|
) {
|
|
$updates = isset($moreOptions['updates']) ? $moreOptions['updates'] : 0;
|
|
$cleanup = isset($moreOptions['cleanup']) ? $moreOptions['cleanup'] : 0;
|
|
$netfx = isset($moreOptions['netfx']) ? $moreOptions['netfx'] : 0;
|
|
$esd = isset($moreOptions['esd']) ? $moreOptions['esd'] : 0;
|
|
|
|
$type = $esd ? 'esd' : 'wim';
|
|
|
|
$currDir = dirname(__FILE__).'/..';
|
|
$time = gmdate("Y-m-d H:i:s T", time());
|
|
|
|
$downloadapp = "";
|
|
if(!empty($app)) {
|
|
$downloadapp = <<<TEXT
|
|
|
|
:DOWNLOAD_APPS
|
|
echo Retrieving aria2 script for Apps...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$app"
|
|
if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1
|
|
|
|
for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i
|
|
if NOT [%DETECTED_ERROR%] == [] (
|
|
echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR%
|
|
echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers.
|
|
echo.
|
|
pause
|
|
goto :EOF
|
|
)
|
|
|
|
echo Attempting to download Apps files...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%"
|
|
if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_APPS
|
|
|
|
TEXT;
|
|
}
|
|
|
|
$cmdScript = <<<SCRIPT
|
|
@echo off
|
|
rem Generated on $time
|
|
|
|
:: Proxy configuration
|
|
:: If you need to configure a proxy to be able to connect to the internet,
|
|
:: then you can do this by configuring the all_proxy environment variable.
|
|
:: By default this variable is commented out, configuring aria2c to use
|
|
:: the proxy settings specified by the system.
|
|
::
|
|
:: Usage: set "all_proxy=proxy_address"
|
|
:: For example: set "all_proxy=127.0.0.1:8888"
|
|
::
|
|
:: More information how to use this can be found at:
|
|
:: https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy
|
|
:: https://aria2.github.io/manual/en/html/aria2c.html#environment
|
|
|
|
:: Uncomment the following line to override the proxy settings specified
|
|
:: by the system.
|
|
::
|
|
:: set "all_proxy="
|
|
|
|
:: End of proxy configuration
|
|
|
|
cd /d "%~dp0"
|
|
if NOT "%cd%"=="%cd: =%" (
|
|
echo Current directory contains spaces in its path.
|
|
echo Please move or rename the directory to one not containing spaces.
|
|
echo.
|
|
pause
|
|
goto :EOF
|
|
)
|
|
|
|
if "[%1]" == "[49127c4b-02dc-482e-ac4f-ec4d659b7547]" goto :START_PROCESS
|
|
REG QUERY HKU\S-1-5-19\Environment >NUL 2>&1 && goto :START_PROCESS
|
|
|
|
set command="""%~f0""" 49127c4b-02dc-482e-ac4f-ec4d659b7547
|
|
SETLOCAL ENABLEDELAYEDEXPANSION
|
|
set "command=!command:'=''!"
|
|
|
|
powershell -NoProfile Start-Process -FilePath '%COMSPEC%' ^
|
|
-ArgumentList '/c """!command!"""' -Verb RunAs 2>NUL
|
|
|
|
IF %ERRORLEVEL% GTR 0 (
|
|
echo =====================================================
|
|
echo This script needs to be executed as an administrator.
|
|
echo =====================================================
|
|
echo.
|
|
pause
|
|
)
|
|
|
|
SETLOCAL DISABLEDELAYEDEXPANSION
|
|
goto :EOF
|
|
|
|
:START_PROCESS
|
|
set "aria2=files\\aria2c.exe"
|
|
set "a7z=files\\7zr.exe"
|
|
set "uupConv=files\\uup-converter-wimlib.7z"
|
|
set "aria2Script=files\\aria2_script.%random%.txt"
|
|
set "destDir=UUPs"
|
|
|
|
powershell -NoProfile -ExecutionPolicy Unrestricted .\\files\\depends_win.ps1 || (pause & exit /b 1)
|
|
echo.
|
|
|
|
if NOT EXIST ConvertConfig.ini goto :NO_FILE_ERROR
|
|
if NOT EXIST %a7z% goto :NO_FILE_ERROR
|
|
if NOT EXIST %uupConv% goto :NO_FILE_ERROR
|
|
|
|
echo Extracting UUP converter...
|
|
"%a7z%" -x!ConvertConfig.ini -y x "%uupConv%" >NUL
|
|
echo.
|
|
$downloadapp
|
|
:DOWNLOAD_UUPS
|
|
echo Retrieving aria2 script...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$url"
|
|
if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1
|
|
echo.
|
|
|
|
for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i
|
|
if NOT [%DETECTED_ERROR%] == [] (
|
|
echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR%
|
|
echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers.
|
|
echo.
|
|
pause
|
|
goto :EOF
|
|
)
|
|
|
|
echo Attempting to download files...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"%destDir%" -i"%aria2Script%"
|
|
if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_UUPS & exit /b 1
|
|
|
|
if EXIST convert-UUP.cmd goto :START_CONVERT
|
|
pause
|
|
goto :EOF
|
|
|
|
:START_CONVERT
|
|
call convert-UUP.cmd
|
|
goto :EOF
|
|
|
|
:NO_FILE_ERROR
|
|
echo We couldn't find one of needed files for this script.
|
|
pause
|
|
goto :EOF
|
|
|
|
:DOWNLOAD_ERROR
|
|
echo.
|
|
echo We have encountered an error while downloading files.
|
|
pause
|
|
goto :EOF
|
|
|
|
:EOF
|
|
|
|
SCRIPT;
|
|
|
|
$shellScript = <<<SCRIPT
|
|
#!/bin/bash
|
|
#Generated on $time
|
|
|
|
# Proxy configuration
|
|
# If you need to configure a proxy to be able to connect to the internet,
|
|
# then you can do this by configuring the all_proxy environment variable.
|
|
# By default this variable is empty, configuring aria2c to not use any proxy.
|
|
#
|
|
# Usage: export all_proxy="proxy_address"
|
|
# For example: export all_proxy="127.0.0.1:8888"
|
|
#
|
|
# More information how to use this can be found at:
|
|
# https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy
|
|
# https://aria2.github.io/manual/en/html/aria2c.html#environment
|
|
|
|
export all_proxy=""
|
|
|
|
# End of proxy configuration
|
|
|
|
for prog in aria2c cabextract wimlib-imagex chntpw; do
|
|
which \$prog &>/dev/null 2>&1 && continue;
|
|
|
|
echo "\$prog does not seem to be installed"
|
|
echo "Check the readme.unix.md for details"
|
|
exit 1
|
|
done
|
|
|
|
mkiso_present=0
|
|
which genisoimage &>/dev/null && mkiso_present=1
|
|
which mkisofs &>/dev/null && mkiso_present=1
|
|
|
|
if [ \$mkiso_present -eq 0 ]; then
|
|
echo "genisoimage nor mkisofs does seem to be installed"
|
|
echo "Check the readme.unix.md for details"
|
|
exit 1
|
|
fi
|
|
|
|
destDir="UUPs"
|
|
tempScript="aria2_script.\$RANDOM.txt"
|
|
|
|
echo "Downloading converters..."
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 --allow-overwrite=true --auto-file-renaming=false -d"files" -i"files/converter_multi"
|
|
if [ $? != 0 ]; then
|
|
echo "We have encountered an error while downloading files."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Retrieving aria2 script..."
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -o"\$tempScript" --allow-overwrite=true --auto-file-renaming=false "$url"
|
|
if [ $? != 0 ]; then
|
|
echo "Failed to retrieve aria2 script"
|
|
exit 1
|
|
fi
|
|
|
|
detectedError=`grep '#UUPDUMP_ERROR:' "\$tempScript" | sed 's/#UUPDUMP_ERROR://g'`
|
|
if [ ! -z \$detectedError ]; then
|
|
echo "Unable to retrieve data from Windows Update servers. Reason: \$detectedError"
|
|
echo "If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Attempting to download files..."
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"\$destDir" -i"\$tempScript"
|
|
if [ $? != 0 ]; then
|
|
echo "We have encountered an error while downloading files."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
if [ -e ./files/convert.sh ]; then
|
|
chmod +x ./files/convert.sh
|
|
./files/convert.sh $type "\$destDir" $virtualEditions
|
|
fi
|
|
|
|
SCRIPT;
|
|
|
|
$desiredVirtualEditions = '';
|
|
$desiredVirtualEditionsLinux = '';
|
|
$index = 0;
|
|
foreach($desiredVE as $edition) {
|
|
if($index > 0) {
|
|
$desiredVirtualEditions .= ',';
|
|
$desiredVirtualEditionsLinux .= ' ';
|
|
}
|
|
$desiredVirtualEditions .= $edition;
|
|
$desiredVirtualEditionsLinux .= $edition;
|
|
|
|
$index++;
|
|
}
|
|
|
|
$convertConfig = <<<CONFIG
|
|
[convert-UUP]
|
|
AutoStart =1
|
|
AddUpdates =$updates
|
|
Cleanup =$cleanup
|
|
ResetBase =0
|
|
NetFx3 =$netfx
|
|
StartVirtual =$virtualEditions
|
|
wim2esd =$esd
|
|
wim2swm =0
|
|
SkipISO =0
|
|
SkipWinRE =0
|
|
LCUwinre =0
|
|
UpdtBootFiles=0
|
|
ForceDism =0
|
|
RefESD =0
|
|
SkipEdge =0
|
|
AutoExit =0
|
|
|
|
[Store_Apps]
|
|
SkipApps =0
|
|
AppsLevel =0
|
|
CustomList =0
|
|
|
|
[create_virtual_editions]
|
|
vAutoStart =1
|
|
vDeleteSource=0
|
|
vPreserve =0
|
|
vwim2esd =$esd
|
|
vwim2swm =0
|
|
vSkipISO =0
|
|
vAutoEditions=$desiredVirtualEditions
|
|
|
|
CONFIG;
|
|
|
|
$convertConfigLinux = <<<CONFIG
|
|
VIRTUAL_EDITIONS_LIST='$desiredVirtualEditionsLinux'
|
|
|
|
CONFIG;
|
|
|
|
$cmdScript = str_replace(["\r\n", "\r"], "\n", $cmdScript);
|
|
$convertConfig = str_replace(["\r\n", "\r"], "\n", $convertConfig);
|
|
$shellScript = str_replace(["\r\n", "\r"], "\n", $shellScript);
|
|
$convertConfigLinux = str_replace(["\r\n", "\r"], "\n", $convertConfigLinux);
|
|
|
|
$cmdScript = str_replace("\n", "\r\n", $cmdScript);
|
|
$convertConfig = str_replace("\n", "\r\n", $convertConfig);
|
|
|
|
$zip = new ZipArchive;
|
|
$archive = @tempnam($currDir.'/tmp', 'zip');
|
|
$open = $zip->open($archive, ZipArchive::CREATE+ZipArchive::OVERWRITE);
|
|
|
|
if($open !== TRUE) {
|
|
echo 'Failed to create archive.';
|
|
die();
|
|
}
|
|
|
|
$zip->addFromString('uup_download_windows.cmd', $cmdScript);
|
|
$zip->addFromString('uup_download_linux.sh', $shellScript);
|
|
$zip->addFromString('uup_download_macos.sh', $shellScript);
|
|
$zip->addFromString('ConvertConfig.ini', $convertConfig);
|
|
$zip->addFromString('files/convert_config_linux', $convertConfigLinux);
|
|
$zip->addFromString('files/convert_config_macos', $convertConfigLinux);
|
|
$zip->addFile($currDir.'/contrib/autodl_files/readme.unix.md', 'readme.unix.md');
|
|
$zip->addFile($currDir.'/contrib/autodl_files/converter_multi', 'files/converter_multi');
|
|
$zip->addFile($currDir.'/contrib/autodl_files/depends_win.ps1', 'files/depends_win.ps1');
|
|
$zip->close();
|
|
|
|
if($virtualEditions) {
|
|
$suffix = '_virtual';
|
|
} else {
|
|
$suffix = '';
|
|
}
|
|
|
|
header('Content-Type: archive/zip');
|
|
header('Content-Disposition: attachment; filename="'.$archiveName."_convert$suffix.zip\"");
|
|
header('Content-Length: '.filesize($archive));
|
|
|
|
$content = file_get_contents($archive);
|
|
unlink($archive);
|
|
|
|
echo $content;
|
|
}
|
|
|
|
//Create aria2 download package only
|
|
function createAria2Package($url, $archiveName, $app = null) {
|
|
$currDir = dirname(__FILE__).'/..';
|
|
$time = gmdate("Y-m-d H:i:s T", time());
|
|
|
|
$ariacmd = <<<TEXT
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"%destDir%" -i"%aria2Script%"
|
|
TEXT;
|
|
|
|
$ariabash = <<<TEXT
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j5 -c -R -d"\$destDir" -i"\$tempScript"
|
|
TEXT;
|
|
|
|
if(strpos($archiveName, "_app")) {
|
|
$ariacmd = <<<TEXT
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%"
|
|
TEXT;
|
|
|
|
$ariabash = <<<TEXT
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"\$destDir" -i"\$tempScript"
|
|
TEXT;
|
|
}
|
|
|
|
$downloadapp = "";
|
|
if(!empty($app)) {
|
|
$downloadapp = <<<TEXT
|
|
|
|
:DOWNLOAD_APPS
|
|
echo Retrieving aria2 script for Apps...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$app"
|
|
if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1
|
|
|
|
for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i
|
|
if NOT [%DETECTED_ERROR%] == [] (
|
|
echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR%
|
|
echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers.
|
|
echo.
|
|
pause
|
|
goto :EOF
|
|
)
|
|
|
|
echo Attempting to download Apps files...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -x16 -s16 -j25 -c -R -d"%destDir%" -i"%aria2Script%"
|
|
if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_APPS
|
|
|
|
TEXT;
|
|
}
|
|
|
|
$cmdScript = <<<SCRIPT
|
|
@echo off
|
|
rem Generated on $time
|
|
|
|
:: Proxy configuration
|
|
:: If you need to configure a proxy to be able to connect to the internet,
|
|
:: then you can do this by configuring the all_proxy environment variable.
|
|
:: By default this variable is empty, configuring aria2c to not use any proxy.
|
|
::
|
|
:: Usage: set "all_proxy=proxy_address"
|
|
:: For example: set "all_proxy=127.0.0.1:8888"
|
|
::
|
|
:: More information how to use this can be found at:
|
|
:: https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy
|
|
:: https://aria2.github.io/manual/en/html/aria2c.html#environment
|
|
|
|
set "all_proxy="
|
|
|
|
:: End of proxy configuration
|
|
|
|
set "aria2=files\\aria2c.exe"
|
|
set "aria2Script=files\\aria2_script.%random%.txt"
|
|
set "destDir=UUPs"
|
|
|
|
cd /d "%~dp0"
|
|
powershell -NoProfile -ExecutionPolicy Unrestricted .\\files\\depends_win.ps1 -ForDownload || (pause & exit /b 1)
|
|
echo.
|
|
$downloadapp
|
|
:DOWNLOAD_UUPS
|
|
echo Retrieving aria2 script...
|
|
"%aria2%" --no-conf --log-level=info --log="aria2_download.log" -o"%aria2Script%" --allow-overwrite=true --auto-file-renaming=false "$url"
|
|
if %ERRORLEVEL% GTR 0 call :DOWNLOAD_ERROR & exit /b 1
|
|
|
|
for /F "tokens=2 delims=:" %%i in ('findstr #UUPDUMP_ERROR: "%aria2Script%"') do set DETECTED_ERROR=%%i
|
|
if NOT [%DETECTED_ERROR%] == [] (
|
|
echo Unable to retrieve data from Windows Update servers. Reason: %DETECTED_ERROR%
|
|
echo If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers.
|
|
echo.
|
|
pause
|
|
goto :EOF
|
|
)
|
|
|
|
echo Attempting to download files...
|
|
$ariacmd
|
|
if %ERRORLEVEL% GTR 0 goto :DOWNLOAD_UUPS & exit /b 1
|
|
|
|
pause
|
|
goto EOF
|
|
|
|
:DOWNLOAD_ERROR
|
|
echo.
|
|
echo We have encountered an error while downloading files.
|
|
pause
|
|
goto EOF
|
|
|
|
:EOF
|
|
|
|
SCRIPT;
|
|
|
|
$shellScript = <<<SCRIPT
|
|
#!/bin/bash
|
|
#Generated on $time
|
|
|
|
# Proxy configuration
|
|
# If you need to configure a proxy to be able to connect to the internet,
|
|
# then you can do this by configuring the all_proxy environment variable.
|
|
# By default this variable is empty, configuring aria2c to not use any proxy.
|
|
#
|
|
# Usage: export all_proxy="proxy_address"
|
|
# For example: export all_proxy="127.0.0.1:8888"
|
|
#
|
|
# More information how to use this can be found at:
|
|
# https://aria2.github.io/manual/en/html/aria2c.html#cmdoption-all-proxy
|
|
# https://aria2.github.io/manual/en/html/aria2c.html#environment
|
|
|
|
export all_proxy=""
|
|
|
|
# End of proxy configuration
|
|
|
|
which aria2c &>/dev/null || {
|
|
echo "aria2c does not seem to be installed"
|
|
echo "Check the readme.unix.md for details"
|
|
exit 1
|
|
}
|
|
|
|
destDir="UUPs"
|
|
tempScript="aria2_script.\$RANDOM.txt"
|
|
|
|
echo "Retrieving aria2 script..."
|
|
aria2c --no-conf --log-level=info --log="aria2_download.log" -o"\$tempScript" --allow-overwrite=true --auto-file-renaming=false "$url"
|
|
if [ $? != 0 ]; then
|
|
echo "Failed to retrieve aria2 script"
|
|
exit 1
|
|
fi
|
|
|
|
detectedError=`grep '#UUPDUMP_ERROR:' "\$tempScript" | sed 's/#UUPDUMP_ERROR://g'`
|
|
if [ ! -z \$detectedError ]; then
|
|
echo "Unable to retrieve data from Windows Update servers. Reason: \$detectedError"
|
|
echo "If this problem persists, most likely the set you are attempting to download was removed from Windows Update servers."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Attempting to download files..."
|
|
$ariabash
|
|
if [ $? != 0 ]; then
|
|
echo "We have encountered an error while downloading files."
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT;
|
|
|
|
$cmdScript = str_replace(["\r\n", "\r"], "\n", $cmdScript);
|
|
$shellScript = str_replace(["\r\n", "\r"], "\n", $shellScript);
|
|
$cmdScript = str_replace("\n", "\r\n", $cmdScript);
|
|
|
|
$zip = new ZipArchive;
|
|
$archive = @tempnam($currDir.'/tmp', 'zip');
|
|
$open = $zip->open($archive, ZipArchive::CREATE+ZipArchive::OVERWRITE);
|
|
|
|
if($open === TRUE) {
|
|
$zip->addFromString('uup_download_windows.cmd', $cmdScript);
|
|
$zip->addFromString('uup_download_linux.sh', $shellScript);
|
|
$zip->addFromString('uup_download_macos.sh', $shellScript);
|
|
$zip->addFile($currDir.'/contrib/autodl_files/readme.unix.md', 'readme.unix.md');
|
|
$zip->addFile($currDir.'/contrib/autodl_files/depends_win.ps1', 'files/depends_win.ps1');
|
|
$zip->close();
|
|
} else {
|
|
echo 'Failed to create archive.';
|
|
die();
|
|
}
|
|
|
|
header('Content-Type: archive/zip');
|
|
header('Content-Disposition: attachment; filename="'.$archiveName.'.zip"');
|
|
header('Content-Length: '.filesize($archive));
|
|
|
|
$content = file_get_contents($archive);
|
|
unlink($archive);
|
|
|
|
echo $content;
|
|
}
|