TIM-JYU / TIM

TIM (The Interactive Material) is an open-source cloud-based platform for creating interactive learning documents.
https://tim.education/view/about/en-US
MIT License
13 stars 4 forks source link

TIM setup may generate a faulty docker-compose.yml file on Linux #3676

Open saviit opened 1 week ago

saviit commented 1 week ago

During TIM setup (./tim setup, or via installation shell script), we generate the docker-compose.yml file that is used for pulling our Docker images. Image hashes/tags are calculated based on local Dockerfiles and the package lock file poetry.lock (see cli/docker/service_variables.py and cli/util/hash.py). The latter of these, poetry.lock, is not always consistent on some Linux distributions, mainly those with a rolling (package) update policy, such as Arch/Manjaro. This in turn may result in image hashes/tags that do not exist in the container registry, so the installation fails midway (Docker error 'manifest unknown').

Suggestions on fixes (untested as of 2024-07-05):

  1. Update dependencies
    • [ ] bump POETRY_MIN_VERSION in cli/commands/setup.py to at least 1.7.0 to support Python 3.12 for distros with rolling updates (might as well go for the latest 1.8.3. then)
    • [ ] remove dependency on poetry.lock for image hash generation, use IMAGE_NAME:latest ?

or

  1. Hardcoded image hash tags ??? until the issue can be resolved in a more permanent fashion
dezhidki commented 1 week ago

Tämä vaatii tarkennusta, sillä nyt jotain ei täsmää. poetry.lock -tiedoston sisältö ei saa muuttua paitsi jos pakkaukset asennetaan tai poistetaan poetrylla. Pelkästään uuden TIM-instanssin pystytys ei muuta lock-tiedoston sisältöä.

Onko nyt ihan 100 % varma, ettei syy ole nyt perimmäisesti joku toinen? Onko varmasti testattu, että juuri poetry.lock eroaa? Millä tavalla sen saa toistettua tarkasti? Esimerkiksi vaihe vaiheelta stepit, jolla saisin asian toistettua omalla tyhjällä Linux-asennuksella.

Ja jos saa toistettua, niin laitatko vaikka tähän korttiin poetry.lock -tiedosto, joka sinulla on. Sen voisi kokeilla diffata repossa olevaan.

dezhidki commented 1 week ago

Lisähuomiona: jos muistan oikein, uusimissa Poetry-versiossa lockfilen formaatti on hieman eri. Se kuitenkin pitäisi ratketa ihan vaan nostamalla poetryn versio CLIssa, generoimalla lockfilen uusiksi (poetry lock) ja puskemalla kontit uusilla hasheilla

Tämän voi varmistaa ihan vaan diffaamalla uusimman poetryn lockfilen vanhaan

saviit commented 1 week ago

Onko nyt ihan 100 % varma, ettei syy ole nyt perimmäisesti joku toinen? Onko varmasti testattu, että juuri poetry.lock eroaa? Millä tavalla sen saa toistettua tarkasti? Esimerkiksi vaihe vaiheelta stepit, jolla saisin asian toistettua omalla tyhjällä Linux-asennuksella.

Joo ei ole tosiaan 100% varma tämä, sen verran alussa itselläkin selvittely että aika paljon kysymysmerkkejä, lähinnä laitoin nyt ylös arveluja mahdollisesta syystä vielä kun ne oli muistissa.

Laitan tähän nyt toivottavasti jokseenkin selkeän sepustuksen tapahtumaketjusta omalta osalta. Käytössä Manjaro kernelillä 6.1.94-1.

  1. Päivitin Manjaron paketit. Näiden ohessa Python päivittyi versioon 3.12.4.
  2. Pullasin TIM-repon tuoreeksi polkuun /opt/tim
  3. Ajoin ./tim setup. Poetry kaatui virheeseen heti alkuunsa, jo ennen virtuaaliympäristön luomista, koska Python3.12 ei ollut tuettuna. Jostain syystä oma Poetry-versio oli lukittunut versioon 1.3.1 ja ajettiin ilmeisesti aina polusta ~/.local/bin. Päivittäminen ei onnistunut sen enempää pip:llä, poetryn omalla poetry self updatella kuin pacmanillakaan. Kun poistin sudona version 1.3.1 tuolta polusta, sain asennettua globaalisti tuoreimman 1.8.3 version, joka on yhteensopiva Python 3.12 kanssa.
  4. Muutin lokaalisti setup.pyssä POETRY_MIN_VERSION muuttujan '1.5.1' -> '1.8.3'. Muistelen, että ilman tuota pakettien asennus ei olisi mennyt läpi (koska Python 3.12), mutta pitää varmistaa vielä.
    • tämä varmistettu nyt seuraavasti:
      • muutettu POETRY_MIN_VERSION takaisin 1.8.3 --> 1.5.1
      • poistettu .venv polusta /opt/tim
      • haettu reposta alkuperäinen 1.5.1 versiolla generoitu poetry.lock
      • ajettu ./tim setup --force
    • pakettien asennus kaatuu virheeseen paketin multidict (6.0.4) osalta
  5. Ajoin ./tim setup --force, nyt paketit asentuivat ongelmitta.
  6. Setup kaatuu seuraavaksi pullatessaan konttien imageja komennolla docker compose -f docker-compose.yml pull. Virheilmoituksena lukee Error response from daemon: manifest unknown, joka ymmärtääkseni johtuu siitä, että konttirekisteristä ei löydy pyydetyllä tagilla sopivaa imagea.

Mun täytyy yrittää vielä itsekin toistaa tämä puhtaalta pöydältä, tuossa on ainakin poetryn osalta vähän sellaista 'kokeillaan toimisko tämä'-tyyppistä.