Blog

Aquí van a bulto todas las entradas que voy añadiendo. Acabo de empezar, y para lo que hay tampoco es que haga falta un sistema de clasificación decimal, digo yo. Si eso, cuando la cosa avance, ya iremos viendo.

Logitech Media Server en Ubuntu 22.04

Logitech Media Server en Ubuntu 22.04

Pues eso, una entrada rápida para dejar registro del calvario que supone, en ocasiones, actualizar a una versión nueva y radiante de Ubuntu. El asunto: un servidor con LMS deja de funcionar al actualizar a Ubuntu 22.04, así, sin más.

Algún día daré cuenta de cómo es eso de instalar un sistema de audio distribuido por toda la casa con software libre y hardware casero. Algo a la altura de los carísimos sistemas propietarios de varias marcas de prestigio pero al alcance de cualquier bolsillo modesto. Una auténtica gozada. Y prácticamente gratis. Envidia, ¿¿eh??

Pero ahora vamos al lío. Lo primero es recabar un poco de información.

1.- Lo primero, ojear el estado del servicio logitechmediaserver. Al parecer no se está ejecutando y cada vez que lo arranco muere inmediatamente:

$sudo systemctl status logitechmediaserver
○ logitechmediaserver.service - Logitech Media Server
     Loaded: loaded (/lib/systemd/system/logitechmediaserver.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2022-05-11 00:47:56 CEST; 1s ago
    Process: 113300 ExecStart=/usr/sbin/squeezeboxserver --prefsdir $PREFSDIR --logdir $LOGDIR --cachedir $CACHEDIR --charset $CHARS>
   Main PID: 113300 (code=exited, status=0/SUCCESS)
        CPU: 450ms

May 11 00:47:56 blackstone squeezeboxserver[113300]: If you're running some unsupported Linux/Unix platform, please use the buildme.>
May 11 00:47:56 blackstone squeezeboxserver[113300]: script located here:
May 11 00:47:56 blackstone squeezeboxserver[113300]: https://github.com/Logitech/slimserver-vendor/tree/public/8.2/CPAN
May 11 00:47:56 blackstone squeezeboxserver[113300]: If 8.2 is outdated by the time you read this, Replace "8.2" with the major vers>
May 11 00:47:56 blackstone squeezeboxserver[113300]: You should never need to do this if you're on Windows or Mac OSX. If the instal>
May 11 00:47:56 blackstone squeezeboxserver[113300]: don't work for you, ask for help and/or report a bug.
May 11 00:47:56 blackstone squeezeboxserver[113300]: *******
May 11 00:47:56 blackstone squeezeboxserver[113300]:                         
May 11 00:47:56 blackstone squeezeboxserver[113300]: Exiting..
May 11 00:47:56 blackstone systemd[1]: logitechmediaserver.service: Deactivated successfully.

2.- Para tener una idea de por qué se aborta puedo correr el servidor directamente desde el ejecutable:

$squeezeboxserver
The following modules failed to load: DBI EV XML::Parser::Expat HTML::Parser JSON::XS Digest::SHA1 YAML::XS Sub::Name

Lo que ya me está indicando un problema con la carga de los módulos de Perl el cual, por cierto, está instalado en su última versión.

3.- Veamos un poco más información sobre la versión de Perl actualmente instalada:

$perl -v

This is perl 5, version 34, subversion 0 (v5.34.0) built for x86_64-linux-gnu-thread-multi
(with 50 registered patches, see perl -V for more detail)

Copyright 1987-2021, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Es decir, que tenemos la versión v5.34. ¿Y por qué no cargan los módulos? Pues vaya usted a saber. O mejor aún, búsquelo usted en DuckDuckGo (je, je…)

La primera idea es que la actualización a Ubuntu 22.04 haya implicado un cambio a una versión más reciente de Perl (no comprobado) y que cuando LMS se ejecuta busca los módulos correspondientes a esta versión. Pero como LMS se instaló con una versión de Perl anterior, dichos módulos, simplemente, no están. Así que lo lógico parece reinstalar LMS (y, de paso, instalar la última versión). Sin embargo, esto no parece funcionar…

Así que me fijo en los mensajes de la primera salida, que había pasado por alto, y veo que los muchachos de Logitech en realidad ya me han dejado una pista que seguir, aunque de una manera un pelín críptica. Ubuntu NO es, o al menos hasta la fecha no lo era, una plataforma no soportada para su Media Server (Por eso la primera vez ni seguí leyendo) Pero, como lo cierto es que no está funcionando, empecé a pensar que, de hecho, ahora SÍ que lo es. De modo que me puse a seguir el rastro de migas.

El enlace lleva a un repositorio de github con un software que hay que compilar para parchear la instalación del servidor. También hay un archivo de ayuda (README.md) con unas austeras indicaciones de qué hacer con este software. Así que cloné el repositorio, lo compilé con el script proporcionado (buildme.sh) y realicé la copia de las dos carpetas generadas a la ruta donde squeezeboxserver está instalado, tal como indican las instrucciones. Por cierto, que me costó un poco encontrar la dichosa ruta, así que la dejo anotada aquí:

$cd /usr/share/squeezeboxserver/CPAN/arch/

Curioseando en esta carpeta compruebo, para mi sorpresa, que hay compilaciones instaladas automáticamente con cada una de las versiones anteriores, pero ninguna para la actual versión de Perl, la 5.34. Es decir, que cada instalador ha generado su carpeta con sus módulos salvo la última ¿Y eso por qué? Efectivamente, algo aquí no está funcionando bien. Y, efectivamente, una vez compilado el software y copiado a la ruta en cuestión, mi querido Logitech Media Server vuelve a funcionar. Eso sí, queda sin explicar por qué ya no se incluyen automáticamente estos módulos durante la instalación, si es que los de Logitech han decidido dejar de dar soporte a Ubuntu, si tiene que ver con la versión de Perl o qué, por lo que no sabemos qué pasará cando haya nuevas actualizaciones. Como siempre, cruzaremos ese puente cuando lleguemos a él. Y si eso… ya lo comentaremos.

Publicado por David en Blog, Domótica, Linux, 0 comentarios
De como me independicé de Google (ii) – Navegar sin temor…

De como me independicé de Google (ii) – Navegar sin temor…

… en el mar es lo mejor 𝅘𝅥𝅰  𝄞 ¿Alguien se acuerda de la canción de los payasos de la tele? Qué tiempos aquellos… en los que se podían surcar los procelosos mares de internet sin tener a un señor de negro subido a la chepa. Por cierto, dejaré un enlace a la canción al final del artículo, por eso de la nostalgia, y tal…

El navegador

Empecemos por el principio. Ahora bien, no voy a meterme a hacer una comparativa en cuanto a navegadores. Si quieres una, hay miles en internet (Si no me crees puedes buscarlas en Google, je, je…). Aquí me limitaré a mostrar algunas conclusiones. Y en este punto lo tengo claro: Mozilla Firefox.

Es un proyecto de código abierto, apoyado por una comunidad madura y comprometida, con un desarrollo de largo recorrido, continuo y con frecuentes actualizaciones. Está construido desde su base con la privacidad como objetivo y aunque quizás no sea de los más espectaculares en rendimiento y prestaciones, funciona francamente bien. Por algo es el navegador predeterminado en Ubuntu y para mí es más que suficiente.

Respecto a los navegadores basados en Chrome diré que hay algunos que son estupendos, pero todos tienen un pequeño inconveniente: y es que están basados en Chrome. Y sí, ya sé que a partir del código abierto de Chrome se puede hacer un buen navegador que no comprometa la privacidad y tal. Pero ya desde el título de esta entrada dejo claro que lo que quiero es alejarme lo más posible de Google así que… ajo y agua.

Migrar desde Chrome a Firefox resulta muy sencillo, ya que el propio Firefox permite realizar la importación de todos los datos de navegación de un navegador a otro. Sin embargo, una de las cosas que quizás tiene peor resueltas es el tema del uso de varios perfiles dentro de una misma cuenta, algo que a mí me resulta muy útil. De hecho, las opciones para crear perfiles y cambiar de uno a otro no están a la vista. Es necesario ingresar en una página local introduciendo la expresión about:profiles en la barra de direcciones. Una solución un tanto rara, la verdad, pero que se arregla añadiendo un marcador a la barra de marcadores. No es elegante pero funciona.

Ni que decir tiene que si queremos mantener una navegación suficientemente privada no basta con utilizar este navegador (ni cualquier otro). Por defecto Firefox adopta medidas como la ocultación de la ubicación y el bloqueo de rastreadores, sin embargo es importante tener mucho cuidado a la hora de instalar complementos que puedan comprometer la privacidad.

El buscador

Pero quizás, incluso antes de pensar en cambiar de navegador merece la pena reflexionar sobre el buscador. ¿Alguien se acuerda de Altavista? ¿O de Yahoo? ¿Cuándo y cómo llegamos a convencernos de que buscar en Internet era equivalente a buscar en Google? Tan acostumbrados estamos que da escalofríos sólo pensarlo.

Y no es cuestión baladí. Aquí conviene tener presente que la privacidad va en dos sentidos (por lo menos): que los buscadores no almacenen nuestras búsquedas es sólo una parte. Luego está la neutralidad de los resultados que el buscador arroja, incluyendo publicidad, o resultados que el buscador deduce que son «más relevantes» para nosotros, como les gusta llamar a estas compañías el hecho de mostrarnos aquella información que más fácil nos va a entrar para satisfacer a un tiempo nuestros impulsos y sus intereses.

(Dejo este enlace a un artículo que me resultó bastante interesante)

Igual que antes, no me enredaré en comparativas y me limitaré a señalar a DuckDuckGo como la opción más interesante. Merece la pena configurarlo como buscador por defecto. Por cierto, existe un complemento para Firefox llamado DuckDuckGo Privacy Essentials que resulta muy interesante instalar. Entre otras cosas, nos va informando de todos los rastreadores y anuncios que nos va bloqueando conforme navegamos, lo cual no hace sino contribuir a ponernos los pelos de punta al hacernos conscientes de hasta qué punto las grandes plataformas se dedicaban a cotillear en nuestras cosas cuando aún no usábamos estas herramientas.

¿Y para el móvil?

En el caso del móvil tenemos tres navegadores que merece la pena utilizar para reemplazar tanto a Chrome como al navegador que traiga nuestro móvil por defecto y que, por cierto, suele ser un churro:

  • Firefox para Android: Muy similar al de escritorio y abierto a múltiples configuraciones. Entre otras cosas, permite sincronizar los datos de navegación y las contraseñas con el resto de navegadores Firefox en otros dispositivos. Muy conveniente, para quien le convenga, claro.
  • Firefox Focus: Una versión del anterior minimalista y muy ligera, preconfigurada para la mayor privacidad y muy cómoda para navegar sin distracciones aunque tenga menos características.
  • DuckDuckGo Privacy Browser: Como podemos imaginar, un navegador que trae por defecto todas las opciones de privacidad habidas y por haber. Pero lo más interesante es que incorpora un widget de búsqueda similar al típico que viene por defecto con Android y que resulta perfecto como sustituto. Sólo por eso ya merece la pena instalarlo, aunque luego usemos otro navegador.

Edición de mayo de 2022: Recientemente he sabido acerca de un acuerdo de sindicación entre DuckDuckGo y Microsoft que impide a la primera compañía bloquear los rastreos por parte de la segunda. Al parecer, esto ocurriría exclucivamente en el navegador de Android y no en los de escritorio, siempre según fuentes de Duckduckgo, claro. Por lo tanto, la mejor opción para Android sigue siendo, siempre en mi humilde opinión, Mozilla Firefox. No obstante, no está de más tener también instalada la aplicación móvil de DuckDuckGo para disponer del widget de búsqueda como sustituto del de Google.

Y en el próximo capítulo espero dedicarme al peliagudo tema de los calendarios y las agendas de contactos. Uno de los anzuelos que más enganchados nos mantienen al ojo que todo lo ve.

Nos vemos pronto. Y de momento, ahora sí, para los nostálgicos, tal y como estaba prometido… la canción:

Publicado por David en Blog, Herramientas, Linux, Seguridad, 0 comentarios
Aquel maldito indicador de Dropbox…

Aquel maldito indicador de Dropbox…

Los que llevamos un tiempo funcionando con Dropbox en ubuntu hemos tenido ocasión de ver diversos comportamientos raros con el indicador de la aplicación en el área de notificación. En ocasiones, directamente desaparecía. Otras, el menú no se despliega o no funciona. Normalmente, rebuscando un poco por la red termino encontrando una solución pero, inevitablemente, para la próxima vez que me encuentro con el mismo error en una nueva instalación ya me he olvidado.

Por cierto, decir que escribo esto justo después de instalar la versión 21.10 de Ubuntu y eso me lleva pasando por lo menos desde hace unos seis o siete años… y ahí sigue. Haciendo un poco de historia y revolviendo un poco por Internet, parece que la cosa comenzó en la versión 14.04 y afectaba a los escritorios no Unity. Lo malo es que cuando Unity desapareció definitivamente nadie se molestó en reparar el paquete con lo cual el error ha seguido propagándose hasta nuestros días. Afortunadamente tenemos dos noticias, una buena y otra mejor.

La buena noticia es que la reparación es bastante sencilla y que se aplica en unos minutos. Y la mejor, es que los mantenedores de la distribución Ubuntu Mate han parcheado el paquete en sus repositorios oficiales desde la versión 16.04. Así que tenemos dos maneras de solucionar la cosa:

1.- Aplicamos el apaño a mano, o bien…

2.- …instalamos directamente el paquete de Ubuntu Mate en lugar del habitual. Su nombre es caja-dropbox

Por cierto, que esta información está tomada de este artículo pero por si acaso dejo también el código del apaño aquí a mano. Nunca se sabe…

cp ~/.config/autostart/dropbox.desktop ~/.config/autostart/start_dropbox.desktop
sed -i 's/^Exec=.*/Exec=dbus-launch dropbox start -i/' ~/.config/autostart/start_dropbox.desktop
dropbox autostart n
mkdir -p ~/.local/share/applications/
cp /usr/share/applications/dropbox.desktop ~/.local/share/applications/
sed -i 's/^Exec=.*/Exec=dbus-launch dropbox start -i/' ~/.local/share/applications/dropbox.desktop
Publicado por David en Blog, Herramientas, Linux, 0 comentarios
De como me independicé de Google (i) – No sos vos, soy yo.

De como me independicé de Google (i) – No sos vos, soy yo.

Hace unos meses me hacía eco de una curiosa noticia. Google iba a empezar a tomarse la libertad de monitorizar el contenido que mantenemos en Drive por si acaso guardamos algo que ellos puedan considerar «inadecuado». Y en tal caso, podría tomar partido con acciones que irían desde restringir el acceso al contenido ofensivo hasta eliminarlo. Y recordemos… que cuando Google habla de «contenido» se está refieriendo a nuestro material (nuestras fotos, por ejemplo)

Un poco de memoria

Que Google lleva años pasándose nuestra privacidad por el arco del triunfo y que sabe más de nuestra intimidad que nuestro terapeuta no es ningún secreto. Y que nosotros le hemos ido consintiendo cada vez más a cambio de sus servicios «gratuitos», tampoco. No estará mal hacer un poco de memoria:

Antes que nada Google fue el buscador que todos adoptamos ilusionados de manera totalmente acrítica hará como unos veinte años. Un buscador que, por cierto, toma nota de cada búsqueda que hacemos y selecciona cuidadosamente los resultados que nos muestra para que sean «relevantes» para nosotros. Un nosotros que pronto se materializó en una dirección de correo Gmail, también «gratis», alojada en sus servidores, y que se convirtió a efectos prácticos en el carné de identidad dentro del universo Google. Después llegó Chrome, ese estupendo navegador. Y lo digo sin ironías: rápido, ágil, lleno de prestaciones, que nos permitía trasladar nuestra experiencia de navegación de una máquina a otra de manera transparente a golpe de recopilar información sobre cada uno de nuestros gustos construyendo así nuestro «perfil». Y, como no, para todos los que nos afanábamos manejando las agendas de aquellas primeras «palmtop» (hay que ver qué mal envejecen algunos términos) llegaron en nuestro auxilio los servicios de Google Calendar. Menos mal que en cuanto la tecnología de aquellos primeros computadores de mano con teléfono integrado, a los que de pronto todos empezamos a denominar con el hortera anglicismo de «smart phone», empezó a madurar, apareció Google de nuevo con su sistema operativo «gratuito» Android para hacerlos funcionar. Y tan bien funcionaron que pronto integramos toda nuestra agenda, tanto telefónica como de email en Google Contacts, lo que además nos permitía pasar de un teléfono a otro sin perder un solo número. Y hacíamos copia de seguridad de todos nuestros datos en la nube de Google Drive, incluyendo las fotos. Y felices dijimos adiós a aquellos «carísimos» navegadores TomTom y Garmin, adoptando los mapas de Google Maps y su servicio «gratuito» de navegación. Y hubo tal regocijo que pronto todos quisimos que formara parte permanente de nuestro vehículo, así que llegó Android Auto para instalarse en nuestros coches. Y suma y sigue, y seguro que me dejo cosas. ¡Y lo que está por venir!

Algo pasa con Google

Google sabe qué nos gusta, qué miramos, qué nos entretiene, qué nos interesa, con quién nos comunicamos, a qué nos dedicamos, qué horarios tenemos, por dónde nos movemos, adónde viajamos o vamos de vacaciones, dónde vivimos nosotros, nuestra familia y nuestros amigos, cuánto tiempo pasamos en la panadería, en ese bar de mala muerte o en casa de fulanita, dónde caí borracho por última vez o lo poco que salgo de casa y el tiempo que hace que no me como un rosco, a que manifestación decidí ir, o si es que quizás preferí no ir…

Vamos, que no es de ayer precisamente el que tengamos sobrados motivos para recelar de esta compañía. Pero lo de Google Drive… no sé cómo decirlo, ha sido la puntilla, la gota que ha colmado el vaso. Ya sólo faltaba que el día que por la razón que sea lleguen a la nube aquellas fotos que nos hiciéramos mi churri y yo aquel verano en el Pirineo, cuando la euforia debida seguramente a la altitud nos llevó a pensar que era buena idea inmortalizar el momento de chapuzarnos en pelotas en un ibón, llegue el Sr. Google a meter las narices y les eche un vistazo no vaya a ser que le parezcan o le dejen de parecer lo bastante «adecuadas» para existir en su exquisita nube. Como si ese maldito criterio moralista y puritano que lo está embarrando todo tuviera que perseguirnos también a nuestra alcoba digital. Bueno, pues hasta aquí hemos llegado. Igual que hay cosas en la vida que es mejor no ver, también hay experiencias por las que es mejor no tener que pasar. Y para los que penséis que exagero, molestaros en echar un vistazo a sus políticas, sobre todo la parte en la que dice eso de que «podemos revisar el contenido y tomar las medidas que estimemos oportunas», teniendo en mente que esto incluye su servicio Drive, ese lugar donde el común de los mortales guarda su material más intrascendente pero también el más personal.

Así que aquí estoy, embarcado en una trayectoria que ha de llevarme poco a poco, o eso espero, a la independencia total de Google y su omnipresente actitud vigilante cual ojo de Sauron. Trayectoria que en su momento ya recorrí con Microsoft con notable éxito, aunque por razones diferentes.

Lo que empezó siendo una entrada en la que recoger algunas conclusiones para que no cayeran en el olvido ha terminado convirtiéndose en la crónica de un peregrinaje en busca de un uso más libre y neutro de la red. Una red que, para quienes la vimos aterrizar en medio de nuestras vidas, nunca debería haber dejado de encarnar ese espíritu de interconexión y libertad con el que todo empezó. De manera que dedicaré varias entradas, una por cada etapa del camino, y a medida que las vaya publicando, las iré enlazando también desde aquí.

Empezamos:

  1.  De como me independicé de Google (ii) – Navegar sin temor…

 

 

 

 

 

 

 

Publicado por David en Blog, Herramientas, Linux, Seguridad, 0 comentarios
Funciones útiles con el Subsistema Linux en Windows 10 (WSL)

Funciones útiles con el Subsistema Linux en Windows 10 (WSL)

  • Acceder a una memoria USB desde WSL

En la estructura de archivos del subsistema de Linux vienen por defecto varios directorios con las típicas letras de unidad de disco de windows. En efecto, si miramos el contenido de la carpeta de montaje:

ls /mnt

c d e f

Sin embargo, cuando entramos en el directorio correspondiente a la letra de unidad donde tenemos insertada la memoria, resulta que está vacío. Al parecer, las unidades externas no se montan automáticamente, sino que hay que hacerlo explícitamente mediante el comando mount . En el siguiente ejemplo, vemos los parámetros con los que ejecutar este comando cuando montamos la unidad presente en E:

sudo mount -t drvfs E: /mnt/e

Y para desmontar, exactamente igual que en Linux…

sudo sudo umount /mnt/e
  • Acceder a los archivos del espacio WSL desde Windows

El espacio de archivos utilizado por WSL está disponible directamente desde el explorador de Windows 10 introduciendo esta ruta en la barra de direcciones del explorador de archivos: \\wsl$\Ubuntu

Nota: Si nos fijamos en la notación, veremos que Windows 10 maneja esta ruta como un sitio de red. Para que la ubicación de red esté montada, será necesario que en ese momento se esté ejecutando la sesión correspondiente en el WSL

Publicado por David en Blog, Linux, 0 comentarios

Cómo delegar fondos en un «stake pool»

Para ser capaces de delegar fondos en un determinado Stake Pool será necesario cumplir tres condiciones:

  1. La dirección de payment en la cual tenemos los fondos que deseamos delegar deberá estar asociada a una dirección de stake.
  2. Dicha dirección de stake debe estar convenientemente registrada en la en la cadena de bloques mediante un certificado de registro. Este certificado deberá ser remitido a la cadena de bloques con una transferencia específica que comporta un depósito. En el momento de escribir estas líneas, el depósito es de 2 ₳ 
  3. Será necesario, además, un certificado de delegación que asocie la dirección de stake con el pool seleccionado, que deberá ser remitido a la cadena de bloques con una transferencia estándar con la tarifa mínima.

Una vez realizado el proceso completo, los fondos depositados en la dirección de payment asociada a la clave de stake en cuestión participarán del monto total de fondos delegados al pool, colaborando en la creación de bloques por parte de ese pool y recibiendo recompensas por ello en la misma dirección de stake.

Dado el procedimiento, podemos ver también que cambiar de pool es tan sencillo como crear un nuevo certificado de delegación y remitirlo a la cadena de bloques, lo que implica una transacción estándar con tarifa mínima. El depósito inicial de 2 ₳ es necesario realizarlo solamente una vez para habilitar nuestra dirección a participar en el proceso de delegación. 

  • Crear una dirección de payment asociada a una dirección de stake

Para obtener una dirección de payment asociada a una dirección de stake, el procedimiento es muy sencillo, ya que basta con generar la dirección aportando la clave de verificación de stake, además de la clave de verificación de payment. En este ejemplo, para distinguir la dirección de payment asociada a stake de una dirección de payment regular, la llamaremos paymentwithstake.addr

cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file paymentwithstake.addr \
--testnet-magic $MAGIC_NUM
  • Registrar la dirección de Stake

  • Crear un certificado de registro

Antes de poder empezar a delegar fondos es necesario registrar la dirección de stake en la cadena de bloques. Y el primer paso para ellos es crear un certificado de registro de dicha dirección.

cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert

A continuación, es encesario remitir el certificado a la cadena de bloques. Para ello, realizaremos una transacción desde la dirección de pago , en este caso, paymentwithstake.addr en la cual hay que incluir, de la tarifa estándar, el depósito antes mencionado. Ambas se deducen del balance de la dirección de pago a la hora de especificar el cambio devuelto.

Es importante señalar que en este tipo de transacción no se transfieren fondos a ninguna dirección. Tanto la tarifa como el depósito son descontados durante la transacción al calcular el balance resultante que es devuelto en la misma dirección de pago. El destino de ambas cantidades podemos entenderlo como una especie de servicio de tesorería dentro sistema de Cardano, el mismo que genera y administra las recompensas y la expansión monetaria del sistema. Los pasos para realizar la transacción son los habituales:

  • Obtenemos el balance de la dirección de pago

cardano-cli query utxo --address $(cat paymentwithstake.addr) --testnet-magic $MAGIC_NUM

                          TxHash                                 TxIx        Amount
--------------------------------------------------------------------------------------
96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5     0        1000000000 lovelace + TxOutDatumHashNone
  • Comprobamos la tarifa de registro

Si no lo hemos hecho antes, obtenemos los parámetros del protocolo que guardaremos en el archivo params.json. Entre otras muchas cosas, podemos obtener la tarifa por registrar la dirección de stake que, como ya hemos dicho, en este momento es de 2 ₳.

cardano-cli query protocol-parameters \
--testnet-magic $MAGIC_NUM \
--out-file params.json
  • Calcular el TTL (Time To Live)

Obtenemos el slot actual de la cadena para calcular el TTL (Time To Live) de la transacción

cardano-cli query tip --testnet-magic $MAGIC_NUM

{
    "epoch": 166,
    "hash": "13e9f47d0a19feb5f860a4b7b571162479ad103331cff1c56d24c116a937ae8f",
    "slot": 41347556,
    "block": 3036045,
    "era": "Alonzo",
    "syncProgress": "100.00"
}

Sabiendo que el tiempo entre dos slots es de un segundo, basta con sumar al slot actual un tiempo que consideremos razonable para armar la transacción sin prisas (normalmente, unos pocos minutos es suficiente)

  • Construimos el borrador de la transacción

Esto es necesario como paso previo para poder calcular la tarifa de la transacción. En este caso podemos dar un valor ‘0’ a los parámetros específicos de la transacción, tales como la tarifa, el cambio o el ttl.

cardano-cli shelley transaction build-raw \
--tx-in 96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5#0 \
--tx-out $(cat paymentwithstake.addr)+0 \
--ttl 0 \
--fee 0 \
--out-file tx.draft \
--certificate-file stake.cert
  • Calcular la tarifa mínima

A partir del borrador, calculamos la tarifa mínima

Es interesante comprobar que la tarifa de la transacción no depende para nada de las cantidades a transferir.

cardano-cli transaction calculate-min-fee \
--tx-body-file tx.draft \
--tx-in-count 1 \
--tx-out-count 1 \
--witness-count 1 \
--byron-witness-count 0 \
--testnet-magic $MAGIC_NUM \
--protocol-params-file protocol.json
 
172761 Lovelace
  • Construir la transacción definitiva

Aquí es donde podemos observar como la única dirección de salida es la misma que aquella de la que se obtienen los fondos y que se especifica solamente para recibir el «cambio» de la transacción, el cual es básicamente el balance inicial menos la tarifa y el depósito.

En mi caso, el cálculo de dicho cambio es el siguiente: 1000.000.000 – 2.000.000 – 172.761 = 997.827.239

cardano-cli transaction build-raw \
--tx-in 96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5#0 \
--tx-out $(cat paymentwithstake.addr)+997827239 \
--ttl 41444206 \
--fee 172761 \
--out-file tx.raw \
--certificate-file stake.cert
  • Firmar la transacción

Aquí podemos observar una caracterísitica específica de este tipo de transacción con respecto a una transacción convencional de movimiento de fondos: En este caso se proporcionan ambas claves de firma: la de pago y la de stake.

cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--signing-key-file stake.skey \
--testnet-magic $MAGIC_NUM \
--out-file tx.signed
  • Enviar la transacción firmada

cardano-cli transaction submit \
--tx-file tx.signed \
--testnet-magic $MAGIC_NUM

Transaction successfully submitted.

Y… voilà!

  • Registrar la delegación en un determinado pool

  • Crear el certificado de delegación

Si deseamos delegar en un determinado pool, necesitaremos conocer el identificador de dicho pool. Se trata de un valor público que contiene la información necesaria para asociar nuestros fondos al pool sin necesidad de conocer sus claves y, por lo tanto, sin comprometer la seguridad del mismo.

cardano-cli stake-address delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --stake-pool-id <stake pool ID> \
    --out-file deleg.cert

Igual que antes, hay que remitir este nuevo certificado a la cadena de bloques mediante una transacción que, en este caso, no implica realizar ningún depósito más allá de la tarifa estándar. Los pasos serán los mismos que en la transacción anterior.

 

Publicado por David en Blog, Cardano, 0 comentarios
Acceso remoto SSH con clave pública y Google 2FA

Acceso remoto SSH con clave pública y Google 2FA

Las dos maneras más populares de asegurar una conexión SSH son el acceso mediante clave pública y la autenticación en dos pasos (2FA). La primera es la que más tradición tiene y la que llevo años utilizando en mis máquinas domésticas. La segunda es algo más reciente y nunca la había utilizado antes, así que me apeteció probarla para aumentar la seguridad. Hay decenas de tutoriales que explican el procedimiento, bastante sencillo, por cierto. Pero como el objeto de este blog es facilitarme las cosas a mí mismo y evitarme el ponerme a rebuscar, aquí dejo el enlace a la guía oficial de ubuntu sobre el tema: Configure SSH to use 2FA

La verdad es que el acceso mediante 2FA es una chulada. Metes la contraseña y te pide un código del Google Authenticator. Sin embargo, una vez disipada la ilusión inicial pensé que no estaría de más sustituir el paso de introducir la contreña por una autenticación mediante clave pública. Mucho más cómodo y, sobre todo, mucho más seguro. Así que configuré un par de claves RSA para entrar al servidor (proceso que, aunque he realizado decenas de veces, siempre se me olvida, así que también lo describiré por aquí).

La sorpresa vino cuando intenté la conexión. El hecho de haber configurado el acceso mediante clave hizo que la entrada al servidor fuera inmediata, sin solicitar el código de validación. Investigando un poco me entero de que, al parecer, el acceso mediante clave anula por defecto cualquier otro método de autenticación. Toda la configuración para el Google 2FA a hacer puñetas. Menudo chasco!

Así que vuelta a investigar la manera de poder mantener ambos modos de authenticación aunque, eso sí, sin necesidad de introducir la contraseña. De momento, dos factores ya me parecen suficientes. Mejor dejar la autenticación multifactor (MFA) para más adelante.

Partimos de la configuración previa del archivo del servidor SSH, que coloco aquí mientras le busco un sitio mejor

sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication yes
PermitRootLogin prohibit-password

La cuestión es que si deseamos mantener ambos métodos de autenticación, de manera que ya no nos pida la contraseña (gracias a la clave RSA) pero nos continúe pidiendo el código de verificación, deberemos indicárselo explícitamente. Para ello, añadiremos una línea especificando dos posibles vías de autorización: O proporcionamos una clave pública y una contraseña, o bien una clave pública y un código de verificación.Las dos posibilidades están descritas en forma de dos listas de métodos. Las listas están separadas por un espacio. Y en cada lista, los métodos requeridos están separados por comas. Si los requisitos de una lista no se dan, entonces se pasa a la siguiente.
Como la configuración de este parámetro parece algo liosa, dejo aquí este enlace en el que lo explican todo muy bien y de manera muy detallada.

AuthenticationMethods publickey,password publickey,keyboard-interactive

Luego debemos modificar el archivo de configuración de PAM para que no nos pida la contraseña

sudo nano /etc/pam.d/sshd

Y comentamos la siguiente línea

#@include common-auth

Y ya está. Si os estáis preguntando por qué es necesario decirle a PAM que no pida contraseña en lugar de quitarla directamente de la lista de los métodos de autorización, os diré que yo me pregunto lo mismo. Lo único que sé es que hice la prueba y no funcionó, pero con el método descrito va como la seda.

Publicado por David en Blog, Seguridad, SSH, 0 comentarios