This commit is contained in:
DoTheEvo
2023-09-07 00:18:40 +02:00
parent 71ecebfcf6
commit 7cd1d0d7af
8 changed files with 130 additions and 20 deletions
@@ -0,0 +1,54 @@
@echo off
:: checking if the script is run as administrator
net session >nul 2>&1
if %errorLevel% == 0 (
echo - Success: Administrative permissions confirmed.
) else (
echo - RUN AS ADMINISTRATOR
pause
exit /B
)
echo - powershell ExecutionPolicy changing to Bypass
powershell.exe Set-ExecutionPolicy -ExecutionPolicy Bypass
echo - checking if C:\Kopia folder exists, creating it if not
if not exist "C:\Kopia\" (
mkdir C:\Kopia
)
if exist "C:\Kopia\kopia_server_start.cmd" (
echo - C:\Kopia\kopia_server_start.cmd exists, renaming it with random suffix
ren "C:\Kopia\kopia_server_start.cmd" "kopia_backup_scipt_%random%.ps1"
)
echo - copying files to C:\Kopia
robocopy "%~dp0\" "C:\Kopia" "kopia.exe" /NDL /NJH /NJS
robocopy "%~dp0\" "C:\Kopia" "kopia_server_start.cmd" /NDL /NJH /NJS
robocopy "%~dp0\" "C:\Kopia" "win_vss_before.ps1" /NDL /NJH /NJS
robocopy "%~dp0\" "C:\Kopia" "win_vss_after.ps1" /NDL /NJH /NJS
robocopy "%~dp0\" "C:\Kopia" "shawl.exe" /NDL /NJH /NJS
echo.
echo - creting Kopia service
C:\Kopia\shawl.exe add --log-dir C:\kopia\Kopia_service_logs --name Kopia -- C:\Kopia\kopia_server_start.cmd
echo - setting Kopia service to start automaticly at boot
sc config Kopia start=auto
echo - start Kopia service
sc start Kopia
echo - copying link to Desktop
robocopy "%~dp0\" "%USERPROFILE%\Desktop" "Kopia.url" /NDL /NJH /NJS
echo.
echo --------------------------------------------------------------
echo.
echo DEPLOYMENT DONE
echo KOPIA SERVER CAN NOW BE FIND AT WEB PAGE: localhost:51515
echo A LINK SHOULD BE ON YOUR DESKTOP
echo.
pause
@@ -0,0 +1,6 @@
[InternetShortcut]
URL=http://localhost:51515/
IDList=
HotKey=0
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
@@ -0,0 +1,2 @@
chdir /d C:\Kopia
start /B kopia server start --insecure --config-file=C:\Kopia\repository.config --log-dir=C:\Kopia\Kopia_Logs --address=127.0.0.1:51515 --server-username=admin --server-password=aaa --enable-actions
@@ -0,0 +1,18 @@
if ($args.Length -eq 0) {
$kopiaSnapshotId = $env:KOPIA_SNAPSHOT_ID
} else {
$kopiaSnapshotId = $args[0]
}
if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
$mountPoint = Get-Item "${PSScriptRoot}\${kopiaSnapshotId}"
$mountedVolume = $mountPoint.Target
cmd /c rmdir $mountPoint
Get-CimInstance -ClassName Win32_ShadowCopy | Where-Object { "$($_.DeviceObject)\" -eq "\\?\${mountedVolume}" } | Remove-CimInstance
} else {
Start-Process 'powershell' '-f', $MyInvocation.MyCommand.Path, $kopiaSnapshotId -Verb RunAs -WindowStyle Hidden -Wait
if ($proc.ExitCode) {
exit $proc.ExitCode
}
}
@@ -0,0 +1,30 @@
if ($args.Length -eq 0) {
$kopiaSnapshotId = $env:KOPIA_SNAPSHOT_ID
$kopiaSourcePath = $env:KOPIA_SOURCE_PATH
} else {
$kopiaSnapshotId = $args[0]
$kopiaSourcePath = $args[1]
}
$sourceDrive = Split-Path -Qualifier $kopiaSourcePath
$sourcePath = Split-Path -NoQualifier $kopiaSourcePath
# use Kopia snapshot ID as mount point name for extra caution for duplication
$mountPoint = "${PSScriptRoot}\${kopiaSnapshotId}"
if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
$shadowId = (Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{ Volume = "${sourceDrive}\" }).ShadowID
$shadowDevice = (Get-CimInstance -ClassName Win32_ShadowCopy | Where-Object { $_.ID -eq $shadowId }).DeviceObject
if (-not $shadowDevice) {
# fail the Kopia snapshot early if shadow copy was not created
exit 1
}
cmd /c mklink /d $mountPoint "${shadowDevice}\"
} else {
$proc = Start-Process 'powershell' '-f', $MyInvocation.MyCommand.Path, $kopiaSnapshotId, $kopiaSourcePath -PassThru -Verb RunAs -WindowStyle Hidden -Wait
if ($proc.ExitCode) {
exit $proc.ExitCode
}
}
Write-Output "KOPIA_SNAPSHOT_PATH=${mountPoint}${sourcePath}"
+20 -20
View File
@@ -267,28 +267,24 @@ WantedBy=multi-user.target
## KopiaUI in Windows
While KopiaUI seems like the way to go because of the simple deployment and
use, it has a drawback. The way the schedule works, where the user must be
logged in for backups to take place is something to be very aware of.<br>
use, it has a drawback. The way the schedule works - that the user must be
logged in for backups to take place.
Othewise KopiaUI does not really need guidance here.
It just works for any normal use.
Othewise KopiaUI does not need guide. It just works for normal use.
## Kopia Server in Windows
Kopia binary is copied in to `C:\Kopia\` and a scheduled task is imported
that start kopia on boot in server mode.
In server mode kopia runs in the background, with its web server
answering at url: `localhost:51515` where it can be managed.
Kopia always running in the background, but also webgui to manage it in.
* [Download this repo](https://github.com/DoTheEvo/selfhosted-apps-docker/archive/refs/heads/master.zip),
delete everything except `kopia_server_deploy_win` folder.
* Run `DEPLOY.cmd`, it will:
delete everything except `kopia_backup/kopia_server_deploy_win_service` folder.
* Run `DEPLOY.cmd` as admin, it will:
* Removes powershell scripts restriction.
* Creates folder `C:\Kopia` and copies files there
* Imports a task schedule that will start `C:\Kopia\kopia_server_start.cmd`<br>
* Places `kopia.url` on the current user's desktop
* Check content of `C:\Kopia\kopia_server_start.cmd`<br>
note or change the credentials, the default: `admin // aaa`
* Creates folder `C:\Kopia` and copies files there.
* Uses [shawl](https://github.com/mtkennerly/shawl) to crate Kopia service.
* Places `kopia.url` on the current user's desktop.
* One should check content of `C:\Kopia\kopia_server_start.cmd`<br>
note credentials set there: `admin // aaa`
* Visit in browser `localhost:51515`
* Setup new repo through webgui.
* Setup what to backup and schedule.
@@ -297,12 +293,16 @@ Kopia should now run on boot and be easy to manage through web GUI.<br>
Be it creating backup jobs, mounting old snapshots to restore files,
or just looking around if all works as it should.
It is also popular to use [nssm](https://nssm.cc/) to start up and manage
Kopia as a service.
All relevant files are in `C:\Kopia`, from binaries, `repository.config`, to logs.
While Kopia runs now in server mode, the fact that we pass `--insecure` flag
means it cant serve as a repository for other kopia instances.
For that look at docker deployment section or in to making changes to the cmd file.
Kopia server runs in insecure mode, so no https and no actual server for other
machines on network to use, just local deployment.
Before shawl, task scheduler was used.<br>
This [matushorvath/Kopia as Windows Service](https://gist.github.com/matushorvath/dd7148c201ceae03ddebc1b4bbef4d20)
guide helped move beyond that. It contains more info if one would want to
actually run as server repository for other machines.<br>
Also use of [nssm](https://nssm.cc/) is popular.
## Kopia cli in Windows