NOTE:  Patches are not used anymore with Grouper 2.5+
For Grouper 2.5+ see the new approach for Grouper 2.5+ packaging and versioning strategy   


 This topic is discussed in the "Grouper Patcher" training video.

In Grouper v2.2.2 and above, the Grouper installer can apply patches to Grouper.  Patches are applied only to built Grouper envs (e.g. the binary API which might be the daemon and include PSPNG), the webapp for the WS/UI).

Patches are applied:

  1. When you install Grouper with the installer
  2. When you upgrade Grouper with the installer
  3. When you run the installer in patch mode
    1. (to do)Patches can be applied in patch mode "silently" which you can cron, though do not do this in Production for security and availability reasons. (future enhancement)

Any patch that requires any other patch is dependent on that patch.  Otherwise everything is compatible (e.g. you can skip patches).  If you go to a dot release in one component you need to do that for all components.  You can patch the UI to a certain level of API but not other components (e.g. WS).  Though generally you will want to keep all components at the same API patch level.

You can install patches, revoke patches, or just get a patch status.  Note, if you are patching the UI or WS for example, you do not need to patch the API for the UI/WS, you just need to run the patcher for the UI or WS.  It will apply and manage the API patches as well.

Patches for a release are listed on the release notes page for that release.  e.g. v2.2 release notes

Note, If reverting patches doesn’t work, and you skipped that part in an upgrade, then before new patches are applied, look through the WEB-INF/classes dir for classfiles, and if you have never overridden or coded your own, then delete all classfiles in the subdirs.  If you have, then keep yours, and delete the others.

Patch grouper

Run:

java -jar grouperInstaller.jar


Note, if you need a grouper.installer.properties file, run like this:

java -cp .:grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller


Output of a patch status:

Do you want to 'install' a new installation of grouper, 'upgrade' an existing installation
  or 'patch' an existing installation
  (enter: 'install', 'upgrade', 'patch' or blank for the default) [install]: patch
Enter in a Grouper temp directory to download tarballs (note: better if no spaces or special chars) [C:\app\grouperInstallerTarballDir]:
What do you want to patch?  api, ui, ws, or psp? [psp]: ui
Where is the grouper UI installed? [C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper]:
What do you want to do with patches (install, revert, status)? [install]: status

################ Checking patch grouper_v2_2_1_api_patch_0
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar
Patch grouper_v2_2_1_api_patch_0 is low risk, is not a security patch
Patch grouper_v2_2_1_api_patch_0 requires a restart
This patch fixes GRP-1095: hibernate exception handling masked original exception if roll


################ Checking patch grouper_v2_2_1_api_patch_1
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_1.tar.gz


################ Checking patch grouper_v2_2_1_ui_patch_0
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar
Patch grouper_v2_2_1_ui_patch_0 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_0 does not require a restart
This patch fixes GRP-1080: browse folders refresh button only works in chrome, not other browsers


################ Checking patch grouper_v2_2_1_ui_patch_1
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_1.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar
Patch grouper_v2_2_1_ui_patch_1 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_1 requires a restart
This patch fixes GRP-1082: grouper paging tag2 has one word not externalized


################ Checking patch grouper_v2_2_1_ui_patch_2
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_2.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar
Patch grouper_v2_2_1_ui_patch_2 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_2 requires a restart
This patch fixes GRP-1086: extra system out print in ui


################ Checking patch grouper_v2_2_1_ui_patch_3
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_3.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar
Patch grouper_v2_2_1_ui_patch_3 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_3 requires a restart
This patch fixes GRP-1083: cannot set enabled/disabled dates in ui


################ Checking patch grouper_v2_2_1_ui_patch_4
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_4.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar
Patch grouper_v2_2_1_ui_patch_4 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_4 does not require a restart
This patch fixes GRP-1087: edit membership page shows large H as icon in title


################ Checking patch grouper_v2_2_1_ui_patch_5
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_5.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar
Patch grouper_v2_2_1_ui_patch_5 is low risk, is not a security patch
Patch grouper_v2_2_1_ui_patch_5 does not require a restart
This patch fixes GRP-1088: attribute def left menu link throws error


