Poster sur Usenet (newsgroups) avec ngPost (Windows GUI / Linux CLI)

newgroups 23 août 2021

Qu’on soit néophyte ou utilisateur confirmé de Usenet, c’est toujours sympa d’utiliser un outil complet et simple d’utilisation (qui évite X scripts comme j’avais, surtout quand on n’est pas doué :P)

Pour rappel (mon article date un peu mais le principe reste le même), Usenet est un système d’échange de messages (et de fichiers, ce qui nous intéresse ici) qui repose sur une forme de DDL (donc pas d’HADOPI) puisque c’est hébergé sur les serveurs des FAU (Fournisseurs d’Accès à Usenet). Ils permettent une rétention d’environ 13 ans (4700+ jours), qui va en s’accroissant, et il est préférable de chiffrer les noms des posts (obfuscation) tout comme de mettre des mots de passe afin d’éviter la censure automatisée via des bots (DMCA), selon ce qu’on veut poster.

Les FAU se repassent les contenus (feed-in/out) ce qui permet, en théorie, de retrouver un contenu (non censuré) vieux de 13 ans alors qu’on l’a par exemple posté via un FAU avec un faible délai de rétention (ses serveurs en propre).

Poster est le fait de déposer des fichiers sur Usenet, les référencer celui de les mettre en ligne sur un site à la manière des trackers BitTorrent (ou un outil auto-hébergé type nZEDb). Vous pouvez tout aussi bien les conserver chez vous puisque là encore comme pour les .torrent, les .nzb sont du type mon.fichier.nzb.

mBruel a créé ngPost, un outil complet de post (rar/7zip.par2/parpar/obfuscation ou non/mot de passe ou non/check/auto via monitoring de dossier/à la volée/groupés) qui fonctionne sur Windows/MacOS/Linux/Rasp, que ce soit via une interface (GUI) ou en lignes de commande (CLI).
Je vais m’atteler ici à présenter, dans les grandes lignes, le post depuis la GUI de Windows et le CLI sous Linux (Ubuntu 20).
Il est préférable d’utiliser cet outil (comme de télécharger sur Usenet) sur du SSD ou NVMe pour un gain de performance.

Windows

Pour le détail je vous laisse consulter la doc (VF). Voici un exemple de configuration avec 2 FAU (qui permettent le POST), sur 1 des 2 groupes que j’ai choisis (alt.binaries.boneless,alt.binaries.boneless.nl), avec email + mot de passe auto-générés à chaque post, compression (RAR), 16% de PAR2 et l’obfuscation du nom des archives. Ce dernier paramètre impliquant que si on perd le .nzb final on ne pourra pas retrouver le fichier en parcourant les newsgroups (ce qui évite la censure).

Et le fichier de configuration (qui reprend la plupart des éléments de la GUI) qui se trouve dans C:\ngPost\v4.14_x64

# fichier de configuration de ngPost
#
#

## Langue de l'application. Pour l'instant sont supportées: EN, FR, ES, DE
lang = FR

## Utilisation d'un Proxy (uniquement de type Socks5!)
#PROXY_SOCKS5 = user:[email protected]:5555

## dossier de destination par défaut pour les fichiers nzb
## si vous n'indiquez rien,le nzb sera écrit dans le dossier de ngPost sous Windows et dans /tmp pour Linux et MacOS
## l'option -o avec le chemin complet du nzb prendra le dessus sur le dossier de destination par défaut
nzbPath  = C:/ngPost/nzb

## Command pour éteindre l'ordinateur lorsque tous les posts sont finis
## ceci doit principalement être utilisé pour l'option automatique de scan
## vous pouvez si vous le souhaitez utiliser n'importe quel autre script (comme pour envoyer un mail)
#SHUTDOWN_CMD = shutdown /s /f /t 0  (Windows)
#SHUTDOWN_CMD = sudo -n /sbin/poweroff  (Linux, la commande doit avoir les droits sudoers sans password pour l'utilisateur courant)
#SHUTDOWN_CMD = sudo -n shutdown -h now (MacOS, la commande doit avoir les droits sudoers sans password pour l'utilisateur courant)
SHUTDOWN_CMD = shutdown /s /f /t 0

## upload le fichier nzb sur une URL spécifique
## seuls les protocoles HTTP, HTTPS et FTP sont supportés (pas de FTPS ou SFTP)
#NZB_UPLOAD_URL = ftp://user:pass@url_or_ip:21

