VCL-1065
Reverted changes to update_cygwin.cmd previously committed which added an attempt to call mkgroup.exe and mkpasswd.exe with "-l localhost" arguments. Added sed.exe commands to strip the '<HOST>+ section from the beginning of lines in group and passwd if it exists.
Removed "-t rsa1" argument from ssh-keygen.exe command. Recent versions don't support this and display an error. Without the argument, the key will be generated with the default type.
Added command at the end of update_cygwin.cmd to delete the 'VCL Update Cygwin' scheduled task if it exists. It doesn't need to be called on every reboot.
Added call to Windows.pm::post_load to delete the 'VCL Post Load' scheduled task if it exists. Also added identical call to Windows.pm::create_update_cygwin_startup_scheduled_task to make sure that both the 'VCL Post Load' and 'VCL Update Cygwin' scheduled tasks don't both exist because they cause conflicts.
Added call to 8.pm::pre_capture to delete the 'VCL Update Cygwin' scheduled task if it exists before adding the 'VCL Post Load' scheduled task.
Added '/RL HIGHEST' argument to schtasks.exe call in Windows.pm::create_startup_scheduled_task. It causes the task to run with "highest privileges". This seems to have corrected issues on at least one image where update_cygwin.cmd failed to run because of what seems to be a UAC issue.
Added call to Windows.pm::create_update_cygwin_startup_scheduled_task to copy the update_cygwin.cmd file from the management node to ensure the most recent copy is used.
diff --git a/managementnode/lib/VCL/Module/OS/Windows.pm b/managementnode/lib/VCL/Module/OS/Windows.pm
index f658487..abd83bc 100644
--- a/managementnode/lib/VCL/Module/OS/Windows.pm
+++ b/managementnode/lib/VCL/Module/OS/Windows.pm
@@ -1012,6 +1012,15 @@
=item *
+ Delete the VCL Post Load' scheduled task if it exists
+
+=cut
+
+ # Make sure the 'VCL Post Load' task is removed up if it exists to avoid conflicts
+ $self->delete_scheduled_task('VCL Post Load');
+
+=item *
+
Call OS.pm::post_load
=cut
@@ -3599,7 +3608,7 @@
# Run schtasks.exe to add the task
# Occasionally see this error even though it schtasks.exe returns exit status 0:
# WARNING: The Scheduled task "System Startup Script" has been created, but may not run because the account information could not be set.
- my $command = "$system32_path/schtasks.exe /Create /RU \"$task_user\" /RP \"$task_password\" /SC ONSTART /TN \"$task_name\" /TR \"$task_command\"";
+ my $command = "$system32_path/schtasks.exe /Create /RU \"$task_user\" /RP \"$task_password\" /RL HIGHEST /SC ONSTART /TN \"$task_name\" /TR \"$task_command\"";
my ($exit_status, $output) = $self->execute($command);
if (!defined($output)) {
notify($ERRORS{'WARNING'}, 0, "failed to execute ssh command created scheduled task '$task_name' on $computer_node_name");
@@ -3640,6 +3649,7 @@
}
my $request_state = $self->data->get_request_state_name();
+ my $node_configuration_directory = $self->get_node_configuration_directory();
my $root_password;
if ($request_state =~ /(image|checkpoint)/) {
@@ -3660,8 +3670,13 @@
return;
}
+ # Make sure the 'VCL Post Load' task doesn't exist or they will conflict
+ $self->delete_scheduled_task('VCL Post Load');
+
+ # Copy the current version of update_cygwin.cmd to the computer
+ $self->copy_file_to("$SOURCE_CONFIGURATION_DIRECTORY/Scripts/update_cygwin.cmd", "$node_configuration_directory/Scripts/update_cygwin.cmd");
+
# Create a scheduled task to run post_load.cmd when the image boots
- my $node_configuration_directory = $self->get_node_configuration_directory();
my $task_command = "$node_configuration_directory/Scripts/update_cygwin.cmd >> $node_configuration_directory/Logs/update_cygwin.log";
if ($self->create_startup_scheduled_task('VCL Update Cygwin', $task_command, 'root', $root_password)) {
$self->{created_update_cygwin_startup_scheduled_task} = 1;
diff --git a/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm b/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
index 44196cb..1bc88e9 100644
--- a/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
+++ b/managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm
@@ -121,13 +121,15 @@
return;
}
+ # Make sure the 'VCL Update Cygwin' task doesn't exist or they will conflict
+ $self->delete_scheduled_task('VCL Update Cygwin');
+
# Create a scheduled task to run post_load.cmd when the image boots
- my $task_name = 'VCL Post Load';
my $task_command = "$node_configuration_directory/Scripts/post_load.cmd > $node_configuration_directory/Logs/post_load.log";
my $task_user = 'root';
my $task_password = $WINDOWS_ROOT_PASSWORD;
- if (!$self->create_startup_scheduled_task($task_name, $task_command, $task_user, $task_password)) {
- notify($ERRORS{'WARNING'}, 0, "failed to create '$task_name' scheduled task");
+ if (!$self->create_startup_scheduled_task('VCL Post Load', $task_command, $task_user, $task_password)) {
+ notify($ERRORS{'WARNING'}, 0, "failed to create 'VCL Post Load' scheduled task");
return;
}
diff --git a/managementnode/tools/Windows/Scripts/update_cygwin.cmd b/managementnode/tools/Windows/Scripts/update_cygwin.cmd
index 7778303..c09d9dd 100755
--- a/managementnode/tools/Windows/Scripts/update_cygwin.cmd
+++ b/managementnode/tools/Windows/Scripts/update_cygwin.cmd
@@ -64,17 +64,24 @@
echo.
echo %TIME%: Creating new "group" file...
-C:\Cygwin\bin\mkgroup.exe -l localhost || C:\Cygwin\bin\mkgroup.exe -l > C:\Cygwin\etc\group
+C:\Cygwin\bin\mkgroup.exe -l > C:\Cygwin\etc\group
echo ERRORLEVEL: %ERRORLEVEL%
set /A STATUS+=%ERRORLEVEL%
echo.
-echo %TIME%: Creating new "passwd" file and changing root's primary group from 'None' to 'None'
-C:\Cygwin\bin\mkpasswd.exe -l localhost || C:\Cygwin\bin\mkpasswd.exe -l | C:\Cygwin\bin\sed.exe -e 's/\(^root.*:\)513\(:.*\)/\1544\2/' > C:\Cygwin\etc\passwd
+echo %TIME%: Creating new "passwd" file
+C:\Cygwin\bin\mkpasswd.exe -l > C:\Cygwin\etc\passwd
echo ERRORLEVEL: %ERRORLEVEL%
set /A STATUS+=%ERRORLEVEL%
echo.
+rem Remove leading computer name: VCLV98-249+root: --> root:
+C:\Cygwin\bin\sed.exe -i -e "s/^[^:]\++//" /etc/group
+C:\Cygwin\bin\sed.exe -i -e "s/^[^:]\++//" /etc/passwd
+
+rem Change root's primary group from 'None' to 'Administrators'
+C:\Cygwin\bin\sed.exe -i -e "s/\(^root:.*:\)\(513\|197121\)\(:.*\)/\1544\3/" /etc/passwd
+
echo ----------------------------------------------------------------------
echo %TIME%: Restoring ownership of /etc/ssh* files...
@@ -115,7 +122,7 @@
echo.
echo %TIME%: Regenerating /etc/ssh_host_key...
-C:\Cygwin\bin\bash.exe -c 'C:/Cygwin/bin/ssh-keygen.exe -t rsa1 -f /etc/ssh_host_key -N ""' 2>&1
+C:\Cygwin\bin\bash.exe -c 'C:/Cygwin/bin/ssh-keygen.exe -f /etc/ssh_host_key -N ""' 2>&1
echo ERRORLEVEL: %ERRORLEVEL%
set /A STATUS+=%ERRORLEVEL%
echo.
@@ -134,6 +141,29 @@
echo ----------------------------------------------------------------------
+echo %TIME%: Killing any cyg* processes...
+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq cyg*" 2>NUL
+echo ERRORLEVEL: %ERRORLEVEL%
+echo.
+
+echo %TIME%: Killing any ssh* processes...
+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq ssh*" 2>NUL
+echo ERRORLEVEL: %ERRORLEVEL%
+echo.
+
+echo %TIME%: Killing any bash* processes...
+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq bash*" 2>NUL
+echo ERRORLEVEL: %ERRORLEVEL%
+echo.
+
+echo %TIME%: Killing any ash* processes...
+"%SystemRoot%\System32\taskkill.exe" /F /FI "IMAGENAME eq ash*" 2>NUL
+echo ERRORLEVEL: %ERRORLEVEL%
+echo.
+
+echo %TIME%: Tasks running before attempting to executing rebaseall:
+"%SystemRoot%\System32\tasklist.exe" /V
+
echo %TIME%: Running /usr/bin/rebaseall in the ash.exe shell
C:\cygwin\bin\ash.exe -c '/usr/bin/rebaseall' 2>&1
echo ERRORLEVEL: %ERRORLEVEL%
@@ -156,6 +186,14 @@
echo ----------------------------------------------------------------------
+echo %TIME%: Deleting 'VCL Update Cygwin' scheduled task...
+"%SystemRoot%\system32\schtasks.exe" /Delete /F /TN "VCL Update Cygwin"
+echo ERRORLEVEL: %ERRORLEVEL%
+set /A STATUS+=%ERRORLEVEL%
+echo.
+
+echo ----------------------------------------------------------------------
+
echo %SCRIPT_FILENAME% finished at: %DATE% %TIME%
echo exiting with status: %STATUS%
"%SystemRoot%\system32\eventcreate.exe" /T INFORMATION /L APPLICATION /SO %SCRIPT_FILENAME% /ID 555 /D "exit status: %STATUS%" 2>&1