################ Checking patch grouper_v2_2_1_ui_patch_6
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_6.tar.gz

Output when patching the UI:

Do you want to 'install' a new installation of grouper, 'upgrade' an existing installation
  or 'patch' an existing installation
  (enter: 'install', 'upgrade', 'patch' or blank for the default) [install]: patch
Enter in a Grouper temp directory to download tarballs (note: better if no spaces or special chars) [C:\app\grouperInstallerTarballDir]: 
What do you want to patch?  api, ui, ws, or psp? [psp]: ui
Where is the grouper UI installed? [C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper]: 
What do you want to do with patches (install, revert, status)? [install]: 

################ Checking patch grouper_v2_2_1_api_patch_0
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar
Patch grouper_v2_2_1_api_patch_0 is low risk, is not a security patch
This patch fixes GRP-1095: hibernate exception handling masked original exception if roll
Would you like to install patch grouper_v2_2_1_api_patch_0 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_api_patch_0.date = 2014/12/18 09:32:08
This patch requires all processes that user Grouper to be stopped.
  Please stop these processes if they are running and press <enter> to continue...

Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\hibernate\HibernateSession.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\hibernate\HibernateSession.java
Patch successfully applied: grouper_v2_2_1_api_patch_0
 - added to end of property file: grouper_v2_2_1_api_patch_0.state = applied


################ Checking patch grouper_v2_2_1_api_patch_1
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_1.tar.gz


################ Checking patch grouper_v2_2_1_ui_patch_0
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar
Patch grouper_v2_2_1_ui_patch_0 is low risk, is not a security patch
This patch fixes GRP-1080: browse folders refresh button only works in chrome, not other browsers
Would you like to install patch grouper_v2_2_1_ui_patch_0 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_0.date = 2014/12/18 09:32:45
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\index\index.jsp
Patch successfully applied: grouper_v2_2_1_ui_patch_0
 - added to end of property file: grouper_v2_2_1_ui_patch_0.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_1
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_1.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar
Patch grouper_v2_2_1_ui_patch_1 is low risk, is not a security patch
This patch fixes GRP-1082: grouper paging tag2 has one word not externalized
Would you like to install patch grouper_v2_2_1_ui_patch_1 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_1.date = 2014/12/18 09:32:52
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\ui\tags\GrouperPagingTag2.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\ui\tags\GrouperPagingTag2.java
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\grouperText\grouper.text.en.us.base.properties
Patch successfully applied: grouper_v2_2_1_ui_patch_1
 - added to end of property file: grouper_v2_2_1_ui_patch_1.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_2
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_2.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar
Patch grouper_v2_2_1_ui_patch_2 is low risk, is not a security patch
This patch fixes GRP-1086: extra system out print in ui
Would you like to install patch grouper_v2_2_1_ui_patch_2 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_2.date = 2014/12/18 09:32:56
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig$1.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig.java
Patch successfully applied: grouper_v2_2_1_ui_patch_2
 - added to end of property file: grouper_v2_2_1_ui_patch_2.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_3
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_3.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar
Patch grouper_v2_2_1_ui_patch_3 is low risk, is not a security patch
This patch fixes GRP-1083: cannot set enabled/disabled dates in ui
Would you like to install patch grouper_v2_2_1_ui_patch_3 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_3.date = 2014/12/18 09:33:00
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$1.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$10.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$11.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$12.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$13.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$14.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$15.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$16.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$17.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$18.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$19.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$2.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$20.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$21$1.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$21.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$22.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$3.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$4.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$5.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$6.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$7.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$8.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$9.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group.class
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group.java
Patch successfully applied: grouper_v2_2_1_ui_patch_3
 - added to end of property file: grouper_v2_2_1_ui_patch_3.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_4
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_4.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar
Patch grouper_v2_2_1_ui_patch_4 is low risk, is not a security patch
This patch fixes GRP-1087: edit membership page shows large H as icon in title
Would you like to install patch grouper_v2_2_1_ui_patch_4 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_4.date = 2014/12/18 09:33:08
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\editMembership.jsp
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceAttributeDefPrivileges.jsp
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceMembership.jsp
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\tracePrivileges.jsp
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceStemPrivileges.jsp
Patch successfully applied: grouper_v2_2_1_ui_patch_4
 - added to end of property file: grouper_v2_2_1_ui_patch_4.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_5
Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_5.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar
Patch grouper_v2_2_1_ui_patch_5 is low risk, is not a security patch
This patch fixes GRP-1088: attribute def left menu link throws error
Would you like to install patch grouper_v2_2_1_ui_patch_5 (t|f)? [t]: 

 - added to end of property file: grouper_v2_2_1_ui_patch_5.date = 2014/12/18 09:33:13
