VMware errore “VMK_NO_MEMORY” in avvio VM

Dopo un periodo abbastanza lungo di funzionamento le varie VM attive su un host, una volta spente non erano più avviabili, il Vcenter oppure il client Vsphere alla richiesta di accensione, riportavano il seguente errore “VMK_NO_MEMORY”

Nel tentativo di accedere alla shell sulla console dell’host veniva visualizzato il messaggio
“can’t fork”

Vmware-Vmk-nomemory-errorVmware-Vmk-cant-fork

 

 

Tramite l’accesso in SSH era possibile rilevare nel file
/var/log/vmkwarning.log
il seguente errore

 

2014-12-01 TIME cpu18:4287108)WARNING: Heap: 3058: Heap_Align(globalCartel-1, 136/136 bytes, 8 align) failed.  caller: 0x41802a2ca2fd
2014-12-01 TIME cpu8:4287111)WARNING: Heap: 2677: Heap globalCartel-1 already at its maximum size. Cannot expand.

Il problema si presenta su HW Hp ed è dovuto ad un problema nel driver AMS ( Agentless Management Service ) nelle seguenti versioni

  • hp-ams 500.9.6.0-12.434156
  • hp-ams-550.9.6.0-12.1198610
  • hp-ams 500.10.0.0-18.434156
  • hp-ams-550.10.0.0-18.1198610

La risoluzione dell’inconveniente consiste nella rimozione del software AMS dall’hypervisor.
I passi per la rimozione dell’AMS sono eseguiti direttamente dalla shell di VMware

  • esxcli software vib list | grep ams                       per verificare la versione installata
  • /etc/init.d/hp-ams.sh stop
  • esxcli software vib remove -n hp-ams                per rimuovere il software
  • Reboot dell’host

Riferimenti: VMware KB2085618

SQUID Reverse Proxy — forzare le connessioni in HTTPS

Nel caso ci sia la necessità di forzare le connessioni in HTTPS da parte di un reverse proxy con Squid, tramite la direttiva redirect_url  è possibile fare si che il traffico HTTP in ingresso venga rediretto in HTTPS mantenendo il resto dell’URL invariato.
La funzione $url =~ s/^http:/301:https:/ impone al browser la redirezione in HTTPS.

#!/usr/bin/perl
# URL rewriter per SQUID Http—>Https

$| = 1;
while (<>) {

my @X = split;
my $url = $X[0];

$url =~ s/^http:/301:https:/;

print “$urln”;

}


Può essere utile in fase di test rilevare lo stato della variabile $url passata da squid allo script e la modifica che verrà ritornata allo squid e successivamente al client, è possibile redirigere su file il contenuto della variabile stessa.

#!/usr/bin/perl
# URL rewriter per SQUID Http—>Https

$| = 1;
while () {

my @X = split;
my $url = $X[0];

######## Dichiarazione output $url proveniente da SQUID per TEST ############
my $filename = “/squid/Redirect/test.txt”;
open FILE, “>>$filename”;
print FILE “>>>>>>—–variabile IN—–>>>>>> “;
print FILE $url;
print FILE “n”;
close FILE;
######## FINE Dichiarazione output $url proveniente da SQUID per TEST

$url =~ s/^http:/301:https:/;

######## Dichiarazione output $url restituita a SQUID per TEST ############
my $filename = “/squid/Redirect/test.txt”;
open FILE, “>>$filename”;
print FILE “<<<<<<—–variabile OUT—–<<<<<< “;
print FILE $url;
print FILE “n”;
close FILE;
######## FINE Dichiarazione output $url restituita a SQUID per TEST
print “$urln”;

}

Si rimanda, per approfondimento sui codici di redirezione, alle pagine seguenti:

http://en.wikipedia.org/wiki/HTTP_302

http://en.wikipedia.org/wiki/HTTP_301

in breve il codice 301 è utilizzato per redirezioni permanenti, mentre il codice 302 è indicato in caso di redirezioni temporanee

Script in Powershell per la configurazione di stampanti remote

 Analogamente allo script precedente in cui le stampanti connesse sono create in modo automatico a partire da un elenco contenuto in un file, lo script proposto ora, presenta una maschera, nella quale sono impostabili le informazioni principali per la creazioni di stampanti connesse su un host remoto.

CreaStampante Remota

Eseguendo lo script viene attivata la maschera a lato, tramite la quale è possibile connettere su un host remoto, ( o locale ) è sufficiente impostarne il nome, una stampante a sua volta condivisa su un terzo host. E’ anche possibile dichiarare un driver, a condizione che questo sia già presente sul server.

