Du libre, du code, des idées, du mélange d’ArraKISS…

De l’épice pour la pensée

Il y a pléthore de miroir OpenBSD disponibles, il faut choisir dans la liste.
Jusqu'à présent, je me contentait de regarder l'emplacement géographique pour savoir quoi mettre dans le fichier /etc/installurl afin d'installer les paquets facilement.
Malheureusement, je trouvais que ça manquait un peu de précision.

Vous me connaissez, qu'à cela ne tienne, j'ai fait un script qui s'appelle ffom : find fast openbsd mirror
Ce qu'il fait :

  • Il récupère la liste des miroire à partir de la liste officielle
  • Il teste les uns après les autres les miroirs
  • Lorsque vous appuyez sur ctrl-c ou attendez la fin de tous les tests, il le trie en ordre croissant de temps de réponse : le premier est donc le meilleur. J'aurais découvert la commande "trap", vraiment cool!
  • Il n'a besoin que de curl.

Je ne doute pas qu'on puisse faire mieux, mais ça marche bien pour l'instant :)

Vous pourrez trouver ce script ci-dessous ou :

#!/bin/sh
# ffom : find fast openbsd mirror
# Auteur :      thuban <thuban@yeuxdelibad.net>
# Improved by vincentdelft
# licence :     MIT

# Description : cherche le miroir OpenBSD le plus rapide
# Depends : curl

t=$(mktemp)
MIRRORS="$(curl -s https://www.openbsd.org/ftp.html | grep -Eo "(https?|ftp)://.*/pub/OpenBSD/" |uniq)"

NB=$(echo $MIRRORS | wc -w | tr -d ' ')
COUNT=1

end() {
	clear 
	echo 'RESULTS:'
	echo '--------' 
	sort -g $t 
	rm $t
	exit
}

trap end INT
echo "Hit ctrl-c to stop and see results"

for URL in $MIRRORS; do
	result=$(curl --silent --output /dev/null --max-time 5 --write-out "%{time_total}-%{time_pretransfer}" "$URL")
	time=$(echo ${result} | bc)
	echo "...tested $time $URL [${COUNT}/${NB}]" 
	echo "$time : $URL" >> $t
	COUNT=$(($COUNT + 1))
done 

end

Voici le classement pour moi :

