Sensu mysql check

Hi,

I’m working to setup some check on Percona mysql with Sensuapp – I worked with Nagios XI, to setup check on F.A.O  in Rome, I’m proud about that experience but that is another story  –

My recipe:

  1. yum install Development Tools
  2. yum install Percona-Server-devel-XXXX.el6.x86_64
  3. /opt/sensu/embedded/gem install cli
  4. /opt/sensu/embedded/gem install inifile
  5. /opt/sensu/embedded/gem install mysql

Then on GitHub

https://github.com/sensu-plugins/sensu-plugins-mysql

  • check-mysql-alive.rb
  • check-mysql-connections.rb
  • check-mysql-disk.rb
  • check-mysql-replication-status.rb

That’s all …..just a moment

can I use some kind of variable …. yes

variable definition on JSON of the client . These are mine:

/etc/sensu/conf.d/client.json
{
  "client": {
    "name": "servername.sensu.org",
    "address": "192.168.0.1@CT10074",
    "subscriptions": ["all","mysql"],
    "database": {
     "DiskSize": "200G",
     "SizeWarningThreshold": "85",
     "SizeCriticalThreshold": "95",
     "ReplicationLagWarningThreshold": "900",
     "ReplicationLagCriticalThreshold": "1800",
     "name": "mysqldb"
    },
    "connection": {
     "warnnum": "10",
     "critnum": "22"
    }
  }
}

 

I can use them in this way in JSON definition check :

:::database.name:::

:::database.DiskSize:::

:::connection.warnnum:::

an so on ..

One example

{
   "checks": {
    "mysql-alive": {
    "command": "check-mysql-alive.rb -h localhost --database :::database.name::: --ini '/etc/sensu/my.cnf'",
    "subscribers": [ "mysql-perf"],
    "interval": 300,
    "handlers": ["email_perl"]
   }
  }
}


I proud about this, too !!!

OpenSource and OpenMind

Hi,

spesso mi domando ma perchè mi affascina il “libero pensiero” del free software ?

La risposta è semplice :

C’è un progetto Z-Push-contrib

============

Original Z-Push

URL: http://www.zpush.org

Z-Push is an implementation of the ActiveSync protocol, which is used ‘over-the-air’ for multi platform ActiveSync devices, including Windows Mobile, Ericsson and Nokia phones. With Z-Push any groupware can be connected and synced with these devices.

License: GNU Affero Genaral Public License v3.0 (AGPLv3)

================

poi un ci si imbatte in qualche nuova esigenza #108 , #131 che il software non prevede e allora si chiede a Francisco Miguel Biete  che “scrive”  il codice se questa esigenza può essere  aggiunta.

Il “lavoro” viene  commissionato – Drenalina (www.drenalina.com) has kindly sponsored the implementation of those missing features. So it’s testing time for “meetings”- e regolato ed infine ecco comparire nuovamente il free software alla comunità.

fmbiente_drenalina

fmbiente_drenalina

Oltre al codice ci sono due persone che ci credono si  rispettano e cosa più importante rispettano  il lavoro di entrambi.

 

Che dire,  grazie Richard  Stallman  e tutte le persone che  hanno creato, alimentato e alimentano il free software

OpenVpn – load balancing e fault tolerance

Di recente ci siamo trovati a cercare una soluzione per una struttura reti VPN basate su OpenVPN. I client sono circa 200 in modalità mista (host-to-lan e lan-to-lan). Lo scenario di partenza è costituito da client e server basati su Zeroshell (diverse versioni).

 

La necessità del cliente è quella di aumentare la resistenza della propria infrastruttura e garantire agli utilizzatori finali delle vpn continua connettività verso il canale cifrato. Per raggiungere l’obiettivo abbiamo sfruttato alcune caratteristiche di openvpn e la capacità di utilizzare la macchina linux come router.

 

Il load balancing di OpenVpn

Openvpn implementa un sistema basilare di balancing basato sulla caratteristica del client di provare la connessione verso diversi endpoint fino a trovarne uno disponibile.

Ciò è possibile in due modi:

 

  1. inserendo più direttive remote nel client.conf
  2. indicando come endpoint della direttiva remote nel file client.conf un nome host (e non un indirizzo ip) la cui risoluzione offre diversi record A.

 

Nel primo caso, banalmente, il client tenta la connessione con la stessa configurazione a tutti i server conosciuti. Nel secondo caso invece risolve il nome host e tenta ciclicamente la connessione a tutti i record A ottenuti dal DNS.

 

Nel primo scenario l’ampliamento di macchine server necessità la modifica (e riavvio) di tutti i singoli client. Abbiamo preferito la seconda soluzione perchè si presta a minori interventi di manutenzione in caso di ampliamento del numero di macchine server a disposizione.

 

Faccio presente che comunque il sistema di load balancing basato su DNS è debole poichè il DNS non conosce lo stato dell’endpoint (di fatto non sa se il server openvpn ha un malfunzionamento). Tuttavia per una connessione VPN lo riteniamo accettabile in quanto le operazioni di connessione e disconnessione non sono frequenti. Inoltre un invio da parte del DNS di un ip indisponibile innescherebbe solo un ritardo nell’apertura del canale (comunque già in stato di disservizio).

 

Traffico originato lato server e diretto alla rete del client

A questo punto il grosso è fatto ed è affidato principalmente ad OpenVPN Client (o Zeroshell). Nello scenario affrontato tuttavia si è presentato la peculiarità di avere del traffico generato lato server diretto verso la rete dietro i client. Ciò ha innescato due problemi correlati tra loro:

 

  1. per come funziona il load balancing di openvpn, le macchine destinazione dei client vpn non avevano una rotta definita per le reti dei client;
  2. OpenVPN per sua natura definisce le rotte statiche per le net dei client allo startup del demone e non alla connessione del client.

 

Il primo problema è stato risolto installando un demone di routing dinamico (RipV2) sulla macchina OpenVpn Server in grado di propagare le rotte “dietro i client”. Il secondo problema invece ha richiesto una modifica della configurazione di openvpn e l’utilizzo di scripting.

 

In sostanza avviene che il demone Rip aggiorna le rotte statiche appena esse vengono aggiunte alla macchina. OpenVpn aggiunge le rotte statiche verso le reti dei clienti nel momento in cui parte e legge le direttive route e iroute necessarie ad eseguire il routing. Se openvpn aggiungesse le rotte al momento della connessione ed autenticazione del client il problema si sarebbe risolto solamente con il Rip.

 

Soluzione

Openvpn nelle sue pagine di Man indica la modalità di configurazione del routing verso le reti dei client utilizzando una sintassi di questo tipo:

 

nel file server.conf:

route 192.168.88.0 255.255.255.0

mentre nel ccd\common-name

iroute 192.168.88.0 255.255.255.0

 

La prima di queste due istruzioni implica che allo start del processo server viene eseguita la “route add” della rotta verso il tunnel vpn per raggiungere il client. Ma in uno scenario multi server si avrebbe una ridondanza delle rotte (e senza metrica). Di fatto un client RIP non sarebbe in grado di conoscere la rotta corretta.

 

La soluzione studiata verificata e testata è stata quella di omettere l’istruzione route del file server.conf ed eseguire la route add tramite script alla connessione del client (evento di client-connect). Analogamente eseguendo la “route del” della rotta all’evento di client-disconnect.

 

Questa soluzione permette la propagazione delle rotte via RIP in maniera automatica, quindi (a prescindere dal “server di ingresso” del client nella vpn) un client rip riuscirà ad instradare correttamente il traffico.

 

 

 

Autore: Michele Terlizzi – michele@terlizzi.eu

Data: 7 Maggio 2015

Versione di riferimento: OpenVpn 2.3, Zeroshell 3.3

