Archives pour la catégorie Non classé

How to block ads with Ubuntu Touch

You can easily block ads with Ubuntu Touch with a few commands:

# mount your / file system
sudo mount -o remount,rw /
cd /etc/NetworkManager/dnsmasq.d
# get the list
sudo wget 'https://pgl.yoyo.org/as/serverlist.php?hostformat=dnsmasq&mimetype=plaintext' -O adservers.conf

sudo reboot

Thanks to this author of https://pgl.yoyo.org/adservers/ for his lists.

PPA pour Grisbi

Si vous êtes utilisateur du logiciel de comptabilité Grisbi en même temps que de la distribution Ubuntu, il ne vous aura pas échappé que le paquet officiel plante sérieusement dans la dernière version « Xenial » (16.04).

Les développeurs de Grisbi ont réagit rapidement en publiant sur sourceforge.net une nouvelle version 1.0.1 de la bête, sous forme de sources uniquement.

Les mainteneurs de Debian ont récemment compilé cette version pour unstable, ce qui laisse présager une correction du bug dans Ubuntu au mieux pour la prochaine sortie 17.04,  voire la version 2018 pour ceux qui suivent le canal LTS.

Aussi je me suis permis de compiler très (trop) rapidement la version utilisable dans un PPA installable sous Ubuntu avec les commandes suivantes :

sudo add-apt-repository ppa:lud-janvier/grisbi
sudo apt-get update

Grisbi devrait ensuite se mettre à jour vers une version utilisable.

Nettoyage des anciens noyaux avec Ubuntu

Si vous avez un message du style « La partition /boot est remplie », vous êtes à la bonne page.

D’après la doc, la commande

sudo apt-get autoremove

est censée enlever les anciens noyaux. Mais parfois, même s’il vous reste plusieurs anciens noyaux (la théorie veut qu’il en laisse deux), cette commande ne fait rien.

C’est peut-être parce que vous n’avez pas fait les mises à jour avec apt-get (mais aptitude ou l’application dédiée). Du coup, les paquets linux-image-*, qui devraient être marqués automatiques, ne le sont pas. Cette commande devrait régler ça :

apt-mark showmanual | grep -E 'linux-.+-[0-9]+' | xargs sudo apt-mark auto

Maintenant, un petit :

sudo apt-get autoremove

devrait faire le ménage correctement. Faites attention quand même qu’il n’en supprime pas trop quand même !

Chargement de la sauvegarde initiale avec BackupPC

BackuPC est une solution de sauvegarde très efficace au niveau stockage et bande passante. Du coup, on peut sauvegarder des gros volumes de données sur une petite connexion (ADSL). Reste le problème de la première sauvegarde, qui risque de prendre des jours.

Le plus simple est alors de charger les données depuis l’outil précédent de sauvegarde ou un copie des données (sur un disque USB par exemple).

