@dotrino/vaultd 0.148.1 → 0.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -6
- package/bin/dotrino-vaultd.js +2 -2
- package/package.json +1 -1
- package/src/ctl.js +5 -4
- package/src/daemon.js +1 -1
- package/src/update.js +18 -5
package/README.md
CHANGED
|
@@ -148,6 +148,19 @@ sesión**. Para levantarla ya, `systemctl --user start dotrino-vault`; si estaba
|
|
|
148
148
|
**actualizando**, el servicio viejo sigue corriendo y hay que reiniciarlo con
|
|
149
149
|
`systemctl --user restart dotrino-vault`.
|
|
150
150
|
|
|
151
|
+
**Fedora / RHEL / openSUSE — `.rpm`:** el mismo instalador, para las distribuciones que
|
|
152
|
+
usan `rpm`. Deja exactamente lo mismo que el `.deb` (binarios en `/usr/bin` y la unidad
|
|
153
|
+
`systemd --user` para todos los usuarios):
|
|
154
|
+
|
|
155
|
+
```sh
|
|
156
|
+
sudo dnf install ./dotrino-vault-*.x86_64.rpm # Fedora, RHEL y derivadas
|
|
157
|
+
sudo zypper install --allow-unsigned-rpm ./dotrino-vault-*.x86_64.rpm # openSUSE
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
El `.rpm` no lleva firma GPG (por eso `zypper` pide `--allow-unsigned-rpm`); lo que
|
|
161
|
+
prueba de dónde salió es la atestación de sigstore del release:
|
|
162
|
+
`gh attestation verify dotrino-vault-*.x86_64.rpm --repo imdotrino/dotrino-vault`.
|
|
163
|
+
|
|
151
164
|
**Otro Linux x64 con systemd — tarball:**
|
|
152
165
|
|
|
153
166
|
```sh
|
|
@@ -160,13 +173,13 @@ Hace lo equivalente en tu `$HOME` (`~/.local/bin` + `~/.config/systemd/user`) y
|
|
|
160
173
|
paso más allá: lo **arranca en el acto** y activa `linger`, así el vault corre desde
|
|
161
174
|
el arranque de la máquina aunque no inicies sesión.
|
|
162
175
|
|
|
163
|
-
El binario del tarball y el `.
|
|
176
|
+
El binario del tarball, el `.deb` y el `.rpm` son **x64/amd64** y el instalador **necesita
|
|
164
177
|
systemd** (si no lo encuentra, se detiene y te dice cómo arrancar el daemon a mano).
|
|
165
178
|
Para ARM —una Raspberry— o para un Linux sin systemd, usa Docker o `npx`.
|
|
166
179
|
|
|
167
180
|
Ambos traen **Node embebido**: no necesitas instalar Node ni dependencias de npm. Lo
|
|
168
181
|
único que esperan del sistema es `libatomic1`, que casi todas las distribuciones
|
|
169
|
-
traen puesta; el `.deb` la
|
|
182
|
+
traen puesta; el `.deb` y el `.rpm` la declaran y se instala sola si falta. Con el tarball, en un
|
|
170
183
|
sistema muy pelado (un contenedor mínimo), instálala tú: `sudo apt install
|
|
171
184
|
libatomic1`.
|
|
172
185
|
|
|
@@ -190,8 +203,8 @@ curl -fsSL https://install.dotrino.com/install.sh | sh -s -- @dotrino/vaultd
|
|
|
190
203
|
& ([scriptblock]::Create((irm https://install.dotrino.com/install.ps1))) @dotrino/vaultd
|
|
191
204
|
```
|
|
192
205
|
|
|
193
|
-
**Docker (cualquier sistema, y la única vía *empaquetada* para ARM — el `.deb` y
|
|
194
|
-
tarball son solo x64; `npx` también sirve en una Raspberry):**
|
|
206
|
+
**Docker (cualquier sistema, y la única vía *empaquetada* para ARM — el `.deb`, el `.rpm` y
|
|
207
|
+
el tarball son solo x64; `npx` también sirve en una Raspberry):**
|
|
195
208
|
|
|
196
209
|
```sh
|
|
197
210
|
docker volume create dotrino-vault
|
|
@@ -615,6 +628,7 @@ npm test # 118 pruebas (node --test, sin dependencia
|
|
|
615
628
|
|
|
616
629
|
bash packaging/build.sh # binario único SEA + tarball de Linux (dist/)
|
|
617
630
|
bash packaging/build-deb.sh # el .deb (requiere dpkg-deb; construye el binario si falta)
|
|
631
|
+
bash packaging/build-rpm.sh # el .rpm (requiere rpmbuild: `apt install rpm`; mismo binario)
|
|
618
632
|
bash packaging/build-win.sh # .exe + .zip de Windows, cruzado desde Linux (sin probar)
|
|
619
633
|
docker build -t dotrino-vault . # la imagen (la misma que CI publica en GHCR)
|
|
620
634
|
```
|
|
@@ -628,8 +642,8 @@ hermano en `../dotrino-proxy` (`secrets.e2e`, `multiprofile.e2e`,
|
|
|
628
642
|
`pairing-cita.e2e`): no se saltan solos, así que sin ese repo al lado `npm test`
|
|
629
643
|
falla.
|
|
630
644
|
|
|
631
|
-
Etiquetar `vaultd-v<ver>` publica la imagen de Docker en GHCR
|
|
632
|
-
|
|
645
|
+
Etiquetar `vaultd-v<ver>` publica la imagen de Docker en GHCR. Etiquetar `v<ver>` lanza
|
|
646
|
+
`release.yml`, que construye, atestigua y sube a la release el `.deb`, el `.rpm` y el tarball.
|
|
633
647
|
|
|
634
648
|
### Enrolar y usar desde un dispositivo (Node, para testing)
|
|
635
649
|
|
package/bin/dotrino-vaultd.js
CHANGED
|
@@ -76,10 +76,10 @@ if (process.argv.includes('--pair')) {
|
|
|
76
76
|
// que pedírsela) en vez de la dirección de la conexión.
|
|
77
77
|
const { qr, expiresInMs } = await mgr.current().startPairing({ label: 'cli' })
|
|
78
78
|
const { url, b64 } = pairUrl(qr)
|
|
79
|
-
console.log(`\
|
|
79
|
+
console.log(`\nEmpareja un dispositivo (válido ${expiresInMs / 60000} min):\n`)
|
|
80
80
|
console.log(qrToString(url))
|
|
81
81
|
console.log(url)
|
|
82
|
-
console.log('\nO
|
|
82
|
+
console.log('\nO pega este código:\n ' + b64)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
// --tui: la bóveda Y su interfaz en la MISMA ventana. Donde no queda como servicio
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotrino/vaultd",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.149.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Certificador personal de Dotrino: daemon headless que custodia la clave maestra y delega capacidades a tus dispositivos por el proxy. Tu CA propia.",
|
|
6
6
|
"bin": {
|
package/src/ctl.js
CHANGED
|
@@ -1792,7 +1792,7 @@ async function cmdLogins (rest) {
|
|
|
1792
1792
|
* solo: pide permiso a un aparato con `aprueba` (el teléfono, un navegador…) si lo hay y,
|
|
1793
1793
|
* si no hay ninguno, no hace falta
|
|
1794
1794
|
* (dueño, 2026-09-24). Esto es lo mismo a mano, sin esperar al aviso del día. Con el
|
|
1795
|
-
* `.deb`
|
|
1795
|
+
* paquete del sistema (`.deb` o `.rpm`) el binario es de root y aquí solo se verifica y se dice el `sudo`.
|
|
1796
1796
|
*
|
|
1797
1797
|
* Lo que se baja SE VERIFICA contra la atestación de sigstore antes de tocar el disco, y
|
|
1798
1798
|
* si no se puede verificar NO SE INSTALA. Que la URL sea la correcta no prueba nada.
|
|
@@ -1904,14 +1904,15 @@ async function cmdUpdate (args = []) {
|
|
|
1904
1904
|
}
|
|
1905
1905
|
console.log('firmada por el release de %s ✓', 'imdotrino/dotrino-vault')
|
|
1906
1906
|
|
|
1907
|
-
if (pick.kind === 'deb') {
|
|
1907
|
+
if (pick.kind === 'deb' || pick.kind === 'rpm') {
|
|
1908
|
+
const cmd = pick.kind === 'deb' ? ['dpkg', '-i'] : ['rpm', '-U']
|
|
1908
1909
|
if (typeof process.getuid === 'function' && process.getuid() === 0) {
|
|
1909
|
-
execFileSync(
|
|
1910
|
+
execFileSync(cmd[0], [cmd[1], file], { stdio: 'inherit' })
|
|
1910
1911
|
} else {
|
|
1911
1912
|
// No se pide sudo por dentro: que la contraseña la escriba quien la escribe, en su
|
|
1912
1913
|
// terminal y viendo qué comando la pide.
|
|
1913
1914
|
console.log('\nYa verificada. Instálala con:')
|
|
1914
|
-
console.log(' %ssudo
|
|
1915
|
+
console.log(' %ssudo %s %s%s', B, cmd.join(' '), file, Z)
|
|
1915
1916
|
console.log('\nEl servicio se reinicia solo al cambiar el binario.')
|
|
1916
1917
|
return
|
|
1917
1918
|
}
|
package/src/daemon.js
CHANGED
|
@@ -1157,7 +1157,7 @@ export async function runDaemon () {
|
|
|
1157
1157
|
}
|
|
1158
1158
|
const conAvisos = quienAprueba.filter((a) => a.notifiedAt).length
|
|
1159
1159
|
|
|
1160
|
-
// INSTALADA COMO PAQUETE DEL SISTEMA (.deb en /usr/bin): el binario es de root y este
|
|
1160
|
+
// INSTALADA COMO PAQUETE DEL SISTEMA (.deb o .rpm en /usr/bin): el binario es de root y este
|
|
1161
1161
|
// proceso no puede tocarlo. Se dice, con las dos salidas, y no se intenta nada.
|
|
1162
1162
|
if (!isUserInstall()) {
|
|
1163
1163
|
console.log(`[vault] version ${r.version} is out (this one is ${daemonVersion}) · installed as a system package, so it cannot update itself: \`dotrino-vault update\` (needs sudo), or move to a user install with the tarball's install.sh`)
|
package/src/update.js
CHANGED
|
@@ -25,15 +25,28 @@ export const latestRelease = (opts = {}) =>
|
|
|
25
25
|
latestVersion({ source: 'github', repo: REPO, product: 'dotrino-vault', version: VERSION, ...opts })
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* Con qué instala paquetes esta máquina: `'deb'`, `'rpm'` o `null` (ninguno de los dos).
|
|
29
|
+
* `dpkg` va primero: en Debian y Ubuntu es normal tener además la herramienta `rpm`
|
|
30
|
+
* instalada (para empaquetar), y ahí lo que instala sigue siendo `dpkg`.
|
|
30
31
|
*/
|
|
31
|
-
export function
|
|
32
|
+
export function systemPackager (exists = fs.existsSync) {
|
|
33
|
+
if (exists('/usr/bin/dpkg')) return 'deb'
|
|
34
|
+
if (exists('/usr/bin/rpm')) return 'rpm'
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Qué archivo le toca a esta máquina. El `.deb` donde se instala con `dpkg`, el `.rpm`
|
|
40
|
+
* donde se instala con `rpm` (Fedora, RHEL, openSUSE); en cualquier otro Linux, el tarball.
|
|
41
|
+
* Fuera de Linux no se emite binario, y se dice en vez de bajar algo inútil.
|
|
42
|
+
*/
|
|
43
|
+
export function assetFor (assets, { platform = process.platform, arch = process.arch, packager = undefined } = {}) {
|
|
32
44
|
if (platform !== 'linux') return { ok: false, reason: `there is no binary for ${platform}: update with npm (npx @dotrino/vaultd)` }
|
|
33
45
|
if (arch !== 'x64') return { ok: false, reason: `there is no binary for ${arch}` }
|
|
34
|
-
const
|
|
46
|
+
const pk = packager === undefined ? systemPackager() : packager
|
|
35
47
|
return pickAsset(assets, [
|
|
36
|
-
{ kind: 'deb', re: /_amd64\.deb$/, when: () => deb },
|
|
48
|
+
{ kind: 'deb', re: /_amd64\.deb$/, when: () => pk === 'deb' },
|
|
49
|
+
{ kind: 'rpm', re: /\.x86_64\.rpm$/, when: () => pk === 'rpm' },
|
|
37
50
|
{ kind: 'tar', re: /-linux-x64\.tar\.gz$/ }
|
|
38
51
|
])
|
|
39
52
|
}
|