@dotrino/vaultd 0.148.1 → 0.150.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 +30 -10
- 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
|
@@ -141,13 +141,32 @@ clic, o en la terminal:
|
|
|
141
141
|
sudo apt install ./dotrino-vault_*.deb
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
144
|
+
Instala la unidad `systemd --user` en `/usr/lib/systemd/user`, habilitada para
|
|
145
|
+
**todos** los usuarios de la máquina (cada uno con su propia bóveda en su `$HOME`): te
|
|
146
|
+
arranca sola en tu **próximo inicio de sesión**.
|
|
147
|
+
|
|
148
|
+
**El paquete no deja la bóveda en `/usr/bin`: deja un lanzador** (desde la 0.150.0,
|
|
149
|
+
`packaging/pkg-launcher.sh`). El binario viene en `/usr/lib/dotrino-vault` y el lanzador lo
|
|
150
|
+
copia a `~/.local/share/dotrino/bin` de cada usuario la primera vez, y lo corre desde ahí.
|
|
151
|
+
Es la misma instalación de usuario del tarball, así que **se actualiza sola, sin `sudo`**
|
|
152
|
+
(CONVENCIONES §15). Un paquete más nuevo repone esa copia; uno más viejo que la copia no la
|
|
153
|
+
toca. Quitar el paquete no borra ni esa copia ni tus datos. Para levantarla ya, `systemctl --user start dotrino-vault`; si estabas
|
|
148
154
|
**actualizando**, el servicio viejo sigue corriendo y hay que reiniciarlo con
|
|
149
155
|
`systemctl --user restart dotrino-vault`.
|
|
150
156
|
|
|
157
|
+
**Fedora / RHEL / openSUSE — `.rpm`:** el mismo instalador, para las distribuciones que
|
|
158
|
+
usan `rpm`. Deja exactamente lo mismo que el `.deb` (el lanzador, la copia en tu carpeta
|
|
159
|
+
que se actualiza sola, y la unidad `systemd --user` para todos los usuarios):
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
sudo dnf install ./dotrino-vault-*.x86_64.rpm # Fedora, RHEL y derivadas
|
|
163
|
+
sudo zypper install --allow-unsigned-rpm ./dotrino-vault-*.x86_64.rpm # openSUSE
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
El `.rpm` no lleva firma GPG (por eso `zypper` pide `--allow-unsigned-rpm`); lo que
|
|
167
|
+
prueba de dónde salió es la atestación de sigstore del release:
|
|
168
|
+
`gh attestation verify dotrino-vault-*.x86_64.rpm --repo imdotrino/dotrino-vault`.
|
|
169
|
+
|
|
151
170
|
**Otro Linux x64 con systemd — tarball:**
|
|
152
171
|
|
|
153
172
|
```sh
|
|
@@ -160,13 +179,13 @@ Hace lo equivalente en tu `$HOME` (`~/.local/bin` + `~/.config/systemd/user`) y
|
|
|
160
179
|
paso más allá: lo **arranca en el acto** y activa `linger`, así el vault corre desde
|
|
161
180
|
el arranque de la máquina aunque no inicies sesión.
|
|
162
181
|
|
|
163
|
-
El binario del tarball y el `.
|
|
182
|
+
El binario del tarball, el `.deb` y el `.rpm` son **x64/amd64** y el instalador **necesita
|
|
164
183
|
systemd** (si no lo encuentra, se detiene y te dice cómo arrancar el daemon a mano).
|
|
165
184
|
Para ARM —una Raspberry— o para un Linux sin systemd, usa Docker o `npx`.
|
|
166
185
|
|
|
167
186
|
Ambos traen **Node embebido**: no necesitas instalar Node ni dependencias de npm. Lo
|
|
168
187
|
único que esperan del sistema es `libatomic1`, que casi todas las distribuciones
|
|
169
|
-
traen puesta; el `.deb` la
|
|
188
|
+
traen puesta; el `.deb` y el `.rpm` la declaran y se instala sola si falta. Con el tarball, en un
|
|
170
189
|
sistema muy pelado (un contenedor mínimo), instálala tú: `sudo apt install
|
|
171
190
|
libatomic1`.
|
|
172
191
|
|
|
@@ -190,8 +209,8 @@ curl -fsSL https://install.dotrino.com/install.sh | sh -s -- @dotrino/vaultd
|
|
|
190
209
|
& ([scriptblock]::Create((irm https://install.dotrino.com/install.ps1))) @dotrino/vaultd
|
|
191
210
|
```
|
|
192
211
|
|
|
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):**
|
|
212
|
+
**Docker (cualquier sistema, y la única vía *empaquetada* para ARM — el `.deb`, el `.rpm` y
|
|
213
|
+
el tarball son solo x64; `npx` también sirve en una Raspberry):**
|
|
195
214
|
|
|
196
215
|
```sh
|
|
197
216
|
docker volume create dotrino-vault
|
|
@@ -615,6 +634,7 @@ npm test # 118 pruebas (node --test, sin dependencia
|
|
|
615
634
|
|
|
616
635
|
bash packaging/build.sh # binario único SEA + tarball de Linux (dist/)
|
|
617
636
|
bash packaging/build-deb.sh # el .deb (requiere dpkg-deb; construye el binario si falta)
|
|
637
|
+
bash packaging/build-rpm.sh # el .rpm (requiere rpmbuild: `apt install rpm`; mismo binario)
|
|
618
638
|
bash packaging/build-win.sh # .exe + .zip de Windows, cruzado desde Linux (sin probar)
|
|
619
639
|
docker build -t dotrino-vault . # la imagen (la misma que CI publica en GHCR)
|
|
620
640
|
```
|
|
@@ -628,8 +648,8 @@ hermano en `../dotrino-proxy` (`secrets.e2e`, `multiprofile.e2e`,
|
|
|
628
648
|
`pairing-cita.e2e`): no se saltan solos, así que sin ese repo al lado `npm test`
|
|
629
649
|
falla.
|
|
630
650
|
|
|
631
|
-
Etiquetar `vaultd-v<ver>` publica la imagen de Docker en GHCR
|
|
632
|
-
|
|
651
|
+
Etiquetar `vaultd-v<ver>` publica la imagen de Docker en GHCR. Etiquetar `v<ver>` lanza
|
|
652
|
+
`release.yml`, que construye, atestigua y sube a la release el `.deb`, el `.rpm` y el tarball.
|
|
633
653
|
|
|
634
654
|
### Enrolar y usar desde un dispositivo (Node, para testing)
|
|
635
655
|
|
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.150.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
|
}
|