mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 23:10:58 +00:00
cb5052f2e9
Update README-NT with details on Wix MSI installer (last time README-NT did not get picked up by cvs)
490 lines
18 KiB
Plaintext
490 lines
18 KiB
Plaintext
This software has been released under the terms of the IBM Public
|
|
License. For details, see the LICENSE file in the top-level source
|
|
directory or on-line at http://www.openafs.org/dl/license10.html
|
|
|
|
The document now provides a step by step procedure that takes the user
|
|
from a basic Windows 2000/XP workstation to an OpenAFS development
|
|
environment. Details are provided so that a 'beginning' windows
|
|
developer can build an OpenAFS installable package for Windows 2000/XP/2003.
|
|
|
|
NOTE:
|
|
As of the OpenAFS 1.3 release series, Windows platforms released
|
|
prior to Windows 2000 are not being supported. The InstallShield
|
|
installer is still in the source tree but is no longer supported.
|
|
A new open source installer based on NSIS 2.0 replaces it.
|
|
|
|
*********** Windows 2000/XP/2003 Build Process ****************
|
|
|
|
Building OpenAFS for Windows requires configuring a Windows
|
|
development system by installing compilation tools and header files.
|
|
Open AFS Software development can be done on Windows 2000 or XP. The
|
|
target system, where OpenAFS will be installed, should be either
|
|
Windows 2000, Windows XP, or Windows 2003. The building process is
|
|
controlled by a nmake file that generates the necessary binaries and
|
|
binds them into an install package.
|
|
|
|
The following steps describe how to configure Windows 2000/XP:
|
|
|
|
A. Obtain a copy of the OpenAFS Source Tree
|
|
B. Install Compiler and Development tools.
|
|
C. Install SDK header files
|
|
D. Configure NTBUILD.BAT
|
|
E. Set program version Level
|
|
F. Build Win2000 binaries
|
|
G. Install NSIS 2.0
|
|
H. Build NSIS Install Package
|
|
I. Install Wix 2.0
|
|
J. Build Wix MSI Install Package
|
|
K. Final Results
|
|
L. Optional Items
|
|
|
|
The Microsoft development tools require anywhere from 660 MB to 1.8GB
|
|
of storage depending on which compilers are selected. The following
|
|
versions are supported:
|
|
|
|
Microsoft Visual C++ 6.0
|
|
Microsoft Visual .NET
|
|
Microsoft Visual .NET 2003 (recommended)
|
|
|
|
Any version of the Microsoft SDK and Tools released August 2001 or later.
|
|
|
|
The NSIS installer requires about 14 MB of storage. The following
|
|
version is supported.
|
|
|
|
Nullsoft Scriptable Installation System 2.0
|
|
|
|
The InstallShield scripts (although not supported) require version 5.5
|
|
of InstallShiled. Version 6.0 or higher of InstallShield are not
|
|
compatible.
|
|
|
|
The OpenAFS Source directory requires about 360 MB storage. The Source
|
|
directory size includes additional space for files that will be
|
|
generated during the build process.
|
|
|
|
|
|
STEP A. Obtain a copy of the Open AFS Source Tree.
|
|
|
|
Transfer OpenAFS source tree onto your hardrive. The source can be
|
|
downloaded from the OpenAFS web site:
|
|
http://www.OpenAFS.org/release/snapindex.html.
|
|
|
|
For this example, download source for version 1.3.60 using the
|
|
following URL:
|
|
http://www.openafs.org/dl/openafs/1.3.60/openafs-1.3.60-src.tar
|
|
|
|
HINT: DailySnapShots are pre-release source trees and much more
|
|
likely to have compilation errors. If this is your first attempt, do
|
|
your build based on a release version of the source, e.g. 1.3.60. Once
|
|
you have completed a build process successfully, you can experiment with
|
|
other source trees.
|
|
|
|
You will need an unzip utility that can expand compressed tar files.
|
|
For example "Pkzip for Windows" from Pkware will uncompress tar files.
|
|
(http://www.pkware.com/)
|
|
|
|
Expand the downloaded tar file (openafs-1.3.60-src.tar) into target
|
|
directory (c:\OpenAFS), the unzip routine will expand the source into a
|
|
subdirectory tree:
|
|
c:\OpenAFS\OpenAFS-1.3.60\src
|
|
|
|
Copy the files 'NTMakefile' and 'ntbuild.bat' from 'src' to the OpenAFS
|
|
base directory:
|
|
|
|
From a DOS command prompt window, enter the following copy commands:
|
|
|
|
copy c:\OpenAFS\OpenAFS-1.3.60\src\NTMakefile c:\OpenAFS\OpenAFS-1.3.60\.
|
|
copy c:\OpenAFS\OpenAFS-1.3.60\src\ntbuild.bat c:\OpenAFS\OpenAFS-1.3.60\.
|
|
|
|
|
|
The AFS base directory should look something like the following:
|
|
|
|
c:\OpenAFS\OpenAFS-1.3.60\
|
|
NTMakefile
|
|
ntbuild.bat
|
|
src
|
|
|
|
|
|
STEP B. Install compiler and development tools.
|
|
|
|
Install a copy of Microsoft Visual C++ 6.0, Visual .NET, or Visual .NET 2003.
|
|
The "Typical" install setting is sufficient.
|
|
|
|
(1) You can reduce the installation size by selecting "Custom" install
|
|
and remove all but the following Options:
|
|
|
|
Microsoft Visual C++
|
|
Data Access
|
|
|
|
(2) When asked, Select to Register Environment Variables.
|
|
|
|
|
|
STEP C. Install SDK header files.
|
|
|
|
Files from Microsoft's Platform SDK (August 2001 or later) are required to
|
|
complete a build on Windows 2000 or XP. You can install the "Core SDK"
|
|
from
|
|
|
|
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
|
|
|
|
by using Internet Explorer 5.x or higher. (Active X controls are required)
|
|
|
|
The header files that are required are found from a Microsoft SDK are:
|
|
|
|
netspi.h (Windows 9x builds)
|
|
npapi.h (Windows 2000,XP,2003 builds)
|
|
netcfgx.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds)
|
|
netcfgn.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds)
|
|
|
|
These files come from the following Microsoft DDKs/SDKs:
|
|
|
|
npapi.h:
|
|
Windows XP/2003 Platform SDK - include/
|
|
|
|
netcfgn.h, netcfgx.h:
|
|
Windows XP/2003 DDK - inc/wxp/
|
|
|
|
netmpr.h, netspi.h:
|
|
July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h
|
|
July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h
|
|
- you need to install "Legacy and Related
|
|
driver samples"
|
|
|
|
STEP D. Configure NTBUILD.BAT.
|
|
|
|
The NTBUILD.BAT file copied to the OpenAFS base directory must be
|
|
customized for use on your development system. The following variables
|
|
must be defined to match your configuration:
|
|
|
|
AFSVER_CL: Set to 1200 if using MS Visual C++ 6.0
|
|
Set to 1300 if using MS Visual .NET
|
|
Set to 1310 if using MS Visual .NET 2003
|
|
|
|
MSVCDIR: Set to the short name version of the directory into which
|
|
the visual C++ compiler was installed regardless of version
|
|
|
|
MSSDKDIR: Set to the short name of the directory into which
|
|
the Platform SDK was installed
|
|
|
|
NTDDKDIR: Set the short name of the directory containing the npapi.h file
|
|
|
|
AFSROOT: Set to the short name of the OpenAFS Base directory
|
|
|
|
|
|
STEP E. Set version and installation options (optional)
|
|
|
|
Add a CellServDB file to install area. CellServDB contains the entries
|
|
for the various cell names. You can download a general purpose one
|
|
from:
|
|
http://grand.central.org/dl/cellservdb/CellServDB
|
|
then copy it to %AFSROOT%\src\WINNT\install\NSIS and name it afsdcell.ini
|
|
|
|
Edit file %AFSROOT%\src\config\NTMakefile.i386_nt40
|
|
AFSPRODUCT_VER_MAJOR - Version Major Number
|
|
AFSPRODUCT_VER_MINOR - Version Minor Number
|
|
AFSPRODUCT_VER_PATCH - Version Patch Number
|
|
AFSPRODUCT_VER_BUILD - Version Build Number
|
|
CELLSERVDB_INSTALL - The default file name for the CellServDB
|
|
included in the install Package.
|
|
CELLNAME_DEFAULT - The default home cell name.
|
|
CELLSERVDB_WEB - The default web address to obtain CellServDB
|
|
|
|
For example: in the file %AFSROOT%\src\config\NTMakefile.i386_nt40 you would
|
|
see the following:
|
|
|
|
AFSPRODUCT_VER_MAJOR=1
|
|
AFSPRODUCT_VER_MINOR=3
|
|
AFSPRODUCT_VER_PATCH=6000
|
|
AFSPRODUCT_VER_BUILD=0
|
|
CELLNAME_DEFAULT=openafs.org
|
|
CELLSERVDB_INSTALL=CellServDB.GrandCentral
|
|
CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB
|
|
|
|
During the Open AFS installation process the user will be presented
|
|
with two choices for the CellServDB: Local copy (CELLSERVDB_INSTALL) and
|
|
one that can be downloaded from the web (CELLSERVDB_WEB).
|
|
|
|
STEP F. Begin the build
|
|
|
|
(1) From Windows 2000/XP open up a DOS prompt window.
|
|
|
|
(2) Change to the %AFSROOT% directory
|
|
|
|
(3) Configure the environment variables:
|
|
|
|
For a release build:
|
|
|
|
(a) Execute the VCVARS32.BAT or VSVARS32.BAT file which part of the
|
|
Visual Studio environment you installed.
|
|
|
|
(b) Execute the SETENV.BAT file with the parameters "/2000 /RETAIL"
|
|
|
|
(c) Execute the NTBUILD.BAT file with the parameter "free"
|
|
|
|
For a debug build:
|
|
|
|
(a) Execute the VCVARS32.BAT or VSVARS32.BAT file which part of the
|
|
Visual Studio environment you installed.
|
|
|
|
(b) Execute the SETENV.BAT file with the parameters "/2000 /DEBUG"
|
|
|
|
(c) Execute the NTBUILD.BAT file with the parameter "checked"
|
|
|
|
(4) Clean the work area:
|
|
|
|
nmake /f NTMakefile clean
|
|
|
|
(5) Build the complete Windows NT/2000 development environment.
|
|
|
|
nmake /f NTMakefile install
|
|
|
|
While the build is running you will see many compile warnings. This
|
|
behavior is normal; the build process is successful as long as the build
|
|
process doesn't terminate with an error ("nmake.exe return code 0x2")
|
|
and it displays 'Build Finished Successfully'.
|
|
|
|
|
|
STEP G. Install NSIS 2.0 (optional).
|
|
|
|
Download the Nullsoft Scriptable Installation System (NSIS) 2.0 from
|
|
|
|
http://nsis.sourceforge.net/home/
|
|
|
|
Run the nsis20.exe installer.
|
|
|
|
NOTE: The NSIS installer may be rebuilt from source files
|
|
|
|
C:\Program Files\NSIS\Source
|
|
|
|
to enable options not built into the default configuration. The
|
|
OpenAFS installers are built using a modified version of the NSIS
|
|
sources. The following changes were made to exehead\config.h.
|
|
|
|
NSIS_MAX_STRLEN set to 4096
|
|
NSIS_CONFIG_LOG defined
|
|
NSIS_CONFIG_LOG_ODS defined
|
|
|
|
|
|
STEP H. Build OpenAFS NSIS install package
|
|
|
|
From the DOS command prompt window run:
|
|
|
|
nmake /f NTMakefile NSIS
|
|
|
|
|
|
STEP I. Install Wix MSI Installer
|
|
|
|
Download the Wix 2.0.1727 installer from
|
|
|
|
http://prdownloads.sourceforge.net/wix/sources-2.0.1727.0.zip
|
|
|
|
Apply the following patches to the source tree and execute
|
|
|
|
make ship
|
|
|
|
from the \src\wix directory.
|
|
|
|
Index: src/wix/Compiler.cs
|
|
===================================================================
|
|
RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v
|
|
retrieving revision 1.9
|
|
diff -u -b -r1.9 Compiler.cs
|
|
--- src/wix/Compiler.cs 31 May 2004 01:07:39 -0000 1.9
|
|
+++ src/wix/Compiler.cs 20 Jun 2004 14:06:54 -0000
|
|
@@ -657,7 +657,7 @@
|
|
// add the core registry keys for each context in the class
|
|
for (int i = 0; i < contextCount; ++i)
|
|
{
|
|
- this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
|
|
+ this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
|
|
if (null != icon) // ClassId default icon
|
|
{
|
|
if (null != iconIndex)
|
|
@@ -5710,6 +5710,20 @@
|
|
break;
|
|
}
|
|
break;
|
|
+ case "Delete":
|
|
+ switch (attrib.Value)
|
|
+ {
|
|
+ case "install":
|
|
+ events |= MsiInterop.MsidbServiceControlEventDelete;
|
|
+ break;
|
|
+ case "uninstall":
|
|
+ events |= MsiInterop.MsidbServiceControlEventUninstallDelete;
|
|
+ break;
|
|
+ case "both":
|
|
+ events |= MsiInterop.MsidbServiceControlEventDelete | MsiInterop.MsidbServiceControlEventUninstallDelete;
|
|
+ break;
|
|
+ }
|
|
+ break;
|
|
case "Wait":
|
|
wait = Common.IsYes(attrib.Value, sourceLineNumbers, node.Name, attrib.Name, id) ? "1" : "0"; // strings used since integer column is nullable
|
|
break;
|
|
@@ -7034,6 +7048,7 @@
|
|
}
|
|
bits ^= (bit * 65536);
|
|
break;
|
|
+
|
|
default:
|
|
bit = this.NameToBit(MsiInterop.CommonControlAttributes, attrib.Name, attrib.Value, node.Name, id);
|
|
if (-1 == bit)
|
|
Index: src/wix/Decompiler.cs
|
|
===================================================================
|
|
RCS file: /cvsroot/wix/wix/src/wix/Decompiler.cs,v
|
|
retrieving revision 1.6
|
|
diff -u -b -r1.6 Decompiler.cs
|
|
--- src/wix/Decompiler.cs 21 May 2004 03:57:42 -0000 1.6
|
|
+++ src/wix/Decompiler.cs 20 Jun 2004 14:06:54 -0000
|
|
@@ -2562,7 +2562,7 @@
|
|
this.writer.WriteAttributeString("Group", "yes");
|
|
text = text.Substring(1);
|
|
}
|
|
- this.writer.WriteString(text);
|
|
+ this.writer.WriteAttributeString("Id", text);
|
|
this.writer.WriteEndElement();
|
|
}
|
|
}
|
|
Index: src/wix/Preprocessor.cs
|
|
===================================================================
|
|
RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v
|
|
retrieving revision 1.4
|
|
diff -u -b -r1.4 Preprocessor.cs
|
|
--- src/wix/Preprocessor.cs 31 May 2004 01:07:40 -0000 1.4
|
|
+++ src/wix/Preprocessor.cs 20 Jun 2004 14:06:55 -0000
|
|
@@ -269,12 +269,12 @@
|
|
break;
|
|
case "ifdef":
|
|
stack.Push(context);
|
|
- context = new IfContext(context.IsTrue & context.Active, this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
|
|
+ context = new IfContext(context.IsTrue & context.Active, this.IsDefined(reader.Value.Trim()), IfState.If);
|
|
ignore = true;
|
|
break;
|
|
case "ifndef":
|
|
stack.Push(context);
|
|
- context = new IfContext(context.IsTrue & context.Active, !this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
|
|
+ context = new IfContext(context.IsTrue & context.Active, !this.IsDefined(reader.Value.Trim()), IfState.If);
|
|
ignore = true;
|
|
break;
|
|
case "elseif":
|
|
@@ -356,6 +356,8 @@
|
|
break;
|
|
case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error
|
|
throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), "Cannot have a <?endforeach?> processing instruction without a matching <?foreach?>.");
|
|
+ case "error":
|
|
+ throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value));
|
|
default:
|
|
// Console.WriteLine("processing instruction: {0}, {1}", reader.Name, reader.Value);
|
|
break;
|
|
@@ -403,6 +405,22 @@
|
|
}
|
|
|
|
/// <summary>
|
|
+ /// Returns true if the symbol exists.
|
|
+ /// </summary>
|
|
+ /// <param name="symbol">symbol name to check</param>
|
|
+ /// <returns>true if symbol is defined</returns>
|
|
+ private bool IsDefined(string symbol)
|
|
+ {
|
|
+ if( symbol.StartsWith("env.") )
|
|
+ return Environment.GetEnvironmentVariable(symbol.Substring(4)) != null;
|
|
+ if( symbol.StartsWith("var.") )
|
|
+ return this.variables.ContainsKey(symbol.Substring(4));
|
|
+ if( symbol.StartsWith("sys.") )
|
|
+ return this.systemVariables.ContainsKey(symbol.Substring(4));
|
|
+ return this.variables.ContainsKey(symbol);
|
|
+ }
|
|
+
|
|
+ /// <summary>
|
|
/// Replaces parameters in the source text.
|
|
/// </summary>
|
|
/// <param name="value">Text that may contain parameters to replace.</param>
|
|
Index: src/wix/Xsd/wix.xsd
|
|
===================================================================
|
|
RCS file: /cvsroot/wix/wix/src/wix/Xsd/wix.xsd,v
|
|
retrieving revision 1.11
|
|
diff -u -b -r1.11 wix.xsd
|
|
--- src/wix/Xsd/wix.xsd 31 May 2004 01:07:40 -0000 1.11
|
|
+++ src/wix/Xsd/wix.xsd 20 Jun 2004 14:06:55 -0000
|
|
@@ -1736,6 +1736,7 @@
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
</xs:attribute>
|
|
+ <xs:attribute name="Separator" type="xs:string"/>
|
|
<xs:attribute name="Permanent" type="YesNoType"/>
|
|
<xs:attribute name="System" type="YesNoType"/>
|
|
</xs:complexType>
|
|
|
|
|
|
STEP J. Build Wix MSI install package
|
|
|
|
From the DOS command prompt window run:
|
|
|
|
nmake /f NTMakefile wix
|
|
|
|
Make sure the binaries installed to \src\wix\release\ship are
|
|
available in the PATH environment variable
|
|
|
|
|
|
STEP K. Final Results
|
|
|
|
The build process generates its binaries in %AFSROOT%\DEST. The subdirectory
|
|
would look like the following:
|
|
|
|
%AFSROOT%:\DEST\{checked,free}\
|
|
bin
|
|
etc
|
|
include
|
|
lib
|
|
root.client
|
|
root.server
|
|
WinInstall
|
|
|
|
Bin - contains build utilities.
|
|
root.client - contains Open AFS binaries
|
|
root.server - contain Open AFS Server binaries
|
|
WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS
|
|
|
|
|
|
STEP L. Optional Items
|
|
|
|
The build process has an error table that is compiled for many OpenAFS
|
|
applications. This table is generated by Unix based tools. It is not
|
|
normally necessary to modify this table so pre-generated source files
|
|
are included in the OpenAFS source. If you need to make modifications
|
|
in these areas the Unix base tools that run on Windows can be found on
|
|
the web. For example:
|
|
|
|
http://cygwin.com/
|
|
|
|
Below is a short explanation how to update the error table.
|
|
|
|
(1) Install flex and bison from a Unix based tool provider.
|
|
|
|
(2) Make changes to the source files.
|
|
|
|
There are two files in the source tree that are processed with lex
|
|
and yacc on UNIX systems, src/comerr/et_lex.lex.l and
|
|
src/comerr/error_table.y, that when processed produce the files
|
|
et_lex.lex_nt.c, error_table_nt.c, and error_table_nt.h.
|
|
|
|
Since NT does not include lex and yacc or any equivalent tools, we
|
|
have provided the output files that lex and yacc produce (using Win32
|
|
ports of flex and bison). This will allow builds to work for anyone
|
|
who does not need to change the .l and .y files.
|
|
|
|
If you do need to change et_lex.lex.l, then you will need to install
|
|
Win32 port of flex on your system. Put flex.exe in a directory on the
|
|
path and rebuild.
|
|
|
|
If you do need to change error_table.y, then you will need to install
|
|
a Win32 port of bison on your system. Put bison.exe in a directory on
|
|
the path, configure bison as explained in step 5, and rebuild.
|
|
|
|
You can also attempt to use other replacements for lex and yacc. This
|
|
will require modifying the LEX and YACC settings in
|
|
/config/NTMakefile.i386_nt40. If the replacements require different
|
|
command line options than flex and bison, then you may also need to
|
|
change src/comerr/NTMakefile.
|
|
|
|
(3) Generate new OpenAFS binaries
|