Un petit hack pour utiliser le ftps avec pacman
Publié il y a 1 année, 5 mois (Édité il y a 11 mois, 3 semaines)
Étiquettes: ArchLinux,  tips

En me baladant sur le forum ArchLinux, je suis tombé sur un sujet interressant. N'ayant rien d'autre à faire, je me suis amusé à faire en sorte que pacman vérifie l'authenticité du certificat de mon mirroir, et accessoirement que la communication puisse aussi être chiffrée.

Comment faire ?

Dans le fichier de configuration /etc/pacman.conf il y a une option nommée XferCommand. Voici ce qu'en dit la page de manuel:

XferCommand = /path/to/command %u
If set, an external program will be used to download all remote files. All instances of %u will be replaced with the download URL. If present, instances of %o will be replaced with the local file- name, plus a ".part" extension, which allows programs like wget to do file resumes properly.

This option is useful for users who experience problems with built-in http/ftp support, or need the more advanced proxy support that comes with utilities like wget.

Si cette variable est définie elle sera utilisée par pacman pour effectuer les différents téléchargements (autant celui des données concernant les dépots, que les paquets). On va donc utiliser une commande personnalisée qui se chargera entre autre de vérifier et d'utiliser le chiffrement à l'aide de SSL/TLS.

Mise en œuvre.

La mise en œuvre est très simple et se fait en 2 temps.

  1. Écriture d'un script qui s'assure du téléchargement, de la vérification de l'authenticité du serveur et du chiffrement des canaux de communication.
  2. Configuration de l'utilisation de ce script par pacman.

Écriture du script.

Ce script que j'ai nommé /usr/bin/ssl-pacman, ressemble à :

#!/bin/bash

case $1 in
    *.db.tar.gz)
        echo "Syncing repository : '$(basename $1 .db.tar.gz)'";;
    *.pkg.tar.gz)
        echo "Downloading package : '$(basename $1 .pkg.tar.gz)'";;
esac
/usr/bin/curl --ftp-ssl-reqd -# -w "Done !\n\n" -O $1

Toute la partie vérification de l'authenticité du serveur et chiffrement des canaux est prise en charge par curl.

Configuration de pacman.

La configuration ce fait simplement en ajoutant la ligne suivante dans la section [options] de /etc/pacman.conf :

XferCommand = /usr/bin/ssl-pacman %u

Enfin...

Voilà, c'est tout !! Il n'y a rien d'autre à faire.

Adaptations...

  • Ajouter un certificat pour qu'il soit reconnu par curl: se référer à cette page.
  • Ignorer la vérification du certificat (juste chiffrer les flux): ajouter l'option -k à la ligne appelant curl dans le script.
  • Ne pas échouer en cas de non support du SSL/TLS par un miroir: utiliser l'option --ftp-ssl au lieu de --ftp-ssl-reqd dans la ligne appelant curl dans le script.
  • Chiffrer uniquement le flux de controle: utiliser l'option --ftp-ssl-control au lieu de --ftp-ssl-reqd dans la ligne appelant curl dans le script.
  • Autres soucis : lire la page de manuel de curl ou me contacter.

Auteur: slubman -  Categorie: GNU Linux Commentaires: 2Permalinkdel.icio.us del.ico.us
Another patch
Publié il y a 1 année, 5 mois (Édité il y a 11 mois)
Étiquettes: ArchLinux,  tips

Attention Édition (10 Février 2008) : Ce bogue à été corrigé sur les dépots de la distribution, le 19 Novembre 2007, avec la mise à disposition du paquet cpufrequtils-002-2 .


Juste une version légèrement modifiée du fichier /etc/rc.d/cpufreq fourni par le paquet cpufrequtils, qui met à jour la politique et les fréquence de fonctionnements sur tout les cœurs et/ou processeurs trouvés.

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

# source application-specific settings
[ -f /etc/conf.d/cpufreq ] && . /etc/conf.d/cpufreq

case "$1" in
start)
stat_busy "Setting cpufreq governing rules"

    params=""
    if [ -n $governor ]; then
        mod="cpufreq_$governor"
        modprobe $mod > /dev/null 2>&1
        params="-g $governor"
        if [ $? -eq 0 ]; then
            if [ "$min_freq" != "" ]; then
                params="$params -d $min_freq"
            fi
            if [ "$max_freq" != "" ]; then
                params="$params -u $max_freq"
            fi
        else
            stat_busy "    Cannot load governor module '$governor'"
            stat_fail
            exit
        fi
    fi

    if [ "$params" != "" ]; then
        for cpu in /sys/devices/system/cpu/cpu*
        do
            cpufreq-set $params -c $(basename $cpu | sed -e 's/cpu//')
        done
        stat_done
    else
        stat_busy "    Invalid configuration in /etc/conf.d/cpufreq"
        stat_fail
    fi
;;
stop)
# nothing to do
;;
restart)
$0 start
;;
set)
# TODO: make callable... "cpufreq set 800MHz"
;;
*)
echo "usage: $0 {start|stop|restart}"  
esac
exit 0

J'ai proposé ce fichier comme solution au bogue n°6440 sur le bugtracker ArchLinux.


Auteur: slubman -  Categorie: GNU Linux -  -  Permalinkdel.icio.us del.ico.us