Restrict a given network interface for a particular user using iptables on Linux

I assume that users A and B are using the same Linux machine(s) where you are the administrator.

The following command will prevent the user with uid 1234 from sending packets on the interface eth0:

# iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Thanks to this StackExchange thread.

Fix broken dependencies of a Debian package

Today a quick how-to about repackaging of a Debian package with broken dependencies.

The context

I use a package automatically built from a custom repo who is broken. It uses a mandatory broken dependency libssl1.0.0. This outdated package has been retired from Debian Stretch repositories.

As this custom repository don’t provide package sources, I had to dig into this debian package to edit the control file, where package dependencies are defined.

Let’s go

You can change the dependencies of a deb package like this:

  1. Unpack deb: ar x golden-linux.deb (will create i.e. three files: debian-binary control.tar.gz data.tar.gz)
  2. Unpack control archive: tar xzf control.tar.gz (will create: postinst postrm preinst prerm md5sums control)
  3. Fix dependencies in control (use a text editor)
  4. Repack control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Repack deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (order important! See [Note] )

[Note]: dpkg wouldn’t be able to read the metadata of a package quickly if it had to search for where the data section ended!

So, I was able to replace the libssl1.0.0 broken dependency with the libssl1.0.2 one, who is part of Debian stretch.

Thanks to https://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies and my Google search ability who point me to the solution.

Installed packages from a specific repository

Today a quick command line to know installed packages from a specific repository. If you want to know all installed packages on your machine from download.virtualbox.org:

for package in $(dpkg -l | awk '{print $2}'); do apt-cache madison $package | grep download.virtualbox.org; done

Simple and easy ! Replace download.virtualbox.org with the repository you are searching for.

Network-manager, dnsmasq and OpenNIC

Today, a quick how-to on how to:

  • Override nameservers provided by your DHCP server by the ones from https://www.opennicproject.org, when you are using network-manager
  • Use Network-Manager with dnsmasq to speed up DNS resolution

    I assume you are using your Linux machine as a desktop, not a server, and with network-manager.

    Always use OpenNIC name servers

    In /etc/dhcp/dhclient.conf, add this line, this will override DNS provided by your DHCP server:

    supersede domain-name-servers 193.183.98.154, 104.244.72.13;

    You can put several servers separated per commas.

    Restart network-manager, then you can check /etc/resolv.conf file has been written with the OpenNIC nameservers.

    # Generated by NetworkManager
    nameserver 193.183.98.154
    nameserver 104.244.72.13

    You can find the closest name servers to your location here: http://wiki.opennicproject.org/ClosestT2Servers

    Use dnsmasq as local DNS cache

    Easy, install dnsmasq package, then put this in /etc/dnsmasq.d/custom:

    # disable dnsmasq DNS server
    port=0
    # Activate dnsmasq local cache
    listen-address=127.0.0.1

    To inform network-manager than you want to use dnsmasq as local DNS resolver, add this line in the [main] section of /etc/NetworkManager/NetworkManager.conf file:

    [main]
    #(some other conf can be present before this line)
    dns=dnsmasq

    You can now check than /etc/resolv.conf contain this:

    # Generated by NetworkManager
    nameserver 127.0.0.1

    Enjoy !

    Useful links:

    https://wiki.archlinux.org/index.php/Dnsmasq
    ~

Danse de salon et bal rétro: dans quel ordre enchaîner les séries de morceaux ?

Ce n’est pas un secret ni une recette magique et ça dépend un peu de la manière de faire de chacun.

Traditionnellement, on ouvre la bal avec un paso-doble. Viennent ensuite tango, valse, cha-cha, rock, bolero. On commence toujours à peu près de cette manière.
Après on recommence paso tango valse cha-cha, rock, bolero…

MAIS :

On ajuste ensuite en fonction du public et toujours en fonction du public et selon l’ambiance de l’après-midi ou soirée.
On chamboule un peu cet ordre de temps en temps. Et il faut que toutes ces danses aient été faites au moins une fois dans une heure.

Le tout étant de ne pas faire trop longtemps des danses rapides ou des danses lentes, il faut alterner. Si tu viens d’enchaîner une série de rocks endiablés et que tu vois que les gens n’en peuvent plus, il faut enchaîner (par exemple) par un tango qui sera plus reposant.

Il faut ensuite intercaler dans cet ordre pré-établi d’autres danses. Il faut au moins faire 1 ou 2 madisons dans la soirée qui peut se mettre à la place ou avant d’une série de rock.

A la place du rock ou du cha-cha, tu peux glisser une série de fox-trot ou charleston.

A la place des boleros (chansons anciennes), tu peux faire une série de slows (chansons + récentes).

Une à deux fois par heure (tout dépend du public), il faut au moins faire une série d’ambiance d’environ 10 minutes (ça peut être des tubes de maintenant ou des tubes de l’été récents ou plus anciens). Il faut comprendre par série d’ambiance morceaux qui bougent, ça peut aller des tubes du moment à la compagnie créole en passant par des salsas…

En général en retro, il y a également le couple java + polka.

La java étant à 3 temps, ne pas enchaîner une valse avec une java. Éviter également de l’enchaîner avec un boston qui est également une valse lente à 3 temps.

Des fois on ne sait pas quoi enchaîner comme série. Heureusement, on a des gens qui viennent nous voir : « vous pourrez nous faire une valse viennoise ? » et on répond « bien sûr !! ».