0.170478 : http://ftp2.fr.openbsd.org/pub/OpenBSD/
0.176536 : http://mirror.ox.ac.uk/pub/OpenBSD/
0.202198 : http://mirror.exonetric.net/pub/OpenBSD/
0.203528 : http://ftp.man.poznan.pl/pub/OpenBSD/
0.206931 : http://www.obsd.si/pub/OpenBSD/
0.300705 : http://ftp.aso.ee/pub/OpenBSD/
0.308147 : http://mirror.switch.ch/ftp/pub/OpenBSD/
0.325268 : http://openbsd.mirrors.pair.com/pub/OpenBSD/
0.357502 : https://ftp.hostserver.de/pub/OpenBSD/
0.369432 : https://mirrors.ircam.fr/pub/OpenBSD/
0.380675 : https://anorien.csc.warwick.ac.uk/pub/OpenBSD/
0.384045 : http://mirrors.mit.edu/pub/OpenBSD/
0.390400 : https://www.mirrorservice.org/pub/OpenBSD/
0.392840 : https://mirror.hs-esslingen.de/pub/OpenBSD/
0.407639 : http://mirrors.gigenet.com/pub/OpenBSD/
0.409608 : https://ftp2.eu.openbsd.org/pub/OpenBSD/
0.430520 : https://mirror.bytemark.co.uk/pub/OpenBSD/
0.431837 : https://ftp.spline.de/pub/OpenBSD/
0.450512 : https://mirrors.dotsrc.org/pub/OpenBSD/
0.465088 : https://fastly.cdn.openbsd.org/pub/OpenBSD/
0.465551 : http://piotrkosoft.net/pub/OpenBSD/
0.474384 : https://mirrors.dalenys.com/pub/OpenBSD/
0.514941 : https://ftp.cc.uoc.gr/pub/OpenBSD/
0.522097 : https://ftp.nluug.nl/pub/OpenBSD/
0.549315 : http://mirrors.unb.br/pub/OpenBSD/
0.574759 : https://openbsd.ipacct.com/pub/OpenBSD/
0.596792 : https://ftp.bit.nl/pub/OpenBSD/
0.601835 : https://openbsd.delfic.org/pub/OpenBSD/
0.614496 : https://mirror.litnet.lt/pub/OpenBSD/
0.632571 : https://mirrors.pidginhost.com/pub/OpenBSD/
0.647992 : https://openbsd.mirror.netelligent.ca/pub/OpenBSD/
0.658851 : http://ftp.jaist.ac.jp/pub/OpenBSD/
0.691112 : https://ftp.fau.de/pub/OpenBSD/
0.695468 : https://mirror.csclub.uwaterloo.ca/pub/OpenBSD/
0.699224 : https://mirrors.nav.ro/pub/OpenBSD/
0.715067 : ftp://mirror.exonetric.net/pub/OpenBSD/
0.717398 : http://mirror.rise.ph/pub/OpenBSD/
0.731446 : https://openbsd.cs.toronto.edu/pub/OpenBSD/
0.739496 : ftp://mirrors.ircam.fr/pub/OpenBSD/
0.767239 : https://ftp.fsn.hu/pub/OpenBSD/
0.775231 : https://openbsd.mirror.garr.it/pub/OpenBSD/
0.796890 : https://ftp4.usa.openbsd.org/pub/OpenBSD/
0.838188 : http://kartolo.sby.datautama.net.id/pub/OpenBSD/
0.843364 : https://ftp.eu.openbsd.org/pub/OpenBSD/
0.867719 : https://ftp5.usa.openbsd.org/pub/OpenBSD/
0.872131 : ftp://ftp.bytemine.net/pub/OpenBSD/
0.873076 : ftp://ftp.bit.nl/pub/OpenBSD/
0.876426 : https://ftp.halifax.rwth-aachen.de/pub/OpenBSD/
0.906848 : https://ftp.heanet.ie/pub/OpenBSD/
0.910614 : ftp://mirror.switch.ch/pub/OpenBSD/
0.917422 : ftp://ftp.mirrorservice.org/pub/OpenBSD/
0.951280 : https://ftp.OpenBSD.org/pub/OpenBSD/
0.992542 : https://mirror.esc7.net/pub/OpenBSD/
0.997968 : https://mirrors.ucr.ac.cr/pub/OpenBSD/
1.002347 : ftp://ftp.nluug.nl/pub/OpenBSD/
1.004686 : https://ftp3.usa.openbsd.org/pub/OpenBSD/
1.018899 : https://mirrors.sonic.net/pub/OpenBSD/
1.028484 : ftp://mirror.hs-esslingen.de/pub/OpenBSD/
1.047536 : ftp://mirror.ox.ac.uk/pub/OpenBSD/
1.072567 : ftp://ftp.irisa.fr/pub/OpenBSD/
1.075051 : https://cloudflare.cdn.openbsd.org/pub/OpenBSD/
1.146726 : ftp://ftp.man.poznan.pl/pub/OpenBSD/
1.156617 : https://ftp.bytemine.net/pub/OpenBSD/
1.220939 : https://openbsd.c3sl.ufpr.br/pub/OpenBSD/
1.225577 : ftp://ftp.piotrkosoft.net/pub/OpenBSD/
1.228718 : ftp://ftp.icm.edu.pl/pub/OpenBSD/
1.261707 : ftp://mirror.bytemark.co.uk/pub/OpenBSD/
1.276578 : ftp://ftp2.eu.openbsd.org/pub/OpenBSD/
1.286102 : https://mirror.vdms.io/pub/OpenBSD/
1.289844 : ftp://ftp.heanet.ie/pub/OpenBSD/
1.290457 : ftp://ftp.ulak.net.tr/pub/OpenBSD/
1.298279 : ftp://mirror.yandex.ru/pub/OpenBSD/
1.308601 : https://mirror.leaseweb.com/pub/OpenBSD/
1.320563 : ftp://ftp.hostserver.de/pub/OpenBSD/
1.328281 : https://openbsd.mirror.constant.com/pub/OpenBSD/
1.353299 : https://openbsd.hk/pub/OpenBSD/
1.384652 : ftp://mirrors.dalenys.com/pub/OpenBSD/
1.408751 : ftp://mirrors.pidginhost.com/pub/OpenBSD/
1.462666 : ftp://ftp.spline.de/pub/OpenBSD/
1.510367 : ftp://ftp.aso.ee/pub/OpenBSD/
1.515511 : ftp://ftp.eu.openbsd.org/pub/OpenBSD/
1.582234 : ftp://mirror.one.com/pub/OpenBSD/
1.629271 : ftp://ftp.cc.uoc.gr/pub/OpenBSD/
1.643345 : ftp://openbsd.ipacct.com/pub/OpenBSD/
1.765213 : https://mirrors.syringanetworks.net/pub/OpenBSD/
1.799737 : ftp://mirrors.mit.edu/pub/OpenBSD/
1.860721 : ftp://mirror.esc7.net/pub/OpenBSD/
1.954544 : http://mirror.internode.on.net/pub/OpenBSD/
1.984793 : https://mirror.one.com/pub/OpenBSD/
1.995199 : ftp://mirror.csclub.uwaterloo.ca/pub/OpenBSD/
2.006020 : ftp://ftp.fsn.hu/pub/OpenBSD/
2.007276 : ftp://ftp2.fr.openbsd.org/pub/OpenBSD/
2.013689 : ftp://ftp4.usa.openbsd.org/pub/OpenBSD/
2.025392 : ftp://ftp5.usa.openbsd.org/pub/OpenBSD/
2.028912 : ftp://mirror.litnet.lt/pub/OpenBSD/
2.268570 : ftp://ftp.obsd.si/pub/OpenBSD/
2.299880 : ftp://openbsd.cs.toronto.edu/pub/OpenBSD/
2.365331 : ftp://mirrors.dotsrc.org/pub/OpenBSD/
2.416547 : https://ftp.icm.edu.pl/pub/OpenBSD/
2.516440 : ftp://mirrors.sonic.net/pub/OpenBSD/
2.528243 : ftp://ftp3.usa.openbsd.org/pub/OpenBSD/
2.533396 : https://mirror.aarnet.edu.au/pub/OpenBSD/
2.772639 : ftp://mirrors.syringanetworks.net/pub/OpenBSD/
3.161285 : ftp://openbsd.c3sl.ufpr.br/pub/OpenBSD/
3.478581 : ftp://mirrors.unb.br/pub/OpenBSD/
3.589945 : https://mirror.yandex.ru/pub/OpenBSD/
3.689257 : https://ftp.rnl.tecnico.ulisboa.pt/pub/OpenBSD/
3.760751 : ftp://ftp.jaist.ac.jp/pub/OpenBSD/
3.962318 : ftp://mirror.rise.ph/pub/OpenBSD/
4.074385 : https://ftp.yzu.edu.tw/pub/OpenBSD/
4.943132 : ftp://ftp.yzu.edu.tw/pub/OpenBSD/
5.158715 : ftp://mirror.internode.on.net/pub/OpenBSD/
6.345436 : https://ftp.fr.openbsd.org/pub/OpenBSD/
6.390462 : ftp://anorien.csc.warwick.ac.uk/pub/OpenBSD/
14.369035 : https://www.ftp.ne.jp/pub/OpenBSD/
18.108227 : ftp://ftp.kddilabs.jp/pub/OpenBSD/

