Zona Hacklab Autónoma

de la interdimensión pirata

#2 ~

tiempo ~ 5hs | ~ 20 piratas

zha_v0

Encuentro interdimensional <3

Nos juntamos varias piratas del pip en el jitsi pirata con una serie de encuentros piratas donde nos compartimos saberes, hackatoneamos y liberamos cosas. Esta vez vamos a compartir una serie de talleres y charlas sobre un conjunto de saberes que consideramos importantes en nuestras actividades piratas interbarcas y que nos parece, pueden ser interesante compartir con nuestres aliades. Horarios

15:10 - Intro sobre ZHAI y PIP 15:15 - Git Doc

Git es un software para manejar versiones de nuestros archivos. Vamos a repasar los conceptos esenciales que maneja git (repositorios, ramas, commits) y usar esta herramienta sobre github para publicar algo en internet.

16:30 - 0net Doc

ZeroNet es una red de pares que se pueden conectar sin compartir sus direcciones IPs entre sí. Hay blogs, foros, mail y muchas sorpresas!! (xddd)

corte 17:45 - 18:00

18:00 - cifrado de mails con enigmail && thunderbird Doc

Aprender a cifrar correos con el gestor thunderbird + enigmail, dinámica de creación de llaves para cifrar con amigxs

Taller de git

bloque by @gahen

Requisitos / Recomendaciones:

Instalar git: https://duckduckgo.com/?q=instalar+git&t=ffsb&ia=web

Glosario

Introducción

Git es un software que nos permite controlar cambios sobre nuestros archivos y es especialmente útil para los que se basan en archivos de texto.

En general daremos traducciones de las palabras en inglés a usar, sin embargo usaremos más los términos en inglés para las acciones que ya se conocen así en el campo de la tecnología.

Taller

Crear un nuevo repositorio

Un repositorio es la parte mínima de una implementación de git, tiene una relación 1 a 1 con nuestros proyectos y dispositivos, es decir que tendremos 1 repositorio por cada proyecto y dispositivo (notebook, pc de escritorio, etc.). Solo tendremos un repositorio activo cuando estemos trabajando, no podemos cambiar de repositorio.

git init [carpeta] # crea un repositorio nuevo, opcionalmente en la carpeta pasada como parámetro, sino en la que estamos paradas.

Gestión de branches (ramas)

Representan líneas distintas de desarrollo del proyecto. Se pueden tener varias en paralelo en un mismo repositorio

git branch <rama>    # Crea una nueva rama llamda <rama>
git branch           # Lista todas las ramas que tenemos
git checkout master  # Se para en la rama master
git merge <rama>     # Combina los cambios de la rama <rama> hacia la rama actual, solo modifica a esta rama.
git branch -d <rama> # Borra la rama <rama>. Ya fue unida a master así que no hace falta tenerla activa

Nota: es importante entender que borrar una rama no modifica la historia, los commits de esa rama siguen estando. Lo único que cambia es que ya no podemos hacer un checkout al commit último de la rama usando el nombre que tenía (sí podemos hacerlo usando el hash del commit). Borrar ramas entonces es más un tema de organización que de gestión del código versionado.

Stage y Commit

stage es un estado intermedio, previo al commit (versionado), que podría describirse como “cambios listos para ser versionados (commiteados)”

git add <archivo.ext> [otro.otraext] ... # coloca en staged todos los archivos que pasamos como parámetro

Para corroborar que el comando anterior funcionó bien y estamos por versionar exactamente lo que queremos podemos usar el comando status que nos muestra el estado actual de nuestro repositorio.

git status                               # nos mostrará lo que hicimos

commit es el comando que nos permite efectivamente versionar un cambio. Una vez que hacemos commit nuestro cambio va a quedar guardado en nuestro repositorio. Git nos da la seguridad de que siempre podremos volver a esta versión en el futuro.

git commit                               # Abre un editor de texto donde pondremos el mensaje de commit y visualizaremos los cambios que estaban en staged, ellos serán los que se guarden.
git commit -m 'mensaje de commit'        # Hace un commit con el mensaje que le pasamos entre comillas
git commit -am 'mensaje de commit'       # Hace un add de todos los cambios actuales y comitea con el mensaje. La versión simple y por eso también la más 'sucia' de usar, ya que es muy fácil versionar cambios que no nos interesaban

Uso distribuído: Repositorios centralizados y github.

