Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
integrer-applications-windows-dans-paquets-logiciels [Le 18/08/2011, 15:07]
billou [Étape 1 : Récupérer le préfixe Wine]
integrer-applications-windows-dans-paquets-logiciels [Le 30/01/2024, 20:21] (Version actuelle)
89.86.155.3
Ligne 1: Ligne 1:
 +{{tag>​Bionic Xenial Focal Jammy tutoriel wine}}
 +
 ====== Intégrer une application Windows dans un paquet logiciel ====== ====== Intégrer une application Windows dans un paquet logiciel ======
  
-<note important>​Page en cours de construction,​ veuillez ​notez que cette manipulation peut différer partiellement en fonction des applications visées, et sera donc à adapter ​aux besoins ​requis.</​note>​+<note important>​Veuillez ​notez que cette manipulation peut différer partiellement en fonction des applications visées, et sera donc à adapter ​à vos besoins.</​note>​
  
-Pour la petite histoire, cette manipulation me trottait dans la tête depuis un petit moment, et à force d'aide et de recherches, j'​ai ​finit par trouver quelques réponses sur le forum PlayOnLinux,​ je remercie d'​ailleurs Tinou de m'​avoir donné quelques indications,​ n'​étant pas développeur pour deux sous.+Pour la petite histoire, cette manipulation me trottait dans la tête depuis un petit moment, et à force d'aide et de recherches, j'​ai ​fini par trouver quelques réponses sur le forum PlayOnLinux,​ je remercie d'​ailleurs Tinou de m'​avoir donné quelques indications,​ n'​étant pas développeur pour deux sous.
  
 Très clairement, le but recherché est l'​intégration d'une application Windows au sein d'un environnement Linux, telle une application Linux, pas question donc de devoir avoir un menu wine, ou playonlinux,​ ou de dépendre de l'​installation de ces programmes pour exécuter les logiciels ciblés, on recherchera donc à installer le programme et son environnement d’exécution dans son propre répertoire,​ et à avoir un fichier caché dans le dossier utilisateur qui contiendra fichiers de configurations,​ sauvegarde & cie du programme ciblé. Très clairement, le but recherché est l'​intégration d'une application Windows au sein d'un environnement Linux, telle une application Linux, pas question donc de devoir avoir un menu wine, ou playonlinux,​ ou de dépendre de l'​installation de ces programmes pour exécuter les logiciels ciblés, on recherchera donc à installer le programme et son environnement d’exécution dans son propre répertoire,​ et à avoir un fichier caché dans le dossier utilisateur qui contiendra fichiers de configurations,​ sauvegarde & cie du programme ciblé.
  
-Ainsi, le programme en question sera installable en seulement ​quelque ​clics, ne nécessitera pas la réinstallation ou certaines reconfiguration d’exécutables,​ base de registres, ou librairies, du prêt à l'​emploi,​ pour faire simple.+Ainsi, le programme en question sera installable en seulement ​quelques ​clics, ne nécessitera pas la réinstallation ou certaines reconfiguration d’exécutables,​ base de registres, ou librairies, du prêt à l'​emploi,​ pour faire simple.
  
 ===== Étape 1 : Récupérer le préfixe Wine ===== ===== Étape 1 : Récupérer le préfixe Wine =====
Ligne 50: Ligne 52:
 La modification proposée va permettre d'​outrepasser cette limite, afin que tous les utilisateurs puissent y avoir accès ensuite ! :-) La modification proposée va permettre d'​outrepasser cette limite, afin que tous les utilisateurs puissent y avoir accès ensuite ! :-)
  
-Tout d'​abord,​ vous devrez récupérer les sources de wine, de la version désirée, ici => http://www.ibiblio.org/pub/linux/​system/​emulators/​wine/+Tout d'​abord,​ vous devrez récupérer les sources de wine, de la version désirée, ici => https://dl.winehq.org/wine/source/
  
  
 Dans mon cas, je choisit donc de télécharger wine-1.3.26.tar.bz2,​ dernière version en date Dans mon cas, je choisit donc de télécharger wine-1.3.26.tar.bz2,​ dernière version en date
