lunes, 4 de julio de 2016

La mejor manera (que sepamos) de instalar Cumulative Updates o Service Pack 1


A veces nuestros pacientes llegan a nuestra clínica porque simplemente tienen algún complejo, partes de su cuerpo que funcionan mal y requieren correcciones o simplemente quieren sentirse mejor con su aspecto, por lo que se apuntan a hacerse un lifting, una liposucción para verse mejor en el espejo.

Qué mejor que una buena acutalización de software para que nuestros SharePoints salgan de la clínica con una nueva vida por delante llena de mejoras y fortalezas.

La parte fea del asunto es que hay que someter a nuestros pacientes a intensos dolores mientras dura la cirugía, y estos dolores afectan a sus usuarios, que podrían quejarse si les dejamos sin servicio demasiado tiempo o la cosa se nos va de las manos y la cirugía se complica haciendo que nuestro paciente pueda quedar tendido en la cama de operaciones sin constantes vitales.

Para evitar problemas, hemos elaborado buscando aquí y allá tras una serie de experiencias, una guía para realizar las operaciones sin muchos quebraderos de cabeza.

Necesitamos:

1.) Parche que queremos instalar, bien sea el Service Pack 1 o un Cumulative Update de cualquier mes, debemos recordar que para instalar cualquier Cumulative Update después de Abril de 2013 es obligatorio tener instalado el Service Pack 1.

Guia de actualizaciones de SharePoint.

2.) Un script de aprovisionamiento provisto por MSFT, código al final del artículo, que prepara el entorno para la instalación desactivando algunos servicios, algunos muy críticos cuya desactivación es muy importante como el servicio de búsquedas, instalando el parche y reactivando de nuevo los servicios para que todo vuelva a la normalidad

3.) Pasar el asistente de tecnologías y productos SharePoint una vez hecho lo anterior, preferentemente con un comando de PowerShell psconfig.

Es importante que tanto el parche como el script lo tengamos en la misma carpeta de Windows, la instalación puede ser hecha desde una ruta de red sin problemas.


Pasos:

1.) Ingresamos en el sistema con la cuenta de instalación y abrimos un PowerShell como administrador para ejecutar PatchFarm.ps1

                            

Recomendamos a los doctores aprovechar para tomar un relaxing cup of café con leche mientras se instala todo, a no ser que tengan más pacientes en lista, que deberían estar siendo atendidos, no invitamos desde aquí en absoluto a la inactividad habiendo cosas por hacer.

chaca-chaca-chaca...


chaca-chaca-chaca...


chaca-chaca-chaca...


2.) Una vez haya terminado exitosamente la instalación del parche, ejecutamos el asistente de productos y tecnologías con:

PSConfig.exe -cmd upgrade -inplace b2b -wait -force

Con esto ya habremos acabado la intervención, el post operatorio exige a nuestro paciente un leve reposo basado en el reinicio del servidor.

3.) Verificar desde la Central de Aministración que la actualización se ha llevado a cabo con éxito, desde patch installation status:



Código del script PathFarm.ps1:

<#============================================================
  //
  // Microsoft provides programming examples for illustration only,
  // without warranty either expressed or implied, including, but not
 // limited to, the implied warranties of merchantability and/or
  // fitness for a particular purpose.
  //
  // This sample assumes that you are familiar with the programming
  // language being demonstrated and the tools used to create and debug
  // procedures. Microsoft support professionals can help explain the
  // functionality of a particular procedure, but they will not modify
  // these examples to provide added functionality or construct
  // procedures to meet your specific needs. If you have limited
  // programming experience, you may want to contact a Microsoft
  // Certified Partner or the Microsoft fee-based consulting line at
  //  (800) 936-5200 .
  //
  // For more information about Microsoft Certified Partners, please
  // visit the following Microsoft Web site:
  // https://partner.microsoft.com/global/30000104 
  //
  // Author: Russ Maxwell (russmax@microsoft.com)
  //
  // ---------------------------------------------------------- #>
