Archives de catégorie : Technique

De la tech, genre sysadmin

Minitel: QBBS le BBS du 3614

BBS = Bulletin Board System
QBBS = Qnx Bulletin Board System

Article de PCNEWS, de décembre 1989.

Article LE TELEMATEUR ILLUSTRE, de janvier 1990

Informations sur le serveur QBBS  en janvier 1990

Le BBS a été ouvert sans interruption (en dehors des mises à jour, migrations et pannes) de Novembre 1988 à Décembre 1990.

Le service tournait sur un ordinateur portable IEEE 386/16 Mhz avec 2 Mo de RAM, le portable était ouvert (explosé) sur une table avec un disques en externe de 110 Mo RRL puis un ESDI de 150 Mo, et une carte multi-ports série RS232 de 8 voies. En janvier 1990 nous avons ajouté aux accès 3614 Minitel, 4 modems V23 en rack, ainsi que 2 modems V23/V22/V22bis BEST 2400+ (copie low cost à l’identique des modems Hayes).

En décembre 1989 il y avais 5000h de connexion en 3614 avec la possibilité d’avoir 16 connexions simultanées. En 1990 après migration de Paris à Ville d’Avray dans les locaux de France-Teaser, plusieurs modems sur le RTC ont été ajoutés et le nombre de connexions simultanées en 3614 limité à 2 . Au 15 janvier 1990 il y avais 1600 utilisateurs du BBS.

 
 

Le message de bienvenue de l’époque:

                    ***********************************
                    !  Bonjour et bienvenue sur QBBS  !
                    ***********************************


Qu'est-ce que QBBS?
-------------------

  Comme vous avez pu le constater, vous êtes sur un Bulletin Board System :
c'est un serveur en 80 colonnes dont la  particularité  est  que  tous  les
utilisateurs sont identifies. Ceci pour favoriser le contact entre les uti-
lisateurs et responsabiliser les auteurs de contributions. Donc, pour notre
bien a tous, remplissez correctement votre status  (commande  'S'  du  menu
général)  en  indiquant  OBLIGATOIREMENT  votre  NOM,  PRENOM  et  ADRESSE.
Au bout de 24H et après vérification éventuelle  de  votre  identité,  vous
serez 'valide' : c'est a dire que vous serez un utilisateur a part  entière
de QBBS et vous aurez droit a toutes les fonctions. Pour l'instant, vous ne
pouvez utiliser que la messagerie.


Que vais-je trouver sur QBBS?
-----------------------------

  QBBS est un serveur principalement oriente informatique ou les utilisateurs
de différentes machines, différents systèmes d'exploitations  se  retrouvent.
Vous pourrez participer entre autres aux continuums (forum) sur :
IBM, UNIX, LISP, RÉSEAUX, MAC, RISC, ATARI, AMIGA etc..

Vous trouverez également des continuums plus généraux comme :
NEWS, RESTAURANTS, MOTO, POLÉMIQUE etc...

En tout plus de 40 Continuums et certains comportant plus de 500 contributions!

  Mais QBBS est aussi un serveur ou le téléchargement est très  actif :  on  y
retrouve les grandes rubriques (IBM, MAC, APPLE2, ATARI, AMIGA...)  comportant
chacune plusieurs megas de bonnes choses. Vous  y  trouverez  aussi  bien  des
programmes du domaine public  que  des  images  ou  des  textes  (cela  va  de
l'autoformation en Pascal a la manière de paramétrer un modem Hayes en passant
par la liste des serveurs américains ou les moyens d’accéder  aux  messageries
électroniques mondiales).


Comment accéder a QBBS?
-----------------------

  QBBS est accessible de France par le réseau  minitel,  simplement  avec  un
minitel 1b ou bien en reliant votre micro-ordinateur a un modem.
  Mais QBBS est aussi accessible de  l’étranger  et  il  n'est  pas  rare  de
rencontrer des italiens, portugais ou  suédois  dans  les  dialogues  ou  les
continuums. Pour ceux-cis un continuum spécial a été créé.
  L’accès est LIBRE et GRATUIT (pas d'abonnement, vous ne payez que le prix de
la communication) et votre adresse et no de téléhonne sont confidentiels.