How To Set Up A Small SmartOS Server To Do Big Things di Tim Boudreau

            Ho chiesto a Tim Boudreau di poter tradurre il suo fantastico articolo in italiano, e già qui sono cominciate le difficoltà :) modi di dire, verbi da coniugare.  L’articolo è datato 9 Dicembre 2014 ma è un canovaccio per chi vuole “assaporare” il gusto della scoperta di SmartOS. La mia rilettura vuole esser un piccolo contributo a far conoscere questa “opera d’ingegno” e  cercherò di attualizzare l’articolo con i riferimenti presi dalla maillist di SmartOS così come dalle nuove evoluzioni di SmartOS oggi. La mia revisione è in bozza  e lo  revisiono nei ritagli di tempo. Anche se solo riuscissi a farVi leggere l’articolo originale per me sarà stato un successo.  L’articolo è stato scritto prima su google doc e poi qui ricopiato ci sono errori nella formattazione che man mano risolverò.  Ho promesso a Tim di avvisarlo quando il suo articolo vedrà la luce, ma aspettiamo che abbia una forma più consona. La traduzione è ancora quasi letterale… vorrà dire  che potrà solo migliorare.

How To Set Up A Small SmartOS Server To Do Big Things

Come configurare un piccolo server SmartOS per fare grandi cose di Tim Boudreau

Questo server (il server che ospita i contenuti di Tim ) implementa SmartOS di Joyent – che è pubblicizzato come  “il sistema operativo per la nuvola” da usare nei grandi datacenters. Ma è anche un fantastico OS per lavorare con server relativamente piccoli – una storia che raramente è stata raccontata. Puoi ottenere molto di più dal tuo hardware che con la virtualizzazione tradizionale – in tal senso SmartOS ha lo stesso approccio che fa Docker, ma è maturo ed è in produzione da anni. SmartOS è costruito intorno alle “zones” – una virtual machines leggera ereditata da Solaris – un OS largamente riconosciuto per la sua affidabilità.

Di seguito,  affronterò passo passo la configurazione di un piccolo SmartOS server che può fare sorprendenti grandi cose – Io sono continuamente sorpreso di quanto  posso fare con un così piccolo hardware con SmartOS.

La scatola che ospita questo sito è un Dell CS-24SC del 2008  preso su eBay per 120$ con 8 core 16Gb di RAM e tre dischi da 3TB ed uno SSD da 60 GB per la cache ZFS ( se sei interessato a questo tipo di server, considera il suo fratello maggiore che ha una CPU abbastanza nuova per eseguire anche VM  Linux ). Il server ha 13 zone – 13 macchine virtuali in esecuzione, una delle quali è un server streaming video per una stazione di accesso pubblico che la trasmette a casa ( I vivo in un buco nero della broadband) un’altra di queste è un server  Jenkins,  più Git e Mecurial servers, diversi siti web, e una manciata di webapps casuali.

Ha fatto questo felicemente per un anno e mezzo, senza tempi morti a meno di  aggiornamenti di routine e occuparsi del  bug heartbleed OpenSSL, senza grandi grattacapi. Io sfido chiunque a fare lo stesso con 16Gb di RAM mediante la virtualizzazione tradizionale senza  stipare tutto in una singola VM. SmartOS è un fantastico OS, perfino quando tu non lo esegui su di una montagna di hardware – e mi ha fatto risparmiare denaro e malditesta. Lo può fare anche per te. Se tu hai familiarità con Linux o MacOS, non è una insuperabile curva di apprendimento,

Poichè la società produttrice è una società “Cloud”, la storia di cosa può fare su piccoli server è raramente raccontata, ma questa è la sua arma segreta.

Zone contro Container contro VM ?

Solaris  chiama le  VM “leggere” zones; Docker le chiama containers; per te probabilmente è facile chiamarle VMs. Rileggendo questo blog, ho realizzato di aver usato tutti e tre i termini. Per il mio scopo qui, hanno lo stesso significato.

Circa gli Strumenti di amministrazione Web ?

Ci sono due eccellenti scelte in questo campo –  Smart Data Center  di Joyent per una installazione multi server ( head node and compute node)  e Project FIFO . In questo articolo faremo tutto da soli, che può essere più semplice se sei a tua agio con la la shell.

–nota:  SmartDataCenter is an open-source cloud management platform  !!!!!!!

Virtualizzazione Leggera

La virtualizzazione leggera per SmartOS significa che:

  • C’è solo un OS, e per ragioni pratiche è in sola lettura
  • Puoi partire da una chiavetta USB. Desideri aggiornate il tuo OS? Inserisci una nuova chiavetta USB. Io non posso che enfatizzare la correttezza di questa scelta.
  • In tutti gli altri aspetti ogni zona o container è una macchina virtuale, con la sua interfaccia di rete, etc, isolata dal resto dell’universo
  • Ottieni le performance del tuo hardware – nessuna emulazione, nessun driver I/O virtuale che comunica con il vero driver I/O, nessuna copia in memoria extra per inserire o rimuove dati
  • Puoi fare molto di più con un con minimo hardware di quanto tu potresti se utilizzassi una completa virtualizzazione ( pensa SmartOS supporta KVM, così se desideri delle VM Linux le puoi  avere) – Today you can have more LX Branded Zones
  • Ogni zona ha il proprio volume ZFS – così ottieni un filesystem professionale a prova di proiettile con ridondanza, snapshots  che puoi inviare facilmente ad un’altra macchina e di facile gestione.

Se tua hai ascoltato tutta l’eccitazione nell’ultimo anno circa Docker, questo è perchè Docker ha finalmente portato parte delle funzionalità a Linux che SmartOS e Solaris hanno fatto per anni. Per onestà Docker non indirizza esattamente le stesse cose come SmartOS ma l’assunto sulla virtualizzazione è simile.

Viviamo in un mondo dove la virtualizzazione proviene dalla terra degli emulatori, e condividere un OS e l’hardware è sicuramente più difficile da ottenere che emulando tutto con il piccolo aiuto dalla CPU, e farlo in modo che non sia terribilmente lento – qui e dove un decennio o due di ingegneri Solaris  hanno  mostrato il proprio valore.

Ma non sono qui per parlarti delle meraviglie di SmartOS – altri lo hanno già fatto –  Questa è una configurazione pratica di un singolo server per ospitare più siti web. I vantaggi sono :

  • Ogni zona può essere gestita indipendentemente, compreso il lasciare ad altri l’accesso ssh per la sua gestione in autonomia.
  • Ad ogni zona  può essere assegnato il prorio disco e la propria quota di CPU
  • Ad ogni zona può essere regolata in modo tale da non interferire con le performance delle altre – per esempio, la mia VM Jenkins lavora intensamente con CPU e disco, però nello stesso tempo fornisce un flusso video senza singhiozzi
  • E questo significa che la gestione di qualunque VM si affronta senza quasi nessun rischio di interruzione delle altre
  • Backup incrementali delle zone posso essere fatti utilizzando zfs send  – I’ d like to test ZnapZend, too.
  • Le zone attive possono essere spostate tra macchine fisiche utilizzando vmadm send

La configurazione

Andremo a configurare SmartOS come segue:

  • Una interfaccia di rete, due indirizzi ip esterni, solo uno dei quali sarà indirizzabile dall’esterno
  • Hypervisor, che non fa nulla ma, um , hypervise – è il OS che boots dalla chiavetta USB
  • Un “etherstub” o una rete virtuale interna alla macchina
  • Una “zona firewall” che
    • agisce come router per tutte le zone – tutto sulla rete 10.0.0.*
    • inoltra le porte per l’accesso ssh alle altre zone e cose simili
    • esegue NginX come “porta d’ingresso” per le applicazioni web presenti nelle altre zone
      • HTTPS è in questa zona, e la comunicazione è HTTP sulla rete privata virtuale

Cosi tutte le zone ospitano una applicazione web saranno solo interni, rete virtuale 10.0.0.*. Grazie al NAT, le applicazioni saranno capaci di comunicare con il mondo esterno. Ma saranno completamente  “isolate” dal mondo esterno, bello e sicuro.

La sola cosa  brutta di questa configurazione è che i certificati SSL per eseguire HTTPs per gli host virtuali saranno nella zona firewall piuttosto che viaggiare con la zona dove viene eseguito il codice. Ma  la ricompensa e che puoi eseguire più siti su un singolo indirizzo IP senza che la manutezione su di uno metta gli altri a rischio.

Small Server E SmartOS

Se vuoi provare questa configurazione puoi fare con VirtualBox,  può essere un modo semplice per bagnarsi i piedi con SmartOS – scarica l’immagine ISO e boot. Non potrai eseguire le VM Linux in SmartOS con Virtualbox , ma potrai fare quanti container SmartOS desideri ( although can be done with Vmware Workstation and  BIOS  VT-x  extension enabled )

