Bon parce que ça ne rentre pas je vais poser ça noir sur blanc.

GZ = > gzip

BZ2 => bzip2 (bunzip2)

TAR=> tar

TGZ(TAR.GZ) => tar czf (tar xzf)

TBZ2(TAR.BZ2) => tar cjf (tar xjf)

ZIP => zip ou p7zip

rar => rar/unrar

C’est brut de pingouin et c’est pas grave, voir la source pour plus d’info.

Source : http://www.libordux.org/doc/cmdline/archives.php

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 …

Quelques notes à l’attention des futurs usagers :

  • Ne pas utiliser le rpm, préférer le tgz.
  • Modifier le fichier /etc/pam.d/vmware-authd, changer pam_unix.so en pam_permit.so (voir lien : http://tommi.org/2008/09/vmware-server-20-and-fedora-9-fedora-10/)
  • Modifier (ou bien créer) le fichier ~/.vmware/config et ajouter le ligne xkeymap.nokeycodeMap = true (lien : http://nthrbldyblg.blogspot.com/2008/06/vmware-and-fubar-keyboard-effect.html)

<u><b>Il s'agit d'une rustine à ne pas faire sur une machine en production.</b></u><br /><br />

Depuis mon passage sur Fedora 10 je n’arrive pas à obtenir d’accent circonflexe avec Emacs.

Le problème survient en utilisateur standard,  en “su“, mais pas en “su -“.

Comme le problème ne survenait pas en su – mais en su, j’ai donc décidé de comparer les deux environnements.
Pour cela j’ai utilisé meld, un très bon comparateur graphique, et j’ai fait deux innocents “env|sort“.

Il en est ressorti une liste de variables présentes dans “su“, mais pas dans “su -“.

Après plusieurs minutes passées à faire des “unset“, j’ai trouvé la variable à l’origine du problème !!

XMODIFIERS=@im=imsettings

Quelques clics sur google mon ensuite ramené là : http://forums.fedora-fr.org/viewtopic.php?id=39178

La solution : yum remove imsettings

un petit reboot et tout fonctionne :)

Lorsque l’on récupère un RPM exotique souvent on cherche à l’installer comme ça :

[root@localhost toky]# rpm -ivh *.rpm
erreur: Dépendances requises:
    libgdk-1.2.so.0 est nécessaire pour coriolis-crlcore-1.0.20080221-1.i386
    libgtk-1.2.so.0 est nécessaire pour coriolis-crlcore-1.0.20080221-1.i386
    libgdk-1.2.so.0 est nécessaire pour coriolis-cyclop-1.0.20080221-1.i386
    libgtk-1.2.so.0 est nécessaire pour coriolis-cyclop-1.0.20080221-1.i386
    libgdk-1.2.so.0 est nécessaire pour coriolis-isobar-1.1.20080221-1.i386
    libgtk-1.2.so.0 est nécessaire pour coriolis-isobar-1.1.20080221-1.i386
    libgdk-1.2.so.0 est nécessaire pour coriolis-mistral-1.1.20080221-1.i386
    libgtk-1.2.so.0 est nécessaire pour coriolis-mistral-1.1.20080221-1.i386
    libgdk-1.2.so.0 est nécessaire pour coriolis-nimbus-1.1.20080221-1.i386
    libgtk-1.2.so.0 est nécessaire pour coriolis-nimbus-1.1.20080221-1.i386

Et là on passe un certain temps à installer les dépendances lorsqu’il y en a beaucoup.

Mais il y a mieux !!

[root@localhost toky]# yum localinstall *.rpm
***********
***********
***********
–> Résolution des dépendances terminée
***********
***********
Le paquetage coriolis-nimbus-debuginfo-1.1.20080221-1.i386.rpm n’est pas signé

Presque bon …

[root@localhost toky]# yum –nogpgcheck localinstall *.rpm

Tada !!

Streaming Video avec PHP

novembre 10, 2008

Je dispose d’un serveur Apache tout ce qu’il y a de plus classique. Loin de chez moi, il m’arrive de l’utiliser pour visionner certaines de mes vidéos.
À cause d’un faible débit, il est souvent nécessaire de télécharger toute la vidéo pour espérer la voir sans blocage.

Pour résoudre le problème, je viens de mettre au point un petit fichier php qui va pouvoir convertir à la volet les fichiers vidéo.
Comme toujours, je ne ponds pas de code sécurisé, mais du code utilitaire, vous allez voir, c’est du gruyère :)