Applying file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\grouperExternal\public\assets\js\grouperUi.js
Patch successfully applied: grouper_v2_2_1_ui_patch_5
 - added to end of property file: grouper_v2_2_1_ui_patch_5.state = applied


################ Checking patch grouper_v2_2_1_ui_patch_6
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_6.tar.gz

Output of reverting patches:

Do you want to 'install' a new installation of grouper, 'upgrade' an existing installation
  or 'patch' an existing installation
  (enter: 'install', 'upgrade', 'patch' or blank for the default) [install]: patch
Enter in a Grouper temp directory to download tarballs (note: better if no spaces or special chars) [C:\app\grouperInstallerTarballDir]: 
What do you want to patch?  api, ui, ws, or psp? [psp]: ui
Where is the grouper UI installed? [C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper]: 
What do you want to do with patches (install, revert, status)? [install]: revert

################ Checking patch grouper_v2_2_1_ui_patch_0
Patch: grouper_v2_2_1_ui_patch_0: was applied on: 2014/12/18 09:32:45

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_0.tar
Patch grouper_v2_2_1_ui_patch_0 is low risk, is not a security patch
This patch fixes GRP-1080: browse folders refresh button only works in chrome, not other browsers
Would you like to revert patch grouper_v2_2_1_ui_patch_0 (t|f)? [f]: 
t
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\index\index.jsp
Patch successfully reverted: grouper_v2_2_1_ui_patch_0
 - set property: grouper_v2_2_1_ui_patch_0.date from: 2014/12/18 09:32:45 to: 2014/12/18 09:46:49
 - set property: grouper_v2_2_1_ui_patch_0.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_1
Patch: grouper_v2_2_1_ui_patch_1: was applied on: 2014/12/18 09:32:52

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_1.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_1.tar
Patch grouper_v2_2_1_ui_patch_1 is low risk, is not a security patch
This patch fixes GRP-1082: grouper paging tag2 has one word not externalized
Would you like to revert patch grouper_v2_2_1_ui_patch_1 (t|f)? [f]: 
t
This patch requires all processes that user Grouper to be stopped.
  Please stop these processes if they are running and press <enter> to continue...

Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\ui\tags\GrouperPagingTag2.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\ui\tags\GrouperPagingTag2.java
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\grouperText\grouper.text.en.us.base.properties
Patch successfully reverted: grouper_v2_2_1_ui_patch_1
 - set property: grouper_v2_2_1_ui_patch_1.date from: 2014/12/18 09:32:52 to: 2014/12/18 09:46:58
 - set property: grouper_v2_2_1_ui_patch_1.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_2
Patch: grouper_v2_2_1_ui_patch_2: was applied on: 2014/12/18 09:32:56

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_2.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_2.tar
Patch grouper_v2_2_1_ui_patch_2 is low risk, is not a security patch
This patch fixes GRP-1086: extra system out print in ui
Would you like to revert patch grouper_v2_2_1_ui_patch_2 (t|f)? [f]: 
t
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig$1.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouperClient\config\GrouperUiTextConfig.java
Patch successfully reverted: grouper_v2_2_1_ui_patch_2
 - set property: grouper_v2_2_1_ui_patch_2.date from: 2014/12/18 09:32:56 to: 2014/12/18 09:47:12
 - set property: grouper_v2_2_1_ui_patch_2.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_3