Ancora più bello, tu puoi costruire le tue zone su SmartOS in Virtualbox e usare vmadm send per copiare la zona sulla macchiana fisica. Io l’ho utilizzato ininterrottamente  per spostare le VM tra le scatole, ed è fantastico. Sii certo di configurare la VM  in Virtualbox con la sua rete in “bridge mode”  e nell’impostazioni avanzate abilitare “modo promiscuo”. Non sarai in grado di eseguire delle VM Linux in  SmartOS all’interno di Virtualbox, ma questo non importa per quello che faremo qui. Le basi di quello che faremo qui può essere trovato in “NAT using Etherstub wiki article

Installing SmartOS

Boot dal dispositivo di installazione. Ti verrà chiesto di configurare la rete e scegliere un disco su cui installarlo.  Puoi accettare il valore di rete predefinito DHCP – sarà il il tuo router di rete ad assegnarli un indirizzo IP, questo è ottimale per ottenere la configurazione, ma non otterrai necessariamente  lo stesso indirizzo IP ogni volta, quindi DHCP non è una buona idea a lungo termine. La maggior parte del tempo interagirerai con la macchina da remoto, quindi vorrai dargli un IP dedicato, o al massimo configurare il DHCP sul tuo router ed assegnare sempre al suo indirizzo MAC lo stesso IP ( questo può essere utile sino a quando le cose non si rompono,  se cambi router, sarai in grado di connetterti in ssh solo sei sarai ingrado di trovare il suo IP )

Alla fine della configurazione ti sarà chiesto se vuoi modificare la configurazione. Scegliendo Y ti ritroverai nel “venerabile” editor vi. Andrai ad aggiungere una linea alla configurazione

etherstub=”stub0”

Puoi rieditare questo file dopo!  Su di un sistema attivo , è /usbkey/config – cambialo e esegui sysinfo -u a linea di comando per aggiornare il sistema senza riavviarlo.

La linea “etherstub”  definisce per noi l’interfaccia  di rete virtuale – una interfaccia di rete virtuale (NIC) che sarà la sola che la maggior parte dei nostri container potrà vedere. Il container “firewall” avrà una NIC esterna e agirà come router  e farà NAT per gli altri. Tutti gli altri container saranno solo sulla rete virtuale – completamente inaccessibile dalla rete esterna eccetto attraverso  la zona firewall. La zone firewall farà:

  • agirà come router  NAT per la nostra rete interna virtuale
  • inoltrerà le porte alle macchine che necessitano di un contatto diretto con l’estreno
  • eseguirà NginX come web proxy per le applicazioni  web nelle altre zone, utilizzando l’intestazione Host HTTP e SNI per inoltrare le richieste correttamente.

Questo ha il beneficio che ogni servizio può essere gestito indipendentemente, avere la propria quota disco, percentuale di CPU e I/O – e in virtù dell’essere  firewalled,  loro sono più sicuri.

Una volta fatto le modifiche della configurazione accetta la conferma. Il programma di installazione creerà un  pool ZFS sui dischi che avrai selezionato e riavvierà . Lascia inserito il media di boot – tu sempre partirai dal CD o dall’immagine USB – i tuoi dischi sono per le tue cose ( e quando vorrai aggiornare il tuo OS , inserisci una nuova chiavetta USB!)

( That care about this note, you can delete ALL your data, so if you need some “special” zpool configuration can be done:

boot in recovery mode
create your "special" configuration of the zones pool
#zpool create zones mirror/raidz/raidz2  disk1 disk2 ...
then reboot and follow the istruction but on question about the disk configuration just choose one disk
SmartOS is so smart to read the configuration of the pool zones and go ahead

)

Una volte che la macchina riparte, la prima cosa da aggiornare è la lista delle immagini  disponibili

imgadm update

Dopo prenderemo una copia in locale di una minimale e base zona. Cercheremo una chiamata ‘base64′ e ce sono normalmente una manciata disponibili.

(

You can read more and learn new images on Jonathan Perkin  blog 

b1b72a76-c1bc-11e4-849e-3bc862098cfd base-32-lts        14.4.0 smartos 2015-03-03T15:48:10Z
c02a2044-c1bd-11e4-bd8c-dfc1db8b0182 base-64-lts        14.4.0 smartos 2015-03-03T15:55:44Z
e6c33e24-c1be-11e4-a968-37d204f6e644 base-multiarch-lts 14.4.0 smartos 2015-03-03T16:03:58Z
053c8daa-e50b-11e4-a46f-d7461f85a689 base-32-lts        14.4.1 smartos 2015-04-17T14:07:02Z
24648664-e50c-11e4-be23-0349d0a5f3cf base-64-lts        14.4.1 smartos 2015-04-17T14:15:04Z
5eb06d96-e50d-11e4-8e01-d7ccbd084ebf base-multiarch-lts 14.4.1 smartos 2015-04-17T14:23:51Z
2ef52d84-ea5e-11e4-a8fe-e788a695e1e9 base-32            15.1.0 smartos 2015-04-24T08:44:56Z
4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64            15.1.0 smartos 2015-04-24T08:52:36Z
6c5f50a8-ea60-11e4-bd9d-c3e0b2054011 base-multiarch     15.1.0 smartos 2015-04-24T09:00:58Z

)

Per elencarli esegui

imgadm avail | grep base64

Che darà una riposta come:

root@sm ~ $ imgadm avail | grep base64
dc0688b2-c677-11e3-90ac-13373101c543 base64 13.4.2  smartos 2014-04-17T21:33:04Z
.
.
4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64[1] 15.1.0 smartos 2015-04-24T08:52:36Z

La colonna a sinistra è UUID, che è utilizzato per identificare l’immagine e le macchine virtulali ( non preoccuparti non dovrai scriverlo !)

Ci sono altri tipi di immagini disponibili, con vario software preinstallato. Ignorarli per ora, forse per sempre – pkgin è facile da usare per installare qualunque cosa tu desideri sull’immagine base.

Annota l’ultimo UUID – che sarà il più recente. I file JSON che andrai a scaricare per tutte le definizioni delle VM si riferiranno a quelle elencate in precedenza – ma tu dovrai usare la più recente che c’è. Sosituisci lo UUID nella seguente linea di comando con l’ultima che tu vedi,  esegui

imgadm import 62f148f8-6e84-11e4-82c5-efca60348b9f

Importante:   annota il più recente UUID  – se non è uno presente nella linea precedente, tu  lo dovrai sostituire nei file che andrai a scaricare come campo dataset_uuid  nei file JSON di definizione delle VM.

Personalizzare “the Hypervisor”

Ci accingiamo a personalizzare un po di cose sul nostro hypervisor. Con SmartOS, il sistema operativo è in sola lettura, ma /opt è in lettura/scrittura, e c’è un meccanismo per eseguire del codice al boot per configurare qualunque cosa tu voglia personalizzare. Questo coinvolge due cose – un SMF manifest – che è un file XML – ed uno script da eseguire.

Essenzialmente, tu avvii lo stesso OS ogni volta, con le sue configurazioni originali e le zone – macchine virtuali –  dove le tue cose vengono eseguite. L’Hypervisor non fa nulla ma gestisce le macchine virtuali. Così ogni personalizzazione dell’ambiente al boot va rifatto durante il boot mediante il servizio che stiamo per installare, che eseguirà uno script come root all’inizio.

Prima, andremo a scaricare una copia del manifesto SMF nel posto giust. Non necesstia di nessuna variazione poiché è solo un puntamento ad una shell script che andremo ad eseguire dopo. SMF è una cosa magnifica, proviene da un’epoca quando l’industria aveva uninsano feticismo per XML

mkdir -p /opt/custom/smf/

cd $_

wget http://timboudreau.com/files/systemprep.xml

Successivamente ci serve lo script che farà il lavoro:

mkdir -p /opt/custom/share/svc

cd $_

wget http://timboudreau.com/files/smartos_setup.sh

chmod ug+x smartos_setup .sh

Tutto quello che configura è una ragionevole  .bashrc , il nome host , e abilita IP forwarding. Potrai editare un ragionevole hostname  e se il prompt colorato ti infastidisce commentali.

