# Installera en fast inspelare

*Version 0.6.12*

En guide för dig på Parnassio som installerar och sköter fasta inspelare. Här står hur du gör en Raspberry Pi till en inspelare, uppdaterar den och tar bort den.

Körerna använder inspelaren enligt guiden *Fast inspelare i Parnassio*. Den här guiden är för dig som har datorn och terminalen. Tekniska detaljer finns i `apps/recorder-pi/docs/PROVISIONING.md`.

Allt görs från din egen dator över SSH. Klona aldrig kodförrådet på inspelaren: då hamnar hela kodförrådet, och eventuellt en nyckel till det, på en apparat som sitter i en lokal ni inte har kontroll över.

## Det här behöver du

**Till inspelaren**

- En Raspberry Pi med inbyggt WiFi och Bluetooth
- Ett minneskort med Raspberry Pi OS Lite 64-bit (Bookworm)
- En USB-mikrofon i stereo
- Strömadapter och helst en nätverkskabel

**På din dator**

- En utcheckning av kodförrådet `ensemble`
- SSH
- En skrivare för etiketten

Inspelaren behöver internet medan du installerar, eftersom den hämtar systempaket och Python-paket.

## Förbereda minneskortet

1. Öppna Raspberry Pi Imager och välj **Raspberry Pi OS Lite (64-bit)**.
2. Ange i inställningarna ett värdnamn, till exempel `rec-01`, ett användarnamn och ett tillfälligt lösenord.
3. Slå på SSH. Lägg gärna in din publika SSH-nyckel.
4. Hoppa helst över WiFi. Ett WiFi du anger här sparas med lösenord på kortet. Använd kabel under installationen.
5. Skriv kortet, sätt i det, anslut mikrofon och kabel, och sist strömmen.

Kontrollera att du når inspelaren och skriv upp dess IP-adress:

```bash
ssh pi@rec-01.local 'hostname -I'
```

Byt `pi` och `rec-01` mot det du angav.

**Använd IP-adressen från och med nu.** Installationen stänger av tjänsten som gör att namnet `rec-01.local` fungerar, och inspelaren svarar på namnet igen först när en kör har lagt till den. Ge gärna inspelaren en fast adress i routern. I kommandona nedan står `<adress>` för IP-adressen.

## Kontrollera servern

Gör det här en gång per server, inte per inspelare:

```bash
curl https://platform.parnass.io/v1/platform/recorder-grant-key
```

Svaret ska innehålla `public_key`. Står det `grant_signing_unavailable` saknar servern signeringsnyckel. Då fungerar varken inställning över Bluetooth eller fjärrstart för någon inspelare. Se *The signing key* i PROVISIONING.md.

## Installera

Från din dator:

```bash
cd ensemble/apps/recorder-pi
./deploy/remote-install.sh pi@<adress> \
    --api https://platform.parnass.io \
    --name "Församlingssalen" \
    --label > label.svg
```

- **`--api`** är alltid plattformsadressen `https://platform.parnass.io`, aldrig en körs adress. Den måste vara samma server som körernas app använder, annars godtar inspelaren inte appen.
- **`--name`** är namnet som körerna ser i appen. De kan ändra det senare.
- **`--label`** skriver etiketten till `label.svg` på din dator.

Du får frågan om SSH-lösenordet en gång och sedan eventuellt om lösenordet för `sudo`. Förloppet visas i terminalen, ett steg i taget.

De långsamma stegen, systempaket och Python-paket, visar en klocka som räknar upp. På en Pi 3 kan de ta flera minuter. Misslyckas ett steg står det `failed`, felutskriften visas och installationen avbryts.

### Det nya lösenordet

Första gången byter installationen ut lösenordet för kontot du loggade in med mot ett slumpat. Det visas **en gång**, sist i utskriften:

```
  New password for pi on this recorder (SSH and sudo):

      …

  Store it now, against device c00b2836c73d. It is saved nowhere else and
  will not be shown again.
```

Spara det i lösenordshanteraren tillsammans med enhetens id innan du stänger terminalen. Senare installationer behåller lösenordet. Vill du ha ett nytt, lägg till `--rotate-password`.

### Starta om

Starta om inspelaren efter första installationen. Först då hamnar `/tmp`, där inspelningen mellanlagras, i minnet i stället för på kortet.

```bash
ssh -t pi@<adress> 'sudo reboot'
```

Loggarna ligger bara i minnet och försvinner vid omstart. Titta därför i loggen innan du startar om en inspelare som krånglar.

## Kontrollera

Efter omstarten:

```bash
ssh pi@<adress> 'findmnt /tmp; systemctl is-active parnassio-recorder'
```

`/tmp` ska vara `tmpfs` och tjänsten `active`. Loggen följer du med:

```bash
ssh pi@<adress> 'journalctl -u parnassio-recorder -f'
```

Innan någon kör har skannat etiketten står det `not eligible` i loggen. Det är rätt.

### Hårdvaran

Första gången du använder en viss Pi-modell, kontrollera Bluetooth och nätverksbehörigheter:

```bash
ssh -t pi@<adress> 'sudo /opt/parnassio-recorder/hardware-check.sh'
```

Ska inspelaren sitta på ett WiFi med inloggningssida, anslut den till ett sådant och kör kontrollen med `--portal`. Klarar modellen det inte behöver den kabel, en USB-WiFi-adapter eller ett nätverk med lösenord.

## Etiketten

`label.svg` är 54 mm bred. Behöver du en smalare:

```bash
curl -o label.svg "http://<adress>:8080/label.svg?mm=38"
```

