- Update all 24.04.2 references to 24.04.4 (ISO name, URLs, SHA256, docs) - Add format-persistence.sh to bootable/linux-setup/ (from working E: drive) - Rewrite website guide.html Linux tutorial: Linux Mint + Rufus → Ventoy + Ubuntu Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
165 lines
6.8 KiB
PowerShell
165 lines
6.8 KiB
PowerShell
# ============================================================
|
|
# U-Claw Bootable USB - Step 4: Copy Files to USB
|
|
# Copies ISO, persistence, Ventoy config, and setup scripts
|
|
# ============================================================
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
Write-Host ""
|
|
Write-Host "============================================" -ForegroundColor Cyan
|
|
Write-Host " U-Claw Bootable USB - Step 4: Copy to USB" -ForegroundColor Cyan
|
|
Write-Host "============================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# ── Config ──
|
|
$CacheDir = Join-Path $PSScriptRoot ".download-cache"
|
|
$ISOName = "ubuntu-24.04.4-desktop-amd64.iso"
|
|
$ISOPath = Join-Path $CacheDir $ISOName
|
|
$PersistencePath = Join-Path $CacheDir "persistence.dat"
|
|
$VentoyConfigDir = Join-Path $PSScriptRoot "ventoy"
|
|
$LinuxSetupDir = Join-Path $PSScriptRoot "linux-setup"
|
|
|
|
# ── Verify required files ──
|
|
$missing = @()
|
|
if (-not (Test-Path $ISOPath)) { $missing += "ISO ($ISOPath)" }
|
|
if (-not (Test-Path $PersistencePath)) { $missing += "persistence.dat ($PersistencePath)" }
|
|
if (-not (Test-Path "$VentoyConfigDir\ventoy.json")) { $missing += "ventoy.json" }
|
|
|
|
if ($missing.Count -gt 0) {
|
|
Write-Host "[ERROR] Missing required files:" -ForegroundColor Red
|
|
foreach ($m in $missing) {
|
|
Write-Host " - $m" -ForegroundColor Red
|
|
}
|
|
Write-Host ""
|
|
Write-Host " Please run the previous scripts first:" -ForegroundColor Yellow
|
|
Write-Host " .\2-download-iso.ps1 and .\3-create-persistence.ps1" -ForegroundColor Yellow
|
|
Read-Host "Press Enter to exit"
|
|
exit 1
|
|
}
|
|
|
|
# ── Find Ventoy USB drive ──
|
|
Write-Host "[INFO] Looking for Ventoy USB drive..." -ForegroundColor Yellow
|
|
|
|
$ventoyDrive = $null
|
|
$volumes = Get-Volume | Where-Object { $_.DriveType -eq "Removable" -or $_.FileSystemLabel -match "(?i)ventoy" }
|
|
|
|
foreach ($vol in $volumes) {
|
|
if ($vol.FileSystemLabel -match "(?i)ventoy" -and $vol.DriveLetter) {
|
|
$ventoyDrive = "$($vol.DriveLetter):"
|
|
break
|
|
}
|
|
}
|
|
|
|
if (-not $ventoyDrive) {
|
|
# Fallback: check all removable drives for VENTOY label
|
|
$removable = Get-Volume | Where-Object { $_.DriveType -eq "Removable" -and $_.DriveLetter }
|
|
if ($removable.Count -eq 0) {
|
|
Write-Host "[ERROR] No removable USB drives found." -ForegroundColor Red
|
|
Write-Host " Make sure the Ventoy USB is inserted." -ForegroundColor Yellow
|
|
Read-Host "Press Enter to exit"
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "[INFO] Could not auto-detect Ventoy drive. Available removable drives:" -ForegroundColor Yellow
|
|
$removable | Format-Table DriveLetter, FileSystemLabel, @{
|
|
Label = "Size (GB)"
|
|
Expression = { [math]::Round($_.Size / 1GB, 1) }
|
|
} -AutoSize
|
|
|
|
$driveLetter = Read-Host "Enter the drive letter of your Ventoy USB (e.g., E)"
|
|
$ventoyDrive = "${driveLetter}:"
|
|
|
|
if (-not (Test-Path $ventoyDrive)) {
|
|
Write-Host "[ERROR] Drive $ventoyDrive does not exist." -ForegroundColor Red
|
|
Read-Host "Press Enter to exit"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
Write-Host "[OK] Ventoy drive found: $ventoyDrive" -ForegroundColor Green
|
|
|
|
# ── Check free space ──
|
|
$driveInfo = Get-PSDrive -Name $ventoyDrive.TrimEnd(':')
|
|
$freeGB = [math]::Round($driveInfo.Free / 1GB, 1)
|
|
$isoSizeGB = [math]::Round((Get-Item $ISOPath).Length / 1GB, 1)
|
|
$persGB = [math]::Round((Get-Item $PersistencePath).Length / 1GB, 1)
|
|
$needGB = $isoSizeGB + $persGB + 0.1
|
|
|
|
Write-Host "[INFO] Free space: ${freeGB} GB | Need: ~${needGB} GB (ISO: ${isoSizeGB} + Persistence: ${persGB})" -ForegroundColor Yellow
|
|
|
|
if ($freeGB -lt $needGB) {
|
|
Write-Host "[ERROR] Not enough free space on $ventoyDrive" -ForegroundColor Red
|
|
Read-Host "Press Enter to exit"
|
|
exit 1
|
|
}
|
|
|
|
# ── Confirm ──
|
|
Write-Host ""
|
|
Write-Host "Will copy to $ventoyDrive :" -ForegroundColor White
|
|
Write-Host " - $ISOName (${isoSizeGB} GB)" -ForegroundColor White
|
|
Write-Host " - persistence.dat (${persGB} GB)" -ForegroundColor White
|
|
Write-Host " - ventoy/ventoy.json" -ForegroundColor White
|
|
Write-Host " - u-claw-linux/ (setup scripts)" -ForegroundColor White
|
|
Write-Host ""
|
|
|
|
$confirm = Read-Host "Proceed? (Y/n)"
|
|
if ($confirm -eq "n" -or $confirm -eq "N") {
|
|
Write-Host "Cancelled." -ForegroundColor Yellow
|
|
exit 0
|
|
}
|
|
|
|
# ── Copy files ──
|
|
Write-Host ""
|
|
Write-Host "[1/4] Copying ISO (~${isoSizeGB} GB, please wait)..." -ForegroundColor Yellow
|
|
Copy-Item -Path $ISOPath -Destination "$ventoyDrive\$ISOName" -Force
|
|
Write-Host " Done." -ForegroundColor Green
|
|
|
|
Write-Host "[2/4] Copying persistence.dat (~${persGB} GB)..." -ForegroundColor Yellow
|
|
Copy-Item -Path $PersistencePath -Destination "$ventoyDrive\persistence.dat" -Force
|
|
Write-Host " Done." -ForegroundColor Green
|
|
|
|
Write-Host "[3/4] Copying Ventoy configuration..." -ForegroundColor Yellow
|
|
$ventoyDestDir = "$ventoyDrive\ventoy"
|
|
if (-not (Test-Path $ventoyDestDir)) {
|
|
New-Item -ItemType Directory -Path $ventoyDestDir -Force | Out-Null
|
|
}
|
|
Copy-Item -Path "$VentoyConfigDir\ventoy.json" -Destination "$ventoyDestDir\ventoy.json" -Force
|
|
Write-Host " Done." -ForegroundColor Green
|
|
|
|
Write-Host "[4/4] Copying Linux setup scripts..." -ForegroundColor Yellow
|
|
$linuxDestDir = "$ventoyDrive\u-claw-linux"
|
|
if (Test-Path $linuxDestDir) {
|
|
Remove-Item -Path $linuxDestDir -Recurse -Force
|
|
}
|
|
Copy-Item -Path $LinuxSetupDir -Destination $linuxDestDir -Recurse -Force
|
|
Write-Host " Done." -ForegroundColor Green
|
|
|
|
# ── Done ──
|
|
Write-Host ""
|
|
Write-Host "============================================" -ForegroundColor Green
|
|
Write-Host " USB Drive Ready!" -ForegroundColor Green
|
|
Write-Host "============================================" -ForegroundColor Green
|
|
Write-Host ""
|
|
Write-Host " Your bootable USB is ready to use!" -ForegroundColor White
|
|
Write-Host ""
|
|
Write-Host " How to boot:" -ForegroundColor Cyan
|
|
Write-Host " 1. Insert the USB into the target computer" -ForegroundColor White
|
|
Write-Host " 2. Restart and press the boot key:" -ForegroundColor White
|
|
Write-Host " - Dell: F12" -ForegroundColor Gray
|
|
Write-Host " - Lenovo: F12" -ForegroundColor Gray
|
|
Write-Host " - HP: F9" -ForegroundColor Gray
|
|
Write-Host " - ASUS: F2 or DEL" -ForegroundColor Gray
|
|
Write-Host " - Acer: F12" -ForegroundColor Gray
|
|
Write-Host " - MSI: F11" -ForegroundColor Gray
|
|
Write-Host " 3. Select USB device from boot menu" -ForegroundColor White
|
|
Write-Host " 4. Ventoy menu -> Select Ubuntu" -ForegroundColor White
|
|
Write-Host " 5. Ubuntu boots with persistence enabled" -ForegroundColor White
|
|
Write-Host ""
|
|
Write-Host " First time in Linux:" -ForegroundColor Cyan
|
|
Write-Host " 1. Connect to Wi-Fi" -ForegroundColor White
|
|
Write-Host " 2. Open Terminal" -ForegroundColor White
|
|
Write-Host ' 3. sudo bash /media/*/Ventoy/u-claw-linux/setup-openclaw.sh' -ForegroundColor White
|
|
Write-Host " 4. Double-click 'U-Claw AI Assistant' on desktop" -ForegroundColor White
|
|
Write-Host ""
|
|
Read-Host "Press Enter to close"
|