Restauration et amélioration d’une borne d’arcade (raspberry+mame+wah!cade)

J’ai récupéré une cabine de borne d’arcade. Youpi ! Je vais pouvoir commencer la restauration de la machine. C’est une machine pour un jeu défini avec très peu de possibilité d’évolution. Mon heureux donateur a pris sur lui d’enlever téléviseur (énorme) ainsi que la carte contrôleur et la carte jeu. Les joysticks et les boutons sont également absents.
Je finis le boulot en désossant la machine de ses câbles, rails, enceintes et néons hors d’ages.

  1. Ponçage, peinture
    La couleur noir est choisie, 2013-04-24 17.47.47
  2. Alimentation de la borne via une multiprise. Un bouton on/off sera peut-être installé par la suite.
  3. Installation du néon de la partie supérieure.
  4. Vidage de la partie inférieures et adaptation à un espace de rangement (mon bar !).
  5. Achat de planche pour la réalisation de support manettes et boutons.
    2013-04-24 18.55.30
  6. L’insertion de jetons ou pièce sera simulée par un bouton (rouge)
  7. Des enceintes ainsi qu’un amplificateur ont été installé.
  8. Le choix du système d’exploitation se porte sur un raspberry muni d’un processeur arm. J’espère que la puissance sera suffisante pour lancer les classiques pacman, 1942 et autres.
  9. A suivre…

Free Youtube déblocage des lenteurs

Free impose des lenteur lors de l’accès à youtube afin de ne pas surcharger sa bande passante.
Voici le moyen de passer outre ce ralentissement.
Les adresses 173.194.52.0 à 173.194.52.255 sont bloqués. Ce qui fait que les données passent par d’autres serveurs youtube non destinés à la France. Le filtrage opéré par Free ne fonctionne donc plus.

Sous Windows :

netsh.exe advfirewall firewall add rule name="DTCFREE" action=block dir=IN remoteip=173.194.52.0/22

Sous Mac :

sudo /sbin/ipfw add 001000 deny ip from 173.194.52.0/22 to any

Sous Linux :

iptables -A INPUT -s 173.194.52.0/22 -j DROP

Tout os via un proxy (ipad, android…) :

dans votre proxy renseigner http://nicolargo.com/fuckfree.pac

 

 

Kiosk R2

Le projet est bien avancé, en production sur l’Université de Rennes 2.
Il s’agit d’un OS Ubuntu permettant l’utilisation d’une session minimaliste. Cette session lance automatiquement Firefox (version 17 à cette date) en pleine page.
Les raccourcis claviers sont désactivés. Et à chaque « logout », le navigateur est fermé, la session est fermée puis ré-ouverte avec un navigateur pleine-page.

Le lien :https://sourceforge.net/projects/kioskrennes2uni/

Première vidéo d’utilisation et de configuration (premiers pas) : http://www.youtube.com/watch?v=GQlXWDULw7c

Raspberry pi

J’ai enfin mon raspberry…
J’ai un projet de kiosk à mettre en place et il va m’être d’une grande utilité. Voici comment je décompose mon projet :

  1. Établir les besoins fonctionnels
  2. Les faire valider
  3. Créer une documentation de mise en œuvre logiciel (os+configuration d’un navigateur) sur une machine virtuelle.
  4. Adaptation au Raspberry.
  5. Phase de test.
  6. Validation par le client.
  7. Mise en production.
  8. Évolution itérative (le client change toujours d’avis au moins une fois !).

J’ai eu quelques difficultés à enregistrer l’image sur une carte SD (je suis sur Mac), donc voici quelques liens biens utiles au téléchargement d’une img compatible ARM. Ainsi que du script python pour formater la carte SD et l’enregistrer correctement.

Notifieur de mail (mail notifier) en python

Suite à l’achat de cet excellent et simplissime produit, j’ai décider qu’il m’avertisse de l’arrivée de mail de 2 manière différentes. Une première en position colorée bleue (couleur 1) durant 15 secondes lors de la disposition sur mon compte gmail de 1 à 10 messages non lus.
La deuxième, en position colorée bleue clignotante lors de la disposition de plus de 10 messages non lus.

mail notifier

mail notifier