-<​code>​wget ​http://www.ibiblio.org/pub/linux/system/​emulators/​wine/​wine-1.3.26.tar.bz2</​code>​+<​code>​wget ​https://dl.winehq.org/wine/source/1.3/​wine-1.3.26.tar.bz2</​code>​
  
 Ensuite je décompresse Ensuite je décompresse
Ligne 61: Ligne 63:
 Et je me place dans le dossier des sources de wine Et je me place dans le dossier des sources de wine
 <​code>​cd wine-1.3.26</​code>​ <​code>​cd wine-1.3.26</​code>​
 +
 +
 +installation des dépendance de wine
 +
 +<​code>​sudo apt-get -y build-dep wine</​code>​
 +
 +<​code>​sudo apt-get -y build-dep wine-stable</​code>​
 +
 +<​code>​sudo apt-get -y build-dep winehq-stable</​code>​
  
 Ensuite, il est nécessaire d'​éditer 3 fichiers Ensuite, il est nécessaire d'​éditer 3 fichiers
  
 <​code>​gedit libs/​wine/​config.c</​code>​ <​code>​gedit libs/​wine/​config.c</​code>​
 +
 +<​note>​a partir de wine 8.3 le fichier libs/​wine/​config.c ​ a étais supprimer</​note>​
 +
 <​code>​gedit dlls/​ntdll/​server.c</​code>​ <​code>​gedit dlls/​ntdll/​server.c</​code>​
 +
 +<​note>​si le fichier dlls/​ntdll/​server.c éssayez dlls/​ntdll/​unix/​server.c</​note>​
 +
 +<​code>​gedit dlls/​ntdll/​unix/​server.c</​code>​
 +
 <​code>​gedit server/​request.c</​code>​ <​code>​gedit server/​request.c</​code>​
  
-Dans ces 3 fichiers, vous devez rechercher les termes "**is not owned by you**" contenant peu avant l'​occurence "​**fatal_error**"​ que vous devrez à chaque fois remplacer par "​**printf**",​ dans mon cas, j'ai aussi pris la précaution de remplacer la valeur "​**fatal_error**"​ des allocutions "​**must not be accessible by other users**",​ cette dernière faisant référence aux droits des utilisateurs ​+Dans ces 3 fichiers, vous devez rechercher les termes "**is not owned by you**" contenant peu avant l'​occurence "​**fatal_error**"​ que vous devrez à chaque fois remplacer par "​**printf**",​ dans mon cas, j'ai aussi pris la précaution de remplacer la valeur "​**fatal_error**"​ des allocutions "​**must not be accessible by other users**",​ cette dernière faisant référence aux droits des utilisateurs
  
 <code c>if (st.st_mode & 077) printf( "'​%s'​ must not be accessible by other users\n",​ serverdir );</​code>​ <code c>if (st.st_mode & 077) printf( "'​%s'​ must not be accessible by other users\n",​ serverdir );</​code>​
Ligne 86: Ligne 105:
 <​code>​make</​code>​ <​code>​make</​code>​
  
-Une fois celle ci terminée (ce qui devrait prendre un peu de temps), il n'y a plus qu'à installer les fichiers dans le répertoire choisit précédemment ​+Une fois celle ci terminée (ce qui devrait prendre un peu de temps), il n'y a plus qu'à installer les fichiers dans le répertoire choisit précédemment
  
