Preskoči na vsebino

Notranje delovanje priprave baz in obnovitve skrbniškega dostopa

Stran opisuje skupno izvedbo ustvarjanja baze in obnovitve skrbniškega dostopa. README komponent določata navodila upravljavcu; ta stran določa razvojni zemljevid, meje življenjskega cikla in vzdrževanje. Komentarji in docstringi opisujejo posamezne pogodbe pomočnikov.

Lastništvo in vstopne točke

Datoteka Odgovornost
scripts/create/create_database.py CLI ustvarjanja, inicializacija ter skupni pomočniki izvajalnega okolja in gesel.
scripts/admin/reset_admin_password.py CLI obnovitve in transakcija posodobitve uporabnika ID 2.
config/create_database.conf Neposredno vzdrževane neskrite privzete vrednosti INI za seznam modulov.
scripts/completion/pmiverse-completion.bash Dopolnjevanje možnosti in vhodnih poti obeh ukazov.
tests/test_create_database.py Ustvarjanje in skupne pogodbe gesel/okolja.
tests/test_reset_admin_password.py Izbor računa, vrstni red poverilnic in poročanje napak.
tests/test_script_cli.py Izolirana pomoč, registracije dopolnjevanja in predlogi vrednosti.

Obnovitev uvozi modul ustvarjanja kot knjižnico. load_helpers() pri neposrednem zagonu iz druge mape doda koren repozitorija v sys.path. Noben modul ob uvozu ne uvozi Odoo, ne izvaja operacij ali zahteva namestitve paketa. To mejo ohranite, da pomoč deluje tudi brez izvajalnega okolja.

Konfiguracija in prednost argumentov

Ustvarjanje zahteva samo ime baze. Privzeti prijava in prikazno ime skrbnika sta admin in Administrator; brez vhodne datoteke se geslo ustvari in shrani. Možnosti identitete te vrednosti nadomestijo, ne spremenijo pa izbranega vgrajenega računa.

Vhod Vir in delovanje
Okolje Odoo --config izbere konfiguracijo instance, --odoo-root izvor; privzeto _pmisuite18.
Moduli ustvarjanja Izrecni --modules nadomesti config/create_database.conf; sicer se bere [create_database] modules.
Obvezni moduli Na začetek doda base in web, preveri tehnična imena in odstrani podvojitve z ohranitvijo vrstnega reda. Tudi prazen seznam namesti oba.
Vhod gesla --admin-password-file prebere zasebno datoteko; sicer ustvari in shrani geslo brez poziva.
Ustvarjene datoteke /srv/pmiverse/_pmiprivate je absolutna izvajalna lokacija, neodvisna od repozitorija in trenutne mape.
Aktivacija --activate izrecno dovoli active=True; sicer se arhivirani cilj zavrne.

ConfigParser bere privzete module brez interpolacije. Skupna lupinska konfiguracija se ne vključuje. --help izstopi pred branjem privzetih vrednosti. Suhi zagon ustvarjanja jih razreši, ne uvozi Odoo, ne preverja manifestov, se ne poveže s PostgreSQL in ne dostopa do poverilnic. Predogled obnovitve niti ne naloži skupnega pomočnika. Noben predogled ne dokazuje pripravljenosti okolja.

Oba razčlenjevalnika omejita imena baz, ker postanejo tudi deli imen datotek. Poizvedbe kataloga SQL še vedno uporabljajo parametre; preverjanje imen ni nadomestilo parametrizacije. Skupni pomočniki predpostavljajo preverjena imena baz in pripone datotek iz zaupanja vredne notranje kode.

Življenjski cikel ustvarjanja

  1. Razčleni argumente in razreši module; predogled se tu konča.
  2. load_odoo() uvozi izbrani Odoo 18 in nadomesti podedovane možnosti inicializacije, posodobitev, demo podatkov, jezika, testov, HTTP/cron in beleženja. Sprva zahteva samo inicializacijo osnove.
  3. preflight() preveri manifeste, zavrne obstoječe poti filestore, tudi viseče povezave, in poizve po katalogu PostgreSQL.
  4. Prebere podano ali shrani ustvarjeno geslo pred ustvarjanjem baze.
  5. Pokliče _create_empty_database() iz Odoo 18 s template0.
  6. configure_database() sestavi osnovni register, nastavi base.user_admin in izbirno podjetje/državo/valuto ter potrdi nastavitve.
  7. Namesti zahtevane module prek button_immediate_install(). Odvisnosti in samodejne namestitve ureja Odoo.
  8. Ponovno odpre morebiti zamenjani register. Zahteva nameščenost vseh izbranih modulov, ponovno nastavi prijavo/geslo z nameščenimi razširitvami, preveri aktiven račun z dostopom do nastavitev in potrdi.

Zasebna rutina ustvarjanja je namerna vezava na Odoo 18. Višjenivojska storitev napake inicializacije prestreže interno; primitiv omogoči lastno obravnavo in preverjanje naslednjih korakov. Pred podporo novi glavni različici preglejte ta klic in vedenje registra v njeni izvedbi, preden razširite različicno omejitev.

Ustvarjanje ni atomarno: ustvaritev PostgreSQL, register/moduli, filestore in objava poverilnic imajo ločene meje trajnosti. Začetna poizvedba kataloga ni ključavnica; avtoritativno zaščito pred sočasno kolizijo imena zagotovi PostgreSQL. Cilj ostane nedostopen storitvam do uspeha vseh faz.