A questo punto, andiamo avanti e  riavviamo e sapremo se lo script verrà eseguito. Se il prompt dei comandi è giallo e blu quando tu riaccedi, ha funzionato.

Creazione della zona firewall

Successivamente andremo a creare una coppia di zones – virtualizzazione leggera simile a quella che Docker sta portando finalmente su Linux. Creare una macchina virtuale significa scrivere un file JSON con alcune indicazione e passarlo al comando “vmadm create -f. Terremo questi file  in /opt/vmdefs, poichè sono molto simili, li si può usare come modello per la prossima che creerai. Queste sono le due di cui ho parlato, una che definiamo un “firewall” VM, e un’alra che definiamo una VM client. Dovrai editare questi prima di usarli come descriverò di seguito:

mkdir /opt/vmdefs

cd $_

wget http://timboudreau.com/files/firewall2.json

wget http://timboudreau.com/files/scottenfinn.json

I show you what is in firewall2.json :

cat firewall2.json

{
  "alias": "gateway",
  "hostname": "gateway",
 "brand": "joyent",
  "quota": 10,
   "max_physical_memory": 1024,
 "dataset_uuid": "62f148f8-6e84-11e4-82c5-efca60348b9f",
   "default_gateway": "X.X.X.1",
   "resolvers": [
     "8.8.8.8",
     "8.8.4.4"
   ],
   "nics": [
     {
       "nic_tag": "admin",
       "ip": "X.X.X.X",
       "netmask": "255.255.255.0",
       "allow_ip_spoofing": "1",
       "gateway": "X.X.X.1",
       "primary": "1"
     },
     {
       "interface": "net1",
       "mac": "91:g6:47:4c:12:22",
       "nic_tag": "stub0",
       "gateway": "10.0.0.1",
       "ip": "10.0.0.1",
       "netmask": "255.255.255.0",
       "allow_ip_spoofing": "1"
     }
   ]
 }

I show you what is in scottefinn.json :

cat scottefinn.json   

{
“alias”: “scottenfinn”,
“hostname”: “scottenfinn”,
“brand”: “joyent”,
“quota”: 10,
“max_physical_memory”: 1024,
“dataset_uuid”: “62f148f8-6e84-11e4-82c5-efca60348b9f”,
“default_gateway”: “10.0.0.1”,
“resolvers”: [
“8.8.8.8”,
“8.8.4.4”
],
“nics”: [
{
“nic_tag”: “stub0″,
“ip”: “10.0.0.2”,
“netmask”: “255.255.255.0”,
“allow_ip_spoofing”: “1”,
“gateway”: “10.0.0.1”
}
]
}

Il primo che useremo è chiamato firewall2.json. Lo modificherai per configurare l’indirizzo IP adeguato  alla tua rete ( ancora, puoi usare DHCP per le connessioni esterne, ma questo sarà inutilizzazbile se vuoi veramente fornire sevizio a meno che lo blocchi dal DHCP e mediante il suo indirizzo MAC virtuale).

Ora, avrai bisogno di una coppia di modifiche minori, mediante vi  al file firewall2,json  che hai scaricato. Il suoi contenuti sono più o meno espliciti ( guarda la pagina del manuale  vmadm per i dettagli).  Nel dettaglio dovrai cambiare

  • Il deafult gateway – dovrà essere l’indirizzo IP del router sulla tua rete
  • Il valore ip nella prima sezione sotto nics  – lo puoi configurare a dhcp per ottenere un ip automaticamente, ma non è una scelta utile a lungo termine.
  • Il valore gateway nella prima sezione sotto nics coincide la configurazione default_gateway

Se hai importato immagini OS differenti, ora è il momento di modificare firewall2.json e variare il valore del dataset_uuid al valore del uuid dell’immagine importata.

Una folta fatto, sei pronto per creare “la zona”:

vi firewall2.json

vmadm create -f firewall2.json

vmadm list

L’ultimo comando dovrebbe darti un risultato simile

root@sm ~ $ vl

UUID                                  TYPE  RAM      STATE      ALIAS

f8954f61-b002-4b4d-9795-920a32944e86  OS    1024     running  gateway

SmartOS predilige UUID. Li ama veramente gli UUID. Gli umani non prediligono gli UUID. Fortumnatamente , c’è il completamento della shell – per questo tu puoi accadere alla virtual machine mediante il comando di zlogin f8 e la pressione del tasto tab per completarlo. Potrebbe essere peggio, ma certamente può essere migliorato.

Poiché questo non è ancora  così divertente ( tu devi conoscere lo UUID della macchina a cui vuoi riferirti), ti darò un coppia di strumenti per fare il lavoro con meno fatica. Primo, lo script di configurazione[2] precedente crea un alias vl  al comando vmadm list . Secondo, fa questo

mkdir -p /opt/local/bin/

vi /opt/local/bin/zz

All’apertura aggiungi

#!/bin/sh

zlogin `vmadm list | grep $1 | cut -b-36`

Non è perfetto se hai due zone con nomi simili, ma funziona. Chiudi il tuo editor e imposta il bit di esecuzione sullo script:

chmod u+x $_

Ora invece di eseguire zlogin f8954f61-b002-4b4d-9795-920a32944e86  puoi eseguire zz gate e accedere. Non è lo script il più sofisticato – se hai zone con nomi simili, puoi accidentalmente accedere a quella sbagliata. Quindi non lo fare e questo lavorerà per te.

Andiamo avanti e accediamo alla zona usando zlogin – è come accedere via ssh  ma dalla console dell’hypervisor, senza la necessità delle credenziali ( questo è il motivo  perchè  tu sigillerai il tuo hypervisor  bene e veramente! )

zz gate

La prima cosa da verificare è essere sicuri the la rete è funzionante nella zona

ping yahoo.com

note[3]: if you are play with VM ware workstation, with KVM zone ping is more responsive like a metal but with OS zone ping with -s option is more slow  so slow that also ping same local ip  is slow to answer just ping -s 127.0.0.1 is actually responsive. So if you have to check network please use also dig , wget www.some.internet.org or wait more time to get an answer before to think bad words :)

Se fallisce, ci sono poche cose che possono andare male. Se stai provando SmartOS in Virtualbox, accertati di configurare la tua rete in modalità “bridge” e nelle opzioni avanzate che sia configurata e selezionata  “promiscuous mode” perchè facciamo in modo che  l’interfaccia di rete possa di ottenere indirizzi MAC e IP multipli.

Note[4] : with vmware worstation – in my setup – just a nic and with NAT mode on

Se questo non è il problema prova a eseguire un ping ad un indirizzo come ping 8.8.8.8. Se questo  funziona, per ora, modifica il file /etc/resolv.conf e accertati che i DNS servers puntano in modo corretto ( SmartOS punta i DNS pubblici di Google che sono 8.8.8.8 e 8.8.4.4 ). Se tutto il resto fallisce, ricontrolla la configurazione della rete – la puoi vedere usando vmadm get $UUID dall’Hypervisor

Renato’s note: vmadm get $UUID  | json nics , in this way you can check all json nics array

[

  {

    “interface”: “net0″,

    “mac”: “f2:d9:84:90:92:53″,

    “nic_tag”: “fw0″,

    “gateway”: “10.0.0.1”,

    “ip”: “10.0.0.102”,

    “netmask”: “255.255.255.0”,

    “allow_ip_spoofing”: “1”,

    “primary”: true

  }

]

Questo non è un un articolo di analisi degli errori della configurazione, ma guarda il man vmadm e nel dettaglio cosa puoi fare con vmadm update per variare la configurazione della zona.

Una volta aver avuto accesso, la prima cosa da fare sono l’aggiornamento del gestore del software ( package) pkgin con l’ultimo e il più recente, e installare nano perchè nonostante per quanto tempo abbia fatto software, continuo a considerare vi uno strumento di tortura:

pkgin update

pkgin upgrade-all

pkgin -y install nano

note: with -y switch pkgin “Assumes “yes” as default answer”

Le tue preferenze nel prompts, alias e editors potrebbero non essere le mie ma il prossimo passo è rendere l’ambiente più confortevole:

nano .bashrc

e aggiungi