Après, le public peut se diviser en plusieurs catégories : il y a ceux qui viennent en couple ou avec des amis passer un bon moment. Il faut varier les danses. Il y a les vrais danseurs qui viennent pour danser. Ça, c’est un régal pour les yeux, il faut toujours varier.
Après, il peut y avoir une majorité de personnes seules qui viennent pour « draguer », ou des hommes mariés qui viennent sans leur femme pour trouver une maîtresse, tu vois le genre. Là, il faut privilégier les séries d’ambiance et celles un peu sportives (rock), où ces messieurs pourront faire un démonstration de leurs prouesses. Une fois qu’ils auront impressionné leur belle, il faut qu’ils puissent conclure sur un slow, boléro ou tango s’il savent le danser.

Dans certaines soirées, il peut y avoir une majorité de femmes seules, là il ne faudra pas les oublier en faisant des morceaux d’ambiance où on est pas obligé de danser à 2 car elles viennent aussi pour s’éclater.

Il y a également des danses typiques à ne pas oublier suivant la région ou tu te trouves.
En auvergne, ils aiment bien la bourée, je crois. Ce n’est pas une danse que tu feras à Marseille.
A Marseille, justement, ils aiment la java « à petits pas ». Ils font des petits pas donc si tes javas sont trop rapides, ils vont râler. Il faut vraiment ralentir le tempo.
A Avignon, ils vont râler si tu fais tes javas trop lentes.
Du côté d’Alès, il ne faut pas oublier de faire la polka du brise-pied.
A Montélimar, ça nous arrive de faire 3 ou 4 séries de madisons, ils adorent ça.
A Mouriès et Eygalières, tu ne re-signes pas si tu ne joues pas la chanson du ricard + la vache, mais là, ce n’est plus du retro…

Pour toutes les danses retro (pasos, tangos, etc.), on fait en général des série de 2 : on fait toujours 2 pasos, 2 tangos, 2 valses, 2 cha-chas pour une durée d’environ 5 minutes.

Mais on fait en général 3 rocks avec un point super important, on va progressivement du plus lent (pour commencer cool) au plus rapide (pour les sportifs !).
On fait également 3 slows (voire 4 parfois, plus rare).
Pour les séries d’ambiance, ça va par 3 également (voire 4).

C’est une recette de Mr Raymond Echeverria.
42 ans de métier, rien que ça.

Recursively find last modified file in a directory

I need to find the most recent file recursively. Linux find command took around 50 minutes.

Here is a little script to do it faster (less than 2 seconds):

#!/bin/sh
zob () {
    if [ -z ${CURRENT_DIR} ]; then
      CURRENT_DIR="$1"
    fi
    FILE=$(ls -Art1 ${CURRENT_DIR} | tail -n 1)
    if [ ! -f ${FILE} ]; then
        CURRENT_DIR="${CURRENT_DIR}/${FILE}"
        zob
    fi
    echo $FILE
    exit
}
zob $1

It’s a recursive function who get the most recent modified item of a directory. If this item is a directory, the function is called recursively and search into this directory, etc.

To search last modified file in /var/log, just call the script like this:

sh script.sh /var/log

Remplacer le caractère ^M par un retour à la ligne

Je me suis retrouvé aujourd’hui face à un fichier contenant ce putain de caractère ^M et l’outil dos2unix que j’utilise habituellement ne l’a pas remplacé par un retour à la ligne.

Mon autre workaround n’a pas fonctionné non plus:

# remove ^M character, dos2unix is propably not installed so workaround
tr -d $'\r' < ${FILE} > seq_tmp
mv seq_tmp ${FILE}
rm seq_tmp

Heureusement, ce vieux sed est venu à la rescousse:

sed -i 's/'"$(printf '\015')"'/\n/g' vilain_fichier.txt

Mission done !

Réactiver le touchscreen

Source: Merci à MaTachi du forum ArchLinux

Ayant récemment fait l’aquisition d’un PC avec touchscreen, j’ai remarqué que ce dernier se désactivait après retour de la mise en veille. J’utilise GNOME 3.

Pour corriger le souci:

Créer un script qui recharge le module hid_multitouch.

$ sudo mkdir /opt/touchscreen-fix
$ cd /opt/touchscreen-fix
$ echo '#!/bin/sh
/sbin/rmmod hid_multitouch && /sbin/modprobe hid_multitouch' | sudo tee resume.sh
$ sudo chmod +x resume.sh

Lancer ce script réactivera votre touchscreen. Bien entendu, il ne va pas s’executer automatiquement après chaque retour de veille :-/ C’est ce dont on va s’occuper ci-dessous.

Faire en sorte que le touchscreen se réactive après chaque retour de veille.

Créer ce service systemd:

$ echo '[Unit]
Description=Fix touchscreen after resume
After=suspend.target

[Service]
Type=simple
ExecStart=/opt/touchscreen-fix/resume.sh

[Install]
WantedBy=suspend.target' | sudo tee /etc/systemd/system/touchscreen-
fix.service

Et activez-le:

$ sudo systemctl daemon-reload
$ sudo systemctl enable touchscreen-fix

Ne pas laisser de trace dans l’historique

Lorsque l’on est plusieurs sur un système Linux, il peut arriver que l’on n’ait pas envie de laisser les commandes que l’on a entrées dans le terminal.

Il est possible d’éditer directement votre ~/.bash_history, ou effacer vos commandes à coups de history -d xxx, mais la méthode que je préfère est celle-ci:

HISTFILE=/dev/null

$HISTFILE est la variable d’environnement contenant le fichier d’historique. Vous pouvez la définir à n’importe quel moment. Une fois définie à /dev/null, il vous suffit de vous déloguer pour que les commandes entrées lors de votre session soient perdues à jamais.