Funzionalità
Aggiornare ccam
Questa pagina è stata tradotta automaticamente dall'inglese. Le correzioni sono benvenute. Modifica questa pagina su GitHub
ccam update scarica una release di ccam da GitHub, la verifica con il file checksums.txt della release e sostituisce il binario in esecuzione con un'unica rinomina. Usalo se hai installato ccam con lo script di installazione o da un archivio. ccam non controlla mai gli aggiornamenti di sua iniziativa: solo questo comando contatta GitHub, quindi ogni altro comando funziona allo stesso modo anche offline.
Utilizzo
ccam update # install the latest release
ccam update --check # only say whether a newer release exists
ccam update --version v0.3.0 # install that release, also an older one
ccam --dry-run update # show what would be downloaded and replaced$ ccam update --check
ccam 0.5.0 is available (you have 0.4.0). Run `ccam update`.
$ ccam --dry-run update
Would update ccam 0.4.0 → 0.5.0:
download https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
verify with https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/checksums.txt
replace /home/you/.local/bin/ccam
$ ccam update
→ downloading https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
✓ Updated ccam 0.4.0 → 0.5.0 (/home/you/.local/bin/ccam)Quando non esiste una release più recente, ccam stampa ccam 0.4.0 is up to date. e non modifica nulla. Con --version e la versione che stai già usando, stampa ccam 0.4.0 is already installed.
Opzioni
| Opzione | Cosa fa | Predefinito |
|---|---|---|
--check |
Segnala solo se esiste una release più recente | disattivata |
--version <tag> |
Installa questo tag di release, come v0.3.0, più recente o più vecchio di quello attuale |
l'ultima |
--dry-run |
Rispettata: cerca l'ultimo tag (a meno che --version non ne indichi uno), esegue gli stessi controlli sul binario e stampa i percorsi di download, checksum e sostituzione senza scaricare nulla |
disattivata |
--check e --version non si possono usare insieme. Il tag deve avere la forma vMAJOR.MINOR.PATCH, con un eventuale suffisso di pre-release o di build; la v iniziale si può omettere. Qualsiasi altro valore fallisce, per esempio --version takes a release tag such as v0.3.0, not "1.2".
La variabile d'ambiente CCAM_RELEASES_URL sostituisce https://github.com/jhyunwoo/ccam/releases, per un mirror o per i test. Deve avere la stessa struttura: <url>/latest reindirizza a <url>/tag/<tag>, e i file della release si trovano in <url>/download/<tag>/<asset>.
Come funziona
Il codice si trova in internal/update, importato solo da ccam update. Il percorso di avvio non lo chiama mai.
cli.updateCmdtrova il binario in esecuzione conos.Executablee risolve i link simbolici confilepath.EvalSymlinks. È quel percorso reale a essere sostituito.- Senza
--version,Updater.Latestrichiede<releases>/latestsenza seguire il reindirizzamento e legge il tag dall'intestazioneLocation(…/tag/v0.5.0). In questo modo usa la pagina delle release invece dell'API di GitHub, quindi il limite dell'API di 60 richieste all'ora non si applica. La ricerca ha 10 secondi. parseVersionverifica il tag con uno schema rigoroso. Un tag finisce negli URL di download e in un comando di shell stampato, quindi non passa nulla che contenga/,%, spazi o caratteri della shell.compareVersionslo confronta con la versione in esecuzione; una pre-release viene ordinata prima della sua release.managed()ewritable()decidono se ccam può sostituire il binario (vedi sotto).Updater.Fetchscarica contemporaneamenteccam_<os>_<arch>.tar.gzechecksums.txt, con 2 minuti per entrambi. Ogni download è limitato a 256 MB.- Lo SHA-256 dell'archivio deve corrispondere alla sua riga in
checksums.txtprima che succeda qualsiasi altra cosa. Una riga mancante o un checksum diverso interrompe l'aggiornamento connothing was changed. extract()legge il tar e prende il primo file normale chiamatoccam. Cartelle, link e altre voci vengono ignorati, e anche il binario è limitato a 256 MB.Updater.Installscrive il nuovo binario confsutil.AtomicWrite: un file temporaneo.ccam.tmp*accanto al binario, con i bit di permesso del vecchio file, scritto su disco e rinominato al posto di quello vecchio.
L'intera sequenza, dalla ricerca del tag alla rinomina:
L'archivio e checksums.txt vengono scaricati in parallelo, e non viene scritto nulla finché il checksum non corrisponde. La rinomina è atomica, quindi un crash o un disco pieno lasciano il vecchio binario o quello nuovo, mai metà di uno dei due. I comandi scorciatoia come ~/.local/bin/ccwork sono link simbolici al binario di ccam, quindi eseguono la nuova versione senza alcuna modifica.
Installazioni gestite da un pacchetto
Un ccam installato dal .deb appartiene ad apt, e sostituirlo all'insaputa di apt lascerebbe errato il database dei pacchetti. Prima di scaricare, ccam controlla a chi appartiene il binario:
- Un binario in
/usr/bin,/bin,/usr/sbino/sbinè considerato gestito da un pacchetto. - Altrove, se
dpkgè installato edpkg -S <path>riesce, anche in questo caso è considerato gestito da un pacchetto. - Altrimenti ccam crea e rimuove un file temporaneo
.ccam-update-*accanto al binario per assicurarsi di poter scrivere lì.
Per un binario gestito da un pacchetto ccam si ferma e stampa i passaggi per apt:
$ ccam update
ccam: /usr/bin/ccam was installed by a package, so `ccam update` leaves it alone.
To update the .deb, download ccam_0.5.0_linux_amd64.deb from https://github.com/jhyunwoo/ccam/releases/tag/v0.5.0 and run:
sudo apt install ./ccam_0.5.0_linux_amd64.deb
Or install a copy in ~/.local/bin with the install script:
curl -fsSL https://raw.githubusercontent.com/jhyunwoo/ccam/main/install.sh | shSui sistemi diversi da Linux viene stampata solo la riga dello script di installazione. Quando la cartella non è scrivibile, ccam suggerisce di eseguire di nuovo lo script di installazione, che installa ccam in ~/.local/bin.
Sicurezza e casi limite
- Una build di sviluppo indica come versione
deve non ha una release con cui confrontarsi, quindiccam updateeccam update --checkla rifiutano.ccam update --version vX.Y.Zinstalla una release al suo posto. - Un download fallito, un file mancante per la tua piattaforma o un checksum che non corrisponde lasciano il binario installato com'era.
- Una release che non esiste fallisce con
there is no release <tag>. Quando GitHub rifiuta con HTTP 403 o 429, ccam indica che probabilmente si tratta di un limite di richieste e ti chiede di riprovare più tardi. --checksi limita a leggere. Non controlla se il binario è gestito da un pacchetto o scrivibile.--versioncon un tag più vecchio è il modo per tornare a una versione precedente.