# script per la creazione remota di stampanti connesse
# Vrs. 1.0 11 gennaio 2015 Robi Massa

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”)
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)

$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = “Creazione stampante ”
$objForm.Size = New-Object System.Drawing.Size(800,400)
$objForm.StartPosition = “CenterScreen”

$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq “Enter”)
{$x=$objTextBox.Text;$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq “Escape”)
{$objForm.Close()}})
# crea pulsante OK
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(200,320)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = “OK”
$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
$objForm.Controls.Add($OKButton)
# crea pulsante Cancel
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(300,320)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = “Cancel”
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)

########### Creazione delle TextBox e loro descizione #############

# crea descrizione Textbox NomePC
$objLabelNomePC = New-Object System.Windows.Forms.Label
$objLabelNomePC.Size = New-Object System.Drawing.Size(280,20)
$objLabelNomePC.Text = “Inserire il nome del pc su cui è connessa la stampante”
$objForm.Controls.Add($objLabelNomePC)
# crea Textbox NomePC
$objTextBoxNomePC = New-Object System.Windows.Forms.TextBox
$objTextBoxNomePC.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxNomePC)

# crea descrizione Textbox NomeStampante
$objLabelNomeStampante = New-Object System.Windows.Forms.Label
$objLabelNomeStampante.Size = New-Object System.Drawing.Size(280,20)
$objLabelNomeStampante.Text = “Inserire il nome della Share”
$objForm.Controls.Add($objLabelNomeStampante)
# crea Textbox NomeStampante
$objTextBoxNomeStampante = New-Object System.Windows.Forms.TextBox
$objTextBoxNomeStampante.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextBoxNomeStampante)

# crea descrizione Textbox NomePServer
$objLabelNomePServer = New-Object System.Windows.Forms.Label
$objLabelNomePServer.Size = New-Object System.Drawing.Size(280,20)
$objLabelNomePServer.Text = “Inserire il nome del Printer Server Windows”
$objForm.Controls.Add($objLabelNomePServer)
# crea Textbox NomePServer
$objTextboxNomePServer = New-Object System.Windows.Forms.TextBox
$objTextboxNomePServer.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextboxNomePServer)
#imposto il valore di default per il Printer Server
$objTextboxNomePServer.text = “nome.dominio.locale”

# crea descrizione Textbox Commento Stampante
$objLabelCommentPRN = New-Object System.Windows.Forms.Label
$objLabelCommentPRN.Size = New-Object System.Drawing.Size(280,20)
$objLabelCommentPRN.Text = “Inserire il Commento per la Stampante Creata”
$objForm.Controls.Add($objLabelCommentPRN)
# crea Textbox Commento Stampante
$objTextboxCommentPRN = New-Object System.Windows.Forms.TextBox
$objTextboxCommentPRN.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextboxCommentPRN)
# imposto il valore di default per il Commento
$objTextboxCommentPRN.text = “Stampante ufficio centrale”

# crea descrizione Textbox Driver
$objLabelDriverPRN = New-Object System.Windows.Forms.Label
$objLabelDriverPRN.Size = New-Object System.Drawing.Size(280,40)
$objLabelDriverPRN.Text = “Inserire il Driver per la Stampante Creata N.B. il driver deve già essere caricato sul server”
$objForm.Controls.Add($objLabelDriverPRN)
# crea Textbox Driver Stampante
$objTextboxDriverPRN = New-Object System.Windows.Forms.TextBox
$objTextboxDriverPRN.Size = New-Object System.Drawing.Size(260,20)
$objForm.Controls.Add($objTextboxDriverPRN)
#imposto il valore di default per il Driver
$objTextboxDriverPRN.text = “Generic / Text Only”

# Riporto qui le location dei vari oggetti in quanto più semplice la ridisposizione per coordinate all’interno del form
# (x,y) ( X verso DX, Y verso il BASSO)

$objLabelNomePC.Location = New-Object System.Drawing.Size(10,20)
$objTextBoxNomePC.Location = New-Object System.Drawing.Size(10,40)

$objLabelNomeStampante.Location = New-Object System.Drawing.Size(10,80)
$objTextBoxNomeStampante.Location = New-Object System.Drawing.Size(10,100)

$objLabelNomePServer.Location = New-Object System.Drawing.Size(10,140)
$objTextboxNomePServer.Location = New-Object System.Drawing.Size(10,160)

