(no commit message)
[devwiki.git] / design / librarymacinstallerplan.mdwn
index d15b94d..491ab3b 100644 (file)
@@ -1,40 +1,57 @@
 ##Plan Mac Installer for GSS EAP and SASL GS2 libraries
 ###Introduction:
-This document describes Codethink's plan for producing an installer for the Moonshot GSS EAP and SASL GS2 libraries for Mac OS X 10.6 (“Snow Leopard”) and 10.7 (“Lion”). 
-It describes the goals, activities, deliverables and milestones for the development.
-It also gives some background on the intended locations of the files to be installed, system configuration modifications and any other pertinent information. It explains how the installer conforms to Apple’s relevant guidelines to developers.
+This document describes Codethink's plan for producing an installer for the Moonshot GSS EAP and SASL GS2 libraries for Mac OS X 10.6 (“Snow Leopard”) and 10.7 (“Lion”). The installer will include the libraries and all dependencies, and will perform any configuration necessary to allow the libraries to be used.
+
+The Moonshot GSS EAP library implements the EAP mechanism for use by the GSS API. The GSS API is implemented by the Kerberos implementation which ships with Mac OS (but see Issues below).
+
+The SASL GS2 Library implements the GS2 GSS-API->SASL bridge mechanism for use by the SASL2 library.
+
+The document describes the goals, activities, deliverables and milestones for the development. It also gives some background on the intended locations of the files to be installed, system configuration modifications and any other pertinent information.
 ###Goals
-The primary goal is to allow users to install these initiator libraries on a computer running Mac OS X without needing to build them from source. 
+The primary goal is to allow users to install, in a single operation, everything they need to start using Moonshot. This includes:
 
-Secondary goals are
+* the Moonshot GSS EAP library;
+* the SASL GS2 Library;
+* the (re-architected) Identity Selector software (currently referred to a moonshout-ui).
+
+The installer for the Identity Selector software will be delivered as part of the implementation of the architectural changes to the software (due 31st December), so the current task will deliver only the first two.
 
-1. To allow users who are familiar with the autotools tool chain to install, as well as build, the libraries using autotools on a computer running Mac OS X. (This is currently possible for the Cyrus SASL library, but not for the Moonshot GSS EAP library).
+We will deliver this goal incrementally, by developing sub-packages for cyrus_SASL, Moonshot EAP library and Identity selector, and combining them into a meta-package.
 
-2. To automate (as far as possible) and document the process, allowing Moonshot project developers to easily produce installer packages for future versions of these libraries.
+allow users to install the libraries on a computer running Mac OS X without needing to build them from source. Once installed, the libraries can be used to provide authentication services to programs which use them. 
+
+Secondary goals are
+
+1. To allow developers and users who are familiar with the Mac OS build tools chain to install, as well as build, the libraries using these tools on a computer running Mac OS X. (This is currently possible for the Cyrus SASL library and plugins, but not for the Moonshot GSS EAP library).
+2. To automate (as far as possible) and document the process of making the installer, allowing Moonshot project developers to easily produce installer packages for future versions of these libraries.
 
 ###Deliverables:
 1. Changes to files if required to allow the Moonshot GSS EAP library to be installed, as well as built, under Mac OS using autotools.
 2. An installer package (or packages) that, when run, will install the necessary files to the required places in the files system. (See Outstanding questions/issues 1).
 3. A compressed disk image file containing the installer package(s), which can be mounted to run the installer package. (See Outstanding questions/issues 2)
