| | |
| | | * |
| | | * |
| | | * Copyright 2006-2009 Sun Microsystems, Inc. |
| | | * Portions Copyright 2011 ForgeRock AS |
| | | * Portions Copyright 2011-2012 ForgeRock AS |
| | | */ |
| | | package org.opends.server.tools.configurator; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.BufferedReader; |
| | | import java.io.FileInputStream; |
| | | import java.io.FileOutputStream; |
| | | import java.io.FileReader; |
| | | import java.io.FileWriter; |
| | | |
| | | |
| | | import static org.opends.messages.QuickSetupMessages.*; |
| | | import static org.opends.messages.ToolMessages.*; |
| | | import static org.opends.server.util.DynamicConstants.MAJOR_VERSION; |
| | | import static org.opends.server.util.DynamicConstants.MINOR_VERSION; |
| | | import static org.opends.server.util.DynamicConstants.POINT_VERSION; |
| | | import static org.opends.server.util.DynamicConstants.REVISION_NUMBER; |
| | | |
| | | import java.io.*; |
| | | import java.util.StringTokenizer; |
| | | import java.util.logging.Level; |
| | | import java.util.logging.Logger; |
| | | |
| | | import org.opends.messages.Message; |
| | | import org.opends.quicksetup.BuildInformation; |
| | | import org.opends.quicksetup.Installation; |
| | | import org.opends.quicksetup.QuickSetupLog; |
| | | import org.opends.quicksetup.ReturnCode; |
| | | import org.opends.server.util.args.ArgumentException; |
| | | import org.opends.server.util.args.ArgumentParser; |
| | | import org.opends.server.util.args.StringArgument; |
| | | import java.io.InputStreamReader; |
| | | import java.util.logging.Level; |
| | | import java.util.logging.Logger; |
| | | import org.opends.messages.Message; |
| | | import org.opends.quicksetup.Installation; |
| | | import org.opends.server.util.args.BooleanArgument; |
| | | import java.util.StringTokenizer; |
| | | import org.opends.quicksetup.BuildInformation; |
| | | import org.opends.quicksetup.QuickSetupLog; |
| | | import org.opends.server.util.args.StringArgument; |
| | | |
| | | import static org.opends.messages.ToolMessages.*; |
| | | import static org.opends.messages.QuickSetupMessages.*; |
| | | |
| | | import static org.opends.server.util.DynamicConstants.*; |
| | | |
| | | /** |
| | | * This class is called by the configure command line to move the default |
| | | * Directory Server instance. |
| | | */ |
| | | public class CheckInstance { |
| | | public class CheckInstance |
| | | { |
| | | |
| | | static private final Logger LOG = Logger.getLogger( |
| | | CheckInstance.class.getName()); |
| | | static private final Logger LOG = Logger.getLogger(CheckInstance.class |
| | | .getName()); |
| | | |
| | | /** Prefix for log files. */ |
| | | static public final String LOG_FILE_PREFIX = "opendj-checkinstance-"; |
| | |
| | | private static int USER_ERROR = 2; |
| | | private static int VERSION_ERROR = 3; |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a copy of the specified file. |
| | | * The main method which is called by the configure command lines. |
| | | * |
| | | * @param from The source file to be copied. |
| | | * @param to The destination file to be created. |
| | | * |
| | | * @throws IOException If a problem occurs. |
| | | * @param args |
| | | * the arguments passed by the command line. |
| | | */ |
| | | private static void copyFile(File from, File to) |
| | | throws IOException |
| | | public static void main(final String[] args) |
| | | { |
| | | byte[] buffer = new byte[4096]; |
| | | FileInputStream inputStream = null; |
| | | FileOutputStream outputStream = null; |
| | | |
| | | try |
| | | { |
| | | inputStream = new FileInputStream(from); |
| | | QuickSetupLog.initLogFileHandler(File.createTempFile(LOG_FILE_PREFIX, |
| | | QuickSetupLog.LOG_FILE_SUFFIX)); |
| | | } |
| | | catch (final Throwable t) |
| | | { |
| | | System.err.println(INFO_ERROR_INITIALIZING_LOG.get()); |
| | | t.printStackTrace(); |
| | | } |
| | | |
| | | // Create the command-line argument parser for use with this program. |
| | | final Message toolDescription = INFO_CHECK_DESCRIPTION.get(); |
| | | final ArgumentParser argParser = new ArgumentParser( |
| | | CheckInstance.class.getName(), toolDescription, false); |
| | | |
| | | installRootFromSystem = System.getProperty("INSTALL_ROOT"); |
| | | if (installRootFromSystem == null) |
| | | { |
| | | System.err |
| | | .println(ERR_INTERNAL.get(ERR_INSTALL_ROOT_NOT_SPECIFIED.get())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | instanceRootFromSystem = System.getProperty("INSTANCE_ROOT"); |
| | | if (instanceRootFromSystem == null) |
| | | { |
| | | System.err |
| | | .println(ERR_INTERNAL.get(ERR_INSTANCE_ROOT_NOT_SPECIFIED.get())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | isWin = System.getProperty("file.separator").equals("\\"); |
| | | |
| | | // Initialize all the command-line argument types and register them with the |
| | | // parser. |
| | | try |
| | | { |
| | | if (!isWin) |
| | | { |
| | | currentUserArg = new StringArgument(CURRENT_USER_OPTION_LONG, |
| | | CURRENT_USER_OPTION_SHORT, CURRENT_USER_OPTION_LONG, true, true, |
| | | INFO_CURRENT_USER_PLACEHOLDER.get(), |
| | | INFO_CHECK_DESCRIPTION_CURRENT_USER.get()); |
| | | argParser.addArgument(currentUserArg); |
| | | } |
| | | checkVersionArg = new BooleanArgument(CHECK_VERSION_OPTION_LONG, |
| | | CHECK_VERSION_OPTION_SHORT, CHECK_VERSION_OPTION_LONG, |
| | | INFO_CHECK_DESCRIPTION_CHECK_VERSION.get()); |
| | | argParser.addArgument(checkVersionArg); |
| | | } |
| | | catch (final ArgumentException ae) |
| | | { |
| | | System.err.println(ERR_INTERNAL.get(ae.getMessageObject())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | // Parse the command-line arguments provided to this program. |
| | | try |
| | | { |
| | | argParser.parseArguments(args); |
| | | } |
| | | catch (final ArgumentException ae) |
| | | { |
| | | System.err.println(ERR_INTERNAL.get(ae.getMessageObject())); |
| | | System.exit(ARGS_ERROR); |
| | | } |
| | | |
| | | final File confDir = new File(instanceRootFromSystem, |
| | | Installation.CONFIG_PATH_RELATIVE); |
| | | |
| | | if (!isWin) |
| | | { |
| | | // Check user |
| | | final File conf = |
| | | new File(confDir, Installation.CURRENT_CONFIG_FILE_NAME); |
| | | Process proc = null; |
| | | int exit = 0; |
| | | |
| | | InputStreamReader reader = null; |
| | | int c; |
| | | final StringBuffer sb = new StringBuffer(); |
| | | final String[] cmdArgs = { "ls", "-l", conf.getAbsolutePath() }; |
| | | final StringBuilder cmd = new StringBuilder(); |
| | | for (final String arg : cmdArgs) |
| | | { |
| | | if (cmd.length() > 0) |
| | | { |
| | | cmd.append(" "); |
| | | } |
| | | cmd.append(arg); |
| | | } |
| | | try |
| | | { |
| | | proc = Runtime.getRuntime().exec(cmdArgs); |
| | | proc.waitFor(); |
| | | reader = new InputStreamReader(proc.getInputStream()); |
| | | while (((c = reader.read()) != -1)) |
| | | { |
| | | sb.append((char) c); |
| | | } |
| | | exit = proc.exitValue(); |
| | | if (exit != 0) |
| | | { |
| | | LOG.log(Level.FINEST, cmd + " error= " + exit); |
| | | System.err.println(ERR_CONFIG_LDIF_NOT_FOUND.get( |
| | | confDir.getAbsolutePath(), installRootFromSystem + File.separator |
| | | + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } |
| | | catch (final InterruptedException ex) |
| | | { |
| | | LOG.log(Level.SEVERE, "InterruptedException" + ex.getMessage()); |
| | | System.err.println(ERR_CONFIG_LDIF_NOT_FOUND.get( |
| | | confDir.getAbsolutePath(), installRootFromSystem + File.separator |
| | | + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | catch (final IOException ex) |
| | | { |
| | | LOG.log(Level.SEVERE, "IOException" + ex.getMessage()); |
| | | System.err.println(ERR_CONFIG_LDIF_NOT_FOUND.get( |
| | | confDir.getAbsolutePath(), installRootFromSystem + File.separator |
| | | + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | LOG.log(Level.FINEST, cmd + " returns [" + sb.toString() + "]"); |
| | | final StringTokenizer tok = new StringTokenizer(sb.toString()); |
| | | if (tok.hasMoreTokens()) |
| | | { |
| | | // access rights |
| | | tok.nextToken(); |
| | | if (tok.hasMoreTokens()) |
| | | { |
| | | // inode |
| | | tok.nextToken(); |
| | | if (tok.hasMoreTokens()) |
| | | { |
| | | instanceOwner = tok.nextToken(); |
| | | LOG.log(Level.FINEST, "instanceOwner=[" + instanceOwner + "]"); |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.SEVERE, "no instanceOwner"); |
| | | System.err |
| | | .println(ERR_INTERNAL.get(Message.raw("no instanceOwner"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.SEVERE, "no inode"); |
| | | System.err.println(ERR_INTERNAL.get(Message.raw("no inode"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.SEVERE, "no access rights"); |
| | | System.err.println(ERR_INTERNAL.get(Message.raw("no access rights"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | currentUser = currentUserArg.getValue(); |
| | | LOG.log(Level.FINEST, "currentUser=[" + currentUser + "]"); |
| | | |
| | | if ((currentUser != null) && !(currentUser.equals(instanceOwner))) |
| | | { |
| | | System.err.println(ERR_CHECK_USER_ERROR.get(instanceOwner)); |
| | | System.exit(USER_ERROR); |
| | | } |
| | | } |
| | | |
| | | // Initialize buildinfo in not already done (ZIP delivery) |
| | | final BuildInformation installBi = BuildInformation |
| | | .fromBuildString(MAJOR_VERSION + "." + MINOR_VERSION + "." |
| | | + POINT_VERSION + "." + REVISION_NUMBER); |
| | | final File bif = new File(confDir, Installation.BUILDINFO_RELATIVE_PATH); |
| | | if (!bif.exists()) |
| | | { |
| | | FileWriter fwriter = null; |
| | | try |
| | | { |
| | | fwriter = new FileWriter(bif, true); |
| | | fwriter.append(installBi.getBuildString()); |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | fwriter.close(); |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | } |
| | | } |
| | | } |
| | | |
| | | // Check version |
| | | if (checkVersionArg.isPresent()) |
| | | { |
| | | BuildInformation instanceBi = installBi; |
| | | |
| | | try |
| | | { |
| | | if (bif.exists()) |
| | | { |
| | | final BufferedReader breader = |
| | | new BufferedReader(new FileReader(bif)); |
| | | |
| | | // Read the first line and close the file. |
| | | String line; |
| | | try |
| | | { |
| | | line = breader.readLine(); |
| | | instanceBi = BuildInformation.fromBuildString(line); |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | breader.close(); |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | } |
| | | } |
| | | |
| | | // For pkg(5) delivery: update the file to avoid overwrite |
| | | // during upgrade |
| | | final FileWriter fwriter = new FileWriter(bif, true); |
| | | try |
| | | { |
| | | fwriter.append('\n'); |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | fwriter.close(); |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | LOG.log(Level.SEVERE, "error getting build information for " |
| | | + "current instance", e); |
| | | } |
| | | |
| | | if (!installBi.equals(instanceBi)) |
| | | { |
| | | System.err.println(ERR_CHECK_VERSION_NOT_MATCH.get()); |
| | | System.exit(VERSION_ERROR); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.FINEST, "checkVersion not specified"); |
| | | } |
| | | |
| | | // For pkg(5) delivery: if config/upgrade/*.ldif.REV does not exist |
| | | try |
| | | { |
| | | final File upgradeDir = new File(confDir, Installation.UPGRADE_PATH); |
| | | final File tmplUpgradeDir = new File(installRootFromSystem |
| | | + File.separator + Installation.TMPL_INSTANCE_RELATIVE_PATH |
| | | + File.separator + Installation.CONFIG_PATH_RELATIVE + File.separator |
| | | + Installation.UPGRADE_PATH); |
| | | |
| | | final File concatenatedSchema = new File(upgradeDir, "schema.ldif." |
| | | + REVISION_NUMBER); |
| | | if (!concatenatedSchema.exists()) |
| | | { |
| | | final File tmplConcatenatedSchema = new File(tmplUpgradeDir, |
| | | "schema.ldif." + REVISION_NUMBER); |
| | | copyFile(tmplConcatenatedSchema, concatenatedSchema); |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.INFO, concatenatedSchema.getAbsolutePath() |
| | | + "already exists"); |
| | | } |
| | | |
| | | final File initialConfig = new File(upgradeDir, "config.ldif." |
| | | + REVISION_NUMBER); |
| | | if (!initialConfig.exists()) |
| | | { |
| | | final File tmplInitialConfig = new File(tmplUpgradeDir, "config.ldif." |
| | | + REVISION_NUMBER); |
| | | copyFile(tmplInitialConfig, initialConfig); |
| | | } |
| | | else |
| | | { |
| | | LOG.log(Level.INFO, initialConfig.getAbsolutePath() + "already exists"); |
| | | } |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | LOG.log(Level.SEVERE, "error initializing config/upgrade files", e); |
| | | } |
| | | |
| | | System.exit(SUCCESS); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a copy of the specified file. |
| | | * |
| | | * @param from |
| | | * The source file to be copied. |
| | | * @param to |
| | | * The destination file to be created. |
| | | * @throws IOException |
| | | * If a problem occurs. |
| | | */ |
| | | private static void copyFile(final File from, final File to) |
| | | throws IOException |
| | | { |
| | | final byte[] buffer = new byte[4096]; |
| | | FileInputStream inputStream = null; |
| | | FileOutputStream outputStream = null; |
| | | |
| | | try |
| | | { |
| | | inputStream = new FileInputStream(from); |
| | | outputStream = new FileOutputStream(to, false); |
| | | |
| | | int bytesRead = inputStream.read(buffer); |
| | |
| | | { |
| | | inputStream.close(); |
| | | } |
| | | catch (Exception e) |
| | | catch (final Exception e) |
| | | { |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * The main method which is called by the configure command lines. |
| | | * |
| | | * @param args the arguments passed by the command line. |
| | | */ |
| | | public static void main(String[] args) { |
| | | |
| | | try { |
| | | QuickSetupLog.initLogFileHandler( |
| | | File.createTempFile(LOG_FILE_PREFIX, |
| | | QuickSetupLog.LOG_FILE_SUFFIX)); |
| | | } catch (Throwable t) { |
| | | System.err.println(INFO_ERROR_INITIALIZING_LOG.get()); |
| | | t.printStackTrace(); |
| | | } |
| | | |
| | | // Create the command-line argument parser for use with this program. |
| | | Message toolDescription = INFO_CHECK_DESCRIPTION.get(); |
| | | ArgumentParser argParser = |
| | | new ArgumentParser(CheckInstance.class.getName(), |
| | | toolDescription, false); |
| | | |
| | | |
| | | installRootFromSystem = System.getProperty("INSTALL_ROOT"); |
| | | if (installRootFromSystem == null) { |
| | | System.err |
| | | .println(ERR_INTERNAL.get(ERR_INSTALL_ROOT_NOT_SPECIFIED.get())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | instanceRootFromSystem = System.getProperty("INSTANCE_ROOT"); |
| | | if (instanceRootFromSystem == null) { |
| | | System.err.println(ERR_INTERNAL |
| | | .get(ERR_INSTANCE_ROOT_NOT_SPECIFIED.get())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | isWin = System.getProperty("file.separator").equals("\\"); |
| | | |
| | | // Initialize all the command-line argument types and register them with the |
| | | // parser. |
| | | try { |
| | | if (!isWin) { |
| | | currentUserArg = new StringArgument(CURRENT_USER_OPTION_LONG, |
| | | CURRENT_USER_OPTION_SHORT, |
| | | CURRENT_USER_OPTION_LONG, |
| | | true, true, |
| | | INFO_CURRENT_USER_PLACEHOLDER.get(), |
| | | INFO_CHECK_DESCRIPTION_CURRENT_USER.get()); |
| | | argParser.addArgument(currentUserArg); |
| | | } |
| | | checkVersionArg = new BooleanArgument(CHECK_VERSION_OPTION_LONG, |
| | | CHECK_VERSION_OPTION_SHORT, |
| | | CHECK_VERSION_OPTION_LONG, |
| | | INFO_CHECK_DESCRIPTION_CHECK_VERSION.get()); |
| | | argParser.addArgument(checkVersionArg); |
| | | } catch (ArgumentException ae) { |
| | | System.err.println(ERR_INTERNAL.get(ae.getMessageObject())); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | |
| | | // Parse the command-line arguments provided to this program. |
| | | try { |
| | | argParser.parseArguments(args); |
| | | } catch (ArgumentException ae) { |
| | | System.err.println(ERR_INTERNAL.get(ae.getMessageObject())); |
| | | System.exit(ARGS_ERROR); |
| | | } |
| | | |
| | | File confDir = new File(instanceRootFromSystem, |
| | | Installation.CONFIG_PATH_RELATIVE); |
| | | |
| | | if (!isWin) { |
| | | // Check user |
| | | File conf = new File (confDir, Installation.CURRENT_CONFIG_FILE_NAME); |
| | | Process proc = null; |
| | | int exit = 0; |
| | | |
| | | InputStreamReader reader = null; |
| | | int c; |
| | | StringBuffer sb = new StringBuffer(); |
| | | String[] cmdArgs = {"ls", "-l", conf.getAbsolutePath()}; |
| | | StringBuilder cmd = new StringBuilder(); |
| | | for (String arg : cmdArgs) |
| | | { |
| | | if (cmd.length() > 0) |
| | | { |
| | | cmd.append(" "); |
| | | } |
| | | cmd.append(arg); |
| | | } |
| | | try { |
| | | proc = Runtime.getRuntime().exec(cmdArgs); |
| | | proc.waitFor(); |
| | | reader = new InputStreamReader(proc.getInputStream()); |
| | | while (((c = reader.read()) != -1)) { |
| | | sb.append((char) c); |
| | | } |
| | | exit = proc.exitValue(); |
| | | if (exit != 0) { |
| | | LOG.log(Level.FINEST, cmd + " error= " + exit); |
| | | System.err.println(ERR_CONFIG_LDIF_NOT_FOUND.get( |
| | | confDir.getAbsolutePath(), |
| | | installRootFromSystem + File.separator + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } catch (InterruptedException ex) { |
| | | LOG.log(Level.SEVERE, "InterruptedException" + ex.getMessage()); |
| | | System.err.println( |
| | | ERR_CONFIG_LDIF_NOT_FOUND.get(confDir.getAbsolutePath(), |
| | | installRootFromSystem + File.separator + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } catch (IOException ex) { |
| | | LOG.log(Level.SEVERE, "IOException" + ex.getMessage() ); |
| | | System.err.println(ERR_CONFIG_LDIF_NOT_FOUND.get( |
| | | confDir.getAbsolutePath(), |
| | | installRootFromSystem + File.separator + "instance.loc")); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | LOG.log(Level.FINEST, cmd + " returns [" + sb.toString() + "]"); |
| | | StringTokenizer tok = new StringTokenizer(sb.toString()); |
| | | if (tok.hasMoreTokens()) { |
| | | // access rights |
| | | tok.nextToken(); |
| | | if (tok.hasMoreTokens()) { |
| | | // inode |
| | | tok.nextToken(); |
| | | if (tok.hasMoreTokens()) { |
| | | instanceOwner = tok.nextToken(); |
| | | LOG.log(Level.FINEST, "instanceOwner=[" + instanceOwner + "]"); |
| | | } else { |
| | | LOG.log(Level.SEVERE, "no instanceOwner"); |
| | | System.err.println(ERR_INTERNAL.get(Message.raw("no instanceOwner"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } else { |
| | | LOG.log(Level.SEVERE, "no inode"); |
| | | System.err.println(ERR_INTERNAL.get(Message.raw("no inode"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | } else { |
| | | LOG.log(Level.SEVERE, "no access rights"); |
| | | System.err.println(ERR_INTERNAL.get(Message.raw("no access rights"))); |
| | | System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode()); |
| | | } |
| | | |
| | | |
| | | currentUser = currentUserArg.getValue(); |
| | | LOG.log(Level.FINEST, "currentUser=[" + currentUser + "]"); |
| | | |
| | | if ((currentUser != null) && !(currentUser.equals(instanceOwner))) { |
| | | System.err.println(ERR_CHECK_USER_ERROR.get(instanceOwner)); |
| | | System.exit(USER_ERROR); |
| | | } |
| | | } |
| | | |
| | | // Initialize buildinfo in not already done (ZIP delivery) |
| | | BuildInformation installBi = |
| | | BuildInformation.fromBuildString(MAJOR_VERSION + |
| | | "." + MINOR_VERSION + |
| | | "." + POINT_VERSION + |
| | | "." + REVISION_NUMBER); |
| | | File bif = new File(confDir, Installation.BUILDINFO_RELATIVE_PATH); |
| | | if (!bif.exists()) { |
| | | FileWriter fwriter = null; |
| | | try { |
| | | fwriter = new FileWriter(bif, true); |
| | | fwriter.append(installBi.getBuildString()); |
| | | } catch (Exception e) { |
| | | } finally { |
| | | try { |
| | | fwriter.close(); |
| | | } catch (Exception e) { |
| | | } |
| | | } |
| | | } |
| | | |
| | | // Check version |
| | | if (checkVersionArg.isPresent()) { |
| | | BuildInformation instanceBi = installBi; |
| | | |
| | | try { |
| | | if (bif.exists()) { |
| | | BufferedReader breader = new BufferedReader(new FileReader(bif)); |
| | | |
| | | // Read the first line and close the file. |
| | | String line; |
| | | try { |
| | | line = breader.readLine(); |
| | | instanceBi = BuildInformation.fromBuildString(line); |
| | | } finally { |
| | | try { |
| | | breader.close(); |
| | | } catch (Exception e) { |
| | | } |
| | | } |
| | | |
| | | // For pkg(5) delivery: update the file to avoid overwrite |
| | | // during upgrade |
| | | FileWriter fwriter = new FileWriter(bif, true); |
| | | try { |
| | | fwriter.append('\n'); |
| | | } finally { |
| | | try { |
| | | fwriter.close(); |
| | | } catch (Exception e) { |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | LOG.log(Level.SEVERE, "error getting build information for " + |
| | | "current instance", e); |
| | | } |
| | | |
| | | if (!installBi.equals(instanceBi)) { |
| | | System.err.println(ERR_CHECK_VERSION_NOT_MATCH.get()); |
| | | System.exit(VERSION_ERROR); |
| | | } |
| | | } else { |
| | | LOG.log(Level.FINEST, "checkVersion not specified"); |
| | | } |
| | | |
| | | // For pkg(5) delivery: if config/upgrade/*.ldif.REV does not exist |
| | | try { |
| | | File upgradeDir = new File(confDir, Installation.UPGRADE_PATH); |
| | | File tmplUpgradeDir = new File(installRootFromSystem + File.separator + |
| | | Installation.TMPL_INSTANCE_RELATIVE_PATH + |
| | | File.separator + Installation.CONFIG_PATH_RELATIVE + |
| | | File.separator + Installation.UPGRADE_PATH); |
| | | |
| | | File concatenatedSchema = new File(upgradeDir, |
| | | "schema.ldif." + REVISION_NUMBER); |
| | | if (!concatenatedSchema.exists()) { |
| | | File tmplConcatenatedSchema = new File(tmplUpgradeDir, |
| | | "schema.ldif." + REVISION_NUMBER); |
| | | copyFile(tmplConcatenatedSchema, concatenatedSchema); |
| | | } else { |
| | | LOG.log(Level.INFO, concatenatedSchema.getAbsolutePath() + |
| | | "already exists"); |
| | | } |
| | | |
| | | File initialConfig = new File(upgradeDir, |
| | | "config.ldif." + REVISION_NUMBER); |
| | | if (!initialConfig.exists()) { |
| | | File tmplInitialConfig = new File(tmplUpgradeDir, |
| | | "config.ldif." + REVISION_NUMBER); |
| | | copyFile(tmplInitialConfig, initialConfig); |
| | | } else { |
| | | LOG.log(Level.INFO, initialConfig.getAbsolutePath() + "already exists"); |
| | | } |
| | | } catch (Exception e) { |
| | | LOG.log(Level.SEVERE, "error initializing config/upgrade files", e); |
| | | } |
| | | |
| | | System.exit(SUCCESS); |
| | | |
| | | } |
| | | } |
| | | } |