Patch: grouper_v2_2_1_ui_patch_3: was applied on: 2014/12/18 09:33:00

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_3.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_3.tar
Patch grouper_v2_2_1_ui_patch_3 is low risk, is not a security patch
This patch fixes GRP-1083: cannot set enabled/disabled dates in ui
Would you like to revert patch grouper_v2_2_1_ui_patch_3 (t|f)? [f]: 
t
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$1.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$10.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$11.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$12.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$13.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$14.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$15.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$16.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$17.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$18.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$19.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$2.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$20.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$21$1.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$21.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$22.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$3.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$4.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$5.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$6.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$7.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$8.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group$9.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\Group.java
Patch successfully reverted: grouper_v2_2_1_ui_patch_3
 - set property: grouper_v2_2_1_ui_patch_3.date from: 2014/12/18 09:33:00 to: 2014/12/18 09:47:16
 - set property: grouper_v2_2_1_ui_patch_3.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_4
Patch: grouper_v2_2_1_ui_patch_4: was applied on: 2014/12/18 09:33:08

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_4.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_4.tar
Patch grouper_v2_2_1_ui_patch_4 is low risk, is not a security patch
This patch fixes GRP-1087: edit membership page shows large H as icon in title
Would you like to revert patch grouper_v2_2_1_ui_patch_4 (t|f)? [f]: 
t
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\editMembership.jsp
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceAttributeDefPrivileges.jsp
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceMembership.jsp
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\tracePrivileges.jsp
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\grouperUi2\membership\traceStemPrivileges.jsp
Patch successfully reverted: grouper_v2_2_1_ui_patch_4
 - set property: grouper_v2_2_1_ui_patch_4.date from: 2014/12/18 09:33:08 to: 2014/12/18 09:47:18
 - set property: grouper_v2_2_1_ui_patch_4.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_5
Patch: grouper_v2_2_1_ui_patch_5: was applied on: 2014/12/18 09:33:13

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_5.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_ui_patch_5.tar
Patch grouper_v2_2_1_ui_patch_5 is low risk, is not a security patch
This patch fixes GRP-1088: attribute def left menu link throws error
Would you like to revert patch grouper_v2_2_1_ui_patch_5 (t|f)? [f]: 
t
Reverting file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\grouperExternal\public\assets\js\grouperUi.js
Patch successfully reverted: grouper_v2_2_1_ui_patch_5
 - set property: grouper_v2_2_1_ui_patch_5.date from: 2014/12/18 09:33:13 to: 2014/12/18 09:47:19
 - set property: grouper_v2_2_1_ui_patch_5.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_ui_patch_6
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_ui_patch_6.tar.gz

################ Checking patch grouper_v2_2_1_api_patch_0
Patch: grouper_v2_2_1_api_patch_0: was applied on: 2014/12/18 09:32:08

Downloading from URL: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_0.tar.gz to file: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Unzipping: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar.gz
Expanding: C:\app\grouperInstallerTarballDir\grouper_v2_2_1_api_patch_0.tar
Patch grouper_v2_2_1_api_patch_0 is low risk, is not a security patch
This patch fixes GRP-1095: hibernate exception handling masked original exception if roll
Would you like to revert patch grouper_v2_2_1_api_patch_0 (t|f)? [f]: 
t
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\hibernate\HibernateSession.class
Reverting (deleting) file: C:\app\grouper_2_2_1_installer\grouper.ui-2.2.1\dist\grouper\WEB-INF\classes\edu\internet2\middleware\grouper\hibernate\HibernateSession.java
Patch successfully reverted: grouper_v2_2_1_api_patch_0
 - set property: grouper_v2_2_1_api_patch_0.date from: 2014/12/18 09:32:08 to: 2014/12/18 09:47:21
 - set property: grouper_v2_2_1_api_patch_0.state from: applied to: reverted


################ Checking patch grouper_v2_2_1_api_patch_1
Patch doesnt exist yet (not an error): http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_1_api_patch_1.tar.gz


What if patch doesn't work due to edited files?

If you are installing a patch and it won't install because a file is not what it expects:

Cannot apply patch since this patch file:
  /apps/grouper/grouper-2.2.1/patches/grouper_v2_2_1_ui_patch_6/old/files/WEB-INF/grouperUi2/index/index.jsp