-4. Instructions and scripts for creating the installers and disk images from source. PackageMaker, (the tool provided by Apple to build installer packages - see Ref. 2) does not have a command line interface, and there do not appear to be any freely available alternatives which do, so it will probably not be possibly to automate the production of the installer package(s). 
+4. Instructions and scripts for creating the installers and disk images from source. The scripts will use the [*packagemaker* tool](https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/packagemaker.1.html) to build the installer packages and the [*hdiutil* tool](https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/hdiutil.1.html#//apple_ref/doc/man/1/hdiutil) to create and to manipulate disk images.
 
 ###Activities and Milestones
-1. Build and install the Cyrus SASL Library for Mac OS using autotools to prove this currently works and that it is a valid goal for the Moonshot GSS EAP library. Due Wednesday 16th November.
+1. Build and install the Cyrus SASL GS2 Library for Mac OS using autotools to prove this currently works and that it is a valid goal for the Moonshot GSS EAP library. Due Wednesday 16th November.
 2. Create an installer package and compressed disk image for the Cyrus SASL Library, with notes on how to achieve the process. Due Friday 18th November.
 3. Make the necessary changes to the Moonshot GSS EAP library source and configuration files to build and install it for Mac OS using autotools. Due Friday 25th November.
 4. Create an installer package and compressed disk image for the Moonshot GSS EAP library. Due Tuesday 29th November.
 5. Create the scripts and instructions. Due Wednesday 30th November.
 
 ###Issues and questions
-####To be resolved ASAP
-Q: Luke> What's the actual framework binary (that is, /Library/Frameworks/Moonshot.framework/Moonshot) going to link to -- libmoonshot-ui? That would make the most sense as mech_eap and the GS2 SASL plugin aren't directly linked against by applications. By convention, you'll need to have something there (otherwise it's not really a framework).           
-> A: Pete> I was planning to link /Moonshot.framework/Moonshot to the mech_eap dynamic library. libmoonshot-ui (or whatever replaces it in the refactored Identity Selector software) will be created and installed when we port the Identity Selector to Mac OS, which is a separate task.  As I understand it, mech_eap *is* the Moonshot GSS EAP library. If it isn't directly linked against by applications, do we just install it in /usr/local/lib and forget about creating a framework.  I still need to get to the bottom of this issue, before I start making the installer for it.
-
-Q: Pete> New issue - do we need to do the versioning as suggested in the plan, or can we just overwrite the existing installation?
 ####To be resolved during implementation
+Q: Pete> Which files in which directories?
+> A: Pete (21-Nov-2011)> SASL GS2 library - all files in /Library/Frameworks/SASL2.framework: GSS EAP library - in gss subfolder of Kerberos Installation: Kerberos - tbd.
+
+####Resolved Issues (I think)
+Q: Pete> One package each for "Snow Leopard" and "Lion", or a single package that works for both? One disk image each for "Snow Leopard" and "Lion", or a single disk image containing both packages?
+> A: Pete (21-Nov-2011)> A single metapackage, containing sub-packages for each component. (SASL GS2, GSS EAP, Identity Selector, Kerberos)
+
 Q: Sam> One of the big questions will be to what extent will you use system dependencies and to what extent will you package your own. You'll want to look over the build instructions Josh pointed you at. If you're packaging the acceptor, then all of the dependencies on the preparation page as well as everything built by the builder script apply.If you're packaging an initiator, you need Kerberos and not much else.
 > A: Pete> My inclination for the Mac installer is as far as possible to use what ships with the OS - in this case Heimdal for Lion - but to include anything else in our installer - even if it *may* already be installed to support another program.
 
+> update 21-Nov-11 Pete> We will need to package a more recent Kerberos, both for Snow Leopard and Lion. We will build the latest stable release (1.9.2) from [MIT](from http://web.mit.edu/kerberos/dist/index.html). Moved the issue to 'Resolved' 
+
 Q: Sam> One of the big questions will be whether you can use the system Kerberos.  My assumption is that you cannot for 10.6.  You may be able
 to do so for 10.7. This will be one of the big open questions we're expecting the plan to answer.
 > A: Pete> Googling for 'mac os X Lion Heimdal' gives a worrying number of forum posts about problems. I'm concerned that we could end up spending time debugging 'Lion's Heimdal' which is not what you are paying us for! My inclination for the Mac installer is as far as possible to use what ships with the OS - in this case Heimdal for Lion - but to include anything else in our installer - even if it *may* already be installed to support another program. So for Lion, we should start by using Heimdal, but if we hit problems then, rather than spending a long time tracking down the problem, our first step would be to try whatever we used for Snow Leopard.
@@ -43,20 +60,21 @@ to do so for 10.7. This will be one of the big open questions we're expecting th
 
 > Pete> Further information in the mailing list at https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1111&L=MOONSHOT-COMMUNITY&D=0&X=09511F3D9F0F762A88&Y=pete.fotheringham%40codethink.co.uk&P=12159 and https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=ind1111&L=MOONSHOT-COMMUNITY&D=0&X=09511F3D9F0F762A88&Y=pete.fotheringham%40codethink.co.uk&P=13011
 
-Q: Pete> One package each for "Snow Leopard" and "Lion", or a single package that works for both? One disk image each for "Snow Leopard" and "Lion", or a single disk image containing both packages?
+> update 21-Nov-11 Pete>See above Moved the issue to 'Resolved' 
 
-Q: Pete> Which files in which directories?
+Q: Luke> What's the actual framework binary (that is, /Library/Frameworks/Moonshot.framework/Moonshot) going to link to -- libmoonshot-ui? That would make the most sense as mech_eap and the GS2 SASL plugin aren't directly linked against by applications. By convention, you'll need to have something there (otherwise it's not really a framework).           
+> A: Pete> I was wrong - Moonshot GSS EAP is not a framework, and we won't create /Library/Frameworks/Moonshot.framework. Instead the libary will be installed in the /gss subfolder of the Ketberos Installation 
+
+Q: Pete> New issue - do we need to do the versioning as suggested in the plan, or can we just overwrite the existing installation?
+>A: Pete> The library isn';t a framework and is not linked to directly by apps, so we don't need versioning.
 
