Install Citrix ICA Client on Fedora 15

Comme indiqué sur cette superbe page :

https://www.citrix.com/English/ss/downloads/details.asp?downloadId=2309164&productId=1689163&ntref=clientcenter#top

Le client citrix nécessite openmotif, paquet visiblement pas disponible sous Fedora.

On peut heureusement le récupérer sur rpmbones :

http://rpm.pbone.net/index.php3/stat/4/idpl/13537043/dir/fedora_12/com/openmotif-2.3.2-5.1.svn.fc12.ccrma.i686.rpm.html

Pour finalement faire un yum localinstall du rpm de citrix.

Les fichiers ICA seront ensuite automatiquement reconnus par le client citrix.

Gnome3 : quelques astuces

Je viens de me mettre à gnome3, j’en bave un peu pour retrouver mes marques.

Du coup je vais poster ici ce qui m’a vraiment bloqué pour l’instant :

Afficher la date de l’horloge : gsettings set org.gnome.shell.clock show-date true
Afficher les numéros de semaine dans le calendrier : gsettings set org.gnome.shell.calendar show-weekdate true
Ajouter les boutons minimize et maximize des fenêtres : gconftool-2 –set /desktop/gnome/shell/windows/button_layout –type string « :minimize,maximize,close »

Utiliser la touche [Del] pour supprimer dans nautilus :

1) Activer le mode de modification des raccourcis : gsettings set org.gnome.desktop.interface can-change-accels true

2) Puis aller dans Fichier > edition > Mettre à la poubelle (sans cliquer) et faire [Del] [Del] , le raccourci est modifié.

3) Désactiver le mode : gsettings set org.gnome.desktop.interface can-change-accels false

et dans le même genre : https://bodman.wordpress.com/2011/08/01/ajouter-un-rac…se-sous-gnome3/

Voilà, c’est tout pour l’instant.

Sources : http://www.khattam.info/howto-add-minimize-maximizerestore-buttons-in-gnome-3-2011-05-26.html, http://www.khattam.info/howto-enable-delete-key-in-nautilus-3-fedora-15-2011-06-01.html

Valgrind with C++ on fedora 14

Si vous aussi, vous aviez une erreur lors de l’utilisation de valgrind avec fedora 14 en C++, réjouissez vous, la solution existe (et elle est  bien simple).

en root :
>yum reinstall libstdc++ libstdc++-devel gcc-c++ gcc
>ldconfig

Cela dit, j’ai observé un problème assez gênant, je dois refaire la manip après chaque reboot de la machine….

Ayant lu en diagonale le lien suivant, je n’ai pas encore obtenu solution finale, mais c’est déjà bien.

source: https://bugzilla.redhat.com/show_bug.cgi?id=650149

[Android] fermeture soudaine de HTC sense

Bonjour,

Aujourd’hui, juste une info pour ceux qui comme moi, pourraient avoir cette horrible erreur sur leur téléphone Android (un HTC Desire Orange pour ma part) :

« fermeture soudaine de l’application HTC sense (du processus com.htc.launcher). Merci de réessayer) »

J’avais ce message qui tournait en boucle et l’impossibilité d’accéder au bureau, mais l’ensemble des autres fonctionnalités valides (téléphonie etc …).

Comment le corriger ?

Selon Orange et de nombreuses personnes, il faudrait faire un hard reset, c’est faux ! J’ai trouvé une parade :

Il faut reinitialiser l’application htcSense uniquement. Cela revient juste à remettre à zéro la disposition de vos widgets sur le bureau et le fond d’écran.  Vous garderez tout le reste (contacts applications etc …).

Comment faire ?

1 – Ouvrir internet

Entre deux messages d’erreur utilisez la touche [Loupe/Recherche] pour ouvrir un menu de recherche et faites une recherche bidon (passez les messages d’erreurs au fur à mesure).

A ce stade, les messages d’erreurs ne vous gêneront plus, mais ne revenez pas au menu, sinon il faudrait tout recommencer.

2 – Lancer directement les parametres

Plutôt que de charger le market (voir 2bis), rechercher « paramètres » dans le menu « Loupe » semble aussi fonctionner, merci à mitch. (faites ensuite Gérer les applications et passez à l’étape 4).

2bis – Lancer le market

Si la méthode 2 ne vous convient pas, il reste cette solution.

