l'ancienne page sur le portage asterisk
Packages .deb de libnfc pour Debian ou Ubuntu Toutes les commandes doivent être lancées en mode root. Pour passer en mode root, sous Debian connectez vous sous root ou lancer la commande « su - », sous Ubuntu lancer la commande « sudo su - ».

Les packages .deb de libnfc n'existent pas sur votre distribution basée sur Debian ou Ubuntu ?

Vous pouvez les générer à partir des paquets sources présents dans la version unstable Debian Sid ou la future version de Trusty Ubuntu.

Vous pouvez aussi aller directement en fin de document et ne lire que la partie "Binaires".

Mode d'emploi

Tout d'abord, si le commande suivante retourne une réponse, vous devez d'abord rebooter votre machine :
commande(s) à exécuter :
mount | grep chroot
Puis, pour préparer le terrain, commencer lancer les commandes :
commande(s) à exécuter :
apt-get install debootstrap wget
Les scripts qui vont suivre peuvent être récupérés sur ce site :
commande(s) à exécuter :
rm -rf ~/chroot
wget -c http://backports.free.fr/backports-libnfc.tar.bz2
tar -C ~ -xjf ~/backports-libnfc.tar.bz2
rm ~/backports-libnfc.tar.bz2
Vérifier ou créer le script :
script ~/PrepareChroot.sh :
#!/bin/sh

## script file name : ~/PrepareChroot.sh

vers=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | head -1 | cut -d' ' -f3`
mirr=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspberrypi|raspbian)/? $vers main" /etc/apt/* 2>>/dev/null | head -1 | cut -d' ' -f2`
mirr=`echo $mirr | sed -e 's%http://archive.raspberrypi.org/debian%http://mirrordirector.raspbian.org/raspbian%'`

echo debootstrap $vers ~/chroot $mirr
le lancer :
commande(s) à exécuter :
chmod +x ~/PrepareChroot.sh
~/PrepareChroot.sh
vérifier les informations affichées et lancer la commande proposée (qui ressemblera à quelque chose comme "debootstrap precise ~/chroot http://fr.archive.ubuntu.com/ubuntu/") qui installera une machine virtuelle (pour ne pas polluer votre machine hôte).

Ensuite se connecter à la machine virtuelle :
connexion à la machine virtuelle :
mount --bind /dev ~/chroot/dev
mount --bind /dev/pts ~/chroot/dev/pts
mount --bind /proc ~/chroot/proc/
mount --bind /sys ~/chroot/sys

chroot ~/chroot su -
puis Une fois dans la machine virtuelle :
Vérifier ou créer 4 scripts "bash" :
script ~/InitDebianRepository.sh :
#!/bin/sh

## script file name : ~/InitDebianRepository.sh

arch=`dpkg --print-architecture`
vers=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f3`
mirr=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f2`

if [ "`lsb_release -a 2>/dev/null | grep 'Distributor ID:' | cut -d: -f 2 | sed -e 's/^\s*//'`" = "Ubuntu" ]
then
  sed -i -e "s|^\(deb $mirr $vers main\)$|\1 universe|" /etc/apt/sources.list
fi

echo arch = $arch
echo vers = $vers
echo mirr = $mirr

rm -rf ~/temp-*

rm -rf ~/dists
mkdir ~/dists
mkdir ~/dists/$vers
mkdir ~/dists/$vers/main
mkdir ~/dists/$vers/main/binary-$arch
mkdir ~/dists/$vers/main/source

cd ~/dists/$vers/main

apt-get install wget
wget -c $mirr/dists/$vers/main/binary-$arch/Release -O binary-$arch/Release
wget -c $mirr/dists/$vers/main/source/Release -O source/Release

if [ "$arch" != "i386" ]
then
  if [ `grep ID=ubuntu /etc/*release* || grep DISTRIB_ID=Ubuntu /etc/*release*` ]
  then
    mkdir ~/dists/$vers/main/binary-i386
    wget -c $mirr/dists/$vers/main/binary-i386/Release -O binary-i386/Release
  fi