-Resolved Issues (I think)
-==========
 Q: Sam> What prevents moonshot gss eap from being built using autotools today? It's my understanding that Luke does this regularly.
 
 Q: Luke> As Sam said, I'm not exactly sure what you meant about building with autotools. Were you talking about building with the autotools that ship with OS X? (That may not be possible.) Or a script that invokes autoconf with the appropriate arguments to install in the Mac filesystem hierarchy? Because I do all my development on OS X and I haven't had any problems with autotools and Moonshot (no more than one might usually have).
 > A: Pete> No problems that I know with *building* but I didn't think it could be *installed* in Mac OS using 'configure && make install' as can be done with the Cyrus SASL. I think that would be a useful secondary goal for this piece of work. 
 
 Q: Pete> Which libraries?
-A: 
-> Josh> the SASL library is self-contained within cyrus-sasl.
+>A: Josh> the SASL library is self-contained within cyrus-sasl.
     
 > Sam> I think our changes have all been folded upstream at this point.
     
@@ -80,10 +98,11 @@ Q: Luke> Are you planning to install Cyrus SASL as a separate framework?
 ####Installer functionality:
 There are two parts to the installation:
 
-1. The installer will install library and header files in /usr/local/lib and /usr/local/include, as for the Linux 'make install'. 
-2: Frameworks: in addition, the installer will install frameworks in sub-directories of /Library/Frameworks on the main drive of the machine. The Cyrus SASL framework will be installed in /Library/Frameworks/SASL2.framework (as in the existing Cyrus SASL 'make install'). The Moonshot GSS EAP framework will be installed in /Library/Frameworks/MoonshotGSS_EAP.framework. The installer will create the .framework directories if they are not already present. The frameworks are wrappers for symlinks to the respective dynamic libraries in /usr/local/lib (libsasl2.dylib and mech_eap.dylib).
+1: The installer will install library and header files in /usr/local/lib and /usr/local/include, as for the Linux 'make install'. 
+
+2: SASL2 Framework: in addition, the installer will install Cyrus SASL framework will be installed in /Library/Frameworks/SASL2.framework (as in the existing Cyrus SASL 'make install' and as recommended by Apple's guidelines to developers). The framework is a wrapper for a symlink to the dynamic library in /usr/local/lib/libsasl2.dylib and mech_eap.dylib.
 
-If an installation with a lower version number is present, the new installation will be installed, and the /Versions/Current alias changed to refer to the new installation.
+If an installation of the SASL library with a lower version number is present, the new installation will be installed.
 
 If an installation with a higher version number is present, the new installation will terminate with a message explaining why.
 
@@ -95,36 +114,6 @@ The exact text to be used in messages displayed to the user will be specified as
 
 The appearance of the installer will not be customized to use special icons and window backgrounds.
 
-Apple's Developer documentation (Ref. 1) states
-> public frameworks should be installed at the local level in /Library/Frameworks.
-Frameworks installed here are available to all users of the machine.
-
-####Structure of the Moonshot.framework directory tree.
-The Moonshot.framework directory will have the following sub-directory structure, allowing future versions to be installed without breaking applications that rely on an earlier version:
-
-    /Headers -> (alias to Versions/Current/include)
-    /Home -> (alias to Versions/Current)
-    /Libraries -> (alias to Versions/Current/lib)
-    /Versions
-      /1.0.1
-      /1.0.2
-      ...
-      /3.1.2
-      /Current --> (alias to most recently installed version e.g /Versions/3.1.2)
-Each numbered version sub-directory will have the necessary directories from the file system hierarchy e.g.
-
-    /etc
-    /include
-    /man
-    /etc
-    /lib
-    /sbin
-    /share
-      /doc
-      /xml
-    /var
-      /log
-
 ###Package and Component Properties
 The Package properties will be 
 
@@ -133,7 +122,7 @@ The Package properties will be
 
 For each component in the package, properties will be
 
-    Destination (To): The appropriate subdirectory of the /Library/Frameworks/Moonshot directory tree
+    Destination (To): The appropriate directory 
     Custom destination consent (Allow custom location): False.
     Package identifier: net.ja.moonshot.xxxx (where xxx identifies the individual library)
     Package version number: 1 for first release, incremented in future releases
@@ -151,36 +140,61 @@ This library consists of the following files installed in the following location
 To be completed (See Outstanding questions/issues 3)
 <table border="1">
 <tr>
-<td>/bin</td> <td>list of files in /bin</td>
+<td>File</td> <td>location</td> <td>notes</td>
 </tr>
 <tr>
-<td>/include</td> <td>list of files in /include</td>
+<td>mech_eap.dylib</td> <td>/usr/local/lib/gss</td> <td>The dynamic library</td>
 </tr>
 <tr>
-<td>/lib</td><td>list of files in /lib</td>
+<td>gssapi_eap.h</td><td>/usr/local/include/gssapi</td> <td>header file for the EAP GSS mechanism</td>
 </tr>
 </table>
-#####Cyrus SASL Library
-This library consists of the following files installed in the following locations:
+The following configuration files will be modified:
+<table border="1">
+<tr>
+<td>File</td> <td>change</td> <td>notes</td>
+</tr>
+<tr>
+<td></td> <td></td> <td> </td>
+</tr>
+</table>
+
+
+#####Cyrus SASL Library and GS2 plugin
+The following files will be installed in the following locations:
 To be completed (See Outstanding questions/issues 3)
 
+Plugins go in /usr/lib/sasl (which should be a symlink to /usr/local/lib/sasl).
+
 <table border="1">
 <tr>
-<td>/bin</td> <td>list of files in /bin</td>
+<td>File</td> <td>location</td> <td>notes</td>
 </tr>
 <tr>
-<td>/include</td> <td>list of files in /include</td>
+<td>sasl2.dylib</td> <td>/usr/local/lib/</td> <td> </td>
 </tr>
 <tr>
-<td>/lib</td><td>list of files in /lib</td>
+<td>Sasl2</td> <td>/Library/Frameworks/SASL2.framework</td> <td>The framework binary - symlink to /usr/local/lib/libsasl2.dylib</td>
+</tr>
+<tr>
+<td>??</td> <td></td> <td> </td>
+</tr>
+</table>
+
+The following configuration files will be modified:
+<table border="1">
+<tr>
+<td>File</td> <td>change</td> <td>notes</td>
+</tr>
+<tr>
+<td></td> <td></td> <td> </td>
 </tr>
 </table>
 
 #####Dependencies
 The installer will not include any dependencies which are present by default in the installed version Mac OS X.
 
-For any dependencies which are not present by default in the installed version Mac OS X, the installer will install the needed versions in the /Library/Frameworks/Moonshot directory tree. It will not attempt to locate or use existing installations of these dependencies. This means that if such existing implementations are uninstalled in the future, the Moonshot libraries will not be broken. This decision has a cost in terms of disk space, but is justified because it a: decreases the complexity of the installation and b: protects the installation from potential failure.
-
+For any dependencies which are not present by default in the installed version Mac OS X, the installer will install the needed versions. 
 ###References:
 1. [Mac OS X Developer Library, Framework Programming Guide, Installing Your Framework](https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/InstallingFrameworks.html#//apple_ref/doc/uid/20002261-BBCCFBJA)
 2. [Mac OS X Developer Library, PackageMaker User Guide](https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/PackageMakerUserGuide/)