Ces tests seraient à réaliser un certain nombre de fois pour être plus précis.
Tiens, un version javascript de ce truc serait pas mal... AJAX risque de bloquer les requêtes cross-domain, donc ça dépasse un peu mon niveau... À bon entendeur ;)

Dans tous mes fichiers, que ce soit du code ou des notes, je m'y perds parfois un peu. La plupart du temps, je me souviens juste d'un mot qui doit être présent dans ce fichier.
J'utilise et j'abuse de cette petite fonction (à placer dans ~/.profile) qui s'utilise ainsi :

findcontent /path expression_régulière
findcontent () {
    if [ -n "$2" ]; then
        find "$1" -type f -exec grep -qI "$2" {} \; -print
    else
        find "./" -type f -exec grep -qI "$1" {} \; -print
    fi
}

Il vous affichera le nom des fichiers contenant l'expression régulière.

Merci à celui ou celle qui me l'avait fait découvrir il y a quelques années, c'est redoutable.

Si vous avez installé votre OpenBSD depuis quelques temps, peut-être souhaitez-vous faire un peu de ménage.
Rien de tel que de supprimer les ports et paquets inutilisés, puis terminer avec les commandes suivantes pour retirer les dépendances inutiles et vérifier le système :

pkg_delete -a
pkg_check