Qui rencontrerais-je sur QBBS?
------------------------------

  Sur QBBS la plupart des utilisateurs sont des passionnes qui sont  toujours
prêts a vous donner un coup de main ou pour vous écouter. Chaque  responsable
de continuum pourra vous répondre dans son domaine et vous fera  partager  sa
passion. Je m'occupe personnellement de l’accueil des nouveaux (Balkan),  je
suis la pour mieux vous faire connaître ce serveur. N’hésitez  surtout  pas a
me poser des questions, ou simplement a me laisser un petit mot pour me parler
de vous j'y répondrais toujours avec plaisir.

                                             A bientôt.
                                              [Balkan]

                                  --- Équipe Technique de QBBS ---

QBBS avait deux catégories de forums, les continuums (technique) et les autres « les clubs ».

Liste des clubs en 1990

club.Rdv_QBBS                      00922 00 09 O 000
club.Auto_Moto                     00204 00 06 O 000
club.Cinema                        00590 00 20 O 000
club.JdR                           00325 00 11 O 000
club.Midi                          00208 00 10 O 000
club.Montagne                      00116 00 08 O 000
club.Musique                       00933 00 03 O 000
club.Pub                           00275 00 05 O 000
club.Radio-Amateurs                00085 00 07 O 000
club.Restaurant                    00218 00 13 O 000
club.SF                            00545 00 12 O 000
club.Story                         00150 00 04 O 000
club.Plongee                       00067 00 14 O 000
club.Othello                       00107 00 15 O 000
club.Bouquins                      00110 00 16 O 000
club.Jeux-Strategie                00200 00 18 O 000
club.Humour                        00479 00 19 O 000
club.Horoscope                     00070 00 21 O 000
club.Prenoms                       00276 00 22 O 000
club.Physique                      00166 00 02 O 000
club.Occultisme                    00180 00 24 O 000
club.Esperanto                     00057 00 25 O 000
club.Philosophie                   00300 00 27 O 000
club.Histoire                      00311 00 28 O 000
club.Fleur_Bleue                   00347 00 29 O 000
club.Television                    00436 00 30 O 000
club.Cuisine                       00080 00 31 O 000

Liste des continuums en 1990

Phenix                            00184 00 50 O 000
system.info.ETC                   03974 00 00 O 000
system.info.Association           00305 00 51 O 000
system.info.asso                  00124 01 52 O 001
system.qbbs.bug                   00208 00 23 O 000
Net.Con_repartis                  00281 00 21 O 000
Net.Network                       00646 00 10 O 000
Net.Reseaux_Locaux                00216 00 45 O 000
comp.Amiga                        01455 00 07 O 000
comp.Apple2                       00098 00 22 O 000
comp.Archimedes                   00577 00 18 O 000
comp.Atari                        02416 00 06 O 000
comp.IBM                          01802 00 02 O 000
comp.Intel                        00126 00 49 O 000
comp.Language.Basic               00435 00 26 O 000
comp.Language.Le_C                01467 00 13 O 000
comp.Language.Lisp                00121 00 40 O 000
comp.Language.Modula              00072 00 14 O 000
comp.Language.OOP                 00130 00 47 O 000
comp.Language.Pascal              00270 00 03 O 000
comp.Language.Turbo               00187 00 35 O 000
comp.Mac                          00874 00 01 O 000
comp.Mainframes                   00267 00 12 O 000
comp.RISC                         00090 00 28 O 000
comp.SGBD                         00327 00 05 O 000
comp.Windows                      00318 00 42 O 000
comp.comm.BBS                     02013 00 08 O 000
comp.comm.Comm                    01740 00 04 O 000
comp.comm.Download                02452 00 31 O 000
comp.comm.RTC                     00611 00 32 O 000
comp.comm.Videotex                00932 00 39 O 000
comp.os.MSDOS                     00746 00 27 O 000
comp.os.Minix                     00504 00 17 O 000
comp.os.OS2                       00055 00 20 O 000
comp.os.Prologue                  00063 00 34 O 000
comp.os.Qnx                       00281 00 29 O 000
comp.os.Unix                      02052 00 11 O 000
misc.Algorithme                   00271 00 25 O 000
misc.Bidouille                    00438 00 16 O 000
misc.Electronique                 00302 00 30 O 000
misc.IdeesQBBS                    01195 00 41 O 000
misc.Images                       00361 00 33 O 000
misc.Info                         00311 00 24 O 000
misc.International                00373 00 19 O 000
misc.Les_Pro                      00168 00 48 O 000
misc.PA                           00749 00 09 O 000
hard.LDP                          06412 00 15 O 000
hard.Polemiques                   02285 00 38 O 000
maint.Niveau                      01262 03 36 O 000
maint.User2                       01056 02 37 O 000
maint.Info                        00013 03 43 O 000
maint.Objectif_Null               00098 01 44 O 007