###########################
##Ensure Patch is Present##
###########################
$patchfile = Get-ChildItem | where{$_.Extension -eq ".exe"}
if($patchfile -eq $null)
{
  Write-Host "Unable to retrieve the file.  Exiting Script" -ForegroundColor Red
  Return
}
########################
##Stop Search Services##
########################
##Checking Search services##
$srchctr = 1
$srch4srvctr = 1
$srch5srvctr = 1
$srv4 = get-service "OSearch15"
$srv5 = get-service "SPSearchHostController"
If(($srv4.status -eq "Running") -or ($srv5.status-eq "Running"))
  {
    Write-Host "Choose 1 to Pause Search Service Application" -ForegroundColor Cyan
    Write-Host "Choose 2 to leave Search Service Application running" -ForegroundColor Cyan
    $searchappresult = Read-Host "Press 1 or 2 and hit enter"
    Write-Host
  
   if($searchappresult -eq 1)
    {
        $srchctr = 2
        Write-Host "Pausing the Search Service Application" -foregroundcolor yellow
        Write-Host "This could take a few minutes" -ForegroundColor Yellow
        $ssa = get-spenterprisesearchserviceapplication
        $ssa.pause()
    }
  
    elseif($searchappresult -eq 2)
    {
        Write-Host "Continuing without pausing the Search Service Application"
    }
    else
    {
        Write-Host "Run the script again and choose option 1 or 2" -ForegroundColor Red
        Write-Host "Exiting Script" -ForegroundColor Red
        Return
    }
  }
Write-Host "Stopping Search Services if they are running" -foregroundcolor yellow
if($srv4.status -eq "Running")
  {
    $srch4srvctr = 2
    set-service -Name "OSearch15" -startuptype Disabled
    $srv4.stop()
  }
if($srv5.status -eq "Running")
  {
    $srch5srvctr = 2
    Set-service "SPSearchHostController" -startuptype Disabled
    $srv5.stop()
  }
do
  {
    $srv6 = get-service "SPSearchHostController"
    if($srv6.status -eq "Stopped")
    {
        $yes = 1
    }
    Start-Sleep -seconds 10
  }
  until ($yes -eq 1)
Write-Host "Search Services are stopped" -foregroundcolor Green
Write-Host
#######################
##Stop Other Services##
#######################
Set-Service -Name "IISADMIN" -startuptype Disabled
Set-Service -Name "SPTimerV4" -startuptype Disabled
Write-Host "Gracefully stopping IIS W3WP Processes" -foregroundcolor yellow
Write-Host
iisreset -stop -noforce
Write-Host "Stopping Services" -foregroundcolor yellow
Write-Host
$srv2 = get-service "SPTimerV4"
  if($srv2.status -eq "Running")
  {$srv2.stop()}
Write-Host "Services are Stopped" -ForegroundColor Green
Write-Host
Write-Host
##################
##Start patching##
##################
Write-Host "Patching now keep this PowerShell window open" -ForegroundColor Magenta
Write-Host
$starttime = Get-Date
$filename = $patchfile.basename
$arg = "/passive"
Start-Process $filename $arg
Start-Sleep -seconds 20
$proc = get-process $filename
$proc.WaitForExit()
$finishtime = get-date
Write-Host
Write-Host "Patch installation complete" -foregroundcolor green
Write-Host

##################
##Start Services##
##################
Write-Host "Starting Services Backup" -foregroundcolor yellow
Set-Service -Name "SPTimerV4" -startuptype Automatic
Set-Service -Name "IISADMIN" -startuptype Automatic
##Grabbing local server and starting services##
$servername = hostname
$server = get-spserver $servername
$srv2 = get-service "SPTimerV4"
$srv2.start()
$srv3 = get-service "IISADMIN"
$srv3.start()
$srv4 = get-service "OSearch15"
$srv5 = get-service "SPSearchHostController"
###Ensuring Search Services were stopped by script before Starting"
if($srch4srvctr -eq 2)
{
    set-service -Name "OSearch15" -startuptype Automatic
    $srv4.start()
}
if($srch5srvctr -eq 2)
{
    Set-service "SPSearchHostController" -startuptype Automatic
    $srv5.start()
}
###Resuming Search Service Application if paused###
if($srchctr -eq 2)
{
    Write-Host "Resuming the Search Service Application" -foregroundcolor yellow
    $ssa = get-spenterprisesearchserviceapplication
    $ssa.resume()
}
Write-Host "Services are Started" -foregroundcolor green
Write-Host
Write-Host
Write-Host "Script Duration" -foregroundcolor yellow
Write-Host "Started: " $starttime -foregroundcolor yellow
Write-Host "Finished: " $finishtime -foregroundcolor yellow
Write-Host "Script Complete"


Referencias del presente artículo, aparte de la propia experiencia:

https://www.linkedin.com/pulse/step-by-step-cumulative-update-sharepoint-2013-dyung-ngo
http://blogs.msdn.com/b/russmax/archive/2013/04/01/why-sharepoint-2013-cumulative-update-takes-5-hours-to-install.aspx


No hay comentarios: