		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>

