Archives par étiquette : debian

Arduino remote upload

This is how I upload sketches from my computer (windows 7) to an arduino uno board attached to a remote linux host (Debian 7).

On the linux host:

  • Install usbip package
  • Load kernel modules usbip_host and usbip_core
  • As root, launch usbipd (use -d for debugging)
  • Find your arduino board with lsusb :

Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 046d:c313 Logitech, Inc. Internet 350 Keyboard
Bus 007 Device 004: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

  • Export the usb bus (arduino device is 7-4, so the bus is 7-1)

usbip bind -b 7-1

On Windows:

usbip -a archipel 7-1

  • Let windows install the drivers
  • Use Device Manager to find the COM port corresponding to « Arduino UNO »
  • Select the correct COM port in Arduino IDE
  • Enjoy !

Booting Seatools ISO via pxe

I need to run Seagate diagnostics utility (Seatools), but my computer has no cd reader, no floppy drive, and my disk is so defective that grub won’t boot.

But it has a NIC that supports PXE.

Thanks to http://reboot.pro/8258/ and http://www.isalo.org/wiki.debian-fr/inde(..) I’m able to run these tools via network.

Enter the BIOS, enable network boot.

Boot, write down the mac address.

On another computer (currently a debian squeeze), install a dhcp, pxe, a tftp server and gpxelinux (see the second link above, in french).

Download « Seatools for DOS », it’s an iso image. Rename it to seatools.iso and save it in /srv/tftp

Edit /srv/tftp/pxelinux.cfg/default and create an entry like:

label 1
 MENU LABEL Seatools
 kernel memdisk
 append iso
 initrd /seatools.iso

And voilà ! You can now boot this iso image via pxe.

Tuning zfs-fuse sur Debian Squeeze

Je souhaite conserver plein de copies de sauvegarde de machines virtuelles tournant sur mon hyperviseur étant un kvm/libvirt/archipel sur une squeeze.
Il y a un candidat idéal pour cela: zfs, qui pour des raisons de licence n’a pas d’implémentation native dans linux.
Pour commencer, j’ai fait quelques tests avec zfs-fuse (0.6.9-1), sans tuning particulier. Ca marche correctement, mais pas très vite (moins de 10 Mo/s).
J’ai ensuite utilisé le zfs natif. Les performances brutes étaient bien meilleures mais ça tirait énormément sur la RAM et tout finissait par devenir très lent, et la sauvegarde d’une des VM ne se terminait jamais. En essayant de tuner la taille du ARC cache, je n’ai réussi qu’à obtenir un plantage complet du noyau (le dmesg parlait de lui même).

Je suis donc retourné à zfs-fuse en attendant de trouver mieux.
Maintenant que j’ai une rotation des VM sur une semaine, je peux avoir une idée précise des ressources requises par la déduplication:

#  zpool status -D zpool
 pool: zpool
state: ONLINE
scrub: none requested
config:

       NAME                               STATE     READ WRITE CKSUM
       zpool                              ONLINE       0     0     0
         disk/by-id/dm-name-archipel-zfs  ONLINE       0     0     0

errors: No known data errors

DDT entries 282985, size 354 on disk, 222 in core

bucket              allocated                       referenced
      __
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
    1    49,6K   6,20G   2,25G   2,25G    49,6K   6,20G   2,25G   2,25G
    2    11,1K   1,39G    583M    583M    27,6K   3,45G   1,42G   1,42G
    4     171K   21,4G   12,6G   12,6G    1,13M    145G   85,5G   85,5G
    8    43,7K   5,46G   3,11G   3,11G     358K   44,7G   25,4G   25,4G
   16      741   92,6M   59,3M   59,3M    13,5K   1,69G   1,04G   1,04G
   32      129   16,1M   8,19M   8,19M    4,67K    598M    298M    298M
   64        3    384K   67,5K   67,5K      330   41,2M   7,78M   7,78M
  128        1    128K   4,50K   4,50K      133   16,6M    598K    598K
   1K        1    128K   4,50K   4,50K    1,27K    162M   5,71M   5,71M
   2K        1    128K      7K      7K    3,98K    509M   27,8M   27,8M
  16K        1    128K   7,50K   7,50K    23,7K   2,96G    178M    178M
Total     276K   34,5G   18,6G   18,6G    1,60M    205G    116G    116G

Je vois ici que j’ai 282985 entrées pour la déduplication, chaque entrée occupant 222 octets en RAM.
J’en déduis donc que mon cache pour la dédup est d’environ 60 Mo (ce qui est peu !).
Par défaut ZFS alloue un quart de la taille du cache ARC pour le cache des metadata, donc fait partie la table DDT.
Le cache ARC doit donc être au moins de 240 Mo.
Par défaut, la valeur sur ma Debian était de 100 Mo.
Cela apparait au démarrage de fuse:

