
                              Wine Documentation                               
Prev                                                                       Next
-------------------------------------------------------------------------------

Chapter 5. Implementation

OpenLinux Sample

 1. Building the package
   
    WINE is configured the usual way (depending on your build environment). The
    "prefix" is chosen using your application placement policy (/usr/, /usr/
    X11R6/, /opt/wine/ or similar). The configuration files (wine.conf,
    wine.userreg, wine.systemreg) 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                                                                 
    BR=$RPM_BUILD_ROOT                                                   
    make install prefix=$BR/usr/X11R6/ sysconfdir=$BR/etc/wine/          
    install -d $BR/etc/wine/                                             
    install -m 644 wine.ini $BR/etc/wine/wine.conf                       
                                                                         
    # Put all our dlls in a seperate directory. (this works only if      
    # you have a buildroot)                                              
    install -d $BR/usr/X11R6/lib/wine                                    
    mv $BR/usr/X11R6/lib/lib* $BR/usr/X11R6/lib/wine/                    
                                                                         
    # the clipboard server is started on demand.                         
    install -m 755 windows/x11drv/wineclipsrv $BR/usr/X11R6/bin/         
                                                                         
    # The WINE server is needed.                                         
    install -m 755 server/wineserver $BR/usr/X11R6/bin/                  
                                                                         
   
    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 then reusing his WINECONFDIR/user.reg and
    WINECONFDIR/system.reg files.
       
        FIXME: this needs to be done better
    install -m 644 wine.sytemreg $BR/etc/wine/                         
    install -m 644 wine.userreg $BR/etc/wine/                          
                                                                       
   
    There are now a lot of libraries generated by the build process, so a
    seperate library directory should be used.
    install -d 755 $BR/usr/X11R6/lib/                                  
    mv $BR/                                                            
                                                                       
   
    You will need to package the files:
    $prefix/bin/wine, $prefix/bin/dosmod, $prefix/lib/wine/*           
    $prefix/man/man1/wine.1, $prefix/include/wine/*,                   
    $prefix/bin/wineserver, $prefix/bin/wineclipsrv                    
                                                                       
    %config /etc/wine/*                                                
    %doc ... choose from the toplevel directory and documentation/     
                                                                       
   
    The post-install script:
    if ! grep -q /usr/X11R6/lib/wine /etc/ld.so.conf; then             
        echo "/usr/X11R6/lib/wine" >> /etc/ld.so.conf                  
    fi                                                                 
    /sbin/ldconfig                                                     
                                                                       
   
    The post-uninstall script:
    if [ "$1" = 0 ]; then                                                  
        perl -ni -e 'print unless m:/usr/X11R6/lib/wine:;' /etc/ld.so.conf 
    fi                                                                     
    /sbin/ldconfig                                                         
                                                                           
   
 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]:
       
        oA for the floppy. Specify your distributions default floppy
            mountpoint here.
            Path=/auto/floppy                                           
                                                                        
           
        oC 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}                                                
                                                                        
           
        oR for the CD-Rom drive. Specify your distributions default CD-ROM
            drives mountpoint here.
            Path=/auto/cdrom                                            
                                                                        
           
        oT for temporary storage. We do use /tmp/ (rationale: between
            process temporary data belongs to /tmp/, FHS 2.0)
           
        oW 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.
           
        oZ for the UNIX Root directory. 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.
            Path=/                                                      
                                                                        
           
       
    +[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.
   
 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. That's it.
   
    Note that on Linux you should somehow try to add the unhide mount option
    (see man mount) to the CD-ROM entry in /etc/fstab during package install,
    as several stupid Windows programs mark some setup (!) files as hidden
    (ISO9660) on CD-ROMs, which will greatly confuse users as they won't find
    their setup files on the CD-ROMs as they were used on Windows systems when
    unhide is not set ;-\ And of course the setup program will complain that
    setup.ins or some other mess is missing... If you choose to do so, then
    please make this change verbose to the admin.
   
 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:\windows\Start Menu\Programs, c:\Program Files, c:\Desktop,
        etc.)
       
    +Symlink all .dll and .exe files from the original windows
        installation to the windows directory. Why? Some programs reference
        "%windowsdir%/file.dll" or "%systemdir%/file.dll" directly and fail if
        they 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).
           
            FIXME: Not sure this is needed for all files.
       
    +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).
       
   

Sample wine.ini for OpenLinux 2.x:

;;                                                                                  
;; MS-DOS drives configuration                                                      
;;                                                                                  
;; Each section has the following format:                                           
;; [Drive X]                                                                        
;; Path=xxx       (Unix path for drive root)                                        
;; Type=xxx       (supported types are 'floppy', 'hd', 'cdrom' and 'network')       
;; Label=xxx      (drive label, at most 11 characters)                              
;; Serial=xxx     (serial number, 8 characters hexadecimal number)                  
;; Filesystem=xxx (supported types are 'msdos'/'dos'/'fat', 'win95'/'vfat', 'unix') 
;;   This is the FS Wine is supposed to emulate on a certain                        
;;   directory structure.                                                           
;;   Recommended:                                                                   
;;   - "win95" for ext2fs, VFAT and FAT32                                           
;;   - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended)      
;;   DON'T use "unix" unless you intend to port programs using Winelib !            
;; Device=/dev/xx (only if you want to allow raw device access)                     
;;                                                                                  
                                                                                    
;                                                                                   
;                                                                                   
; Floppy 'A' and 'B'                                                                
;                                                                                   
; OpenLinux uses an automounter under /auto/, so we use that too.                   
;                                                                                   
[Drive A]                                                                           
Path=/auto/floppy/                                                                  
Type=floppy                                                                         
Label=Floppy                                                                        
Serial=87654321                                                                     
Device=/dev/fd0                                                                     
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; Comment in ONLY if you have a second floppy or the automounter hangs              
; for 5 minutes.                                                                    
;                                                                                   
;[Drive B]                                                                          
;Path=/auto/floppy2/                                                                
;Type=floppy                                                                        
;Label=Floppy                                                                       
;Serial=87654321                                                                    
;Device=/dev/fd1                                                                    
;Filesystem=win95                                                                   
                                                                                    
                                                                                    
;                                                                                   
; Drive 'C' links to the users homedirectory.                                       
;                                                                                   
; This must point to a writeable directory structure (not your readonly             
; mounted DOS partitions!) since programs want to dump stuff into                   
; "Program Files/" "Programme/", "windows/", "windows/system/" etc.                 
;                                                                                   
; The basic structure is set up using the config script.                            
;                                                                                   
[Drive C]                                                                           
Path=${HOME}                                                                        
Type=hd                                                                             
Label=MS-DOS                                                                        
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; /tmp/ directory                                                                   
;                                                                                   
; The temp drive (and directory) points to /tmp/. Windows programs fill it          
; with junk, so it is approbiate.                                                   
;                                                                                   
[Drive T]                                                                           
Path=/tmp                                                                           
Type=hd                                                                             
Label=Tmp Drive                                                                     
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; 'U'ser homedirectory                                                              
;                                                                                   
; Just in case you want C:\ elsewhere.                                              
;                                                                                   
[Drive U]                                                                           
Path=${HOME}                                                                        
Type=hd                                                                             
Label=Home                                                                          
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; CD-'R'OM drive (automounted)                                                      
;                                                                                   
; The default cdrom drive.                                                          
;                                                                                   
; If an application (or game) wants a specific CD-ROM you might have to             
; temporary change the Label to the one of the CD itself.                           
;                                                                                   
; How to read them is described in /usr/doc/wine-cvs-xxxxx/cdrom-labels.            
;                                                                                   
[Drive R]                                                                           
Path=/auto/cdrom                                                                    
Type=cdrom                                                                          
Label=CD-Rom                                                                        
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; The drive where the old windows installation resides (it points to the            
; windows/ subdirectory).                                                           
;                                                                                   
; The Path is modified by the winesetup script.                                     
;                                                                                   
[Drive W]                                                                           
Path=/                                                                              
Type=network                                                                        
Label=Windows                                                                       
Filesystem=win95                                                                    
;                                                                                   
; The UNIX Root directory, so all other programs and directories are reachable.     
;                                                                                   
; type network is used to tell programs to not write here.                          
;                                                                                   
[Drive Z]                                                                           
Path=/                                                                              
Type=network                                                                        
Label=ROOT                                                                          
Filesystem=win95                                                                    
                                                                                    
;                                                                                   
; Standard Windows path entries. WINE will not work if they are incorrect.          
;                                                                                   
[wine]                                                                              
;                                                                                   
; The windows/ directory. It must be writeable, for programs write into it.         
;                                                                                   
Windows=c:\windows                                                                  
;                                                                                   
; The windows/system/ directory. It must be writeable, for especially setup         
; programs install dlls in there.                                                   
;                                                                                   
System=c:\windows\system                                                            
;                                                                                   
; The temp directory. Should be cleaned regulary, since install programs leave      
; junk without end in there.                                                        
;                                                                                   
Temp=t:\                                                                            
;                                                                                   
; The dll search path. It should contain at least:                                  
; - the windows and the windows/system directory of the user.                       
; - the global windows and windows/system directory (from a possible readonly       
;   windows installation either on msdos filesystems or somewhere in the UNIX       
;   directory tree)                                                                 
; - any other windows style directories you want to add.                            
;                                                                                   
Path=c:\windows;c:\windows\system;c:\windows\system32;t:\;w:\;w:\system;w:\system32 
;                                                                                   
; Outdated and no longer used. (but needs to be present).                           
;                                                                                   
SymbolTableFile=./wine.sym                                                          
                                                                                    
# <wineconf>                                                                        
                                                                                    
;                                                                                   
; Dll loadorder defaults. No need to modify.                                        
;                                                                                   
[DllDefaults]                                                                       
EXTRA_LD_LIBRARY_PATH=${HOME}/wine/cvs/lib                                          
DefaultLoadOrder = native, elfdll, so, builtin                                      
                                                                                    
;                                                                                   
; What 32/16 dlls belong to each other (context wise). No need to modify.           
;                                                                                   
[DllPairs]                                                                          
kernel  = kernel32                                                                  
gdi     = gdi32                                                                     
user    = user32                                                                    
commdlg = comdlg32                                                                  
commctrl= comctl32                                                                  
ver     = version                                                                   
shell   = shell32                                                                   
lzexpand= lz32                                                                      
mmsystem= winmm                                                                     
msvideo = msvfw32                                                                   
winsock = wsock32                                                                   
                                                                                    
;                                                                                   
; What type of dll to use in their respective loadorder.                            
;                                                                                   
[DllOverrides]                                                                      
kernel32, gdi32, user32 = builtin                                                   
kernel, gdi, user       = builtin                                                   
toolhelp                = builtin                                                   
comdlg32, commdlg       = elfdll, builtin, native                                   
version, ver            = elfdll, builtin, native                                   
shell32, shell          = builtin, native                                           
lz32, lzexpand          = builtin, native                                           
commctrl, comctl32      = builtin, native                                           
wsock32, winsock        = builtin                                                   
advapi32, crtdll, ntdll = builtin, native                                           
mpr, winspool           = builtin, native                                           
ddraw, dinput, dsound   = builtin, native                                           
winmm, mmsystem         = builtin                                                   
msvideo, msvfw32        = builtin, native                                           
mcicda.drv, mciseq.drv  = builtin, native                                           
mciwave.drv             = builtin, native                                           
mciavi.drv, mcianim.drv = native, builtin                                           
w32skrnl                = builtin                                                   
wnaspi32, wow32         = builtin                                                   
system, display, wprocs = builtin                                                   
wineps                  = builtin                                                   
                                                                                    
;                                                                                   
; Options section. Does not need to be edited.                                      
;                                                                                   
[options]                                                                           
; allocate how much system colors on startup. No need to modify.                    
AllocSystemColors=100                                                               
                                                                                    
;;                                                                                  
; Font specification. You usually do not need to edit this section.                 
;                                                                                   
; Read documentation/fonts before adding aliases                                    
;                                                                                   
[fonts]                                                                             
; The resolution defines what fonts to use (usually either 75 or 100 dpi fonts,     
; or nearest match).                                                                
Resolution = 96                                                                     
; Default font                                                                      
Default = -adobe-times-                                                             
                                                                                    
;                                                                                   
; serial ports used by "COM1" "COM2" "COM3" "COM4". Useful for applications         
; that try to access serial ports.                                                  
;                                                                                   
[serialports]                                                                       
Com1=/dev/ttyS0                                                                     
Com2=/dev/ttyS1                                                                     
Com3=/dev/modem,38400                                                               
Com4=/dev/modem                                                                     
                                                                                    
;                                                                                   
; parallel port(s) used by "LPT1" etc. Useful for applications that try to          
; access these ports.                                                               
;                                                                                   
[parallelports]                                                                     
Lpt1=/dev/lp0                                                                       
                                                                                    
;                                                                                   
; What spooling program to use on printing.                                         
; Use "|program" or "filename", where the output will be dumped into.               
;                                                                                   
[spooler]                                                                           
LPT1:=|lpr                                                                          
LPT2:=|gs -sDEVICE=bj200 -sOutputFile=/tmp/fred -q -                                
LPT3:=/dev/lp3                                                                      
                                                                                    
;                                                                                   
; Allow port access to WINE started by the root user. Useful for some               
; supported devices, but it can make the system unstable.                           
; Read /usr/doc/wine-cvs-xxxxx/ioport-trace-hints.                                  
;                                                                                   
[ports]                                                                             
;read=0x779,0x379,0x280-0x2a0                                                       
;write=0x779,0x379,0x280-0x2a0                                                      
                                                                                    
; debugging, not need to be modified.                                               
[spy]                                                                               
Exclude=WM_SIZE;WM_TIMER;                                                           
                                                                                    
;                                                                                   
; What names for the registry datafiles, no need to modify.                         
;                                                                                   
[Registry]                                                                          
; Paths must be given in /dir/dir/file.reg format.                                  
; Wine will not understand dos file names here...                                   
;UserFileName=xxx               ; alternate registry file name (user.reg)           
;LocalMachineFileName=xxx       ; (system.reg)                                      
                                                                                    
;                                                                                   
; Layout/Look modifications. Here you can switch with a single line between         
; windows 3.1 and windows 95 style.                                                 
; This does not change WINE behaviour or reported versions, just the look!          
;                                                                                   
[Tweak.Layout]                                                                      
;; WineLook=xxx  (supported styles are 'Win31'(default), 'Win95', 'Win98')          
WineLook=Win95                                                                      
                                                                                    
;                                                                                   
; What programs to start on WINE startup. (you should probably leave it empty)      
;                                                                                   
[programs]                                                                          
Default=                                                                            
Startup=                                                                            
                                                                                    
; defunct section.                                                                  
[Console]                                                                           
;XtermProg=nxterm                                                                   
;InitialRows=25                                                                     
;InitialColumns=80                                                                  
;TerminalType=nxterm                                                                
                                                                                    
# </wineconf>                                                                       
                                                                                    
-------------------------------------------------------------------------------
Prev                                  Home                                 Next
What to put into the wine              Up                       Work to be done
config file                                                                    