Hay varias maneras de trabajar de manera distribuida con varias personas aportando a un mismo repositorio usando git. Cada uno hace un commit a su propio branch y luego van mergeando sus cambios con los de los demás. Hablamos de “repositorio centralizado” cuando hay 1 repositorio que tiene la versión posta y los demás tienen que mergear con él. Con git pueden armarse otros flujos de trabajo no centralizados.

Entre los proveedor de repositorios en la nube podemos mencionar a 0xacab, Bitbucket y Github. Una vez creado nuestro repositorio remoto y podemos asociarlo con nuestro repositorio local con el comando git add y luego enviar nuestros cambios usando git push.

git remote add origin git@github.com:User/reponame.git # Añade una referencia a un nuevo repositorio remoto, usa el nombre por defecto *origin* y tiene la url remota al repositorio.
git push -u origin master                              # Envía nuestros cambios comiteados a la rama master del repositorio remoto. Esta rama ya existe, se crea sola con el repo, sino el comando fallaría.

Cuando otra persona sube cambios al repositorio y queremos obtenerlos (o más probablemente cuando queremos hacer push y git se queje de que tenemos que actualizar nuestro repo antes) podemo usar…

git pull origin master  # puede ser solo "git pull" si ya le dijimos a git cual es el repositorio y branch del que debe actualizarse

Usando checkout -b podemos crear una rama local y remota a la vez, que luego pueda hacer push al repositorio remoto

git checkout -b nueva-rama # Crea una nueva rama que estará en el mismo estado que la rama donde estábamos parados.
# git add, commit, etc ....
git push origin nueva-rama # Publica los cambios a la nueva rama.

Referencias, movernos en la historia y deshacer cambios

Introduzcamos el concepto de “copia de trabajo”: esta es la estructura de archivos que vemos, fuera de git. Cada vez que modificamos, añadimos o borramos un archivo estamos tocando la copia de trabajo, el repositorio solo se modifica al usar algún comando de git.

Para movernos a distintos momentos de la historia, entre commits, necesitamos saber su hash. Para esto podemos usar el commando git log, que nos muestra el historial de la rama donde estamos parados, o el comando git reflog que nos muestra todo lo que hemos hecho en el repositorio hasta ahora. Luego podemos usar el comando git reset --soft *hash* que moverá la referencia actual del branch hacia otro momento de la historia, el del commit cuyo hash pasamos como parámetro. git reset --hard *hash* además de hacer eso reemplazará nuestra copia de trabajo por que estaba en ese momento de la historia.

:::danger Las siguientes instrucciones pueden generar pérdida de archivos, tengan todo commiteado antes de probarlas. :::

git log                     # Buscamos el hash del commit al que queremos volver, por ejemplo *1234abcd*. Supongamos que estamos en el commit *5678abcd*
git reset --soft 1234abcd
git status				    # Como hicimos un reset "suave" nos mostrará un montón de archivos cambiados, porque volvió a un estado anterior de la historia pero no cambió los archivos
git reset --hard 1234abcd
git status				    # Ahora vemos que ya no hay nada para comitear, todos los cambios que habíamos hecho se perdieron y estamos 100% en el estado del commit 1234abcd.
git reflog                  # Acá podemos ver el commit donde estábamos parados inicialmente, supuestamente *5678abcd*
git reset --hard *5678abcd* # Con esto volvimos al estado incial, como si nada hubiera cambiado.

Deshacer cambios

Para deshacer un commit simplemente usamos git revert <hash> y se nos añadirá un commit más especificando que el commit identificado por **** fue deshecho.

Conflictos

Muchas veces,cuando estemos trabajando entre varios, git no podrá mezclar los cambios, y nos pedirá nuestra intervención. Luego se crea un commit donde se deja constancia de ese merge y qué hicimos:

# Tenemos cambios locales commiteados que queremos subir
git push origin master  # Git se queja de que tenemos que actualizar nuestro repo y rama antes de hacer push
git pull origin master  # Intentamos traer cambios remotos pero git nos dice que hay conflictos que debemos resolver, por ejemplo en el archivo README.md
# editamos el archivo README.md, reemplazamos lo que está marcado como conflictivo y nos aseguramos de que el resultado final está OK
git add README.md       # Le decimos a git que el archivo conflictivo ya está OK
git commit 				# Git nos pone un mensaje por defecto, cerramos y guardamos y listo
git push origin master  # Funciona =)

Publicar contenido online usando git

Github

Github provee un servicio que nos publica en internet cualquiera cosa que publiquemos al repositorio llamado .github.io.

Documentación: https://pages.github.com/

0xACAB (gitlab)