fi

sed -i -e "/^deb file:/d" /etc/apt/sources.list
sed -i -e "/^deb-src file:/d" /etc/apt/sources.list
sed -i -e :a -e '/^[ |\n|\t]*$/ {$d;N;ba' -e '}' /etc/apt/sources.list

echo >>/etc/apt/sources.list
echo "deb file:/root/ $vers main" >>/etc/apt/sources.list
echo "deb-src file:/root/ $vers main" >>/etc/apt/sources.list

~/UpdateDebianRepository.sh
script ~/UpdateDebianRepository.sh :
#!/bin/sh

## script file name : ~/UpdateDebianRepository.sh

apt-get install lsb-release

arch=`dpkg --print-architecture`
vers=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f3`

apt-get install dpkg-dev

cd ~/dists/$vers/main/
dpkg-scanpackages binary-$arch /dev/null dists/$vers/main/ | gzip -f9 >binary-$arch/Packages.gz
dpkg-scansources source /dev/null dists/$vers/main/ | gzip -f9 >source/Sources.gz

if [ "$arch" != "i386" ]
then
  if [ `grep ID=ubuntu /etc/*release* || grep DISTRIB_ID=Ubuntu /etc/*release*` ]
  then
    dpkg-scanpackages binary-i386 /dev/null dists/$vers/main/ | gzip -f9 >binary-i386/Packages.gz
  fi
fi

apt-get update && apt-get upgrade
script ~/GenerateDebianPackage.sh :
#!/bin/sh

## script file name : ~/GenerateDebianPackage.sh

apt-get install lsb-release

arch=`dpkg --print-architecture`
vers=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f3`

if [ `grep ID=ubuntu /etc/*release* || grep DISTRIB_ID=Ubuntu /etc/*release*` ]
then
  # Ubuntu trusty
  back='http://fr.archive.ubuntu.com/ubuntu/pool/universe'
else
  # Debian sid
  back='http://ftp.fr.debian.org/debian/pool/main'
fi
# libnfc
if [ "$1" = "libnfc" ]
then
  # Get libnfc source from Linux Ubuntu Precise or Debian Linux sid
  rm ~/dists/$vers/main/source/libnfc_*
  wget -P ~/dists/$vers/main/source/ --accept gz,dsc,xz -r -nd -np $back/libn/libnfc/
  ~/UpdateDebianRepository.sh
fi

# mfoc
if [ "$1" = "mfoc" ]
then
  # Get mfoc source from Kali Linux
  rm ~/dists/$vers/main/source/mfoc_*
  wget -P ~/dists/$vers/main/source/ --accept gz,dsc,bz2,xz --reject "*~*" -r -nd -np http://repo.kali.org/kali/pool/main/m/mfoc/
  rm rm ~/dists/$vers/main/source/*~*
  ~/UpdateDebianRepository.sh
fi

# mfcuk
if [ "$1" = "mfcuk" ]
then
  # Get mfcuk source from Kali Linux
  rm ~/dists/$vers/main/source/mfcuk_*
  wget -P ~/dists/$vers/main/source/ --accept gz,dsc,bz2,xz --reject "*~*" -r -nd -np http://repo.kali.org/kali/pool/main/m/mfcuk/
  rm rm ~/dists/$vers/main/source/*~*
  ~/UpdateDebianRepository.sh
fi

apt-get install build-essential

mkdir ~/temp-$1

cd ~/temp-$1
apt-get source $1
apt-get build-dep $1
cd $1-*
sed -i -e 's/kali[0-9]*//' debian/changelog
dpkg-buildpackage -us -uc
cd ~

