bash-description-ook/README.md

72 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

2024-08-27 05:55:13 +00:00
# ook
## Situació
El programari `BBBS` implementa de manera nativa la gestió automàtica i desassistida de fitxers d'usuari quan aquests arriben per canals de distribució `TIC`(propis de *FidoNet*). Així, de manera transparent, el sistema:
- Importa els nous fitxers.
- Actualitza les noves versions dels fitxers existents.
- Distribueix als diferents links els respectius fitxers d'acord amb les seves respectives configuracions.
EL programari `BBBS` també contempla la gestió anterior de manera manual i assistida, a través dels menús propis del sistema en connexió local o telnet.
### Problema
El programari `BBBS` no contempla l'addició, ni manual ni automàtica, de nous fitxers si aquests no s'incorporen al sistema mitjançant els dos mètodes anteriors.
Imaginem alguns casos d'ús d'incorporacions:
- Col·leccions de fitxers (p. ex. una sèrie de capítols d'un còmic, a fitxer per capítol)
- Fitxers serialitzats (p. ex. un fitxer de gran mida comprimit en volums, a fitxer per volum)
- Conjunt de fitxers independents en una carpeta comuna (p. ex. les fotografies diàries que fa la NASA, a fitxer per foto)
En aquests casos, per a posar a disposició dels meus usuaris aquests fitxers, hauria d'optar entre aquestes dues opcions:
- Crear manualment un fitxer `.TIC` per a cada nou fitxer i importar-lo al sistema (això semi-automatitzaria bellugar el fitxer de la carpeta `inbound` a la destinació predefinida per l'àrea `TIC`, i actualitzaria l'índex en el seu respectiu fitxer `descript.ion`[^1]).
- Bellugar el fitxer a l'ubicació apropiada i actualitzar el fitxer `descript.ion` que fa d'índex de fitxers en cada una de les carpetes de la base de fitxers del `BBS`.
En tots dos casos, l'esforç és molt superior al benefici i, en el meu cas, justifica que tingui *terabytes* d'informació pendents d'incorporar a `EOTB`.
## Solució
He desenvolupat `ook.sh`, un *script* en `bash` que ha de donar resposta a aquesta necessitat, com a eina de suport a un `SysOp` de `BBBS`.
`ook.sh` genera i/o manté els fitxers `descript.ion` a partir de la descripció `FILE_ID.DIZ` dels fitxers `ZIP` que se l'hi indiquen, en una ubicació estàtica o recursiva.
### Requisits
`ook.sh` necessita que les utilitats `unzip`, `grep`, `file` i `stat` estiguin disponibles en el sistema per tal de poder efectuar les operacions necessàries.
Tanmateix, aquest *script* s'ha provat en un `shell` `bash` compatible, de manera que si fas servir un altre `shell` pot ser necessari ajustar-lo en corcondànça. Això podria aplicar-se a `Windows WSL` fent possible executar aquest *script* en una instal·lació de `BBBS` sobre `MS Windows`.
### Funcionalitat:
- **Magic Number**: Utilitzo la comanda `file` per a assegurar que un arxiu processable sigui realment un ZIP[^2], verificant si la sortida de la comanda conté `'Zip archive data'`.
- **Processament de ZIP**: Per a cada arxiu `ZIP`, l'*script* verifica si ja està registrat en el seu `descript.ion`. Si ho està, omet el seu processat. En cas de no estar-ho, extreu[^3] el contingut del fitxer `file_id.diz` (*case-insensitive*) i l'incorpora en el `descript.ion`, en la mateixa línia que el nom de l'arxiu `ZIP`, substituint els salts de línia amb `@n` (codificació que `BBBS` interpreta com a salt de línia).
- **Recursivitat**: Si s'especifica el paràmetre `-r`, l'*script* processa de manera recursiva tots els subdirectoris. Si no, només processa el directori actual.
- **Processar un ZIP específic**: Si s'especifica el paràmetre `-s` seguit del nom d'un arxiu `ZIP`, només es processa aquest arxiu.
- **Resum**: En finalitzar la seva execució, el *script* mostra un resum amb el nombre total de nous arxius `ZIP` processats i la mida total en bytes d'aquests arxius.
### Execució:
En el `path` on s'executa:
- **Mode directori recursiu**: `./ook.sh -r`
- **Mode ZIP específic**: `./ook.sh -s arxiu.zip`
- **Mode directori actual (sense recursivitat)**: `./ook.sh`
[^1]: A títol informatiu en el repositori incloc l'especificació original del format `DESCRIPT.ION` de `JP Software Inc.`.
[^2]: No contemplo el fet d'incorporar altres dels compressors suportats per `BBBS` perquè `ZIP` és el meu estàndard.
[^3]: No contemplo el processat de fitxers `ZIP` protegits amb paraula de pas perquè `BBBS` ja gestiona la seguretat d'accés granular als continguts.
`<EOF>`