ar:guia_binkd_crashmail_golded

Guía para punto con binkd + crashmail + golded en GNU/Linux

La intensión de esta guía, es ayudar a tener un sistema de un punto para Fido (también puede ser un nodo, la única diferencia básicamente es la dirección FTN, pero a efectos prácticos es lo mismo) Este sistema en conjunto, debería poder enviar/recibir netmails y áreas de echomails usando golded como editor, crashmail como tosser y binkd como mailer.

Este es un esquema de como seria el funcionamiento:

Diagrama de bloques

No es la idea ver opción por opción en detalle de los programas, para ello se debe recurrir a la documentación de cada uno de ellos respectivamente.

El escenario de ejemplo que voy a mostrar es creado en Debian GNU/Linux version 12 [bookworm] (para otros OS's seguramente se deben considerar usar los paths y los programas correspondientes).

Vamos a usar esas configuraciones como ejemplo:

Configuración valor
Nuestra dirección FTN del punto 4:902/26.10
Dirección de nuestro uplink/boss donde conectaremos 4:902/26
Host del uplink/boss bbs.docksud.com.ar
Puerto del binkd (estándar) 24554
Raíz de nuestros archivos /home/ragnarok/fido

Binkd se puede instalar vía apt al menos en los repos de debian (a la fecha debian 12) yo uso ese y anda bien, salvo que se encuentren con algún bug o alguna funcionalidad mas nueva que necesiten, se deberán bajar el source y compilarlo.

Pero no creo que sea necesario.

Por defecto binkd busca las configuraciones en /etc/binkd/binkd.cfg ( por ejemplo, si lo instalan desde los repos), también puede que corra como servicio (el cual ahora no lo vamos a usar y para mejor de los casos, lo deshabilitan vía systemctl).

Porque nosotros vamos a crear el archivo de config y vamos a poner todos dentro de un directorio en nuestro home así no tenemos problemas de permisos y esas cosas al ejecutar como root o un usuario de servicio. Así se facilita para quienes no están muy experimentados con GNU/Linux.

NOTA: Siempre podemos ejecutar todo esto con nuestro usuario de GNU/linux y el uso de root es solamente necesario para instalar los programas.

El path del directorio que vamos a usar por ejemplo es /home/ragnarok/fido/

Este es el contenido del archivo /home/ragnarok/fido/binkd.cfg. Voy a comentar algunas de las opciones que me parece que ameritan, el resto la pueden ver desde la Documentación de binkd que está muy bien detallada.

/home/ragnarok/fido/binkd.cfg
# Opciones de logging para depurar
log binkd.log
loglevel 4
 
# Definimos el directorio de salida donde se van a alojar los paquetes en cola para enviar a nuestro upplink/boss
# El numero 4 corresponde a la zona que trabajamos 
# A esta altura solo con el domino fidonet alcanzaría, pero por costumbre dejo los otro alias comunes
domain fidonet /home/ragnarok/fido/out 4
domain fido        alias-for fidonet
domain fidonet.org alias-for fidonet
domain fidonet.net alias-for fidonet
 
# Dirección de nuestro sistema de punto
address 4:902/26.10@fidonet
 
# Datos para identificar nuestros sistema 
sysname "Fernando Toledo punto 10"
location "Dock Sud, Bs As Argentina"
sysop "Ragnarok"
 
# Opciones generales (ver docu de binkd para mas detalles de cada una)
nodeinfo 115200,TCP,BINKP
conlog 4
try 10
hold 10m
send-if-pwd
percents
printq
backresolv
pid-file binkd.pid
minfree 2048
minfree-nonsecure 2048
kill-dup-partial-files
kill-old-partial-files 1d
kill-old-bsy 12h
prescan
 
 
# Directorio de entrada de binkd, acá llegaran los paquetes que recibimos y luego el tosser(Crashmail) debe procesarlos desde ahí
inbound /home/ragnarok/fido/in
 
# El //directorio de entrada no seguro// es por si hacemos la conexión contra nuestro uplink/boss pero probablemente no estén bien definidas las credenciales o la autenticación
# Con lo cual binkd puede aceptar los paquetes entrantes, pero no confiar el ellos. De esta forma, esos paquetes quedan acá y luego debemos 
# evaluar que hacer con ellos 
inbound-nonsecure /home/ragnarok/fido/in.nosecure
 
# Programa que se ejecuta al recibir archivos .tic (en este caso tinytic) va a procesar esos archivo y según la configuración 
# va a moverlos a algun directorio que le indicamos 
exec "/home/ragnarok/fido/tinytic -c /home/ragnarok/fido/tinytic.cfg" *.tic
 
# Acá indicamos que al llegar archivo de paquetes, se lance el crashmail para procesarlos
exec "crashmail settings /home/ragnarok/crashmail.prefs toss nosecurity" *.pkt
 
# Dirección del nodo de nuestro uplink/boss para enviar y recibir los paquetes
# El formato es:
#   node <dirección del uplink> <hostname de internet> <contraseña>
#
# Los fileboxes están asociados a  un nodo se pueden usar para organizar la cola de entrada y salida. Así se puede separar por nodo y no se mezclan
# Es útil para cuando se tienen varios nodos, aunque este no seria nuestro caso
node 4:902/26@fidonet bbs.docksud.com.ar 123456
filebox /home/ragnarok/fido/filebox

IMPORTANTE: Las lineas de exec pueden ser omitidas si es el caso en que luego se ejecute a mano el “crashmail toss”. Tranquilamente se puede hacer desde un pequeño script de bash para automatizar y tenga el llamado del binkd, luego el crashmail para el toss

Hasta acá, si todas las configuraciones son correctas, seria posible hacer un llamado hacia el uplink. Usamos: -p para hacer el poll y salir cuando termina -P 4:902/26 es el numero del nodo del uplink/boss binkd.cfg el nombre de archivo de configuración de binkd.

NOTA: Recuerden que deben estar parados sobre /home/ragnarok/fido/ donde esta el archivo binkd.cfg (sino se debe pasar el path absoluto del mismo)

Entonces ejecutamos:

/usr/sbin/binkd -p -P 4:902/26 binkd.cfg

Podemos ver el log en la consola donde indica que se autenticó bien

  01:43 [26325] BEGIN, binkd/1.1a-115/Linux -p -P 4:902/26 binkd.cfg
  01:43 [26325] creating a poll for 4:902/26@fidonet (`d' flavour)
  01:43 [26325] clientmgr started
$ -d 4:902/26@fidonet         
+ 01:43 [26326] call to 4:902/26@fidonet
  01:43 [26326] trying bbs.docksud.com.ar [186.123.101.23]...
  01:43 [26326] connected     
+ 01:43 [26326] outgoing session with bbs.docksud.com.ar:24554 [186.123.101.23]
- 01:43 [26326] OPT CRAM-MD5-2134123123412341231234 CRYPT
+ 01:43 [26326] Remote requests MD mode
+ 01:43 [26326] Remote requests CRYPT mode
- 01:43 [26326] SYS Dock Sud BBS
- 01:43 [26326] ZYZ Ragnarok  
- 01:43 [26326] LOC Dock Sud, Bs As, Argentina
- 01:43 [26326] NDL 115200,TCP,BINKP
- 01:43 [26326] TIME Sun Nov 17 2024 01:43:47 GMT-0300
- 01:43 [26326] VER BinkIT/2.41,JSBinkP/4,sbbs3.20a/Linux binkp/1.1
+ 01:43 [26326] addr: 4:902/26@fidonet
+ 01:43 [26326] addr: 666:1/1@latinet (n/a or busy)
+ 01:43 [26326] addr: 21:2/151@fsxnet (n/a or busy)
+ 01:43 [26326] addr: 618:500/45@micronet (n/a or busy)
+ 01:43 [26326] addr: 46:10/182@agoranet (n/a or busy)
+ 01:43 [26326] addr: 39:943/0@amiganet (n/a or busy)
+ 01:43 [26326] addr: 39:943/1@amiganet (n/a or busy)
+ 01:43 [26326] addr: 954:895/37@hobbynet (n/a or busy)
+ 01:43 [26326] addr: 15:1/1@zudaka (n/a or busy)
+ 01:43 [26326] addr: 15:1/0@zudaka (n/a or busy)
+ 01:43 [26326] addr: 15:0/0@zudaka (n/a or busy)
+ 01:43 [26326] addr: 4:0/0@fidonet
+ 01:43 [26326] addr: 4:90/0@fidonet
+ 01:43 [26326] addr: 4:900/0@fidonet
+ 01:43 [26326] addr: 4:902/0@fidonet
+ 01:43 [26326] pwd protected session (MD5)
- 01:43 [26326] session in CRYPT mode
+ 01:43 [26326] done (to 4:902/26@fidonet, OK, S/R: 0/0 (0/0 bytes))
  01:43 [26326] session closed, quitting...
  01:43 [26325] rc(26326)=0   
  01:43 [26325] the queue is empty, quitting...

Crashmail es el Tosser, es el programa que se encarga de procesar los archivos de paquetes que llegaron a la entrada del binkd y guardar los mensajes en las diferentes áreas, echomail y netmail.

Es importante tener en cuenta que al guardar las áreas se debe elegir el formato de base de datos de las mismas, en la versión que tengo soporta MSG y JAM.

El formato Standard MSG (FTS-1) genera un archivo por mensaje en el filesystem, 1.msg, 2.msg etc..

El formato JAM utiliza un par de archivos uno para guardar los manejes, otro de indice, etc.

Elegir uno u otro es a gusto, semejante a usar MailDir o Mbox para los clientes de correo de internet, cada uno tiene sus pro y contras.

El JAM seria mas “optimo” porque es mas rápido abrir una base en un solo archivo, pero tiene la contra de que si se corrompe ese archivo se pueden perder todos los mensajes.

En cambio, el MSG es mas costoso porque se tiene que abrir y cerrar cada archivo para cada mensajes, pero la buenas es que si se rompe 1 archivo a lo sumo se pierde un mensaje.

Como no manejo un gran volumen de mensajes, hoy el costo de almacenamiento no es tanto y velocidad de los equipos es suficiente, yo elegí en este caso usar el formato MSG.

Aparte creo que algún momento, con las bases JAM tuve bastantes problemas (posiblemente por algún bug de la época) en el cual se rompían constantemente y había que andar lidiando con utilidades para corregirlas/reindexarlas etc.

La versión que tengo instalada es de apt también (a la fecha de escribir esta guía con debian 12):

$ crashmail version
This is CrashMail II version 1.7

Operating system: Linux
Compilation date: Feb 14 2023
Compilation time: 15:28:58

Available messagebase formats:
 MSG        Standard *.msg messagebase as specified in FTS-1
 JAM        JAM Messagebase

Available nodelist formats:
 CMNL       CrashMail nodelist index
 V7+        Version 7+ format

En principio, crashmail va cumplir dos tareas:

SCAN: Va a buscar si escribimos mensaje en las áreas y los va a empaquetar para enviarlos a la cola de salida de binkd.

TOSS: Procesa los paquetes que entraron al binkd y los guarda en sus respectivas áreas como comentaba anteriormente.

EXPORT: Esta tarea toma las áreas que están configuradas en crashmail y general el archivo “areas.golded”. Este archivo luego se hace un “include” en la config de golded así levanta toda la bases de mensajes.

El archivo de configuración de crashmail lo vamos a guardar también dentro de /home/ragnarok/fido, es bastante mas extenso que binkd y tiene muchas opciones que también están autodocumentadas en los archivos de ejemplo que vienen en /usr/share/doc/crashmail

Igualmente voy a poner algunos comentarios de las opciones que son necesarias:

/home/ragnarok/fido/crashmail.prefs

; Datos de nuestro punto
SYSOP "Fernando Toledo"
AKA 4:902/26.10
DOMAIN "FidoNet"
DEFAULTZONE 4

; Base de duplicados, crashmail detecta duplicados
; y los elimina antes de cargarlos en las bases de las áreas
DUPEFILE "/home/ragnarok/fido/crashmail/crash.dupes" 200
DUPEMODE KILL

; Paths de entrada y de salida de paquetes mismo que binkd
INBOUND "/home/ragnarok/fido/in/"
OUTBOUND "/home/ragnarok/fido/out"

; Directorios temporales, estadísticas, logs etc
TEMPDIR "/home/ragnarok/fido/crashmail/tmp"
CREATEPKTDIR "/home/ragnarok/fido/crashmail/tmp"
PACKETDIR "/home/ragnarok/fido/crashmail/packets"
STATSFILE "/home/ragnarok/fido/crashmail/crash.stats"
LOGFILE "/home/ragnarok/fido/crashmail/crash.log"

; Opciones varias (ver docu de crashmail)
LOGLEVEL 6
LOOPMODE LOG+BAD
MAXPKTSIZE 50
MAXBUNDLESIZE 100
FORCEINTL
ANSWERRECEIPT
ANSWERAUDIT
CHECKSEENBY
PATH3D
IMPORTSEENBY
WEEKDAYNAMING
ADDTID
ALLOWKILLSENT
MSG_HIGHWATER
JAM_HIGHWATER
JAM_LINK
JAM_QUICKLINK
JAM_MAXOPEN 5

; Grupos de áreas. Uno puede agrupar las áreas, por ejemplo
; si se usaran varias redes en el mismo sistema, se podría
; crear un grupo para cada una de ellas
GROUPNAME D "Dock Sud"
GROUPNAME L "Local"
 
DEFAULTGROUP D

; Definiciones de los empaquetadores (en este caso para .zip)
PACKER "ZIP" "zip -D %a %f" "unzip %a" "PK"

; Acá indicamos que para el nodo de nuestro uplink/boss empaquete los mensajes
; con un password definido (que se acuerda con el sysop de ese uplink/boss)
NODE 4:902/26 "ZIP" "123456" PACKNETMAIL AUTOADD

; Definimos el ruteo que para salir a las otras 
; zonas debemos enviar a traves de nuestro uplink/boss 
ROUTE "1:*/*.*" "4:902/26.0" 4:902/26.10
ROUTE "2:*/*.*" "4:902/26.0" 4:902/26.10
ROUTE "3:*/*.*" "4:902/26.0" 4:902/26.10
ROUTE "4:*/*.*" "4:902/26.0" 4:902/26.10

; Definición del area por defecto, a modo de plantilla todas las areas nuevas se 
; crearían dentro del path especificado y con el formato MSG
AREA "DEFAULT_D" 4:902/26.10 MSG "/home/ragnarok/fido/areas/echo/fido/%a"
GROUP D

; Definimos un area para los netmails
NETMAIL "Netmail-fido" 4:902/26.10 MSG "/home/ragnarok/fido/areas/netmail-fido"
GROUP N

; Definición del un area de "bad echos" que es por si hay alguno problema con ellos
AREA "Bad-fido" 4:902/26.10 MSG "/home/ragnarok/fido/areas/bad-fido"
GROUP N

; Definiciones de areas echomail. A medida que vamos recibiendo echos, este
; archivo se va modificando y se van agregando (append) las definiciones de las 
; areas de forma automática.
; Se debe agregar en AREA:
;  - el nombre del area (o tambien lalamdo TAG de fidonet)
;  - nuestra direccion FTN quien recibe los mensajes
;  - el formato de la base de mensajes (MSG)
;  - el path destino de la base de mansaje
; Luego se agrega los EXPORTS. Cuando enviamos un mensaje a un area y hacemos crashmail SCAN, se
; encargará de genera los paquees para esos destinos (para ese caso, nuestro uplink/boss)  
; Asi como tambien la DESCRIPCION o el GRUPO para luego en el golded por ver las areas
; agrupadas si lo desean
AREA "ZONA4.GENERAL" 4:902/26.10 MSG "/home/ragnarok/fido/areas/echo/fido/ZONA4_GENERAL"
EXPORT %4:902/26.0
GROUP D
 
AREA "REGION90" 4:902/26.10 MSG "/home/ragnarok/fido/areas/echo/fido/REGION90"
EXPORT %4:902/26.0
GROUP D
 
AREA "ESP.PRUEBAS" 4:902/26.10 MSG "/home/ragnarok/fido/areas/echo/fido/ESP_PRUEBAS"
DESCRIPTION "Area de pruebas ESP.PRUEBAS"
EXPORT %4:902/26.0
GROUP D

Teniendo esa configuracion podriamos hacer un TOSS para procesar paquetes que llegaron al binkd ejecutando:

crashmail settings crashmail.prefs toss nosecurity

Entonces, podemos ver que un paquete fue procesado y que se recibió 1 mensaje al área netmail-fido:

CrashMail II 1.7 started successfully!
Packets will be tossed without security checks
Tossing files in /home/ragnarok/fido/in/...
Tossing 8tb3ktle.pkt (1K) from 4:902/26.0 (17-Nov-24 01:45:57) / pw, 4d
Is in HandleMessage()  
                      
Area Netmail-fido -- 1 messages

   Total ->     Read messages:      1     Written messages:      0
Imported -> Imported messages:      1      Routed netmails:      0
     Bad ->      Bad messages:      0   Duplicate messages:      0

Podemos hacer un scan para ver si hay mensajes que se deben enviar:

crashmail settings crashmail.prefs scan
CrashMail II 1.7 started successfully!
Scanning all areas for messages to export
Found area Netmail-fido
Scanning area Netmail-fido
Found area Bad-fido
Scanning area Bad-fido
Found area DEFAULT_D
Skipping area because it has no messagebase or area type is not echomail or netmail..
Found area ZONA4.GENERAL
Scanning area ZONA4.GENERAL
Found area REGION90
Scanning area REGION90
Found area ESP.PRUEBAS
Scanning area ESP.PRUEBAS

No messages exported
Scanning for orphan files
Scanning for old packets
Scanning for new files to pack
CrashMail end
crashexport crashmail.prefs areas.golded golded

Tener en cuenta que el comando es crashexport y no produce ninguna salida si no hay error como todo comando en GNU/Linux.

Pero podemos ver el archivo generado:

cat areas.golded 
; Generated by CrashExport 1.7
; Sun Nov 17 17:21:54 2024

AREADEF Netmail-fido "" 0 NET FTS1 /home/ragnarok/fido/areas/netmail-fido 4:902/26.10 (Loc Pvt)
AREADEF Bad-fido "" 0 ECHO FTS1 /home/ragnarok/fido/areas/bad-fido 4:902/26.10 (Loc)
AREADEF ZONA4.GENERAL "" D ECHO FTS1 /home/ragnarok/fido/areas/echo/fido/ZONA4_GENERAL 4:902/26.10 (Loc)
AREADEF REGION90 "" D ECHO FTS1 /home/ragnarok/fido/areas/echo/fido/REGION90 4:902/26.10 (Loc)
AREADEF ESP.PRUEBAS "" D ECHO FTS1 /home/ragnarok/fido/areas/echo/fido/ESP_PRUEBAS 4:902/26.10 (Loc)

NOTA: Finalmente y antes de continuar con la configuración de Golded+, como resultado de la definiciones previas, deberíamos tener una estructura de directorios similar a esta:

fido/
├── areas
│   ├── bad-fido
│   ├── echo
│   │   └── fido
│   │       ├── ESP_PRUEBAS
│   │       ├── REGION90
│   │       └── ZONA4_GENERAL
│   └── netmail-fido
├── crashmail
│   ├── packets
│   └── tmp
├── filebox
├── in
└── out

Configurar golded lleva un poco mas de esfuerzo pero no es imposible. Inclusive si uno tiene errores de configracion he notado que golded ( al menos en GNU/Linux) no genera un error en la consola, si no que, simplemente se ejecuta y no hace nada.

Por eso me parece que tener un archivo de ejemplo funcional ayuda bastante sobre todo al inicio.

En primer lugar, lo mas probable es que se tenga que bajar el source desde Github y compilarlo. Al menos en debian12 no esta vía repositorios.

Si bien se escapa un poco de esta guía, los pasos a seguir son los siguientes:

Clonar el repo desde github:

git clone https://github.com/golded-plus/golded-plus

Entrar al directorio golded3 dentro del clonado:

cd golded-plus
cd golded3

Generar el archivo mygolded.h a partir del que viene de ejemplo:

cp mygolded.__h mygolded.h

Editar las primeras lineas del archivo mygolded.h (entre la 13 y la 20), donde se debe poner tu nombre tu direccion de FTN y un email de internet:

  #undef __GVER_VENDOR_NAME__
  #define __GVER_VENDOR_NAME__ "Put in your full name here"
  #undef __GVER_VENDOR_FIDO__
  #define __GVER_VENDOR_FIDO__  "your Fidonet-AKA"
  #undef __GVER_VENDOR_EMAIL__
  #define __GVER_VENDOR_EMAIL__ "your email@address"   

Por ejemplo:

  #undef __GVER_VENDOR_NAME__
  #define __GVER_VENDOR_NAME__ "Fernando Toledo"
  #undef __GVER_VENDOR_FIDO__
  #define __GVER_VENDOR_FIDO__  "4:902/26.10"
  #undef __GVER_VENDOR_EMAIL__
  #define __GVER_VENDOR_EMAIL__ "ragnarok@docksud.com.ar"

Volver a la raiz del repositorio (golded-plus):

cd ..

Crear un dictorio build para cmake:

mkdir build

Generar el build y compilar:

cd build
cmake ..
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for snprintf
-- Looking for snprintf - found
-- Looking for vsnprintf
-- Looking for vsnprintf - found
-- Looking for stdarg.h
-- Looking for stdarg.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for time.h
-- Looking for time.h - found
-- Looking for errno.h
-- Looking for errno.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for io.h
-- Looking for io.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for 4 include files stdarg.h, ..., string.h
-- Looking for 4 include files stdarg.h, ..., string.h - found
-- Looking for include files time.h, sys/time.h
-- Looking for include files time.h, sys/time.h - found
-- Found Curses: /usr/lib/x86_64-linux-gnu/libcurses.so  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ragnarok/src/ftoledo/golded-plus/build
make
[  1%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/affentry.cxx.o
[  1%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/affixmgr.cxx.o
[  2%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/csutil.cxx.o
[  2%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/filemgr.cxx.o
[  2%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/hashmgr.cxx.o
[  3%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/hunspell.cxx.o
[  3%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/hunzip.cxx.o
[  4%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/phonet.cxx.o
[  4%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/replist.cxx.o
[  4%] Building CXX object goldlib/hunspell/CMakeFiles/hunspell.dir/suggestmgr.cxx.o
[  5%] Linking CXX static library libhunspell.a
[  5%] Built target hunspell
[  5%] Building CXX object goldlib/gall/CMakeFiles/gall.dir/gbmh.cpp.o
[  5%] Building CXX object goldlib/gall/CMakeFiles/gall.dir/gcharset.cpp.o
[....]
[ 97%] Building CXX object golded3/CMakeFiles/golded.dir/gmarea.cpp.o
[ 98%] Building CXX object golded3/CMakeFiles/golded.dir/gehtml.cpp.o
[ 98%] Building CXX object golded3/CMakeFiles/golded.dir/golded3.cpp.o
[ 98%] Linking CXX executable golded
/usr/bin/ld: ../goldlib/uulib/libuulib.a(uunconc.cpp.o): en la función `UUDecode(_uulist*)':
uunconc.cpp:(.text+0x3686): aviso: the use of `tempnam' is dangerous, better use `mkstemp'
/usr/bin/ld: CMakeFiles/golded.dir/gedoit.cpp.o: en la función `WriteMsgs(GMsg*)':
gedoit.cpp:(.text+0xae3): aviso: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
[ 98%] Built target golded
[ 99%] Building CXX object goldnode/CMakeFiles/goldnode.dir/goldnode.cpp.o
[ 99%] Building CXX object goldnode/CMakeFiles/goldnode.dir/__/golded3/golded3.cpp.o
[ 99%] Linking CXX executable goldnode
/usr/bin/ld: ../goldlib/gall/libgall.a(gfilutl1.cpp.o): en la función `TestLockPath(char const*)':
gfilutl1.cpp:(.text+0x85c): aviso: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
[ 99%] Built target goldnode
[ 99%] Building CXX object rddt/CMakeFiles/rddt.dir/rddt.cpp.o
[ 99%] Building CXX object rddt/CMakeFiles/rddt.dir/__/golded3/golded3.cpp.o
[100%] Linking CXX executable rddt
/usr/bin/ld: ../goldlib/gall/libgall.a(gfilutl1.cpp.o): en la función `TestLockPath(char const*)':
gfilutl1.cpp:(.text+0x85c): aviso: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
[100%] Built target rddt

Si compiló todo bien, lo instalamos (Como root o por ejemplo usando sudo):

sudo make install
[  5%] Built target hunspell
[ 30%] Built target gall
[ 48%] Built target gcfg
[ 55%] Built target gcui
[ 56%] Built target smblib
[ 72%] Built target gmb3
[ 76%] Built target uulib
[ 98%] Built target golded
[ 99%] Built target goldnode
[100%] Built target rddt
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/bin/golded
-- Installing: /usr/local/bin/goldnode
-- Installing: /usr/local/bin/rddt
-- Installing: /usr/local/share/doc/golded-plus/copying
-- Installing: /usr/local/share/doc/golded-plus/copying.lib
-- Installing: /usr/local/share/man/man1/golded.1
-- Installing: /usr/local/share/man/man1/goldnode.1
-- Installing: /usr/local/share/man/man1/rddt.1
-- Up-to-date: /usr/local/share/doc/golded-plus/cfgs
-- Installing: /usr/local/share/doc/golded-plus/cfgs/File_id.diz
-- Up-to-date: /usr/local/share/doc/golded-plus/cfgs/template
-- Installing: /usr/local/share/doc/golded-plus/cfgs/template/golded.tpl
-- Installing: /usr/local/share/doc/golded-plus/cfgs/template/email.tpl
-- Installing: /usr/local/share/doc/golded-plus/cfgs/template/default.tpl
[.....]
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/charsets.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.ger
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldkeys.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.ru2
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.ru3
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/aliasru.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/gedlngdk.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/gedlngus.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/gedcolor.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldhelp.rus
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.nl
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.it
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.sv
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/gedlngit.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldkeys.rus
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/advanced.cfg
-- Installing: /usr/local/share/doc/golded-plus/cfgs/config/goldlang.rus

Una vez compilado e instalado, generamos el archivo /home/ragnarok/fido/golded.cfg (tambien por compatibilidad toma el archivo si termina con la extension .conf).

/home/ragnarok/fido/golded.cfg
// Datos de nuestro punto
username Fernando Toledo
address 4:902/26.10
 
// incluir el archivo de areas que genera crashexport
include areas.golded
 
// includes de paths de archivos de config de la instalacion
// tengan en cuenta que por defecto se instala en /usr/local
// y si estos includes no estan el golded no inicia 
include /usr/local/share/doc/golded-plus/cfgs/colorset/gedcol02.cfg
xlatpath /usr/local/share/doc/golded-plus/cfgs/charset
include  /usr/local/share/doc/golded-plus/cfgs/config/charsets.cfg
 
// algunas configs para converir los charsets
// posiblemente alguien en fido me paso estas opciones
// y veo bien las tildes y demas caracters
xlatimport ibmpc
xlatcharset  ibmpc   latin-1 ibm_iso.chs
xlatcharset  latin-1 ibmpc   iso_ibm.chs
xlatcharset  latin-1 latin-1 iso_iso.chs
xlatcharset  ibmpc   ibmpc   ibm_ibm.chs
 
// configuracion de los paths para los nodelists
NODEPATH /home/ragnarok/fido/filebox/nodelist/
NODEPATHFD /home/ragnarok/fido/filebox/nodelist/
NODEPATHIM /home/ragnarok/fido/filebox/nodelist/
NODEPATHV7 /home/ragnarok/fido/filebox/nodelist/
NODELIST NODELIST.099
NODELISTWARN yes
 
// Mostrar las lineas ocultas de los mensajes (kludges desconocidos).
VIEWHIDDEN YES
// Mostrar kludges conocidos. (Los que estan definidos e incluidos en la opción KLUDGE).
VIEWKLUDGE YES
// Iniciar con la vista de listado de mensajes.
MSGLISTFIRST yes
 
// otras opciones comunes, (ver docu de golded)
areascan *
ADDRESSBOOKADD ALWAYS
MSGLISTFAST YEs
MSGLISTHEADER yes
showdeleted no

; opciones para ver agrupadas las areas segun la letra de grupo 
; que nos exporta el crashmail al archivo areas.golded
AREALISTSORT G
AREASEP !N "Grupo Netmails" N Net
AREASEP !D "Grupo de Echomails" D Echo

Si todo está ok deberíamos poder ejecutar el comando golded (siempre parados sobre nuestro directorio raiz de fido, según el ejemplo en /home/ragnarok/fido)

Operación y Uso

Bien, se supone que hasta este momento tendríamos el sistema funcional.

Es muy importante verificar las rutas y las configuraciones, porque es algo común que sucede de poner mal un path o una opción, y el sistema completo falla y no se sabe por donde viene el inconveniente.

También es preciso entender como interactuan cada uno y en que momento trabaja. Porque entender el flujo de paquetes y procesos nos va a facilitar al momento de solucionar el problema y poder aislarlo donde ocurre.

El orden de los pasos serian:

  1. Ejecutar binkd para que llame a nuestros uplink/boss y nos traiga paquetes
  2. Ejecutar crashmail toss para procesar los paquetes recibidos y enviarlas a las bases de datos de las áreas
  3. Usar crashexport para generar el archivo de áreas de golded
  4. Abrir golded para leer o escribir mensajes algunos mensajes
  5. Ejecutar crashmail scan para generar paquetes con mensajes para enviar
  6. Ejecutar binkd nuevamente para enviar los paquetes generados

Los comandos a modo de ejemplo son:

/usr/sbin/binkd -p -P 4:902/26 binkd.cfg
crashmail settings crashmail.prefs toss
crashexport crashmail.prefs areas.golded golded
golded
crashmail settings crashmail.prefs scan
/usr/sbin/binkd -p -P 4:902/26 binkd.cfg

Obviamente y como tarea para el hogar, uno se puede hacer algún script de bash que automatice estas tareas, como para ejecutar un solo comando “mágico” que se llame “./usar_fido.sh” y listo.

Al ejecutar golded, de acuerdo a nuestra configuración, arranca con la vista de áreas, si seleccionamos una y le damos Enter, vamos a ver el listado de mensajes:

Para crear un nuevo mensaje se usa la tecla E (enter message)

Acá nos van a aparecer los campos para que ingresemos para quien va dirigido el mensaje (To:) y el asunto (Subj:). Así como también atributos que podamos asignarle al mensaje (Privado, Crash, Direct..etc ver docu de Golded para detalles de cada uno).

Luego de ingresas esos datos, damos de nuevo Enter y nos abre el popup donde seleccionamos Internal Editor para escribir el cuerpo del mensaje:

Ahora podemos escribir el cuerpo de nuestro mensaje:

Una vez que terminamos tocamos F2 para que abra el popup y confirmar el envío seleccionando “Yes, it's great stuff”. De esta forma el mensaje queda marcado para ser enviado y volveremos a la vista de mensajes.

Saliendo ahora de golded, vamos a enviar los mensajes, haciendo el scan y luego llamando a binkd:

crashmail settings crashmaik.prefs scan
CrashMail II 1.7 started successfully!
Scanning all areas for messages to export
Found area DEFAULT_D
Skipping area because it has no messagebase or area type is not echomail or netmail..
Found area Netmail-fido
Scanning area Netmail-fido
Found area Bad-fido
Scanning area Bad-fido
Found area ZONA4.GENERAL
Scanning area ZONA4.GENERAL
Found area REGION90
Scanning area REGION90
Found area ESP.PRUEBAS
Scanning area ESP.PRUEBAS
Inspecting message 802
Exporting message #802 from "Fernando Toledo" to "All" in ESP.PRUEBAS
Is in HandleMessage()

1 message exported
Scanning for orphan files
Scanning for old packets
Scanning for new files to pack
Packing 3aa1aa00.pkt for 4:902/26.0 with ZIP
  adding: home/ragnarok/fido/crashmail/tmp/3aa1aa00.pkt (deflated 46%)
Updating hwm for area ESP.PRUEBAS, old = 801, new = 802
CrashMail end

Ahí pudimos ver que hay un mensaje en cola y que se genero el paquete. Este quedará el el directorio de salida de binkd. Entonces ahora lo ejecutamos:

/usr/sbin/binkd -p -P 4:902/26 binkd.cfg
  23:13 [51544] BEGIN, binkd/1.1a-115/Linux -p -P 4:902/26 binkd.cfg
  23:13 [51544] creating a poll for 4:902/26@fidonet (`d' flavour)
  23:13 [51544] clientmgr started
$ -d 4:902/26@fidonet         
+ 23:13 [51545] call to 4:902/26@fidonet
  23:13 [51545] trying bbs.docksud.com.ar [186.123.101.23]...
  23:13 [51545] connected     
+ 23:13 [51545] outgoing session with bbs.docksud.com.ar:24554 [186.123.101.23]
- 23:13 [51545] OPT CRAM-MD5-341234123412312312341234 CRYPT
+ 23:13 [51545] Remote requests MD mode
+ 23:13 [51545] Remote requests CRYPT mode
- 23:13 [51545] SYS Dock Sud BBS
- 23:13 [51545] ZYZ Ragnarok  
- 23:13 [51545] LOC Dock Sud, Bs As, Argentina
- 23:13 [51545] NDL 115200,TCP,BINKP
- 23:13 [51545] TIME Sun Nov 17 2024 23:13:12 GMT-0300
- 23:13 [51545] VER BinkIT/2.41,JSBinkP/4,sbbs3.20a/Linux binkp/1.1
+ 23:13 [51545] addr: 4:902/26@fidonet
+ 23:13 [51545] addr: 666:1/1@latinet (n/a or busy)
+ 23:13 [51545] addr: 21:2/151@fsxnet (n/a or busy)
+ 23:13 [51545] addr: 618:500/45@micronet (n/a or busy)
+ 23:13 [51545] addr: 46:10/182@agoranet (n/a or busy)
+ 23:13 [51545] addr: 39:943/0@amiganet (n/a or busy)
+ 23:13 [51545] addr: 39:943/1@amiganet (n/a or busy)
+ 23:13 [51545] addr: 954:895/37@hobbynet (n/a or busy)
+ 23:13 [51545] addr: 15:1/1@zudaka (n/a or busy)
+ 23:13 [51545] addr: 15:1/0@zudaka (n/a or busy)
+ 23:13 [51545] addr: 15:0/0@zudaka (n/a or busy)
+ 23:13 [51545] addr: 4:0/0@fidonet
+ 23:13 [51545] addr: 4:90/0@fidonet
+ 23:13 [51545] addr: 4:900/0@fidonet
+ 23:13 [51545] addr: 4:902/0@fidonet
+ 23:13 [51545] pwd protected session (MD5)
- 23:13 [51545] session in CRYPT mode
+ 23:13 [51545] sending /home/ragnarok/fido/crashmail/packets/66405b2a.su0 as 66405b2a.su0 (609)
+ 23:13 [51545] sent: /home/ragnarok/fido/crashmail/packets/66405b2a.su0 (609, 609.00 CPS, 4:902/26@fidonet)
+ 23:13 [51545] done (to 4:902/26@fidonet, OK, S/R: 1/0 (609/0 bytes))
- 23:13 [51545] rc=0          
  23:13 [51545] session closed, quitting...
  23:13 [51544] rc(51545)=0   
  23:13 [51544] the queue is empty, quitting...

De esa manera, el menaje ha sido enviado.

Tips y problemas comunes

Hay algo que no supe ajustar correctamente aun. Es que desde el binkd.cfg uno pone las lineas de exec para directamente se haga el toss ni bien llegan los paquetes.

Eso nos ahorraría de ejecutar crashmail toss luego del binkd.

Por ejemplo:

exec "crashmail settings /home/ragnarok/fido/crashmail.prefs toss nosecurity" *.pkt 

Esto se dispara si vienen archivos .pkt. Pero el tema es que también nos llegan bundles (que son comprimidos de paquetes) como por ejemplo ftg12hg2.M01.

En este caso el toss a eso no se hace, porque primero se deberían “descomprimir” por así decirlo los bundles.

Posiblemente tengo que investigar mejor de como hacer una linea de exec que sirva para todo (o quizás tengan que ser varias, ya lo veré).

Así que mientras tanto, lo solucioné con un script de bash que luego del binkd, recorre los archivos de su inbound y por cada uno hace un crashmail tossfile.

Para la opción de tossfile de crashmail, uno debe pasar como parámetro el nombre de archivo que quiere procesar.

poll.sh
cd /home/ragnarok/fido
while [ 1 ]
do
    crashmail settings crashmail.prefs scan toss
    crashexport crashmail.prefs areas.golded golded
    /usr/sbin/binkd -p -P 4:902/26 binkd.cfg
 
    for b in `find "$(pwd)/in" -type f`
    do 
        crashmail settings crashmail.prefs tossfile $b
    done
    for a in `seq 1 5`
    do
        echo "Sleep $a de 5"
        sleep 1m
    done
done

Lo que hago es, abro una terminal y ejecuto poll.sh, esto queda en un loop infinito (hasta que lo corte con CTRL+c) que cada 5 minutos que básicamente “envía y recibe” todo el tiempo. Luego abro otra terminal con el golded y ahí leo o escribo mensajes normalmente. Y en definitiva, cuando termino, corto el proceso del poll.sh. Ese seria mi “workflow” para usar el sistema

Se que es un poco redundante y que posiblemente no sea la opción más óptima, pero es la que me sirve por ahora.

A golded le falta, que si tiene algún error en su config, envíe un buen mensaje con error de salida a la consola (ideal seria al stderr), para uno saber problema hay.

Un ejemplo es que si no están incluídas las opciones de caracteres, xlats y demas, cuando ejecutan el comando golded no hace nada de nada.

Por lo tanto, asegúrense de tener estas lineas configuradas en su golded.cfg

include /usr/local/share/doc/golded-plus/cfgs/colorset/gedcol02.cfg
xlatpath /usr/local/share/doc/golded-plus/cfgs/charset
include  /usr/local/share/doc/golded-plus/cfgs/config/charsets.cfg

Calculo que esto dependera del build o versión de golded, pero al menos el que compilo desde el git “oficial” se las tengo que agregar al archivo de configuración.

  • ar/guia_binkd_crashmail_golded.txt
  • Última modificación: 2024/11/18 23:50
  • por ragnarok