La technique va être d’utiliser proot (http://proot.me) qui va traduire les chemins du support amovible comme s’il s’agissait des partages sur la machine à sauvegarder. proot est disponible dans les dépôts ubuntu et consorts et dans un dépôt supplémentaire (voir http://proot.me/#downloads) pour les autres. Pas de paquet pour RHEL 7 (encore ?), mais le binaire statique marche très bien.

Mettons que votre partage à sauvegarder soit « /home », via rsync+ssh et que vous ayez monté le disque externe dans :

/mnt/diskext

Dans backuppc on va modifier temporairement la commande de transfert de cette façon :

RsyncClientCmd = 'proot -b /mnt/diskext/home:/home $rsyncPath $argList+';

Cette commande permet d’intercepter tous les appels de rsync aux chemins dans /home. À chaque fois qu’il cherchera /home/fic, il tombera sur /mnt/diskect/home/fic

Lancer la sauvegarde. C’est tout !

N’oubliez pas de restaurer la commande originale qui ressemblait à :

$sshPath -q -x -l root $host $rsyncPath $argList+

Accèder à un PC nomade partout tout le temps

Il suffit de lui dire de monter un tunnel ssh entre lui et un serveur fixe (comprendre : qui a une adresse IP publique ou vers lequel on peut forwarder un port).

La première chose à faire est d’automatiser la connexion entre le client et le serveur, à l’aide de clefs ; je ne le refais pas ici, c’est expliqué partout ailleurs.

Il suffit pour cela d’exécuter la commande suivante :

ssh -Nf -o ExitOnForwardFailure=yes -o ServerAliveInterval=300 -o ServerAliveCountMax=2 -R 2222:localhost:22 serveur > /dev/null 2>&1

Quelques explications sur les options choisies :

  • ExitOnForwardFailure : si vous lancez la commande mais que le tunnel existe déjà, ne laisse pas la connexion ssh active (pour rien)
  • ServerAliveInterval et ServerAliveCountMax : si le PC nomade est derrière un NAT et que la connexion n’est pas utilisée, au bout d’un moment le NAT va oublier la session. Du coup le tunnel sera toujours existant côté client et serveur, mais plus utilisable. On fait circuler un petit quelque chose régulièrement pour rappeler au NAT notre présence.
  • 2222 : un port au hasard, côté serveur, mais > 1024. Si vous avez 2 nomades, il faudra bien sûr faire preuve d’imagination
  • 22 : le port sur le nomade vers lequel on voudra accéder. Ici ssh, voir l’exemple plus bas.
  • serveur : Mettez ici le DNS du serveur ou un alias ssh. Cet alias permettra de préciser d’autres paramètres : le port, l’utilisateur à prendre côté serveur, etc.

Bien sûr ce tunnel va tomber dès que l’une des deux machines va s’arrêter ou être déconnectée du réseau. Pour cela 2 solutions :

  • une crontab, toute les 15 minutes :
*/15 * * * * ssh ...
  • Beaucoup plus élégant : déclenché par votre client dhcp ou le service réseau (network, NetworkManager). La solution est laissée à l’appréciation du lecteur.

Pour utiliser le tunnel, depuis le serveur :

ssh -p 2222 localhost

Et c’est tout. Ça marche, c’est magique.

N’oubliez pas d’automatiser la connexion entre le serveur et le client.

« Le paquet ne correspond pas au téléchargement attendu »

Ou dans d’autres LANG  « Package does not match intended download ».

Un message pas très sympa vu que si vous essayez de télécharger le fichier à la main depuis votre cobbler, il s’installe très bien.

Il semblerait en effet que ses joyeux mainteneurs du dépôt EPEL 7 aient décidé pour une plus grande lisibilité de mettre les paquets qui commencent par ‘a’ dans un dossier ‘a/’ (et ainsi de suite). Ce qui est tout à fait louable. Mais cobbler (qui chez moi synchronise ce dépôt avec reposync) n’a pas tout compris à cette subtile modification : j’ai un package cabextract*.rpm dans la base du dépôt ET dans le répertoire « c/ » ET ils ont tous les deux la même version. Du coup comment voulez-vous que createrepo arrive à faire de beaux indexes ?

Bon la solution est bourrin mais marche assez bien (n’essayez pas de rajouter l’option -d à reposync, ça sert à rien (BUG ?))

cd /var/www/cobbler/repo_mirror/epel7/
# rm *.rpm
# cobbler reposync --only epel7

PS: Ne faites pas avec sudo, il vous dira qu’il y a beaucoup trop d’arguments pour lui.

dhcpd et ddns sont sur un bateau

Il est assez sympa que chaque machine ait un petit nom DNS qui permette de la joindre. On pourrait pour cela écrire un petit script à base de nsupdate qui mette à jour le DNS. Problème : cela nécessite que les clefs de votre DNS se baladent un peu sur tous les systèmes… l’enfer à sécuriser.

Pour éviter cette dispersion, on va utiliser le serveur DHCP (existant) qui fera tout ça à notre place. Vous trouverez sur plein de site comment faire cela, mais en gros, côté DHCP, ça ressemble à ça :

ddns-updates on;
ddns-update-style interim;
ddns-rev-domainname "in-addr.arpa.";
ddns-domainname "mondomaine.local.";
ignore client-updates;
update-conflict-detection false;
update-static-leases on;

zone mondomaine.local. {
    primary 127.0.0.1;
    key "rndckey";
}

subnet 192.168.0.0 netmask 255.255.255.0 {
    zone  0.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key "rndckey";
    }
}

Du coup y’a plus qu’à écrire des baux statiques à coup de :

host une-machine {
    hardware ethernet 01:23:45:67:89:AB;
    fixed-address 192.168.0.69;
    ddns-hostname une-machine;
}

Feignant par nature, je trouve qu’écrire deux fois le nom de la machine est très pénible (sans compter le risque de mettre à jour un champ en oubliant de mettre à jour l’autre). On cherche dans la doc, et on dirait qu’il y a un paramètre pour ça :

use-host-decl-names on;

Qui permet de n’avoir plus qu’à écrire alors :

host une-machine {
    hardware ethernet 01:23:45:67:89:AB;
    fixed-address 192.168.0.69;
}

On peut difficilement faire plus court.

Sauf que ça marche mal. Bien qu’on ait mis

ignore client-updates;

Les clients qui ont décidé de changer de nom voient ce nom remonter via leur client DHCP (comme Windows le fait), qui remonte alors directement au DNS.

Donc si un jour quelqu’un décide de renommer son poste en « puppet » par exemple, l’entrée DNS existante sera écrasée avec la mauvaise information.

Pour éviter cela, n’utilisez pas la ligne

use-host-decl-names on;

mais plutôt

ddns-hostname = host-decl-name;

qui n’est pas une directive de configuration, mais une évaluation conditionnelle (man 5 dhcp-eval) qui fait en sorte que par défaut, chaque déclaration host ait automatiquement une propriété ddns-hostname. Et du coup, les clients DHCP ne peuvent plus remonter leur hostname au DNS.

NB : Je ne suis pas fou, eux aussi ont le même problème.