NOTE 1:
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.
+prior to Windows 2000 are no longer supported. As of the OpenAFS 1.5
+series, the Windows 9x components are being removed from the source tree.
NOTE 2:
In this release, in addition to the production quality CIFS-AFS
gateway based client service there also exists an experimental
-implementation of an Installable File System (IFS).
-To build the IFS version, follow the directions below, but note that
-only the NSIS installer script has been updated to support it.
-Also, the IFS kernel module must be built separately, using the IFS/DDK
-build environment.
-
+implementation of an Installable File System (IFS). To build the IFS
+version, follow the directions below, but note that only the NSIS
+installer script has been updated to support it. Also, the IFS kernel
+module must be built separately, using the IFS/DDK build environment.
+The IFS implementation does not contain a Network Provider interface
+to register an AFS service name.
*********** 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.
+Open AFS Software development can be done on Windows 2000, XP, 2003,
+or Vista. The target system, where OpenAFS will be installed, can be
+one of:
+
+ * Windows 2000
+ * Windows XP
+ * Windows XP SP2
+ * Windows 2003
+ * Windows 2003 SP1
+ * Windows XP 64
+ * Windows 2003 64
+ * Windows 2003 R2 (32 or 64)
+ * Windows Vista (32 or 64)
+
+The build 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:
C. Install SDK header files
D. Configure NTBUILD.BAT
E. Set program version Level
- F. Build Win2000 binaries
- G. Install NSIS 2.0
+ F. Build the binaries
+ G. Install NSIS 2.30
H. Build NSIS Install Package
- I. Install Wix 2.0
+ I. Install Wix 2.0.5325
J. Build Wix MSI Install Package
K. Final Results
L. Optional Items
Microsoft Visual Studio .NET
available via a MSDN subscription
- Microsoft Visual Studio .NET 2003 (recommended)
+ Microsoft Visual Studio .NET 2003
available via a MSDN subscription
- Microsoft Visual Studio .NET 2005 (do not use for production)
+ Microsoft Visual Studio .NET 2005 (required for AMD64 builds)
available via a MSDN subscription
+ (recommended - required for 64-bit builds)
The following Microsoft SDK is required:
- Microsoft Platform SDK for Windows XP SP2 [Core, Data Access and Installer SDKs are required]
+ Microsoft Platform SDK for Windows XP SP2 or Server 2003 SP1 or Vista
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm [IE required]
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
available via a MSDN subscription or via free CD
http://www.microsoft.com/whdc/devtools/ddk/orderddkcd.mspx
+The Microsoft HTML Help Workshop is required:
+
+ http://www.microsoft.com/downloads/details.aspx?familyid=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en
+
The NSIS installer requires about 14 MB of storage. The following
version is supported:
- Nullsoft Scriptable Installation System 2.0
+ Nullsoft Scriptable Installation System 2.30
http://nsis.sourceforge.net/home/
The WiX installer requires about 18 MB of storage. The following
version is supported:
- Wix 2.0.2217.0
- http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip
+ Wix 2.0.5325.0
+ http://prdownloads.sourceforge.net/wix/sources-2.0.5325.0.zip
The InstallShield scripts (although not supported) require version 5.5
of InstallShiled. Version 6.0 or higher of InstallShield are not
copy src\ntbuild.bat .
-The AFS base directory should look something like the following:
+The OpenAFS base directory should look something like the following:
c:\OpenAFS\OpenAFS-1.3.74\
NTMakefile
STEP C. Install SDK header files.
-Files from Microsoft's Platform SDK for Windows XP SP2 is required to
-complete a build on Windows 2000/XP/2003. You can install the "Core, Data
-Access and Installer SDKs" from
+Files from Microsoft's Platform SDK for Windows XP SP2 or Server 2003 are
+required to complete a build on Windows 2000/XP/2003. You can install
+the "Core, Data Access and Installer SDKs" from
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
-The header files that are required are found from a Microsoft SDK are:
+The header files that are required from a Microsoft SDK/DDK are:
npapi.h (Windows 2000,XP,2003 builds)
netcfgx.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds)
MSVCDIR: Set to the short name version of the directory into which
the visual C++ compiler was installed regardless of version
+ MSVCDIR64: On AMD64 systems, set to the 64-bit visual C++ compiler
+
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
+ NTDDKDIR: Set to the short name of the INC\WNET DDK directory
+
+ NTDDKDIR2: Set to the short name of the INC\CRT DDK directory
AFSROOT: Set to the short name of the OpenAFS Base directory. This
cannot be set to a UNC path.
+ SYS_NAME: One of "i386_w2k" or "amd64_w2k"
+
+ APPVER: 0x500 for Windows 2000 and above; 0x502 for AMD64 systems
+
+ _WIN32_IE: Must match APPVER
+
+ MSVCVer: Set to 8.0 if using Visual Studio 8
+
STEP E. Set version and installation options (optional)
to the src\WINNT\afsrdr directory, and execute the "build" command.
-STEP G. Install NSIS 2.0 (optional).
+STEP G. Install NSIS 2.30 (optional).
-Download the Nullsoft Scriptable Installation System (NSIS) 2.0 from
+Download the Nullsoft Scriptable Installation System (NSIS) 2.30 from
http://nsis.sourceforge.net/home/
-Run the nsis20.exe installer.
+Run the nsis-2.30.exe installer and install to "C:\Program Files\NSIS".
+Then download the large strings build zip file and replace the installed
+files with the versions from the zip file. These versions increase
+the maximum string length from 1024 characters to 8192 characters.
+This is necessary for installation on systems with long PATH environment
+strings.
-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
-
+Note: The NSIS installer can only be used to produce 32-bit installers.
STEP H. Build OpenAFS NSIS install package
STEP I. Install Wix MSI Installer
-Download the Wix 2.0.2217.0 installer from
-
- http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip
-
-Apply the following patches to the source tree and execute
-
- make ship
-
-from the \src\wix directory.
-
-Index: src/wix/Common.cs
-===================================================================
-RCS file: /cvsroot/wix/wix/src/wix/Common.cs,v
-retrieving revision 1.7
-diff -w -r1.7 Common.cs
-140a141,146
-> public static long GetFileTimeFromDateTime(string dateTime)
-> {
-> System.DateTime sdt = System.Xml.XmlConvert.ToDateTime(dateTime);
-> return sdt.ToFileTime();
-> }
->
-Index: src/wix/Compiler.cs
-===================================================================
-RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v
-retrieving revision 1.14
-diff -w -r1.14 Compiler.cs
-847c847
-< this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
----
-> this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
-2352a2353,2358
-> // if a Value attribute was given by itself, make this a type 19 custom action
-> if( sourceBits == 0 && targetBits == MsiInterop.MsidbCustomActionTypeTextData )
-> {
-> sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile;
-> }
->
-3881c3887
-< minDate = attrib.Value;
----
-> minDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString();
-3884c3890
-< maxDate = attrib.Value;
----
-> maxDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString();
-8187a8194,8207
-> 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;
-9685a9706
->
-Index: src/wix/Preprocessor.cs
-===================================================================
-RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v
-retrieving revision 1.6
-diff -w -r1.6 Preprocessor.cs
-274c274
-< 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);
-279c279
-< 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);
-360a361,362
-> case "error":
-> throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value));
-419a422,437
-> /// 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>
-Index: src/wix/wix.csproj
-===================================================================
-RCS file: /cvsroot/wix/wix/src/wix/wix.csproj,v
-retrieving revision 1.4
-diff -w -r1.4 wix.csproj
-661a662,666
-> RelPath = "Xsd\wix.xsx"
-> DependentUpon = "wix.xsd"
-> BuildAction = "None"
-> />
-> <File
-664a670,674
-> <File
-> RelPath = "Xsd\wixloc.xsx"
-> DependentUpon = "wixloc.xsd"
-> BuildAction = "None"
-> />
+Download the Wix 2.0.5325.0 installer from
+
+ http://prdownloads.sourceforge.net/wix/sources-2.0.5325.0.zip
STEP J. Build Wix MSI install package