# payload — 離線安裝用 MSI(可選)

把安裝程式要用到的安裝檔放在這個資料夾,就能在**沒有網路**的客戶電腦上安裝。
若這裡是空的,`install.ps1` 會改成執行時自動從網路下載(需客戶電腦能上網)。

## 要放哪些檔案

| 檔名 | 用途 | 下載來源 |
|------|------|----------|
| `tailscale-setup-amd64.msi` | Tailscale(64 位元 Intel/AMD) | https://pkgs.tailscale.com/stable/tailscale-setup-latest-amd64.msi |
| `tailscale-setup-arm64.msi` | Tailscale(ARM64,如 Surface Pro X) | https://pkgs.tailscale.com/stable/tailscale-setup-latest-arm64.msi |
| `OpenSSH-Win64.msi` | OpenSSH 後備安裝(當 Windows 內建功能裝不起來時) | https://github.com/PowerShell/Win32-OpenSSH/releases/latest |

> OpenSSH 多數情況用 Windows 內建功能就會成功,這個 MSI 只是**離線後備**。
> Tailscale 沒有內建功能,所以離線安裝一定要放對應架構的 MSI。

> 本工具已內附 **amd64 與 arm64** 兩種架構的 Tailscale 1.98.4 MSI;安裝時會依客戶電腦架構自動選用。

## 建議:鎖定雜湊(防竄改)

下載後算出 SHA256,填進 `config.json`:amd64 → `ExpectedTailscaleSha256`、arm64 → `ExpectedTailscaleArm64Sha256`、
OpenSSH → `ExpectedOpenSSHSha256`。安裝時會先驗證內附 MSI,不符就中止。

```powershell
Get-FileHash .\payload\tailscale-setup-amd64.msi -Algorithm SHA256 | Select-Object -ExpandProperty Hash
Get-FileHash .\payload\tailscale-setup-arm64.msi -Algorithm SHA256 | Select-Object -ExpandProperty Hash
Get-FileHash .\payload\OpenSSH-Win64.msi          -Algorithm SHA256 | Select-Object -ExpandProperty Hash
```

內附 MSI 的雜湊留空時只會警示並放行(信任自家 payload);但**線上下載**的後備路徑預設改為
**fail-closed**:沒有對應的 `Expected*Sha256` 就會中止安裝。若確實需要在無雜湊下接受線上下載,
請在 `config.json` 設定 `AllowUnverifiedDownload: true` 明示接受風險。