Skriv ut etiketten och sätt den på inspelaren, där den går att skanna när inspelaren sitter uppe. Etiketten finns också kvar på inspelaren, så du kan hämta den igen på samma sätt.

Etiketten fungerar som en nyckel: den som har den kan lägga till inspelaren i sin kör. Skicka den inte runt som bild.

## Lämna över

Sätt upp inspelaren i lokalen. Körens administratör lägger sedan till den i appen genom att skanna etiketten, enligt guiden *Fast inspelare i Parnassio*. Du behöver inte vara med. Sitter en nätverkskabel i ser appen det själv. Annars väljer administratören lokalens WiFi i appen.

## Inspelarens egen sida

Varje inspelare har en sida på `http://<adress>:8080/`. Där ser du mikrofon, nätverk, temperatur och vilka körer som får använda den, och du kan ändra:

- **API address**
- **Device name**
- **Active ensemble**, vilken kör inspelaren spelar in för
- **Stop recording**, som stoppar en pågående inspelning

Byter du **API address** gäller det direkt, och inspelaren hämtar den nya serverns nyckel själv.

Sidan har ingen inloggning. Alla på samma nätverk kan öppna den.

### Flera körer på samma inspelare

Inspelaren spelar in för en kör åt gången. Har bara en kör lagt till den väljs den kören automatiskt. Har flera körer lagt till den väljer du kör under **Active ensemble** och trycker på **Apply**.

## Uppdatera

```bash
cd ensemble/apps/recorder-pi
git pull
./deploy/remote-install.sh pi@<adress>
```

Inga flaggor behövs. Enhetens identitet, behörigheter, inställningar och serveradress finns kvar. Installationen vägrar om inspelaren spelar in, eftersom uppdateringen avbryter inspelningen. Vänta tills den är klar, eller lägg till `--force` om du är säker.

I appen visas inspelarens version under **Fasta inspelare**, i rött om den är äldre än appen.

Uppdatera alla inspelare som är äldre än 0.6.12. Före den versionen stoppade en inspelare utan fungerande mikrofon hela körens inspelning, två sekunder efter start och vid varje nytt försök.

## Stänga av en förlorad inspelare

Kräver en token för ett plattformskonto. Hitta inspelarens `id`:

```bash
curl https://platform.parnass.io/v1/platform/recorder-devices \
  -H "Authorization: Bearer <token>"
```

Stäng av den:

```bash
curl -X PATCH https://platform.parnass.io/v1/platform/recorder-devices/<id> \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" -d '{"state":"revoked"}'
```

Efter det kan inspelaren inte spela in för någon kör. Den som har minneskortet kan läsa det mesta på det, bland annat lösenord till WiFi-nätverk som inspelaren har anslutits till. Be därför lokalen att byta WiFi-lösenord.

## Ta bort eller installera om

Avinstallationen finns inte kvar på inspelaren. Kopiera över den först:

```bash
scp deploy/uninstall.sh pi@<adress>:/tmp/
ssh -t pi@<adress> 'sudo bash /tmp/uninstall.sh'
```

| Kommando | Tar bort |
|---|---|
| `uninstall.sh` | Programmet och tjänsten. Identitet och inställningar finns kvar. |
| `uninstall.sh --purge` | Även inställningar, identitet och inspelarens eget WiFi. |
| `uninstall.sh --remove-user` | Som `--purge`, och dessutom tjänstekontot `ensemble`. |

Efter `--purge` får inspelaren en **ny identitet** när du installerar igen. Den gamla etiketten slutar gälla, alla körer måste skanna den nya, och ett nytt lösenord visas.

Installera om med samma kommando som första gången.

## När något inte fungerar

| Du ser | Orsak och åtgärd |
|---|---|
| `This does not look like a Raspberry Pi` | Du är ansluten till fel dator. Kontrollera adressen. |
| `This recorder is recording right now` | Vänta tills inspelningen är klar, eller använd `--force`. |
| Tjänsten startar och stannar | Oftast ingen mikrofon. Kontrollera med `arecord -l` på inspelaren. |
| `ffmpeg produced no usable output (mic/device error?)` när någon startar en inspelning | Mikrofonen saknas eller används av något annat. Inspelaren hoppar över den inspelningen och försöker igen efter en minut. Före 0.6.12 stoppade den i stället allas inspelning — uppdatera. |
| `device is unknown, revoked, or holds no grants` | Ingen kör har skannat etiketten, eller inspelaren är avstängd. |
| `no grant for ensemble '…'` | Vald kör har inte lagt till inspelaren. Välj en annan under **Active ensemble**. |
| `bluetooth unavailable: Bluetooth is blocked (rfkill soft block)` | Raspberry Pi OS startar med radion blockerad. Kör om installationen, som häver blockeringen, eller kör `sudo rfkill unblock bluetooth` och starta om tjänsten. |
| `bluetooth unavailable` av annat skäl | Kör hårdvarukontrollen. Kör om installationen om det gäller behörigheter. |
| Appen hittar inte inspelaren | Bluetooth fungerar inte, eller telefonen är för långt bort. Se raderna ovan. |
| Appen säger att inspelaren inte godtog appens behörighet | Inspelaren och appen använder olika servrar. Loggraden `grant signing key cached (…) from …` visar vilken server inspelaren använder. Är det fel server, installera om med rätt `--api`. Inspelaren byter då själv till den serverns nyckel. |
| `this recorder has no signing key yet` | Inspelaren har inte nått servern. Se *Kontrollera servern* och starta sedan om tjänsten: `sudo systemctl restart parnassio-recorder`. |

Fler fall finns under *Troubleshooting* i PROVISIONING.md.