Code source :

<?php
$FPS = 15;
$SCALE = “640:480″;

$FICHIER = $_GET['fichier'];

$COMMANDE= “mencoder \”$FICHIER\” -ofps $FPS -ovc lavc -lavcopts vcodec=flv:acodec=mp3 -vf scale=$SCALE -ffourcc FLV1 -oac mp3lame -o /dev/stdout -really-quiet -noskiplimit”;

if (!($p=popen(“$COMMANDE”,”r”)))
{
return 126;
} else
{
header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);
header(“Cache-Control: no-store, no-cache, must-revalidate”);
header(“Cache-Control: post-check=0, pre-check=0″, false);
header(“Pragma: no-cache”);
header(“Content-Type: video/x-flv”);

while (!feof($p)) {
$l=fgets($p,1024);
print $l;
}
pclose($p);
}

?>

Vous l’aurez compris, pour fonctionner ce programme nécessite la présence de mplayer et des codecs qui vont bien.

Cette page s’utilise ensuite avec comme paramètre fichier=”emplacement de la vidéo”.
Quelques problèmes persistent :

  • Usage CPU important (plus que necessaire je pense)
  • Persistance des commandes mencoder (mais heureusement en usage CPU nul)
  • Je n’ai pas réussi à intégrer ces pseudo-flv dans un lecteur flv flash (je les lis en streaming avec mplayer)

Autrefois j’étais joueur linuxien sur Cedega, je n’avais jamais eu de problème avec Warcraft III. Le projet Cedega tombant dans l’oubli j’ai décidé de passer vers Wine.
Tout s’est très bien passé (Installation / Patch et mise à jour). Tout sauf le jeu sous Battle.Net (chat en ligne impossible et impossible d’héberger une partie).

Je me rends donc sur http://www.winehq.org/ et sur la page dédiée à mon jeu favori (http://appdb.winehq.org/objectManager.php?sClass=version&iId=3126) j’apprends la nécessité d’avoir un patch non validé par la team Wine.

Comment patcher Wine proprement sous Fedora

Etape 1 : Récolte des fichiers

(Si vous ne disposez pas de yumdownloader)
yum install yum-util

(puis pour récupérer le src.rpm de wine)
yumdownloader –source wine

Concernant le patch, je vous conseille de vous armer de patience et de savoir parler anglais. Une fois le bon patch récupéré (pour la bonne version) exposez le fièrement :

a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -1826,12 +1826,12 @@ HANDLE WINAPI CreateIoCompletionPort(HANDLE hFileHandle, HANDLE hExistingComplet
TRACE(“(%p, %p, %08lx, %08x)\n”,
hFileHandle, hExistingCompletionPort, CompletionKey, dwNumberOfConcurrentThreads);

- if (hExistingCompletionPort && hFileHandle == INVALID_HANDLE_VALUE)
+/* if (hExistingCompletionPort && hFileHandle == INVALID_HANDLE_VALUE)*/
{
SetLastError( ERROR_INVALID_PARAMETER);
return NULL;
}
-
+#if 0
if (hExistingCompletionPort)
ret = hExistingCompletionPort;
else
@@ -1858,6 +1858,7 @@ fail:
CloseHandle( ret );
SetLastError( RtlNtStatusToDosError(status) );
return 0;
+#endif
}

