Archive › Howto

ESXi aggiornamento da linea di comando

Aggiorniamo il nostro server ESXi da linea di comando.

Ci connettiamo attraverso SSH al server (ssh root@esxi) e controlliamo la versione installata:

esxcli system version get
 Product: VMware ESXi
 Version: 6.5.0
 Build: Releasebuild-4887370
 Update: 0
 Patch: 9

a questo punto abilitiamo le connessioni in uscita http:

esxcli network firewall ruleset set -e true -r httpClient

e vediamo quali versioni sono disponibili per l’aggiornamento:

esxcli software sources profile list -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml | grep ESXi-6.5

ESXi-6.5.0-20170304101-no-tools VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06
ESXi-6.5.0-20170104001-no-tools VMware, Inc. PartnerSupported 2017-04-07T06:05:07 2017-04-07T06:05:07
ESXi-6.5.0-4564106-no-tools VMware, Inc. PartnerSupported 2016-10-27T05:43:44 2016-10-27T05:43:44
ESXi-6.5.0-20170304001-standard VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06
ESXi-6.5.0-20170301001s-no-tools VMware, Inc. PartnerSupported 2017-04-07T06:05:07 2017-04-07T06:05:07
ESXi-6.5.0-20170404001-standard VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06
ESXi-6.5.0-4564106-standard VMware, Inc. PartnerSupported 2016-10-27T05:43:44 2016-10-27T05:43:44
ESXi-6.5.0-20170404001-no-tools VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06
ESXi-6.5.0-20170304001-no-tools VMware, Inc. PartnerSupported 2017-04-07T06:05:07 2017-04-07T06:05:07
ESXi-6.5.0-20170104001-standard VMware, Inc. PartnerSupported 2017-04-07T06:05:07 2017-04-07T06:05:07
ESXi-6.5.0-20170301001s-standard VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06
ESXi-6.5.0-20170304101-standard VMware, Inc. PartnerSupported 2017-04-07T06:05:06 2017-04-07T06:05:06

La lista è limitata dal “grep ESXi-6.5” per essere un minimo più leggibile.

L’ultima versione disponibile è la “ESXi-6.5.0-20170404001-standard“.

La installiamo con il comando:

esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p ESXi-6.5.0-20170404001-standard

A questo punto è necessario un riavvio.

Dopo il riavvio dell’host controlliamo la versione installa:

esxcli system version get
 Product: VMware ESXi
 Version: 6.5.0
 Build: Releasebuild-5310538
 Update: 0
 Patch: 19

🙂

Comments ( 0 )

ESXi procedure di backup (ghettoVCB) permanenti

Se installiamo script o procedure su un server VMware ESXi dobbiamo assicurarci che vengano eseguite dopo un riavvio dell’host (previsto o non…)

Basta editare il file /etc/rc.local.d/local.sh come in questo esempio, dove ripristiniamo l’uscita delle mail e aggiungiamo al crontab la procedura di backup con ghettoVCB:

 /bin/cat > /etc/vmware/firewall/email.xml << EOF

email

outbound tcp dst 25

true
false


EOF
/sbin/esxcli network firewall refresh

/bin/kill $(cat /var/run/crond.pid)
/bin/echo "10 2 * * 3 /vmfs/volumes/raid5/scripts/ghettoVCB/ghettoVCB.sh -f /vmfs/volumes/raid5/scripts/ghettoVCB/VMs.txt > /vmfs/volumes/raid5/scripts/ghettoVCB/backup-\$(date +\\%s).log" >> /var/spool/cron/crontabs/root
crond
exit 0

Comments ( 0 )
Terminal-icon-shell-linux-unix

Rimuovere o modificare parte di nome su più file in bash

Una ricetta reve breve ma utile.

Dobbiamo rinominare una serie di file e rimuovere una parte del nome:

screenshot-primo.png
screenshot-secondo.png
screenshot-terzo.png
screenshot-quarto.png
screenshot-quinto.png

rimuoviamo una parte del nome (screenshot-) così:

for x in screenshot-*.png; do
echo $x | sed -r 's/screenshot-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

per tranquillità possiamo rimuovere l’ultima parte del comando (sh -e) per controllare quello che cerca di fare lo script.

se abbiamo, nel nome, anche una parte variabile da modificare possiamo utilizzare il carattere “.” per ogni lettera del nome.

Per esempio, per rinominare questi file:

100-immagini-primo.png
101-immagini-secondo.png
102-immagini-terzo.png
201-immagini-quarto.png
202-immagini-quinto.png

useremo questo script:

for x in *-immagini-*.png; do
echo $x | sed -r 's/...-immagini-(.+)\.png/mv -v "\0" "\1.png"/';
done | sh -e

fatto!

🙂

Comments ( 0 )
wd-logo

Disabilitare l’idle dei dischi WD (il problema del Load_Cycle_Count)

I dischi WD (specialmente nella declinazione Green), grazie all’Intellipark, si fermano quando non sono in uso.