Opération délicate qui consiste à trouver une page web avec un lien vers le Market. Vous pouvez aussi le taper vous même.

Exemple : market://search?q=cequevosuvoulez

3 – Lancer une application salvatrice !

A partir du market tout est possible. Vous pouvez ajouter et executer n’importe qu’elle application tiers. Choisissez en une qui permette d’ouvrir le menu système « Gérer les applications« . (Exemple : eFile en cliquant sur App space)

 

4 – Réinitialisez HTC Sense

Déroulez la liste des programmes  dans le menu système « Gérer les applications ». Choisissez HTC Sense et faites Effacer les données.

Conclusion

Voilà, revenez à l’accueil (bouton Home), ça prendre un peu de temps, mais ensuite vous aurez un beau menu tout neuf.

Bonne journée !


Faire ses propres RPMs sous Fedora

Bonjour à tous,
Cela fait bien longtemps que je voulais faire ce ticket. A chaque fois que j’ai une manipulation à faire sur un RPM c’est la même rengaine, c’est une action rare et du coup je dois bien passer deux heures à chercher pour faire une action qui devrait prendre 3 minutes.

Les RPM, et le packaging en général sont des sujets très intéressants, très documentés aussi. Je citerais mes sources en fin d’article.

Étape 1 – Préparation logiciel

Alors voici un certains nombre d’applications à installer pour être bien préparé :

(En root)
yum groupinstall "Fedora Packager"
yum install rpmdevtools
yum groupinstall "Development Tools"
yum install kernel-devel kernel-headers kmodtool fedpkg (pour les amoureux du noyau et des modules)

Etape 2 – Utilisateur builder

Bon je l’appel builder (je sors ça d’un tutos) mais prenez le nom que vous voulez.

(En root)
useradd builder
passwd builder
su - builder
rpmdev-setuptree

echo "%vendor                    VOTRE_NOM" >>    $HOME/.rpmmacros
echo "%packager             Fedora user" >>    $HOME/.rpmmacros
echo "%dist                       .f14" >>    $HOME/.rpmmacros

(Pensez bien sur à remplacer VOTRE_NOM et f14 pour les valeurs de votre choix)

Etape 2bis (facultative) – Préparation des signatures GPG

A la suite de l’étape 2, faites :

gpg --gen-key
echo "%_signature             gpg" >>    $HOME/.rpmmacros
echo "%_gpg_name              VOTRE_NOM" >>    $HOME/.rpmmacros
echo "%_gpg_path              /home/builder/.gnupg" >>    $HOME/.rpmmacros
gpg --export --armor >RPM-GPG-KEY-VOTRE_NOM

Etape 3 – Construction d’un RPM

Alors ici, plusieurs possibilités, voici donc une liste de quelques opérations courantes :

  • Construction d’un paquet déjà existant sur un dépôt distant
  • Construction d’un paquet à partir d’un src.rpm
  • Construction d’un paquet à partir du fichier SPEC

Construction d’un paquet déjà existant sur un dépôt distant

C’est le cas le plus simple et le plus courant. Par exemple, mettons qu’il y ait une erreur de dépendance entre deux paquets suite à la mise à jour de l’un sans recompilation de l’autre, la solution est de compiler à nouveau le paquet défectueux.

Parfois cette erreur n’est corrigée sur les serveurs que plusieurs jours après. Un solution serait alors de les devancer sans pour autant avoir à compiler à la main le dernier tar.gz qui traine.

Pour cela, rien de plus simple,  il suffit de récupérer le fichier src.rpm sur le dépôt distant directement avec yum :

(En builder)
cd ~/rpmbuild/SRPMS
yumdownloader --source mpd

Désormais le fichier src.rpm se trouve dans le dossier courant (~/rpmbuild/SRPMS) lisez la suite pour préparer le rpm.

Construction d’un paquet à partir d’un src.rpm

Une fois le fichier src.rpm copié dans le dossier rpmbuild/SRPMS de l’utilisateur builder :

(En builder)
rpmbuild --rebuild mpd-0.15.11-1.fc14.src.rpm

Et voila, le dossier rpmbuild/RPMS/x86_64 (ou i586, selon l’architecture de la machine local) contient le rpm désiré.

Si vous souhaitez préciser l’architecture ciblée, faite ainsi :

rpmbuild --rebuild mpd-0.15.11-1.fc14.src.rpm --target i586,x86_64

