I've been playing around with pnet, and there's a little problem.
Both pnet and wine can handle MZ (Microsoft's extended version of their PE
format, which handles both native Windows binaries and ICS/.net portable
apps), but you can't register two handlers for the same binfmt.
Fortunately, pnet's interpreter forwards to wine if it finds a Windows native
file, so you want to register that as the handler if you're using both wine
and pnet. But of course you want to register wine as the handler if you're
not using pnet.
I've modified the wine initscript to work friendlily with the pnet initscript,
so you can use both. I'll be happy to put together updated wine and pnet
packages if people want (once I can get into the server), but for now, here's
how to do it yourself in three semi-easy steps.
1. Copy the pnet script supplied in the package:
cp /usr/share/doc/pnet-0.5.2/init.d-pnet /etc/rc.d/init.d/pnet
2. Modify the wine script as follows:
replace
echo ':windows:M::MZ::/usr/bin/wine' >/proc/sys/fs/binfmt_misc/register
with
grep -qs "magic 4d5a" /proc/sys/fs/binfmt_misc/* ||
echo ':windows:M::MZ::/usr/bin/wine' >/proc/sys/fs/binfmt_misc/register
replace
status)[[ -e /proc/sys/fs/binfmt_misc/windows ]] && echo Wine Registration
enabled || [[ -e /proc/sys/fs/binfmt_misc/windowsPE ]] && echo Wine and Pnet
Registrations enabled || echo Wine Registration disabled ;;
with
status)if [[ -e /proc/sys/fs/binfmt_misc/windows ]]; then echo Wine
Registration enabled; else if [[ -e /proc/sys/fs/binfmt_misc/windowsPE ]];
then echo Wine and Pnet Registrations enabled; else echo Wine Registration
disabled; fi; fi;;
3. Make sure they're both enabled:
chkconfig --level 2345 pnet
chkconfig --level 2345 wine
Since pnet is at 80/30 and wine is at 99/10, pnet will be installed first, and
wine will avoid stepping all over it. If you later disable pnet, wine will
work as it always did.
The only issue is that if you manually start (stop) the pnet service, or
(un)register pnet directly, you'll need to restart the wine service, but I
don't see any easy way around this. I played around with a pnet script that
handled this. On starting, it checked whether wine was registered for MZ, and
if so, unregistered it; on stopping, it checked whether wine was registered
for PE, and if so, registered it for MZ as well. But this seemed like too
ugly of a hack for too little benefit.