Afin de détecter quels paquets ne me servent plus depuis longtemps et que j'ai peut-être oublié, j'utilise le script suivant

Il regarde la liste des paquets installés puis affiche ceux qui ont un exécutable qui n'a pas été utilisé depuis plus d'un mois. (changez la variable DAYS pour un autre délai).

Voici le script :

#!/bin/sh
# print unused packages that may be deleted

# It only check if last access time of binaries is older than a month by default.
# It doesn't check for libs, only bins

DAYS=15    # Number of days since last access
LAST=$(($(date +%s) - ($DAYS * 24 * 3600)))

echo "Those packages haven't been used in the last $DAYS days : "

for P in $(pkg_info | cut -d' ' -f1); do 
        BINS=$(pkg_info -L $P |grep '/usr/local/bin')
        for B in $BINS; do
                # check if $B is a link
                B=$(readlink -f $B)
                if [ $(stat -f %a $B) -lt $LAST ]; then
                        echo "$P  | $B"
                fi
        done
done

Décidément, que j'aime OpenBSD. La simplicité de ses outils permet de, très facilement, récupérer des informations sans prise de tête.

Suite à une discussion lue sur la liste de diffusion de suckless.org, j'ai été tenté de tester le shell mksh. Bien m'en a pris, il est étonnant de rapidité!

Ne vous attendez pas non plus à une révolution, un shell reste un shell ☺.
Cela dit, je le trouve nettement plus rapide. Plus rapide que bash, bien évidemment tellement ce dernier est plein, mais aussi plus rapide que zsh. Si comme moi vous n'utilisez pas le quart des possibilités de ce dernier shell, vous devriez tenter mksh.

Petite comparaison de la taille des binaires :

-rwxr-xr-x 1 root root 264904 mars  15  2015 /bin/mksh
-rwxr-xr-x 1 root root 722464 nov.  25  2014 /bin/zsh5
-rwxr-xr-x 1 root root 1029624 nov.  13  2014 /bin/bash

mksh est donc 74% plus petit que bash et 63% plus petit que zsh (oui, j'me la pète, je fais des maths ^^)

Pour changer de shell, tapez :

chsh

Puis entrez le bon chemin vers mksh, soit "/bin/mksh".

Je vous invite à légèrement configurer mksh en mettant dans le fichier ~/.mkshrc

# les alias et les fonctions fonctionnent comme avec les autres shell
alias ll='ls -l'
mkcd() { mkdir "$1" && cd "$1" }

HISTFILE=~/.mksh_hist
HISTSIZE=3000

PS1='$PWD # '; (( USER_ID )) && PS1=$(echo "\e[0;32m\$PWD\e[0;36m::\e[0;37m$ " ); 

Amusez-vous bien ;)

Insatisfait par rss2email qui prenait toute la charge cpu de mon serveur à chaque fois qu'il relevait les nouveautés dans les flux rss que je consulte, j'ai voulu tenter de bricoler un outil à ma sauce. C'est alors qu'est né srss.

L'idée était de suivre un maximum la philosophie UNIX. srss est donc composé de plusieurs petits scripts qui ont chacun une tâche spécifique.

  • srss_update : ce script télécharge les flux et ne garde que les plus récents.
  • srss2mail : ce script prend chaque nouveau flux et envoie un courriel pour pouvoir lire les articles de n'importe où.

Les adresses des flux sont simplement enregistrées dans un fichier (~/.srss/feedlist) avec une adresse par ligne. Très peu de dépendances sont nécessaires : xmlstarlet, wget et html2text.

On pourrait donc facilement imaginer d'autres scripts qui fabriquent une page html pour lire les flux ou n'importe quelle autre fantaisie.

Et afin de relever les nouveaux flux régulièrement, il suffit de passer par une tâche cron, qui s'occupe très bien ce ça.

Pour l'installer, il faut récupérer les scripts avec git par exemple :

git clone http://git.yeuxdelibad.net/srss

Et ensuite, un simple make install se chargera d'installer les scripts.
Notez qu'un script "exemple" est disponible (srss), qu'il vous suffit d'adapter à vos besoins.