# timOhjeet

Yleiset ongelmatilanteet asennuksessa ja ylläpidossa

1. TIMiä asentaessa ./tim setup jumittaa (Windows)

Jos komennon ./tim setup jälkeen asennus jää jumiin kohdan

[INFO] Installing Python development dependencies

jälkeen, kyseessä on todennäköisesti puuttuvat oikeudet tehdä tarvittavia muutoksia. Tällöin Git Bash (tai muu komentotulkki, jota käytät asennuksessa) pitää ajaa järjestelmänvalvojan oikeuksilla:

  1. Avaa Windowsin hakuvalikko painamalla Win+S
  2. Kirjoita hakuun git bash (tai komentotulkkisi) ja valitse oikealta 'Run as administrator'/'Aja järjestelmänvalvojana'
  3. Suorita ./tim setup --force TIMin juurihakemistosta

Asennuksen pitäisi mennä nyt normaalisti läpi.

2. Windows: WSL lakkaa vastaamasta

WSL lakkasi vastaamasta ja silloin Docker ei käynnistynyt. Auttoi seuraavat:

wsl --update
wsl --shutdown
wsl

Toisessa tapauksessa Docker näytti ulkoisesti olevan käynnissä, mutta

$ ./tim npmi
error cb() never called!
error This is an error with npm itself. Please report this error at:
error https://npm.community/

jokin WSL:n toiminnassa esti Dockeria käynnistymästä.

$ ./tim up
error during connect: This error may indicate that the docker daemon is not running.

Tilanne korjaantui WSL:n päivityksellä ja Dockerin uudelleen käynnistyksellä

$ wsl --update
$ wsl --shutdown
$ docker restart

3. TIMiin ei saa yhteyttä selaimessa

Jos et saa yhteyttä TIMiin selaimesta, niin todennäköisesti jokin kontti ei ole lähtenyt käyntiin.

Kontin ajosta saa tietoa kirjoittamalla:

./tim dc logs <kontin nimi docker-compose.yml:ssä>

Esim:

./tim dc logs --tail=20 tim

ja siellä voi olla vaikkapa:

2021-12-16 09:28:04,309 ERROR: Your database is not up to date. To upgrade, run: ./r flask db upgrade

jolloin pitää toimia ohjeiden mukaan.

3.1 Mahdollisia syitä, miksi TIM-kontti ei lähde käyntiin

  • Tietokannan rakenne ei ole ajan tasalla. Tietokannan voi päivittää komennolla

    ./tim run flask db upgrade

    Jos tämän tekee tuotannossa, turvallisempaa saattaa olla ajaa

    ./tim update db

    joka samalla sammuttaa muut kontit päivityksen ajaksi ja näyttää peruskäyttäjille "TIM is being updated" -viestin.

  • Tietokanta on jollain tavalla rikki. Silloin sen voi alustaa uudelleen:

    ./tim dc down
    docker volume rm tim_data11
    <poista kansio timApp/tim_files>
    ./tim up

4. Selaimessa näkyy 502 Bad Gateway

  • Vaihtoehtoja:
    • Tim-kontti ei ole käynnissä, katso docker ps

    • Itse TIM-palvelin ei ole käynnissä; katso onko se pysähtynyt

    • Esim. tietokannan olemassaolon voi tarkistaa:

      ./tim pg backends

      Tietokanta syntyy automaattisesti TIMin käynnistyessä, jos sitä ei ole.

5. Windows: EPERM-virhe ajettaessa ./tim npmi

Tämän komennon aikana saattaa Windowsilla tulla EPERM-virhe. Laita siinä tapauksessa antivirusohjelma pois päältä väliaikaisesti, poista hakemisto node_modules (jos se ehti syntyä) ja yritä uudestaan.

# portitvarattu

6. Windows: TIMin käyttämät portit ovat varattu

