Funciones
Actualizar ccam
Esta página se tradujo automáticamente del inglés. Las correcciones son bienvenidas. Editar esta página en GitHub
ccam update descarga una versión de ccam desde GitHub, la comprueba con el checksums.txt de la versión y reemplaza el binario en ejecución con un solo cambio de nombre. Úsalo si instalaste ccam con el script de instalación o desde un archivo comprimido. ccam nunca busca actualizaciones por su cuenta: solo este comando se conecta a GitHub, así que todos los demás comandos funcionan igual sin conexión.
Uso
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)Cuando no hay una versión más reciente, ccam imprime ccam 0.4.0 is up to date. y no cambia nada. Con --version y la versión que ya ejecutas, imprime ccam 0.4.0 is already installed.
Opciones
| Opción | Qué hace | Valor predeterminado |
|---|---|---|
--check |
Solo informa si hay una versión más reciente | desactivada |
--version <tag> |
Instala esta etiqueta de versión, como v0.3.0, más reciente o más antigua que la actual |
la más reciente |
--dry-run |
Se respeta: busca la etiqueta más reciente (salvo que --version indique una), ejecuta las mismas comprobaciones sobre el binario e imprime las rutas de descarga, suma de verificación y reemplazo sin descargar |
desactivada |
--check y --version no se pueden usar a la vez. La etiqueta debe tener la forma vMAJOR.MINOR.PATCH, con un sufijo opcional de versión preliminar o de compilación; la v inicial se puede omitir. Cualquier otra cosa falla, por ejemplo --version takes a release tag such as v0.3.0, not "1.2".
La variable de entorno CCAM_RELEASES_URL reemplaza https://github.com/jhyunwoo/ccam/releases, para un servidor espejo o para pruebas. Debe tener la misma estructura: <url>/latest redirige a <url>/tag/<tag>, y los archivos están en <url>/download/<tag>/<asset>.
Cómo funciona
El código está en internal/update, que solo importa ccam update. La ruta de inicio nunca lo llama.
cli.updateCmdencuentra el binario en ejecución conos.Executabley resuelve los enlaces simbólicos confilepath.EvalSymlinks. Esa ruta real es la que se reemplaza.- Sin
--version,Updater.Latestsolicita<releases>/latestsin seguir la redirección y lee la etiqueta del encabezadoLocation(…/tag/v0.5.0). Esto usa la página de versiones en lugar de la API de GitHub, así que no se aplica el límite de 60 solicitudes por hora de la API. La consulta tiene 10 segundos. parseVersioncomprueba la etiqueta con un patrón estricto. Una etiqueta acaba en las URL de descarga y en un comando de shell impreso, así que no pasa nada que tenga/,%, espacios o caracteres de shell.compareVersionsla compara con la versión en ejecución; una versión preliminar se ordena antes que su versión final.managed()ywritable()deciden si ccam puede reemplazar el binario (consulta más abajo).Updater.Fetchdescargaccam_<os>_<arch>.tar.gzychecksums.txta la vez, con 2 minutos para ambos. Cada descarga tiene un límite de 256 MB.- El SHA-256 del archivo comprimido debe coincidir con su línea en
checksums.txtantes de que ocurra cualquier otra cosa. Una línea que falta o una suma de verificación distinta detiene la actualización connothing was changed. extract()lee el tar y toma el primer archivo normal llamadoccam. Las carpetas, los enlaces y las demás entradas se ignoran, y el binario también tiene un límite de 256 MB.Updater.Installescribe el binario nuevo confsutil.AtomicWrite: un archivo temporal.ccam.tmp*junto al binario, con los bits de permiso del archivo anterior, volcado al disco y renombrado sobre el anterior.
El proceso completo, desde la búsqueda de la etiqueta hasta el cambio de nombre:
El archivo comprimido y checksums.txt se descargan en paralelo, y no se escribe nada hasta que la suma de verificación coincide. El cambio de nombre es atómico, así que un fallo o un disco lleno deja el binario anterior o el nuevo, nunca la mitad de uno. Los atajos como ~/.local/bin/ccwork son enlaces simbólicos al binario de ccam, así que ejecutan la versión nueva sin ningún cambio.
Instalaciones administradas por paquetes
Un ccam instalado desde el .deb pertenece a apt, y reemplazarlo a espaldas de apt dejaría incorrecta la base de datos de paquetes. Antes de descargar, ccam comprueba a quién pertenece el binario:
- Un binario en
/usr/bin,/bin,/usr/sbino/sbinse considera administrado por paquetes. - En otro lugar, si
dpkgestá instalado ydpkg -S <path>tiene éxito, también se considera administrado por paquetes. - En caso contrario, ccam crea y elimina un archivo temporal
.ccam-update-*junto al binario para asegurarse de que puede escribir ahí.
Con un binario administrado por paquetes, ccam se detiene e imprime los pasos de 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 | shEn sistemas que no son Linux, solo se imprime la línea del script de instalación. Cuando no se puede escribir en la carpeta, ccam sugiere volver a ejecutar el script de instalación, que instala ccam en ~/.local/bin.
Seguridad y casos límite
- Una compilación de desarrollo informa su versión como
devy no tiene una versión publicada con la cual compararse, así queccam updateyccam update --checkla rechazan.ccam update --version vX.Y.Zinstala una versión publicada encima. - Una descarga fallida, un archivo que falta para tu plataforma o una suma de verificación que no coincide dejan el binario instalado como estaba.
- Una versión que no existe falla con
there is no release <tag>. Cuando GitHub rechaza la solicitud con HTTP 403 o 429, ccam indica que probablemente sea un límite de solicitudes y te pide que lo intentes de nuevo más tarde. --checksolo lee. No comprueba si el binario está administrado por paquetes ni si se puede escribir en él.--versioncon una etiqueta más antigua es la forma de volver a una versión anterior.