mv -f ~/temp-$1/*_$arch.deb ~/dists/$vers/main/binary-$arch/
mv -f ~/temp-$1/*_all.deb ~/dists/$vers/main/binary-$arch/
#mv -f ~/temp-$1/*.changes ~/dists/$vers/main/source/
#mv -f ~/temp-$1/*.dsc ~/dists/$vers/main/source/
#mv -f ~/temp-$1/*.gz ~/dists/$vers/main/source/

rm -rf ~/temp-$1

~/UpdateDebianRepository.sh
script ~/GenerateDebianPackageNFCTools.sh :
#!/bin/sh

## script file name : ~/GenerateDebianPackageNFCTools.sh

apt-get install lsb-release

arch=`dpkg --print-architecture`
vers=`grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f3`

apt-get install build-essential dh-autoreconf checkinstall auto-apt

cd ~

mkdir ~/$1-$2

if [ "$1" = "nfcutils" ]
then
  wget -c http://nfc-tools.googlecode.com/files/$1-$2.tar.gz
else
  wget -c http://$1.googlecode.com/files/$1-$2.tar.gz
fi

tar -xzvf $1-$2.tar.gz
cd $1-$2
autoreconf -vis
auto-apt run ./configure --prefix=/usr
make
checkinstall -D -y --install
cd ~
mv /root/$1-$2/$1_$2-1_$arch.deb ~/dists/$vers/main/binary-$arch/
rm -rf ~/$1-$2
rm $1-$2.tar.gz

~/UpdateDebianRepository.sh
script ~/GenerateLibNFCBackports.sh :
#!/bin/sh

## script file name : ~/GenerateLibNFCBackports.sh

apt-get update && apt-get upgrade

~/InitDebianRepository.sh

# Generate libnfc*.deb
~/GenerateDebianPackage.sh "libnfc"

## somme tools listed on : http://code.google.com/p/nfc-tools/ » External links

# Generate mfoc*.deb
~/GenerateDebianPackage.sh "mfoc"

# Generate mfcuk*.deb
~/GenerateDebianPackage.sh "mfcuk"

apt-get install libnfc-dev libnfc5
~/GenerateDebianPackageNFCTools.sh nfcutils 0.3.2
Rendre executable ces 4 scripts :
commande(s) à exécuter :
chmod +x ~/InitDebianRepository.sh
chmod +x ~/UpdateDebianRepository.sh
chmod +x ~/GenerateDebianPackage.sh
chmod +x ~/GenerateDebianPackageNFCTools.sh
chmod +x ~/GenerateLibNFCBackports.sh
Générer maintenant vos paquets .deb :
commande(s) à exécuter :
~/GenerateLibNFCBackports.sh
C'est terminé, quitter la machine virtuelle :
commande(s) à exécuter :
exit

Une fois la génération faite dans la machine virtuelle et de retour sur la machine hôte, vous devez prendre en compte via l'interface graphique de votre Linux le dépot :
dépôt à ajouter :
deb file:///root/chroot/root/ XXXXXX main
avec XXXXXX la version (wheezy, precise, etc).
Puis vous pourrez installer les applications (libnfc-bin libnfc-dev libnfc-examples libnfc-pn53x-examples libnfc5 libnfc5-dbg nfcutils mfoc mfcuk) toujours via l'interface graphique.
Pour certaines distributions comme Linux Mint basées sur Unbuntu ou Debian il faut en effet passer par les outils graphiques pour gérer les dépôts et les installations.

Sur les distributions sans interface graphique, prendre en compte le dépot local dans le fichier /etc/apt/sources.list :
commande(s) à exécuter :
sed -i '\|^deb file:/root/chroot/root/ [^\s]* main|d' /etc/apt/sources.list
sed -i -e :a -e '/^[ |\n|\t]*$/ {$d;N;ba' -e '}' /etc/apt/sources.list

echo "" >>/etc/apt/sources.list
echo "deb file:/root/chroot/root/ `grep -r -E "^deb (http|ftp)://[^ ]*(debian|ubuntu|raspbian)/? [a-z]* main" /etc/apt/* 2>>/dev/null | cut -d' ' -f3` main" >>/etc/apt/sources.list

apt-get update && apt-get upgrade
Il n'y a alors plus qu'à installer un des composants LibNFC :
commande(s) à exécuter :
apt-get install libnfc-bin libnfc-dev libnfc-examples libnfc-pn53x-examples libnfc5 libnfc5-dbg
apt-get install nfcutils mfoc mfcuk

Une dernière chose à faire

LibNFC est incompatible avec les modules nfc et pn533 du kernel Linux > 3.1, les commandes suivantes doivent être lancées :
commande(s) à exécuter :
echo '# This file blacklists some nfc drivers.' >/etc/modprobe.d/libnfc-blacklist.conf
echo '' >>/etc/modprobe.d/libnfc-blacklist.conf
echo 'blacklist pn533' >>/etc/modprobe.d/libnfc-blacklist.conf
echo 'blacklist nfc' >>/etc/modprobe.d/libnfc-blacklist.conf

modprobe -r pn533 nfc
Rebooter votre machine ou brancher votre lecteur ACR122U NFC ou SCL3711 pour vérifier que tout fonctionne correctement :
commande(s) à exécuter :
nfc-list

Remarques

Suite à des tests sur un Rasberry Pi, il s'avère que l'alimentation 5V/1A du Rasberry Pi n'est pas forcement suffisante pour alimenter un lecteur NFC type ACR122U NFC ou SMC SCL3711, des erreurs de lecteurs ou plantages sont observés lorsqu'on solicite trop les lecteurs.

Avant d'allumer votre µ-ordinateur, il est conseillé d'abord de débrancher un ACR122U NFC car le driver peut faire planter Linux, vous pouver le brancher ensuite.

D'après http://nfc-tools.org/index.php?title=Devices_compatibility_matrix, un Identive SCL3711 ou SMC SCL3711 semble un bon choix.

En cas d'erreur "W: There is no public key available for the following key IDs: 3B4FE6ACC0B21F32", lancer les commandes :
commande(s) à exécuter :
apt-key adv --keyserver keys.gnupg.net --recv-keys 3B4FE6ACC0B21F32
en remplaçant 3B4FE6ACC0B21F32 par celui affichée dans le message d'erreur.

Sous Raspberry Pi il vous faudra également lancer:
commande(s) à exécuter :
touch /usr/share/keyrings/raspbian-archive-removed-keys.gpg
cd /usr/share/keyrings
ln -s raspbian-archive-removed-keys.gpg debian-archive-removed-keys.gpg
ln -s raspbian-archive-keyring.gpg debian-archive-keyring.gpg
cd

J'ai des doutes sur la légalité des outils mfoc et mfcuk.

Il est possible de générer les packages pour une autre plateforme, par exemple "debootstrap --arch i386 ..."

Binaires

Comme j'ai compilé moi même les packages pour un certains nombre de machines, vous pouvez directement utiliser les dépots suivants :

• pour un Raspberry Pi sous Debian Wheezy ajouter au fichier /etc/apt/sources.list la ligne : deb http://backports.free.fr/raspbian wheezy main
• pour une Debian Wheezy ajouter au fichier /etc/apt/sources.list la ligne : deb http://backports.free.fr/debian wheezy main
• pour une Ubuntu 12.04 LTS (Precise Pangolin) ajouter via l'outil graphique le dépôt : deb http://backports.free.fr/ubuntu/ saucy main
• pour une Ubuntu 13.10 (Saucy Salamander) ou Linux Mint 16 ajouter via l'outil graphique le dépôt : deb http://backports.free.fr/ubuntu saucy main

ensuite il n'y a plus qu'à lancer une mise à jour et installer les outils libnfc-bin libnfc-dev libnfc-examples libnfc-pn53x-examples libnfc5 libnfc5-dbg nfcutils mfoc mfcuk.






dernière modification de cette page le 15 mars 2014 à 10:00
par FDS