etc/docs: developer installation scripts
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 9 Nov 2009 20:09:35 +0000 (20:09 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 9 Nov 2009 20:09:35 +0000 (20:09 +0000)
The following patch series implements a series of scripts that can be used
by developers to build and install the winof drivers across an HPC cluster.

The scripts are intended to allow quick building and replacement of specific
drivers and libraries.  The process can be automated more by layering additional
scripts over those provided.

This patch documents the anticipated build and installation process.  Follow
on patches in the series implement the various scripts.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2549 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

docs/install.txt [new file with mode: 0644]
etc/addcert.bat [new file with mode: 0644]
etc/depwo.bat [new file with mode: 0644]
etc/nomerge.txt [new file with mode: 0644]
etc/pkgwo.bat [new file with mode: 0644]
etc/pkgwoall.bat [new file with mode: 0644]
etc/signall.bat [new file with mode: 0644]
etc/signwo.bat [new file with mode: 0644]

diff --git a/docs/install.txt b/docs/install.txt
new file mode 100644 (file)
index 0000000..ee26c0b
--- /dev/null
@@ -0,0 +1,111 @@
+This document describes installation steps for developers and is\r
+not end users.  The process described here is for developers running\r
+on a homogeneous Windows HPC cluster.\r
+\r
+Installation is divided into several phases in order to allow for\r
+quick replacement of specific drivers and/or libraries.  Before\r
+starting, the developer should note the following:\r
+\r
+- OS version running on the cluster (2003, 2008)\r
+- Processor architecture of the cluster (x86, x64, ia64)\r
+- Whether they want to install checked or free versions of\r
+  drivers and libraries.\r
+\r
+\r
+1. Build the sources.\r
+\r
+Refer to docs\built.txt and bldwo.bat for details on building the\r
+source code.  As an example, this will build the sources to install\r
+on a 2008 HPC cluster running on 64-bit processors.\r
+\r
+       bldwo chk x32 2008\r
+       bldwo fre x32 2008\r
+       bldwo chk x64 2008\r
+       bldwo fre x64 2008\r
+\r
+You must build both the checked and free versions of the source to\r
+use this installation process, and include 32-bit binaries when\r
+installing on a 64-bit system.  This is because the inf files\r
+reference 32-bit checked and free and 64-bit checked and free\r
+versions of the libraries in the install process.\r
+The correct version (checked or free) of the drivers and executables\r
+will be installed.\r
+\r
+Note: during development, you only need to rebuild the actual\r
+version undergoing testing, as long as the other files are\r
+available.  You may also build from a specific directory in\r
+the source tree to only rebuild those files undergoing active\r
+development.\r
+\r
+\r
+2. Create packages.\r
+\r
+Use etc\pkgwo.bat to sort the compiled source code into their\r
+respective packages.  The separation of the source code into\r
+packages allows quick rebuilding and replacement of selected\r
+modules.  For example, the following creates packages for a\r
+2008 HPC cluster.\r
+\r
+       pkgwo fre x64 2008 all\r
+\r
+This creates packages for all the various drivers under\r
+install\2008\x64\fre (ibbus, ipoib, mlx4_bus, winverbs, etc.)\r
+\r
+\r
+3. Deploy the packages to the head node.\r
+\r
+Use etc\depwo.bat to copy the packaged files to the HPC cluster\r
+head node for installation across the cluster.  The files are\r
+copied into \winof\install on the head node.  For example, the\r
+following deploys the packages to a head node named 'hpc-head'.\r
+\r
+       depwo fre x64 2008 hpc-head\r
+\r
+\r
+4. Add a test certificate.\r
+\r
+NOTE: This step only needs to be done once.\r
+\r
+As part of the package deployment, batch files were copied to the\r
+head node.  Run \winof\install\addcert.bat on the head node to create\r
+a test certificate (WinOFCert.cer) that can be used to test sign the\r
+drivers.\r
+\r
+       cd \winof\install\r
+       addcert\r
+\r
+To support test signed drivers, you may need to execute the following\r
+command across the cluster.\r
+\r
+       clusrun bcdedit -set testsigning on\r
+       clusrun shutdown /r\r
+\r
+\r
+5. Sign the drivers.\r
+\r
+Run \winof\install\signall to create driver catalog files and sign\r
+all drivers, libraries, and executables that were deployed to the\r
+head node.\r
+\r
+       cd \winof\install\r
+       signall\r
+\r
+You can limit signing to a specific package by changing into that\r
+package's directory and running signwo.bat.\r
+\r
+\r
+6. Install the packages.\r
+\r
+You can install the packages by running dpinst in each package.  Packages\r
+should be installed in the following order, depending on your HCA type:\r
+\r
+       mlx4_bus -> mlx4_hca -> ipoib\r
+       mthca -> ipoib\r
+\r
+Note: The HCA drivers automatically install the ibbus, winverbs, and\r
+winmad packages.  Separate installations of those packages are not\r
+necessary.  The following provides an installation example:\r
+\r
+       clusrun \\hpc-head\c$\winof\install\mlx4_bus\dpinst -f -q -c\r
+       clusrun \\hpc-head\c$\winof\install\mlx4_hca\dpinst -f -q -c\r
+       clusrun \\hpc-head\c$\winof\install\ipoib\dpinst -f -q -c\r
diff --git a/etc/addcert.bat b/etc/addcert.bat
new file mode 100644 (file)
index 0000000..4431a24
--- /dev/null
@@ -0,0 +1,3 @@
+makecert -$ individual -r -pe -ss WinOFCertStore -n CN=WinOFCert WinOFCert.cer\r
+clusrun certutil -addstore TrustedPublisher %LOGONSERVER%\c$\winof\install\WinOFCert.cer\r
+clusrun certutil -addstore Root %LOGONSERVER%\c$\winof\install\WinOFCert.cer
\ No newline at end of file
diff --git a/etc/depwo.bat b/etc/depwo.bat
new file mode 100644 (file)
index 0000000..c496e02
--- /dev/null
@@ -0,0 +1,115 @@
+@echo off\r
+setlocal\r
+\r
+if "%WDK_PATH%"=="" goto use\r
+if "%OPENIB_REV%"=="" goto use\r
+if "%PLATFORM_SDK_PATH%"=="" goto use\r
+\r
+if "%1"=="chk" (\r
+       set wo_bld=chk\r
+       goto set_arch\r
+)\r
+if "%1"=="fre" (\r
+       set wo_bld=fre\r
+       goto set_arch\r
+)\r
+goto use\r
+\r
+:set_arch\r
+if "%2"=="x86" (\r
+       set wo_arch=x86\r
+       set wo_arch_dir=i386\r
+       goto set_os\r
+)\r
+if "%2"=="x64" (\r
+       set wo_arch=amd64\r
+       set wo_arch_dir=amd64\r
+       goto set_os\r
+)\r
+if "%2"=="ia64" (\r
+       set wo_arch=ia64\r
+       set wo_arch_dir=ia64\r
+       goto set_os\r
+)\r
+goto use\r
+\r
+:set_os\r
+if "%3"=="win7" (\r
+       set wo_os=win7\r
+       goto deploy\r
+)\r
+if "%3"=="2003" (\r
+       set wo_os=wnet\r
+       goto deploy\r
+)\r
+if "%3"=="2008" (\r
+       set wo_os=WLH\r
+       goto deploy\r
+)\r
+if "%3"=="xp" (\r
+       if not "%2"=="x86" goto use\r
+       set wo_os=WXP\r
+       set wo_arch=\r
+       goto deploy\r
+)\r
+goto use\r
+\r
+:deploy\r
+if "%4"=="" goto use\r
+\r
+@echo on\r
+pushd %WINOF_PATH%\r
+if not exist \\%4\c$\winof         mkdir \\%4\c$\winof\r
+if not exist \\%4\c$\winof\install mkdir \\%4\c$\winof\install\r
+\r
+xcopy /S /D /Y install\%3\%2\%1 \\%4\c$\winof\install\r
+\r
+rem -- HCA drivers automatically install other packages\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\ibbus\*.* \\%4\c$\winof\install\mlx4_hca\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\winmad\*.* \\%4\c$\winof\install\mlx4_hca\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\winverbs\*.* \\%4\c$\winof\install\mlx4_hca\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\ibbus\*.* \\%4\c$\winof\install\mthca\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\winmad\*.* \\%4\c$\winof\install\mthca\r
+xcopy /S /D /Y /EXCLUDE:etc\nomerge.txt install\%3\%2\%1\winverbs\*.* \\%4\c$\winof\install\mthca\r
+\r
+rem -- Copy files to support test signing\r
+xcopy /S /D /Y %WDK_PATH%\tools\devcon\%wo_arch_dir%\devcon.exe \\%4\c$\winof\install\r
+xcopy /S /D /Y etc\addcert.bat \\%4\c$\winof\install\r
+xcopy /S /D /Y etc\sign*.bat \\%4\c$\winof\install\r
+xcopy /D /Y %WDK_PATH%\bin\selfsign\* \\%4\c$\winof\install\r
+\r
+@echo off\r
+popd\r
+goto end\r
+\r
+:use\r
+echo -\r
+echo depwo - deploy winof installation files to cluster head node\r
+echo depwo {chk : fre} {x86 : x64 : ia64} {xp : 2003 : 2008 : win7} headnode\r
+echo -\r
+echo You should run bldwo and pkgwo before running this batch file.\r
+echo You must customize for your system by setting the following environment\r
+echo variables:\r
+echo -\r
+echo WDK_PATH          (example set WDK_PATH=c:\winddk\6001.18001)\r
+echo WINOF_PATH        (example set WINOF_PATH=c:\ofw\trunk)\r
+echo OPENIB_REV        (example set OPENIB_REV=0)\r
+echo PLATFORM_SDK_PATH (example set PLATFORM_SDK_PATH=c:\progra~1\mi2578~1)\r
+echo -\r
+echo Use:\r
+echo depwo {chk : fre} {x86 : x64 : ia64} {xp : 2003 : 2008 : win7} headnode\r
+echo xp only supports x86 build\r
+echo -\r
+echo You must have privileges to copy into \\headnode\c$\winof\install\r
+echo -\r
+echo Examples:\r
+echo depwo chk x64 2008 win08-0 - copies 2008 checked x64 files to win08-0\r
+echo depwo fre x64 win7 win7-0  - copies windows 7 free x64 files to win7-0\r
+echo -\r
+echo Files are copied under c:\winof\install on the target system\r
+echo See docs\build.txt for additional information on building the tree.\r
+echo Also see pkgwo and bldwo batch scripts.\r
+\r
+:end\r
+endlocal\r
+@echo on\r
diff --git a/etc/nomerge.txt b/etc/nomerge.txt
new file mode 100644 (file)
index 0000000..d3540e6
--- /dev/null
@@ -0,0 +1 @@
+.inf
\ No newline at end of file
diff --git a/etc/pkgwo.bat b/etc/pkgwo.bat
new file mode 100644 (file)
index 0000000..4bd374a
--- /dev/null
@@ -0,0 +1,205 @@
+@echo off\r
+setlocal\r
+setlocal enabledelayedexpansion\r
+\r
+if "%WDK_PATH%"=="" goto use\r
+if "%OPENIB_REV%"=="" goto use\r
+if "%PLATFORM_SDK_PATH%"=="" goto use\r
+\r
+if "%1"=="chk" (\r
+       set wo_bld=chk\r
+       goto set_arch\r
+)\r
+if "%1"=="fre" (\r
+       set wo_bld=fre\r
+       goto set_arch\r
+)\r
+goto use\r
+\r
+:set_arch\r
+if "%2"=="x86" (\r
+       set wo_arch=x86\r
+       set wo_arch_dir=i386\r
+       goto set_os\r
+)\r
+if "%2"=="x64" (\r
+       set wo_arch=amd64\r
+       set wo_arch_dir=amd64\r
+       goto set_os\r
+)\r
+if "%2"=="ia64" (\r
+       set wo_arch=ia64\r
+       set wo_arch_dir=ia64\r
+       goto set_os\r
+)\r
+goto use\r
+\r
+:set_os\r
+if "%3"=="win7" (\r
+       set wo_os=win7\r
+       goto set_files\r
+)\r
+if "%3"=="2003" (\r
+       set wo_os=wnet\r
+       goto set_files\r
+)\r
+if "%3"=="2008" (\r
+       set wo_os=WLH\r
+       goto set_files\r
+)\r
+if "%3"=="xp" (\r
+       if not "%2"=="x86" goto use\r
+       set wo_os=WXP\r
+       set wo_arch=\r
+       goto set_files\r
+)\r
+goto use\r
+\r
+:set_files\r
+if "%4"=="all" (\r
+       for %%i in (dapl, ibacm, ibbus, ipoib, mlx4_bus, mlx4_hca, mthca, winmad, winverbs) do (\r
+               call %~dp0\pkgwo %1 %2 %3 %%i\r
+       )\r
+       popd\r
+       goto end\r
+)\r
+if "%4"=="dapl" (\r
+       set files=dapl dat dtest\r
+       goto package\r
+)\r
+if "%4"=="ibacm" (\r
+       set files=ib_acm libibacm\r
+       goto package\r
+)\r
+if "%4"=="ibbus" (\r
+       set files=ib_bus ibbus ibal alts cmtest complib ib_read ib_send ib_write ib_limit\r
+       goto package\r
+)\r
+if "%4"=="ipoib" (\r
+       set files=ipoib nd ibwsd netipoib wvnd ibat ibnd\r
+       goto package\r
+)\r
+if "%4"=="mlx4_bus" (\r
+       set files=mlx4_bus mlx4_core\r
+       goto package\r
+)\r
+if "%4"=="mlx4_hca" (\r
+       set files=mlx4_hca mlx4u mlx4_ib mlx4_net\r
+       goto package\r
+)\r
+if "%4"=="mthca" (\r
+       set files=mthca\r
+       goto package\r
+)\r
+if "%4"=="winmad" (\r
+       rem -- Includes IB-mgmt libraries\r
+       set files=winmad wm ^\r
+                 libibumad libibmad libibnet ibaddr iblinkinfo ibping ^\r
+                 ibportstate ibqueryerror ibroute ibsendtrap ibstat ^\r
+                 ibsysstat ibtracert mcm_rereg perfquery sminfo smp vendstat\r
+       goto package\r
+)\r
+if "%4"=="winverbs" (\r
+       rem -- Includes OFED verbs and RDMA CM compatability libraries\r
+       set files=winverb wv ^\r
+                 libibverbs ibv_async ibv_dev ibv_ librdmacm rdma_\r
+       goto package\r
+)\r
+goto use\r
+\r
+:package\r
+pushd %WINOF_PATH%\r
+if not exist install             mkdir install\r
+if not exist install\%3          mkdir install\%3\r
+if not exist install\%3\%2       mkdir install\%3\%2\r
+if not exist install\%3\%2\%1    mkdir install\%3\%2\%1\r
+if not exist install\%3\%2\%1\%4 mkdir install\%3\%2\%1\%4\r
+\r
+for %%i in (%files%) do (\r
+       xcopy /D /Y bin\kernel\obj%wo_bld%_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i* install\%3\%2\%1\%4\r
+       xcopy /D /Y bin\user\obj%wo_bld%_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*   install\%3\%2\%1\%4\r
+\r
+       rem -- Include both free and checked versions of libraries in the package.\r
+       rem -- The library names do not overlap.\r
+       if "%1"=="chk" (\r
+               xcopy /D /Y bin\user\objfre_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.dll install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objfre_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.pdb install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objfre_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.exp install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objfre_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.lib install\%3\%2\%1\%4\r
+       )\r
+       if "%1"=="fre" (\r
+               xcopy /D /Y bin\user\objchk_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.dll install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objchk_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.pdb install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objchk_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.exp install\%3\%2\%1\%4\r
+               xcopy /D /Y bin\user\objchk_%wo_os%_%wo_arch%\%wo_arch_dir%\%%i*.lib install\%3\%2\%1\%4\r
+       )\r
+       \r
+       rem -- Include 32-bit libaries with the 64-bit package.  Rename the 32-bit\r
+       rem -- libraries from lib.dll -> lib32.dll or libd.dll -> lib32d.dll.\r
+       rem -- complib, which changes to cl32\r
+       rem -- mthca, which drops the 'u'\r
+       if "%2"=="x64" (        \r
+               if not exist install\wow64\%3\%2\chk\%4 mkdir install\wow64\%3\%2\chk\%4\r
+               xcopy /D /Y bin\user\objchk_%wo_os%_x86\i386\%%i*.dll install\wow64\%3\%2\chk\%4\r
+               pushd install\wow64\%3\%2\chk\%4\r
+               for /f "usebackq" %%j in (`dir /b *d.dll`) do (\r
+                       set dll32_old=%%j\r
+                       set dll32_new=!dll32_old:~,-5!32d.dll\r
+                       if "!dll32_old!"=="complibd.dll" set dll32_new=cl32d.dll\r
+                       if "!dll32_old!"=="mthcaud.dll"  set dll32_new=mthca32d.dll\r
+                       echo F | xcopy /D /Y !dll32_old! %WINOF_PATH%\install\%3\%2\%1\%4\!dll32_new!\r
+               )\r
+               popd\r
+\r
+               if not exist install\wow64\%3\%2\fre\%4 mkdir install\wow64\%3\%2\fre\%4\r
+               xcopy /D /Y bin\user\objfre_%wo_os%_x86\i386\%%i*.dll install\wow64\%3\%2\fre\%4\r
+               pushd install\wow64\%3\%2\fre\%4\r
+               for /f "usebackq" %%j in (`dir /b *.dll`) do (\r
+                       set dll32_old=%%j\r
+                       set dll32_new=!dll32_old:~,-4!32.dll\r
+                       if "!dll32_old!"=="complib.dll" set dll32_new=cl32.dll\r
+                       if "!dll32_old!"=="mthcau.dll"  set dll32_new=mthca32.dll\r
+                       echo F | xcopy /D /Y !dll32_old! %WINOF_PATH%\install\%3\%2\%1\%4\!dll32_new!\r
+               )\r
+               popd\r
+       )\r
+       \r
+       xcopy /D /Y %WDK_PATH%\redist\wdf\%wo_arch_dir%\wdf* install\%3\%2\%1\%4\r
+       xcopy /D /Y %WDK_PATH%\redist\difx\dpinst\multilin\%wo_arch_dir%\dpinst* install\%3\%2\%1\%4\r
+)\r
+\r
+popd\r
+goto end\r
+\r
+:use\r
+echo -\r
+echo pkgwo - package winof\r
+echo -\r
+echo Separates a built WinOF tree into separate packages for installation.\r
+echo You should build both the free and checked versions of the specified\r
+echo package before running this batch file for the first time.\r
+echo You must customize for your system by setting the following environment\r
+echo variables:\r
+echo -\r
+echo WDK_PATH          (example set WDK_PATH=c:\winddk\6001.18001)\r
+echo WINOF_PATH        (example set WINOF_PATH=c:\ofw\trunk)\r
+echo OPENIB_REV        (example set OPENIB_REV=0)\r
+echo PLATFORM_SDK_PATH (example set PLATFORM_SDK_PATH=c:\progra~1\mi2578~1)\r
+echo -\r
+echo Use:\r
+echo pkgwo {chk : fre} {x86 : x64 : ia64} {xp : 2003 : 2008 : win7} {package}\r
+echo xp only supports x86 build\r
+echo -\r
+echo Valid package names are:\r
+echo ibacm, ibbus, ipoib, mlx4_bus, mlx4_hca, mthca, winmad, winverbs, all\r
+echo -\r
+echo Examples:\r
+echo pkgwo chk x86 2008 winverbs  - packages 2008 checked x86 files for winverbs\r
+echo pkgwo fre x64 win7 mlx4_bus  - packages windows 7 free x64 files for mlx4_bus\r
+echo -\r
+echo Packages are created under WINOF_PATH\install.\r
+echo See docs\build.txt for additional information on building the tree.\r
+\r
+:end\r
+endlocal\r
+@echo on\r
diff --git a/etc/pkgwoall.bat b/etc/pkgwoall.bat
new file mode 100644 (file)
index 0000000..615985b
--- /dev/null
@@ -0,0 +1,19 @@
+@echo off\r
+rem\r
+rem Packages the winof stack for all platforms.\r
+rem\r
+\r
+call %~dp0\pkgwo chk x86  2003 all\r
+call %~dp0\pkgwo fre x86  2003 all\r
+call %~dp0\pkgwo chk x64  2003 all\r
+call %~dp0\pkgwo fre x64  2003 all\r
+call %~dp0\pkgwo chk ia64 2003 all\r
+call %~dp0\pkgwo fre ia64 2003 all\r
+call %~dp0\pkgwo chk x86  2008 all\r
+call %~dp0\pkgwo fre x86  2008 all\r
+call %~dp0\pkgwo chk x64  2008 all\r
+call %~dp0\pkgwo fre x64  2008 all\r
+call %~dp0\pkgwo chk ia64 2008 all\r
+call %~dp0\pkgwo fre ia64 2008 all\r
+\r
+@echo on\r
diff --git a/etc/signall.bat b/etc/signall.bat
new file mode 100644 (file)
index 0000000..d510eda
--- /dev/null
@@ -0,0 +1,11 @@
+@echo off\r
+setlocal\r
+\r
+for /f "usebackq" %%i in (`dir /AD /b`) do (\r
+       inf2cat /driver:%%i /os:server2008_x64,server2008r2_x64\r
+       pushd %%i\r
+       call signwo\r
+       popd\r
+)\r
+\r
+@echo on
\ No newline at end of file
diff --git a/etc/signwo.bat b/etc/signwo.bat
new file mode 100644 (file)
index 0000000..0641731
--- /dev/null
@@ -0,0 +1,4 @@
+signtool.exe sign /v /s WinOFCertStore /n WinOFCert *.sys\r
+signtool.exe sign /v /s WinOFCertStore /n WinOFCert *.dll\r
+signtool.exe sign /v /s WinOFCertStore /n WinOFCert *.exe\r
+signtool.exe sign /v /s WinOFCertStore /n WinOFCert *.cat\r