Il problema è che il timer ha, per così dire, delle tempistiche un pò aggressive.

Di default il timer è impostato ad 8 secondi (sinceramente non riesco a capire quale ragione possa avere una cosa di questo genere) ed il disco, ogni 8 secondi, prova a parcheggiare le testine (ovviamente senza riuscirci).

Il problema è facilmente riscontrabile sia dal (tenue) rumore che il disco emette durante il tentativo di parcheggio che, attraverso i dati smart, visualizzando il parametro ‘193’:

# smartctl -a /dev/sdf | grep 193
193 Load_Cycle_Count 0x0032 197 197 000 Old_age Always - 11281

In questo caso, su questo disco, il contatore è a 11281.

Basta attendere pochi secondi ed eseguire nuovamente il comando per vedere il valore crescere.

Sistemiamo la cosa.

Scarichiamo gli idle tools dal sito ufficiale o da qui e procediamo alla compilazione.

# tar xzf idle3-tools-0.9.1.tgz
root@server ~/idle # ls
idle3-tools-0.9.1 idle3-tools-0.9.1.tgz
root@server ~/idle # cd idle3-tools-0.9.1/
root@server ~/idle/idle3-tools-0.9.1 # make
cc -g -O2 -W -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fkeep-inline-functions -Wwrite-strings -Waggregate-return -Wnested-externs -Wtrigraphs -c -o idle3ctl.o idle3ctl.c
cc -g -O2 -W -Wall -Wbad-function-cast -Wcast-align -Wpointer-arith -Wcast-qual -Wshadow -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fkeep-inline-functions -Wwrite-strings -Waggregate-return -Wnested-externs -Wtrigraphs -c -o sgio.o sgio.c
cc -s -o idle3ctl idle3ctl.o sgio.o
#strip idle3ctl

A questo punto possiamo verificare lo stato del timer sul nostro disco (opzione -g):

# ./idle3ctl -g /dev/sdf
Idle3 timer set to 80 (0x50)

Appunto. Impostato genialmente a 8 secondi.

Per disabilitarlo:

# ./idle3ctl -d /dev/sdf
Idle3 timer disabled
Please power cycle your drive off and on for the new setting to be taken into account. A reboot will not be enough!

A questo punto è RICHIESTO un power-cycle. NON un riavvio. Spengete e riaccendere il server.

Fatto.

Comments ( 0 )
apple-logo

MacBook Pro Inizio 2011 e 16GB di RAM

Se guardiamo le specifiche su sito della Apple riguardo al MacBook Pro di inizio 2011 vediamo questo:

MBPspecs

 

In realtà, con un minimo di impegno, si può fare molto meglio. Installiamo due So-Dimm da 8GB l’una e, piacevolmente, possiamo constatare come siano perfettamente supportate!

MBPearly2011

In questo caso ho installato due So-Dimm Corsair DDR3 1333. Tutto perfetto.

 

Comments ( 0 )
php-med-trans

Classi persistenti tra pagine in php

Può essere utile avere delle classi di dati persistenti attraverso più pagine php.

Per ottenere una funzionalità di questo genere utilizzeremo una classe “radice” che gestirà l’inizializzazione e la memorizzazione della nostra classe

my = new myClass();
if(isset($_SESSION["myclass"]))
$this->my = unserialize($_SESSION["myclass"]);
}

function __destruct() {
echo "
salvo in sessione con stringa: ".$this->my->getString()."
";
$_SESSION["myclass"] = serialize($this->my);
}
}
?>

La classe che ci interessa utilizzare e che deve essere quindi mantenuta tra le varie pagine php sarà una cosa del genere:

contatore = 1;
}

function setString($v) {
$this->stringa = $v;
$this->contatore++;
}

function getString() {
$this->contatore++;
return $this->stringa;
}

function accessi() {
echo "
Accessi alla stringa: ".$this->contatore."
";
}
}
?>

A questo punto non ci rimane che creare due pagine diverse che utilizzeranno la nostra classe radice e la nostra classe con i dati:

Inizio Pag1

";

$r = new root();

$r->my->setString("pippo");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("pippo2");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("yooooo");
echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

ed una seconda pagina che accederà agli stessi dati:

Inizio Pag2

";

$r = new root();

echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

Come mi è stato suggerito si potrebbe utilizzare redis (http://redis.io/) ed il client php (https://github.com/nrk/predis) per la memorizzazione della serializzazione della classe.

Altra interessante nota è che, date le caratteristiche di riflessione delle classi php, si potrebbe pensare di analizzare a runtime la classe stessa e salvarne (magari su redis) i dati importanti

Comments ( 0 )

Windows 7 utente di dominio amministratore pc locale

La procedura per rendere un utente di dominio amministratore di un pc con windows 7, è leggermente differente rispetto a windows xp. L’utente presente in active directory sul server, va aggiunto al database locale degli utenti di windows7 con questa procedura:

pannello di controllo, account utente, ancora account utente, gestisci account utente, scheda avanzate, pulsante avanzate, gruppi, click col destro sul gruppo Amministratori, proprietà, pulsante aggiungi, scegliere l’account utente di dominio desiderato e confermare il tutto.

Comments ( 0 )
wifi_squared

Network Manager su Debian Wheezy e intel 3945abg disabilitata

Ho installato GNU/Debian Wheezy su un Dell XPS. La scheda di rete è una Intel PRO/Wireless 3945ABG [Golan] come possiamo dedurre (!) con:

# lspci | grep 3945

0b:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)