Dans l’équipe de joyeux drilles de l’époque, on retrouve entre autre par ordre alphabétique (René Cougnenc un ami qui nous a quitté trop vite…, Philippe GOUJARD, Thierry LOUVEL, Jean-Pierre PARISY, Jean-Claude RICHARD, Herve SCHAUER, Jean-Rene VIDAUD, et moi même).

Photos à la gare Perrache à Lyon en 1989 ou 1990 lors d’un repas QBBS chez la Mère Vittet et au PUB après…

  

  

ZFS for dummies – FreeBSD ZFS replication

Exemple de réplication d’une jail en ZFS sur FreeBSD

L’environnement d’exemple est celui ou  j’ai divers web, blog, photos, etc., mais le même principe de réplication est utilisé à grande échelle pour un plan de continuité d’activité (PCA) entre des serveurs sur deux  centre de données différent avec des périodes de réplication adaptée aux besoins.

pour mon exemple, /etc/crontab

# chaque jour juste l’incrémental
45 4 * * * root (echo "Subject: ZFS replicate zsync_web incremental " && ( (/usr/bin/time -h /backup/zsync_web incremental) 2>&1 ) ) | sendmail -f FROM@DOMAIN TO@DOMAIN
# le 22 du mois, un full
10 4 22 * * root (echo "Subject: ZFS replicate zsync_web full " && ( (/usr/bin/time -h /backup/zsync_web full) 2>&1 ) ) | sendmail -f FROM@DOMAIN TO@DOMAIN

Je passe sur l’échange de clef SSH entre le host source et celui de destination pour faire la réplication via ssh, et j’utilise aussi shlock.

# pkg info | grep shlock
shlock-2.6.3 Create lock files for use in shell scripts

Le principe ZFS, un bookmark et des snapshot, du zfs send et receive entre deux serveurs.

La syntaxe:
/backup/zsync_web full|incremental|list|show

# /backup/zsync_web list
snapshot jails/web :
jails/web@L1_5 13.2M – 92.4G –
jails/web@L1_6 12.5M – 92.4G –
jails/web@L1_7 18.4M – 92.4G –
jails/web@L1_1 7.01M – 92.4G –
jails/web@L1_2 17.1M – 92.4G –
jails/web@L1_3 5.66M – 92.4G –
jails/web@L1_4 2.16M – 92.4G –
bookmark jails/web :
jails/web#L0_1_bookmark – – – –

Le script au complet:

# zsync / ZFS incremental backup réplication
# FreeBSD 12 - 2021-01 jcmichot _@_ free.org

# replicate/synchronize zfs file system on remote host

DAYWEEK=`date "+%u"`

# /!\ CHANGE "HOSTNAME" /!\ by your replication target hostname
MYTARGET="HOSTNAME"
# /!\ CHANGE "jail/web"/!\ by your source jail to replicate
MYFS="jails/web"
LOCK="/var/tmp/zsync_web.lock"

IGNORE=nozsync
CMD=$1

trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
if shlock -p $$ -f ${LOCK} ; then

 case $CMD in
  full)

   # dump 0 - full backup day

   # LOCAL: remove all MYFS zsync snapshots and bookmark 
   zfs list -t snapshot | grep -e "$MYFS@L1_" -e "$MYFS@L0_" | awk '{ printf("zfs destroy %s\n", $1 ); }' | sh 
   zfs list -t bookmark | grep "$MYFS#L0_" | awk '{ printf("zfs destroy %s\n", $1 ); }' | sh

   # REMOTE (TARGET), remove all MYFS zsync snapshots 
   REMOTESNAPS=`ssh root@$MYTARGET zfs list -H -t snapshot -o name | grep $MYFS@`
   PROCED="$IGNORE $REMOTESNAPS"
   for p in $PROCED
    do
      case $p in
          $IGNORE)
              ;;
          *)
              ssh root@$MYTARGET zfs destroy $p
              ;;
      esac
    done

   zfs snapshot $MYFS@L0_1
   zfs bookmark $MYFS@L0_1 $MYFS#L0_1_bookmark

   zfs send -cvV $MYFS@L0_1 | ssh root@$MYTARGET zfs receive -F $MYFS@L0_1
   zfs destroy $MYFS@L0_1

   for i in 1 2 3 4 5 6 7
    do
    zfs snapshot $MYFS@L1_$i
    done
  ;;

  incremental)

   zfs destroy $MYFS@L1_$DAYWEEK
   zfs snapshot $MYFS@L1_$DAYWEEK

   # REMOTE (TARGET), remove the DAYWEEK INCREMENTAL snapshot

   REMOTESNAPS=`ssh root@$MYTARGET zfs list -H -t snapshot -o name | grep $MYFS@L1_$DAYWEEK`
   PROCED="$IGNORE $REMOTESNAPS"
   for p in $PROCED
    do
      case $p in
          $IGNORE)
              ;;
          *)
              ssh root@$MYTARGET zfs destroy $p
              ;;
      esac
    done

   zfs send -cvV -i $MYFS'#L0_1_bookmark' $MYFS@L1_$DAYWEEK | ssh root@$MYTARGET zfs receive -F $MYFS@L1_$DAYWEEK
  ;;

  list)
   echo "snapshot $MYFS :";
   zfs list -t snapshot | grep -e $MYFS@L1_ -e $MYFS@L0_
   echo "bookmark $MYFS :";
   zfs list -t bookmark | grep -e $MYFS#

  ;;
  show)
   echo "no zsync running";
  ;;

  *)
   echo "unknown command"
   echo "$0 full|incremental|list|show";
  ;;

 esac

 rm -f ${LOCK}

else

 case $CMD in
  show)
   SPID=`cat ${LOCK}`
   top -ap $SPID
  ;;

  *)
   echo "zsync locked by `cat ${LOCK}`"
  ;;

 esac

 exit 0;

fi

ZFS for dummies – Les snapshot ca sauve de catastrophe

C’est quoi un snapshot (un instantané en Français) pour ZFS ?

Un instantané ZFS est une copie en lecture seule d’un système de fichiers ou d’un volume. La création des snapshot ZFS est quasiment immédiate. Initialement, elle ne consomme pas d’espace disque supplémentaire au sein du pool. Toutefois, à mesure que les données contenues dans le jeu de données actif changent, le snapshot consomme de l’espace disque en continuant à faire référence aux anciennes données et empêche donc de libérer de l’espace disque.

Concrètement cela permet de revenir quasiment immédiatement à la situation d’un système de fichier à l’heure ou au jour voulu, ou juste d’aller chercher un ou des fichiers supprimés par erreur. Cela permet aussi de faire des réplications de système de fichier, de basculer de développement à la production, d’archiver sur d’autres média une sauvegarde, etc.

Comment faire ? Dans mon cas en crontab je lance un script qui va faire des snapshot ZFS. (un par heure, et un chaque jour). Cela représente 31 snapshot  en une semaine, après quoi le script va détruire l’ancien snapshot de l’heure ou du jour pour faire le nouveau.

Exemple sur /usr/home