## exécute une commande ou un script à la fin de chaque post (cf examples)
## il est possible d'utiliser plusieurs post commandes en définissant plusieurs lignes NZB_POST_CMD
## voici la liste des différents placeholders
##   __nzbPath__          : chemin complet du fichier nzb
##   __nzbName__          : nom du fichier nzb sans l'extension (nom de la source)
##   __rarName__          : nom des archives (en cas d'obfuscation)
##   __rarPass__          : mot de passe des archives
##   __sizeInByte__       : taille du post (avant l'encodage yEnc)
##   __groups__           : liste des Groupes (séparés par une virgule)
##   __nbFiles__          : nombre de fichiers du post
##   __nbArticles__       : nombre d'Articles
##   __nbArticlesFailed__ : nombre d'articles en erreur (non postés)
#
#NZB_POST_CMD = scp "__nzbPath__" myBox.com:~/nzbs/
#NZB_POST_CMD = zip "__nzbPath__.zip" "__nzbPath__"
#NZB_POST_CMD = ~/scripts/postNZB.sh "__nzbPath__" "__groups__" __rarName__ __rarPass__ __sizeInByte__ __nbFiles__ __nbArticles__ __nbArticlesFailed__
#NZB_POST_CMD = mysql -h localhost -D myDB -u myUser -pmyPass-e "INSERT INTO POST (release, rarName, rarPass, size) VALUES('__nzbName__', '__rarName__', '__rarPass__', '__sizeInByte__')"
#NZB_POST_CMD = cmd.exe /C move "__nzbPath__" "C:\ngPost\nzb\__nzbName__{{__rarPass__}}.nzb"
#NZB_POST_CMD = curl -X POST -F "file=@__nzbPath__" -F "api=12345" -F "cat=45" -F "private=no" https://usenet.com/post-api

## les fichiers nzb sont créés dans le répertoire par défaut nzbPath
## mais avec cette option, les fichiers nzb provenant d'un dossier à surveiller iront chacun dans leur dossier (qui sera créé dans nzbPath)
#MONITOR_NZB_FOLDERS = true

## pour la surveillance de dossier, liste des extensions à prendre en compte (séparation par des virgules, sans point)
#MONITOR_EXTENSIONS = mkv,mp4,avi,zip,tar,gz,iso

## pour la surveillance de dossier, ignorer les nouveaux dossiers
#MONITOR_IGNORE_DIR = true


## répertoire par défaut pour l'ajout de nouveaux fichiers dans les posts rapide de l'interface graphique
inputDir = H:/ngPostMonitor

## Fichier historique des posts
## chaque post réussi ajoutera une ligne dans le fichier csv avec la date, le nom du nzb, le nom de l'archive, le password...
POST_HISTORY = C:\ngPost\ngPost_history.csv

## Caractère utilisé pour la séparation des champs du fichier d'historique
#FIELD_SEPARATOR = ;

GROUPS   = alt.binaries.boneless,alt.binaries.boneless.nl

## Si plusieurs groupes sont disponibles (séparés par une virgule), il y 3 modes d'utilisation:
## ALL: tout est posté sur tous les groupes
## EACH_POST : chaque post sera publié sur un groupe aléatoire de la liste fournie
## EACH_FILE : chaque fichier sera publié sur un groupe aléatoire de la liste fournie
GROUP_POLICY = EACH_POST

## pour utiliser le même email de posteur à chaque fois
## si commenté, UN nouvel email sera généré à chaque démarrage de ngPost pour toute la session
#FROM = [email protected]

## Générer un nouvel email aléatoire pour le posteur pour chaque Post (--auto or --monitor)
## Si cette option est active, l'email du FROM au dessus sera ignoré
GEN_FROM = true


## limiter le nombre de Threads (par défaut, on utilisera le nombre de coeurs disponibles)
## toutes les connexions sont distribuées sur l'ensemble des Threads
thread  =  50


## Affichage de la progression: NONE, BAR (bare de progression), FILES
DISP_Progress = BAR
#DISP_Progress = FILES


## suffix des Message-Ids des Articles (cf le fichier nzb)
#msg_id  =  ngPost

## taille des Articles (défaut 700ko)
article_size = 716800

## nombre de tentative de rePost des Articles (probablement due au fait que son Message-Id existe déjà)
retry = 5


## Obfuscation des Articles (le sujet est remplacé par le Message-Id et le posteur est aléatoire)
## /!\ ATTENTION!!! avec cette option les posts sont introuvables sans le fichier nzb! /!\
obfuscate = article

## suppression des accents et des caractères spéciaux des noms de fichier des nzb
NZB_RM_ACCENTS = true

## fermeture des onglets de Posts rapide à chaque fin de Post réussi (pour le GUI)
AUTO_CLOSE_TABS = true


## temps d'attente (en secondes) avant d'essayer de recommencer le post automatiquement lors d'une perte de réseau (min: 30)
RESUME_WAIT = 30

## Par défaut ngPost essaye de recommencer à poster lors des pertes de réseau.
## il continuera à essayer jusqu'à ce que le réseau revienne et que le post soit fini
## vous pouvez désactiver cette fonctionnalité et ngPost s'arrêtera lors d'une perte de réseau
#NO_RESUME_AUTO = true

## si il n'y a plus d'activité sur une connection elle sera fermée puis ré-ouverte
## La durée est en seconde, par défaut: 30, min: 5
SOCK_TIMEOUT = 30

## quand il y a des posts en attente, le packaging (compression + par2) du Post suivant sera fait en parallèle du Post courant
PREPARE_PACKING = true




##############################################################
##           Compression and par2 section                   ##
##############################################################

## compression automatique avec nom et mot de passe aléatoire et génération des par2
AUTO_COMPRESS = true