Network manager si ostina a identificarla come disabilitata anche dopo aver aggiunto le fonti contrib e non-free a /etc/apt/sources.list ed aver installato il firmware e i tool corretti

/etc/apt/sources.list:

deb http://ftp.us.debian.org/debian wheezy main contrib non-free

e

# aptitude update && aptitude install firmware-iwlwifi wireless-tools

Per abilitare l’interfaccia si deve modificare il file /var/lib/NetworkManager/NetworkManager.state, nella direttiva main, e settare a “true” il campo “WirelwssEnabled”

.

Comments ( 0 )

Raid mdadm con dischi >2TB

Eccoci dunque ad usare “disconi”…

Non si possono partizionare con gli strumenti classici (disk/cfdisk) dato che il partizionamento msdos non permette partizioni più grandi di 2TB.

Utilizziamo quindi gnu parted (gparted)

# parted -a optimal /dev/sdd
GNU Parted 2.3
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.

creiamo il partizionamento GPT e creiamo la partizione principale:

(parted) mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No? yes
(parted) mkpart primary 1 -1
(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 1049kB 3001GB 3001GB primary

(parted) align-check
alignment type(min/opt) [optimal]/minimal?
Partition number? 1
1 aligned

controllino:

(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 1049kB 3001GB 3001GB primary

(parted) quit

adesso facciamo la stessa cosa per il secondo disco e procediamo alla creazione del dispositivo MD:

# mdadm --create /dev/md1 --level=mirror --raid-devices=2 /dev/sdc1 missing
mdadm: /dev/sdc1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Thu Sep 13 19:00:45 2012
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

creiamo il file system:

# mkfs.ext4 -m 0 -L SPACE /dev/md1
mke2fs 1.41.12 (17-May-2010)
Etichetta del filesystem=SPACE
Tipo SO: Linux
Dimensione blocco=4096 (log=2)
Dimensione frammento=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
183148544 inode, 732565982 blocchi
0 blocchi (0.00%) riservati per l'utente root
Primo blocco dati=0
Maximum filesystem blocks=4294967296
22357 gruppi di blocchi
32768 blocchi per gruppo, 32768 frammenti per gruppo
8192 inode per gruppo
Backup del superblocco salvati nei blocchi:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544

Scrittura delle tavole degli inode: fatto
Creating journal (32768 blocks): fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto

l’array è ancora degradato:

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc1[0]
2930263928 blocks super 1.2 [2/1] [U_]

aggiungiamo il secondo disco all’array:

# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: added /dev/sdd1

e controlliamo lo stato del riallineamento:

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdd1[2] sdc1[0]
2930263928 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 0.0% (2553536/2930263928) finish=496.8min speed=98212K/sec

 montiamo il filesystem e controlliamo:

# mount LABEL=SPACE /space/
# df -H /space
File system Dim. Usati Disp. Uso% Montato su
/dev/md1 3,0T 211M 3,0T 1% /space

 fatto.

Comments ( 0 )
administrator

Samba connesso ad un dominio – sincronizzazione password

Ho un server GNU/Debian 64 con samba connesso ad un dominio Windows. Capita che le password non siano più sincronizzate, nonstante abbia usato la direttiva:

machine password timeout = 0

nel file /etc/samba/smb.conf.

Per controllare la sincronizzazione delle password possiamo utilizzare questo script (/root/scripts/chkpassword):

#!/bin/bash
d=$(date)
echo "Controllo password: $d"
d=$(/opt/pbis/bin/lsa ad-get-machine password | grep NetBIOS | cut -d":" -f 2)
p=$(/opt/pbis/bin/lsa ad-get-machine password | grep Password | cut -d":" -f 2-)
p="${p#"${p%%[![:space:]]*}"}"
t=$(tdbtool /var/lib/samba/secrets.tdb dump | grep -A 2 SECRETS/MACHINE_PASSWORD\/ | tail -1 | cut -d" " -f 19- | tr -d ' ')
echo "Password nel controller di dominio: ["$p"]"
echo "Password nel database samba: ["$t"]"
echo " "

ed eventualmente metterlo in crontab per loggare la situazione settimanalmente:

00 6 * * 1 root /root/scripts/chkpassword >> /root/controllopwd.log

se la connessione al dominio è stata gestita tramite Power Broker allora possiamo riconnettere samba al dominio con (/root/scripts/resync):

#!/bin/bash
/opt/pbis/bin/samba-interop-install --install
/etc/init.d/samba restart

fatto

Comments ( 0 )