Résurrection de Yulai
Comme je vous l'avais promis il y a très longtemps dans Clonage de FreeBSD, voici la suite de l'histoire de Yulai, après sa mort en juin 2010. Et puis, il faut bien que mérite ma place dans le planet BSD francophone ;-)
Yulai est donc un ordinateur de jeu, utilisé intensément par le passé. Donc l'objectif est de faire fonctionner un jeu pour Windows 32 bits, sur un Wine 32 bits, dans un chroot FreeBSD 32 bits, sur un X.org 64 bits, dans un FreeBSD 64 bits, avec un driver graphique 64 bits.
Ça fait long comme chaîne, donc énormément d'occasions pour que quelque chose tourne mal. En plus, il n'est seulement question de faire fonctionner l'application, mais en plus de faire passer les informations et les instructions nécessaires à l'accélération 3D matérielle d'un bout à l'autre de cette chaîne.
C'est donc une agréable surprise que le résumé de ce billet est le même que lorsque j'ai installé mon HTPC : ça juste marche bien, du premier coup, out-of-the-box. Cependant, je reconnais que tout n'est pas aussi immédiat, et même si ça marche, il faut quand même (trouver et) suivre le wiki.
Voici donc une version en Français de la procédure, avec ce qu'il faut pour avoir les drivers nVidia propriétaires (il faut ce qu'il faut, pour jouer).
Création d'un chroot
À ce stade, le problème est que le système d'exploitation est un FreeBSD 64 bits, mais Wine ne fonctionne que sur des systèmes d'exploitation 32 bits, justement parce que ce n'est pas un émulateur et que les instructions de l'application sont balancées brutalement vers le CPU (si j'ai bien tout compris).
La solution habituelle à ce genre de problèmes est d'avoir un userland en 64 bits pour le système et les applications tolérantes, et en plus un autre userland 32 bits pour les applications comme Wine. Manifestement, cette idée n'est pas (encore ?) mise en place sur FreeBSD.
Donc il s'agit ici de modifier un peu cette solution pour le faire « à la main », en mettant le userland FreeBSD 32 bits dans une sous-arborescence séparée, exactement comme pour un jail (mais en fait ici un chroot suffit).
zfs create ztank/wine
make -C /usr/src buildworld installworld distribution TARGET=i386 DESTDIR=/ztank/wine
cp -i /etc/resolv.conf /ztank/wine/etc
Ensuite il faut importer l'arbre des ports et les sources dans le chroot.
Lors de la réactivation de Yulai, ztank
était le pool système, donc il
suffisait de cloner les FS :
zfs snapshot ztank/base/usr/ports@now
zfs snapshot ztank/base/usr/src@now
zfs clone ztank/base/usr/ports@now ztank/wine/usr/ports
zfs clone ztank/base/usr/src@now ztank/wine/usr/src
La deuxième fois, j'ai installé le chroot sur un SSD, donc sur un pool
différent (zssd
), avec un nullfs
:
mkdir /zssd/wine/usr/{ports,src}
mount -t nullfs /usr/ports /zssd/wine/usr/ports
mount -t nullfs /usr/src /zssd/wine/usr/src
Sinon on peut aussi les retélécharger, avec portsnap
, csup
et tout ça.
Ou bien copier brutalement les répertoire du système vers le chroot.
Entrer dans le chroot
Alors que la procédure précédente n'est à faire qu'une seule fois, il peut être utile de revenir plusieurs fois dans le chroot. Par exemple pour mettre à jour Wine ou les drivers.
chroot /ztank/wine /bin/csh
setenv MACHINE i386
setenv UNAME_p i386
setenv UNAME_m i386
mount -t devfs devfs /dev
/etc/rc.d/ldconfig start
Installer les ports
Le problème lorsqu'on écrit des articles trop longtemps après les faits (4 novembre 2010 pour la première installation, 21 mars 2011 pour l'installation sur le SSD), et qu'on est mauvaise en prise de notes, c'est qu'on ne se souvient plus exactement de tout le contexte.
Par exemple à ce stade, je n'ai pas la moindre idée de pourquoi j'ai installé le serveur X11 :
make -C /usr/ports/x11-servers/xorg-server config
# NO_AIGLX, SUID, NO_HAL
make -C /usr/ports/x11-servers/xorg-server config-recursive
# (tout par défaut)
make -C /usr/ports/x11-servers/xorg-server install
Ensuite, plus facile, j'ai installé les drivers nVidia, pour avoir la
partie userland (mais le module noyau est dans le même port, même s'il
n'est d'aucune utilité ici), avec les mêmes options que sur le système, à
savoir FREEBSD_AGP
, ACPI_PM
, LINUX
(pour si un jour je veux faire
tourner des binaires linux 32-bits) et WBINVD
:
make -C /usr/ports/x11/nvidia-driver install
Enfin, le plus important, installer wine
lui-même :
make -C /usr/ports/emulators/wine install
Utiliser wine
Ce qui est formidable avec cette solution, c'est qu'il n'y a pas besoin d'être dans le chroot pour utiliser le wine ainsi installé. Pour toutes les commandes « système » (mise à jour, recompilation, etc) on ne peut pas y échapper, mais tout ce qui se fait en utilisateur non-privilégié se fait très bien depuis le système 64 bits, en adaptant un peu les variables d'environnement.
Pour se faire, j'ai mis un script wine32
dans mon $PATH
(en
l'occurrence, dans $HOME/bin/
) :
#!/bin/sh
LD_32_LIBRARY_PATH=/ztank/wine/usr/local/lib PATH=/ztank/wine/usr/local/bin:$PATH exec /ztank/wine/usr/local/bin/wine "$@"
L'utilisation est ensuite aussi simple que :
cd ~/games/World\ of\ Warcraft
wine32 Wow.exe
Bonus : patcher Wine
Je ne suis pas tout-à-fait une fangirl de Blizzard, mais j'ai quand même été rapidement tentée par Diablo III. Non, pas juste le jour de sa sortie, j'ai une vraie vie moi, mais le premier jour férié qui a suivi.
Quand j'ai lu que ça ne fonctionnait pas vraiment out-of-the-box, et encore moins sur la version stable de Wine, j'ai eu un peu peur. Et pourtant, là encore, tout s'est super bien passé.
D'après l'appdb de Wine, à l'époque aussi bien que maintenant, il suffit d'appliquer quelques patchs fournis à la version développement de Wine pour que tout se passe bien.
Pour des power users (dont je crois faire partie), « il suffit de patcher » veut dire que ça marche presque tout de suite ; mais je peux comprendre que ça puisse rebuter les lusers de base. Et c'est à mon avis à ce niveau que les systèmes de ports comme celui de FreeBSD sont merveilleux : comme tout est basé sur des sources, qu'il faut assez souvent adapter (enfin plutôt porter), tout est déjà en place pour patcher des sources.
Donc pour l'utilisateur de base, la difficulté ne va pas plus loin
qu'extraire le diff à proprement parler des fichiers donnés sur
l'appdb, supprimer les a/
et b/
au début des noms de fichiers, et
enregistrer ça dans /usr/ports/emulators/wine-devel/files/
avec un nom
qui commence par patch-
.
Ensuite il suffit d'installer normalement le port wine-devel
à la place
de wine
:
make -C /usr/ports/emulators/wine deinstall
make -C /usr/ports/emulators/wine-devel reinstall clean
Et voilà o/. Le script wine32
ci-dessus permet de faire fonctionner
Diablo III sans que je rencontre le moindre problème (en dehors de l'agent
d'authentification) :
cd ~/games/Diablo\ III
wine32 "C:\users\public\Application Data\Battle.net\Agent\Agent.954\Agent.exe" --nohttpauth &
wine32 Diablo\ III\ Launcher.exe
Commentaires
Pas de commentaire pour le moment.
Poster un commentaire
Autour de cette page
Autour de cet article
Weblog
Derniers commentaires
- Natacha dans Blogoversaire
- Jean Abou Samra dans Blogoversaire
- Jean Abou Samra dans Blogoversaire
- Natacha dans Blogoversaire
- Gro-Tsen dans Blogoversaire
- Balise dans Blogoversaire
- Gro-Tsen dans Mon deuxième carton
- Barakoma dans Requiescat
- joanna dans Évolution des commentaires
- Natacha dans Évolution des commentaires
Tags
- (Sans tag) (6)
- Appel au public (17)
- Autoexploration (60)
- BSD (6)
- Boulot (30)
- Création (12)
- En vrac (11)
- Évènement (59)
- Geek (48)
- Goûts (10)
- Humeur (18)
- Inventaire (9)
- Jeux (7)
- Jouets (36)
- Lecture (10)
- Réflexion (23)
- Site (22)
- Social (26)
- Société (14)
- Suite (15)
- Vision atypique (30)
- Vœux (8)
Archives
- 2024 (12)
- 2023 (14)
- 2022 (14)
- 2021 (15)
- 2020 (14)
- 2019 (12)
- 2018 (12)
- 2017 (13)
- 2016 (16)
- 2015 (12)
- 2014 (13)
- 2013 (15)
- 2012 (18)
- Décembre 2012 (2)
- Novembre 2012 (1)
- Septembre 2012 (1)
- Août 2012 (3)
- Juillet 2012 (1)
- Juin 2012 (2)
- Mai 2012 (2)
- Avril 2012 (2)
- Mars 2012 (1)
- Février 2012 (2)
- Janvier 2012 (1)
- 2011 (18)
- 2010 (20)
- 2009 (45)