## utilisation du même mot de passe pour tous les Posts utilisant la compression
#RAR_PASS = yourPassword

## répertoire dans lequels les fichiers compressés et par2 seront écrits (puis supprimés)
## afin de pouvoir poster des fichiers que l'on aura d'abord compressés (avec mot de passe si besoin)
## /!\ Ce répertoire doit avoir les droits en écriture! /!\
## à changer selon votre système d'exploitation
TMP_DIR = D:/ngPostCompression

## dossier temporaire avec une taille limitée, typiquement une partition tmpfs
## la taille du post multipliée par le ratio TMP_RAM_RATIO doit être disponible sur le disque
## sinon ngPost utilisera TMP_DIR (sans vérification)
## (décommentez et définissez TMP_RAM pour activer la fonctionalité, attention le dossier doit avoir les droits en écriture)
#TMP_RAM = /mnt/ngPost_tmpfs

## ratio utilisé sur les fichiers sources afin de compenser la redondance par2
## le minimum est 10% pour raison de sécurité (donc 1.1), le maximum est 2.0
TMP_RAM_RATIO = 1.1

## chemin d'accès complet de l'éxécutable RAR ou 7zip
## /!\ le fichier DOIT EXISTER et ÊTRE ÉXÉCUTABLE /!\
## à changer selon votre système d'exploitation
RAR_PATH = C:/Program Files/WinRAR/Rar.exe

## RAR EXTRA options (le premier 'a' et '-idp' sont ajoutés automatiquement)
## -hp sera aussi ajouté automatiquement si vous utilisez --gen_pass ou --rar_pass ou via l'interface graphique
## -v42m sera aussi ajouté automatiquement avec l'option --rar_size ou via l'interface graphique
## vous pouvez changer le niveau de compression, bloquer l'archive,...
#RAR_EXTRA = -ep1 -m0 -k -rr5p
#RAR_EXTRA = -mx0 -mhe=on   (for 7-zip)

## taille en Mo des volumes RAR (0 équivalent à une seule archive)
## changez la valeur ou commentez la ligne si vous ne voulez pas découper l'archive en plusieurs volumes
RAR_SIZE = 42

## nombre maximum d'archives (volumes)
## ngPost utilise en priorité RAR_SIZE sauf si cela génèrerait trop de volumes
## dans ce cas, ngPost utlisera rar_size = <taille du post> / rar_max
RAR_MAX = 99

## garder les archives et par2 après le post (sinon ils sont supprimés automatiquement si le post a réussi)
#KEEP_RAR = true

## Supprimer le dossier racine (parent) lors des compressions de dossiers avec RAR
#RAR_NO_ROOT_FOLDER = true

## pourcentage de redondance par2 (0 signifiant aucune génération)
PAR2_PCT = 16

## chemin d'accès complet de l'exécutable par2 (ou alternative)
## cette option est nécessaire si vous compilez l'application (par2cmdline étant inclus dans les packages portables)
## ou si vous souhaitez utiliser une autre application comme ParPar ou MultiPar
## (dans ce cas, il vous faudra aussi fournir les paramètres avec PAR2_ARGS ci dessous)
PAR2_PATH = C:\ngPost\v4.14_x64/parpar.exe
#PAR2_PATH = <your_path>parpar.exe
#PAR2_PATH = <your_path>par2j64.exe

## Paramètres fixes pour la commande par2 (ou alternative comme ParPar)
## vous pouvez par exemple utiliser MultiPar sous Windows
#PAR2_ARGS = -s5M -r1n*0.6 -m2048M -p1l --progress stdout -q   (for parpar)
#PAR2_ARGS = c -l -m1024 -r8 -s768000                 (for par2cmdline)
#PAR2_ARGS = create /rr8 /lc40 /lr /rd2               (for Multipar)
PAR2_ARGS = -s5M -r1n*0.6 -m2048M -p1l --progress stdout -q


## taille du nom de l'archive généré
LENGTH_NAME = 27

## taille du mot de passe aléatoire généré
LENGTH_PASS = 21




##############################################################
##                   servers section                        ##
##############################################################

[server]
host = news.eweka.nl
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 50
enabled = false
nzbCheck = false


[server]
host = news.usenet.farm
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 40
enabled = true
nzbCheck = false


[server]
host = nl.newsgroupdirect.com
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 50
enabled = true
nzbCheck = false


## Vous pouvez utiliser autant de serveurs que vous voulez en ajoutant une autre section "server"
#[server]
#host = news.otherprovider.com
#port = 563
#ssl  = true
#user = myOtherUser
#pass = myOtherPass
#connection = 15
#enabled = false
#nzbCheck = false

Après avoir configuré ngPost on peut poster directement en ajoutant un fichier dans l’onglet Post Rapide ou en en ajoutant plusieurs dans Post Auto. Puis cliquer sur Poster Fichiers.

ngPost va renommer le fichier de manière aléatoire, générer les .rar puis les .par et enfin poster le tout. Ce qui se retrouve dans les logs à droite (pour le détail affichez les infos debug de niveau 2) et [xx ok] dans l’onglet principal.

Et nous avons bien notre .nzb à la fin :

NZB que je vous partage et qui contient toutes les infos pour récupérer mon ISO d’Ubuntu 20.04 avec XFCE (Xubuntu).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.1//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.1.dtd">
<nzb xmlns="http://www.newzbin.com/DTD/2003/nzb">
  <head>
    <meta type="password">BgLOyf2Q9ezlpPWfxwxp9</meta>
  </head>

  <file poster="[email protected]" date="1629721396" subject="[01/46] - "wDPoBjdi1QxdFyghhXk6VtIlW3y.par2" yEnc (1/1) 17552">
    <groups>
      <group>alt.binaries.boneless</group>
    </groups>
    <segments>
      <segment bytes="17552" number="1">70f18a3c65de4bfcb999a99676f38cca@ngPost</segment>
    </segments>
  </file>
  <file poster="[email protected]" date="1629721399" subject="[03/46] - "wDPoBjdi1QxdFyghhXk6VtIlW3y.part02.rar" yEnc (1/62) 44040192">
    <groups>
      <group>alt.binaries.boneless</group>
    </groups>
    <segments>
      <segment bytes="716800" number="1">f2e28873ced345c1bb35f55c8fb66b20@ngPost</segment>
      <segment bytes="716800" number="2">c49fcec2e4244fe4af3cf9ac4b53c166@ngPost</segment>
      <segment bytes="716800" number="3">6ac32476b987430aa98854d4baafbd5f@ngPost</segment>
      <segment bytes="716800" number="4">2a1c380ecc6e4ebeb6295b69d8d4eae2@ngPost</segment>
      
[...]

      <segment bytes="716800" number="60">37aba1d3b92442628d07c800249e40a4@ngPost</segment>
      <segment bytes="716800" number="61">07656a65f89748ee89ba80bc8707d613@ngPost</segment>
      <segment bytes="716800" number="62">8bb71580026c4e6fbdadbd40f3d5b124@ngPost</segment>
      <segment bytes="716800" number="63">8e83259ac4334af9a897ebc6af5abe66@ngPost</segment>
      <segment bytes="716800" number="64">87a0ba7e73f7429c8e526dca71fe9a8f@ngPost</segment>
      <segment bytes="716800" number="65">69176772fd1c485e9354eb73d2f4abbf@ngPost</segment>
      <segment bytes="646956" number="66">ae80a2f76fc545718c913c69662bfab4@ngPost</segment>
    </segments>
  </file>
</nzb>

Fichier wDPoBjdi1QxdFyghhXk6VtIlW3y posté sur alt.binaries.boneless avec un mot de passe aléatoire (BgLOyf2Q9ezlpPWfxwxp9) et composé de 46 fichiers (donc posts différents).

Et je peux le télécharger (détail).

Bon à savoir, ngPost conserve un historique des posts dans C:\ngPost\ngPost_history.csv

Si vous voulez poster plusieurs fichiers sans rester devant l’écran, il suffit de les ajouter à l’onglet Post Auto

Il va ouvrir un onglet par post et commencer le 1er tout en lançant en parallèle la compression + par2 du fichier suivant.

Linux

mBruel propose des .appimage mais je préfère compiler (vous allez voir que c’est simple). Je suis sous Xubuntu (Ubuntu + XFCE).

Pour compiler il faut installer les dépendances de ngPost et de quoi compiler (captain Obvious!)

Cloner le Git de ngPost

git clone https://github.com/mbruel/ngPost.git

Installer les dépendances et de quoi compiler

sudo apt install build-essential qt5-default qt5-qmake

Puis se rendre dans le dossier src et lancer qmake et ensuite make. A la fin on obtient notre exécutable ngPost

Le plus simple pour pouvoir l’utiliser ensuite est de le déplacer dans /usr/bin ou /usr/sbin. De cette manière on peut le lancer directement avec la commande “ngPost”.

root@NUC2:/home/aerya/ngPost-4.14/src# cp ngPost /usr/bin/
root@NUC2:/home/aerya/ngPost-4.14/src# ngPost -v
The default config file doesn't exist:  "/root/.ngPost"
                   __________               __
       ____    ____\______   \____  _______/  |_
      /    \  / ___\|     ___/  _ \/  ___/\   __\
     |   |  \/ /_/  >    |  (  <_> )___ \  |  |
     |___|  /\___  /|____|   \____/____  > |__|
          \//_____/                    \/
                          v4.14

root@NUC2:/home/aerya/ngPost-4.14/src#

Comme je suis en mode crados (…) je l’ai lancé en root. Donc le fichier de configuration sera par défaut /root/.ngPost. Si on est censé, on le lance avec un User normal et on a donc le fichier de conf dans /home/aerya/.ngPost.
C’est le même fichier que pour Windows mais adapté à Linux bien évidemment. Il faut donc changer tous les chemins de type C:\ et ceux des exécutables.

On a besoin de rar/unrar

sudo apt install rar unrar

Mais aussi de parpar en suivant la documentation.

Par exemple, avec npm

sudo apt install npm
sudo npm install -g @animetosho/parpar --unsafe-perm

Ce qui nous donne ce fichier de configuration : /home/aerya/.ngPost

# fichier de configuration de ngPost
#
#

## Langue de l'application. Pour l'instant sont supportées: EN, FR, ES, DE
lang = FR

## Utilisation d'un Proxy (uniquement de type Socks5!)
#PROXY_SOCKS5 = user:[email protected]:5555

## dossier de destination par défaut pour les fichiers nzb
## si vous n'indiquez rien,le nzb sera écrit dans le dossier de ngPost sous Windows et dans /tmp pour Linux et MacOS
## l'option -o avec le chemin complet du nzb prendra le dessus sur le dossier de destination par défaut
nzbPath  = /home/aerya/nzbs

## Command pour éteindre l'ordinateur lorsque tous les posts sont finis
## ceci doit principalement être utilisé pour l'option automatique de scan
## vous pouvez si vous le souhaitez utiliser n'importe quel autre script (comme pour envoyer un mail)
#SHUTDOWN_CMD = shutdown /s /f /t 0  (Windows)
#SHUTDOWN_CMD = sudo -n /sbin/poweroff  (Linux, la commande doit avoir les droits sudoers sans password pour l'utilisateur courant)
#SHUTDOWN_CMD = sudo -n shutdown -h now (MacOS, la commande doit avoir les droits sudoers sans password pour l'utilisateur courant)
SHUTDOWN_CMD = shutdown /s /f /t 0

## upload le fichier nzb sur une URL spécifique
## seuls les protocoles HTTP, HTTPS et FTP sont supportés (pas de FTPS ou SFTP)
#NZB_UPLOAD_URL = ftp://user:pass@url_or_ip:21

## exécute une commande ou un script à la fin de chaque post (cf examples)
## il est possible d'utiliser plusieurs post commandes en définissant plusieurs lignes NZB_POST_CMD
## voici la liste des différents placeholders
##   __nzbPath__          : chemin complet du fichier nzb
##   __nzbName__          : nom du fichier nzb sans l'extension (nom de la source)
##   __rarName__          : nom des archives (en cas d'obfuscation)
##   __rarPass__          : mot de passe des archives
##   __sizeInByte__       : taille du post (avant l'encodage yEnc)
##   __groups__           : liste des Groupes (séparés par une virgule)
##   __nbFiles__          : nombre de fichiers du post
##   __nbArticles__       : nombre d'Articles
##   __nbArticlesFailed__ : nombre d'articles en erreur (non postés)
#
#NZB_POST_CMD = scp "__nzbPath__" myBox.com:~/nzbs/
#NZB_POST_CMD = zip "__nzbPath__.zip" "__nzbPath__"
#NZB_POST_CMD = ~/scripts/postNZB.sh "__nzbPath__" "__groups__" __rarName__ __rarPass__ __sizeInByte__ __nbFiles__ __nbArticles__ __nbArticlesFailed__
#NZB_POST_CMD = mysql -h localhost -D myDB -u myUser -pmyPass-e "INSERT INTO POST (release, rarName, rarPass, size) VALUES('__nzbName__', '__rarName__', '__rarPass__', '__sizeInByte__')"
#NZB_POST_CMD = cmd.exe /C move "__nzbPath__" "C:\ngPost\nzb\__nzbName__{{__rarPass__}}.nzb"
#NZB_POST_CMD = curl -X POST -F "file=@__nzbPath__" -F "api=12345" -F "cat=45" -F "private=no" https://usenet.com/post-api

## les fichiers nzb sont créés dans le répertoire par défaut nzbPath
## mais avec cette option, les fichiers nzb provenant d'un dossier à surveiller iront chacun dans leur dossier (qui sera créé dans nzbPath)
#MONITOR_NZB_FOLDERS = true

## pour la surveillance de dossier, liste des extensions à prendre en compte (séparation par des virgules, sans point)
#MONITOR_EXTENSIONS = mkv,mp4,avi,zip,tar,gz,iso

## pour la surveillance de dossier, ignorer les nouveaux dossiers
#MONITOR_IGNORE_DIR = true


## répertoire par défaut pour l'ajout de nouveaux fichiers dans les posts rapide de l'interface graphique
inputDir = /mnt/ngPostMonitor

## Fichier historique des posts
## chaque post réussi ajoutera une ligne dans le fichier csv avec la date, le nom du nzb, le nom de l'archive, le password...
POST_HISTORY = /home/aerya/ngPost_history.csv

## Caractère utilisé pour la séparation des champs du fichier d'historique
#FIELD_SEPARATOR = ;

GROUPS   = alt.binaries.boneless,alt.binaries.boneless.nl

## Si plusieurs groupes sont disponibles (séparés par une virgule), il y 3 modes d'utilisation:
## ALL: tout est posté sur tous les groupes
## EACH_POST : chaque post sera publié sur un groupe aléatoire de la liste fournie
## EACH_FILE : chaque fichier sera publié sur un groupe aléatoire de la liste fournie
GROUP_POLICY = EACH_POST

## pour utiliser le même email de posteur à chaque fois
## si commenté, UN nouvel email sera généré à chaque démarrage de ngPost pour toute la session
#FROM = [email protected]

## Générer un nouvel email aléatoire pour le posteur pour chaque Post (--auto or --monitor)
## Si cette option est active, l'email du FROM au dessus sera ignoré
GEN_FROM = true


## limiter le nombre de Threads (par défaut, on utilisera le nombre de coeurs disponibles)
## toutes les connexions sont distribuées sur l'ensemble des Threads
thread  =  50


## Affichage de la progression: NONE, BAR (bare de progression), FILES
DISP_Progress = BAR
#DISP_Progress = FILES


## suffix des Message-Ids des Articles (cf le fichier nzb)
#msg_id  =  ngPost

## taille des Articles (défaut 700ko)
article_size = 716800

## nombre de tentative de rePost des Articles (probablement due au fait que son Message-Id existe déjà)
retry = 5


## Obfuscation des Articles (le sujet est remplacé par le Message-Id et le posteur est aléatoire)
## /!\ ATTENTION!!! avec cette option les posts sont introuvables sans le fichier nzb! /!\
obfuscate = article

## suppression des accents et des caractères spéciaux des noms de fichier des nzb
NZB_RM_ACCENTS = true

## fermeture des onglets de Posts rapide à chaque fin de Post réussi (pour le GUI)
AUTO_CLOSE_TABS = true


## temps d'attente (en secondes) avant d'essayer de recommencer le post automatiquement lors d'une perte de réseau (min: 30)
RESUME_WAIT = 30

## Par défaut ngPost essaye de recommencer à poster lors des pertes de réseau.
## il continuera à essayer jusqu'à ce que le réseau revienne et que le post soit fini
## vous pouvez désactiver cette fonctionnalité et ngPost s'arrêtera lors d'une perte de réseau
#NO_RESUME_AUTO = true

## si il n'y a plus d'activité sur une connection elle sera fermée puis ré-ouverte
## La durée est en seconde, par défaut: 30, min: 5
SOCK_TIMEOUT = 30

## quand il y a des posts en attente, le packaging (compression + par2) du Post suivant sera fait en parallèle du Post courant
PREPARE_PACKING = true




##############################################################
##           Compression and par2 section                   ##
##############################################################

## compression automatique avec nom et mot de passe aléatoire et génération des par2
AUTO_COMPRESS = true

## utilisation du même mot de passe pour tous les Posts utilisant la compression
#RAR_PASS = yourPassword

## répertoire dans lequels les fichiers compressés et par2 seront écrits (puis supprimés)
## afin de pouvoir poster des fichiers que l'on aura d'abord compressés (avec mot de passe si besoin)
## /!\ Ce répertoire doit avoir les droits en écriture! /!\
## à changer selon votre système d'exploitation
TMP_DIR = /tmp

## dossier temporaire avec une taille limitée, typiquement une partition tmpfs
## la taille du post multipliée par le ratio TMP_RAM_RATIO doit être disponible sur le disque
## sinon ngPost utilisera TMP_DIR (sans vérification)
## (décommentez et définissez TMP_RAM pour activer la fonctionalité, attention le dossier doit avoir les droits en écriture)
#TMP_RAM = /mnt/ngPost_tmpfs

## ratio utilisé sur les fichiers sources afin de compenser la redondance par2
## le minimum est 10% pour raison de sécurité (donc 1.1), le maximum est 2.0
TMP_RAM_RATIO = 1.1

## chemin d'accès complet de l'éxécutable RAR ou 7zip
## /!\ le fichier DOIT EXISTER et ÊTRE ÉXÉCUTABLE /!\
## à changer selon votre système d'exploitation
RAR_PATH = /usr/bin/rar

## RAR EXTRA options (le premier 'a' et '-idp' sont ajoutés automatiquement)
## -hp sera aussi ajouté automatiquement si vous utilisez --gen_pass ou --rar_pass ou via l'interface graphique
## -v42m sera aussi ajouté automatiquement avec l'option --rar_size ou via l'interface graphique
## vous pouvez changer le niveau de compression, bloquer l'archive,...
#RAR_EXTRA = -ep1 -m0 -k -rr5p
#RAR_EXTRA = -mx0 -mhe=on   (for 7-zip)

## taille en Mo des volumes RAR (0 équivalent à une seule archive)
## changez la valeur ou commentez la ligne si vous ne voulez pas découper l'archive en plusieurs volumes
RAR_SIZE = 42

## nombre maximum d'archives (volumes)
## ngPost utilise en priorité RAR_SIZE sauf si cela génèrerait trop de volumes
## dans ce cas, ngPost utlisera rar_size = <taille du post> / rar_max
RAR_MAX = 99

## garder les archives et par2 après le post (sinon ils sont supprimés automatiquement si le post a réussi)
#KEEP_RAR = true

## Supprimer le dossier racine (parent) lors des compressions de dossiers avec RAR
#RAR_NO_ROOT_FOLDER = true

## pourcentage de redondance par2 (0 signifiant aucune génération)
PAR2_PCT = 16