% zfs list  -t snapshot | grep /usr/home
zroot/usr/home@Thursday        883M      -   317G  -
zroot/usr/home@Friday          112M      -   317G  -
zroot/usr/home@Saturday       49.3M      -   317G  -
zroot/usr/home@Sunday         49.5M      -   317G  -
zroot/usr/home@Monday         71.1M      -   317G  -
zroot/usr/home@Tuesday         258M      -   318G  -
zroot/usr/home@hourly_18      1.22M      -   318G  -
zroot/usr/home@hourly_19      1.13M      -   318G  -
zroot/usr/home@hourly_20      1.05M      -   318G  -
zroot/usr/home@hourly_21      1.09M      -   318G  -
zroot/usr/home@hourly_22      1.07M      -   318G  -
zroot/usr/home@hourly_23      1.16M      -   318G  -
zroot/usr/home@hourly_00       732K      -   318G  -
zroot/usr/home@Wednesday       600K      -   318G  -
zroot/usr/home@hourly_01       644K      -   318G  -
zroot/usr/home@hourly_02       768K      -   318G  -
zroot/usr/home@hourly_03       764K      -   318G  -
zroot/usr/home@hourly_04       948K      -   318G  -
zroot/usr/home@hourly_05      1.18M      -   318G  -
zroot/usr/home@hourly_06      1.20M      -   318G  -
zroot/usr/home@hourly_07      1.44M      -   318G  -
zroot/usr/home@hourly_08      1.36M      -   318G  -
zroot/usr/home@hourly_09      1.43M      -   318G  -
zroot/usr/home@hourly_10      1.36M      -   318G  -
zroot/usr/home@hourly_11      1.30M      -   318G  -
zroot/usr/home@hourly_12      1.50M      -   318G  -
zroot/usr/home@hourly_13      34.8M      -   318G  -
zroot/usr/home@hourly_14      37.9M      -   318G  -
zroot/usr/home@hourly_15      45.2M      -   318G  -
zroot/usr/home@hourly_16      44.7M      -   318G  -
zroot/usr/home@hourly_17      23.3M      -   318G  -

# /etc/crontab ZFS snapshot (hourly & daily)
30 * * * * root /usr/local/bin/backup_snap.sh hourly >/dev/null 2>&1
25 0 * * * root /usr/local/bin/backup_snap.sh daily >/dev/null 2>&1

Le script « backup_snap.sh »:

#!/bin/sh

# défini une propriété de zone que l'on va exclure des snapshot.
# un peu comme le chflags nodump de UFS FreeBSD
#
# zfs set freebsd:nosnap=yes zroot/usr/ports
# zfs set freebsd:nosnap=yes zroot/usr/src
# zfs set freebsd:nosnap=yes zroot/tmp
# zfs set freebsd:nosnap=yes zroot/films
# zfs set freebsd:nosnap=yes zroot/var/tmp
# zfs set freebsd:nosnap=yes zroot/var/crash

# zfs list -o name,type,used,avail,mountpoint,compress,version,freebsd:nosnap

TYPE=$1

LANG="C"
export LANG

case $TYPE in
        daily)
                DATE=`date +"%A"`
        ;;
        hourly)
                DATE=`date +"hourly_%H"`
        ;;
        *)
                DATE=`date +"%A"`
        ;;
esac

# garde une trace de ce qui est installé sur la machine
pkg info >/root/pkg_info.txt

# snapshot destroy recursif
zfs destroy -r zroot@${DATE}

# snapshot recursif
zfs snapshot -r zroot@${DATE}

# efface les snapshot avec la property "freebsd:nosnap"

for d in `zfs list -H -t snapshot -o name,freebsd:nosnap  | grep -E 'yes$' | awk '{ print $1 }'` ; do
        zfs destroy $d
        done

exit 0;

ZFS for dummies – backup avec un minimum de sécurité.

Création d’un /backup en ZFS avec du RAID miroir

# gpart destroy ada2
# gpart destroy ada3
# gpart create -s gpt ada2
# gpart create -s gpt ada3
# gpart add -a 1m -t freebsd-zfs -l disk2 ada2
# gpart add -a 1m -t freebsd-zfs -l disk3 ada3
# zpool create -O compress=lz4 -O atime=off -m /backup backup mirror ada2p1 ada3p1

C’est utilisable sur divers support physique, j’ai par exemple un Raspberry PI avec un /backup sur deux clefs USB SANDISK Cruzer Fit de 64 Go. Moins de 15 Euros la clef chez plusieurs dealer’s online.

ZFS for dummies – Attention je débranche l’alimentation

Que faire, si cela se passe mal en cas de coupure électrique avec un unique disque (dans mon cas un SSD dans un boîtier externe en USB)