Ainakin Vesan koneessa on käynyt niin, että Windowsin käynnistyessä joitakin TIMin käyttämiä portteja on kieltolistalla. Peruskäytössä TIM käyttää vain portit 80 (HTTP) ja 443 (HTTPS), mutta nämä portit voi ohjata uudelleen muuttamalla caddy.port_mapping-konfiguraatiota tim.conf-tiedostossa.

Listan näkee Windowsissa komennolla:

netsh interface ipv4 show excludedportrange protocol=tcp

Jos listalla on TIMin käyttämiä portteja, niin ne saa vapaaksi ainakin tilapäisesti komennolla

net stop winnat

Tämä pitää kuitenkin antaa ennen docker-konttien käynnistymistä, eli jos kontit ovat jo käynnistyneet, niin sitten

./tim dc down
./tim up

Komennolla

netstat -a -b

näkee käytössä olevat portit (eri asia kuin mitä on kielletty).

Windowsilla voi käytössä olevien porttien katsomiseen käyttää graafista CurrPorts-työkalua.

Voit kokeilla myös vapauttaa varattuja portteja (Command Promt admin oikeuksilla):

net stop winnat
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
net start winnat

Jos konttien käynnistäminen keskeytyy alla olevaan virheilmoitukseen

Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind:
An attempt was made to access a socket in a way forbidden by its access permissions.

Täytyy vapauttaa valmiiksi käytössä oleva portti

$ netstat -aon | grep :80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    [::]:80                [::]:0                 LISTENING       4

$ net stop W3SVC
  The World Wide Web Publishing Service service is stopping.
  The World Wide Web Publishing Service service was stopped successfully.
  
$ netstat -aon | grep :80
  <tyhjä>

Kokeillaan uudestaan toimiiko

$ ./tim dc down
$ ./tim up

7. WSL: Lähiverkkoon ei saada yhteyttä

Ongelman luonne: jos yrittää ottaa yhteyttä esimerkiksi lähiverkossa oleviin laitteisiin, WSL ilmoittaa virheen:

$ ping 192.168.59.1
ping: connect: Network is unreachable

Vastaavasti apt update ja docker-compose pull eivät vältämättä toimi samasta syystä.

Ongelmana saattaa olla se, että Windowsin %temp%-kansio on pakattu. Lisätietoja tässä vastauksessa:

https://github.com/microsoft/WSL/issues/5437#issuecomment-786149638

Korjaus: Tarkista, että %temp% -kansio ei ole pakattu. Jos se on, pura kansio ja käynnistä tietokone uudelleen.

Jos tämä ei ole mahdollista (esimerkiksi oikeudet eivät riitä), luo %userprofile%-kansioon .wslconfig-tiedosto ja laita sen sisällöksi

[wsl2]
swap=0

ja käynnistä tietokone uudelleen.

8. WSL 2: apt update jää jumiin

Ongelman luonne: kun ajetaan apt update, se jää pitkäksi ajaksi ottamaan yhteyttä palvelimeen, minkä jälkeen se epäonnistuu.

Lisäksi ping/host -komennot eivät toimi domaineihin. Esimerkiksi tulee virhe mallia

$ host google.com
;; connection timed out; no servers could be reached

Ongelma johtuu siitä, että WSL ei aina osaa tunnistaa DNS-palvelimen osoitteen oikein. Katso lisätietoja kortista:

https://github.com/microsoft/WSL/issues/4285

Korjaus: Seuraa seuraavat ohjeet:

https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021

9. Docker ei lähde käyntiin

Tulee esimerkiksi virhe:

Docker failed to initialize

kun yrittää Dockeria käynnistää käsin. Käsin siksi, että se ei ole lähtenyt itsekseen käyntiin.

Itse sain tuon korjattua kun

  1. ~/AppData/Roaming/Docker hakemistossa
    • varakopio settings.json tiedostosta ja sitten sen tuhoaminen
    • tuhotaan tiedosto locked-directories
  2. Sammutetaan kaikki Docker-instanssit (ehkä jopa uudelleen käynnistys)

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.