Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

213
Vistas
¿Cómo escribir el actualizador asar de electrones?

Quiero escribir un actualizador de electrones que solo descargue el 'app.asar' más nuevo y lo reemplace con el anterior. No quiero usar soluciones como 'electron-updater' porque en su mayoría son exclusivas de Windows y Mac. Así que quiero escribir un "actualizador asar" que funcione en todas las plataformas, incluido Linux. Debería funcionar más o menos como el actualizador de discord, que compara la versión local instalada con la última versión cargada en un servidor web.

En Linux, la mayoría de los formatos de paquetes montan los archivos en directorios en los que mi actualizador necesitaría privilegios de root. Por ejemplo, AppImage monta todos los archivos en un directorio aleatorio dentro de la carpeta '/tmp', o flatpak lo monta en un directorio extraño '/app/lib/' que aún no pude encontrar en mi sistema...

Entonces, mi pregunta sería, ¿cómo puedo reemplazar un archivo asar antiguo por uno actualizado sin tener problemas con los privilegios de root?

Esta es la parte de la lógica del actualizador dentro de 'main.js':

 app.whenReady().then(() => { // Updater should only be run in "production" if (isDev) return; // Get path of asar file & resource dir stored on the system const asarPath = app.getAppPath(); // => /tmp/.APPNAMExlsjda345/resources/app.asar/src/electron/ const resourcesPath = path.join(asarPath, ".."); // => /tmp/.APPNAMExlsjda345/resources/ // TODO: compare current version with newest on webserver // TODO: download new version & call it something like "update.asar" // TODO: remove app.asar & rename update.asar to app.asar // TODO: restart the whole app // This is only for testing if I can modify the content of the resources directory fs.copyFile(asarPath, path.join(resourcesPath, "update.asar"), (err) => { if (err) return console.log({ err }); // throws error, see below! console.log("copied: ", fs.readdirSync(resourcesPath)); // if it would be successfull print all the content of resources dir }); } });

Este es el error que arroja la función copyFile:

 { err: Error: ENOENT, not found in /tmp/.mount_Babbel2t0KoE/resources/app.asar at createError (node:electron/js2c/asar_bundle:5:1255) at Object.t.<computed> [as copyFile] (node:electron/js2c/asar_bundle:5:2526) at /tmp/.mount_Babbel2t0KoE/resources/app.asar/src/electron/main.js:44:6 { code: 'ENOENT', errno: -2 } }

EDITAR: También probé "original-fs", que debería funcionar con archivos asar:

 { err: [Error: EROFS: read-only file system, copyfile '/tmp/.mount_BabbelMjuGx3/resources/app.asar' -> '/tmp/.mount_BabbelMjuGx3/resources/update.asar'] { errno: -30, code: 'EROFS', syscall: 'copyfile', path: '/tmp/.mount_BabbelMjuGx3/resources/app.asar', dest: '/tmp/.mount_BabbelMjuGx3/resources/update.asar' } }
about 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda