Initial commit
This commit is contained in:
commit
d7c5d16835
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 UUP dump authors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
450
convert.sh
Normal file
450
convert.sh
Normal file
@ -0,0 +1,450 @@
|
||||
#!/bin/bash
|
||||
scriptName="UUP Converter v0.1.0"
|
||||
|
||||
editions="analogonecore
|
||||
andromeda
|
||||
cloude
|
||||
clouden
|
||||
core
|
||||
corecountryspecific
|
||||
coren
|
||||
coresinglelanguage
|
||||
coresystemserver
|
||||
education
|
||||
educationn
|
||||
enterprise
|
||||
enterpriseeval
|
||||
enterpriseg
|
||||
enterprisegn
|
||||
enterprisen
|
||||
enterpriseneval
|
||||
enterprises
|
||||
enterpriseseval
|
||||
enterprisesn
|
||||
enterprisesneval
|
||||
iotuap
|
||||
onecoreupdateos
|
||||
professional
|
||||
professionalcountryspecific
|
||||
professionaleducation
|
||||
professionaleducationn
|
||||
professionaln
|
||||
professionalsinglelanguage
|
||||
professionalworkstation
|
||||
professionalworkstationn
|
||||
serverarm64
|
||||
serverarm64core
|
||||
serverazurecor
|
||||
serverazurecorcore
|
||||
serverazurenano
|
||||
serverazurenanocore
|
||||
servercloudstorage
|
||||
servercloudstoragecore
|
||||
serverdatacenter
|
||||
serverdatacenteracor
|
||||
serverdatacenteracorcore
|
||||
serverdatacentercor
|
||||
serverdatacentercorcore
|
||||
serverdatacentercore
|
||||
serverdatacentereval
|
||||
serverdatacenterevalcor
|
||||
serverdatacenterevalcorcore
|
||||
serverdatacenterevalcore
|
||||
serverdatacenternano
|
||||
serverdatacenternanocore
|
||||
serverhypercore
|
||||
serverrdsh
|
||||
serverrdshcore
|
||||
serversolution
|
||||
serversolutioncore
|
||||
serverstandard
|
||||
serverstandardacor
|
||||
serverstandardacorcore
|
||||
serverstandardcor
|
||||
serverstandardcorcore
|
||||
serverstandardcore
|
||||
serverstandardeval
|
||||
serverstandardevalcor
|
||||
serverstandardevalcorcore
|
||||
serverstandardevalcore
|
||||
serverstandardnano
|
||||
serverstandardnanocore
|
||||
serverstoragestandard
|
||||
serverstoragestandardcore
|
||||
serverstoragestandardeval
|
||||
serverstoragestandardevalcore
|
||||
serverstorageworkgroup
|
||||
serverstorageworkgroupcore
|
||||
serverstorageworkgroupeval
|
||||
serverstorageworkgroupevalcore
|
||||
serverweb
|
||||
serverwebcore
|
||||
starter
|
||||
startern"
|
||||
|
||||
bootSourcesList="sources/alert.gif
|
||||
sources/api-ms-win-core-apiquery-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l1-1-1.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l2-1-0.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l2-1-1.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l3-1-0.dll
|
||||
sources/api-ms-win-downlevel-advapi32-l4-1-0.dll
|
||||
sources/api-ms-win-downlevel-kernel32-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-kernel32-l2-1-0.dll
|
||||
sources/api-ms-win-downlevel-ole32-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-ole32-l1-1-1.dll
|
||||
sources/api-ms-win-downlevel-shlwapi-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-shlwapi-l1-1-1.dll
|
||||
sources/api-ms-win-downlevel-user32-l1-1-0.dll
|
||||
sources/api-ms-win-downlevel-user32-l1-1-1.dll
|
||||
sources/api-ms-win-downlevel-version-l1-1-0.dll
|
||||
sources/appcompat.xsl
|
||||
sources/appcompat_bidi.xsl
|
||||
sources/appcompat_detailed_bidi_txt.xsl
|
||||
sources/appcompat_detailed_txt.xsl
|
||||
sources/appraiser.dll
|
||||
sources/ARUNIMG.dll
|
||||
sources/arunres.dll
|
||||
sources/autorun.dll
|
||||
sources/cmisetup.dll
|
||||
sources/compatctrl.dll
|
||||
sources/compatprovider.dll
|
||||
sources/cryptosetup.dll
|
||||
sources/diager.dll
|
||||
sources/diagnostic.dll
|
||||
sources/diagtrack.dll
|
||||
sources/diagtrackrunner.exe
|
||||
sources/dism.exe
|
||||
sources/dismapi.dll
|
||||
sources/dismcore.dll
|
||||
sources/dismcoreps.dll
|
||||
sources/dismprov.dll
|
||||
sources/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll
|
||||
sources/folderprovider.dll
|
||||
sources/hwcompat.dll
|
||||
sources/hwcompat.txt
|
||||
sources/hwexclude.txt
|
||||
sources/idwbinfo.txt
|
||||
sources/imagingprovider.dll
|
||||
sources/inf/setup.cfg
|
||||
sources/input.dll
|
||||
sources/lang.ini
|
||||
sources/locale.nls
|
||||
sources/logprovider.dll
|
||||
sources/MediaSetupUIMgr.dll
|
||||
sources/ndiscompl.dll
|
||||
sources/nlsbres.dll
|
||||
sources/ntdsupg.dll
|
||||
sources/offline.xml
|
||||
sources/pnpibs.dll
|
||||
sources/reagent.admx
|
||||
sources/reagent.dll
|
||||
sources/reagent.xml
|
||||
sources/rollback.exe
|
||||
sources/schema.dat
|
||||
sources/segoeui.ttf
|
||||
sources/setup.exe
|
||||
sources/setupcompat.dll
|
||||
sources/SetupCore.dll
|
||||
sources/SetupHost.exe
|
||||
sources/SetupMgr.dll
|
||||
sources/SetupPlatform.cfg
|
||||
sources/SetupPlatform.dll
|
||||
sources/SetupPlatform.exe
|
||||
sources/SetupPrep.exe
|
||||
sources/SmiEngine.dll
|
||||
sources/spflvrnt.dll
|
||||
sources/spprgrss.dll
|
||||
sources/spwizeng.dll
|
||||
sources/spwizimg.dll
|
||||
sources/spwizres.dll
|
||||
sources/sqmapi.dll
|
||||
sources/testplugin.dll
|
||||
sources/unattend.dll
|
||||
sources/unbcl.dll
|
||||
sources/upgloader.dll
|
||||
sources/upgrade_frmwrk.xml
|
||||
sources/uxlib.dll
|
||||
sources/uxlibres.dll
|
||||
sources/vhdprovider.dll
|
||||
sources/w32uiimg.dll
|
||||
sources/w32uires.dll
|
||||
sources/warning.gif
|
||||
sources/wdsclient.dll
|
||||
sources/wdsclientapi.dll
|
||||
sources/wdscore.dll
|
||||
sources/wdscsl.dll
|
||||
sources/wdsimage.dll
|
||||
sources/wdstptc.dll
|
||||
sources/wdsutil.dll
|
||||
sources/wimprovider.dll
|
||||
sources/win32ui.dll
|
||||
sources/WinDlp.dll
|
||||
sources/winsetup.dll
|
||||
sources/wpx.dll
|
||||
sources/xmllite.dll
|
||||
sources/..-.*/appraiser.dll.mui
|
||||
sources/..-.*/arunres.dll.mui
|
||||
sources/..-.*/cmisetup.dll.mui
|
||||
sources/..-.*/compatctrl.dll.mui
|
||||
sources/..-.*/compatprovider.dll.mui
|
||||
sources/..-.*/dism.exe.mui
|
||||
sources/..-.*/dismapi.dll.mui
|
||||
sources/..-.*/dismcore.dll.mui
|
||||
sources/..-.*/dismprov.dll.mui
|
||||
sources/..-.*/folderprovider.dll.mui
|
||||
sources/..-.*/imagingprovider.dll.mui
|
||||
sources/..-.*/input.dll.mui
|
||||
sources/..-.*/logprovider.dll.mui
|
||||
sources/..-.*/MediaSetupUIMgr.dll.mui
|
||||
sources/..-.*/nlsbres.dll.mui
|
||||
sources/..-.*/pnpibs.dll.mui
|
||||
sources/..-.*/reagent.adml
|
||||
sources/..-.*/reagent.dll.mui
|
||||
sources/..-.*/rollback.exe.mui
|
||||
sources/..-.*/setup.exe.mui
|
||||
sources/..-.*/setupcompat.dll.mui
|
||||
sources/..-.*/SetupCore.dll.mui
|
||||
sources/..-.*/setupplatform.exe.mui
|
||||
sources/..-.*/SetupPrep.exe.mui
|
||||
sources/..-.*/setup_help_upgrade_or_custom.rtf
|
||||
sources/..-.*/smiengine.dll.mui
|
||||
sources/..-.*/spwizres.dll.mui
|
||||
sources/..-.*/upgloader.dll.mui
|
||||
sources/..-.*/uxlibres.dll.mui
|
||||
sources/..-.*/vhdprovider.dll.mui
|
||||
sources/..-.*/vofflps.rtf
|
||||
sources/..-.*/vofflps_server.rtf
|
||||
sources/..-.*/w32uires.dll.mui
|
||||
sources/..-.*/wdsclient.dll.mui
|
||||
sources/..-.*/wdsimage.dll.mui
|
||||
sources/..-.*/wimprovider.dll.mui
|
||||
sources/..-.*/WinDlp.dll.mui
|
||||
sources/..-.*/winsetup.dll.mui"
|
||||
|
||||
infoColor="\033[1;94m"
|
||||
errorColor="\033[1;91m"
|
||||
resetColor="\033[0m"
|
||||
|
||||
if [ "$1" == "-?" -o "$1" == "--help" -o "$1" == "-h" ]; then
|
||||
echo "Usage:"
|
||||
echo "$0 [compression] [uups_directory]"
|
||||
echo ""
|
||||
echo "Compression options:"
|
||||
echo "wim - standard compression"
|
||||
echo "esd - solid compression"
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! which cabextract >/dev/null \
|
||||
|| ! which wimlib-imagex >/dev/null \
|
||||
|| ! which chntpw >/dev/null \
|
||||
|| ! which genisoimage >/dev/null; then
|
||||
echo "One of required applications is not installed."
|
||||
echo "The following applications need to be installed to use this script:"
|
||||
echo " - cabextract"
|
||||
echo " - wimlib-imagex"
|
||||
echo " - chntpw"
|
||||
echo " - genisoimage"
|
||||
echo ""
|
||||
echo "If you use Debian or Ubuntu you can install these using:"
|
||||
echo "sudo apt-get install cabextract wimtools chntpw genisoimage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -z $1 ]; then
|
||||
type="$1"
|
||||
else
|
||||
type="wim"
|
||||
fi
|
||||
|
||||
if ! [ "$type" == "wim" -o "$type" == "esd" ]; then
|
||||
echo -e "$errorColor""Incorrect compression type.""$resetColor"
|
||||
echo "Possible options: wim, esd"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -z $2 ]; then
|
||||
uupDir="$2"
|
||||
else
|
||||
uupDir="UUPs"
|
||||
fi
|
||||
|
||||
if ! [ -d "$uupDir" ]; then
|
||||
echo -e "$errorColor""Specified directory containing UUP files does not exist!""$resetColor"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$type" == "esd" ]; then
|
||||
compressParam="--solid"
|
||||
else
|
||||
compressParam="--compress=maximum"
|
||||
type="wim"
|
||||
fi
|
||||
|
||||
function cleanup() {
|
||||
rm -rf ISODIR
|
||||
rm -rf "$tempDir"
|
||||
}
|
||||
|
||||
if [ -e ISODIR ]; then
|
||||
rm -rf ISODIR
|
||||
fi
|
||||
|
||||
list=
|
||||
for i in $editions; do
|
||||
list="$list -ie \"$i""_..-.*.esd\""
|
||||
done
|
||||
|
||||
metadataFiles=$(find "$uupDir" 2>/dev/null | eval grep $list)
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""No metadata ESDs found.""$resetColor"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
list=
|
||||
|
||||
lang=$(echo "$metadataFiles" | grep _..-.*.esd | head -1 | sed 's/.*_//g;s/.esd//g')
|
||||
metadataFiles=$(echo "$metadataFiles" | grep "$lang" | sort | uniq)
|
||||
firstMetadata=$(echo "$metadataFiles" | head -1)
|
||||
|
||||
tempDir=`mktemp -d`
|
||||
extractDir="$tempDir/extract"
|
||||
|
||||
echo -e "\033[1m$scriptName\033[0m"
|
||||
|
||||
for file in `find "$uupDir" -type f -name "*.cab"`; do
|
||||
fileName=`basename $file .cab`
|
||||
echo -e "$infoColor""CAB -> ESD:""$resetColor"" $fileName"
|
||||
|
||||
mkdir "$extractDir"
|
||||
cabextract -d "$extractDir" "$file" >/dev/null 2>/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
echo -e -e "$errorColor""Failed to extract $fileName.cab""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wimlib-imagex capture "$extractDir" "$tempDir/$fileName.esd" >/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to create $fileName.esd""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$extractDir"
|
||||
done
|
||||
|
||||
fileName=
|
||||
file=
|
||||
extractDir=
|
||||
|
||||
export WIMLIB_IMAGEX_IGNORE_CASE=1
|
||||
mkdir ISODIR
|
||||
|
||||
echo ""
|
||||
echo -e "$infoColor""Creating ISO structure...""$resetColor"
|
||||
wimlib-imagex apply "$firstMetadata" 1 ISODIR --no-acls 2>/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to create ISODIR structure""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "$infoColor""Exporting winre.wim...""$resetColor"
|
||||
wimlib-imagex export "$firstMetadata" 2 "$tempDir/winre.wim" --compress=maximum --boot
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to export winre.wim""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "$infoColor""Creating boot.wim...""$resetColor"
|
||||
cp "$tempDir/winre.wim" ISODIR/sources/boot.wim
|
||||
wimlib-imagex info ISODIR/sources/boot.wim 1 "Microsoft Windows PE" --image-property FLAGS=9 >/dev/null
|
||||
|
||||
wimlib-imagex extract ISODIR/sources/boot.wim 1 --dest-dir="$tempDir" "/Windows/System32/config/SOFTWARE" --no-acls >/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to extract registry""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "cd Microsoft\\Windows NT\\CurrentVersion\nnv 1 SystemRoot\ned SystemRoot\nX:\\\$Windows.~bt\\Windows\ncd WinPE\nnv 1 InstRoot\ned InstRoot\nX:\\\$Windows.~bt\nq\ny\n" | chntpw -e "$tempDir/SOFTWARE" >/dev/null
|
||||
wimlib-imagex update ISODIR/sources/boot.wim 1 --command "add $tempDir/SOFTWARE /Windows/System32/config/SOFTWARE" >/dev/null
|
||||
wimlib-imagex update ISODIR/sources/boot.wim 1 --command "delete /Windows/System32/winpeshl.ini" >/dev/null
|
||||
|
||||
wimlib-imagex export "$tempDir/winre.wim" 1 ISODIR/sources/boot.wim "Microsoft Windows Setup"
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to create second index of boot.wim""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wimlib-imagex extract "$firstMetadata" 3 "/Windows/System32/xmllite.dll" --no-acls --dest-dir="ISODIR/sources" >/dev/null
|
||||
wimlib-imagex info ISODIR/sources/boot.wim 2 --image-property FLAGS=2 >/dev/null
|
||||
wimlib-imagex info ISODIR/sources/boot.wim 2 --boot >/dev/null
|
||||
|
||||
list=
|
||||
for i in $bootSourcesList; do
|
||||
list="$list -oie \"$i\""
|
||||
done
|
||||
|
||||
files=$(find ISODIR -regex ".*/sources/.*" | eval grep $list)
|
||||
list=
|
||||
|
||||
echo "delete /Windows/System32/winpeshl.ini" >"$tempDir/update.txt"
|
||||
echo "add ISODIR/setup.exe /setup.exe" >>"$tempDir/update.txt"
|
||||
echo "add ISODIR/sources/background_cli.bmp /sources/background.bmp" >>"$tempDir/update.txt"
|
||||
for i in $files; do
|
||||
echo "add ISODIR/$i /$i" >>"$tempDir/update.txt"
|
||||
done
|
||||
|
||||
wimlib-imagex update ISODIR/sources/boot.wim 2 <"$tempDir/update.txt" >/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed add required files to second index of boot.wim""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wimlib-imagex optimize ISODIR/sources/boot.wim
|
||||
rm "ISODIR/sources/xmllite.dll"
|
||||
|
||||
echo ""
|
||||
echo -e "$infoColor""Creating install.$type...""$resetColor"
|
||||
for metadata in $metadataFiles; do
|
||||
metadataName=`basename $metadata .esd`
|
||||
echo -e "$infoColor""Exporting $metadataName...""$resetColor"
|
||||
wimlib-imagex export "$metadata" 3 ISODIR/sources/install.$type "$metadataName" $compressParam --ref="$uupDir/*.esd" --ref "$tempDir/*.esd"
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed export index to install.$type""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "$infoColor""Adding winre.wim for $metadataName...""$resetColor"
|
||||
wimlib-imagex update ISODIR/sources/install.$type 1 --command "add $tempDir/winre.wim /Windows/System32/Recovery/winre.wim"
|
||||
echo ""
|
||||
done
|
||||
|
||||
info=`wimlib-imagex info "$firstMetadata" 3`
|
||||
major=`echo "$info" | grep -i "^Major Version:" | sed "s/.* //g"`
|
||||
minor=`echo "$info" | grep -i "^Minor Version:" | sed "s/.* //g"`
|
||||
build=`echo "$info" | grep -i "^Build:" | sed "s/.* //g"`
|
||||
spbuild=`echo "$info" | grep -i "^Service Pack Build:" | sed "s/.* //g"`
|
||||
label="$major.$minor.$build.$spbuild""_$lang"
|
||||
|
||||
echo -e "$infoColor""Creating ISO image...""$resetColor"
|
||||
genisoimage -b "boot/etfsboot.com" --no-emul-boot --eltorito-alt-boot -e "efi/microsoft/boot/efisys.bin" --no-emul-boot --udf --hide "*" -V "$label" -o "$label.iso" ISODIR
|
||||
if [ $? != 0 ]; then
|
||||
echo -e "$errorColor""Failed to create ISO""$resetColor"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cleanup
|
||||
echo -e "\033[1;92mDone.""$resetColor"
|
40
readme.md
Normal file
40
readme.md
Normal file
@ -0,0 +1,40 @@
|
||||
UUP converter
|
||||
-------------
|
||||
|
||||
### Description
|
||||
A basic UUP converter aimed for Linux users who don't have access to any
|
||||
Windows machine, but want or need to create ISO image for latest Windows
|
||||
Insider version downloaded from UUP dump.
|
||||
|
||||
### Usage
|
||||
```
|
||||
./convert.sh [compression] [uups_directory]
|
||||
```
|
||||
|
||||
###### Compression options:
|
||||
* wim - standard compression
|
||||
* esd - solid compression
|
||||
|
||||
### Usage examples
|
||||
* `./convert.sh` - starts conversion using files from UUPs directory and
|
||||
creates ISO image with install.wim
|
||||
|
||||
* `./convert.sh esd` - starts conversion using files from UUPs directory and
|
||||
creates ISO image with install.esd
|
||||
|
||||
* `./convert.sh wim MyUUP` - starts conversion using files from MyUUP
|
||||
directory and creates ISO image with install.wim
|
||||
|
||||
### Requirements
|
||||
This script uses the following commands to do its work:
|
||||
* cabextract - to extract cabs
|
||||
* wimlib-imagex - to export files from metadata ESD
|
||||
* chntpw - to modify registry of first index boot.wim
|
||||
* genisoimage - to create ISO image
|
||||
|
||||
If you use Debian or Ubuntu you can quickly install these using the following
|
||||
command:
|
||||
|
||||
```
|
||||
sudo apt-get install cabextract wimtools chntpw genisoimage
|
||||
```
|
Loading…
Reference in New Issue
Block a user