export PS1='[\033[01;32m]\u@\h[\033[01;34m] \w $[\033[00m] ‘

export TERM=xterm

alias ls=’ls –color=auto’

alias ng=’cd /opt/local/etc/nginx/sites-available’

alias nano=’nano -w’

Configurare Port Forwarding

Al fine di consentire alle altre zone di colloquiare con la rete, sarà necessario abilitare il port forwarding e il routing, e configurare il NAT ( network address traslation ). Il file /etc/ipf/ipnat.conf è il file che configura il NAT,  che modifichremo ora:

nano /etc/ipf/ipnat.conf

e all’apertura aggiungeremo le seguenti righe ( daremo alla prima VM[5] l’indirizzo 10.0.0.102 ):

map net0 10.0.0.102/32 -> 0/32

rdr net0 0.0.0.0/0 port 225 -> 10.0.0.102 port 22

La prima riga abilita il NAT per la zona . La seconda riga permette di accedere in ssh sulla porta 225 nella prossima zona che andremo a creare

nota:

the NAT is one to one so just 10.0.0.102/255.255.255.255 go through NAT  and the rdr statments in human language tell us: any connection to port 225 on nic net0 with any ip redirect to ip 10.0.0.102 port 22 . I suggest some more mnemonic  rule  like port+last octect IP

ex: port 22 and last octect of the ip 10.0.0.102,  => 22102

map net0 10.0.0.102/32 -> 0/32

rdr net0 0.0.0.0/0 port 22102 -> 10.0.0.102 port 22

Ora abilitiamo il routing e IP filtering :

routeadm -u -e ipv4-forwarding

svcadm enable route

svcadm enable ipfilter

ipnat -l

Infine, perchè ci servirà a breve, installiamo NginX , il veloce leggero e facile da configurare HTTP proxy server. Lo configureremo dopo, una volta che avremo aggiunto qualcosa da servire.

 pkgin -y install nginx

Creare una VM Worker

