Wrote a small document on how to package WINE for distributors.
This commit is contained in:
parent
e3e54cd4a2
commit
2858ac9912
|
@ -0,0 +1,152 @@
|
|||
A small WINE distribution guide.
|
||||
|
||||
While packaging WINE for one of the Linux distributions I came across
|
||||
several points which have been clarified yet. Particular a how-to for WINE
|
||||
packaging distributors is missing. This document tries to give a brief
|
||||
overview over the rationales I thought up and how I tried to implement it.
|
||||
(While the examples use "rpm" most of this stuff can be applied to other
|
||||
packagers too.)
|
||||
|
||||
1. Rationales
|
||||
|
||||
A WINE install should:
|
||||
a. Not have a world writeable directory (-tree).
|
||||
b. Require only as much user input as possible. It would be very good if it
|
||||
would not require any at all. Just let the system administrator do "rpm
|
||||
-i wine.rpm" and let any user be able to run "wine sol.exe" instantly.
|
||||
c. Give the user as much flexibility to install his own applications, do
|
||||
his own configuring etc.
|
||||
d. Come as preconfigured as possible, so the user does not need to change
|
||||
any configuration files.
|
||||
e. Use only as much diskspace as needed per user.
|
||||
|
||||
A WINE install needs:
|
||||
f. A writeable C:\ directory structure on a per user basis. Applications do
|
||||
dump .ini files into c:\windows, installers dump .exe, .dll and more into
|
||||
c:\windows\ and subdirectories or into C:\Program Files\.
|
||||
g. The .exe and .dll from a global read-only Windows installation to be
|
||||
found by applications.
|
||||
h. Some special .dll and .exe files in the windows\system directory, since
|
||||
applications directly check for their presence.
|
||||
|
||||
|
||||
2. Implementation
|
||||
|
||||
2.1 Building the package
|
||||
|
||||
WINE is configured the usual way (depending on your buildenvironment).
|
||||
The "prefix" is chosen using your application placement policy
|
||||
(/usr/,/usr/X11R6/, /opt/wine/ or similar). The configuration files
|
||||
(wine.conf, wineuser.reg, winesystem.reg) are targeted for /etc/wine/
|
||||
(rationale: FHS 2.0, multiple readonly configuration files of a package).
|
||||
|
||||
Example (split this into %build and %install section for rpm):
|
||||
CFLAGS=$RPM_OPT_FLAGS \
|
||||
./configure --prefix=/usr/X11R6 --sysconfdir=/etc/wine/ --enable-dll
|
||||
make
|
||||
make install prefix=$BUILDROOT/usr/X11R6/
|
||||
install -d /etc/wine/
|
||||
install -m 644 wine.ini /etc/wine/wine.conf
|
||||
|
||||
Here we unfortunately do need to create wineuser.reg and winesystem.reg
|
||||
from the WINE distributed winedefault.reg. This can be done using
|
||||
./regapi once for one example user and the reusing his .wine/user.reg
|
||||
and .wine/system.reg files. [FIXME: this needs to be done better]
|
||||
|
||||
install -m 644 winesytem.reg /etc/wine/
|
||||
install -m 644 wineuser.reg /etc/wine/
|
||||
|
||||
You will need to package the files:
|
||||
$prefix/bin/wine, $prefix/bin/dosmod, $prefix/lib/libwine.so.1.0,
|
||||
$prefix/man/man1/wine.1, $prefix/include/wine/*,
|
||||
|
||||
%config /etc/wine/*
|
||||
%doc ... choose from the toplevel directory and documentation/
|
||||
|
||||
Do not forget ldconfig for the postinstall, the postuninstall and 'rm
|
||||
libwine.so' for the postuninstall.
|
||||
|
||||
2.2 Creating a good default configuration file
|
||||
|
||||
For the rationales of needing as less input from the user as possible
|
||||
arises the need for a very good configuration file. The one supplied
|
||||
with WINE is currently lacking. We need:
|
||||
|
||||
- [Drive X]:
|
||||
+ A for the floppy. Specify your distributions default floppy mountpoint
|
||||
here. (Path=/auto/floppy)
|
||||
+ C for the C:\ directory. Here we use the users homedirectory, for most
|
||||
applications do see C:\ as root-writeable directory of every windows
|
||||
installation and this basically is it in the UNIX-user context.
|
||||
(Path=${HOME})
|
||||
+ R for the CD-Rom drive. Specify your distributions default CD-ROM drives
|
||||
mountpoint here. (Path=/auto/cdrom)
|
||||
+ T for temporary storage. We do use /tmp/ (rationale: between process
|
||||
temporary data belongs to /tmp/, FHS 2.0)
|
||||
+ W for the original Windows installation. This drive points to the
|
||||
windows\ subdirectory of the original windows installation. This avoids
|
||||
problems with renamed 'windows' directories (as for instance 'lose95',
|
||||
'win' or 'sys\win95'). During compile/package/install we leave this
|
||||
to be '/', it has to be configured after the package install.
|
||||
+ Z for the UNIX Root directory (Path=/). This avoids any problems with
|
||||
"could not find drive for current directory" users occasionaly complain
|
||||
about in the newsgroup and the ircchannel. It also makes the whole
|
||||
directory structure browseable. The type of Z should be network, so
|
||||
applications expect it to be readonly.
|
||||
|
||||
- [wine]:
|
||||
Windows=c:\windows\ (the windows/ subdirectory in the users
|
||||
homedirectory)
|
||||
System=c:\windows\system\ (the windows/system subdirectory in the users
|
||||
homedirectory)
|
||||
Path=c:\windows;c:\windows\system;c:\windows\system32;w:\;w:\system;w:\system32;
|
||||
; Using this trick we have in fact two windows installations in one, we
|
||||
; get the stuff from the readonly installation and can write to our own.
|
||||
Temp=t:\ (the TEMP directory)
|
||||
- [Tweak.Layout]
|
||||
WineLook=win95 (just the coolest look ;)
|
||||
- Possibly modify the [spooler], [serialports] and [parallelports] sections.
|
||||
(FIXME: possibly more, including printer stuff)
|
||||
|
||||
Add this prepared configuration file to the package.
|
||||
|
||||
2.3 Installing WINE for the system administrator
|
||||
|
||||
Install the package using the usual packager "rpm -i wine.rpm".
|
||||
You may edit /etc/wine/wine.conf, [Drive W], to point to a possible windows
|
||||
installation right after the install. Thats it.
|
||||
|
||||
2.4 Installing WINE for the user
|
||||
|
||||
The user will need to run a setup script before the first invocation of
|
||||
WINE. This script should:
|
||||
- Copy /etc/wine/wine.conf for user modification.
|
||||
- Allow specification of the original windows installation to use (which
|
||||
modifies the copied wine.conf file).
|
||||
- Create the windows directory structure (c:\windows,c:\windows\system,
|
||||
c:\Program Files,c:\Desktop,etc...)
|
||||
|
||||
(FIXME: Not sure this is needed for all files:)
|
||||
- Symlink all .dll and .exe files from the original windows installation to
|
||||
the windows directory. Why? Some program reference "%windowsdir%/file.dll"
|
||||
or "%systemdir%/file.dll" directly and fail if there are not present.
|
||||
This will give a huge number of symlinks, yes. However, if an installer
|
||||
later overwrites on of those files, it will overwrite the symlink (so
|
||||
that the file now lies in the windows/ subdirectory).
|
||||
|
||||
- On later invocation the script might want to compare regular files in
|
||||
the users windows directories and in the global windows directories and
|
||||
replace same files by symlinks (to avoid diskspace problems).
|
||||
|
||||
Done.
|
||||
|
||||
This procedure requires:
|
||||
- Much thought and work from the packager (1x)
|
||||
- No work for the sysadmin. Well except one "rpm -i" and possible one edit
|
||||
of the configuration file.
|
||||
- Some or no work from the user, except running the per-user setup script
|
||||
once.
|
||||
=> It scales well and suffices most of the rationales.
|
||||
|
||||
Marcus Meissner <marcus@jet.franken.de>
|
||||
|
Loading…
Reference in New Issue