97 lines
2.2 KiB
Markdown
97 lines
2.2 KiB
Markdown
# 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`.
|