Le produit, dans cette caverne d’alibaba à geek :http://dx.com/p/usb-universal-e-mail-webmail-im-notifier-gmail-outlook-outlook-express-pop3-27062?item=3

Tout d’abord, veuillez enregistrer cette librairie dans l’environnement de python sur votre OS Linux.

Source : http://usbmailnotifier.googlecode.com/svn/trunk/setcolor.py

Le code :

#!/usr/bin/env python

import usb
import sys
import time

class MailNotifier:

	def makeData(self, color):
		return (color, 0, 0, 0, 0)

	def __init__(self):
		self.dev=UsbDevice(0x1294, 0x1320)
		self.dev.open()
		self.dev.handle.reset()

	def setColor(self, color):
		self.dev.handle.interruptWrite(0x02, self.makeData(color), 1000)

class UsbDevice:
	def __init__(self, vendor_id, product_id):
		busses = usb.busses()
		self.handle = None
		count = 0
		for bus in busses:
				devices = bus.devices
				for dev in devices:
					if dev.idVendor==vendor_id and dev.idProduct==product_id:
						self.dev = dev
						self.conf = self.dev.configurations[0]
						self.intf = self.conf.interfaces[0][0]
						self.endpoints = []
						for endpoint in self.intf.endpoints:
							self.endpoints.append(endpoint)
						return
		sys.stderr.write("No mail notifier found\n")

	def open(self):
		if self.handle:
			self.handle = None
		try:
			self.handle = self.dev.open()
			self.handle.detachKernelDriver(0)
			self.handle.detachKernelDriver(1)
			self.handle.setConfiguration(self.conf)
			self.handle.claimInterface(self.intf)
			self.handle.setAltInterface(self.intf)
			return True
		except:
			return False

def main(argv):
	if len(argv) != 2:
		sys.stderr.write("Usage : %s color_number\n" % argv[0])
	else:
		m = MailNotifier()
		m.setColor(int(argv[1]))

if __name__=="__main__":
	main(sys.argv)

Maintenant, voici le programme s’occupant de la requête au serveur de messagerie ainsi que de la gestion du mail notifier.

import imaplib, re, time, setcolor
conn = imaplib.IMAP4_SSL("imap.gmail.com", 993)
conn.login('account@gmail.com', 'password')
unreadCount = re.search("UNSEEN (\d+)", conn.status("INBOX", "(UNSEEN)")[1][0]).group(1)
print unreadCount + " mail"
unreadCount = int(unreadCount)
clignote = 0
if (unreadCount > 0):
        if (unreadCount > 10):
                while (clignote < 10):
                        m = setcolor.MailNotifier()
                        m.setColor(int('2'))
                        time.sleep(1)
                        m = setcolor.MailNotifier()
                        m.setColor(int('0'))
                        #print clignote
                        clignote = clignote + 1
        else:
                m = setcolor.MailNotifier()
                m.setColor(int('2'))
                time.sleep(15)
                m = setcolor.MailNotifier()
                m.setColor(int('0'))

Voila il ne reste plus qu’à créer une tâche cron pour automatiser cela.
Appel du programme :

sudo python mailnotifier.py

Importation et création de machine dans une OU

Toujours sous Active Directory…

Ce script a pour but de parser un fichier csv et de déplacer une machine existante vers l’OU désirée ou de créer la machine si elle n’existe pas. L’OU est portable/ordinateurs/machin.local

$FichierCSV = "C:\temp\liste_portable.csv"
$LectureFichierCSV = import-csv $FichierCSV
$compteur = 0
$compteurcree = 0
foreach ($ordi in $LectureFichierCSV){
    
    $NumeroUC = $ordi.Numero.Trim()
    $computer = Get-ADComputer -Filter {Name -like $NumeroUC} -SearchBase "DC=machin,DC=local"
        if ($computer -eq $null) {
            New-ADComputer -Name $NumeroUC -SamAccount $NumeroUC -Path "OU=Portables,OU=Ordinateurs,DC=machin,DC=local"
            $compteurcree++
            }
        else {
            $compteur++
            write-host $computer
            move-ADObject $computer -TargetPath "OU=Portables,OU=Ordinateurs,DC=machin,DC=local"
            #-to $_.target
            }

    }
    write-host $compteur "dÈplacÈs"
    write-host $compteurcree "crÈÈs"