Življenjski cikel obnovitve dostopa

  1. Razčleni cilj in možnosti; predogled se konča pred nalaganjem okolja.
  2. Naloži Odoo z initialize=False in odstrani podedovane zahteve inicializacije, nadgradenj in jezikov.
  3. Zahteva obstoječo bazo z inicializirano shemo Odoo ter sestavi register z update_module=False.
  4. Ustvari okolje ORM kot superuporabnik ID 1, vendar kot račun spremembe odpre samo uporabnika ID 2, tudi arhiviranega za izrecno preverjanje.
  5. Zahteva obstoj in base.group_system; arhiviranega zavrne brez --activate.
  6. Prebere ali shrani geslo, zapiše geslo in izbirno aktivacijo v isti transakciji ter potrdi. Uspeh sporoči šele po vrnitvi commit.

Ustvarjanje skrbnika določa prek base.user_admin; obnovitev sledi izrecni pogodbi ID 2. Noben ukaz ne uporablja glavnega gesla upravljavca baz. Obnovitev ne popravlja skupin, prijav, MFA/SSO, modulov ali manjkajočih uporabnikov. Nalaganje registra uvozi nameščene dodatke, zato poškodovan izvor lahko ustavi postopek pred spremembo računa.

Objava poverilnic in napake

read_password() odpre z O_NOFOLLOW | O_NONBLOCK, nato dejanski deskriptor preveri z fstat: navadna datoteka, lastništvo izvajalnega računa, brez pravic skupine/drugih. Neblokirajoče odpiranje prepreči obstanek na FIFO pred zavrnitvijo vrste. Omejeno branje vključuje prostor prek 4.096 znakov in CRLF, zato odstranjevanje nove vrstice ne more sprejeti odrezanega vhoda.

generate_password() uporabi 32 naključnih bajtov secrets.token_urlsafe. Zasebno mapo odpre brez sledenja povezavam, preveri lastništvo/dovoljenja in prek njenega deskriptorja izključno ustvari datoteko. Vsebino in vnos mape sinhronizira na disk pred vrnitvijo gesla. Klicatelj zato ve, da je geslo trajno shranjeno pred spremembo baze.

Ustvarjanje uporablja <database>_init_pass, obnovitev <database>_reset_pass_<UTC timestamp> z mikrosekundami. O_EXCL še vedno zavrne kolizije; časovni žig ne dovoljuje zamenjave. Ustvarjene datoteke ostanejo ob poznejših napakah. Ne dodajajte samodejnega brisanja ali ponovne uporabe brez upoštevanja negotovih potrditev in lastništva artefaktov.

ProvisioningError vsebuje samo namenoma pripravljeno besedilo za varen prikaz. Nepričakovana sporočila in sledovi se na meji CLI zadržijo, saj lahko posebna pravila gesel vsebujejo poslane vrednosti. Skrivnosti ne sodijo v dnevnike, izjeme, primere ali imena datotek. Beleženje zunanjih dodatkov ni v celoti pod nadzorom tega ukaza.

Izid CLI Trajnost
Pomoč ali predogled 0 Brez operacij baze/gesel; ustvarjanje lahko bere privzete module.
Napaka argumenta/privzete konfiguracije 2 Brez Odoo ali operativnih zapisov.
Uspeh 0 Preverjeni moduli/račun pri ustvarjanju; potrjen zapis uporabnika pri obnovitvi.
Operativna napaka ali prestrežena prekinitev 1 Brez trditve o uspehu; preglejte ohranjene baze, shrambe in poverilnice.

Običajna napaka ORM pred potrditvijo povrne transakcijo računa. Izguba povezave med commit lahko pusti negotov izid. Ustvarjanje ima predhodne potrditve ne glede na zadnji korak. Noben ukaz nima samodejnega povratka med PostgreSQL in datotekami.

Razvoj in preverjanje

Ob spremembi možnosti uskladite pomoč razčlenjevalnika, obe ustrezni funkciji dopolnjevanja, README komponente in omejena pričakovanja CLI. Dopolnjevanje bere samo imena možnosti in kandidatne poti; ne sme brati gesel, uvažati Odoo ali poizvedovati po bazah.

Testi zamenjajo Odoo z izrecnimi nadomestki ter preusmerijo poverilnice in privzete module na začasne poti. Ne zamenjajte jih z izvajalnimi potmi. load_odoo() spreminja globalno konfiguracijo procesa in je namenjen enemu cilju na proces; njegov test uporablja lažni modul in obnovi sys.path. Lažne transakcije dokazujejo vrstni red in zavrnitve, ne dejanskega povratka PostgreSQL, zgoščevanja ORM, združljivosti dodatkov, razveljavitve sej ali prijave UI.

Iz korena repozitorija z nastavljenim interpreterjem:

PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /srv/pmiverse/_pmisuite18/venv/bin/python \
  -m pytest tests/test_create_database.py tests/test_reset_admin_password.py \
  tests/test_script_cli.py -k 'create_database or reset_admin_password' \
  -q -p no:cacheprovider

Za Python uporabite nastavitve Ruff repozitorija, za skupno dopolnjevanje Bash ShellCheck in preglede IDE. Sprejemno preverjanje z dejanskim Odoo/PostgreSQL je ločena izrecno odobrena operacija na začasnem cilju.