## chemin d'accès complet de l'exécutable par2 (ou alternative)
## cette option est nécessaire si vous compilez l'application (par2cmdline étant inclus dans les packages portables)
## ou si vous souhaitez utiliser une autre application comme ParPar ou MultiPar
## (dans ce cas, il vous faudra aussi fournir les paramètres avec PAR2_ARGS ci dessous)
#PAR2_PATH = C:\ngPost\v4.14_x64/parpar.exe
PAR2_PATH = /usr/local/bin/parpar
#PAR2_PATH = <your_path>par2j64.exe

## Paramètres fixes pour la commande par2 (ou alternative comme ParPar)
## vous pouvez par exemple utiliser MultiPar sous Windows
#PAR2_ARGS = -s5M -r1n*0.6 -m2048M -p1l --progress stdout -q   (for parpar)
#PAR2_ARGS = c -l -m1024 -r8 -s768000                 (for par2cmdline)
#PAR2_ARGS = create /rr8 /lc40 /lr /rd2               (for Multipar)
PAR2_ARGS = -s5M -r1n*0.6 -m2048M -p1l --progress stdout -q


## taille du nom de l'archive généré
LENGTH_NAME = 27

## taille du mot de passe aléatoire généré
LENGTH_PASS = 21




##############################################################
##                   servers section                        ##
##############################################################

[server]
host = news.eweka.nl
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 50
enabled = false
nzbCheck = false


[server]
host = news.usenet.farm
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 40
enabled = true
nzbCheck = false


[server]
host = nl.newsgroupdirect.com
port = 563
ssl  = true
user = xxx
pass = xxx
connection = 50
enabled = true
nzbCheck = false


## Vous pouvez utiliser autant de serveurs que vous voulez en ajoutant une autre section "server"
#[server]
#host = news.otherprovider.com
#port = 563
#ssl  = true
#user = myOtherUser
#pass = myOtherPass
#connection = 15
#enabled = false
#nzbCheck = false

Et on peut se servir des exemples de mBruel pour poster, dans mon cas vu que j’ai compilé ngPost je dois remplacer ngPost_v4.14_cmd-x86_64.AppImage par ngPost

Examples:
  - with monitoring: ngPost_v4.14_cmd-x86_64.AppImage --monitor /data/folder1 --monitor /data/folder2 --auto_compress --rm_posted --disp_progress files
  - with auto post: ngPost_v4.14_cmd-x86_64.AppImage --auto /data/folder1 --auto /data/folder2 --compress --gen_par2 --gen_name --gen_pass --rar_size 42 --disp_progress files
  - with compression, filename obfuscation, random password and par2: ngPost_v4.14_cmd-x86_64.AppImage -i /tmp/file1 -i /tmp/folder1 -o /nzb/myPost.nzb --compress --gen_name --gen_pass --gen_par2
  - with config file: ngPost_v4.14_cmd-x86_64.AppImage -c ~/.ngPost -m "password=qwerty42" -f [email protected] -i /tmp/file1 -i /tmp/file2 -i /tmp/folderToPost1 -i /tmp/folderToPost2
  - with all params:  ngPost_v4.14_cmd-x86_64.AppImage -t 1 -m "password=qwerty42" -m "metaKey=someValue" -h news.newshosting.com -P 443 -s -u user -p pass -n 30 -f [email protected]  -g "alt.binaries.test,alt.binaries.test2" -a 64000 -i /tmp/folderToPost -o /tmp/folderToPost.nzb

Voici par exemple un script simpliste qui permet de poster via ./post.sh fichier.extension. => nano post.sh, copier/coller le contenu puis le rendre exécutable avec chmod a+x post.sh

#!/bin/bash

ngPost \
-i "$1" \
-o /home/aerya/nzbs/"$1".nzb \
--compress \
--gen_name --length_name 27 \
--gen_pass --length_pass 21 \
--gen_par2 --par2_pct 16 \
--rar_size 42 --disp_progress files

Le .nzb sera déposé dans /home/aerya/nbzs/<nom_du_fichier>.nzb. Le tout est posté selon mon fichier de configuration et je spécifie : compression, nom aléatoire de 27 caractères, mot de passe aléatoire de 21 caractères, par2 de 16% + affichage de la progression.

Ce qui donne

aerya@NUC2:~/scripts$ ./post.sh debian-11.0.0-amd64-DVD-1.iso 
Using default config file: /home/aerya/.ngPost
Auto compress ON (--compress --gen_name --gen_pass --gen_par2)


[15:51:00.198] Début du post: debian-11.0.0-amd64-DVD-1.iso.nzb
[15:51:00.198] Compression des fichiers: /usr/bin/rar a -ep1 -m0 -idp -hpHnJkhd5zaED6xwMMXuJ2X -v42m /tmp/6UXR9LQittPalk7gnzineU9bCtS/6UXR9LQittPalk7gnzineU9bCtS.rar /home/aerya/scripts/debian-11.0.0-amd64-DVD-1.iso

*****************************************************************************************************************************************************************************************************************************************************************************************************

