How should I structure software distribution packages?
The files and folders in a Software Distribution (SWD) package are extracted into a temporary relative root directory, which becomes the current working directory from which the installation will run.
Resolving the problem
For example, let's look at sending a backup software client, currently in Z:\SWREPO\Symantec\BackupExec\64bitWin.
- >BIN (contains a bunch of MFC support DLL and XML files)
- >UPDATES (contains some .MSP patches for slipstreamed patching)
- 11 .MST files (1028, 1031, 1033, 1034, 1036, 1040, 1041, 1042, 1046, 1049, 2052)
- 1 .CAB file
- 2 .DLL files (becombinder, ifresdll)
- 3 .CMD files (setupaax64, setupaofox64, uninstallaaofox64)
- 3 data files (LookupTable.txt, PatchRawsTemplate.lst, RantPush64.lst)
- Symantec Backup Exec Remote Agent for Windows Systems.MSI
When this package is created, the contents of the 64bitWin folder are compressed and copied into the TEM server, then distributed to the receiving clients. This directory structure will be extracted and recreated on the client in a temporary directory, which is the new relative root.
Fixlets generated by the Software Distribution dashboard must initiate installation by executing a file in this relative root directory. In other words, you cannot build your package at the BackupExec level and then execute 64bitWin\Setup.exe. You will receive an error message if you try to build a Fixlet that does not contain any files in the relative root.
The relative root concept can be leveraged when adding files to a package. For example, say that Symantec publishes a new fix to this client, which we will call ANewHope.MSP. You can easily slipstream this into your software package definition by using the Software Distribution Dashboard. Simply go to your Symantec BackupExec 64BitWin package definition and add a file to it; navigate to the .MSP, select Relative Path, and enter Updates. Edit any Fixlets in the package and make sure they include the new file, then stop any open actions based on these Fixlets and start new actions.
You can also use this ability to select specific files for a Fixlet to tune the package installation for size. For example, we might need to distribute the client to a Russian speaker; we can create a new Fixlet, deselect all of the MST files with the exception of 1049.MST, then apply 1049.MST to the command line. We might even add a Relevance clause of system language contains "Russian" to ensure that this Fixlet is not misapplied.
Compression of files is optional in Software Distribution; deciding whether to compress or not means balancing network and storage versus CPU. Packages may be completely compressed, completely uncompressed, or partially compressed by folder depth.
- Complete compression is done by selecting a folder setting the "Compress folders at depth" option to 0. This produces a single file bundle, which will reduce the amount of storage required; client machines will have to decompress the file, which may impact performance on slower clients. Additionally, this method will rarely benefit from TEM's internal file de-duplication processes.
- A complete lack of compression can be selected by unchecking the "Compress folders at depth" option. This uploads and downloads each file separately, which will increase the amount of network bandwidth required. Counter intuitively, this method can reduce the amount of TEM server storage required; many software installation packages contain common support files and libraries that are identical across many packages, which TEM automatically de-duplicates internally. This method also makes it easy to select and deselect individual files for distribution to different roles, as done in the MST file example above. A large number of smaller, uncompressed files will negatively impact distribution performance, so the Fixlet creation wizard will warn if a package contains more than 50 files.
- Partial compression by folder depth balances these concerns by automatically compressing by folder depth. In the Symantec Backup Exec Remote Agent for Windows Systems example, the "Compress folders at depth" option can be set to 1, which will compress the contents of BIN and UPDATES into a single archive file while leaving all other files as individual files.