Script in TS is failing

Hi all,
we have ing a script in our TS, which should remove BIOS users from the HP BIOS.
Script is working fine on a normal Windows7 PC.
But in the TS it is failing with
DeleteBiosUser.vbs(23, 1) (null): 0x8004100E
For this error I have found https://support.microsoft.com/de-de/kb/281888/en-us, but this doesn't really help, becuase the script is running on this PC, becuase when I then open the command box with F8 and run the script manually, it is also working fine.
Namespace in WMI query in the script is root/HP/InstrumentedBIOS
We have tried to run the script
from a package
copy first locally and run it from there
with cmd /c
All the same error.
Does someone has an idea, what can here be the problem?
Many thx
Peet

Could you provide the script here?
This script below will Change Legacy Boot order. You could compare it with your script.
Const wbemFlagReturnImmediately = 16
Const wbemFlagForwardOnly = 32
'lFlags = wbemFlagReturnImmediately + wbemFlagForwardOnly
strService = "winmgmts:{impersonationlevel=impersonate, AuthenticationLevel=pktprivacy}\\"
strComputer = "."
strNamespace = "\root/HP/InstrumentedBIOS"
lFlags = 0
strQuery = "SELECT * FROM HP_BIOSSettingInterface"
Set objWMIService = GetObject(strService & strComputer & strNamespace)
Set colItems = objWMIService.ExecQuery(strQuery,,lFlags)
If colItems.Count <> 1 Then
'WScript.Echo "ERROR: HP CMI method interface not found."
Logging "ERROR: HP CMI method interface not found."
WScript.Quit(-1)
End If
For each objItem in colItems
objItem.SetBiosSetting oReturn, "Legacy Boot Order", "Hard Drive,Network Controller,ATAPI CD-ROM Drive"
Select Case oReturn
Case 0 strReturn = "Success"
Case 1 strReturn = "Not Supported"
Case 2 strReturn = "Unspecified Error"
Case 3 strReturn = "Timeout"
Case 4 strReturn = "Failed"
Case 5 strReturn = "Invalid Parameter"
Case 6 strReturn = "Access Denied"
Case Else strReturn = "..."
End Select
'WScript.Echo "SetBiosSetting() returned: (" & oReturn & ") " & strReturn
Logging "SetBiosSetting() returned: (" & oReturn & ") " & strReturn
If oReturn Then
WScript.Quit(oReturn)
End If
Next
'*** If any errors occurred, let the user know
If Err.Number <> 0 Then
'WScript.Echo "An error occurred in obtaining the boot order."
Logging "An error occurred in obtaining the boot order."
WScript.Quit(-1)
End If