Si vous souhaitez pouvoir modifier ce paquet (ajouter un patch ou je ne sais quoi, lisez la suite).

Construction d’un paquet à partir du fichier SPEC

La préparation de paquet à partir d’un fichier SPEC est très fréquente aussi. Qu’il s’agisse d’une nouvelle application (donc absente des dépôts distants) ou bien d’une mise à jour. C’est le moyen de modifier des paquets déjà existants.

Pour ce faire, vos sources (le tar.gz ainsi que les patchs)  doivent être présentes dans le dossier ~/rpmbuild/SOURCES et votre fichier spec dans le dossier rpmbuild/SPECS.

Si vous disposez d’un src.rpm, utilisez la commande suivante :

(En builder)
rpm -ivh mpd-0.15.11-1.fc14.src.rpm

Si vous ne disposez que d’un fichier SPEC, il existe une commande qui, si les liens du spec sont corrects, vous permettra de rapatrier tous  les fichiers nécessaires.

(En builder)
cd ~/rpmbuild/SOURCES
spectool -g ../mpd.spec

Ensuite la construction se fait ainsi :

(En builder)
cd ~/rpmbuild/SPECS
rpmbuild -ba mpd.spec

A la fin de ces étapes, vous disposez enfin de rpm valides dans le dossier ~/rpmbuild/RPMS.

Pour les installer, une solution simple s’offre à vous :

(En root)
rpm -ivh  /home/builder/rpmbuild/RPMS/i386/mpd-0.15.11-1.fc14.i386.rpm

Mais une deuxième solution existe, le dépôt local.

REMARQUE : La compilation d’un RPM nécessite les dépendances de ce dernier. Pour les installer facilement :

yum-builddep less-394-1.fc4.src.rpm -y

 

Création d’un dépôt local pour yum

Préparation

Pour construire son propre dépôt il faut commencer par ranger les rpms dans un dossier commun. Ici j’utiliserais /DATA/depot/14.

On respectera l’arbo (RPM et SRPMS) déjà utilisée pour le dossier rpmbuild de l’utilisateur builder.

[FACULTATIF] Signer les paquets (avec builder)  rpmsign –addsign paquet.rpm [FACULTATIF]

Pour générer le dépôt, rien de plus simple :

(utilisateur gérant le dossier /DATA/depot/14)
cd /DATA/depot/14
createrepo .

Un dossier repodata est créé, tout s’est bien passé.

Définition du dépôt local dans yum

La définition du dépôt local se fait dans le dossier /etc/yum.repos.d/

Ajoutez-y un fichier local.repo contant les lignes suivantes :

[localrepo]
name=Fedora Core $releasever - My Local Repo
baseurl=file:///DATA/14
enabled=1
gpgcheck=0

mettez gpgcheck=1 si vos paquet sont signez, mais pensez alors à installer la clef GPG :

(En root)
rpm --import ~builder/RPM-GPG-KEY-VOTRENOM

A chaque modification du dépôt, pensez à refaire la commande createrepo. De même, pour vous assurer que ces nouveaux paquets soient pris en compte par yum, pensez a faire un yum clean metadata.

Voilà, c’est tout pour aujourd’hui.

Sources :

http://doc.fedora-fr.org/wiki/RPM_:_environnement_de_construction (mon ticket est très inspiré de cette page)

http://www.g-loaded.eu/2005/12/11/local-yum-repository/ (Partie dépôt local)

Fichier codé Macintosh BinHex

Une brève toujours utile, j’ai récemment eu un souci avec un fichier provenant d’un utilisateur Mac.

Le type de fichier fichier codé Macintosh BinHex (application/mac-binhex40) n'est pas pris en charge

Dans la source du mail j’ai même trouvé un beau « (This file must be converted with BinHex 4.0) »

Pour corriger le problème, il faut utiliser uudeview (disponible sous fedora avec un petit yum install uudeview):

[toky@localhost ~]$ uudeview fichier.pdf
Loaded from fichier.pdf: '' (fichier.pdf): fichier.pdf part 1 begin end Binhex
Found 'fichier.pdf' State 16 Binhex Parts begin 1 end OK
 -rw-r--r-- fichier.pdf is OK   [d] (?=help) d
Opened file fichier.pdf
BinHex file: data/resource fork sizes 2523514/0.
 File successfully written to /home/toky/fichier.pdf
1 file decoded from 1 input file, 0 failed

Vous trouverez alors dans votre dossier personnel le fichier décodé.

Base de donnée de l’INSEE

Un peu de Datamining aujourd’hui, quelque chose de très court, mais qui sera sans doute utile à certain.

Cela concerne la lecture de fichier dBase, car  sachons le l’INSEE met à disposition un certain nombre de données au format dBase.

Le premier réflexe face à ce genre de fichier serait de l’ouvrir avec un tableur et d’en sortir directement les valeurs nécessaires. Malheureusement, deux problèmes se posent, la lenteur du programme face à des fichiers de très grande taille,  et la limite des tableurs en nombre de lignes.

Pourtant, il existe une méthode bien plus rapide (et bien plus fun !), l’utilisation d’un script, pour lire ces fichiers volumineux comme on l’entend.

Pour cela j’ai choisi le langage PHP. Cela faisait longtemps que je n’avais pas joué avec et puis en plus il dispose déjà de fonctions adaptées à la lecture de fichier dbase.

Voici donc un petit script qui va extraire les catégories socioprofessionnelles (niveau 1) pour un échantillon de 130 000 valeurs :

$CODE[1] = "Agriculteurs exploitants";
$CODE[2] = "Artisans, commerçants et chefs d'entreprise";
$CODE[3] = "Cadres et professions intellectuelles supérieures";
$CODE[4] = "Professions Intermédiaires";
$CODE[5] = "Employés";
$CODE[6] = "Ouvriers";
$CODE[7] = "Retraités";
$CODE[8] = "Autres personnes sans activité professionnelle";

function percent($v,$t) {
 return round((( $v / $t ) * 100),2);
 }

$db = dbase_open('epcvhf10_in109604.dbf', 0);
if ($db) {
echo("lecture des données possible\n");
$record_numbers = dbase_numrecords($db);
for ($i = 1; $i <= $record_numbers; $i++) {
$row = dbase_get_record_with_names($db, $i);
$cs = trim($row['CS']);
$occupation = trim($row['OCCUPA']);
$age = trim($row['AGE']);
if ( ($occupation == 5 ) or ( $occupation == 6 ) ) $cs = 7;
if ( $age > 14 )
if ($cs != 99 && $cs != '' )
{
$vn1 = substr($cs, 0 , 1 );
if (!isset($n1[$vn1]))  $n1[$vn1] = 0;
$n1[$vn1[0]]++;
$population++;
}
}
dbase_close($db);
foreach ( $n1 as $clef => $nombre )
{
echo percent($nombre ,$population) . " : " . $CODE[$clef] . "\n";
}

Une autre fonction interessant dbase_get_header_info($db), permet de récupérer les champs disponibles dans la base.
Voici le lien des données utilisées : http://www.insee.fr/fr/themes/detail.asp?reg_id=0&ref_id=fd-epcvhf10&page=fichiers_detail/epcvhf10/telechargement.htm

[Ocaml] just for fun …

Aller, une brève très brève,

faites ceci :

let a =  Sys.argv.(0) in
Printf.printf a    ;;

On obtient :

This expression has type string list but is here used with type
  (‘a, out_channel, unit) format list
Type string is not compatible with type
  (‘a, out_channel, unit) format =
    (‘a, out_channel, unit, unit, unit, unit) format6

mais :

let a =  Sys.argv.(0) in
Printf.printf « %s » a;;

C’est ok …

Voila comment passer 20 minutes sur une connerie.

Dans la série des subtilités :
 
let buffer =  »  »  and retour = ref «  » in
    while (ThreadUnix.read socket buffer 0 1 > 0) do
      Printf.printf « >%s\n » buffer ; flush stdout ;

marche…

Mais pas cela :

let buffer = «  »  and retour = ref «  » in
    while (ThreadUnix.read socket buffer 0 1 > 0) do
      Printf.printf « >%s\n » buffer ; flush stdout ;

Alors vous avez trouvé ?

Certes, ça s’expliquent, mais tout de même …

VMWare Server 2.0 on Fedora 10

Quelques notes à l’attention des futurs usagers :

  • Ne pas utiliser le rpm, préférer le tgz.
<u><b>Il s'agit d'une rustine à ne pas faire sur une machine en production.</b></u><br /><br />