Ora configureremo una VM “lavoratrice”. La maggior parte dei passaggi sarà la stessa. Usermo la definizione scottenfinn.json scaricata in precedenza ( una definizione di vm da me usata per realizzare scottenfinn.net.

{

  “alias”: “scottenfinn”,

  “hostname”: “scottenfinn”,

  “brand”: “joyent”,

  “quota”: 10,

  “max_physical_memory”: 1024,

  “dataset_uuid”: “62f148f8-6e84-11e4-82c5-efca60348b9f“,

  “default_gateway”: “10.0.0.1”,

  “resolvers”: [

    “8.8.8.8”,

    “8.8.4.4”

  ],

  “nics”: [

    {

      “nic_tag”: “stub0″,

      “ip”: “10.0.0.2”,

      “netmask”: “255.255.255.0”,

      “allow_ip_spoofing”: “1”,

      “gateway”: “10.0.0.1”

    }

  ]

}

Come in precedenza, se è necessario cambiare il dataset_uuid, fallo ora.  Non è necessario modificare il gateway o il default_gateway.

Note: you have to change ip to mach the nat/rdp ipf  rules.   Scottefinn.json downloaded file 10.0.0.2 is refered but into nat rule is about 10.0.0.102. So you have to change to mach one or other.

 Allora

cd /opt/vmdefs

vmadm create -f scottenfinn.json

 Al termine, accedi:

zz scott

una volta all’interno prova a pingare un sito ben noto; se questo fallisce, prova a eseguire un ping al 10.0.0.1 per vedere se almeno riesci a colloquiare con la zona firewall[6]. Dopo prova con 8.8.8.8 per vedere se il tuo problema è nel tuo /etc/resolv.conf o in qualcosa di più grave.  Controlla meglio tutti i passi precedenti connessi al routing nella zona firewall, e conferma che questa può veramente colloquiare con il mondo esterno. Se usi  Virtualbox, ancora, verifcia che promiscuous mode sia è abilitato  ( il che vuol dire rivviare ).

Installare una Applicazione web.

Ora è il tempo di installare un applicazione web nella nostra zona operativa. Per questo useremo una applicazione che tiene traccia dei bug chiamata  Omega. La cloneremo dal GitHUB usando git, quindi sarà necessario installarlo

pkgin install git

Ora cloniamo l’applicazione e configuriamola. Poichè molto degli script a livello di sistema in SmartOS usa NodJS, noi la già lo possediamo e il suo gestore dei package npm:

cd /opt

git clone https://github.com/wachunga/omega.git

cd omega

npm install

Lo puoi provare cambiando la directory in /opt/omega ed eseguendo node server ( se hai un secondo terminale puoi accerdervi mediante curl on port 1337

nota: you can add a rule into rdp rule on gateway zone like this

rdr net0 0.0.0.0/0 port 1337 -> 10.0.0.102 port 1337 tcp

then you can try http://ip:1337

Successivamente abbiamo bisogno di un modo per farlo avviare e fermare a livello di sistema operativo nella fase di avvio come servizio. SMF è la l’opzione Solaris per farlo – è abbastanza buono, e può fare cose come monitorare e rieseguire i processi interrotti e molto altro ( qualcuno un volta lo ha descritto come “ immagina sysvinit combinato con monit e fatto bello”). Di base è tutto quello che sysstemd su Linux desidera essere senza tutte le idee cattive.

Poichè io eseguo Omega su SmartOS  ho gia un manifest SMF  pronto. Generalmente, con SMF, se hai servizi simili tu puoi mantenere un “manifest”  e modificarlo come desideri ( puoi sempre usare il SMF manifest per un servizio simile usando scvcfg export $SERVICE_NAME.  Scaricalo qui:

cd

wget http://timboudreau.com/files/omega.xml

svccfg import omega.xml

svcadm enable omega

========================================================

<service_bundle type=”manifest” name=”omega”>

<service name=”site/omega” type=”service” version=”1″>

<create_default_instance enabled=”true”/>

<single_instance/>

<dependency name=”network” grouping=”require_all” restart_on=”refresh” type=”service”>

<service_fmri value=”svc:/milestone/network:default”/>

</dependency>

<dependency name=”filesystem” grouping=”require_all” restart_on=”refresh” type=”service”>

<service_fmri value=”svc:/system/filesystem/local”/>

</dependency>

<method_context working_directory=”/opt/omega”>

<method_credential user=”nobody” group=”daemon” privileges=”basic,net_privaddr”/>

<method_environment>

<envvar name=”PATH” value=”/opt/local/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin”/>

<envvar name=”HOME” value=”/opt/omega”/>

<envvar name=”PWD” value=”/opt/omega”/>

</method_environment>

</method_context>

<exec_method type=”method” name=”start” exec=”/opt/local/bin/node /opt/omega/server.js” timeout_seconds=”60″/>

<exec_method type=”method” name=”stop” exec=”:kill” timeout_seconds=”60″/>

<property_group name=”startd” type=”framework”>

<propval name=”duration” type=”astring” value=”child”/>

<propval name=”ignore_error” type=”astring” value=”core,signal”/>

</property_group>

<property_group name=”application” type=”application”></property_group>

<stability value=”Evolving”/>

<template>

<common_name>

<loctext xml:lang=”C”>Omega issue tracker</loctext>

</common_name>

</template>

</service>

</service_bundle>

Ora puoi verificare se è in funzione:

svcs -l omega

che ci darà lo stato:

fmri         svc:/site/omega:default

name         Omega issue tracker

enabled      true

state        online

next_state   none

state_time   Fri Feb 20 16:10:05 2015

logfile      /var/svc/log/site-omega:default.log

restarter    svc:/system/svc/restarter:default

contract_id  262

dependency   require_all/refresh svc:/milestone/network:default (online)

dependency   require_all/refresh svc:/system/filesystem/local (online)

Se lo stato indica “ maintenance” allora qualcosa non ha funzionato – richiama il file di log elencato alla riga logfile  per vedere cosa non ha funzionato; correggilo e dopo esegui  svcadm clear omega  ( questa operazione è come disabiliatre e riabiliatre il servizio) e vedi se è stato corretto.

Verifica nuovamente la pagina di richiesta

curl http://localhost:1337

Se puoi vedere una risposta , è attivo. Questo è tutto – abbiamo fatto in questa zona. Alla ripartenza il servizio sarà automaticamente avviato.

Ritorna all’hypervisor

Configurare NginX

Abbiamo gia installato NginX, così è configurato con la configurazione base, ma poco altro. Ricollegiamoci alla zone gateway con zz gate  e lo configuriamo

zz gatew

cd /opt/local/etc/nginx

mkdir sites-enabled

mkdir sites-available

cd $_

wget http://timboudreau.com/files/omega.nginx

cd ../sites-enabled/

ln -s ../sites-available/omega.nginx 00-omega

cd ..

nano nginx.conf

Ora dobbiamo modificare il file di configurazione di NginX. La configurazione di base fa la maggior parte del lavoro; abbiamo bisogno di due modifiche. La prima nella sezione http { aggiungeremo – Omega usa websockets (http://www.websocket.org/)-, così dobbiamo fare una piccola configurazione per aiutare NginX (http://nginx.com/blog/websocket-nginx/) ad eseguirne il  proxy:

map $http_upgrade $connection_upgrade {

 default upgrade;

”      close;

}

Osserviamo il blocco all’interno del blocco  http { che si apre con server {. Giusto sopra quella linea aggiungiamo la seguente:

include /opt/local/etc/nginx/sites-enabled/*;

Ora siamo  pronti per eseguire  NginX:

svcadm enable nginx

Nota:  Il file omega.nginx da noi scaricato indica a NginX di vedere a gli headers con nome host omega.tiboudreau.org  ( la mia rete locale mentre scrivo questo ). Questo è in testa al file, la sezione server_name – questo è quello che ci consente di usare una istanza di NginX per servire multipli siti. Per avere questo funzionante per più di una zone, tu necessiti di un DNS, tu avrai la necessità di aggiungere una voce al tuo file /etc/hosts sulla tua macchina locale che punti all indirizzo IP della zona  firewall sulla tua rete locale.

Poichè abbiamo inserito la linea include  in testa al default HTTP server, NginX servirà Omega per tutte le richieste correttamente ora; l’ordine è l’ordine dei file nella cartella /opt/local/etc/nhinx/sites-enabled che determina quale virtual host cattura cosa, questo è perchè noi anteponiamo 00- al  collegamento simbolico.

A questo punto, tu dovresti avere un server in funzione a sarai in grado di sfogliarlo da un browser su un’altra macchina sulla stessa rete. Configura un qualunque DNS reale come DynDns o un tuo proprio server DNS, inoltra le porte 80 e 443 dirette all’IP Internet sulla  VM gateway  tramite il tuo router della rete locale, così le richieste dall’esterno raggiungeranno il server[7],  e tu hai ottenuto un server molto flessibile a cui puoi aggiungere quello che desideri.

Aggiungere più Zones

Tu puoi certamente eseguire più di un servizio web in una singola zona, ma spesso è utile gestirle separatamente – e poichè le zone sono economiche,  non è costoso averne molte.

Qui sono le operazione per aggiungere una nuova applicazione web + zona

Nell’ hypervisor:

  • Copia uno dei file JSON file in /opt/vmdefs, modificalo per avere un nuovo indirizzo IP e nome
  • Crea la zona mediante vmadm -f $JSON_FILE
  • Installa quello che ti serve

Nella zona gateway:

  • aggiungi un linea nel file /etc/ipfnat.conf per il NAT della nuova zona
  • a scelta aggiungi il port forwarding per inoltrare la porta 22 a una qualche porta esterna non utilizzata  e copia la tua chiave SSH ~/.ssh/id_rsa.pub in /root/.ssh/authorized_keys ( non impostare una password di root sulla VM – ssh è più sicuro! )
  • svcadm refresh ipfilter per ricaricare il file di configurazione del NAT
  • aggiungre il file di configurazione NginX in /opt/laola/etc/nginx/sites-available e il link simbolico /opt/local/ect/nginx/sites-enables
  • svcadm refresh nginx per ricaricare la configurazione di NginX

Cura e Alimentazione

Generalmete, macchine SmartOS semplicemente lavorano e necessitano di piccole attenzioni, a meno che  tu non divori lo spazio disco. Periodicamente vorrai accedere ed eseguire

pkgin update

pkgin upgrade

Eventualmente – negli anni potrebbe accadere – le immagini su cui è basata la tua zona non ottiene più aggiornamenti e tu vorrai ricreare la zona dalla nuova immagine. La maggior parte della gente sulla mailig list SmartOS  è orientata intorno allo sviluppo di un cluod gigantesco, con l’installazione di software automatico, e agiscono come tu volessi dar da magiare ad un neonato se tu gli parli di aggiornare la zona  invece di ricrearla[8]. Può esser fatto, ma prima fai i compiti a casa, verifica con una VM di test, e prendi uno snapshot per poter tornare indietro, e ricorda che sei stato avvisato. Non sarà peggio di ogni altro aggiornamento software di ogni altro OS, e gli stessi avvertimenti.

Ricreare una zone equivale a creare una nuova zona  installare il software che ti serve, creare gli utenti che ti servono, etc, e dopo copiare la roba dal vecchio al nuovo.

( suggerimento: tramite l’hypervisor tu puoi copiare da

/zones/$OLD_UUID/root/path/to/stuff  a /zones/$NEW_UUID/root/path/to/stuff  – sii più che attento, ma questo funzionerà)

Ottenere il software

Molti pacchetti software popolari non grafici per Linux sono già disponibili in pkgin: tu puoi anche configurarlo per usare il repository dei pacchetti Illumos che ha una vasta quantità di software ( frequentemente questi non posseggono un manifest SMF e tu dovrai scriverne uno )

Io sono andato  così lontano per confiugurare una zona per pkgsrc così posso costruire cose da zero e  patcharle come necessario – l’intera alberatura dei pacchetti e su GitHub-pkgsrcwip / GitHub-pkgsrc Questo approccio è probabilmente un po estremo, ma io sono abituato a Gentoo Linux, così compilare roba dai sorgente è quasi normale per me.

Non tutto gira su Solaris/SmartOS ( Io mi sono strofinato le mani patchando Barnyard2’s build una volta  per un cliente ) ma questi son problemi abbastanza rari.

Would be  nice if the your customer open that code on SmartOS repository

Note

C’è moltissimo che ho sorvolato, in particolare il download ed i file di configurazione e alcune funzioni, ciascuna delle quali merita un lungo articolo di per se. Le pagine del man per le varie funzionalià sono abbstanza buone e il sito web SmartOS ha moltissimi dettagli

Qui c’è una  breve lista di comandi che sono utili giorno per giorno:

  • pkgin – il gestore dei pacchetti, per esempio pkgin search somepackage, pkg install redis_
  • svcadm  – enable / disable / resfesh la configurazione dei servizi  per esempio svcadm resfesh nginx ( che riconfigura Nginx senza diservizio)
  • svccfg import / export il manifest dei servizi così i “daemons” posso essere gestiti mediante svcadm
  • vmadm – il coltellino svizzero per la gestione delle zone, inscuso il lo snapshotting per in ripristino, starting / stopping /rebooting e variazione della configurazione
  • svcs –  verifica lo stato dei servizi ( eseguito senza nessun argomento li elenca tutti)
  • dladm verifica lo stato dei dispositivi di rete
  • zpool – in particiolare zpool status per la verifica della salute dei tuoi dischi

I tuoi file di configurazione e software che tu installi con pkgin nella zona sono in /opt/local/ ( se tu hai usato MacPorts, tu sei abituato a questo) piuttosto che in /etc ( che è scrivibile nella zona ma che viene cancellata al reboot.

Commenti

Excellent writeup

IanH Dec 10, 2014

Questo è un lavoro splendido Tim, lo seguirò io stesso questo fine settinama. Solo un paio di annotazioni

1) c’è il tool “nictagadm[9]” per manipolare il tipo di nic in “/usbkey/config” e aggiornare l’hypervisor della sua modifica

2) più che usare svcadm disable/enable, svcadm clear[10] riavvia il servizio dopo che hai risolto l’errore

Thanks !

Tim Boudreau Dec 10, 2014

Ho aggiornato il riferimento a svcadm clear  non ne ero a conoscenza

Se tu inconrti qualcossa che non è come descritto, fammelo sapere Io ho eseguito tutti i passi descritti qui due volte, Io penso che sia kopacetic ma un altro paio di occhi si vede meglio

Fantastic cookbook

Casey Bisson Jan 12, 2015

/disclosure: I work for Joyent

Questo è una grande recensione su SmartOS e a questo proposito

Joyent ha aperto il codice di SamrtDataCenter al temine del 2014, SDC è il gestore/orchestratore per la nuvola pubblica di Joyent e può fare la gestione di zone/VM come descritto qui più facile ( questo potrebbe anche essere sovrabbondare per un singolo server, ma questa è la parte divertente)

Sembra che tu abbia fatto la maggior parte del lavoro di documentazione in questo post prima che SDC fosse un codice aperto, ma tu hai considerato di usare SamrtDataCenter ?

Uno dei mie obiettivi è quello di rendere SDC ancora più semplice da installare  e io penso che il caso visto qui è uno di quelli che ho in mente

Smart Data Center

Tim Boudreau Jan 12, 2015

L’ho scritto la scorsa estate e la ho riordinata terminata e postata  recentemente

Ho usato SDC un paio di anni fa per un diverso progetto lavorativo  che coinvolgeva una grande installazione – è stata ottima ma sovrabbondava per le mie esigenze con una singola macchina

Io ho provato il Progetto FIFO su questa machina una pai di anni fa , ma allora era abbastanza immatura e non mi ha convinto ma richiedeva una reinstallazione si l’IP dev server cambiava la che è stato un non inizio

© Copyright 2014, Tim Boudreau, all rights reserved. Reuse governed by the Creative Commons CC BY-NC-SA 3.0 License

/


[1] vedi post di Jonathan Perkin

[2] il file .bashrc

[3] nota di Renato

[4] come nota (3)

[5] VM scottefinn.json

[6] Please read  the note before  if you are into Vmware enviroments just wait for a wile if are using -s option with your ping command.

[7]  “wget http://omega.timboudreau.org” —>public_ip:(80:443):router:private_ip_vm_gateway(80,443)

[8] vedi http://www.listbox.com/member/archive/184463/2015/05/sort/thread/page/5/entry/11:135/

[9]nictagadm (1m):  For nodes with /usbkey present, nictagadm will update /usbkey/config as appropriate, and attempt to mount the original USB key and update its copy as well. This allows the nic tags to persist across reboots.

[10]svcadm (1m):  For each service instance specified by the operands, if the instance is in the maintenance state, signal to the assign ….).

[11] nota di Renato

You can add your etherstub any time you want just with  nictagadmin command.  Below you can see  my ethersub creation :-)

root@50-47-5f-a2-66-fb /usbkey $ nictagadm -v add -l fw0 
+ Using config files: /usbkey/config /mnt/usbkey/config
+ adding nic tag: name='fw0', mac='', local='true'
mount: /mnt/usbkey: No such file or directory
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
unknown_fstyp (partition not found)
+ /mnt/usbkey/config does not exist
+ Adding etherstub: fw0
+ Adding etherstub 'fw0' to '/usbkey/config'
+ config file '/mnt/usbkey/config' does not exist: not adding etherstub
umount: warning: /mnt/usbkey not in mnttab
umount: /mnt/usbkey no such file or directory

at last you can show the new etherstub

root@50-46-5d-a1-96-fa /usbkey $ nictagadm -v list 
+ Using config files: /usbkey/config /mnt/usbkey/config
NAME MACADDRESS LINK TYPE 
fw0 - - etherstub

Papà vorrei averla letta io per te.

Ad un mese dalla festa del papà rileggo la lettera che il mio Mattia mi ha scritto.

Andria,19 marzo 2015

A PAPA’

Il mio caro paparino,

tanto ancora carino,

è davvero golosone

con il suo grande pancione.

A lui piace stare sul divano,

a lui piace stare con le mani in mano,

ogni sera davanti al televisore

dove sta per ore e ore.

Il mio papà è bello come un fiore

ed ispira tanto amore,

con i suoi occhioni verdi

con i sorrisi in cui ti perdi.

Fa sparire tutte le pene

e gli voglio tanto bene –

Il mio primo pensiero il mattino

è per il mio cioccolatino

Mattia

SmartOS provisioing second disk on kvm

Hi,

just a node to add a second disk on kvm machines

 

{
 "brand": "kvm",
 "alias": "OpenVZ",
 "resolvers": [
 "8.8.8.8",
 "8.8.4.4"
 ],
 "ram": "2048",
 "vcpus": "1",
 "nics": [
 {
 "nic_tag": "intranet0",
 "ip": "10.0.0.4",
 "netmask": "255.255.255.0",
 "gateway": "10.0.0.1",
 "model": "virtio",
 "allow_ip_spoofing": "1",
 "primary": true
 }
 ],
 "disks": [
 {
 "image_uuid": "7a50b1da-d22c-11e4-8ffe-071989ea571f",
 "boot": true,
 "model": "virtio"
 },
 {
 "boot": false,
 "model": "virtio",
 "size": 2048000
 }
 ]

# vmadm create -f centOS6.json
Successfully created VM c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5

zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk0 10G 1.01T 2.30G –
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 19.5T 20.5T 108K –

# zfs list zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk0
# zfs list zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1
root@50-47-5d-a1-96-fa /opt/vmdefs $ zfs list zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk0
NAME USED AVAIL REFER MOUNTPOINT
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk0 10G 1.01T 2.31G -
root@50-47-5d-a1-96-fa /opt/vmdefs $ zfs list zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1
NAME USED AVAIL REFER MOUNTPOINT
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 19.5T 20.5T 310K -
root@50-47-5d-a1-96-fa /opt/vmdefs $ zfs get "all" zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1
NAME PROPERTY VALUE SOURCE
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 type volume -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 creation Tue Mar 31 23:22 2015 -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 used 19.5T -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 available 20.5T -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 referenced 310K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 compressratio 1.00x -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 reservation none default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 volsize 19.5T local
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 volblocksize 8K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 checksum on default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 compression off default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 readonly off default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 copies 1 default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 refreservation 19.5T local
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 primarycache all default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 secondarycache all default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 usedbysnapshots 0 -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 usedbydataset 310K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 usedbychildren 0 -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 usedbyrefreservation 19.5T -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 logbias latency default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 dedup off default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 mlslabel none default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 sync standard default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 refcompressratio 1.00x -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 written 310K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 logicalused 56.5K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 logicalreferenced 56.5K -
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 snapshot_limit none default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 snapshot_count none default
zones/c3af16ba-e7b6-4bc0-b3f3-546e6a453cf5-disk1 redundant_metadata all default

At last you need to format but …

http://www.unix-ninja.com/p/Formatting_Ext4_volumes_beyond_the_16TB_limit/

Innovazione ed entusiasmo

Una visione che parte da lontano e per i prossimi anni.

La mia meraviglia e che se ne parla poco troppo poco :(  almeno in Italia, se questo è il caso allora comincio io e spero di non essere il primo .

 

Docker and the Future of Containers in Production

Joyent CTO Bryan Cantrill enthralls a packed house at the Docker Seattle meetup by presenting a brief history of computing, the rise of containers, and a demo of Joyent’s soon to be released functionality leveraging Docker + SmartOS + LX-branded zones + SmartDataCenter.

 

https://www.joyent.com/developers/videos/docker-and-the-future-of-containers-in-production

 

 

 

 

illumos books

Just to learn :)

http://illumos.org/books/

vmadm update resolv.conf

Hi,

with SmartOS you can play with your zone KVM/OS to change  network and more.  Some parameters can be  changed “live”. One is the file /etc/resolv.conf inside the zone. You can do with:

vmadm update UUID -f file.json

with file.json like

{
                   "resolvers": [ "192.168.198.2", 
                                            "8.8.8.8",
                                            "8.8.4.4"
                      ]
}

or with

vmadm update UUID resolvers="IP1,IP2,IP3"

Then you can check with

vmadm get UUID | json resolvers

But please check if maintain_resolvers = true  only in that case you can see your change into your zone.

If maintain_resolvers is false you can change it with

vmadm update UUID maintain_resolvers=1

 

As always man vmadm is your master :)

 

Zeroshell come client OpenVPN

Some quick notes , actually in Italian.

 Zeroshell come client OpenVPN

(di un server OpenVpn Linux)

Le funzionalità di stabilire connessioni VPN di Zeroshell vede come scenario solito Zeroshell sia come client sia come server e per scelta architetturale, come dispositivo in user space, una interfaccia di tipo tap. Le motivazioni sono elencate nella sezione di configurazione

LAN_to_LAN

che riporto:

Zeroshell uses OpenVPN to encapsulate Ethernet datagrams in TLS tunnels authenticated via X.509 certificates on both endpoints as a solution to the site-to-site VPNs. This non-standardized solution requires the use of a Zeroshell box in both LANs or another system using the OpenVPN. This type of LAN-to-LAN VPN has been chosen because it has the following advantages:

  • By creating an Ethernet (Layer 2) connection between the two LANs, in addition to routing, bridging of the networks is made possible guaranteeing the passage of any layer 3 protocol (IP, IPX, Apple Talk);
  • The 802.1Q VLAN protocol is supported. This means that if a network is broken into Virtual LANs, the latter can also be transported on the peer network with a single VPN tunnel;
  • Bonding of two or more VPNs is supported in load balancing or fault tolerance configuration. This means, for example, that if there are two or more ADSL connections, a VPN can be created for each connection and they can be combined increasing the bandwidth or reliability
  • Thanks to the LZO real-time compression algorithm, data is compressed in an adaptive manner. In other words, compression only occurs when the data on the VPN really can be compressed;
  • The use of TLS tunnels on TCP or UDP ports makes it possible to transit the router where the NAT is enabled without problems.

La frase da annotare è “or another system using the OpenVPN

In questo piccolo contributo vediamo come poter configurare Zeroshell come semplice client openvpn con un server Linux. Il server OpenVPN Linux non solo stabilirà la connessione con il client Zeroshell ma gli fornirà anche la configurazione di rete. Nel dettaglio vogliamo mantenere le funzionalità grafiche di Zeroshell anche nel caso in cui l’altro end point non sia Zeroshell stesso.

La personalizzazione del comportamento di Zeroshell è ottenuta mediante la possibilita di inserire i parametri nella sezione Parameters dove abbiamo la possibilità di passare al daemon openvpn i paramentri personalizzati.

I punti evidenziati nell’immagine sono:

il ruolo che avrà Zeroshell nella connessione – client

il nome dell’interfaccia in user space utilizzato dal processo openvpn – VPNXX

ed infine il campo dove inserire i nuovi parametri di connessione – Parameters – .

Parameters LAN -to-LAN

Il primo scenario prevede che il server OpenVPN usa una interfaccia tap e passa la configurazione di rete al client.

Interfaccia di tipo TAP

L’uso dell’interfaccia tap è previsto in Zeroshell ma ho riscontrato che per poter attivare la visualizzazione e la gestione delle configurazioni di rete “apprese” dal server OpenVPN Linux dobbiamo attivare una configurazione mista. Dove per mista intendo l’uso sia di un file configurazione sia di alcuni valori passati come parametri. Lo scopo di una configurazione mista è quello mantenere la configurazione la più grafica possibile.

I valori da inserire in Parmeters sono

Parameters_Tunnel

–config /Database/certs/client.conf
–dev VPN00
–dev-type tun
–verb 3

Il primo parametro definisce un file di configurazione che verrà utilizzato dal processo openvpn. Questo file risiede all’interno del profilo attivo dove avremo creato una directory – certs – e creato il file client.conf con il seguente comando

root@zeroshell # echo “client” > client.conf

 

Parameters_Tunnel_config

Il file di configurazione contiene solo il ruolo che assumerà nella connessione VPN.

Il paramentro –dev VPN00 indica il nome dell’interfaccia in user space e poiché non comincia per tun/tap gli passiamo anche il parametro —dev-type tap. Infine il –verb 3 aumentiamo il logging della sessione VPN.

Al termine della configurazione abbiamo la VPN00 connessa e tra le informazioni disponibili anche l’indirizzo IP assegnato dal server OpenVPN al client Zeroshell
VPN00

 

Il log della connessione mostra le istruzioni apprese dal server OpenVPN:

 

08:10:37 SENT CONTROL [server1]: 'PUSH_REQUEST' (status=1)
08:10:37 PUSH: Received control message: 'PUSH_REPLY,route 192.168.33.0 255.255.255.0,route-gateway 192.168.55.1,ping 10,ping-restart 120,ifconfig 192.168.55.4 255.255.255.0'
08:10:37 OPTIONS IMPORT: timers and/or timeouts modified
08:10:37 OPTIONS IMPORT: --ifconfig/up options modified
08:10:37 OPTIONS IMPORT: route options modified
08:10:37 OPTIONS IMPORT: route-related options modified
08:10:37 ROUTE: default_gateway=UNDEF
08:10:37 TUN/TAP device VPN00 opened
08:10:37 TUN/TAP TX queue length set to 100
08:10:37 /sbin/ifconfig VPN00 192.168.55.4 netmask 255.255.255.0 mtu 1500 broadcast 192.168.55.255
08:10:37 /sbin/route add -net 192.168.33.0 netmask 255.255.255.0 gw 192.168.55.1

Così come lo “Show Info” mostra l’indirizzo assegnato dal server OpenVPN

 

VPN00

 

Anche la tabella di routing rispetta le informazioni apprese dal server OpenVPN

 

VPN00_Routing

 

Il secondo scenario prevede che il server OpenVPN Linux usa una interfaccia tun e passa la configurazione di rete al client.

Interfaccia di tipo TUN

Anticipiamo che la configurazione di una connessione openvpn mediante una interfaccia di tipo tun avrà come modifica principale quella di contenere un comando come post boot. Esaminiamo prima come cambiano i parametri di configurazione

 

Parameters_Tunnel_config_TUN

 

–config /Database/certs/client.conf
–dev VPN00
–dev-type tun
–verb 3

anche in questo caso facciamo riferimento ad un file di configurazione che contiene la sola stringa client e come paramentri aggiuntivi abbiamo la definizione del nome della interfaccia –dev VPN00 e ne specifichiamo la tipologia –-dev-type tun. Anche se avremo la conferma della connessione non potremo verificare tramite GUI le configurazioni ottenute dal server OpenVPN sino quando non avremo inserito come Post Boot i seguenti comandi:

VPN00_tun_post_boot

I comandi sono necessari proprio perchè Zeroshell non contempla una tipologia tun e quindi ne forziamo la creazione. Dopo aver fatto il Save della configurazione possiamo abilitare la configurazione effettuando il Test.
Il risultato finale è visibile nella visualizzazione della VPN LAN-TO-LAN con il dettaglio della configurazione IP appresa

VPN00_tun

così come lo Show Info

VPN00_tun_show_info

Il log della connessione riporta per esteso il comandi appresi dal server OpenVPN Linux

09:29:51 SENT CONTROL [server1]: 'PUSH_REQUEST' (status=1)
09:29:51 PUSH: Received control message: 'PUSH_REPLY,route 192.168.33.0 255.255.255.0,topology p2p,ping 10,ping-restart 120,ifconfig 192.168.55.4 192.168.55.1'
09:29:51 OPTIONS IMPORT: timers and/or timeouts modified
09:29:51 OPTIONS IMPORT: --ifconfig/up options modified
09:29:51 OPTIONS IMPORT: route options modified
09:29:51 ROUTE: default_gateway=UNDEF
09:29:51 TUN/TAP device VPN00 opened
09:29:51 TUN/TAP TX queue length set to 100
09:29:51 /sbin/ifconfig VPN00 192.168.55.4 pointopoint 192.168.55.1 mtu 1500
09:29:51 /sbin/route add -net 192.168.33.0 netmask 255.255.255.0 gw 192.168.55.1
09:29:51 Initialization Sequence Completed
09:29:51 Interface VPN00 is UP

 

La tabella di routing mostra ancora una volta gli instradamenti appresi

 

VPN00_tun_routing

 

The end

 

Osservazioni:

tutta la configurazione dell’autenticazione ,certificati X509 , etc , etc  è la solita:

import della CA del server OpenVPN Linux

import del certificato e della chiave generato del server OpenVPN Linux per il client Zeroshell.