# À quoi peut me servir OpenBSD ? 2023-10-02T12:50:38Z C'est l'octOpenBSD! Une occasion idéale pour vous parler de ce à quoi me sert OpenBSD au quotidien. À la maison, il y a 3 ordinateurs qui servent à la bureautique : sexy, terminus, et moria. Il y a aussi un serveur : ledzep. En backup, il y a acdc chez openbsd.amsterdam. Mais ça, c'est une autre histoire ;) Pour chaque installation ci-dessous, tout est chiffré entièrement depuis l'installation. ## sexy https://si3t.ch/log/img/sexy.jpg ^ Photo de la machine "sexy" C'est l'ordinateur qu'utilise ma chérie. Il fait tourner OpenBSD -stable. Avec, elle trie nos photos, les optimise. Nos vidéos de famille sont converties en webm pour mettre tout ça sur notre petit site de partage. Elle travaille avec, c'est à dire qu'elle prépare tous ses cours, principalement avec LibreOffice. Firefox avec + de 20 onglets minimum, et une barre des tâches qui liste une grosse dizaine de documents libreoffice ouverts en simultanés. Et forcément, il faut imprimer tout ça. Les messages sont consultés avec claws-mail. Avec Dino, elle s'envoie des photos des documents ou autres exercices de son téléphone sur son ordinateur. Quelques scripts traînent dans les actions personnalisées de Thunar pour optimiser les images, convertir en PDF, envoyer par mail... Les pubs sont filtrées avec le résolveur unwind et les blocklists que je génère ici https://si3t.ch/w/doku.php?id=evils#blocage_par_dns. La plupart du temps elle oublie de l'éteindre, donc il reste en veille grâce à apmd qui gère ça sans soucis dès que l'écran est fermé ou que la batterie commence à être trop faible. Ça tourne bien les x230 :) ## terminus https://si3t.ch/log/img/terminus.jpg ^ Photo de la machine "terminus" C'est mon pc portable, que j'emmène au travail et avec lequel je fais à peu près tout. Il fait tourner OpenBSD -current. Je projette mes cours en classe. Avec le gestionnaire de fenêtres dwm. Il y a juste une petite barre de status pour afficher la charge batterie et l'heure, et éventuellement ce que mpd joue comme musique: ``` #!/bin/sh # set dwm's status when USR1 signal is received # pkill -USR1 statusloop # kill -USR1 $(cat /tmp/statusloop.lock) LOCKFILE=/tmp/statusloop.lock set_status() { xsetroot -name "$(status)" } reload() { kill -USR1 $(cat ${LOCKFILE}) } if [ -e ${LOCKFILE} ]; then echo "already running, killing" kill -9 $(cat ${LOCKFILE}) fi trap set_status USR1 # make sure the lockfile is removed when we exit trap "rm -f ${LOCKFILE}; exit" INT QUIT TERM echo $$ > ${LOCKFILE} set_status DELAY=".5" # clock (while true; do sleep 60; set_status; done) & # mpd changes (while true; do mpc -q --wait current >/dev/null 2>&1; set_status; done) & # global loop while true; do sleep $DELAY; done ``` , j'envoie les fenêtres sur la sortie du vidéo-projecteur avec un petit raccourci. Sur mon écran à moi, j'affiche dans la sortie qui s'affiche dans mon dos avec ffplay : ``` #!/bin/sh res="800x600" ffplay -f x11grab -s $res -framerate 25 -i :0.0+1366,0 ``` Je peux voir ma classe tout en écrivant ou en bricolant ce qui est affiché, c'est très pratique. Avec le gestionnaire de fichiers rover dans tmux, j'ouvre mes documents en quelques frappes. En cas de doute, j'utilise le script "f" pour chercher un fichier dont je ne me souviens plus l'emplacement : ``` #!/bin/sh # find and open a file if [ "$#" == "0" ] ; then file="$(find . -type f | match)" else file="$(find . -name "*${*}*" -type f | match)" fi test -f "$file" && opener "$file" ``` Autant dire qu'il y a des scripts partout. match appelle dmenu ou pick, opener ouvre les fichiers selon leur extension... Avec ce dernier, j'écoute de la musique avec mpd. L'espace disque est limité, je branche donc un SSD externe qui contient mes musiques. Un script se charge de le monter et lancer mpd: ``` #!/bin/sh slice=$(dmesg | awk '/serial.21090715000000123E9A/ {d=$1} END{print d}') test $? || exit if [ -n "$slice" ]; then doas /sbin/mount "/dev/${slice}i" /home/prx/mpd #doas /sbin/mount /home/prx/mpd pgrep -q mpd || mpd mpc play echo "ok" fi ``` Quand un élève a des documents à projeter ou à me donner, il vient avec une clé USB que je monte avec "mnt". Ça évite de monter automatiquement des trucs potentiellement dangereux: ``` #!/bin/sh # detect recently insterted media # look for slice # choose the one to mount. # mount the partition in $mountdir/sdnm # where "n" is the disk and "m" the slice # doas.conf : #permit nopass :wheel cmd /sbin/mount #permit nopass :wheel cmd /sbin/disklabel # change "mountdir" according to your needs mountdir=$HOME/mnt/ sdn="$(dmesg | grep "sd[0-9] "| tail | \ match -p 'disk ?'|\ awk '{print $1}')" test -z "${sdn}" && exit 1 slice="$(doas /sbin/disklabel ${sdn} |\ awk '/^ / { gsub("[:,c]","",$1); print $1}' |\ match -p 'slice ?')" test -z "${slice}" && exit 1 partition="${sdn}${slice}" mntpt="${mountdir}/${partition}" mkdir -p "${mntpt}" if [ "$sdn" != "" ]; then doas /sbin/mount /dev/"${partition}" ${mntpt} # xfe ${mntpt} fi rover "${mntpt}" exit $? ``` Avec nvi, je code à l'occasion. Il y a tout sous OpenBSD pour compiler. À la connexion, calendar m'indique si j'ai des trucs à penser (anniversaires, choses à faire...) Pour ma ToDo list, j'ai un alias qui ouvre un fichier texte qui suit les idées indiquées là : https://codemadness.org/todo-application.html Un script rsync sauvegarde périodiquement tous mes documents importants sur mon serveur, ainsi que lorsque j'éteins mon ordi: ``` #!/bin/sh if [ -n "$TERM" ]; then prxsync push else xterm -e "prxsync push" fi shutdown -hp now ``` Pour la connectivité, au travail j'utilise le partage 4G de mon téléphone, à la maison y a le wifi, je n'ai rien à faire depuis que c'est configuré: ``` # cat /etc/hostname.iwm0 up join kamehameha wpakey ******************** join prxAP wpakey ******************************* join WIFI_PUBLIC -wpa ``` Lorsque je branche un cable ethernet, il devient prioritaire: ``` # cat /etc/hostname.trunk0 trunkproto failover trunkport em0 trunkport iwm0 inet6 autoconf inet autoconf ``` Et puis au besoin, j'ai wireguard prêt si j'ai besoin de changer d'IP: juste à lancer le script qui va bien 👼. Firefox, gimp, Libreoffice, LaTeX, rien de très original pour un prof. C'est mutt qui me permet de répondre aux mails. fdm récupère les messages quand je lui demande, ça m'évite les notifications trop distrayantes. Dedans, je lis mes flux RSS puisque mon serveur fait tourner rss2email. Alors ok, il y a quelques scripts qui facilitent la vie : charger un bookmark avec dmenu, prendre des notes grâce à dmenu, choisir une musique grâce à dmenu, chercher sur le web grâce à dmenu, chercher des fichiers grâce à dmenu... Rien de propre à OpenBSD à vrai dire. Si ma batterie est trop faible, alors l'ordinateur se met en veille le temps que j'aille trouver un cable d'alimentation: ``` # rc.conf.local apmd_flags=-A -z 8 ``` D'ailleurs, la batterie ne sera pas chargée au delà des 80% pour éviter son vieillissement prématuré: ``` # /etc/sysctl.conf hw.battery.chargemode=1 hw.battery.chargestart=75 hw.battery.chargestop=80 ``` Unwind, le résolveur DNS local se charge de filtrer les pubs et autres domaines malveillants et allège considérablement mon quotidien. J'ai un script associé à une combinaison de touches qui me permet d'afficher/cacher une session tmux dédiée. Pratique pour écrire en 2 secondes une petite interro ou les devoirs pour la semaine suivante, lancer un compte à rebours... Oh, et j'allais oublier. Je joue parfois dessus: nethack, moria, wesnoth, xonotic, terraria, rogue ledacy, ... ## moria Il y a un autre ordinateur à la maison, un pc fixe que je synchronisais avec mon pc portable avant. Avant, quand je pouvais rester dans 1 pièce sans être interrompu pour bosser ni craindre de réveiller les enfants. Pour l'instant il est au repos, il servira peut-être un jour à nouveau. Cela dit, ça reviendra, et tout est prêt pour avoir un clone de ce qui est déjà présent sur mon ordinateur portable. La synchronisation se réalisait avec synthing, puis unison, et finalement des scripts rsync qui déposent ou récupèrent sur mon serveur selon si l'ordinateur est en avance ou en retard. Pour le savoir, un fichier témoin contenant un timestamp de la dernière synchronisation est déposé. J'ai mis ça en place puisque unison, qui est EXCELLENT, nécessite exactement les même version de chaque côté, ce qui n'était pas le cas entre ma -current et mon serveur en -stable. Le script en question s'appelle "prxsync", il est appelé en début de session, toutes les heures, puis à l'extinction. ``` #!/bin/sh -e # sync my data between over my server # # ~/.lastsync : date of last sync # ~/.prxsync.lst : list of files to sync, relative to $HOME. Must containt ~/.lastsync usage() { echo "$0 push/pull"; exit 1 } test $# -eq 1 || usage # check if network access nc -zw1 "si3t.ch" 22 > /dev/null 2>&1 || exit 1 DISPLAY=:0 xsetroot -name "prxsync running..." tosync=$HOME/.prxsync.lst # dirs MUST end with / exclude=$HOME/.prxsync-exclude.lst lastsync=.lastsync localdir=$HOME remote=ledzep:/var/users-backups/prx locallastsync=$localdir/$lastsync # get remote lastsync remotelasttmp=$(mktemp) scp $remote/$lastsync $remotelasttmp remotelast=$(cat $remotelasttmp) rm $remotelasttmp # compare remote w local lastsync locallast=$(cat $locallastsync) case "$1" in "push") if [ $remotelast -gt $locallast ]; then echo "/!\ Remote newer than local, please check manually" exit 1 fi SRC=$localdir DST=$remote ;; "pull") if [ $remotelast -eq $locallast ]; then echo "Already sync, nothing to do" exit elif [ $remotelast -lt $locallast ]; then echo "/!\ Local newer than remote, you may push" exit 1 fi SRC=$remote DST=$localdir ;; esac echo ".:!|-- Start prxsync --|!:." /usr/local/bin/rsync \ --exclude-from=$exclude \ --delete \ --files-from=$tosync \ --progress \ -zrltpuv $SRC $DST # keep track of last sync date date +%s > $locallastsync reload-dwm-status ``` ## Liste de liens https://si3t.ch/w/doku.php?id=notes:uses ^ Ce que j'utilise https://si3t.ch/w/doku.php?id=notes:openbsd:postinst ^ Ce que je configure après l'installation d'OpenBSD https://si3t.ch/w/doku.php?id=evils ^ Listes d'IP à blacklister, générées et préparées sur mon serveur --- Une réaction? Envoyez votre commentaire par mail (anonyme): mailto:bla@bla.si3t.ch?subject=octopenbsd-desktop Voici quelques instructions pour utiliser la liste de diffusion et recevoir les réponses à vos messages: https://si3t.ch/log/_commentaires_.txt