[15:52:04.175] Génération des fichiers par2: /usr/local/bin/parpar -s5M -r1n*0.6 -m2048M -p1l --progress stdout -q -o /tmp/6UXR9LQittPalk7gnzineU9bCtS/6UXR9LQittPalk7gnzineU9bCtS.par2 -R /tmp/6UXR9LQittPalk7gnzineU9bCtS
****************************************************************************************************************************************

[15:52:33.999] Nombre de connexions disponibles: 90
[15:52:35.841][débit moyen:  20.87 kB/s] <<<<< [1/99] 6UXR9LQittPalk7gnzineU9bCtS.par2
[15:52:39.192][débit moyen:  35.79 MB/s] <<<<< [3/99] 6UXR9LQittPalk7gnzineU9bCtS.part002.rar
[15:52:39.991][débit moyen:  38.42 MB/s] <<<<< [2/99] 6UXR9LQittPalk7gnzineU9bCtS.part001.rar
[15:52:42.038][débit moyen:  46.13 MB/s] <<<<< [4/99] 6UXR9LQittPalk7gnzineU9bCtS.part003.rar
[15:52:42.379][débit moyen:  47.68 MB/s] <<<<< [5/99] 6UXR9LQittPalk7gnzineU9bCtS.part004.rar
[15:52:43.939][débit moyen:  50.64 MB/s] <<<<< [9/99] 6UXR9LQittPalk7gnzineU9bCtS.part008.rar
[15:52:43.985][débit moyen:  50.92 MB/s] <<<<< [6/99] 6UXR9LQittPalk7gnzineU9bCtS.part005.rar
[15:52:44.085][débit moyen:  51.16 MB/s] <<<<< [8/99] 6UXR9LQittPalk7gnzineU9bCtS.part007.rar
[15:52:44.983][débit moyen:  52.82 MB/s] <<<<< [7/99] 6UXR9LQittPalk7gnzineU9bCtS.part006.rar
[15:52:45.151][débit moyen:  52.88 MB/s] <<<<< [10/99] 6UXR9LQittPalk7gnzineU9bCtS.part009.rar

[...]

[15:53:32.504][débit moyen:  65.69 MB/s] <<<<< [89/99] 6UXR9LQittPalk7gnzineU9bCtS.part088.rar
[15:53:33.153][débit moyen:  65.80 MB/s] <<<<< [93/99] 6UXR9LQittPalk7gnzineU9bCtS.vol01+02.par2
[15:53:33.240][débit moyen:  65.84 MB/s] <<<<< [90/99] 6UXR9LQittPalk7gnzineU9bCtS.part089.rar
[15:53:33.326][débit moyen:  65.85 MB/s] <<<<< [91/99] 6UXR9LQittPalk7gnzineU9bCtS.part090.rar
[15:53:33.627][débit moyen:  65.93 MB/s] <<<<< [94/99] 6UXR9LQittPalk7gnzineU9bCtS.vol03+04.par2
[15:53:33.990][débit moyen:  65.79 MB/s] <<<<< [92/99] 6UXR9LQittPalk7gnzineU9bCtS.vol00+01.par2
[15:53:34.348][débit moyen:  65.66 MB/s] <<<<< [95/99] 6UXR9LQittPalk7gnzineU9bCtS.vol07+08.par2
[15:53:34.670][débit moyen:  65.47 MB/s] <<<<< [96/99] 6UXR9LQittPalk7gnzineU9bCtS.vol15+09.par2
[15:53:35.204][débit moyen:  65.22 MB/s] <<<<< [97/99] 6UXR9LQittPalk7gnzineU9bCtS.vol24+09.par2
[15:53:35.544][débit moyen:  65.05 MB/s] <<<<< [98/99] 6UXR9LQittPalk7gnzineU9bCtS.vol33+09.par2
[15:53:35.716][débit moyen:  64.90 MB/s] <<<<< [99/99] 6UXR9LQittPalk7gnzineU9bCtS.vol42+06.par2

[15:53:35.716] Taille du Post: 3.91 GB en 00:01:01.717 (61 sec) => débit moyen:  64.90 MB/s (90 connexions sur 4 threads)
[15:53:35.716] fichier nzb: /home/aerya/nzbs/debian-11.0.0-amd64-DVD-1.iso.nzb
[15:53:35.716] nom du fichier: debian-11.0.0-amd64-DVD-1.iso.nzb, nom de l'archive: 6UXR9LQittPalk7gnzineU9bCtS, mot de passe: HnJkhd5zaED6xwMMXuJ2X

J’ai bien mon .nzb

aerya@NUC2:~/scripts$ ls -l ~/nzbs/
total 560
-rw-rw-r-- 1 aerya aerya 569619 août  23 15:53 debian-11.0.0-amd64-DVD-1.iso.nzb

Voilà. C’est pas très compliqué, j’espère vous avoir expliqué le plus simplement possible comment rapidement poster du contenu sur Usenet. On peut aller beaucoup plus loin mais avec ça vous pouvez déjà archiver des contenus comme par exemple des backups ou quelques vidéos de vacances :)

Mots clés