Similar Messages

  • Calling an rss script with rs.exe fails to result in a report pdf from VB6 w/ ShellEx.

    Sql 2008 R2
    Calling an rss script with rs.exe fails to result in a report pdf from VB6 w/ ShellEx. 
    If I call rs.exe with the various parameters from the command prompt I  have success(other than rs.exe using the temp folder, which is a different issue).  But when I try to execute the same process from a Visual Basic 6.0 application utilizing
    the ShellEx api call, the report creation and output to PDF format do not occur.   There is no error raised.
    Yes, I wish I could use a newer dev tool but that isn't an option right now. I think this should work.  Can ya'll tell me what I'm doing wrong?
    sArgs = "-i " & Chr(34) & "'C:\Program Files\Dura Supreme\OrderEntry\RunOrdReports.rss'" & Chr(34) & _
    " -s 'http://walnut/reportserver' -v 'DuraOrderNum=" & _
    Chr(34) & sOrdDuraID & Chr(34) & "' -e Exec2005 -t"
    ShellEx Chr(34) & "C:\Program Files\Dura Supreme\OrderEntry\rs.exe" & Chr(34), EShellShowConstants.essSW_SHOWNORMAL, sArgs
    TIA,
    Jim M.

    ShellEx Chr(34) & "C:\Program Files\Dura Supreme\OrderEntry\rs.exe" & ....
    Hello Jim,
    The path for rs.exe includes spaces, you should set it in hyphen, as you already did for file "RunOrdReports.rss" in variable "sArgs2
    Olaf Helper
    [ Blog] [ Xing] [ MVP]

  • Report script execution is getting failed

    Hi ,
    We are facing one strange issue while executing the Essbase report script. I am new to the report script and I am not getting how to resolve the issue.
    When we are changing the year in code from FY13 to FY14 the script is getting failed however the same script is successfully generating the report if we keep year as FY13 in code.
    Could you please let me know where would be the problem , below is the part of the code form Report script.
    {MISSINGTEXT "0"}  // replace #Missing with 0
    <Link ((<LEV("Customer", "Lev0,Customer")) AND ( <IDESC("All Customers")))
    <Link ((<LEV("Product", "Lev0,Product")) AND ( <IDESC("All Products")))
    <Link ((<LEV("Period", "Lev0,Period")) AND ( <IDESC("YearTotal")))
    FY14

    Hi ,
    I am getting below error message.
    "Report Script execution Failed. Please see message panel for details " and in message panel It is not showing any details , just displaying Execute Report script Failed with date and time details.
    I also checked that FY14 do exist in the application and no duplicate FY14 member exist in the outline.
    Could you please suggest where would be the problem.

  • Run postflight script for Plugin - step failed for mac

    So when I try and install adobe flash player on my mac OS X version 10.5, I get a message saying "The following install step failed: run postflight script for plugin. Contact the software manufacturer for assistance.

    Hello,
    Flash Player no longer supports OS X 10.5. The last version to support OS X 10.5 is 10.3.183.90.  You can download an archive.dmg file containing this version from http://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html.  After downloading and extracting the files, you'll want to install the file 'flashplayer_10_3r183_90_mac_intel.dmg'.
    Maria

  • Script Works In Simulator, Fails After Project Build

    I have a DSP3 project that consists basically of the following:
    One menu with 5 buttons.
    5 tracks
    I wrote a script that uses SPRM8 to determine which button was last used and to display that button when the user returns to the menu.
    The script works fine when run in the Simulator. The last button used is always displayed. After building the project and testing it in DVD Player I find it doesn’t work. I burnt the project to a DVD+RW and tested in an actual DVD Player desk, but as expected it didn’t work.
    Works in Simulator, but not after being built.
    Can anyone suggest something I’ve either overlooked, or have gotten wrong?

    The question is, the script works in the DSP3 simulator, but not after the build.
    That's what I'm trying to figure out.
    Thanks Karen.
    I'm trying to set up the DVD so that you can jump back to the menu from any point in the track, and from any track, and still have the last active button displayed. And without going to the end of the track.
    Would your suggestion do this?
    Thanks Hal.
    What follows is the best I can do.
    Script "Button-Return" {
    Name "Button-Return"
    ObjectType "Script"
    SelectedState 0
    CommandsUsed 0
    CommandsFree 120
    ScriptCommandArray "ScriptCommandFolder" {
    Name "ScriptCommandFolder"
    ObjectType "Script Command Array"
    SelectedState 0
    ChildObjectType "Script Command"
    ScriptCommand "Script Command 1" {
    Name "Script Command 1"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Set GPRM
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType SPRM
    Script2ndArgumentSPRMRegister SPRM 8
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 0
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 0
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType =
    ScriptTarget notSet
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ScriptCommand "Script Command 2" {
    Name "Script Command 2"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Jump
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType GPRM
    Script2ndArgumentSPRMRegister SPRM 0
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 1
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 1024
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType <=
    ScriptTarget Button "001" of Menu "DW-Menu"
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ScriptCommand "Script Command 3" {
    Name "Script Command 3"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Jump
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType GPRM
    Script2ndArgumentSPRMRegister SPRM 0
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 1
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 2048
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType =
    ScriptTarget Button "002" of Menu "DW-Menu"
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ScriptCommand "Script Command 4" {
    Name "Script Command 4"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Jump
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType GPRM
    Script2ndArgumentSPRMRegister SPRM 0
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 1
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 3072
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType =
    ScriptTarget Button "003" of Menu "DW-Menu"
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ScriptCommand "Script Command 5" {
    Name "Script Command 5"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Jump
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType GPRM
    Script2ndArgumentSPRMRegister SPRM 0
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 1
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 4096
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType =
    ScriptTarget Button "004" of Menu "DW-Menu"
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ScriptCommand "Script Command 6" {
    Name "Script Command 6"
    ObjectType "Script Command"
    Size 0
    Duration 0
    SelectedState 0
    Comment ""
    CommandType Jump
    OperatorType mov
    Argument1 RegisterCell "GPRM 0"
    Script2ndArgumentType GPRM
    Script2ndArgumentSPRMRegister SPRM 0
    Script2ndArgumentSpecialValue Current Item
    Script2ndArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndArgumentImmediateValue 0
    Script2ndArgumentItemID notSet
    Compare 1
    CompareArgument1 RegisterCell "GPRM 0"
    Script2ndCompareArgumentType Immediate
    Script2ndCompareArgumentSPRMRegister SPRM 0
    Script2ndCompareArgumentSpecialValue Current Item
    Script2ndCompareArgumentGPRMRegister RegisterCell "GPRM 0"
    Script2ndCompareArgumentImmediateValue 5120
    Script2ndCompareArgumentItemID notSet
    CompareOperatorType =
    ScriptTarget Button "005" of Menu "DW-Menu"
    GotoTarget 1
    SubtitleEnabled 0
    SubtitleValue 1
    SubtitleVisible 0
    SubtitleGPRM RegisterCell "GPRM 0"
    AudioEnabled 0
    AudioValue 1
    AudioGPRM RegisterCell "GPRM 0"
    AngleEnabled 0
    AngleValue 1
    AngleGPRM RegisterCell "GPRM 0"
    SetSystemIsImmediate 1
    ButtonIndex 0
    GPRMTarget 0
    CounterMode 0
    ParentalLevel 0
    ViewInfo "ViewInfo" {
    Name "ViewInfo"
    ObjectType "View Info"
    SelectedState 0
    ViewInfoPosition (X:300 Y:-220)
    ViewInfoSize (X:0 Y:0)
    ViewInfoColor 0
    ViewInfoGroup notSet
    ViewThumbframeTime 0
    ViewInfoAttentionLevel 0
    ViewInfoIsSet 1
    }

  • PowerShell provider MSFT_ScriptResource failed to execute Test-TargetResource functionality with error message: The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a C

    I found this article, and used it, and it seems as though my script resource node items are being properly expanded, and honestly I think it passes through being loaded up, but then when I go to start it, it fails. so let me put up some links with code and
    error messages for you all.
    http://social.technet.microsoft.com/Forums/exchange/en-US/2eb97d67-f1fb-4857-8840-de9c4cb9cae0/dsc-configuration-data-for-script-resources
    Ok, so here is my configuration. The idea is that I need some specific permissions set on a specific registry key on my sql servers. This is so I can do the SQL LowPriv monitoring. I'm just setting one key right now, premise is once this is working I can
    then duplicate that for the remaining keys.
    https://gist.github.com/jeffpatton1971/1bfb19a06782f0975f6e
    When I paste that into the prompt it appears to be perfectly happy
    https://gist.github.com/jeffpatton1971/3aeb568130988a460738
    In fact, the resulting MOF file looks ok to me
    https://gist.github.com/jeffpatton1971/a94858f0c1e9e5612f90
    When I attempt to start the configuration on my local machine, which has the key this is what I get
    https://gist.github.com/jeffpatton1971/82da888bb7aac31ef4ad
    lol...well so it's a different error now, I removed a credential param that I wasn't using, so now i'm left with an & that I can't seem to find anywhere... at any rate...so now my issue has become where is the bad &?I'm going back to the internets
    to see if there is something akin to this error, and i'm open to any questions the most pressing one is why are my scriptblocks all smooshed together? well, early on I was wondering if random whitespace and extra characters were mucking up the waters. I may
    actually dial down the script and see if I can add things until I get the error as well.
    Jeffrey S. Patton Jeffrey S. Patton Systems Specialist, Enterprise Systems University of Kansas 1001 Sunnyside Ave. Lawrence, KS. 66045 (785) 864-0242 | http://patton-tech.com

    I looked at the first link, and it looks like you might be missing quotes around the $Node.ActionAccount part of the comparison, which would cause the script block creation to fail. Maybe change the sections that look like this:
    Where-Object {$_.IdentityReference -eq $Node.ActionAccount}
    to this:
    Where-Object {$_.IdentityReference -eq '$Node.ActionAccount'}
    If you're looking to do permission changes with DSC, I'm actually looking for testers for my
    PowerShellAccessControl module. The 3.0 beta has two DSC resoruces: cAccessControlEntry (lets you make sure an ACE is present or absent) and cSecurityDescriptor (lets you specify an SDDL string for an object). The current cSecurityDescriptor is going to
    be called cSecurityDescriptorSddl in a future release, and a new cSecurityDescriptor is going to be added that lets you control the different sections without using SDDL. If you were to use it, I think you could change your configuration to the following (at
    least for the permission part):
    Configuration SQLLowPrivRegistry {
    param(
    [string[]] $ComputerName = "localhost"
    Import-DscResource -Module PowerShellAccessControl
    Node $ComputerName {
    cAccessControlEntry TopLevelActionAccountPermissions {
    Ensure = "Present"
    Path = "HKLM:\Software\Microsoft\Microsoft SQL Server\"
    ObjectType = "RegistryKey"
    AceType = "AccessAllowed"
    AccessMask = ([System.Security.AccessControl.RegistryRights]::ReadKey)
    Principal = "DOMAIN\SqlDefaultAction_sa"
    What you're doing should work just fine, so I'm not saying you need to use mine. If you do get a chance to look at it, though, please let me know what you think (or if it even works). There are two scripts in the examples folder of the module that demo more
    with the two resources (hopefully that will do until I finalize the documentation).

  • RMAN script failed while creating Data Guard 11g

    Hi Friends,
    I am creating Physical Standby (11g) using RMAN (ACTIVE) on windows using the doc : Step by Step Guide on Creating Physical Standby Using RMAN DUPLICATE...FROM ACTIVE DATABASE [ID 1075908.1]
    The folder structure on Primary DB and on Physical Standby is totally different.
    while executing RMAN script i got errors for lot of locations and i specified the proper location in RMAN script itself (ex set diagnostic_dest = 'c:\app\' , set db_recovery_file_dest='C:\app\flash_recovery_area')
    Location of control files on Primary DB:
    D:\oradata\MESSTG\CONTROL01.CTL
    D:\oradata\flash_recovery\messtg\MESSTG\CONTROL02.CTL
    Location of control files (planned) on Physical Standby DB:
    C:\app\oradata\MESSTDBY\CONTROL01.CTL
    C:\app\flash_recovery_area\MESSTDBY\CONTROL02.CTL
    How to specify control file location of Physical standby in set control_files?
    Also i have 2 control files on Primary DB so do i need to specify both the control files , if so how?
    I tried different combination in RMAN script but all are failed:
    set control_files='D:\oradata\MESSTG\CONTROL01.CTL','C:\app\oradata\MESSTDBY\CONTROL01.CTL'
    RMAN Error is :
    while using set control_files=: C:\app\oradata\MESSTDBY\CONTROL01.CTL
    contents of Memory Script:
    backup as copy current controlfile for standby auxiliary format 'D:\ORADATA\MESSTG\CONTROL01.CTL';
    restore clone controlfile to 'C:\APP\ORADATA\MESSTDBY\CONTROL01.CTL' from
    'D:\ORADATA\MESSTG\CONTROL01.CTL';
    executing Memory Script
    Starting backup at 16-APR-13
    channel prmy1: starting datafile copy
    copying standby control file
    released channel: prmy1
    released channel: prmy2
    released channel: prmy3
    released channel: prmy4
    released channel: stby
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of Duplicate Db command at 04/16/2013 14:18:41
    RMAN-03015: error occurred in stored script Memory Script
    RMAN-03009: failure of backup command on prmy1 channel at 04/16/2013 14:18:41
    ORA-17628: Oracle error 19505 returned by remote Oracle server
    RMAN>
    Error 2)
    while using set control_files='D:\oradata\MESSTG\CONTROL01.CTL','C:\app\oradata\MESSTDBY\CONTROL01.CTL'
    contents of Memory Script:
    backup as copy current controlfile for standby auxiliary format 'D:\ORADATA\MESSTG\CONTROL01.CTL';
    executing Memory Script
    Starting backup at 16-APR-13
    channel prmy1: starting datafile copy
    copying standby control file
    released channel: prmy1
    released channel: prmy2
    released channel: prmy3
    released channel: prmy4
    released channel: stby
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of Duplicate Db command at 04/16/2013 13:22:33
    RMAN-03015: error occurred in stored script Memory Script
    RMAN-03009: failure of backup command on prmy1 channel at 04/16/2013 13:22:33
    ORA-17628: Oracle error 19505 returned by remote Oracle server
    RMAN>
    Regards,
    DB

    Hi,
    Can you paste here you rman script ?
    I think following script can help you.
    duplicate target database for standby
    from  active database
    spfile
      set "control_files"="d:\oradata\<standbydbuniquename>\CONTROL01.CTL"
      set "db_name"="<DBNAME>"
      set "db_unique_name"="<STANBYD DBA UNIQUENAME>"
      set "db_file_name_convert"="C:\app\oracle\oradata\<dbname>","d:\oradata\<standbydbuniquename>"
      set "log_file_name_convert"="C:\app\oracle\oradata\<dbname>","d:\oradata\<standbydbuniquename>"
      set "db_recovery_file_dest"="D:\fast_recovery_area"
    nofilenamecheck;C:\app\oracle\oradata\<dbname> - it is primary database dafiles location
    D:\oradata\<standbydbuniquename> - it is standby database datafile location.
    Don't forget creation of diagnostinc dests.
    Regards
    Mahir M. Quluzade

  • Getting Safari document title/location via Scripting Bridge fails

    I'm trying to get the URL and document title from the topmost Safari document/tab. I have an AppleScript and an objective-c version using the Scripting Bridge framework.
    Both versions work fine for most web pages, however when I open a Youtube video in full-screen mode, the Scripting Bridge based version fails (error below). The Apple Script works fine for "normal" and full-screen Safari windows.
    Can anyone see what is wrong with the Scripting Bridge code below to cause it to fail for full-screen Safari windows?
    Here the code (I omitted error checking for brevity):
    AppleScript:
    tell application "Safari"
    # Give us some time to open video in full-screen mode
    delay 10
    do JavaScript "document.title" in document 0
    end tell
    Scripting Bridge:
    SafariApplication* safari = [SBApplication applicationWithBundleIdentifier:@"com.apple.Safari"];
    SBElementArray* windows = [safari windows];
    SafariTab* currentTab = [[windows objectAtIndex: 0] currentTab];
    // This fails when in full-screen mode:
    id result = [safari doJavaScript: @"document.title" in: currentTab];
    NSLog(@"title: %@", result);
    Scripting Bridge error (with added line breaks):
    Apple event returned an error. Event = 'sfri'\'dojs'{
    '----':'utxt'("document.title"),
    'dcnm':'obj '{ 'want':'prop',
    'from':'obj '{ 'want':'cwin',
    'from':'null'(),
    'form':'indx',
    'seld':1 },
    'form':'prop',
    'seld':'cTab' }
    Error info = {
    ErrorNumber = -1728;
    ErrorOffendingObject = <SBObject @0x175c2de0:
    currentTab of SafariWindow 0 of application "Safari" (238)>;
    I could not find details about the given error code. It complains about 'currentTab' which shows that the JavaScript event at least made it all the way to Safari. I assume that the current tab receives the event, but refuses to run the JS code, because it is in full-screen mode. However, why does this work for an AppleScript? Don't they use the same code path eventually?
    Thanks!
    Rico

    1) I have not yet looked into Apple events, but have read elsewhere that it is not the most fun thing to deal with. I might give it a shot after having tried 2 + 3
    Not really, but your command isn't too complicated so it'd be quite doable using the AEBuild* functions/NSAppleEventDescriptor and AESendMessage. If you go the AEBuild* route, you can use AEDebug to sniff Apple events sent from AppleScript for clues - the AEPrint syntax is similar to that used by AEBuild* functions. Mostly it's just tedious; first learning to use the lower-level APIs, then writing the code for them.
    2) Using NSAppleScript was actually my first approach, but having to compile each script before I run it seems a waste. Maybe I can try a pre-compiled script and hand in the JavaScript as a parameter.
    That's the safe and efficient way to parameterize AppleScripts. Although unless you're doing this to support user-supplied scripts, by the time you've packed what you need into an NSAppleEventDescriptor, a bit more code and you could probably send it directly to Safari yourself.
    3) I had tried ASTranslate in the past. I have not actually compiled the generated code, but seeing this makes me wonder about the difference between the Apple Script and Scripting Bridge.
    I've written about that in various places, e.g.:
    http://stackoverflow.com/questions/1309958/avoiding-applescript-through-ruby-rb- appscript-or-rubyosa/1316563#1316563
    Basically, Apple event IPC is RPC plus first-class queries, not OO as a lot of folks assume. AppleScript's OO-like syntax is a bit of a red herring, and the AS interpreter uses various tricks (e.g. implict gets) to further this illusion. So it looks and feels like OO, but only up to a point, and beyond that folks get totally confused when it does something decidedly un-OO. Hence AppleScript's reputation amongst professional programmers as being confusing and unpredictable. (It's actually reasonably straightforward and predictable one you know how it really works; it's just that figuring it out for yourself takes a lot of time and effort, since it's completely messed with your preconceptions by then. Ugh.)
    Apple had an opportunity to learn their lessons from AS's approach, but whether due to politics, hubris or naivety they decided to dress up SB to look even more Cocoa-/OO-like. Which just means there's a bigger impedance mismatch between the SB API and the AE API hidden beneath the surface. So the abstractions are thicker and leakier, and the obfuscations more impenetrable when you do run into problems. By comparison, objc-appscript minimizes the syntactic sugar and wears much of Apple events' inherent weirdness on its sleeve. So while it takes a bit of getting used to if you're from an OO background, once you do get the hang of it it (nearly always) just works.

  • Network access fails in script after Terminal logout/disconnect

    I have a script which is running in the background (script invoked using amp[&]) and occasionally it attempts to access a URL (using wget, lynx etc). This works fine when I start the script, but as soon as I logout of the Terminal from which the script was initiated it fails. Enclosed is a small demonstration reproducing the problem using a csh script. To reproduce the problem on OS X 10.5.8 run the script from command line in background:
    script.csh &
    It will then create duplicate files with different filenames on disk. Exit the command line window and login again... it is no longer producing the files, but the process is still running.
    Regards,
    Andreas
    #!/bin/tcsh
    any_label:
    wget http://gcn.gsfc.nasa.gov/gcn3/10146.gcn3
    goto any_label

    In theory it should not matter what shell launchd starts up with, as you have #!/bin/tcsh at the beginning of your script.
    If you suspect that you do not have the correct environment variables, then add the following to your script:
    printenv >/tmp/myscript.enviroment.txt
    Then go look at the file after your script has run. Add any other debugging information to the .txt file that might be helpful in diagnosing your problem.
    Another thing you might look at is your PATH when your script runs. launchd generally has a very reduced PATH setup. It might be that wget is not even being found. For example, on my Leopard system, the only version of wget I have is from <http://fink.sf.net> and stored in /sw/bin/wget, which is not normally in a default PATH. Mac OS X Leopard did not provide a copy of wget.
    I do not personally use launchd, I'm still a cron kind of guy, and I have any number of cron based scripts that run just fine, including one that uses "curl" (a similar utility to wget).

  • Import multiple PST files for a single user into archive mailbox is failing

    Most of our users that have PST files have between 2 and 10 separate PST files named by either subject or year.
    I am trying to find a way to automate using New-MailboxImportRequest to import ALL of the psts found within a user's shared folder.
    I found a script that others says should work, but it doesn't work for me.
    One of the problems is that that the commands are spread over several lines.  I have tried entering it line by line but it still errors out.
    First, how can I run a multi-line command?
    Second, can anyone see an error in the script below?
    I do change the server name, share name and mailbox alias to the actual values before running.
    I am trying the script below and it fails:
    $filepath=”\\server\usersfileshare”
    $items=get-childitem -path $filepath -filter *.pst
    foreach($item in $items)
    {$location=$filepath+”\”+$item.Name
    New-MailboxImportRequest -mailbox mailboxalias -isarchive -filepath $location}
    The error says:
    Unexpected token 'items' in expression or statement.
    At line:1 char:51
    + $filepath="\\servername\usersfileshare" $items <<<< =get-childitem -path $filepath -filter *.pst foreach ($item i
    n $items) {$location=$filepath+"\"+$item.Name New-MailboxImportRequest -mailbox mailboxalias -isarchive -filepath $location
        + CategoryInfo          : ParserError: (items:String) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken

    You can have check this
    thread which has been discussed earlier with similar concern.
    Here is another helpful
    Blog reference. Please check this.
    Moreover, you can have also check this
    automated option which would be very helpful in terms of importing PST files into live exchange mailboxes.

  • How to call a shell script from a java code

    Hello can any one suggest me how to call a shell script from a java program that takes three parameters.
    i have a shell script (msp_restore_gui) when i run this script in the command line in a RHEL5 ,SUSE10 and Debian machine it works fine .I even tested to call it from a java program and it also worked fine but when i used the same in a J2ee application where the user when clicks the restore button in a webserver this inturn sends the request to a java file named BackupManager.java where i call the shell script.But here it fails.Waiting for your suggestions.If you want i can put the code also here

    yes the script is in /usr/local/mss/tools/backup and the script (msp_restore_gui) is as follows
    #!/bin/sh
    TIMESTAMP=`date +%d_%b_%y-%H-%M`
    touch /var/backups/mss/mss_restore_"$TIMESTAMP".log
    LOGFILE="/var/backups/mss/mss_restore_"$TIMESTAMP".log"
    ### Explode tgz file
    cd /
    # Checks to be done:
    # root login
    # assume he passes the parameter as msp_backup_<timestamp>
    # check for the existence of the .tz and fileList.txt
    # Checking for the root login and if not logged on as root
    # permission will be denied to execute this script
    logmsg(){
    echo "`date`: $*" >> $LOGFILE 2>&1
    echo "$*"
    #usage of this script
    while [ $#  -ne 0 ]
    do
    case $1 in
    -n)
    shift
    ARCHIVE_NAME=`find / \( -name "$1.tz" -o -name "$1.tgz" \) 2>/dev/null`
    FILE_NAME=`find / -name $1_filesList.txt 2>/dev/null`
    if [ x$ARCHIVE_NAME = x -a y$FILE_NAME = y ]
    then
    logmsg "ERROR: Files not found, Restore cannot proceed"
    usage
    else
    tar tvzf $ARCHIVE_NAME > /dev/null 2>&1
    if [ $? -ne 0 ]
    then
    echo "ERROR: The tar file $ARCHIVE_NAME is not proper. Restore cannot proceed"
    exit 1
    else
              echo "Backedup files are present, proceeding with restore......" >> $LOGFILE 2>&1
    fi
    fi
    usage
    SKIP_CLEANUP=1
    STATUS=1
    exit
    esac
    shift
    done
    rm -rf ./newfile
    curr_ver_file="/usr/local/mss/etc/version"
    /usr/local/mss/tools/backup/check_version $curr_ver_file $FILE_NAME
    ret_code=$?
    echo "Exit value of check_version is $ret_code"
    if [ "$ret_code" != 0 ]
    then
    logmsg "MSP Version not matching. Exiting from restore now...."
    errormsg=`cat /usr/local/mss/temp/ver_err_mesg`
    logmsg $errormsg
    rm -f /usr/local/mss/temp/ver_err_mesg
    exit 1
    else
    echo "Version check is successful"
    fi
    #### ShutDown MSS########
    /etc/init.d/mss stop
    sleep 2
    ### Shutdown semm
    /etc/init.d/semm stop
    sleep 2
    rm -rf `grep -v "MSP Version:" $FILE_NAME`
    logmsg "MSP restore in progress......"
    tar mxvfz $ARCHIVE_NAME >> $LOGFILE
    sleep 5
    ### Call mysql restore script
    /usr/local/mss/bin/mysql_alldb_restore.sh >> $LOGFILE 2>&1
    if [ $? -ne 0 ]; then
    logmsg "Database restore Failed. Cannot proceed further"
    exit 1 ;
    else
    logmsg "Database restore Succeeded."
    fi
    ### Remove DB Dump Files
    rm -f /var/lib/mysql-dumps/*
    ### Trigger cleanup of airprism database tables
    #touch /usr/local/mss/airprism/server/config/reinitdb
    ### Trigger re-import of software packages
    touch /usr/local/mss/swdepot/reimport
    ### Remove log files under the "apps" directory
    find /usr/local/mss/apps -name '*.log*' | xargs rm -f
    find /usr/local/mss/logs -follow -name '*[._]log*' | xargs rm -f
    if [ $? -ne 0 ]; then
    logmsg "MSP restore Failed. Cannot proceed further"
    exit 1 ;
    else
    logmsg "MSP restore Succeeded."
    fi
    # reinstall_patch is touched so that patches are re-installed after restoring of MSP.
    touch /usr/local/mss/patch/bin/reinstall_patch
    ##### Start MSS
    logmsg "restarting MSP server "
    /etc/init.d/mss start
    sleep 5
    ### Start semm
    /etc/init.d/semm start
    sleep 5
    logmsg "MSP server is now restarted"
    my jsp page backup.jsp is as follows
    <%@taglib uri="portlet.tld" prefix="uif" %>
    <%@taglib uri="msp-console.tld" prefix="msp" %>
    <uif:defineObjects/>
    <%@page import="javax.portlet.*" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="java.util.Vector" %>
    <%@ page import="java.text.DateFormat" %>
    <%@ page import="com.symbol.mss.console.admin.backup.BackupManager" %>
    <%@ page import="com.symbol.mss.console.admin.system.SystemInfoPortlet" %>
    <%
         String STYLE_NAME = request.getParameter("style");
         if (STYLE_NAME == null) STYLE_NAME = STYLE_DEFAULT;
         final String ua = request.getHeader("User-Agent");
         BackupManager helper = null;
         PortletSession portletSession = renderRequest.getPortletSession();
         helper = (BackupManager)portletSession.getAttribute("helper");
         if (helper == null) {
              //System.err.println("Created new BackupManager");
              helper = new BackupManager();
              portletSession.setAttribute("helper", helper);
         final BackupManager backupManager = helper;
         String action = "";
         final String backupName = renderRequest.getParameter("backupName");
         String completePath = backupManager.getBackupDir() + backupName + backupManager.getBackupFileExt();
         if (backupName != null) {
              action = "backup";
         if(backupManager.backup(backupName)) {
              SystemInfoPortlet.beginRestartMSP();
              } else {
                   action = "backuperror";          
         final String cmd = renderRequest.getParameter("submitButton");
    final String selectedBackup = renderRequest.getParameter("selectedBackup");
    int tarFileStatus =0;
    String backupTarFile ="";
    String backupFileList ="";
         if ("Restore".equals(cmd)) {
    if (selectedBackup != null) {
         tarFileStatus = backupManager.verifyTarFile(selectedBackup);
         //backupTarFile = backupManager.getRestoreFile(Integer.parseInt(selectedBackup));
         //backupFileList = backupTarFile.substring(0, backupTarFile.lastIndexOf(backupManager.getBackupFileExt()))+"_filesList.txt";
                   if (tarFileStatus == 0){
         action = "restore";
         backupManager.restore(selectedBackup);
                        SystemInfoPortlet.beginRestartMSP();
              } else {
                   action = "error";
    } else if ("Remove".equals(cmd)) {
    backupManager.remove(Integer.parseInt(selectedBackup));
         DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
         PortletURL restoreURL = renderResponse.createActionURL();
    %>
    <%@ include file="/jsp/core/constants.jspf" %>
    <% if (action.length() > 0) {
         if ("backup".equals(action))
    %>
         <p>The MSP Appliance has been shut down in order to create the <%=backupName %> backup file,
              and will automatically restart as soon as the file has been created.
              To continue your work, please log out of the MSP Console, wait for the appliance
              to restart, and then log back in. The amount of time you'll have to wait for the
              MSP Appliance to come back online depends on the amount of information you have
              stored in the MSP Database.</p>
         <p>The full pathname for the backup file is: <%=completePath %></p>     
    <%     }
         else if ("restore".equals(action))
    %>
         <p>The MSP Appliance has been shut down in order to restore from the <%=backupTarFile%> backup file,
              and will automatically restart as soon as the restore is complete.
              To continue your work, please log out of the MSP Console, wait for the appliance
              to restart, and then log back in. The amount of time you'll have to wait for the
              MSP Appliance to come back online depends on the amount of information you have
              stored in the MSP Database.</p>     
    <%     } else if ("backuperror".equals(action)) { %>
              <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> Errors occurred while taking back up of MSP. Please see the backup service log file for more details.
              </P>
    <%     } else if ("error".equals(action)) {
              if (tarFileStatus == 4) { %>
                   <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors. This backup can't be restored. Please restore a valid back up.
                   </P>
              <%} else if (tarFileStatus == 3) { %>
                   <p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file list <%=backupFileList %> is missing. This file is required to restoring backup. Please get the backup file list and proceed with restoring backup.</p>
              <%} else if (tarFileStatus == 2) { %>
                   <p> <img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors and the backup file list <%=backupFileList%> is missing. This backup can't be restored. </p>
              <%} %>
    <%     }
    } else { %>
    <p><strong>Note</strong>: Both backup and restore will shut down MSP temporarily. MSP will be unable to collect data from devices, send notifications, or provide MSP Console access during this time. When the backup or restore operation is complete, MSP will come back online automatically.</p>
    <h3>Backup</h3>
    <form action="<%= restoreURL.toString() %>" method="post">
    <p>Please provide a name for your backup. MSP will provide the date automatically in the list of backups.</p>
    <p><label for="<uif:namespace />backupName">Name</label> <input type="text" name="<uif:namespace />backupName" id="<uif:namespace />backupName" size="20" maxlength="256" /> <input type="submit" name="<uif:namespace />submitButton" value="Back up now" onclick="return <uif:namespace/>validateName()"/></p>
    </form>
    <h3>Restore</h3>
    <p>This will restore all databases (device assets, collected device data, software packages, policies, etc.) to their state as of the time the backup was made. Changes since then <em>except for backups</em> will be destroyed.</p>
    <%
    Vector restoreList = helper.getRestoreEntries();
    Vector restoreDates = helper.getRestoreDates();
    Vector restoreVersions = helper.getRestoreVersions();
    Vector filesStatus = helper.getBackupFilesStatus();
    %>
    <% if (restoreList.size() == 0) { %>
    <p>There are no backups currently available.</p>
    <% } else { %>
    <form action="<%= restoreURL.toString() %>" method="post">
    <table class="input-radios" id="<uif:namespace />existingBackups">
    <thead>
    <tr>
    <th></th>
    <th>Name</th>
    <th>Date</th>
    <th>MSP Version</th>
    <th>Remarks </th>
    </tr>
    </thead>
    <tfoot>
    <tr>
    <td colspan="4" class="actionsOnSelected">
    <input type="submit" name="<uif:namespace />submitButton" value="Restore" onclick="return confirm('This action requires MSP and all related services to be shut down. Console will be unavailable if the request is submitted. The server will restart automatically once restore has been completed.');" />
    <input type="submit" name="<uif:namespace />submitButton" value="Remove" onclick="return confirm('This action will remove the backup archive. You will no longer be able to restore this backup. Continue?');" />
    </td>
    </tr>
    </tfoot>
    <tbody><%-- First one (most recent) is checked by default. Every other row has class="portlet-section-alternate". Note that each ID must be unique and must match the value of the "for" attribute on the corresponding "label" element. --%>
    <%
    for (int i = 0; i < restoreList.size(); i++) {
    %>
    <tr <%= (i % 2 == 1) ? " class=\"portlet-section-alternate\"" : "" %>>
    <td><input type="radio" name="<uif:namespace />selectedBackup" value="<%= i %>" id="<uif:namespace />selectedBackup-<%= i %>" <%= (i == 0) ? "checked=\"checked\"" : "" %> /></td>
    <td><label for="<uif:namespace />selectedBackup-<%= i %>"><%= restoreList.elementAt(i) %></label></td>
    <td><%= dateFormat.format((Date)restoreDates.elementAt(i)) %></td>
    <td><%= restoreVersions.elementAt(i) %></td>
    <td><%= filesStatus.elementAt(i) %></td>
    </tr>
    <%
    %>
    </tbody>
    </table>
    </form>
    <% } %>
    <% } %>
    <script type="text/javascript">
    <!--//--><![CDATA[//><!--
    function <uif:namespace/>validateName() {
    var name =document.getElementById("<uif:namespace />backupName");
    var msg= "<msp:i18n key="BackupMsg"/>";
    var str=name.value;
    var re = /^[A-Za-z0-9_]+$/;
    if (!str.match(re)) {
         alert(msg);
         name.focus();
         return false;
         } else {
    return confirm('This action requires MSP and all related services to be shutdown. Console will be unavailable if the request is submitted. The server will restart automatically once backup has been completed.');
    //--><!]]>
    </script>
    and my BackupManager.java is as follows where the code in bold and italic is called the restore()
    //============================================================================
    // Symbol Technologies P R O P R I E T A R Y S O U R C E C O D E
    // C O N F I D E N T I A L
    // Copyright (c) 2003 Symbol Technologies. All Rights Reserved.
    // All information contained herein is the property of Symbol Technologies,
    // or its Licensors, and are protected copyrights and trade secrets, and may
    // be covered by U.S. patents. Any reproduction or dissemination of any
    // portion of this document, of the software, or other works derived from it
    // is strictly forbidden unless prior written permission is obtained from
    // Symbol Technologies.
    //============================================================================
    package com.symbol.mss.sdf.services.backup;
    import java.io.*;
    import java.sql.Time;
    import java.text.DateFormat;
    import java.util.logging.FileHandler;
    import java.util.logging.Formatter;
    import java.util.logging.LogRecord;
    import java.lang.Process;
    import java.util.*;
    import org.apache.avalon.framework.configuration.Configurable;
    import org.apache.avalon.framework.configuration.Configuration;
    import org.apache.avalon.framework.configuration.ConfigurationException;
    import org.apache.avalon.framework.logger.LogEnabled;
    import org.apache.avalon.framework.logger.Logger;
    import com.symbol.mss.sdf.admin.AdministratorService;
    import com.symbol.mss.sdf.backup.*;
    import com.symbol.mss.sdf.data.*;
    * @author nramaiah
    * Service to perform scheduled backups of the system state.
    public class BackupManager implements BackupService, DataHandler,
    LogEnabled, Configurable {
    // MSS Home Path
    private static String mssHome = System.getProperty("phoenix.home", File.separator + "usr" +
    File.separator + "local" +
    File.separator + "mss" +
    File.separator);
    // Backup related definitions
    private static final String BACKUP_LIST_FILE_NAME = "conf" + File.separator + "files_to_backup.txt";
    private static final String BACKED_UP_LIST_FILE_NAME_SUFFIX = "_filesList.txt";
    private static final String BACKUP_LOCATION = File.separator + "var" + File.separator + "lib" +
    File.separator + "mss-backups" + File.separator;
    private static final String BACKUP_PARTITION = File.separator + "var" + File.separator + "lib";
    private static final String VERIFY_BACKUP = File.separator + "usr" + File.separator + "local" +
                                                           File.separator + "mss" + File.separator+"tools"+
                                                           File.separator+"backup"+File.separator+"verifyBackup.sh";
    // DB backup/restore related definitions
    private static final String DB_DUMP_LOCATION = File.separator + "var" + File.separator +
    "lib" + File.separator +
    "mysql-dumps" + File.separator;
    private static final String DB_BACKUP_SCRIPT = "bin" + File.separator + "mysql_alldb_backup.sh";
    private static final String DB_RESTORE_SCRIPT = "bin" + File.separator + "mysql_alldb_restore.sh";
    // Private variables
    private AdministratorService m_admin = null;
    private Logger m_logger = null;
    private String backupLocation = null;
    private String backupListFileName = null;
    private String backupPartition = null;
    private int backupPartitionLimit = 90;
    private String dbDumpLocation = null;
    private String dbBackupScript = null;
    private String dbRestoreScript = null;
    private List servicesBackupList = null;
    private String tarFileExtension =".tgz";
    private String errFileExtension =".err";
    private int exitValue=0;
    * Default Constructor
    public BackupManager() {
    servicesBackupList = new ArrayList();
    * Set the administrator service implementation. Link established by Broker service.
    * @param admin reference to an implementation of AdministratorService
    public void setAdministrator(AdministratorService admin) {
    m_admin = admin;
    * Set the job publisher service implementation. Link established by Broker service.
    * @param jobPublisher reference to an implementation of JobPublisherService
    public void setJobPublisher(DataChannel jobPublisher) {
    jobPublisher.subscribe(this);
    * Gets the backup manager object.
    * @return backup manager object
    public BackupService getBackupService() {
    return this;
    * Service lifecycle method.
    * @param logger logger object to be used by the service
    public void enableLogging(Logger logger) {
    m_logger = logger;
    * Service lifecycle method.
    * @param configuration service configuration object
    public void configure(Configuration configuration) throws ConfigurationException {
    // Verify MSS Home path
    if (!mssHome.endsWith(File.separator))
    mssHome += File.separator;
    // Get the location where the backup file needs to be placed
    backupLocation = configuration.getChild("BackupLocation").getValue(BACKUP_LOCATION);
    // Verify backup directory path
    if (!backupLocation.startsWith(File.separator))
    backupLocation = mssHome + backupLocation;
    if (!backupLocation.endsWith(File.separator))
    backupLocation += File.separator;
    // Get the file listing the files/directories to be backed up
    backupListFileName = configuration.getChild("FilesList").getValue(BACKUP_LIST_FILE_NAME);
    // Verify backup list file name path
    if (!backupListFileName.startsWith(File.separator))
    backupListFileName = mssHome + backupListFileName;
    // Get the partition where the backups are kept
    backupPartition = configuration.getChild("BackupPartition").getValue(BACKUP_PARTITION);
    // Verify backup partition path
    if (!backupPartition.startsWith(File.separator))
    backupPartition = File.separator + backupPartition;
    if (backupPartition.endsWith(File.separator))
    backupPartition = backupPartition.substring(0, (backupPartition.length()-1));
    // Get the limit on the amount of free space on the backup partition
    backupPartitionLimit = configuration.getChild("BackupPartitionLimit").getValueAsInteger(backupPartitionLimit);
    // Get the location where the DB dump files will be placed
    dbDumpLocation = configuration.getChild("DBDumpLocation").getValue(DB_DUMP_LOCATION);
    // Verify DB dump directory path
    if (!dbDumpLocation.startsWith(File.separator))
    dbDumpLocation = mssHome + dbDumpLocation;
    if (!dbDumpLocation.endsWith(File.separator))
    dbDumpLocation += File.separator;
    // Get the name of DB dump backup script
    dbBackupScript = configuration.getChild("DBBackupScript").getValue(DB_BACKUP_SCRIPT);
    // Verify backup script path
    if (!dbBackupScript.startsWith(File.separator))
    dbBackupScript = mssHome + dbBackupScript;
    // Get the name of DB dump restore script
    dbRestoreScript = configuration.getChild("DBRestoreScript").getValue(DB_RESTORE_SCRIPT);
    // Verify restore script path
    if (!dbRestoreScript.startsWith(File.separator))
    dbRestoreScript = mssHome + dbRestoreScript;
    * Individual services can supply a list of files/directories to be backed up.
    * These are files apart from the files specified in conf/files_to_backup.txt and
    * will be backed up as well.
    * @param files list of files/directories
    public void filesToBackup(List files) {
    synchronized(this) {
    if (files != null) {
    if (files.size() > 0) {
    // Add the list contents to the current backup list
    for (int i=0; i<files.size(); i++) {
    String tStr = (String)files.get(i);
    // Check for absolute or relative path
    if (tStr.startsWith(File.separator))
    servicesBackupList.add(tStr);
    else
    servicesBackupList.add(mssHome + tStr);
    else
    m_logger.info("Empty list of filenames. Nothing added.");
    else
    m_logger.info("Null list of filenames. Nothing added.");
    * Individual services can supply a list of files/directories to be backed up.
    * Specified files will be added to the file defining the list of files to be backed up.
    * @param files list of files/directories
    private void persistFilesToBackup(List files) {
    synchronized(this) {
    if (files != null) {
    if (files.size() > 0) {
    // Add the list of files provided to the end of file
    try {
    File file = new File(backupListFileName);
    if ((file == null) || (!file.exists()))
    file.createNewFile();
    // Seek to the end of the file
    RandomAccessFile rFile = new RandomAccessFile(file, "rw");
    if (rFile != null) {
    rFile.seek(rFile.length());
    // Write the list contents to the file
    for (int i=0; i<files.size(); i++) {
    String tStr = (String)files.get(i);
    // Check for absolute or relative path
    if (tStr.startsWith(File.separator))
    rFile.writeBytes(tStr + "\n");
    else
    rFile.writeBytes(mssHome + tStr + "\n");
    else
    m_logger.error("Error opening file " + backupListFileName);
    rFile.close();
    catch (Exception ex) {
    ex.printStackTrace();
    m_logger.error("Error adding entries to file " + backupListFileName, ex);
    else
    m_logger.info("Empty list of filenames. Nothing added.");
    else
    m_logger.info("Null list of filenames. Nothing added.");
    * Command to be run during the backup process. Individual services can
    * provide shell commands that will be executed before backing up the files.
    * @param command shell command to be executed
    private void runCommand(String command) {
    * Creates a shell script at the specified location that will backup the
    * files listed in the List passed in.
    * @param scriptFileName location where the script needs to be created
    * @param backupFileName name for the tar file being created
    * @param backupList list of files to be backed up
    private void createBackupScript(String scriptFileName, String backupFileName, ArrayList backupList) throws Exception {
    // Create a new StringBuffer to build the contents to be written to the script file
    StringBuffer buffer = new StringBuffer();
    // Add the initial comment in the start script
    buffer.append("#!/bin/sh\n" + "set -x\n\n");
    // Check if the partition has enough space
    buffer.append("### Check if the partition has enough space\n" +
    // "diskUsed=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
                   " diskUsed=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +     
    "echo \"Partition " + backupPartition + " is $diskUsed% used.\"\n" +
    "if [ \"$diskUsed\" -lt \"" + backupPartitionLimit + "\" ]\nthen\n" +
    " echo \"Starting backup...\"\n\n");
    // Shutdown semmd
    buffer.append(" ### Shutdown semm\n" + " /etc/init.d/semm stop\n" +
    " sleep 2\n\n");
    // MSP Limited release and earlier builds stop mysql DB and backup the
    // /var/lib/mysql directory as it is. Starting MSP 1.0 GA release, mysql
    // dump script will be integrated which will create sql scripts to
    // restore the database.
    // Check if mysql dump creation script exists
    File mysqlDumpScript = new File(dbBackupScript);
    if (mysqlDumpScript.exists()) {
    // MSP 1.0 GA and later releases
    // Run the script that will generate sql scripts that would re-create the DB as it is
    buffer.append(" ### Call mysql dump script\n" +
    " " + dbBackupScript + "\n\n");
    else {
    // MSP Limited release
    // Add command to shutdown mysql
    buffer.append(" ### Shutdown mysql\n" + " /etc/init.d/mysql stop\n\n");
    // Change to root directory and create the tgz file
    buffer.append(" ### Create tgz file\n" + " cd /\n");
    // Build up the tar file name from the current date and time
    String fileName = null;
    if ((backupFileName != null) && (backupFileName.length() > 0))
    fileName = backupFileName;
    else {
    // File name not provided by user, build one using the timestamp
    Calendar cal = Calendar.getInstance();
    Date date = cal.getTime();
    fileName = "MSS-"
    + DateFormat.getDateInstance().format(date).replaceAll(" ", "").replaceAll(",", "")+ "-"
    + (new Time(cal.getTimeInMillis())).toString().replaceAll(":", "").substring(0,4);
    String tarFileName = fileName + ".tgz";
    // Get the current MSP Version
    String mspVersion = getMSPVersion();
    // Gather all the files to be backed up. Add them to the tar command and
    // also dump them into the file maintaining the list of files being backed up
    String listStr = "";
    for (int i=0; i<backupList.size(); i++)
    listStr += (String)backupList.get(i) + "\n";
    // Dump the current MSP version and the list of files being backed up into a manifest file
    String listFileName = fileName + BACKED_UP_LIST_FILE_NAME_SUFFIX;
    RandomAccessFile file = new RandomAccessFile(backupLocation + listFileName, "rw");
    m_logger.info("List of files/directories being backed up:\n" + listStr);
    file.writeBytes("### MSP Version: " + mspVersion + " ###\n");
    file.writeBytes(listStr);
    file.close();
    // Add the tar command to the script
    buffer.append(" echo \"Creating " + backupLocation + tarFileName + "...\"\n" +
    " tar cvhfz " + backupLocation + tarFileName + " `grep -v \"MSP Version:\" " +
    backupLocation + listFileName + "`\n\n");
    // Check if free space on the backup partition has reduced below the limit
    // If enough space left, backup is retained, "mss" is made the owner of the files,
    // "backup" is made the group the files belong to,
    // permissions changed to be "0660" and
    // backup action declared a success
    // Else, backup files are deleted and declared a failure
    buffer.append(" ### Check if the partition has enough space left\n" +
    //" diskLeft=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
    " diskLeft=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +
    " echo \"Partition " + backupPartition + " is $diskLeft% used.\"\n" +
    " if [ \"$diskLeft\" -gt \"" + backupPartitionLimit + "\" ]\n" +
    " then\n" +
    " ### Failure\n" +
    " echo \"Partition " + backupPartition + " does not have enough space.\"\n" +
    " echo \"Backup " + backupLocation + tarFileName + " will be removed.\"\n" +
    " rm -f " + backupLocation + fileName + "*\n" +
    " echo \"Backup Failed.\"\n" +
    " else\n" +
                        " tar tvzf " + backupLocation + tarFileName + " > /dev/null 2>&1\n" +
    " if [ ! -s " + backupLocation + tarFileName + " -o $? -ne 0 ] \n" +
                        " then\n" +
                        " echo \"MSP Backup operation is not successful. The tar file " + backupLocation + tarFileName + " contains errors.\"\n" +
                        " echo \"Please take the backup again\"\n" +
                        "     touch "+backupLocation+fileName+".err\n" +
    " else \n" +
    " ### Success\n" +
    " ### Change the owner, group and permissions for the backup files\n" +
    " chown mss " + backupLocation + fileName + "*\n" +
    " chgrp backup " + backupLocation + fileName + "*\n" +
    " chmod 0660 " + backupLocation + fileName + "*\n" +
    " echo \"Backup Completed.\"\n" +
    " fi\n" +
    " fi\n\n");
    // MSP Limited release and earlier builds re-start mysql. Starting
    // MSP 1.0 GA release, mysql is not stopped and so re-start is not
    // needed. sql scripts created by the dump script get packed into
    // the tar file and so are deleted.
    // Check if mysql dump creation script exists
    if (mysqlDumpScript.exists()) {
    // MSP 1.0 GA and later releases
    // Remove DB dump files
    buffer.append(" ### Remove DB Dump Files\n" + " rm -f " + dbDumpLocation + "*\n\n");
    else {
    // MSP Limited release
    // Start mysql
    buffer.append(" ### Start mysql\n" + " /etc/init

  • System Image Utility always fails, why?

    Hi everyone,
    on my clean and fresh install of 10.7.4 Server the System Image Utility always fails to create an image. I want to create a NetInstall image and have put the OS X Lion Installer in /Applications. I can select it in SIU and choose to create a NetInstall image. It asks for the admin pw and always presents an error at the very end: Image creation failed. An unknown error has occured.
    If I select to create a NetBoot image instead it fails directly after clicking on the Create button with this slightly different message: Image creation failed. An error has occured. At least it’s no unknown error…
    Any ideas what might be causing this? I have succesfully created NetInstall images with 10.6 Server and 10.8 Server, but 10.7 Server somehow won’t play nice.
    Thanks
    Björn

    Hi Brian,
    I first deleted the Installer and redownloaded it from the App Store, just to make sure there was no problem with it. Even though I now have the 10.7.4 Installer (had 10.7.0 before) nothing has changed. I then went on to set the log level as suggested. I now get different errors based on the chosen log level.
    Log level set to debug:
    Image creation failed.
    *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
    Log level set to verbose:
    Image creation failed.
    An unknown error has occurred.
    I did not see anything helpful in the logs unfortunately. The only noticeable thing mentioned was: Failed to create image from installer media.
    Any additional ideas? I will attach both logs here, just in case.
    VERBOSE LOG:
    Starting image creation.
    Workflow Started (2012-09-08 14:08:00 +0200)
    Mac OS X Server 10.7.4 (11E53), System Image Utility 10.7.3 (543)
    Starting action: Define Image Source (1.3)
    Finished running action: Define Image Source
    Starting action: Create Image (1.6.2)
    Starting image creation process...
    Create NetInstall Image
    Initiating NetInstall from Installer media.
    Creating working path at /Users/vm/Desktop/NetInstall of Install Mac OS X Lion
    Creating disk image (Size: 4062 MB)
    Finalizing disk image.
    created: /Users/vm/Desktop/NetInstall of Install Mac OS X Lion/NetInstall.dmg
    Attaching disk image
    Copying /Volumes/Mac OS X Install ESD
    Preparing the kernel and boot loader for the boot image
    /Users/vm/Desktop/NetInstall of Install Mac OS X Lion/i386
    /Users/vm/Desktop/NetInstall of Install Mac OS X Lion/i386/x86_64
    Copying /Volumes/Mac OS X Install ESD/boot.efi
    Copying /Volumes/Mac OS X Install ESD/System/Library/CoreServices/PlatformSupport.plist
    Performing post install cleanup
    Detaching disk image
    "disk4" unmounted.
    "disk4" ejected.
    Correcting permissions. 501:20 /Users/vm/Desktop/NetInstall of Install Mac OS X Lion
    Script is done.
    Failed to create image from installer media.
    An unknown error has occurred.
    NetInstall creation failed.
    Image creation process finished...
    Stopping image creation.
    Image creation failed.
    DEBUG LOG:
    Starting image creation.
    Workflow Started (2012-09-08 13:59:22 +0200)
    Mac OS X Server 10.7.4 (11E53), System Image Utility 10.7.3 (543)
    Starting action: Define Image Source (1.3)
    Finished running action: Define Image Source
    Starting action: Create Image (1.6.2)
    Starting image creation process...
    Create NetInstall Image
    Initiating NetInstall from Installer media.
    progressPrefix="_progress"
    ++ progressPrefix=_progress
    scriptsDebugKey="DEBUG"
    ++ scriptsDebugKey=DEBUG
    imageIsUDIFKey="1"
    ++ imageIsUDIFKey=1
    mountPoint=""
    ++ mountPoint=
    ownershipInfoKey="501:20"
    ++ ownershipInfoKey=501:20
    destVolFSType="HFS+"
    ++ destVolFSType=HFS+
    installSource="/Volumes/Mac OS X Install ESD"
    ++ installSource='/Volumes/Mac OS X Install ESD'
    dmgTarget="NetInstall"
    ++ dmgTarget=NetInstall
    destPath="/Users/vm/Desktop/NetInstall of Install Mac OS X Lion"
    ++ destPath='/Users/vm/Desktop/NetInstall of Install Mac OS X Lion'
    dmgVolName="NetInstall"
    ++ dmgVolName=NetInstall
    . "${1}/createCommon.sh"
    + . /tmp/niutemp.Yv8Z6Mqx/createCommon.sh
    # createCommon.sh
    # Common functionality for the Image creation process.
    # sourced in by the various SIU scripts
    # Copyright © 2007-2011 Apple Inc. All rights reserved.
    # Using dscl, create a user account
    AddLocalUser()
    # $1 volume whose local node database to modify
    # $2 long name
    # $3 short name
    # $4 isAdminUser key
    # $5 password data
    # $6 password hint
    # $7 user picture path
    # $8 Language string
    local databasePath="/Local/Default/Users/${3}"
    local targetVol="${1}"
    # Find a free UID between 501 and 599
    for ((i=501; i<600; i++)); do
    output=`/usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -search /Local/Default/Users UniqueID $i`
    # If there is already an account dscl returns it, so we're looking for an empty return value.
    if [ "$output" == "" ]; then
    break
    fi
    done
    # Create the user record
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -create $databasePath
    if [ $? != 0 ]; then
    echo "Failed to create '${databasePath}'."
    return 1
    fi
    # Add long name
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath RealName "${2}"
    if [ $? != 0 ]; then
    echo "Failed to set the RealName."
    return 1
    fi
    # Add PrimaryGroupID
    if [ "${4}" == 1 ]; then
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath PrimaryGroupID 80
    else
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath PrimaryGroupID 20
    fi
    if [ $? != 0 ]; then
    echo "Failed to set the PrimaryGroupID."
    return 1
    fi
    # Add UniqueID
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath UniqueID ${i}
    if [ $? != 0 ]; then
    echo "Failed to set the UniqueID."
    return 1
    fi
    # Add Home Directory entry
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath NFSHomeDirectory /Users/${3}
    if [ $? != 0 ]; then
    echo "Failed to set the NFSHomeDirectory."
    fi
    if [ "${6}" != "" ]; then
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath AuthenticationHint "${6}"
    if [ $? != 0 ]; then
    echo "Failed to set the AuthenticationHint."
    return 1
    fi
    fi
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath picture "${7}"
    if [ $? != 0 ]; then
    echo "Failed to set the picture."
    return 1
    fi
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -passwd $databasePath "${5}"
    if [ $? != 0 ]; then
    echo "Failed to set the passwd."
    return 1
    fi
    # Add shell
    /usr/bin/dscl -f "${targetVol}/var/db/dslocal/nodes/Default" localonly -append $databasePath UserShell "/bin/bash"
    if [ $? != 0 ]; then
    echo "Failed to set the UserShell."
    return 1
    fi
    # Create Home directory
    if [ -e "/System/Library/User Template/${8}.lproj/" ]; then
    /usr/bin/ditto "/System/Library/User Template/${8}.lproj/" "${targetVol}/Users/${3}"
    else
    /usr/bin/ditto "/System/Library/User Template/English.lproj/" "${targetVol}/Users/${3}"
    fi
    if [ $? != 0 ]; then
    echo "Failed to copy the User Template."
    return 1
    fi
    /usr/sbin/chown -R $i:$i "${targetVol}/Users/${3}"
    if [ $? != 0 ]; then
    echo "Failed to set ownership on the User folder."
    return 1
    fi
    # Copies a list of files (full paths contained in the file at $1) from source to the path specified in $2
    CopyEntriesFromFileToPath()
    local theFile="$1"
    local theDest="$2"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    while read FILE
    do
    if [ -e "${FILE}" ]; then
    local leafName=`basename "${FILE}"`
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Copying ${FILE}."
    fi
    /usr/bin/ditto $opt "${FILE}" "${theDest}/${leafName}" || return 1
    fi
    done < "${theFile}"
    return 0
    # Copies a list of packages (full path, destination pairs contained in the file at $1) from source to .../System/Installation/Packages/
    CopyPackagesWithDestinationsFromFile()
    local theFile="$1"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    while read FILE
    do
    if [ -e "${FILE}" ]; then
    local leafName=`basename "${FILE}"`
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Copying ${FILE}."
    fi
    read SUB_PATH
    /usr/bin/ditto $opt "${FILE}" "${mountPoint}/Packages/${SUB_PATH}${leafName}" || return 1
    fi
    done < "${theFile}"
    return 0
    # Create an installer package in ${1} wrapping the supplied script ${2}
    CreateInstallPackageForScript()
    local tempDir="$1"
    local scriptPath="$2"
    local scriptName=`basename "${scriptPath}"`
    local entryDir=`pwd`
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Create installer for script ${scriptName}"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    fi
    # shouldn't exist on entry...
    if [ -e "${tempDir}/emptyDir" ]; then
    /bin/rm -rf "${tempDir}/emptyDir"
    fi
    # make some directories to work in
    /bin/mkdir $opt -p "${tempDir}/${scriptName}.pkg/Contents/Resources" || return 1
    /bin/mkdir $opt "${tempDir}/emptyDir" || return 1
    # Create Archive.pax.gz
    cd "${tempDir}/emptyDir"
    /bin/pax -w -x cpio -f "${tempDir}/${scriptName}.pkg/Contents/Archive.pax" .
    /usr/bin/gzip "${tempDir}/${scriptName}.pkg/Contents/Archive.pax"
    cd "${entryDir}"
    # Create the Archive.bom file
    /usr/bin/mkbom "${tempDir}/emptyDir/" "${tempDir}/${scriptName}.pkg/Contents/Archive.bom" || return 1
    # Create the Info.plist
    /bin/cat > "${tempDir}/${scriptName}.pkg/Contents/Info.plist" << END
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>CFBundleIdentifier</key>
    <string>com.apple.server.SystemImageUtility.${scriptName}</string>
    <key>CFBundleShortVersionString</key>
    <string>1</string>
    <key>IFMajorVersion</key>
    <integer>1</integer>
    <key>IFMinorVersion</key>
    <integer>0</integer>
    <key>IFPkgFlagDefaultLocation</key>
    <string>/tmp</string>
    <key>IFPkgFlagInstallFat</key>
    <false/>
    <key>IFPkgFlagIsRequired</key>
    <false/>
    <key>IFPkgFormatVersion</key>
    <real>0.10000000149011612</real>
    </dict>
    </plist>
    END
    echo "pkmkrpkg1" > "${tempDir}/${scriptName}.pkg/Contents/PkgInfo"
    echo "major: 1\nminor: 0" > "${tempDir}/${scriptName}.pkg/Contents/Resources/package_version"
    # Copy the script
    /bin/cp "$scriptPath" "${tempDir}/${scriptName}.pkg/Contents/Resources/postflight"
    # clean up
    /bin/rm -r "${tempDir}/emptyDir"
    return 0
    # Validate or create the requested directory
    CreateOrValidatePath()
    local targetDir="$1"
    if [ ! -d "${targetDir}" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Creating working path at ${targetDir}"
    fi
    /bin/mkdir -p "${targetDir}" || return 1
    fi
    # If any exist, apply any user accounts
    CreateUserAccounts()
    # $1 volume whose local node database to modify
    local count="${#userFullName[*]}"
    local targetVol="${1}"
    if [ $count -gt 0 ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Adding $count user account(s) to the image"
    fi
    for ((index=0; index<$count; index++)); do
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Adding user ${userFullName[$index]}"
    fi
    #lay down user here
    AddLocalUser "${targetVol}" "${userFullName[$index]}" "${userUnixName[$index]}" "${userIsAdmin[$index]}" "${userPassword[$index]}" "${userPassHint[$index]}" "${userImagePath[$index]}" "${userLanguage[$index]}"
    if [ $? != 0 ]; then
    echo "Failed to create the User '${userUnixName[$index]}'."
    return 1
    fi
    done
    # "touch"
    /usr/bin/touch "${targetVol}/private/var/db/.AppleSetupDone"
    /usr/bin/touch "${targetVol}/Library/Receipts/.SetupRegComplete"
    fi
    # retry the hdiutil detach until we either time out or it succeeds
    retry_hdiutil_detach()
    local mount_point="${1}"
    local tries=0
    local forceAt=0
    local limit=24
    local opt=""
    forceAt=$(($limit - 1))
    while [ $tries -lt $limit ]; do
    tries=$(( tries + 1 ))
    /bin/sleep 5
    echo "Attempting to detach the disk image again..."
    /usr/bin/hdiutil detach "${mount_point}" $opt
    if [ $? -ne 0 ]; then
    # Dump a list of any still open files on the mountPoint
    if [ "${scriptsDebugKey}" == "DEBUG" ]; then
    /usr/sbin/lsof +fg "${mount_point}"
    fi
    if [ $tries -eq $forceAt ]; then
    echo "Failed to detach disk image at '${mount_point}' normally, adding -force."
    opt="-force"
    fi
    if [ $tries -eq $limit ]; then
    echo "Failed to detach disk image at '${mount_point}'."
    exit 1
    fi
    else
    tries=$limit
    fi
    done
    # Create the dyld shared cache files
    DetachAndRemoveMount()
    local theMount="${1}"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Detaching disk image"
    # Dump a list of any still open files on the mountPoint
    if [ "${scriptsDebugKey}" == "DEBUG" ]; then
    /usr/sbin/lsof +fg "${theMount}"
    fi
    fi
    # Finally detach the image and dispose the mountPoint directory
    /usr/bin/hdiutil detach "${theMount}" || retry_hdiutil_detach "${theMount}" || return 1
    /bin/rmdir "${theMount}" || return 1
    return 0
    # If the pieces exist, enable remote access for the shell image
    EnableRemoteAccess()
    local srcVol="${1}"
    local opt=""
    if [ -e "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Enabling shell image remote access support"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    fi
    # install some things (again which aren't part of BaseSystem) needed for remote ASR installs
    /usr/bin/ditto $opt "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" "${mountPoint}/usr/lib/pam/pam_serialnumber.so.2" || return 1
    if [ -e "${srcVol}/usr/sbin/installer" ]; then
    /usr/bin/ditto $opt "${srcVol}/usr/sbin/installer" "${mountPoint}/usr/sbin/installer" || return 1
    fi
    # copy the sshd config and add our keys to the end of it
    if [ -e "${srcVol}/etc/sshd_config" ]; then
    /bin/cat "${srcVol}/etc/sshd_config" - > "${mountPoint}/etc/sshd_config" << END
    HostKey /private/var/tmp/ssh_host_key
    HostKey /private/var/tmp/ssh_host_rsa_key
    HostKey /private/var/tmp/ssh_host_dsa_key
    END
    fi
    fi
    return 0
    # If it exists, install the sharing names and/or directory binding support to the install image
    HandleNetBootClientHelper()
    local tempDir="${1}"
    local targetVol="${2}"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    if [ -e  "${tempDir}/bindingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Directory Service binding information"
    fi
    /usr/bin/ditto $opt "${tempDir}/bindingNames.plist" "${targetVol}/etc/bindingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/bindingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/bindingNames.plist"
    fi
    if [ -e  "${tempDir}/sharingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Sharing Names support"
    fi
    /usr/bin/ditto $opt "${tempDir}/sharingNames.plist" "${targetVol}/etc/sharingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/sharingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/sharingNames.plist"
    fi
    if [ -e  "${tempDir}/NetBootClientHelper" ]; then
    /usr/bin/ditto $opt "${tempDir}/NetBootClientHelper" "${targetVol}/usr/sbin/NetBootClientHelper" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/usr/sbin/NetBootClientHelper"
    /bin/chmod 555 "${targetVol}/usr/sbin/NetBootClientHelper"
    /usr/bin/ditto $opt "${tempDir}/com.apple.NetBootClientHelper.plist" "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    /bin/chmod 644 "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    # finally, make sure it isn't disabled...
    /usr/libexec/PlistBuddy -c "Delete :com.apple.NetBootClientHelper" "${targetVol}/var/db/launchd.db/com.apple.launchd/overrides.plist" > /dev/null 2>&1
    fi
    return 0
    # If any exist, install configuration profiles to the install image
    InstallConfigurationProfiles()
    local tempDir="${1}"
    local targetVol="${2}"
    local profilesDir="${targetVol}/var/db/ConfigurationProfiles"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    if [ -e  "${tempDir}/configProfiles.txt" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Configuration Profiles"
    fi
    /bin/mkdir -p "${profilesDir}/Setup" || return 1
    # Make sure the perms are correct
    /usr/sbin/chown root:wheel "${profilesDir}"
    /bin/chmod 755 "${profilesDir}"
    /usr/sbin/chown root:wheel "${profilesDir}/Setup"
    /bin/chmod 755 "${profilesDir}/Setup"
    /usr/bin/touch "${profilesDir}/.profilesAreInstalled"
    CopyEntriesFromFileToPath "${tempDir}/configProfiles.txt" "${profilesDir}/Setup" || return 1
    # Enable MCX debugging
    if [ 1 == 1 ]; then
    if [ -e  "${targetVol}/Library/Preferences/com.apple.MCXDebug.plist" ]; then
    /usr/libexec/PlistBuddy -c "Delete :debugOutput" "${targetVol}/Library/Preferences/com.apple.MCXDebug.plist" > /dev/null 2>&1
    /usr/libexec/PlistBuddy -c "Delete :collateLogs" "${targetVol}/Library/Preferences/com.apple.MCXDebug.plist" > /dev/null 2>&1
    fi
    /usr/libexec/PlistBuddy -c "Add :debugOutput string -2" "${targetVol}/Library/Preferences/com.apple.MCXDebug.plist" > /dev/null 2>&1
    /usr/libexec/PlistBuddy -c "Add :collateLogs string 1" "${targetVol}/Library/Preferences/com.apple.MCXDebug.plist" > /dev/null 2>&1
    fi
    fi
    # Converts a list of scripts (full paths contained in the file at $1) into packages in $3
    InstallScriptsFromFile()
    local tempDir="${1}"
    local theFile="${2}"
    local targetDir="${3}"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Converting scripts into install packages"
    fi
    while read FILE
    do
    if [ -e "${FILE}" ]; then
    # make an installer package out of the script
    CreateInstallPackageForScript "$tempDir" "${FILE}" || return 1
    # copy the resulting package to the Packages directory
    local leafName=`basename "${FILE}"`
    /usr/bin/ditto $opt "${tempDir}/${leafName}.pkg" "${targetDir}/${leafName}.pkg" || return 1
    # clean up
    /bin/rm -r "${tempDir}/${leafName}.pkg"
    fi
    done < "${theFile}"
    return 0
    # Prepare the source by deleting stuff we don't want to copy if sourcing a volume
    PostFlightDestination()
    local tempDir="${1}"
    local destDir="${2}"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Performing post install cleanup"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    opt="-v"
    fi
    fi
    # delete the DS indices to force reindexing...
    if [ -e "${mountPoint}/var/db/dslocal/indices/Default/index" ]; then
    /bin/rm $opt "${mountPoint}/var/db/dslocal/indices/Default/index"
    fi
    # detach the disk and remove the mount folder
    DetachAndRemoveMount "${mountPoint}"
    if [ $? != 0 ]; then
    echo "Failed to detach and clean up the mount at '${mountPoint}'."
    return 1
    fi
    echo "Correcting permissions. ${ownershipInfoKey} $destDir"
    /usr/sbin/chown -R "${ownershipInfoKey}" "$destDir"
    # Prepare the source by deleting stuff we don't want to copy if sourcing a volume
    PreCleanSource()
    local srcVol="$1"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    opt="-v"
    fi
    fi
    if [ -e "$srcVol/private/var/vm/swapfile*" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Removing swapfiles on $1"
    fi
    /bin/rm $opt "$srcVol/private/var/vm/swapfile*"
    fi
    if [ -d "$srcVol/private/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/tmp/*"
    fi
    if [ -d "$srcVol/private/var/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/var/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/var/tmp/*"
    fi
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out devices and volumes on $1"
    fi
    if [ -d "$srcVol/Volumes" ]; then
    /bin/rm -r $opt "$srcVol/Volumes/*"
    fi
    if [ -d "$srcVol/dev" ]; then
    /bin/rm $opt "$srcVol/dev/*"
    fi
    if [ -d "$srcVol/private/var/run" ]; then
    /bin/rm -r $opt "$srcVol/private/var/run/*"
    fi
    # Copy kernel and build the kext cache on the boot image
    PrepareKernelAndKextCache()
    local srcDir="$1"
    local destDir="$2"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Preparing the kernel and kext cache for t          /bin/rmdir "${theMount}" || return 1
    return 0
    # If the pieces exist, enable remote access for the shell image
    EnableRemoteAccess()
    local srcVol="${1}"
    local opt=""
    if [ -e "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Enabling shell image remote access support"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    fi
    # install some things (again which aren't part of BaseSystem) needed for remote ASR installs
    /usr/bin/ditto $opt "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" "${mountPoint}/usr/lib/pam/pam_serialnumber.so.2" || return 1
    if [ -e "${srcVol}/usr/sbin/installer" ]; then
    /usr/bin/ditto $opt "${srcVol}/usr/sbin/installer" "${mountPoint}/usr/sbin/installer" || return 1
    fi
    # copy the sshd config and add our keys to the end of it
    if [ -e "${srcVol}/etc/sshd_config" ]; then
    /bin/cat "${srcVol}/etc/sshd_config" - > "${mountPoint}/etc/sshd_config" << END
    HostKey /private/var/tmp/ssh_host_key
    HostKey /private/var/tmp/ssh_host_rsa_key
    HostKey /private/var/tmp/ssh_host_dsa_key
    END
    fi
    fi
    return 0
    # If it exists, install the sharing names and/or directory binding support to the install image
    HandleNetBootClientHelper()
    local tempDir="${1}"
    local targetVol="${2}"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    if [ -e  "${tempDir}/bindingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Directory Service binding information"
    fi
    /usr/bin/ditto $opt "${tempDir}/bindingNames.plist" "${targetVol}/etc/bindingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/bindingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/bindingNames.plist"
    fi
    if [ -e  "${tempDir}/sharingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Sharing Names support"
    fi
    /usr/bin/ditto $opt "${tempDir}/sharingNames.plist" "${targetVol}/etc/sharingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/sharingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/sharingNames.plist"
    fi
    if [ -e  "${tempDir}/NetBootClientHelper" ]; then
    /usr/bin/ditto $opt "${tempDir}/NetBootClientHelper" "${targetVol}/usr/sbin/NetBootClientHelper" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/usr/sbin/NetBootClientHelper"
    /bin/chmod 555 "${targetVol}/usr/sbin/NetBootClientHelper"
    /usr/bin/ditto $opt "${tempDir}/com.apple.NetBootClientHelper.plist" "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    /bin/chmod 644 "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    # finally, make sure it isn't disabled...
    /usr/libexmountPoint=`mktemp -d "/tmp/mnt.XXXXXXXX"`
    errExit()
    echo "Execution of '`basename ${0}`' failed. Cleaning up."
    # detach the disk and remove the mount folder
    DetachAndRemoveMount "${mountPoint}"
    /bin/rm -r "${destPath}"
    exit 1
    # Set up for script debugging
    debug_opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    debug_opt="-v"
    fi
    # Prepare the destination
    CreateOrValidatePath "$destPath" || errExit
    # update progress information
    echo "${progressPrefix}_creatingImage_"
    if [ -e "${installSource}/BaseSystem.dmg" ]; then
    size=$2
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    echo "Creating disk image (Size: $size MB)"
    fi
    /usr/bin/hdiutil create "$destPath/$dmgTarget" -megabytes $size -volname "${dmgVolName}" -uid 0 -gid 80 -mode 1775 -layout "SPUD" -fs "$destVolFSType" -stretch 500g -ov -puppetstrings || errExit
    echo "${progressPrefix}_copyingSource_"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    echo "Attaching disk image"
    fi
    /usr/bin/hdiutil attach "${destPath}/${dmgTarget}.dmg" -owners on -nobrowse -noautoopen -mountpoint "${mountPoint}" -quiet || errExit
    # Copy source Volume base system to
    /usr/bin/ditto $debug_opt "${installSource}" "${mountPoint}" || errExit
    else
    echo "This does not appear to be a Mac OS X Install DVD."
    errExit
    fi
    # If adding any additional packages or scripts
    if [ -e "${1}/OSInstall.collection" ]; then
    /usr/bin/ditto $debug_opt "${1}/OSInstall.collection" "${mountPoint}/Packages/OSInstall.collection" || errExit
    /usr/sbin/chown root:wheel "${mountPoint}/Packages/OSInstall.collection"
    # If adding any additional packages
    if [ -e "${1}/additionalPackages.txt" ]; then
    CopyPackagesWithDestinationsFromFile "${1}/additionalPackages.txt" || errExit
    fi
    # If adding any scripts
    if [ -e "${1}/additionalScripts.txt" ]; then
    InstallScriptsFromFile "${1}" "${1}/additionalScripts.txt" "${mountPoint}/Packages" || errExit
    fi
    fi
    # If it exists, install the partition data onto the install image
    ProcessAutoPartition "${1}" || errExit
    # If it exists, install minstallconfig.xml (AutoInstall data) onto the install image
    ProcessMinInstall "${1}" || errExit
    # update progress information
    echo "${progressPrefix}_buildingBooter_"
    # Copy kernel and boot loader
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Preparing the kernel and boot loader for the boot image"
    fi
    # make sure this doesn't exist
    if [ -e "${destPath}/i386" ]; then
    /bin/rm -rf "${destPath}/i386"
    fi
    /bin/mkdir -p $debug_opt "${destPath}/i386/x86_64" || errExit
    # copy these directly off the install media
    /usr/bin/ditto $debug_opt "${installSource}/boot.efi" "${destPath}/i386/booter" || errExit
    /usr/bin/chflags nohidden "${destPath}/i386/booter"
    # Grab the relevant portion of the com.apple.Boot.plist
    kernelFlags=`/usr/libexec/PlistBuddy -c "print :'Kernel Flags'" "${installSource}/Library/Preferences/SystemConfiguration/com.apple.Boot.plist"`
    /usr/libexec/PlistBuddy -c "add :'Kernel Flags' string ${kernelFlags}" "${destPath}/i386/com.apple.Boot.plist" > /dev/null 2>&1
    /usr/bin/ditto $debug_opt "${installSource}/System/Library/CoreServices/PlatformSupport.plist" "${destPath}/i386/PlatformSupport.plist" || errExit
    # extract the kernel & kernelcache for the boot shell
    /usr/bin/lipo -extract i386 "${mountPoint}/kernelcache" -output "${destPath}/i386/kernelcache" || errExit
    /usr/bin/lipo -extract x86_64 "${mountPoint}/kernelcache" -output "${destPath}/i386/x86_64/kernelcache" || errExit
    # Apply choice changes, if any
    if [ -e "${1}/MacOSXInstaller.choiceChanges" ]; then
    echo "Copy over package choice selection."
    /usr/bin/ditto $debug_opt "${1}/MacOSXInstaller.choiceChanges" "${mountPoint}/Packages/Extras/MacOSXInstaller.choiceChanges"
    fi
    # update progress information
    echo "${progressPrefix}_finishingUp_"
    # perform the final cleanup
    PostFlightDestination "${1}" "$destPath" || errExit
    errExit
    Vol/private/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/tmp/*"
    fi
    if [ -d "$srcVol/private/var/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/var/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/var/tmp/*"
    fi
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out devices and volumes on $1"
    fi
    if [ -d "$srcVol/Volumes" ]; then
    /bin/rm -r $opt "$srcVol/Volumes/*"
    fi
    if [ -d "$srcVol/dev" ]; then
    /bin/rm $opt "$srcVol/dev/*"
    fi
    if [ -d "$srcVol/private/var/run" ]; then
    /bin/rm -r $opt "$srcVol/private/var/run/*"
    fi
    # Copy kernel and build the kext cache on the boot image
    PrepareKernelAndKextCache()
    local srcDir="$1"
    local destDir="$2"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Preparing the kernel and kext cache for tPERCENT:0.000000
    PERCENT:4.332841
    PERCENT:8.985722
    PERCENT:12.358444
    PERCENT:14.524864
    PERCENT:16.617430
    PERCENT:19.522402
    PERCENT:21.614967
    PERCENT:23.535204
    PERCENT:26.070902
    PERCENT:29.271296
    PERCENT:33.111767
    PERCENT:38.847858
    PERCENT:42.343674
    PERCENT:44.707043
    PERCENT:46.578041
    PERCENT:49.138355
    PERCENT:51.772526
    PERCENT:55.563763
    PERCENT:58.567207
    PERCENT:62.210735
    PERCENT:64.795670
    PERCENT:69.719353
    PERCENT:74.741508
    PERCENT:77.055641
    PERCENT:79.591331
    PERCENT:83.013290
    PERCENT:85.548988
    PERCENT:88.010834
    PERCENT:91.728210
    PERCENT:97.710487
    PERCENT:100.000000
    PERCENT:-1.000000
    Finalizing disk image.
    created: /Users/vm/Desktop/NetInstall of Install Mac OS X Lion/NetInstall.dmg
    /bin/rmdir "${theMount}" || return 1
    return 0
    # If the pieces exist, enable remote access for the shell image
    EnableRemoteAccess()
    local srcVol="${1}"
    local opt=""
    if [ -e "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Enabling shell image remote access support"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    fi
    # install some things (again which aren't part of BaseSystem) needed for remote ASR installs
    /usr/bin/ditto $opt "${srcVol}/usr/lib/pam/pam_serialnumber.so.2" "${mountPoint}/usr/lib/pam/pam_serialnumber.so.2" || return 1
    if [ -e "${srcVol}/usr/sbin/installer" ]; then
    /usr/bin/ditto $opt "${srcVol}/usr/sbin/installer" "${mountPoint}/usr/sbin/installer" || return 1
    fi
    # copy the sshd config and add our keys to the end of it
    if [ -e "${srcVol}/etc/sshd_config" ]; then
    /bin/cat "${srcVol}/etc/sshd_config" - > Creating working path at /Users/vm/Desktop/NetInstall of Install Mac OS X Lion
    Creating disk image (Size: 4062 MB)
    /tmp/ssh_host_dsa_key
    END
    fi
    fi
    return 0
    # If it exists, install the sharing names and/or directory binding support to the install image
    HandleNetBootClientHelper()
    local tempDir="${1}"
    local targetVol="${2}"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    opt="-v"
    fi
    if [ -e  "${tempDir}/bindingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Directory Service binding information"
    fi
    /usr/bin/ditto $opt "${tempDir}/bindingNames.plist" "${targetVol}/etc/bindingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/bindingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/bindingNames.plist"
    fi
    if [ -e  "${tempDir}/sharingNames.plist" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Installing Sharing Names support"
    fi
    /usr/bin/ditto $opt "${tempDir}/sharingNames.plist" "${targetVol}/etc/sharingNames.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/etc/sharingNames.plist"
    /bin/chmod 644 "${targetVol}/etc/sharingNames.plist"
    fi
    if [ -e  "${tempDir}/NetBootClientHelper" ]; then
    /usr/bin/ditto $opt "${tempDir}/NetBootClientHelper" "${targetVol}/usr/sbin/NetBootClientHelper" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/usr/sbin/NetBootClientHelper"
    /bin/chmod 555 "${targetVol}/usr/sbin/NetBootClientHelper"
    /usr/bin/ditto $opt "${tempDir}/com.apple.NetBootClientHelper.plist" "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist" || return 1
    /usr/sbin/chown root:wheel "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    /bin/chmod 644 "${targetVol}/System/Library/LaunchDaemons/com.apple.NetBootClientHelper.plist"
    # finally, make sure it isn't disabled...
    /usr/libex
    # update progress information
    echo "${progressPrefix}_creatingImage_"
    if [ -e "${installSource}/BaseSystem.dmg" ]; then
    size=$2
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    echo "Creating disk image (Size: $size MB)"
    fi
    /usr/bin/hdiutil create "$destPath/$dmgTarget" -megabytes $size -volname "${dmgVolName}" -uid 0 -gid 80 -mode 1775 -layout "SPUD" -fs "$destVolFSType" -stretch 500g -ov -puppetstrings || errExit
    echo "${progressPrefix}_copyingSource_"
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ] ; then
    echo "Attaching disk image"
    fi
    /usr/bin/hdiutil attach "${destPath}/${dmgTarget}.dmg" -owners on -nobrowse -noautoopen -mountpoint "${mountPoint}" -quiet || errExit
    # Copy source Volume base system to
    /usr/bin/ditto $debug_opt "${installSource}" "${mountPoint}" || errExit
    else
    echo "This does not appear to be a Mac OS X Install DVD."
    errExit
    fi
    # If adding any additional packages or scripts
    if [ -e "${1}/OSInstall.collection" ]; then
    /usr/bin/ditto $debug_opt "${1}/OSInstall.collection" "${mountPoint}/Packages/OSInstall.collection" || errExit
    /usr/sbin/chown root:wheel "${mountPoint}/Packages/OSInstall.collection"
    # If adding any additional packages
    if [ -e "${1}/additionalPackages.txt" ]; then
    CopyPackagesWithDestinationsFromFile "${1}/additionalPackages.txt" || errExit
    fi
    # If adding any scripts
    if [ -e "${1}/additionalScripts.txt" ]; then
    InstallScriptsFromFile "${1}" "${1}/additionalScripts.txt" "${mountPoint}/Packages" || errExit
    fi
    fi
    # If it exists, install the partition data onto the install image
    ProcessAutoPartition "${1}" || errExit
    # If it exists, install minstallconfig.xml (AutoInstall data) onto the install image
    ProcessMinInstall "${1}" || errExit
    # update progress information
    echo "${progressPrefix}_buildingBooter_"
    # Copy kernel and boot loader
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Preparing the kernel and boot loader for the boot image"
    fi
    # make sure this doesn't exist
    if [ -e "${destPath}/i386" ]; then
    /bin/rm -rf "${destPath}/i386"
    fi
    /bin/mkdir -p $debug_opt "${destPath}/i386/x86_64" || errExit
    # copy these directly off the install media
    /usr/bin/ditto $debug_opt "${installSource}/boot.efi" "${destPath}/i386/booter" || errExit
    /usr/bin/chflags nohidden "${destPath}/i386/booter"
    # Grab the relevant portion of the com.apple.Boot.plist
    kernelFlags=`/usr/libexec/PlistBuddy -c "print :'Kernel Flags'" "${installSource}/Library/Preferences/SystemConfiguration/com.apple.Boot.plist"`
    /usr/libexec/PlistBuddy -c "add :'Kernel Flags' string ${kernelFlags}" "${destPath}/i386/com.apple.Boot.plist" > /dev/null 2>&1
    /usr/bin/ditto $debug_opt "${installSource}/System/Library/CoreServices/PlatformSupport.plist" "${destPath}/i386/PlatformSupport.plist" || errExit
    # extract the kernel & kernelcache for the boot shell
    /usr/bin/lipo -extract i386 "${mountPoint}/kernelcache" -output "${destPath}/i386/kernelcache" || errExit
    /usr/bin/lipo -extract x86_64 "${mountPoint}/kernelcache" -output "${destPath}/i386/x86_64/kernelcache" || errExit
    # Apply choice changes, if any
    if [ -e "${1}/MacOSXInstaller.choiceChanges" ]; then
    echo "Copy over package choice selection."
    /usr/bin/ditto $debug_opt "${1}/MacOSXInstaller.choiceChanges" "${mountPoint}/Packages/Extras/MacOSXInstaller.choiceChanges"
    fi
    # update progress information
    echo "${progressPrefix}_finishingUp_"
    # perform the final cleanup
    PostFlightDestination "${1}" "$destPath" || errExit
    rrExit
    # Apply choice changes, if any
    if [ -e "${1}/MacOSXInstaller.choiceChanges" ]; then
    echo "Copy over package choice selection."
    /usr/bin/ditto $debug_opt "${1}/MacOSXInstaller.choiceChanges" "${mountPoint}/Packages/Extras/MacOSXInstaller.choiceChanges"
    fi
    # update progress information
    echo "${progressPrefix}_finishingUp_"
    # perform the final cleanup
    PostFlightDestination "${1}" "$destPath" || errExit
    tDestination "${1}" "$destPath" || errExit
    errExit
    Vol/private/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/tmp/*"
    fi
    if [ -d "$srcVol/private/var/tmp" ]; then
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out /private/var/tmp on $1"
    fi
    /bin/rm -r $opt "$srcVol/private/var/tmp/*"
    fi
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    echo "Cleaning out devices and volumes on $1"
    fi
    if [ -d "$srcVol/Volumes" ]; then
    /bin/rm -r $opt "$srcVol/Volumes/*"
    fi
    if [ -d "$srcVol/dev" ]; then
    /bin/rm $opt "$srcVol/dev/*"
    fi
    if [ -d "$srcVol/private/var/run" ]; then
    /bin/rm -r $opt "$srcVol/private/var/run/*"
    fi
    # Copy kernel and build the kext cache on the boot image
    PrepareKernelAndKextCache()
    local srcDir="$1"
    local destDir="$2"
    local opt=""
    if [ "${scriptsDebugKey}" == "VERBOSE" -o "${scriptsDebugKey}" == "DEBUG" ]; then
    Stopping image creation.
    Terminating script!
    Image creation failed.

  • Issues in running scripts from OTM

    Hi ,
    I have created an endtoend scenario where the script starts from creating requistion, approval, PO creation approval , receipt creation then Invoice and payment.
    My script failing with different reason for different runs. Mailnly its failing whenever the steps are referrred to Standard Oracle Forms.(Eg: Invoice Batch, Receipt Form etc).
    I am running this from machine where Openscript and OTM is installed.
    I tried the command line arugment like " -delayPercentage -1 -delayMin 1 -delayMax 20 " while running the script from OTM. Still issue is same. If I am not using this commad the script steps deviates and failing. I mean in script the step is to choose some responsibility A it is choosing B. To override think times recorded I have used thread.sleep(2000) after every thinktime entry to run it from openscript.
    and to run it from OTM I am using above command.
    Now can anyone suggest me is anyother way that we can overcome these timeout errors. Am I using command line argument in correct way ? Please help

    Hi,
    First try your playback from OpenScript.
    Before play back go to View -> OpenScript Preferences -> PlayBack -> Oracle EBS/Forms Functional
    Increase timeouts in Event Timeout. Also Increase timeout in Web Functional (Object timeout)
    Then Apply and OK    
    Now try play back from OpenScript
    Regards,
    Deepu M
    [email protected]

  • Problem setting the PoolList attribute in a WLST script

    Hello !
    I ran the configToScript command over config.xml which has a JDBCMultipool composed of two JDBCpools. It threw the next script to create the JDBC Multipool:
    print 'configuring resource: JDBCMultiPool/MyJDBC MultiPool '
    try:
    myResource = create("MyJDBC MultiPool","JDBCMultiPool")
    except Exception:
    # print 'This resource JDBCMultiPool with name MyJDBC MultiPool failed to be created. The script will try to get it anyways.'
    myResource = (getTarget("JDBCMultiPool/MyJDBC MultiPool"))
    myResource.setPoolList("poolCatalogos01,poolCatalogos02")
    #cmo.addTarget(clusterTarget2)
    # If this fails you will have to add this target manually from the console
    from java.lang import Exception
    from java.lang import Throwable
    try:
    myResource.addTarget(clusterTarget2)
    except Throwable, th:
    print 'Problem in adding target '+clusterTarget2+ ' due to '+th.toString()
    However when the script is executed it fails at the line:
    myResource.setPoolList("poolCatalogos01,poolCatalogos02")
    and shows this error message:
    TypeError: setPoolList(): 1st arg can't be coerced to weblogic.management.configuration.JDBCConnectionPoolMBean[]
    I have tried some other ways to set this attribute, however I hadn't had any success. If some one can provide some advice, I will be grateful.
    By the way:
    I am using a WLST version downloaded last April, of 2004.
    Thanks !

    There is a bug in configToScript that is not generating the right script for setting the Pool list. This will be fixed in the next version of wlst. Here's a workaround.
    try:
    myResource = create("MyJDBC MultiPool","JDBCMultiPool")
    except Exception:
    # print 'This resource JDBCMultiPool with name MyJDBC MultiPool failed to be created. The script will try to get it anyways.'
    myResource = (getTarget("JDBCMultiPool/MyJDBC MultiPool"))
    p1 = getTarget("JDBCConnectionPool/poolCatalogos02")
    p2 = getTarget("JDBCConnectionPool/poolCatalogos02_BEA")
    plist = jarray.array([p1,p2], weblogic.management.configuration.JDBCConnectionPoolMBean)
    myResource.setPoolList(plist)
    let me know if u see any other problems, thanks,
    -satya

  • Move files and create unique name something wrong with my script

    Can you see where I might be going wrong here?
    Just trying to create a unique name if something exists.
    In English.
    Move file to the destinationFolder
    Item exists in destinationFolder > Move file in the destination folder to the fake Trash > If it exists in fakeTrash too then give it a new name an ending of_a.psd then out it in the trash
    Once thats done move start file to the destination folder.
    Currently when the file exists in the destination folder and in the trash, I get the prompt then the error
    error "System Events got an error: Can’t get disk item \"NN_FR10WW06290PK3LE.psd\"." number -1728 from disk item "NN_FR10WW06290PK3LE.psd"
    set fileMatrix to {¬
              {folderName:"BHS", prefixes:{"BH", "SM", "AL"}}, ¬
              {folderName:"Bu", prefixes:{"BU"}}, ¬
              {folderName:"Da", prefixes:{"ES"}}, ¬
              {folderName:"Di", prefixes:{"DV"}}, ¬
              {folderName:"Do", prefixes:{"DJ", "RA"}}, ¬
              {folderName:"In", prefixes:{"GT", "CC"}}, ¬
              {folderName:"Fr", prefixes:{"FR"}}, ¬
              {folderName:"No", prefixes:{"NN"}}, ¬
              {folderName:"Ma", prefixes:{"MA", "MF", "FI", "MC", "MH", "MB"}}, ¬
              {folderName:"Pr", prefixes:{"PR"}}, ¬
              {folderName:"To", prefixes:{"TM15", "TM11", "TM17"}}, ¬
              {folderName:"Wa", prefixes:{"WA"}}, ¬
              {folderName:"Se", prefixes:{"SE"}}}
    tell application "Finder"
              set theHotFolder to folder "Hal 9000:Users:matthew:Pictures:HotFolderDone"
              set foldericon to folder "Hal 9000:Users:matthew:Pictures:Icons:Rejected Folder Done"
              set fakeTrash to folder "Hal 9000:Users:matthew:FakeTrash"
      ---here
              repeat with matrixItem in fileMatrix -- look for folder
                        set destinationFolder to (folders of desktop whose name starts with folderName of matrixItem)
                        if destinationFolder is not {} then -- found one
                                  set destinationFolder to first item of destinationFolder -- only one destination
                                  set theFolderName to name of destinationFolder
                                  repeat with aPrefix in prefixes of matrixItem -- look for files
                                            set theFiles to (files of theHotFolder whose namestarts with aPrefix) as alias list
                                            if theFiles is not {} then repeat with startFile intheFiles -- move files
                                                      try
      move startFile to destinationFolder
                                                      on error
      activate
                                                                display dialog "File “" & (name ofstartFile) & "” already exists in folder “" & theFolderName & "”. Do you want to replace it?"buttons {"Don't replace", "Replace"} default button 2 with icon 1
                                                                if button returned of result is "Stop"then
                                                                          if (count theLastFolder) is 0 thendelete theLastFolder
                                                                          return
                                                                else if button returned of result is"Replace" then
                                                                          set fileName to get name ofstartFile
                                                                          if exists file fileName indestinationFolder then ¬
                                                                                    try
      --next line moves existing file to the faketrash
      move file fileName of destinationFolder to fakeTrash
      move file startFile to destinationFolder
      --if it already exists in fake trash give it a new name then move that file to fake trash
                                                                                    on error errmess numbererrnum -- oops (should probably check for a specific error number)
                                                                                               log "Error " & errnum& " moving file: " &errmess
                                                                                               set newName to mygetUniqueName(fileName,fakeTrash)
                                                                                               set name of fileNameto "this is a unique name"-- or whatever
                                                                                               set name of fileNameto newName
      --Now move the renamed file to the fake trash
      move file fileName to fakeTrash
      --now move the startfile to destination folder
      move file startFile to destinationFolder
                                                                                    end try
                                                                else -- "Don't replace"
                                                                          if not (exists folder "Hal 9000:Users:matthew:Desktop:Rejected Folder Done") then
                                                                                    set theLastFolder toduplicate foldericonto desktop
                                                                          else
                                                                                    set theLastFolder to folder"Hal 9000:Users:matthew:Desktop:Rejected Folder Done"
                                                                          end if
                                                                          delay 0.5
      move startFile to theLastFolder with replacing
                                                                end if
                                                      end try
                                            end repeat
                                  end repeat
                        end if
              end repeat
              try
                        if (count theLastFolder) is 0 then delete theLastFolder
              end try
    end tell
    to getUniqueName(someFile, someFolder)
         check if someFile exists in someFolder, creating a new unique file name (if needed) by adding a suffix
              parameters -          someFile [mixed]: a source file path
                                  someFolder [mixed]: a folder to check
              returns [list]:          a unique file name and extension
              set {counter, suffixes, divider} to {0, "abcdefghijklmnopqrstuvwxyz", "_"}
              set someFile to someFile as text -- System Events will use both Finder and POSIX text
              tell application "System Events" to tell disk item someFile to set{theName, theExtension} to {name, name extension}
              if theExtension is not "" then set theExtension to "." & theExtension
              set theName to text 1 thru -((length of theExtension) + 1) of theName -- just the name part
              set newName to theName & theExtension
              tell application "System Events" to tell (get name of files of folder(someFolder as text))
                        repeat while it contains newName
                                  set counter to counter + 1 -- hopefully there aren't more than 26 duplicates (numbers are easier)
                                  set newName to theName & divider & (item counter ofsuffixes) & theExtension
                        end repeat
              end tell
              return newName
    end getUniqueName

    There are numerous errors in your script, and it's a large script so there might be more, but these are the standouts for me:
    At line 48 you:
                                                                          set fileName to get name of startFile
    which is fair enough - you then use this to see if the file already exists in the destinationFolder. However, if it does the logic about how to deal with that is flawed.
    At line 56 you catch the error:
                                                                                    on error errmess number errnum -- oops (should probably check for a specific error number)
                                                                                              log "Error " & errnum & " moving file: " & errmess
                                                                                              set newName to my getUniqueName(fileName, fakeTrash)
                                                                                              set name of fileName to "this is a unique name" -- or whatever
                                                                                              set name of fileName to newName
      --Now move the renamed file to the fake trash
      move file fileName to fakeTrash
      --now move the startfile to destination folder
      move file startFile to destinationFolder
                                                                                    end try
    so let's focus on that.
    56: catch the error
    57: log the error
    58: generate a new unique filename
    59: change the name of fileName to some other string
    Hang on, wait a minute.... we already ascertained that at line 48 you defined fileName as a string object that indicates the name of the file. This is just a string. It's no longer associated with the original file... it's just a list of characters. Consequently you cannot set the 'name' of a string, hence your script is doomed to fail.
    Instead, what I think you want to do is set the name of the startFile to the unique string. Files have filenames, and therefore you can set the name.
    You have a similar problem on line 64 where you try to 'move file filename to fakeTrash'. fileName is just a string of characters. It isn't enough to identify a file - let's say the file name is 'some.psd'. You're asking AppleScript to move file some.psd to the trash. The question is which some.psd? The one on the desktop? in your home directory? maybe on the root of the volume? or maybe it should search your drive to find any/all files with that name? nope. None of the above. You can't just reference a file by name without identifying where that file is. So you probably want to 'move file fileName of destinationFolder...'
    There may be other problems, but they're likely to be related - all issues with object classes (e.g. files vs. strings), or not being specific about which object you want.
    As I said before, though, I might be way off - you don't say where the error is triggered to make it easy to narrow down the problem. Usually AppleScript will highlight the line that triggered an error. Knowing what that line is would help a lot.

Maybe you are looking for

  • How can I get flash video to work on ipad2 ?

    I have ipad2 on order - then realised does not support flash. All our training videos are flash !!! Do I cancel order or can I get flash to run on ipad2

  • Default Profit centre not picked up

    Hi, Document splitting is activated. Now i have assigned one bank account to one profit centre '1210' in tcode 3keh I am posting customer receipt. Customer is in profit centre '1100' I have defined zero balance clearing account - 20010010 Now when i

  • Sending an Email with an attachment for all the Customers

    Hi friends, How can i send an email with an attachment to the customers email address. the attachment will be in doc format. the data which i am sending must be in a TABLE format withe 5 columns. Having an Header and each column with a column heading

  • About focus

    I am moving our project from jdk1.3 to jdk1.4. And it's a puzzle that some component can not gain focus any more. So does anyone know what is the condition of obtaining the focus. For instance , I know , requestfocus() , setSelected() . I want to kno

  • Earphone not working on my iPhone but works fine on my laptop

    Whenever i use my earphone on my iPhone 4s, there's no sounds coming out on one of my earphone with the remote and mic(i mean the remote and mic works but no sounds from the earpiece) while the other one works fine. I tried using my earphone on my ma