Coupure électrique, et pas de chance le boîtier USB externe n’était pas sur onduleur 🙁

dans le dmesg FreeBSD ca donne ca:

ugen0.9: <ASMedia asm1153e> at usbus0 (disconnected)
umass2: at uhub0, port 17, addr 9 (disconnected)
da1 at umass-sim2 bus 2 scbus9 target 0 lun 0
da1: <ASMedia asm1153e 0> s/n 000000000001 detached
(da1:umass-sim2:2:0:0): Periph destroyed
umass2: detached
ugen0.9: <ASMedia asm1153e> at usbus0
umass2 on uhub0
umass2: <ASMedia asm1153e, class 0/0, rev 3.00/1.00, addr 16> on usbus0
umass2: SCSI over Bulk-Only; quirks = 0x0100
umass2:9:2: Attached to scbus9
da1 at umass-sim2 bus 2 scbus9 target 0 lun 0
da1: <ASMedia asm1153e 0> Fixed Direct Access SPC-4 SCSI device
da1: Serial Number 000000001234
da1: 400.000MB/s transfers
da1: 976762MB (2000409264 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>

# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
backup 7.25T 1.34T 5.91T – – 0% 18% 1.00x ONLINE –
zroot 896G 657G 239G – – 27% 73% 1.00x ONLINE –
zssd 952G 128G 824G – – 0% 13% 1.00x UNAVAIL /mnt

# zpool status zssd
pool: zssd
state: UNAVAIL
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run ‘zpool clear’.
see: http://illumos.org/msg/ZFS-8000-HC
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zssd UNAVAIL 0 0 0
14572189989752791848 REMOVED 0 0 0 was /dev/da1p2

# zpool clear zssd

# zpool status -v zssd
pool: zssd
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://illumos.org/msg/ZFS-8000-8A
scan: scrub in progress since Mon Oct 25 17:22:00 2021
128G scanned at 340M/s, 83.0G issued at 221M/s, 128G total
0 repaired, 64.93% done, 0 days 00:03:27 to go
config:

NAME STATE READ WRITE CKSUM
zssd ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: Permanent errors have been detected in the following files:

<metadata>:<0x0>
<metadata>:<0x39>
/mnt/zssd/lesarcs

# Remarque le scrub est automatique, il n’est pas utile de le lancer manuellement.

# zpool status -v zssd

pool: zssd
state: ONLINE
scan: scrub repaired 0 in 0 days 00:09:52 with 0 errors on Mon Oct 25 17:31:52 2021
config:

NAME STATE READ WRITE CKSUM
zssd ONLINE 0 0 0
da1p2 ONLINE 0 0 0

Je test avec /sbin/md5 s’il y une différence entre les fichiers du SSD et avec le backup, aucune ! tout est ok 🙂

FreeBSD motion with few camera

Foscam FI9828P+V2, Camera outdoor

Foscam FI9821W-v2, camera indoor

WansView model W4, Camera 1080P

WansView model W2, Camera 1080P (sortie motion, exemple jardin)

Yoluke 5MP 20x Zoom Optique, Audio Bidirectionnel (sortie motion, exemple parking)

Exemple:

record video MP4 with audio in case of motion:

DIR=/motion/fdp-parking_log
DHMSF=`date +"%Y%m%d%H%M%S"`
# ffmpeg record 4 minutes video high resolution,
# transcode audio (pcm_alaw) because pcm_alaw is not supported in .mp4
# NOTE: need to use tcp transport because ffmpeg drop frame with HD camera @12fps :(
# no drop frame with VLC but ugly commande line syntax (and pb with end time)
/usr/local/bin/ffmpeg -hide_banner -loglevel quiet -stats -y \
-rtsp_transport tcp -rtbufsize 3000k -i rtsp://192.168.0.63:554/11 -c:a aac \
-vcodec copy -t 240 -movflags +faststart "$DIR/.parking-$DHMSF-ffmpeg.mp4" &

Apple II

My first computer, Aplle II was upgraded to II+ and come back from long time storage in garage 😉

inside the beast after power restoration

My 2019 desktop… From old time to now

New stuff available in 2019 (Quickloader board and RTC board):

Floppy disk emulation with SDCARD.