Sauvegarde sous ubuntu server

Backup avec Mondo archive

Cherchant une solution de sauvegarde sur Ubuntu Server, j’ai trouvé mondo archive et mondo rescue. Cette solution permet de réaliser une exacte image de l’Os linux intallé (redhat, centos, ubuntu, debian…). Comme un ghost ré-installable via un ou des iso générées.

Installation

Ajout du dépôt dans le sources.list

sudo vim /etc/apt/sources.list

Liste des dépôts pour la version 11.10 de Ubuntu Server

# mondo depots
deb ftp://ftp.mondorescue.org//ubuntu 11.10 contrib
deb-src ftp://ftp.mondorescue.org//ubuntu 11.10 contrib

Installation des logiciels

sudo apt-get update
sudo apt-get upgrade
sudo atp-get install mondo*

Utilisation en ligne de commande

Génération d’une sauvegarde constituée d’une ou de plusieurs images iso de 650 Mo. Les images sont générées dans le répertoire temporaire (tmp).

sudo mondoarchive -O -N -d /tmp/

Génération d’une sauvegarde iso avec des volumes de 4,2go enregistrée sur le répertoire partagé de mon nas (ici, une freebox).

sudo mondoarchive -O -s 4200m -i -N -d /mnt/freebox

Aide du site http://wiki.pedrono.fr/index.php/Installation_de_Mondo

Extrait du man de mondoarchive

  • mondoarchive -O [ options ] : sauvegarde du PC.
  • mondoarchive -V [ options ] : vérification des sauvegardes.

Les autres options utiles:

  • -c speed: permet de forcer la vitesse de gravure quand on backup sur CD-R.
  • -w speed: permet de forcer la vitesse de gravure quand on backup sur CD-RW.
  • -p prefix: permet de fixer un préfixe pour le nom de nos fichiers de backup (dans le cas où la sauvegarde tient sur plusieurs CD par exemple, les noms seront du type <prefix><n° du media>.iso).
  • -i: force l’utilisation du format ISO pour la sauvegarde (à remplacer par -n ou -t si on souhaite utiliser un montage NFS ou un lecteur de bande).
  • -D: permet un backup différentiel. Utile si on souhaite faire des sauvegardes incrémentales quotidiennes.
  • -E path1 …pathN: permet d’exclure des répertoires du système de la sauvegarde. Il est à noter que mondoarchive exclu déjà par défaut les médias amovibles (/mnt/floppy, /mnt/cdrom, /proc, /sys, /tmp). Attention de ne pas mettre de / en fin de path à exclure.
  • -I path1 …pathN: permet d’inclure de force des dossiers à embarquer dans la sauvegarde, sachant que les dossiers par défaut sont /, /home et /etc.
  • -N: permet d’exclure explicitement tous les montages réseau quel que soit leur type.
  • -d dev|dir: permet de désigner le périphérique de sauvegarde, ou le chemin de stockage des images générées.
  • -s size: permet de préciser la taille maximale de chaque fichier image généré. Choisir par exemple 650m pour un CD-R.
  • -x: permet de pointer des partitions non-linux à backuper (notamment NTFS).

Il existe de nombreuses autres options mais je ne présente ici que les options essentielles à un backup ou un clonage rapide de système Linux.

Exemple d’utilisation de la commande:

root@centreon:~# mondoarchive -O -p centreon -i -d /root/

Grâce à cette commande, je demande à mondoarchive de procéder à une sauvegarde, en utilisant le format ISO. Les ISO seront préfixés centreon et seront stockées dans /root. Sans précision de taille maximale, mondoarchive va créer une seule image (éventuellement trop volumineuse pour stockage sur CD) que l’on souhaite réutiliser par la suite pour une restauration VMWare.

Mise à jour du serveur

Grosse mise à jour du serveur, vérifier vos script pour la compatibilité php/mysql

 

