add borg recovery details

This commit is contained in:
Yisroel Baum 2026-06-11 22:35:50 +03:00
parent 14176fed58
commit c590ff251a
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9

97
RECOVERY.md Normal file
View file

@ -0,0 +1,97 @@
# Forgejo Repository Recovery
This is the minimal recovery path for getting source code back from the
BorgBase backup. It does not rebuild the full server; it extracts Forgejo's
bare Git repositories so they can be cloned locally.
## Requirements
- BorgBase repo URL:
`ssh://n5lniyfd@n5lniyfd.repo.borgbase.com/./repo`
- Decrypted Borg SSH private key from the flash drive
- Borg repository passphrase from the flash drive
- A machine with `borg`, `git`, and `ssh`
This only recovers repositories that were pushed to Forgejo before the selected
Borg backup ran.
## Recovery
Install the needed tools. On NixOS or another machine with Nix:
```sh
nix-shell -p borgbackup git openssh
```
Prepare a working directory and copy in the Borg SSH key:
```sh
mkdir -p ~/borg-recovery
cp /path/to/flash/borg-private-key ~/borg-recovery/borg-private-key
chmod 600 ~/borg-recovery/borg-private-key
```
Set the Borg connection environment:
```sh
export BORG_REPO='ssh://n5lniyfd@n5lniyfd.repo.borgbase.com/./repo'
export BORG_RSH='ssh -i ~/borg-recovery/borg-private-key -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new'
```
Read the Borg passphrase without showing it on screen:
```sh
read -rsp 'Borg passphrase: ' BORG_PASSPHRASE
export BORG_PASSPHRASE
echo
```
List available archives:
```sh
borg list
```
Choose an archive name from the list, then extract only Forgejo's Git
repositories:
```sh
mkdir -p ~/borg-recovery/extract
cd ~/borg-recovery/extract
borg extract ::ARCHIVE_NAME var/lib/forgejo/repositories
```
Find the extracted bare repositories:
```sh
find ~/borg-recovery/extract/var/lib/forgejo/repositories -maxdepth 3 -name '*.git'
```
Clone the repository you need:
```sh
git clone ~/borg-recovery/extract/var/lib/forgejo/repositories/OWNER/REPO.git
```
Example:
```sh
git clone ~/borg-recovery/extract/var/lib/forgejo/repositories/yisroel/home-server-config.git
```
## About the Passphrase Command
This command:
```sh
read -rsp 'Borg passphrase: ' BORG_PASSPHRASE
```
reads the passphrase into the `BORG_PASSPHRASE` shell variable.
- `-r` reads the text literally.
- `-s` hides what you type.
- `-p` shows the prompt.
Then `export BORG_PASSPHRASE` makes the variable available to `borg`.