Funktionen
ccam aktualisieren
Diese Seite wurde maschinell aus dem Englischen übersetzt. Korrekturen sind willkommen. Diese Seite auf GitHub bearbeiten
ccam update lädt ein ccam-Release von GitHub herunter, prüft es gegen die checksums.txt des Releases und ersetzt die laufende Binärdatei mit einem einzigen Umbenennen. Verwende es, wenn du ccam mit dem Installationsskript oder aus einem Archiv installiert hast. ccam sucht nie von selbst nach Updates: Nur dieser Befehl kontaktiert GitHub, daher funktioniert jeder andere Befehl offline genauso.
Verwendung
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)Gibt es kein neueres Release, gibt ccam ccam 0.4.0 is up to date. aus und ändert nichts. Mit --version und der Version, die du bereits verwendest, gibt es ccam 0.4.0 is already installed. aus.
Optionen
| Option | Wirkung | Standard |
|---|---|---|
--check |
Nur melden, ob ein neueres Release existiert | aus |
--version <tag> |
Dieses Release-Tag installieren, etwa v0.3.0, neuer oder älter als das aktuelle |
neuestes |
--dry-run |
Wird beachtet: ermittelt das neueste Tag (sofern --version keines nennt), führt dieselben Prüfungen an der Binärdatei aus und gibt Download-, Prüfsummen- und Ersetzungspfad aus, ohne herunterzuladen |
aus |
--check und --version lassen sich nicht zusammen verwenden. Das Tag muss die Form vMAJOR.MINOR.PATCH haben, mit optionaler Vorabversions- oder Build-Endung; das führende v darf fehlen. Alles andere schlägt fehl, zum Beispiel --version takes a release tag such as v0.3.0, not "1.2".
Die Umgebungsvariable CCAM_RELEASES_URL ersetzt https://github.com/jhyunwoo/ccam/releases, für einen Mirror oder für Tests. Sie muss gleich aufgebaut sein: <url>/latest leitet auf <url>/tag/<tag> weiter, und die Dateien liegen unter <url>/download/<tag>/<asset>.
So funktioniert es
Der Code liegt in internal/update, das nur ccam update importiert. Der Startpfad ruft ihn nie auf.
cli.updateCmdfindet die laufende Binärdatei mitos.Executableund löst symbolische Links mitfilepath.EvalSymlinksauf. Dieser echte Pfad wird ersetzt.- Ohne
--versionruftUpdater.Latestdie Adresse<releases>/latestab, ohne der Weiterleitung zu folgen, und liest das Tag aus dem HeaderLocation(…/tag/v0.5.0). Dabei wird die Release-Seite statt der GitHub-API verwendet, daher gilt das Limit der API von 60 Anfragen pro Stunde nicht. Die Abfrage hat 10 Sekunden Zeit. parseVersionprüft das Tag gegen ein strenges Muster. Ein Tag landet in Download-URLs und in einem ausgegebenen Shell-Befehl, daher kommt nichts mit/,%, Leerzeichen oder Shell-Zeichen durch.compareVersionsvergleicht es mit der laufenden Version; eine Vorabversion wird vor ihrem Release einsortiert.managed()undwritable()entscheiden, ob ccam die Binärdatei überhaupt ersetzen darf (siehe unten).Updater.Fetchlädtccam_<os>_<arch>.tar.gzundchecksums.txtgleichzeitig herunter, mit 2 Minuten für beide. Jeder Download ist auf 256 MB begrenzt.- Die SHA-256-Prüfsumme des Archivs muss mit seiner Zeile in
checksums.txtübereinstimmen, bevor irgendetwas anderes geschieht. Eine fehlende Zeile oder eine abweichende Prüfsumme bricht das Update mitnothing was changedab. extract()liest das tar-Archiv und nimmt die erste reguläre Datei namensccam. Ordner, Links und andere Einträge werden ignoriert, und auch die Binärdatei ist auf 256 MB begrenzt.Updater.Installschreibt die neue Binärdatei mitfsutil.AtomicWrite: eine temporäre Datei.ccam.tmp*neben der Binärdatei, mit den Berechtigungsbits der alten Datei, auf die Festplatte geschrieben und über die alte umbenannt.
Die gesamte Abfolge, von der Tag-Abfrage bis zum Umbenennen:
Das Archiv und checksums.txt werden nebeneinander heruntergeladen, und nichts wird geschrieben, bis die Prüfsumme stimmt. Das Umbenennen ist atomar, daher hinterlässt ein Absturz oder eine volle Festplatte entweder die alte oder die neue Binärdatei, nie eine halbe. Kurzbefehle wie ~/.local/bin/ccwork sind symbolische Links auf die ccam-Binärdatei, daher führen sie ohne jede Änderung die neue Version aus.
Über Paketverwaltung installiert
Ein aus dem .deb installiertes ccam gehört apt, und es an apt vorbei zu ersetzen, würde die Paketdatenbank verfälschen. Vor dem Download prüft ccam, wem die Binärdatei gehört:
- Eine Binärdatei in
/usr/bin,/bin,/usr/sbinoder/sbingilt als paketverwaltet. - Anderswo gilt sie ebenfalls als paketverwaltet, wenn
dpkginstalliert ist unddpkg -S <path>erfolgreich ist. - Andernfalls legt ccam eine temporäre Datei
.ccam-update-*neben der Binärdatei an und entfernt sie wieder, um sicherzugehen, dass es dort schreiben kann.
Bei einer paketverwalteten Binärdatei hält ccam an und gibt die Schritte für apt aus:
$ 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 | shAuf anderen Systemen als Linux wird nur die Zeile mit dem Installationsskript ausgegeben. Ist der Ordner nicht beschreibbar, schlägt ccam vor, das Installationsskript erneut auszuführen, das ccam in ~/.local/bin installiert.
Sicherheit und Sonderfälle
- Ein Entwicklungs-Build meldet seine Version als
devund hat kein Release, mit dem er sich vergleichen ließe, daher lehnenccam updateundccam update --checkihn ab.ccam update --version vX.Y.Zinstalliert ein Release darüber. - Ein fehlgeschlagener Download, eine fehlende Datei für deine Plattform oder eine abweichende Prüfsumme lassen die installierte Binärdatei unverändert.
- Ein Release, das es nicht gibt, schlägt mit
there is no release <tag>fehl. Lehnt GitHub mit HTTP 403 oder 429 ab, sagt ccam, dass es sich wahrscheinlich um ein Rate-Limit handelt, und bittet dich, es später erneut zu versuchen. --checkliest nur. Es prüft nicht, ob die Binärdatei paketverwaltet oder beschreibbar ist.--versionmit einem älteren Tag ist der Weg zurück zu einer früheren Version.