0xacab usa gitlab como software para gestionar repositorios remotos, también soporta algo similar: https://0xacab.org/help/user/project/pages/index.md

ZeroNet

bloque by @anzo y @alf screenshot random.

Teoría

Práctica

En ZeroNet seremos nodos, pares y semillas (simultáneamente) de los contenidos que prosumiremos; es decir de los contenidos que consumimos y producimos al navegar y comunicarnos.

En la Internet de los `90 nadie sabía que eras un perro.

Instalaciones

ZeroNet

- Starting ZeroNet...
[xx:xx:xx] - Libsecpk256k1 loaded: CompiledLib in 0.024s
[xx:xx:xx] - Patching sockets to tor socks proxy: 127.0.0.1:9150
[xx:xx:xx] - Version: 0.7.1 r4206, Python 3.7.8 | packaged by conda-forge | (default, Jul 23 2020, 03:54:19)
[GCC 7.5.0], Gevent: 20.6.2
[xx:xx:xx] - Creating FileServer....
[xx:xx:xx] - Creating UiServer....
[xx:xx:xx] - Removing old SSL certs...
[xx:xx:xx] - Starting servers....
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] Ui.UiServer Web interface: http://127.0.0.1:43110/
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv4) using checkCanyouseeme result: {'ip': 'xx.xx.xxx.xxx', 'opened': False} in 2.928s
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv6) using checkMyaddr result: {'ip': 'xxxx:xxxx:xxx:xx::x', 'opened': False} in 13.463s
[xx:xx:xx] ConnServer Server port opened ipv4: False, ipv6: False
[xx:xx:xx] Ui.UiServer Added 127.0.0.1:43110 as allowed host

Fin.

Para profundizar luego, quizás en otra ocasión:

Aprendiendo a enviar mails cifrados con thunderbird!

bloque by @librenauta

thunderbird es un cliente de correos electrónicos, donde podemos ingresar diferentes cuentas de diferentes servidores de correos, para poder gestionarlos todos en un mismo lugar.

para instalar thunderbird >->

Lo podés buscar desde el centro de software de tu sistema operativo linux, o via terminal:

Debian sudo apt-get install thunderbird fuente

Fedora sudo apt-get install thunderbird fuente

Windows descargar la última version desde aquí en español o elegir el idioma aquí

al iniciar thunderbird nos pedirá ingresar una cuenta de mail

Cifrado

El objetivo de cifrar información es poder transformar un mensaje/archivo en un lenguaje que no se pude comprender a menos que tengas una “llave” (como un candado) para descifrarla o hacer legible nuevamente.

un ejemplo muy simple es el cifrado ROT

donde la llave sería hacer corresponder una letra con la siguiente en el abecedario, ejemplo A=D

Una llave pública es un archivo que usted puede dar a cualquiera o publicar públicamente. Cuando alguien quiera enviarle un mensaje cifrado de extremo a extremo, necesitará su clave pública para hacerlo.

Su llave privada le permite descifrar este mensaje cifrado. Debido a que su llave privada le permite leer mensajes cifrados, es muy importante que usted la proteja. Además, su llave privada puede ser usada para firmar documentos para que otros puedan verificar que realmente proceden de usted.

ssd.eff.org


Enigmail

El complemento que nos permite generar y subir nuestras llaves de cifrado

en esta ventana tambien podemos subir nuestra llave pública, para que otras la encuentren al poner nuestro mail en algun servidor de llaves.

autocript

by @fauno

autocrypt es una forma (protocolo, extensión) de facilitar el intercambio de llaves gpg sin intervención de les usuaries y activa cifrado oportunista.

sin autocrypt hay que:

autocrypt agrega la llave pública en los metadatos de cada correo y detecta automáticamente cuando recibimos correos con autocrypt. también lleva una cuenta de las llaves más nuevas y utiliza siempre la última. esto permite que les usuaries cambien de llave sin tener que avisarle a todo el mundo o renovarla (openpgp espera que una llave sea como un documento de identidad y la tengas para siempre, por eso los servidores no borran nada, pero en la practica todo el mundo la pierde y vuelve a crear otra).

el cifrado es oportunista porque si enviamos un correo a una persona sin saber una llave, pero ambas tenemos autocrypt, la respuesta va a llegar cifrada, con lo que es necesario un solo correo sin cifrar. no responde a problemar de verificación de identidad.

#enigmail ya soporta autocrypt, no tengo claro si el nuevo #thunderbird lo soporta, pero hay un plugin que lo hace por su cuenta asi que quizas haya que instalar ese