is not the same as what the patch expects:
  /apps/GMS/WEB-INF/grouperUi2/index/index.jsp

You can do this:

Backup the file that cannot be patched /apps/GMS/WEB-INF/grouperUi2/index/index.jsp

Copy the file it expects: /apps/grouper/grouper-2.2.1/patches/grouper_v2_2_1_ui_patch_6/old/files/WEB-INF/grouperUi2/index/index.jsp

On top of: /apps/GMS/WEB-INF/grouperUi2/index/index.jsp

Then try to install the patch again… diff the backup with the new and put back in your manual edits

Patch structure

Note, patches for modules should not contain files from other modules, e.g. do not have API files in a UI patch

A patch is a file on the download server in the patches directory in a version.  A patch is custom made for a specific version of Grouper.  Patches can be for the client, api, ui, ws, psp, etc, each function of Grouper.

Example: http://software.internet2.edu/grouper/release/2.2.1/patches/grouper_v2_2_2_api_patch_0.tar.gz

Inside the patch tarball is:

/grouper_v2_2_1_api_patch_0/grouper_v2_2_1_api_patch_0.properties
start with directory of patch name
                            patch name dot properties is metadata about the patch
/grouper_v2_2_1_api_patch_0/old/classes
                           /old has files which are being changed
                               /classes are files on the classpath (note, this might be in WEB-INF/classes)
/grouper_v2_2_1_api_patch_0/old/lib
                               /lib is jars (note, this might be in WEB-INF/classes)
/grouper_v2_2_1_api_patch_0/old/files/some dir path to files
                               /files are files (that arent on classpath or lib)
/grouper_v2_2_1_api_patch_0/new/classes
                           /new has files which are the new version, which dont have to exist in /old
                               /classes are files on the classpath (note, this might be in WEB-INF/classes)
/grouper_v2_2_1_api_patch_0/new/lib
                               /lib is jars (note, this might be in WEB-INF/classes)
/grouper_v2_2_1_api_patch_0/new/files/some dir path to files
                               /files are files (that arent on classpath or lib)

Patch properties file:

# will show up on screen so user knows what it is
description = This patch fixes GRP-123: button on screen whatever didnt work

# patches that this patch is dependant on (comma separated).  Note, patch must be in a previous function or a lower number
dependencies = grouper_v2_2_1_api_patch_0

# low, medium, or high risk to applying the patch
risk = low

# is this is a security patch (true or false)
security = false

# if this patch requires restart of processes (true or false)
requiresRestart = false

When the patching is complete there is a properties file in the grouper installation to keep track of which patches were applied: grouperPatchStatus.properties

This is stored in the main directory of the installation or in the WEB-INF directory if it exists

# patchname dot applied will have the date this patch was applied
grouper_v2_2_1_api_patch_0.applied = 2014/10/23 12:23:34.123

Patching algorithm

  1. Do not apply the same patch twice
  2. If dependencies are not applied, do not apply patch
  3. If applying a patch, if the "old" files are not the same as in the patch, do not apply the patch
  4. If backing out a patch, if the "new" files are not the same as in the patch, do not back out the patch
  5. If not silent, ask the user if they want to apply the patch
  6. If the patch requires restart, and not stopped yet, then stop Grouper
  7. If applying a patch, copy the "new" files to the grouper application
  8. If backing out a patch, copy the "old" files to the grouper application if they exist, otherwise, remove the files
  9. Make a note that the patch was installed in grouperPatchStatus.properties
  10. If a patch requires grouper to be restarted and its not started and no more patches that require restart, then start grouper

FAQ for developers

# added by grouper-installer
grouper_v2_2_1_api_patch_0.date = 2015/01/18 17:45:34
 
# added by grouper-installer
grouper_v2_2_1_api_patch_0.state = applied


 
# if patches that are named grouper_v2_2_1_api_patch_0_test.tar.gz should be used to test a patch
grouperInstaller.useTestPatches = false

if you have a config file, remember to run the grouperInstaller like this

java -cp .:grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller



See also

Grouper Installer

Grouper Upgrader