# grep -i zfs /var/log/syslog
Nov 28 21:12:39 archipel zfs-fuse: ARC caching: maximum ARC size: 100 MiB
Nov 28 21:12:39 archipel zfs-fuse: ARC setup: min ARC size set to 16777216 bytes
Nov 28 21:12:39 archipel zfs-fuse: ARC setup: max ARC size set to 104857600 bytes

J’ai donc modifié la ligne « max-arc-size = 240 » dans le fichier /etc/zfs/zfsrc et relancé zfs-fuse

#invoke-rc.d zfs-fuse restart

A titre d’exemple, le temps de sauvegarde de ma VM zimbra est passé de 16 minutes à 6 minutes !
En réglant le cache à 500 Mo, je descends à 3 minutes pour la même sauvegarde. Ce qui correspond à peu près aux temps que j’obtenais avec les modules zfs natifs, mais qui eux provoquaient de nombreux plantages, alors qu’avec zfs-fuse j’ai une solution parfaitement stable. Un réglage du cache à 1 Go n’a pas donné de meilleurs résultats.

Conclusion : Voici la formule appliquée dans mon cas avec zfs-fuse : max-arc-size = Taille du cache DDT * 8

Astuces Debian

Définir le hostname du client DHCP :

Contrairement à Windows ou à une Fedora Core, un client DHCP Debian n’indique pas son nom d’hôte au serveur DHCP, qui ne peut donc pas créer l’enregistrement DNS correspondant.
Pour y remédier, ajouter la ligne suivante dans le fichier /etc/dhclient.conf ou /etc/dhcp3/dhclient.conf pour une ubuntu
send host-name "monpc";

Relancer le réseau pour prendre en compte les changements:
/etc/init.d/networking restart

Adresses IP multiples:

Pour affecter plusieurs adresses IP à une même interface, il suffit de déclarer les adresses supplémentaires dans /etc/network/interfaces, en utilisant le nom de l’interface, suivi de « :0 » (ou « :1 », « :2 », etc…)
Exemple:

auto eth0
iface eth0 inet static
address 192.168.3.90
netmask 255.255.255.0
gateway 192.168.3.1

auto eth0:0
iface eth0:0 inet static
address 192.168.3.91
netmask 255.255.255.0
gateway 192.168.3.1

Redémarrer ensuite le réseau avec la commande /etc/init.d/networking restart
Source

Compiler un paquet à partir du fichier .dsc

Télécharger le fichier .dsc
dget http://mentors.debian.net/debian/pool/main/s/spice-protocol/spice-protocol_0.6.3-1.dsc
Extraire le fichier téléchargé
dpkg-source -x celt051_0.5.1.3-1.dsc
cd celt051-0.5.1.3/
Vérifier les dépendances
dpkg-checkbuilddeps
Compiler si toutes les dépendances sont résolues
dpkg-buildpackage
Compiler en ignorant les dépendances non résolues
dpkg-buildpackage -d
Installer les packages compilés
cd..
dpkg -i libcelt051-0_0.5.1.3-1_amd64.deb libcelt051-dev_0.5.1.3-1_amd64.deb

AWStats byte order is not compatible

After migrating awstats data from debian i386 to debian amd64, awstat gives me the following error:

/usr/lib/cgi-bin/awstats.pl -config=awstats -update
Update for config "/etc/awstats/awstats.conf"
With data in log file "/var/log/apache2/access.log"...
Warning: Error while retrieving hashfile: Byte order is not compatible at 
../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/_retrieve.al) 
line 331, at (eval 5) line 1

Explanation is here : hashes are not stored in the same way by Perl Storable on debian 32 bit and 64 bit.
The workaround is pretty simple: delete all hashes files, awstats will rebuild them

rm /var/lib/awstats/*.hash

Souris bluetooth et Debian

Voici comment faire en sorte qu’une souris bluetooth (en l’occurence une Logitech Laser Travel Mouse) soit reconnectée automatiquement au démarrage par ma Debian 5.

Ceci n’est qu’une adaptation des informations trouvées sur cette page

  • Ouvrir un terminal en tant que root
  • Installer le package bluez-utils
#apt-get install bluez-utils
  • Allumer la souris
  • Appuyer quelques secondes sur le bouton « Connect » de la souris, jusqu’à ce que le voyant clignote
  • Lancer la recherche de souris:
#hidd --search
Searching ...
  	Connecting to device 00:07:61:EA:91:63
  • La souris doit maintenant fonctionner
  • Editer le fichier /etc/default/bluetooth afin qu’il contienne les lignes suivantes (remplacer évidemment l’adresse mac par celle obtenue lors de la recherche) :
############ HIDD
#
# HID daemon
HIDD_ENABLED=1
HIDD_OPTIONS="--connect 00:07:61:EA:91:63 --master --server"
  • La souris doit maintenant être connectée dès qu’elle est allumée