-<​code>​make install</​code>​+<​code>​sudo make install</​code>​
  
 Vous devriez maintenant retrouver tous les fichiers liés à cette version de wine modifié dans "​**/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​.wine/​version-choisie-de-wine/​**"​ Vous devriez maintenant retrouver tous les fichiers liés à cette version de wine modifié dans "​**/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​.wine/​version-choisie-de-wine/​**"​
 +
 +===== Étape 3 : Script bash pour lancer le programme =====
 +
 +Et oui... Faudra bien lancer le logiciel en question, et pour le coup, j'ai un petit script à vous proposer, à adapter en fonction de vos besoins :
 +
 +D'​abord on crée le dossier qui contiendra le/les script(s) (car rien ne vous empêche d'​intégrer divers programmes exécutables complémentaires à votre programme après tout...)
 +<​code>​mkdir /​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​scripts</​code>​
 +
 +<​code>​
 +#!/bin/bash
 +
 +#​Vérification de la présence du répertoire personnel de l'​utilisateur,​ si non, création du dossier
 +VerifHOME() {
 +if [ ! -d "​$HOME/​.nom-de-votre-programme"​ ]; then
 + mkdir "​$HOME/​.nom-de-votre-programme"​
 +fi
 +}
 +
 +#​Vérification de la présence du répertoire personnel de l'​utilisateur dans le préfixe wine de l'​application windows, si non, création du dossier
 +VerifUSER() {
 +if [ ! -d " /​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​users/​$USER"​ ]; then
 + mkdir "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​users/​$USER"​
 +fi
 +}
 +#​Vérification de la présence du dossier "Mes documents"​ dans le dossier personnel ​ de l'​utilisateur voulant exécuter l'​application,​ création du lien symbolique vers le dossier personnel s'il n'​existe pas
 +VerifMyDoc() {
 +if [ ! -d "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​users/​$USER/​Mes documents"​ ]; then
 + ln -s "​$HOME/​.nom-de-votre-programme"​ "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​users/​$USER/​Mes documents"​
 +fi
 +}
 +
 +#Exécution des vérifications
 +VerifHOME
 +VerifUSER
 +VerifMyDoc
 +
 +PATH="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​.wine/​version-choisie-de-wine/​bin/:​$PATH"​
 +export WINEPREFIX="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/"​
 +export WINEDEBUG="​-all"​
 +#Forcer la langue FR pour l'​environnement et les applications
 +export LANG="​fr.FR-utf8"​
 +cd "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​Program Files/​chemin-du-dossier-de-l'​executable-windows-de-votre-programme"​
 +#Conserver ci dessous une syntaxe des dossiers propre à windows, avec \ et non /
 +wine "​c:​\Program Files\chemin-du-dossier-de-l'​executable-windows-de-votre-programme\executable.exe" ​ $@
 +</​code>​
 +
 +Voici un exemple similaire, pour lancer simplement wineconfig sur ce préfixe avec la version de wine modifiée
 +
 +<​code>​
 +PATH="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​.wine/​version-choisie-de-wine/​bin/:​$PATH"​
 +export WINEPREFIX="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/"​
 +export WINEDEBUG="​-all"​
 +#Forcer la langue FR pour l'​environnement et les applications
 +export LANG="​fr.FR-utf8"​
 +wine "​winecfg" ​ $@
 +</​code>​
 +
 +Bref, à vous de modifier ces exemples en fonction des besoins, des répertoires de configuration/​sauvegardes utilisés par les applications concernées ! ;)
 +
 +Pour pouvoir utiliser ces scripts, n'​oubliez pas de les rendre exécutables !
 +
 +<​code>​sudo chmod u+x /​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​scripts/​nom-du-script</​code>​
 +
 +Q
 +===== Étape 4 : Script python zenity (gui GTK) pour lancer votre script d'​application =====
 +
 +Parce que si vous avez plusieurs exécutables à lancer, ça sera quand même plus pratique ! (au moins avoir le choix entre l'​application à lancer, et wineconfig)
 +
 +<​code>​gksudo gedit /​usr/​bin/​nom-de-votre-programme</​code>​
 +
 +<​code>​
 +#!/bin/bash
 +
 +# Affichage de l'​avertissement
 +choix=$(zenity ​ --list --radiolist ​ \
 +#À compléter selon vos besoins :
 + --text="​[Choisir le texte d'​avertissement"​ \
 + --column ""​ --column "​Choix"​ --column "​Description"​ \
 +#À compléter selon vos besoins :
 + TRUE "​nom-de-votre-programme"​ "​Lancer nom-de-votre-programme"​ \
 + FALSE "​Winecfg"​ "​Configuration de l'​environnement Windows"​);​
 +
 +case ${choix} in
 +
 +#À compléter selon vos besoins :
 + "​nom-de-votre-programme"​)
 + # L'​utilisateur a choisit nom-de-votre-programme
 + sh "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​scripts/​nom-du-script"​
 + exit
 + ;;
 +
 +#À compléter selon vos besoins :
 + "​Winecfg"​)
 + # L'​utilisateur a choisit de configurer Wine
 + sh "/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​scripts/​nom-du-script"​
 + exit
 + ;;
 +
 + *)
 + #​L'​utilisateur n'a pas validé (soit cliqué sur "​fermer"​ ou a fermé la fenêtre)
 + exit
 + ;;
 +
 +esac
 +</​code>​
 +
 +
 +
 +Pour moi Billou ce script ne fonctionne pas aussi pourquoi créer un autre script avant si ont peut métre les variable dans le zenity un example qui fonctionne
 +
 +<​code>#​!/​bin/​bash
 +PATH="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​.wine/​version-choisie-de-wine/​bin/:​$PATH"​
 +export WINEPREFIX="/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/"​
 +export WINEDEBUG="​-all"​
 +#Forcer la langue FR pour l'​environnement et les applications
 +export LANG="​fr.FR-utf8"​
 +
 +programme=`zenity --list \
 +  --title="​faite votre choix dnas la liste" \
 +  --column="​Choix"​ \
 +    "​lancer nom de votre programme"​ \
 +    "​winecfg"​`
 +if [ "​$programme"​ == "​winecfg"​ ]
 +then
 +# commande pour lancer winecfg
 +wine winecfg
 +elif [ "​$programme"​ == "​lancer nom de votre programme"​ ]
 +then
 +# commande pour lancer votre programme
 +wine "​c:​\Program Files\chemin-du-dossier-de-l'​executable-windows-de-votre-programme\executable.exe"​
 +else
 +exit 1
 +fi
 +exit 0</​code>​
 +
 +
 +===== Étape 5 : Créer votre paquet logiciel =====
 +
 +<note important>​Attention,​ comme pour beaucoup de programmes Linux, il est conseiller de divisier votre paquet en deux parties, l'un contenant les données "​simples",​ l'​autre des données plus lourdes, afin de faciliter la mise à jour d'une partie des fichiers, sans devoir tout re-télécharger / réinstaller !
 +Par exemple, pour un jeu, un paquet contenant tout les fichiers sauf **/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​Program Files/​chemin-du-dossier-de-votre-programme-windows**,​ et l'​autre contenant ce dossier, ainsi, si vous mettez à jour le premier petit paquet, vous n'​aurez pas à vous soucier de l'​autre vu que les données ne devraient pas changer.</​note>​
 +
 +En fait, créer un paquet est très simple, il suffit de créer un dossier contenant l'​arborescence complète des fichiers qui seront copiés.
 +
 +Ainsi, vous retrouverez le plus souvent dans le dossier créé, ​ un dossier opt, un dossier usr, etc... L'​important étant d'y copier tel que présents sur le systèmes, tous les fichiers concernés jusque là, tout doit correspondre ! (vous comprendrez facilement ce que je veux dire, en décompressant n'​importe quel paquet *.deb ;) )
 +
 +Il faudra juste rajouter les fichiers nécessaires pour qu'un raccourci apparaisse dans votre menu Applications :
 +
 +__Dans votre dossier, créez les dossiers suivant cette arborescence :__
 +
 +**/​usr/​share/​applications**
 +
 +**/​usr/​share/​pixmaps**
 +
 +Dans le dossier applications,​ vous devez créer le fichier de configuration du raccourci dans le menu :
 +
 +<​code>​cd usr/​share/​applications</​code>​
 +<​code>​gksudo gedit nom-du-programme.desktop</​code>​
 +
 +<​code>​
 +#​!/​usr/​bin/​env xdg-open
 +
 +[Desktop Entry]
 +Version=version du programme
 +Encoding=UTF-8
 +Name=
 +GenericName=
 +Comment=
 +Name[fr_FR]=
 +Comment[fr_FR]=
 +Commen[fr_FR]t=
 +Exec="/​usr/​bin/​nom-de-l'​executable-du-script-zenithy-du-programme"​
 +Icon=nom-de-l'​icone-du-dossier-pixmaps
 +Terminal=false
 +Type=Application
 +Categories=Game/​Internet/​Accesories/​etc-au-choix
 +</​code>​
 +
 +Concernant "​**usr/​share/​pixmaps**",​ le dossier doit contenir l’icône du programme en question (nom-de-l'​icone-du-dossier-pixmaps) en deux formats, PNG, et XPM !
 +
 +Une fois tout ceci fait, il faudra créer le fichier de configuration du paquet debian.
 +
 +Pour celà, dans le dossier du paquet à créer, à coté de l'​arborescence habituelle ou l'on peut voir opt, et usr, vous devez créer un dossier nommé "​**DEBIAN**"​
 +
 +<​code>​mkdir DEBIAN</​code>​
 +
 +Puis dans ce dossier on crée le fichier "​**control**"​
 +
 +<​code>​gksudo gedit control</​code>​
 +
 +<​code>​
 +Package: nom-du-paquet
 +Version: version du paquet (en chiffre)
 +Section: main
 +Priority: extra
 +Architecture:​ i386
 +Depends: (séparer les dépendances du paquet par une virgule)
 +Installed-Size:​ spécifier en Ko, la taille du programme une fois installée
 +Maintainer: C'est vous, laissez votre griffe
 +Description:​ Donner la description du programme
 +</​code>​
 +
 +Voilà, vous enregistrez,​ puis on corrige une quelconque erreur de droit (au cas ou)
 +
 +<​code>​sudo chown root:root /​chemin/​nom-du-dossier-du-paquet -R</​code>​
 +<​code>​sudo chmod 755 /​chemin/​nom-du-dossier-du-paquet -R</​code>​
 +<​code>​sudo chmod 777 /​chemin/​opt/​catégorie-de-votre-programme/​nom-de-votre-programme/​prefix/​drive_c/​ -R</​code>​
 +
 +Et maintenant, il ne reste plus... Qu'à créer le/les paquets (à refaire avec chaque paquet créé évidemment,​ si vous avez dissocié les fichiers et dossiers en plusieurs paquets)
 +
 +<​code>​cd ..
 +dpkg --build nom-du-dossier-du-paquet nom-du-paquet.deb
 +</​code>​
 +
 +Selon la taille de votre paquet, ça sera plus ou moins long, attention toutefois, les paquets de plusieurs Go ne sont pas pris en charge par les outils graphiques d'​Ubuntu et Debian à l'​installation (synaptic, gdebi...), il faudra les installer avec un sudo dpkg -i nom-du-paquet.deb ! :)
 +
 +Voilà, ce tutoriel est terminé, en l'​état,​ il n'​appartient plus qu'à vous d'​améliorer tout ça, je vous ai donné les bases de l'​écosystème pour vous en sortir, libre à vous d'​adapter à vos besoin, de créer des gui  ou scripts simplifiant la transposition préfixe => paquet, etc ! =D
 +
 +**Billou, du forum ubuntu-fr, à votre service ! ^^**
  • integrer-applications-windows-dans-paquets-logiciels.1313672873.txt.gz
  • Dernière modification: Le 15/12/2011, 15:19
  • (modification externe)