Add option to create virtual editions

This commit is contained in:
whatever127 2019-05-02 01:31:08 +02:00
parent 847e1b1083
commit 9b9245a7b6
3 changed files with 1565 additions and 57 deletions

View File

@ -1,5 +1,18 @@
#!/bin/bash
scriptName="UUP Converter v0.4.1"
scriptName="UUP Converter v0.5.0"
UUP_CONVERTER_SCRIPT=1
if [ -f `pwd`/convert_ve_plugin ]; then
. `pwd`/convert_ve_plugin
fi
if [ -f `pwd`/convert_config_linux ]; then
. `pwd`/convert_config_linux
else
VIRTUAL_EDITIONS_LIST="CoreSingleLanguage Enterprise EnterpriseN Education \
EducationN ProfessionalEducation ProfessionalEducationN \
ProfessionalWorkstation ProfessionalWorkstationN ServerRdsh IoTEnterprise"
fi
editions='analogonecore
andromeda
@ -229,18 +242,35 @@ resetColor="\033[0m"
if [ "$1" == "-?" -o "$1" == "--help" -o "$1" == "-h" ]; then
echo "Usage:"
echo "$0 [compression] [uups_directory]"
echo "$0 [compression] [uups_directory] [create_virtual_editions]"
echo ""
echo "Compression options:"
echo "wim - standard compression"
echo -e "${infoColor}compression options:${resetColor}"
echo "wim - standard compression (default)"
echo "esd - solid compression"
echo ""
echo -e "${infoColor}create_virtual_editions options:${resetColor}"
echo "0 - do not create virtual editions (default)"
echo "1 - create virtual edtitions"
echo ""
echo -e "${infoColor}convert_config_linux file${resetColor}"
echo "This file can be used to configure some advanced options of this script."
echo "It is required to place configuration in the same directory as script."
echo ""
echo "Possible configuration options:"
echo "VIRTUAL_EDITIONS_LIST='space delimited editions sequence'"
echo ""
echo -e "${infoColor}List of editions created if you enable virtual edtitions creation:${resetColor}"
for edition in $VIRTUAL_EDITIONS_LIST; do
echo "- $edition"
done
echo "When VIRTUAL_EDITIONS_LIST is not configured, this list contains all editions."
exit
fi
if ! which cabextract >/dev/null \
|| ! which wimlib-imagex >/dev/null \
|| ! which chntpw >/dev/null \
|| ! which genisoimage >/dev/null; then
if ! which cabextract >/dev/null 2>&1 \
|| ! which wimlib-imagex >/dev/null 2>&1 \
|| ! which chntpw >/dev/null 2>&1 \
|| ! which genisoimage >/dev/null 2>&1; then
echo "One of required applications is not installed."
echo "The following applications need to be installed to use this script:"
echo " - cabextract"
@ -271,6 +301,12 @@ else
uupDir="UUPs"
fi
if ! [ -z $3 ]; then
runVirtualEditions="$3"
else
runVirtualEditions=0
fi
if ! [ -d "$uupDir" ]; then
echo -e "$errorColor""Specified directory containing UUP files does not exist!""$resetColor"
exit 1
@ -288,6 +324,14 @@ function cleanup() {
rm -rf "$tempDir"
}
function errorHandler() {
if [ $1 != 0 ]; then
echo -e "${errorColor}$2${resetColor}"
cleanup
exit 1
fi
}
if [ -e ISODIR ]; then
rm -rf ISODIR
fi
@ -314,24 +358,21 @@ extractDir="$tempDir/extract"
echo -e "\033[1m$scriptName\033[0m"
if [ $runVirtualEditions -eq 1 ] && [ "$VIRTUAL_EDITIONS_PLUGIN_LOADED" != "1" ]; then
echo "Virtual editions will be not created, because plugin isn't loaded."
runVirtualEditions=0
fi
for file in `find "$uupDir" -type f -iname "*.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
errorHandler $? "Failed to extract $fileName.cab"
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
errorHandler $? "Failed to create $fileName.esd"
rm -rf "$extractDir"
done
@ -345,12 +386,9 @@ 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 ISO structure""$resetColor"
cleanup
exit 1
fi
errorHandler $? "Failed to create ISO structure"
echo ""
echo -e "$infoColor""Exporting winre.wim...""$resetColor"
@ -358,11 +396,7 @@ 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
errorHandler $? "Failed to export winre.wim"
echo ""
echo -e "$infoColor""Creating boot.wim...""$resetColor"
@ -374,11 +408,7 @@ wimlib-imagex info ISODIR/sources/boot.wim 1 "Microsoft Windows PE" \
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
errorHandler $? "Failed to extract registry"
echo 'cd Microsoft\Windows NT\CurrentVersion
nv 1 SystemRoot
@ -403,11 +433,7 @@ wimlib-imagex update ISODIR/sources/boot.wim 1 \
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
errorHandler $? "Failed to create second index of boot.wim"
wimlib-imagex extract "$firstMetadata" 3 "/Windows/System32/xmllite.dll" \
--no-acls --dest-dir="ISODIR/sources" >/dev/null
@ -432,11 +458,7 @@ for i in $files; do
done
wimlib-imagex update ISODIR/sources/boot.wim 2 <"$tempDir/update.txt" >/dev/null
if [ $? != 0 ]; then
echo -e "$errorColor""Failed to add required files to second index of boot.wim""$resetColor"
cleanup
exit 1
fi
errorHandler $? "Failed to add required files to second index of boot.wim"
wimlib-imagex optimize ISODIR/sources/boot.wim
rm "ISODIR/sources/xmllite.dll"
@ -454,11 +476,7 @@ for metadata in $metadataFiles; do
wimlib-imagex export "$metadata" 3 ISODIR/sources/install.$type \
"$editionName" $compressParam --ref="$uupDir/*.esd" --ref "$tempDir/*.esd"
if [ $? != 0 ]; then
echo -e "$errorColor""Failed to export $editionName to install.$type""$resetColor"
cleanup
exit 1
fi
errorHandler $? "Failed to export $editionName to install.$type""$resetColor"
let indexesExported++
@ -472,6 +490,25 @@ done
info=`wimlib-imagex info "$firstMetadata" 3`
build=`grep -i "^Build:" <<< "$info" | sed "s/.* //g"`
addedVirtualEditions=0
if [ $runVirtualEditions -eq 1 ] && [ $build -ge 17063 ]; then
echo -e "$infoColor""Creating virtual editions...""$resetColor"
for virtualEdition in $VIRTUAL_EDITIONS_LIST; do
echo -e "$infoColor""Adding $virtualEdition edition...""$resetColor"
createVirtualEdition "$virtualEdition"
error=$?
if [ $error -ne 1 ]; then
errorHandler $error "Failed to create virtual edition"
let addedVirtualEditions++
fi
echo ""
done
elif [ $build -lt 17063 ]; then
echo "Virtual editions creation requires build 17063 or later"
fi
let indexesSum=$addedVirtualEditions+$indexesExported
spbuild=`grep -i "^Service Pack Build:" <<< "$info" | sed "s/.* //g"`
arch=`grep -i "^Architecture:" <<< "$info" | sed "s/.* //g"`
@ -479,7 +516,7 @@ if [ "$arch" == "x86_64" ]; then
arch="x64"
fi
if [ $indexesExported -gt 1 ]; then
if [ $indexesSum -gt 1 ]; then
isoEdition="MULTI"
else
isoEdition=`grep -i "^Edition ID:" <<< "$info" | sed "s/.* //g"`
@ -492,6 +529,10 @@ if [ -e "$isoName" ]; then
rm "$isoName"
fi
echo -e "$infoColor""Optimizing install.$type...""$resetColor"
wimlib-imagex optimize ISODIR/sources/install.$type
echo ""
echo -e "$infoColor""Creating ISO image...""$resetColor"
find ISODIR -exec touch {} +
@ -499,11 +540,7 @@ genisoimage -b "boot/etfsboot.com" --no-emul-boot \
--eltorito-alt-boot -b "efi/microsoft/boot/efisys.bin" --no-emul-boot \
--udf --hide "*" -V "$isoLabel" -o "$isoName" ISODIR
if [ $? != 0 ]; then
echo -e "$errorColor""Failed to create ISO image""$resetColor"
cleanup
exit 1
fi
errorHandler $? "Failed to create ISO image""$resetColor"
cleanup
echo -e "\033[1;92mDone.""$resetColor"

1438
convert_ve_plugin Normal file

File diff suppressed because it is too large Load Diff

View File

@ -11,13 +11,17 @@ Updates to created images.
### Usage
```
./convert.sh [compression] [uups_directory]
./convert.sh [compression] [uups_directory] [create_virtual_editions]
```
###### Compression options:
* wim - standard wim compression (`/Compress:max` in DISM)
###### compression options:
* wim - standard wim compression (`/Compress:max` in DISM) (default)
* esd - solid esd compression (`/Compress:recovery` in DISM)
###### create_virtual_editions options:
* 0 - do not create virtual editions (default)
* 1 - create virtual edtitions
### Usage examples
* `./convert.sh` - starts the conversion using files from `UUPs` directory and
creates an ISO image with `install.wim`
@ -28,6 +32,35 @@ Updates to created images.
* `./convert.sh wim MyUUP` - starts the conversion using files from `MyUUP`
directory and creates an ISO image with `install.wim`
* `./convert.sh wim MyUUP 1` - starts the conversion using files from `MyUUP`
directory, creates virtual editions and creates an ISO image with
`install.wim`
### Virtual editions
Since version 0.5.0 this script supports creation of virtual editions.
To run creation of all virtial editions simply use create_virtual_editions
switch in command line. If you want to customize which editions will be created
when this switch is set, please use VIRTUAL_EDITIONS_LIST in configuration file.
Virtual editions creation can be only done when convert_ve_plugin is present in
the same directory as converter.
Thanks to abbodi1406 for providing information which allowed creation of this
option.
### Configuration file
Configuration of advanced script options can be modified using
convert_config_linux file.
###### Configuration options
```
VIRTUAL_EDITIONS_LIST='space delimited editions sequence'
```
###### Configuration options explanation
* VIRTUAL_EDITIONS_LIST - configures which editions will be created when
create_virtual_editions is enabled.
### Requirements
This script uses the following commands to do its work:
* cabextract - to extract cabs