$objLabelCommentPRN.Location = New-Object System.Drawing.Size(400,20)
$objTextboxCommentPRN.Location = New-Object System.Drawing.Size(400,40)

$objLabelDriverPRN.Location = New-Object System.Drawing.Size(400,80)
$objTextboxDriverPRN.Location = New-Object System.Drawing.Size(400,120)

#####################################################################

$objForm.Topmost = $True

$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
#return $objTextBoxNomePC.Text, $objTextBoxNomeStampante.Text ,$objTextboxNomePServer.Text

#  variabili usate per la creazione delle stampanti recuperate dalle textbox
$DriverName = $objTextboxDriverPRN.Text
$CommentPrn = $objTextboxCommentPRN.Text
$NamePrinter = $objTextBoxNomeStampante.Text
$NamePrinterPort = “\”+$objTextBoxNomePC.Text+””+$objTextBoxNomeStampante.Text
$NamePrinterserver = $objTextboxNomePServer.Text

# creazione della Porta di stampa
Add-PrinterPort -ComputerName $NamePrinterserver -Name $NamePrinterPort
# creazione della stampante e connessione alla porta creata sopra
Add-Printer -ComputerName $NamePrinterserver -Name $NamePrinter -port $NamePrinterPort -DriverName $DriverName -Comment $CommentPrn

Linux LVS balancer configurazione Real Server

In questo precedente post ho riportato la configurazione del sistema LVS. Nella configurazione dei Server Reali tuttavia, è possibile non utilizzare il servizio arptables, ed attivare l’ip virtuale sulla interfaccia di loopback dei real server.

ifconfig lo:0 192.168.10 netmask 255.255.255.255  (l’indirizzo ip è il Virtual IP del balancer) il comando dovrà essere dichiarato sempre in /etc/rc.local

La netmask dovrà essere 255.255.255.255 a prescindere dalla reale maschera della rete cui sono connessi i server reali

E’ necessario poi, nascondere l’interfaccia di loopbak per impedire che questi rispondano alle richeste ARP per il Vip. Questo comportamento si può ottenere modificando opportunamente il file /etc/sysctl.conf

# Abilitazione della dichiarazione di hidden devices
net.ipv4.conf.all.hidden = 1
# dichiarazione dell'interfaccia di loopback come hidden
net.ipv4.conf.lo.hidden = 1

					

Creazione di stampanti tramite script Powershell

Nell’ambito della configurazione di un server di stampa centralizzato, può presentarsi il caso di dover creare un certo numero di stampanti con la relativa porta.
Lo script riportato consente la creazione automatica a partire da un elenco contenuto in un file di testo.
Il file deve riportare su ogni riga il percorso UNC della stampante da centralizzare e quindi da connettere al server.

Per poter agevolmente creare una stampante connessa, il file elenco dovrà essere strutturato nel modo seguente \nome-host,nome-share in questo modo il nome share verrà utilizzato anche come nome della stampante locale


# Creazione automatica stampanti etichette
# a partire da un elenco stampanti contenuto in un file in c:script con nome PrnEtichette.txt
# ogni riga del file deve contenere il percorso UNC della stampante nel formato \nome_host,nome_share
# Vrs. 1.0     11 gennaio 2015 Robi Massa

$CommentPrn = “Commento” # inserire la descrizione da aggiungere alla stampante creata
$DriverName = “Generic / Text Only”  # inserire il nome del driver ESATTAMENTE come viene visto dal S.OP.
$FileListPrn = Get-Content c:ScriptPrnEtichette.txt  # nome e posizione del file contenente le stampanti
foreach ($Printer in $FileListPrn)

{
$PrinterUNC = $Printer.Split(“,”)  # separazione della stringa in due parti definite da “,”
$NameHostUNC = $PrinterUNC[0]      # recupero del nome host \nome_host
$NamePrinterUNC = $PrinterUNC[1]   #recupero del nome della stampante in share
# eseguo il trim della variabile per eliminare “” ed utilizzare la nuova variabile come nome stampante
$NamePrinter = $NamePrinterUNC.TrimStart(“”)
# creo la porta accodando le due variabili, ottengo il percorso UNC della porta
Add-PrinterPort $NameHostUNC$NamePrinterUNC 
# creo la stampante e la associo al nome porta creata prima
add-printer -name $NamePrinter  -drivername $DriverName -port $NameHostUNC$NamePrinterUNC -Comment $CommentPrn
  }