/******************************************************************************
À SAVOIR : les zones en gras seront à supprimer, elles ne correspondent pas à la structure réelle utilisée pendant la construction du rpm.

Étape 2 : Préparation des fichiers

(installation des sources dans les dossiers /usr/src/redhat/)
rpm -i wine-1.1.5-1.fc9.src.rpm

copiez aussi votre patch dans le dossier /usr/src/redhat/SOURCES/

Étape 3 : Modification du fichier SPEC

Dans le fichier /usr/src/redhat/SPECS/wine.spec il faut :

  • Augmenter le numéro de release d’un(+1) pour éviter un conflit avec la version existant.
  • Indiquer la présence d’un nouveau patch
  • Indiquer l’exécution du patch
  • Remplir le changelog si vous souhaitiez partager ce rpm

Name: wine
Version: 1.1.5
Release: 2%{?dist}

Source300: wine-mime-msi.desktop

# enhancements
Source400: wineshelllink-fedora
Patch400: wine-wineshelllink.patch

# explain how to use wine with pulseaudio
Source402: README-FEDORA-PULSEAUDIO

Patch1: wine-rpath.patch

# fix #448338
Patch2: wine-desktop-mime.patch

# fix: I/O completion
Patch3: wine-completion-disable.patch

Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

etup -q -n %{name}-%{version}-fe
%patch1
%patch2
%patch3
%patch400

%build

%changelog
* Sat Nov 02 2008 Bodman
- 1.1.5-2
- I/O fix

Etape 4 – Compilation du RPM

Wine n’est compilable qu’en version i386. Mais ne vous inquiétez pas que vous soyez sur i386 ou x64, cela ne change rien.

Il y a un certain nombre de dépendances pour wine ….

yum install alsa-lib-devel.i386 alsa-lib-devel audiofile-devel.i386 audiofile-devel cups-devel.i386 cups-devel dbus-devel.i386 dbus-devel esound-devel.i386 esound-devel fontconfig-devel.i386 fontconfig-devel freetype-devel.i386 freetype-devel giflib-devel.i386 giflib-devel hal-devel.i386 hal-devel lcms-devel.i386 lcms-devel libICE-devel.i386 libICE-devel libjpeg-devel.i386 libjpeg-devel libpng-devel.i386 libpng-devel libSM-devel.i386 libSM-devel libusb-devel.i386 libusb-devel libX11-devel.i386 libX11-devel libXau-devel.i386 libXau-devel libXcomposite-devel.i386 libXcomposite-devel libXcursor-devel.i386 libXcursor-devel libXext-devel.i386 libXext-devel libXi-devel.i386 libXi-devel libXinerama-devel.i386 libXinerama-devel libxml2-devel.i386 libxml2-devel libXrandr-devel.i386 libXrandr-devel libXrender-devel.i386 libXrender-devel libxslt-devel.i386 libxslt-devel libXt-devel.i386 libXt-devel libXv-devel.i386 libXv-devel libXxf86vm-devel.i386 libXxf86vm-devel mesa-libGL-devel.i386 mesa-libGL-devel mesa-libGLU-devel.i386 mesa-libGLU-devel ncurses-devel.i386 ncurses-devel openldap-devel.i386 openldap-devel openssl-devel.i386 openssl-devel zlib-devel.i386 pkgconfig sane-backends-devel.i386 sane-backends-devel xorg-x11-proto-devel.i386 xorg-x11-proto-devel glibc-devel.i386 prelink fontforge flex bison

Pour ma part les paquets alsa-lib-devel giflib-devel et libusb-devel en version i386 entre en conflit avec mes paquets x64 :

yum remove alsa-lib-devel* giflib-devel* libusb-devel*
yum install alsa-lib-devel.i386 giflib-devel.i386 libusb-devel.i386 esound-devel.i386 gphoto2-devel.i386 sane-backends-devel.i386

(Compilation des RPMs)
cd /usr/src/redhat/SPECS/
rpmbuild -ba wine.spec –target i386

(Installation de Wine patché)
cd /usr/src/redhat/RPM/
rpm -Uvh wine-*1.1.5-2.fc9.i386.rpm

bien sûr en cas de mise à jour de wine plusieurs solutions s’offrent à vous :

  • Patcher la nouvelle version.
  • Bloquer les mises à jour automatiques de wine
  • proposer votre patch à la personne responsable du paquet wine de votre distribution favorite.

Sources :

Patch  : http://bugs.winehq.org/attachment.cgi?id=8368

compilation wine sur x64 : http://wiki.winehq.org/WineOn64bit

Je ne suis pas au mieux de ma forme mais voici un petit script pondu pour mettre à jour la racine d’un site web sans passer par gftp (ou tout autre programme d’ailleurs).

#!/bin/bash

echo “===============================================”
echo “=        UPLOAD                               =”
echo “=                  TO                         =”
echo “=                          SERVER             =”
echo “===============================================”
echo “”

#Variables utilisées
FTP_SERVER=”perso-ftp.orange.fr” ;
FTP_USER=”my_username” ;
FTP_PASSWORD=”" ;
FTP_FOLDER=”/blabla/root_web/“;

# On référence les fichiers à copier
FTP_FILES=`ls $FTP_FOLDER/*`
echo “Les fichiers suivants vont êtres copiés !!”
echo “——————————————”
for F in $FTP_FILES
do echo $F
done
echo “——————————————”

# Résumé des données
cd $FTP_FOLDER
echo “Serveur : $FTP_SERVER”
echo “User : $FTP_USER”

# Demande du mot de passe
echo -n “Password: “
stty -echo
read FTP_PASSWORD ;
stty echo

# Lancement de la copie
echo “GO”
echo “Chargement du site en cours…” ;

ftp -vin $FTP_SERVER <<EOF
user $FTP_USER $FTP_PASSWORD

binary

mput *

bye

EOF

echo “Fin du chargement.”

Ce n’est pas grand chose, mais c’est bien pratique :)

EGroupWare sous Fedora 9

septembre 19, 2008

Depuis toujours, je suis à la recherche d’un logiciel combinant Mail/Agenda/IM. Ce logiciel n’existe pas, je m’y suis résolu. J’ai essayé pas mal de logiciels pour compenser mon manque. Les plus connus y sont passés.

Mon dernier choix était Evolution / Pidgin. Parfaitement intégrés à gnome, avec un possible agenda commun c’était le duo idéal. Mais voila evolution n’est pas stable lorsqu’il s’agit d’un usage intensif …

J’ai donc décidé d’innover et de passer à une interface WEB, un bureau virtuel. La transition risque d’être longue et difficile, mais j’espère un resultat optimal. Dans mes rêves les plus fous, ce serait encore mieux qu’un client lourd, car disponible depuis n’importe ou.

Plan de migration

  1. Cette transition va commencer par l’agenda
    • Exportation des anciens rendez-vous
    • Exportation des anciennes taches
    • Usage progressif du nouvel agenda
  2. Ensuite va suivre le carnet d’adresses.
  3. Pour finir, d’ici plusieurs mois, je vais faire une tentative de serveur imap centralisant tout mes mails et disponible par cette interface Web.

Installation

Pourquoi le choix de EgroupWare ? Parce qu’il me semble assez complet et qu’il dispose d’un depot Fedora!

Ce depot est disponible ici :

http://download.opensuse.org/repositories/server:/eGroupWare/Fedora_8/

Il suffit alors de récupérer le fichier repos et de le copier dans le dossier /etc/yum.repos.d :

http://download.opensuse.org/repositories/server:/eGroupWare/Fedora_8/server:eGroupWare.repo

Ensuite un petit yum install s’impose :

[root@localhost yum.repos.d]# yum install eGroupWare

Configuration du processus d'installation

Traitement des options d'installation des paquetages

Résolution des dépendances

--> Lancement de la transaction de test

---> Paquetage eGroupWare.noarch 0:1.4.004-15.1 marqué pour être mis à jour

--> Traitement de la dépendance : eGroupWare-egw-pear = 1.4.004 pour le paquetage : eGroupWare

--> Traitement de la dépendance : php-gd pour le paquetage : eGroupWare

--> Traitement de la dépendance : php-mbstring pour le paquetage : eGroupWare

--> Traitement de la dépendance : php-imap pour le paquetage : eGroupWare

--> Lancement de la transaction de test

---> Paquetage eGroupWare-egw-pear.noarch 0:1.4.004-15.1 marqué pour être mis à jour

---> Paquetage php-gd.x86_64 0:5.2.6-2.fc9 marqué pour être mis à jour

---> Paquetage php-mbstring.x86_64 0:5.2.6-2.fc9 marqué pour être mis à jour

---> Paquetage php-imap.x86_64 0:5.2.6-2.fc9 marqué pour être mis à jour

--> Traitement de la dépendance : libc-client.so.2007()(64bit) pour le paquetage : php-imap

--> Lancement de la transaction de test

---> Paquetage libc-client.x86_64 0:2007b-1.fc9 marqué pour être mis à jour

--> Résolution des dépendances terminée
Dépendances résolues
================================================================================
Paquetage              Architecture Version         Dépôt                   Taille
================================================================================
Installation:
eGroupWare             noarch    1.4.004-15.1    server_eGroupWare        11 M
Installation pour dépendance:
eGroupWare-egw-pear    noarch    1.4.004-15.1    server_eGroupWare        85 k
libc-client            x86_64    2007b-1.fc9     updates-newkey          669 k
php-gd                 x86_64    5.2.6-2.fc9     updates-newkey          113 k
php-imap               x86_64    5.2.6-2.fc9     updates-newkey           49 k
php-mbstring           x86_64    5.2.6-2.fc9     updates-newkey          1.1 M
Transaction Summary
================================================================================
Install      6 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Taille totale des téléchargement : 13 M
Est-ce correct [o/N] : o
Téléchargement des paquetages :
(1/6): php-imap-5.2.6-2.fc9.x86_64.rpm                     |  49 kB     00:00
(2/6): eGroupWare-egw-pear-1.4.004-15.1.noarch.rpm         |  85 kB     00:00
(3/6): php-gd-5.2.6-2.fc9.x86_64.rpm                       | 113 kB     00:00
(4/6): libc-client-2007b-1.fc9.x86_64.rpm                  | 669 kB     00:01
(5/6): php-mbstring-5.2.6-2.fc9.x86_64.rpm                 | 1.1 MB     00:02
(6/6): eGroupWare-1.4.004-15.1.noarch.rpm                  |  11 MB     00:30
----------------------------------------------------------------------------------
Total                                             357 kB/s |  13 MB     00:38
attention: rpmts_HdrFromFdno: Entête V3 DSA signature: NOKEY, key ID b93e789f
Import de la clé GPG 0xB93E789F « server:eGroupWare OBS Project <server:eGroupWare@build.opensuse.org> » depuis http://download.opensuse.org/repositories/server:/eGroupWare/Fedora_8/repodata/repomd.xml.key
Est-ce correct [o/N] : o
Lancement de rpm_check_debug
Lancement de la transaction de test
Transaction de test terminée
Transaction de test réussie
Lancement de la transaction
Installation   : php-mbstring                                      [1/6]
Installation   : php-gd                                            [2/6]
Installation   : libc-client                                       [3/6]
Installation   : php-imap                                          [4/6]
Installation   : eGroupWare                                        [5/6]
Pour en savoir davantage, faites: « chcon --help ».
error: %post(eGroupWare-1.4.004-15.1.noarch) scriptlet failed, exit status 1
Installation   : eGroupWare-egw-pear                               [6/6]
Installé: eGroupWare.noarch 0:1.4.004-15.1
Dépendance installée: eGroupWare-egw-pear.noarch 0:1.4.004-15.1 libc-client.x86_64 0:2007b-1.fc9 php-gd.x86_64 0:5.2.6-2.fc9 php-imap.x86_64 0:5.2.6-2.fc9 php-mbstring.x86_64 0:5.2.6-2.fc9
Terminé !

La suite plus tard …

Habitué à faire cette manœuvre avec l’interface graphique,  j’ai quelque peu cherché pour le configurer en ligne de commande.

Dans le fichier /etc/gdm/custom.conf, il faut ajouter ces quelques lignes :

[daemon]
TimedLoginEnable=true
TimedLogin=Pseudo_a_charger
TimedLoginDelay=5

Après 5 secondes, la session s'ouvrira automatiquement.

Plus d'informations concernant ce fichier sur le site officiel : http://live.gnome.org/GDM/2.22/Configuration