- Shipped
- 23 settembre 2026 alle ore 19:17 UTC
- Author
- Kamo
- Commit
- 4673e45
Con l'atterraggio di riavvio, il primo computer è venuto con il curriculumConfigurato vero e fermato sul precondizione successiva — che risulta insoddisfacente per costruzione: swapBytes 2095468544 l'area USABLE, da /proc/swaps swapNeedededBytes 2095474483 int(MemTotal * 1.05) ─ ─ ─ a breve da 5,939 di un file 2 GB disponibilità() misura l'area mkswap lasciato utilizzabile. ensure swap ha assegnato il file esattamente al numero che l'area è confrontata contro, e mkswap prende una pagina intestazione e gira il resto verso il basso intere pagine — quindi l'area utilizzabile è sempre a pochi KB di distanza dal proprio obiettivo. Poi ensure swap i primi giri su `have == want bytes`, quindi non cresce mai, e swapLargeEnough rimane falso per sempre. Il file è ora assegnato con un margine, e il margine è di 16 MiB piuttosto che l'unica pagina mkswap necessità, perché MemTotal non è una costante: il kernel esclude quale firmware e la riserva initrd, e questo spostato di 5.6 KB tra due stivali di questa stessa VM. Un margine misurato nelle pagine lascerebbe un computer un kernel aggiorna lontano da non dormire mai più. Il ritorno anticipato è ora `have >= target`, non `=`. L'uguaglianza significava un wobble MemTotal in entrambi direzione rewrote un file 2 GB su un volume Longhorn su una macchina che era già bene. Anche qui, perché entrambi sono stati trovati dalla stessa indagine: Il riavvio è ora inseguito dal guardiano inattivo piuttosto che da chi capita di chiamare /prepare-sleep. Entrambi i momenti che sembrano quelli giusti sono sbagliati. Il filetto di avvio dell'agente viene eseguito prima computeservice ha spinto qualcosa, quindi non c'è ancora nulla da proteggere. E /prepare-sleep non è chiamato da computeservice a tutti — il metodo client esiste e non ha caller; il vero chiamante è un runcmd in cloud-init.userdata.yaml, che spara nel MIDDLE di provisioning. Quindi la domanda è: semplicemente riascoltato ogni trenta secondi dal guardiano che era già inquinante, recintato sul provvedimento push essendo atterrato e non c'è alcuna sessione desktop. Quel secondo cancello è più forte che sembra: una sessione xrdp supera una disconnessione, quindi un elenco vuoto significa che nessuno ha ancora effettuato l'accesso o tutti si sono registrati, non solo che nessuno è alla tastiera. Rifiuti log una volta per una ragione distinto. Mai silenziosa, e non duemila linee identiche al giorno. Un `systemctl hibernate` rifiutato ora raggiunge la rivista. Sul successo il comando non ritorna mai, quindi il solo cosa può mai stampare è il motivo per cui ha detto no — e che è andato a DEVNULL, lasciando computeservice a notate dieci minuti dopo che un computer "non è andato a dormire quando chiesto" senza motivo da nessuna parte. run forever è diviso in loop e tick(), quindi le decisioni possono essere testate. 43 test.
