test/jdk/tools/jpackage/share/manage_packages.sh
branchJDK-8200758-branch
changeset 58301 e0efb29609bd
parent 58172 bf06a1d3aef6
child 58302 718bd56695b3
equal deleted inserted replaced
58172:bf06a1d3aef6 58301:e0efb29609bd
     1 #!/bin/bash
       
     2 
       
     3 #
       
     4 # Script to install/uninstall packages produced by jpackage jtreg
       
     5 # tests doing platform specific packaging.
       
     6 #
       
     7 # The script will install/uninstall all packages from the files
       
     8 # found in the current directory or the one specified with command line option.
       
     9 #
       
    10 # When jtreg jpackage tests are executed with jpackage.test.output
       
    11 # Java property set, produced package files (msi, exe, deb, rpm, etc.) will 
       
    12 # be saved in the directory specified with this property.
       
    13 #
       
    14 # Usage example:
       
    15 # # Set directory where to save package files from jtreg jpackage tests
       
    16 # JTREG_OUTPUT_DIR=/tmp/jpackage_jtreg_packages
       
    17 #
       
    18 # # Run tests and fill $JTREG_OUTPUT_DIR directory with package files
       
    19 # jtreg -Djpackage.test.output=$JTREG_OUTPUT_DIR ...
       
    20 #
       
    21 # # Install all packages
       
    22 # manage_pachages.sh -d $JTREG_OUTPUT_DIR
       
    23 #
       
    24 # # Uninstall all packages
       
    25 # manage_pachages.sh -d $JTREG_OUTPUT_DIR -u
       
    26 #
       
    27 
       
    28 #
       
    29 # When using with MSI installers, Cygwin shell from which this script is
       
    30 # executed should be started as administrator. Otherwise silent installation 
       
    31 # won't work.
       
    32 #
       
    33 
       
    34 # Fail fast
       
    35 set -e; set -o pipefail;
       
    36 
       
    37 
       
    38 help_usage ()
       
    39 {
       
    40     echo "Usage: `basename $0` [OPTION]"
       
    41     echo "Options:"
       
    42     echo "  -h        - print this message"
       
    43     echo "  -v        - verbose output"
       
    44     echo "  -d <dir>  - path to directory where to look for package files"
       
    45     echo "  -u        - uninstall packages instead of the default install"
       
    46     echo "  -t        - dry run, print commands but don't execute them"
       
    47 }
       
    48 
       
    49 error ()
       
    50 {
       
    51   echo "$@" > /dev/stderr
       
    52 }
       
    53 
       
    54 fatal ()
       
    55 {
       
    56   error "$@"
       
    57   exit 1
       
    58 }
       
    59 
       
    60 fatal_with_help_usage ()
       
    61 {
       
    62   error "$@"
       
    63   help_usage
       
    64   exit 1
       
    65 }
       
    66 
       
    67 
       
    68 # Directory where to look for package files.
       
    69 package_dir=$PWD
       
    70 
       
    71 # Script debug.
       
    72 verbose=
       
    73 
       
    74 # Operation mode.
       
    75 mode=install
       
    76 
       
    77 dryrun=
       
    78 
       
    79 while getopts "vhd:ut" argname; do
       
    80     case "$argname" in
       
    81         v) verbose=yes;;
       
    82         t) dryrun=yes;;
       
    83         u) mode=uninstall;;
       
    84         d) package_dir="$OPTARG";;
       
    85         h) help_usage; exit 0;;
       
    86         ?) help_usage; exit 1;;
       
    87     esac
       
    88 done
       
    89 shift $(( OPTIND - 1 ))
       
    90 
       
    91 [ -d "$package_dir" ] || fatal_with_help_usage "Package directory [$package_dir] is not a directory"
       
    92 
       
    93 [ -z "$verbose" ] || set -x
       
    94 
       
    95 
       
    96 function find_packages_of_type ()
       
    97 {
       
    98     # sort output alphabetically
       
    99     find "$package_dir" -maxdepth 1 -type f -name '*.'"$1" | sort
       
   100 }
       
   101 
       
   102 function find_packages ()
       
   103 {
       
   104     local package_suffixes=(deb rpm msi exe)
       
   105     for suffix in "${package_suffixes[@]}"; do
       
   106         if [ "$mode" == "uninstall" ]; then
       
   107             packages=$(find_packages_of_type $suffix | tac)
       
   108         else
       
   109             packages=$(find_packages_of_type $suffix)
       
   110         fi
       
   111         if [ -n "$packages" ]; then
       
   112             package_type=$suffix
       
   113             break;
       
   114         fi
       
   115     done
       
   116 }
       
   117 
       
   118 
       
   119 # RPM
       
   120 install_cmd_rpm ()
       
   121 {
       
   122     echo sudo rpm --install "$@"
       
   123 }
       
   124 uninstall_cmd_rpm ()
       
   125 {
       
   126     local package_name=$(rpm -qp --queryformat '%{Name}' "$@")
       
   127     echo sudo rpm -e "$package_name"
       
   128 }
       
   129 
       
   130 # DEB
       
   131 install_cmd_deb ()
       
   132 {
       
   133     echo sudo dpkg -i "$@"
       
   134 }
       
   135 uninstall_cmd_deb ()
       
   136 {
       
   137     local package_name=$(dpkg-deb -f "$@" Package)
       
   138     echo sudo dpkg -r "$package_name"
       
   139 }
       
   140 
       
   141 # MSI
       
   142 install_cmd_msi ()
       
   143 {
       
   144     echo msiexec /qn /norestart /i $(cygpath -w "$@")
       
   145 }
       
   146 uninstall_cmd_msi ()
       
   147 {
       
   148     echo msiexec /qn /norestart /x $(cygpath -w "$@")
       
   149 }
       
   150 
       
   151 # EXE
       
   152 install_cmd_exe ()
       
   153 {
       
   154     echo "$@"
       
   155 }
       
   156 uninstall_cmd_exe ()
       
   157 {
       
   158     error No implemented
       
   159 }
       
   160 
       
   161 
       
   162 # Find packages
       
   163 packages=
       
   164 find_packages
       
   165 if [ -z "$packages" ]; then
       
   166     echo "No packages found in $package_dir directory"
       
   167     exit
       
   168 fi
       
   169 
       
   170 # Build list of commands to execute
       
   171 declare -a commands
       
   172 for p in $packages; do
       
   173     commands[${#commands[@]}]=$(${mode}_cmd_${package_type} "$p")
       
   174 done
       
   175 
       
   176 if [ -z "$dryrun" ]; then
       
   177     # Run commands
       
   178     for cmd in "${commands[@]}"; do
       
   179         echo Running: $cmd
       
   180         $cmd || true;
       
   181     done
       
   182 else
       
   183     # Print commands
       
   184     for cmd in "${commands[@]}"; do echo $cmd; done
       
   185 fi