ZealOS/build/sync.ps1
2022-05-02 11:10:49 +02:00

119 lines
No EOL
3.4 KiB
PowerShell
Executable file

# make sure we are in the correct directory
$currentDir=Get-Location
if ("$currentDir" -ne "$PSScriptRoot")
{
try
{
pushd "$PSScriptRoot"
. $PSCommandPath $args
}
finally
{
popd
}
exit
}
$choice = $args[0]
function print_usage()
{
Write-Output "Usage: sync.ps1 [ repo | vm ]"
Write-Output ""
Write-Output " repo - overwrites src/ with virtual disk contents."
Write-Output " vm - overwrites virtual disk with src/ contents."
Write-Output ""
exit
}
if ($args.count -eq 0)
{
print_usage
}
if ($choice -ne 'repo' -and $choice -ne "vm")
{
print_usage
}
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
Write-Output "This script must be run as Adminstrator. Press ENTER to exit."; Read-Host; exit
}
if (!(Get-Command qemu-system-x86_64.exe -errorAction SilentlyContinue))
{
$env:Path += ";C:\Program Files\qemu;"
if (!(Get-Command qemu-system-x86_64.exe -errorAction SilentlyContinue))
{
Write-Output "QEMU is not installed, or not set in \$PATH. Press ENTER to exit."; Read-Host; exit
}
}
Write-Output "QEMU installation found."
# Set this
$ZEALDISK=""
# Examples:
#$ZEALDISK = "$HOME\VirtualBox VMs\ZEAL\ZEAL.vdi"
#$ZEALDISK="$HOME\vmware\ZealOS\ZealOS.vmdk"
#$ZEALDISK="ZealOS.qcow2"
if ($ZEALDISK -eq "")
{
Write-Output "Please edit this script with the full path to your ZealOS virtual disk. Press ENTER to exit."; Read-Host; exit
}
if (!(Test-Path -Path $ZEALDISK))
{
Write-Output "$ZEALDISK is not a path to a file. Press ENTER to exit."; Read-Host; exit
}
$TEMPZEALDISK = "$env:TEMP\TempZealDisk.vhd"
qemu-img convert -O vpc $ZEALDISK $TEMPZEALDISK
fsutil sparse setflag $TEMPZEALDISK 0
fsutil sparse queryflag $TEMPZEALDISK
function Mount-ZealDisk
{
$global:ZEALLETTER = ((Mount-DiskImage -ImagePath $TEMPZEALDISK -Access ReadWrite) | Get-Disk | Get-Partition -PartitionNumber 1).DriveLetter
}
function Unmount-ZealDisk
{
$be_quiet = Dismount-DiskImage -ImagePath $TEMPZEALDISK
}
switch ($choice)
{
"repo"
{
Write-Output "Emptying src..."
Remove-Item "..\src\*" -Recurse -Force
Mount-ZealDisk
Write-Output "Copying vdisk root to src..."
Copy-Item -Path "${ZEALLETTER}:\*" -Destination "..\src\" -Recurse -Force
Remove-Item "..\src\Boot\BootMHD2.BIN"
Remove-Item "..\src\Boot\KERNEL.ZXE"
Unmount-ZealDisk
Remove-Item $TEMPZEALDISK
Write-Output "Finished."
}
"vm"
{
Write-Output ""
Write-Output "TODO: Windows sync.ps1 vm"
Write-Output "since this is not implemented yet, you can instead use build-iso.ps1"
Write-Output "to make a Distro ISO, and use that to install changes over your existing VM."
Write-Output ""
<#
Mount-ZealDisk
Write-Output "Copying src to vdisk..."
Copy-Item -Path "..\src\*" -Destination "${ZEALLETTER}:\" -Recurse -Force
Unmount-ZealDisk
switch ([System.IO.Path]::GetExtension($ZEALDISK))
{
".vdi" {qemu-img convert -O vdi $TEMPZEALDISK $ZEALDISK} # Non-working... re-building a HDD changes file UUID, which confuses Virtualbox...
}
Write-Output "Finished."
#>
}
}