apache2 apache2-mpm-worker apache2-prefork-dev apache2-suexec apache2-utils
apache2.2-bin apache2.2-common apt apt-transport-https apt-utils gzip
libapache2-mod-fcgid libapt-inst1.3 libapt-pkg4.11 libc-bin libc-dev-bin
libc6 libc6-dev libfreetype6 libfreetype6-dev libgl1-mesa-dev
libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglu1-mesa libglu1-mesa-dev
libgnutls26 libmysqlclient-dev libmysqlclient16 libpng12-0 libpng12-dev
libpq-dev libpq5 libruby1.8 libssl-dev libssl-doc libssl1.0.0 libtiff4
libtiff4-dev libtiffxx0c2 libudev0 libvorbis0a libvorbisenc2 libxml2
libxml2-utils linux-libc-dev mesa-common-dev mindi mondo multiarch-support
mysql-client mysql-client-5.1 mysql-client-core-5.1 mysql-common
mysql-server mysql-server-5.1 mysql-server-core-5.1 openssl php-pear php5
php5-cgi php5-cli php5-common php5-dev php5-gd php5-mysql python-httplib2
python-pam python-pkg-resources ruby1.8 tzdata udev update-manager-core

Rsync sous windows

Rsync sous windows

Problématique

Je désire synchroniser mon disque distant  (m) vers un répertoire de destination local (c). Il s’agit d’un profil firefox.
Remarque  : si j’effectue également l’opération dans l’autre sens, je me retrouve avec une solution cloud de type dropbox. Mon profil Firefox étant centralisé sur le serveur et distribuable sur plusieurs machines distantes, les modifications sont dans synchronisées sur le serveur et redistribuées.
Je ne souhaites pas utiliser de couche ssh. Mon volume local et mon volume distant seront des volumes samba (smb) montés localement.

 

Production : solution choisie

Installation du client

Nom = cwRsync 3.1.0
Détail :
cwRsync
Rsync
Cygwin
OpenSSH
puTTY
licence = GNU
Emplacement = C:\Program Files\cwRsync
Espace = 6 Mo

Exemple de code réalisé pour la synchronisation (serveur→client) de firefox.

REM  --- Sync Server->LOCAL -----
Set CHEMINPATH="c:\Program Files\cwRsync\bin\"
REM les données du serveurs sont montées sur un lecteur "m"
set SERVER=/cygdrive/m/FIREFOX
Set LOCAL="/cygdrive/c/Documents and Settings/%USERNAME%/Local Settings/Application Data/Mozilla/Firefox/"
rem Set LOCAL=/cygdrive/c/tmp/

REM -----------------------------
rem arguments
rem r = recursif
rem t = préserver ler les dates des fichiers
rem u = mise à jour uniquement
rem p = préserve les permissions
rem o = préserve le propriétaire
rem g = préserve le groupe
rem l = copie les liens symboliques comme liens symboliques
rem i = affiche un résumé des changements pour chaque mise à jour
rem --delete-after = efface après transfert, pas avant
rem --chmod=ugo=rwX = préserve les droit conforme à l'original sur la copie
rem --progress = montre l'avancement pendant le transfert
rem --delete = efface les fichiers qui n'existent pas chez l'émetteur
rem pour les test -n
rem ------------------------------

%CHEMINPATH%rsync.exe -rutpgoli --delete-after --chmod=ugo=rwX --progress %SERVER%/* %LOCAL%

Inventaire

Pour changer un petit bout de script pour ce qui deviendra un agent d’inventaire. Le but recherché est de connaitre les machines utilisées régulièrement par plusieurs personnes différentes.
Il remonte le nom netbios de la machine, l’adresse IP, le login du User ainsi que la date. Les informations sont ensuite enregistrées dans une base de données. L’ensemble du logiciel en Windev sera bientôt disponible…

sNomNetbios est une chaîne
sNomNetbios = SysEnvironnement("COMPUTERNAME")
sNomNetbios = ExtraitChaîne(sNomNetbios,2,"=")

sIP est  une chaîne
sIP = NetAdresseIP()

sLogin est une chaîne
// Récupère la variable
sLogin = SysEnvironnement("USERNAME")
// Extrait la valeur de la variable
sLogin = ExtraitChaîne(sLogin, 2, "=")

sDate est une chaîne
sDate = DateDuJour()
sDate += HeureSys()