sabato, 23 Novembre 2024

[xamarin] Pubblicare app iOS in beta su TestFlight da Visual Studio 2017 su Windows

Obiettivo: Pubblicare la beta di una app per iOS, sviluppata con C# e Xamarin su Visual Studio 2017 per Windows

Per molti sarà una banalità, ma ho trovato che la pubblicazione di app iOS da Windows (ok, capisco che me la sto proprio cercando) è una piccola avventura, a differenza di quando si lavora su Android. Anzitutto dobbiamo assicurarci di avere tutti gli ingredienti necessari per poter procedere. Questi comprendono:

Xamarin e Visual Studio 2017 su Windows (nel mio caso specifico Windows 10)

Un Mac con installati Visual Studio 2017 ed Xcode per poter compilare al app.

Application Loader 3.0 (scaricabile da qui) per poter caricare la app online sull’Apple Store.

Un account Apple Developer e uno su iTunes Connect.

Una volta preparata la nostra app e testata sulla macchina virtuale di Xcode, possiamo cominciare a pensare alla sua pubblicazione. Come ho accennato prima tutte le guide online in merito si riferiscono principalmente a Visual Studio 2017 con Xamarin già installati sul Mac, mentre io mi ostino per volerci lavorare da Windows.

Quello che voglio fare è distribuire la app in beta verso alcuni utenti registrati per TestFLight, in modo da poter effettuare un debugging realistico rispetto all’utilizzo degli utenti.

Per poterlo fare anzitutto devo aggiungere degli utenti su iTunes Connect.

Indirizzo: https://itunesconnect.apple.com/

Per farlo mi sposto nell’apposita sezione.

Una volta dentro, da Utenti di iTunes Connect premo sul tasto più e aggiungo un nuovo utente.

A questo punto posso inserire l’indirizzo email col quale ho registrato il mio iPhone sul quale voglio fare le prove, mettendo un nome e cognome come riferimento.

Adesso mi verrà chiesto di selezionare un ruolo per il mio utente.

Scegliendo il ruolo mi verrà detto quali saranno le sue possibilità di accesso, quello che mi interessa è che sia disponibile per TestFlight.

Fatto questo possiamo salvare e spostarci a configurare la parte di Apple Developer.

Indirizzo: https://developer.apple.com/

Anzitutto aggiungiamo il dispositivo sul quale vogliamo far agire l’utente. Spostiamoci su Devices > All (indirizzo: https://developer.apple.com/account/ios/device/) e clicchiamo sul tasto più per aggiungere un dispositivo. Ci verranno chiesti un nome descrittivo e un UDID. Per trovare l’UDID suggerisco la seguente guida.

A questo punto registriamo un identificatore per la nostra app, andando su Identifiers > App IDs (indirizzo: https://developer.apple.com/account/ios/identifier/bundle/create).

Il Bundle ID è quello che abbiamo stabilito nel file Info.plist alla seguente chiave:

Dove com.miodominio.NomeApp è il formato di dominio inverso, un po’ come succede anche su Android.

Una volta aggiunta la app, con le opportune configurazioni, aggiungiamo i certificati per la distribuzione.

Andiamo su Certificates > All e premiamo sul tasto più per aggiungerne uno.

Selezioniamo App Store and Ad Hoc e seguiamo la procedura guidata. Alla fine della procedura ci sarà dato un file di certificato da installare sul Mac dove abbiamo Xcode ed il resto.

NOTA: La medesima cosa si può fare anche da Xcode, andando su Preferenze > Account > Gestisci certificati e cliccando sul tasto aggiungi.

Ora spostiamoci a creare un Provisioning Profiles di distribuzione.

Per farlo andiamo su Provisioning Profiles > Distribution (indirizzo: https://developer.apple.com/account/ios/profile/production)

Clicchiamo sul tasto più per aggiungere un profilo e selezioniamo un profilo di distribuzione Ad Hoc.

Seguiamo le istruzioni. Alla fine ci verrà dato un file con estensione *.mobileprovision che dobbiamo mettere sul nostro Mac e cliccarci due volta sopra per installarlo. Apparentemente non succederà nulla, ma il profilo sarà stato installato.

Fatte tutte queste belle cose arriva l’avventura finale. Compilare la app da Visual Studio 2017 che gira su Windows.

Per poterlo fare correttamente è necessario apportare alcune modifiche.

Anzitutto apriamo Info.plist e assicuriamoci di aver impostato correttamente i parametri di compatibilità.

Assicuriamoci di aver impostato correttamente la lingua:

Ma soprattutto di aver inserito il parametro per il beta testing:

Adesso apriamo Entitlements.plist e assicuriamoci di inserire anche qui il medesimo parametro:

Spostiamoci sulle proprietà della nostra app e configuriamola nel modo seguente:

In questo modo l’esportazione avverrà nella cartella bin\iPhone\Ad-Hoc dentro la radice del progetto, dove verrà creato un file con estensione *.ipa.

Assicuriamoci anche che sia visibile l’identità giusta della firma ed il corretto profilo di provisioning. A tale proposito, qualora non fosse possibile vederli, consiglio di aprire e chiudere Visual Studio o lanciare una compilazione sul Mac collegato in rete.

Assicuriamoci anche di aver configurato la giusta impostazione di compilazione, che nel mio caso risulta così:

Se abbiamo fatto tutto come si deve troveremo nella suddetta cartella, bin\iPhone\Ad-Hoc, il nostro file *.ipa.

Spostiamolo sul nostro Mac e apriamo Application Loader.

Clicchiamo su Delivery Your App e poi su Choose. Scegliamo il file *.ipa da caricare e attendiamo la fine del caricamento.

Se tutto è andato bene la nostra app diventerà disponibile per il test agli utenti che abbiamo selezionato precedentemente.

Errori comuni

Di seguito riporto alcuni errori comuni che sono stati generati da Application Loader o inviati via email al momento dell’invio della app in testing:

  1. Missing beta entitlement – Your app does not include the beta-reports-active entitlement. If you intend to distribute this build via TestFlight for beta testing, please re-build this app with an App Store Distribution provisioning profile. Do not use ad-hoc profiles.
    SOLUZIONE: inserire <key>beta-reports-active</key> nei file Info.plist e Entitlement.plist come descritto precedentemente
  2. the bundle contains a key that is not included in the provisioning profile beta-reports-active
    SOLUZIONE: c’è un errore nel profilo di compilazione, assicurarsi che sia di Distribuzione, come detto prima; maggiori informazioni si trovano qui
  3. Your app does not include the beta-reports-active entitlement
    SOLUZIONE: vedere punto 1, stesso problema
  4. Errore Invalid architecture: ARMv7. 32-bit architectures are not supported when deployment target is 11 or later
    SOLUZIONE: questo è un errore di Visual Studio, per risolverlo è necessario configurare correttamente la Compilazione iOS nelle impostazioni del Progetto, come illustrato in precedenza, inoltre bisogna inserire UIRequiredDeviceCapabilities in Info.plist
  5. ipa file too large
    SOLUZIONE: in questo caso non dipende assolutamente dal file, ma può dipendere dai certificati (vedi all’inizio) oppure dalla velocità della connessione da cui facciamo l’upload; assicuriamoci che il profilo di Provisioning e i certificati siano installati sulla macchina con Xcode.

[windows] Ripristinare password di account locale su Windows 7/8

Problema: Ripristinare la password di un account locale, per esempio Administrator oppure un altro account, su un computer con Windows 7 oppure Windows 8

Questo esempio vale anche per Windows 8 (non ho ancora provato su Windows 10), mentre mi avvarrò di un Windows 7 per illustrare la procedura. Anzitutto procuriamoci un disco di installazione di Windows 7, con il quale poter avviare il ripristino del computer. Nel caso non si disponga di tale disco lo si può anche scaricare online, per esempio da qualche torrent, perché quello che ci interessa non è installare un nuovo sistema operativo, ma solo ripristinare quello corrente, quindi non è indispensabile disporre di una copia originale o di codici di licenza.

In secondo luogo assicuriamoci che sia possibile avviare il disco dal BIOS, tipicamente cambiando l’ordine di boot dalla configurazione del BIOS (nella maggior parte dei PC si accede al BIOS premendo F2 oppure CANC/DEL) oppure accedendo al menu di boot (tipicamente premendo F12 all’avvio).

Una volta inserito il disco premiamo INVIO per accedere al disco, anziché avviare il sistema operativo:

A questo punto sarà avviato il sistema di ripristino, selezioniamo la lingua:

Premiamo avanti, a questo punto selezioniamo dalla voce in basso l’opzione per il ripristino del computer.

Verranno cercati i sistemi operativi ripristinabili. Selezioniamo a questo punto il sistema operativo che ci interessa (tipicamente ce ne sarà uno solo) e procediamo:

Premiamo avanti. A questo punto si apriranno le opzioni di ripristino:

Clicchiamo su Prompt dei comandi

A questo punto notiamo che ci troviamo nell’unità X:, il sistema operativo è stato probabilmente montato sull’unità D: (attenzione! tipicamente non si tratta di C:, anche se sul computer originale Windows era montato su C:). Per visualizzare tutte le unità montate basta digitare:

Ci verrà mostrato qualcosa di simile a questo:

Possiamo entrare in D: digitando semplicemente D: e premendo INVIO. Utilizzando il comando dir possiamo accertarci di essere nel volume giusto.

A questo punto vogliamo sostituire Sticky Keys con il Prompt dei comandi sul nostro PC originale. Sticky Keys si avvia premendo ripetutamente il tasto SHIFT, in questo modo senza dover accedere al PC avvieremo il prompt dei comandi. Per maggiori informazioni su Sticky Keys suggerisco la pagina di Wikipedia.

Per fare la sostituzione digitiamo sul prompt dei comandi:

In questo modo faremo una copia di backup del file sethc.exe nella radice del sistema e poi lo sostituiremo con cmd.exe.

Il risultato dovrebbe apparire così se tutto è andato bene:

Usciamo dal prompt dei comandi digitando exit, dopodiché premiamo il tasto riavvio.

Una volta riavviato il sistema premiamo per 5 volte rapidamente il tasti SHIFT finché non compare il prompt, di fronte alla schermata di login.

Adesso digitiamo:

In questo modo verranno visualizzati gli account registrati sul PC.

Nel mio caso sono disponibili gli utenti Administrator, Guest, Mario e SVEN. Immaginiamo di voler cambiare la password per l’utente Mario. Quindi digitiamo:

Al posto di USERNAME e PASSWORD digitiamo il nome utente e la nuova password.

Nel mio caso ho digitato Mario e come password Pappapero4321.

Se tutto è andato bene possiamo accedere con il nostro utente e la nuova password.

A questo punto è importante ripristinare sethc.exe per motivi di sicurezza. Se si prova a farlo dal sistema operativo avviato si otterrà un errore.

Per fare il ripristino è necessario ripetere i primi passaggi e accedere al sistema di ripristino. A quel punto digitiamo:

Così ripristineremo la copia che abbiamo salvato sulla radice nella posizione originale.

[windows] Copiare cartelle e file preservando i permessi e le condivisioni sulla destinazione

Problema: Copiare dati e cartelle di un profilo, come per esempio AppData, su un altro profilo senza copiare anche i relativi permessi e preservando i permessi e le condivisioni del profilo di destinazione

Senza entrare nel merito del perché si potrebbe voler fare qualcosa del genere (molto utile in realtà quando si fa la migrazione dei profili) è sufficiente utilizzare robocopy.

Nello specifico il seguente comando:

/E serve a copiare tutto il contenuto, comprese le sottocartelle vuote

/R:0 serve per saltare eventuali errori, dovuti magari a mancanza di permessi

Potremmo aggiungere anche il /COPY:flag[s] per copiare solo determinate caratteristiche (di predefinito è su /COPY:DAT, D=Data, A=Attributi, T=Timestamps, eventualmente S=Informazioni di sicurezza dei NFTS ACLs, O=Informazioni sul proprietario, U=Auditing info)

[steam] Steam o il gioco non si apre senza riavviare il PC

Problema: dopo aver giocato e chiuso il gioco o Steam, quando si cerca di rilanciare un gioco o Steam stesso, nessuno dei due parte, finché non si riavvia il computer

Questo problema è cominciato ad apparire di recente, senza motivo apparente, ed anzi per un po’ ho pensato che potesse essere collegato in qualche modo a Final Fantasy XV, che avevo installato da poco (ma poi ho scoperto non essere il colpevole). Leggendo in giro ho trovato svariate soluzioni, tra le quali si suggeriva addirittura di disinstallare e reinstallare Steam, e riavviare il PC è comunque una bella seccatura, specialmente se si vuole giocare senza dover chiudere per forza tutti i programmi che si avevano aperti.

La soluzione che per me ha funzionato è la seguente (testata su Windows 10):

  1. Aprire il task manager ed individuare anzitutto ogni eventuale processo di Steam attivo (per aprirlo premere WIN+R e digitare taskmgr, oppure CTRL+ALT+CANC e poi selezionare Gestione Attività)
  2. Individuare un eventuale programma ancora aperto e chiuderlo, cliccandoci sopra col destro e selezionando Termina attività (in generale a me capita dopo che lo riduco ad icona e non sembra ci sia un programma attivo di Steam, ma solo il processo)
  3. A questo punto individuare il servizio Steam Client Service, cliccare col destro e spostarsi sui dettagli
  4. Nei dettagli dovremmo vedere una serie di processi come nell’esempio seguente, cliccare col destro su ciascuno di loro e scegliere Termina Albero Processi (questo è molto importante per chiudere tutte le istanze di Steam, potreste anche notare che Steam.exe non può essere terminato, dando errore di “Accesso negato“, non ve ne preoccupate)
  5. Fatto questo andiamo su Servizi ed individuiamo Steam Client Service, clicchiamoci sopra col destro e scegliamo Riavvia (oppure Avvia, a seconda dei casi)

A questo punto dovrebbe essere possibile far partire nuovamente Steam ed ogni eventuale gioco che si voglia giocare.

E adesso torniamo a divertirci su Eos

Google non va sulle reti Telecom… per alcuni minuti

Stasera molti utenti delle reti Telecom, in particolare Alice ADSL si sono accorti che Google non andava! A quanto pare il problema stava nell’instradamento delle connessioni sulla rete Telecom, che anziché seguire il percorso di tutti gli altri, finivano in Brasile, come riportato da alcuni utenti su Twitter. Su tutte le altre reti si navigava normalmente.

 

 

Il normale percorso che avrebbe dovuto seguire sarebbe stato simile a questo (io esco da Fastweb, ma dopo il percorso dovrebbe essere uguale):

 

[ubuntu] Aggiungere virtual host, ovvero aggiungere dominio su server Apache

Immaginiamo di avere un dominio che punta all’indirizzo IP del nostro server, per esempio petarkaran.it indirizzato su 82.165143.26. Affinché al dominio risponda Apache con un sito web è necessario aggiungere un virtual host opportunamente configurato.

Per farlo anzitutto creiamo la cartella del nostro sito. Spostiamoci su /var/www

E creiamo una cartella, a nostro piacere, che di solito si nomina come il dominio (ma non è obbligatorio):

Affinché Apache ci possa lavorare correttamente è necessario riassegnarle l’utente opportuno, cioè www-data, visto che in questo modo il proprietario della cartella è root:

Adesso creiamo il file di configurazione del virtual host, per farlo spostiamoci su:

A questo punto creiamo il nostro file:

Possiamo anche copiarlo da un file esistente, per esempio:

Qualora avessimo creato il file di sana pianta incolliamo dentro il seguente contenuto base:

Per abilitare il sito digitiamo:

Adesso al nostro dominio, sulla porta 80, risponde Apache con il sito sulla suddetta cartella.

[excel] Copiare solo celle visibili e non quelle nascoste

Problema: Quando si seleziona un gruppo di celle e si copiano normalmente, vengono copiate anche le celle nascoste, mentre si vorrebbero copiare solamente le celle visibili

Immaginiamo di avere un intervallo di celle come il seguente:

Se adesso decidessimo di nascondere la terza riga avremmo il seguente risultato:

Selezionando l’intervallo A1:B5 e copiando (per esempio con CTRL+C) copieremo in realtà anche la riga 3 che è nascosta. Lo stesso vale quando si utilizzano i filtri sulle celle.

Per copiare invece solamente le celle visibili dobbiamo fare nel modo seguente:

  1. Selezioniamo l’intervallo che vogliamo copiare come faremmo normalmente
  2. Nella scheda Home spostiamoci su Trova e seleziona e selezioniamo Vai a formato speciale…
  3. Nella finestra selezioniamo Solo celle visibili e premiamo Ok
  4. Eseguiamo la copia come faremmo normalmente (o banalmente premendo CTRL+C)

Adesso abbiamo copiato solo le celle visibili e possiamo incollarle dove vogliamo.

Per maggiori approfondimenti consiglio la guida ufficiale di Office: Copiare solo le celle visibili

[php] Interroghiamo un database MySQL su cluster mediante il PHP

Obiettivo: anzitutto creiamo una classe per mediare la connessione MySQL (con o senza cluster è indifferente) e testiamo il cluster MySQL creato nell’esercizio precedente

Per realizzare il nostro scopo avviamo un server apache sulla nostra macchina host, dove abbiamo già avviato 3 macchine virtuali che costituiscono il nostro MySQL Cluster.

Per avviare il server apache mi avvarrò di XAMPP.

Inoltre prima di procedere devo inoltrare la porta 3306 verso il MySQL Cluster Manager che ho configurato in precedenza. Per farlo mi è sufficiente spostarmi in File ⇒ Preferenze ⇒ Rete

Selezioniamo la nostra Rete NAT corrispondente al cluster che abbiamo realizzato e andiamo a configurare l’inoltro delle porte, per ottenere qualcosa di simile a questo:

A questo punto andiamo nel nostro PHP. Creiamo anzitutto un file /inc/MySQLDb.php contenente il seguente codice:

Andiamo adesso a creare il nostro file index.php:

Eseguendo la pagina index.php è molto probabile incorrere nel seguente output di errori:

Questo tipo di errore può dipendere o dal fatto che stiamo richiedendo una query troppo grossa, oppure perché il nostro Server MySQL non è predisposto per accettare le connessioni dall’esterno.

Per risolvere il problema procediamo nel modo seguente.

Anzitutto creiamo un utente apposito con il quale ci collegheremo dall’esterno (nel mio caso gli garantirò tutti i permessi possibili su tutti i database, ovviamente andrebbe limitato ad uno specifico database).

Accediamo al mysql sul nostro cluster manager digitando:

Inseriamo la password di root e poi eseguiamo le seguenti due query per creare l’utente zelda:

Faccio notare che con ‘zelda’@’192.168.56.1′ garantiamo l’accesso all’utente zelda dall’indirizzo 192.168.56.1 che è l’indirizzo esterno della nostra rete NAT su Virtual Box.

Digitiamo exit per uscire e andiamo a modificare il file di configurazione del mysql:

Cerchiamo la voce bind-address e commentiamola in modo che risulti in questo modo:

Infine modifichiamo anche il file /etc/mysql/my.cnf

Inseriamo in fondo max_allowed_packet=16M in modo tale che il file risulti così

Quest’ultima modifica è di solito sufficiente per correggere il precedente errore, se dovesse ripresentarsi possiamo alzare ancora questo valore.

Fatto tutto questo riavviamo il servizio mysql digitando:

Se abbiamo fatto tutto bene non ci saranno errori.

A questo punto modifichiamo il file index.php di sopra perché appaia in questo modo:

Eseguendo la pagina dovremmo vedere qualcosa di simile a questo:

Questo significa che è tutto andato correttamente. A questo punto divertiamoci ad inserire qualche altro utente e generare una tabella con HTML corretto. Modifichiamo il file PHP come segue:

Il risultato, aggiornando la pagina, dovrebbe essere simile a questo:

Infine facciamo una prova per caricare di dati il nostro cluster.

Modifichiamo il file index.php alterando la parte dell’inserimento degli utenti come segue:

Prima di aggiornare la pagina andiamo nel nostro cluster manager e digitiamo:

Quello che dovremmo vedere sarà un risultato simile a questo:

Inserendo 10.000 record, con il precedente script, dovremmo vedere questa “importante” differenza:

Recensione disonesta su Noctis in Tekken 7

Me n’ero quasi dimenticato che ci sarebbe stato, quando finalmente, lo scorso 20 marzo, al cast di Tekken 7 si è aggiunto anche Noctis da Final Fantasy XV. Questa naturalmente non potrà che essere una recensione disonesta, dal momento che si fondono insieme due delle mie saghe preferite.

Noctis fa letteralmente il botto. E’ una specie di sintesi perfetta tra Jun, Hwoarang e Kazumi (miei combattenti preferiti). Similmente a Jun, ha alcune perfette aperture dall’alto (uf+3, u+2), mentre con Kazumi condivide quelle dal basso che rompono veramente un sacco le scatole (df+2) e la possibilità di raggiungere l’avversario a distanza (f,f+2). Comunque niente di assurdo tipo il raggio di Devil Kazuya o Devil Jin. Con Hworang non condivide tanto i calci, quanto alcune semplicissime pressioni di tasti che si trasformano in velocissime combo (Blitz Rush con 2,2,2,2,2) e alcuni sgambetti (d+4, combinabile in d+4,1,1+2), oltre che la velocità. A parte questi piccoli apprezzamenti squisitamente personali (Jun è stata in assoluto il mio personaggio preferito dell’intera saga), l’intero set di mosse è molto coreografico e bello da vedere, per quanto di per se solo alcuni colpi siano veramente devastanti (diciamo che vige la regola dei tanti piccoli colpi ben assestati).

Molti si sono lamentati che non c’entri molto con Tekken, anche se sinceramente non sono d’accordo (sebbene ammetto di essere molto di parte); in questo ultimo capitolo si schiera nella risma dei personaggi dotati di armi alla Alisa e Yoshimitsu, e coniuga alla perfezione molto caratteristiche dei personaggi maschili (tipicamente colpi forti e lenti) con quelli dei personaggi femminili (colpi deboli, ma veloci). Personalmente lo trovo un mix perfetto.

Inoltre, a differenza degli ultimissimi DLC, non ci sono mosse poco tekkenose, tipo combinazioni b,f o semicerchi in stile Akuma, per quanto mi renda conto che quelle sono necessariamente derivative dai giochi originali. A tal proposito potrei citare il caso di Kazumi, personaggio comunque originale, della quale uno dei linker migliori si esegue premendo b,f (per esempio il Tiger Demon’s Gate, b,f,2,1,4), che trovo abbastanza scomodo (sarà anche per via del tipo di joystick, ma tant’è).

L’unica pecca vera è la scarsità di costumi, che mi ha lasciato un poco deluso, mentre per Geese, Eliza ed Akuma (che ok, non è un DLC, ma è comunque un personaggio esterno) le possibilità di personalizzazione equivalgono a quelle dei personaggi regolari.

Insomma se siete appassionati come il sottoscritto di entrambe le saghe questo non ve lo potete proprio perdere.

Infine segnalo un ottimo video di combo che ho trovato su youtube e sul quale mi sto ancora esercitando, per tutti quelli che volessero approfondire.

[ubuntu] Creare cluster MySQL

Obiettivo: creare un cluster MySQL, ovvero un server MySQL distribuito, utilizzando 3 macchine con Ubuntu, 1 per il gestore del server e 2 per i nodi

Anche questa volta, come negli altri esempi, mi avvarrò di VirtualBox, per emulare il gruppo di server. Ovviamente la procedura è valida anche su macchina fisiche oppure utilizzando un altro tipo di macchine virtuali. La struttura che andremo a creare sarà la seguente:

1. Preparazione di Ubuntu su VirtualBox

Anzitutto scarichiamo ed installiamo VirtualBox dal sito ufficiale.

Quello che voglio creare, prima di cominciare con la configurazione del cluster, sono 3 macchine con sopra Ubuntu perfettamente identiche. Sottolineo il fatto che non sia necessario che siano identiche, ma solo che su tutte e tre sia configurato correttamente il MySQL.

Cominciamo configurando la prima macchina virtuale per metterci sopra Ubuntu.

Come parametri di configurazione, nella procedura guidata, scegliamo:

  • Versione: Ubuntu (64-bit)
  • Dimensione memoria: 1024MB
  • Disco virtuale: 10GB
  • Tipo di disco: VDI
  • Tipo allocazione: dinamica

Una volta creata la macchina virtuale facciamo partire ed inseriamo la ISO per l’installazione che abbiamo scaricato dal sito ufficiale di Ubuntu. Ricordo di scaricare la versione Ubuntu Server 64-bit.

Per questo esempio utilizzerò la versione 16.04.2 di Ubuntu Server.

Avviamo normalmente l’installazione, per chi non l’avesse mai fatto suggerisco di seguire la prima parte di: Installazione Ubuntu webserver pronto all’uso [per esordienti totali]

L’unica differenza è che non installeremo il server apache al momento in cui ci verrà richiesto.

Come nome del host mettiamo ubuntu-mysql-manager (si tratta comunque di un nome a piacere):

Ad un certo punto dell’installazione ci verrà proposto quanto segue:

Assicuriamoci di aver selezionato solamente le voci della figura precedente, per selezionarle muoviamoci con le frecce direzionali e spuntiamo le voci premendo SPAZIO. Con la tabulazione spostiamoci su Continua e premiamo INVIO dopo aver selezionato le voci correttamente.

Una volta completata l’installazione riavviamo la macchina virtuale ed entriamo con il nome utente che abbiamo creato.

A questo punto spegniamo la macchina virtuale digitando:

Prima di procedere vogliamo creare una rete NAT interna sulla quale testare le nostre macchine. Per farlo utilizziamo le impostazioni di virtual box andando su File ⇒ Preferenze (oppure premendo CTRL+G dal panello di controllo di virtual box). A questo punto spostiamoci su Rete nel modo seguente e scegliamo di aggiungere una nuova rete.

Una volta creata la nuova rete dovremmo vedere comparire una voce NatNetwork come nell’immagine seguente:

Una volta selezionata clicchiamo sul pulsante per modificarla ed impostiamola nel modo seguente:

Faccio notare che l’impostazione della rete è arbitraria e a nostra scelta, quella predefinita parte sulla configurazione 10.0.2.0/24 che ho modificato nella classica rete domestica col 192.168.0.0/24 a titolo di esercizio. Questo significa che avremo a disposizione 254 host dal 192.16.0.1 al 192.16.0.254.

Diamogli OK e andiamo nelle impostazioni della macchina virtuale mettendo nella configurazione di rete la rete appena creata, in maniera seguente:

Riavviamo la macchina virtuale e colleghiamoci in SSH effettuando l’inoltro delle porte.

Per farlo, una volta partita la macchina virtuale, digitiamo:

Il risultato dovrebbe essere qualcosa di simile a questo:

Nel mio caso noto che la macchina virtuale, di quello che diventerà il manager, si trova all’indirizzo 192.168.0.5 distribuito dal DHCP. Tornando su File ⇒ Preferenze andiamo sulla rete creata prima e apriamo le configurazioni, poi clicchiamo su Inoltro delle porte e aggiungiamo la seguente regola:

Diamo OK. Adesso possiamo collegarci in SSH dalla nostra macchina host (detto banalmente: dal nostro PC che ospita le macchine virtuali) usando l’indirizzo 192.168.56.1 porta 22.

Fatta questa bella impostazione possiamo passare al passaggio successivo.

2. Installazione MySQL sul primo Nodo

Anzitutto installiamo il cluster su tutti i nostri nodi, nello specifico lo installiamo sulla macchina appena creata che poi duplicheremo opportunamente. Per l’installazione possiamo seguire i passaggi indicati sul sito ufficiale, oppure scaricare dalla pagina ufficiale i file .deb necessari.

Io utilizzerò la repository APT, ma prima di cominciare installiamo le dipendenze necessarie al funzionamento del cluster:

A questo punto dobbiamo installare la MySQL APT Repository sul nostro sistema. Per farlo ci è sufficiente scaricare il file di installazione dal sito ufficiale andando qui. Nello specifico digitiamo:

Una volta scaricato il file procediamo all’installazione:

A questo punto ci verrà chiesto che cosa intendiamo configurare e scegliamo la voce MySQL Server & Cluster:

Ci verrà chiesta la versione che intendiamo installare e selezioniamo mysql-cluster-7.6:

A questo punto torniamo alla schermata precedente e selezioniamo OK:

A questo punto non ci rimane che installare il componente base per tutti i nodi digitando:

L’update ci serve per aggiornare la repository dopo le recenti modifiche, altrimenti è probabile che sia impossibile trovare mysql-cluster-community-server.

Ad un certo punto ci verrà chiesto di impostare una password per l’utente root del database, impostiamo una password e segniamocela da qualche parte. Ricordo che l’utente root non è quello del sistema, ma del database.

A questo punto abbiamo preparato un nodo.

Replicheremo questo nodo per altre due volte, designando un singolo nodo come manager del cluster.

3. Replica dei nodi

Per replicare i nodi possiamo decidere di creare un’immagine del nostro sistema che reinstalleremo a piacere, oppure, visto che stiamo usando VirtualBox di duplicare le macchine virtuali. Quindi spegniamo la nostra macchina e creiamone una copia.

Per farlo ci è sufficiente cliccare sulla macchina virtuale e selezionare Clona…

A questo punto ci verrà mostrata una schermata delle opzioni da configurare nel modo seguente:

Spuntiamo l’inizializzazione di un nuovo indirizzo MAC (visto che vogliamo usare le macchine insieme) e diamo un nome alla nuova macchina, nel mio caso Ubuntu MySQL Nodo 1.

Ripetiamo la medesima operazione per creare un Ubuntu MySQL Nodo 2.

A questo punto sistemiamo la nostra rete per poter accedere alle macchine virtuali. Per farlo assegniamo a tutte le macchine un indirizzo IP statico, modifichiamo opportunamente i nomi e configuriamo il file hosts in modo tale che possano vedersi le une con le altre. La configurazione finale sarà così:

Cominciamo con Ubuntu MySQL Manager.

Usando ifconfig verifichiamo che la nostra macchina si trovi all’indirizzo 192.168.0.5. Scopriamo il nostro gateway digitando:

Il risultato dovrebbe assomigliare a qualcosa di simile:

Il gateway è quindi 192.168.0.1, ricordiamoci che la nostra rete è stata impostata con netmask /24 ovvero 255.255.255.0

Impostiamo quindi tale indirizzo come indirizzo statico, usando le informazioni che abbiamo raccolto.

Modifichiamo il file interfaces affinché abbia il seguente contenuto:

Faccio notare che per il DNS utilizziamo il DNS di Google all’indirizzo 8.8.8.8.

A questo punto riavviamo la scheda di rete digitando:

Faccio notare che la nostra interfaccia di rete è enp0s3, mentre in una classica configurazione fisica probabilmente sarebbe eth1.

Fatto questo modifichiamo il file hosts inserendo gli host stabiliti all’inizio:

Il file alla fine dovrebbe risultare qualcosa di simile a questo:

Salviamo il tutto, spegniamo la macchina (onde evitare conflitti, dal momento che sono tutte duplicate) e spostiamoci sul prossimo nodo.

Configurazione Ubuntu MySQL Nodo 1

Prima di procedere soffermiamoci un attimo a configurare le porte per l’inoltro sulla scheda di virtual box, ottenendo una configurazione simile a questa:

In questo modo collegandoci su porte diverse dell’interfaccia esterna potremo accedere, mediante SSH, alle specifiche macchine virtuali.

Una volta avviato il secondo nodo è molto probabile, essendo la prima macchina sull’indirizzo 192.168.0.5, che questo si trovi sull’indirizzo 192.168.0.6. Se facciamo tutto in questo ordine ci risparmiamo qualche piccolo lavoretto extra nella riassegnazione degli indirizzi. Colleghiamoci quindi al nostro nodo 1 (se usate Putty potete collegarvi al 192.168.56.1:23) e modifichiamo la scheda di rete con l’indirizzo statico, come abbiamo fatto prima.

Il risultato sarà simile a questo:

Modifichiamo il file hosts:

Aggiungiamo le righe di prima:

E notiamo che abbiamo ancora ubuntu-mysql-manager come riferimento interno. Rinominiamolo in ubuntu-mysql-nodo1. Il file hosts alla fine risulterà così:

Infine modifichiamo il hostname digitando:

Anche qui dentro sostituiamo il nome di poco fa con quello nuovo, ovvero ubuntu-mysql-nodo1.

Fatto tutto questo spegniamo la macchina e passiamo al secondo nodo.

Configurazione Ubuntu MySQL Nodo 2

A questo punto dovrebbe essere tutto semplice, basta replicare quanto fatto per il nodo 1.

Il file /etc/network/interfaces avrà quindi il seguente aspetto:

Il file /etc/hosts apparirà così:

Mentre il file /etc/hostname conterrà una sola riga:

A questo punto anche il secondo nodo è pronto e possiamo spegnere la macchina.

4. Installazione del MySQL Cluster Manager

Adesso riavviamo il nostro cluster manager e avviamo l’installazione del software manager:

Una volta installato andiamo a creare la seguente cartella nella quale metteremo il file di configurazione:

Creiamo dentro un file chiamato config.ini:

A questo punto procediamo alla configurazione nel modo seguente:

Ho inserito i commenti ai singoli parametri nel file stesso in modo da rendere più agevole la consultazione. I parametri in cima non sono di per se necessari, ma li mettiamo a scopo didattico per tenere presente che eventualmente li potremo modificare in base alle nostre esigenze.

Per finire installiamo il mysql-server, dal momento che abbiamo detto che il daemon del MySQL si troverà sulla medesima macchina del menager. Digitiamo:

Fatto.

5. Configurazione dei nodi

Adesso avviamo i nostri due nodi e configuriamoli nella maniera seguente (io qui configurerò il primo nodo, la stessa cosa va fatta sul secondo).

Anzitutto installiamo il programma per ciascun nodo digitando:

Quindi digitiamo:

Dentro al file scriviamo:

In questo modo collegheremo il nodo al cluster, demandando la gestione del servizio al cluster medesimo.

6. Avvio del cluster

Ora che abbiamo configurato sia il manager che gli altri nodi possiamo procedere all’avvio del nostro cluster.

Spostiamoci sul manager e digitiamo:

Questo avvierà il cluster sul manager importando il file di configurazione. Affinché si avvii automaticamente ad ogni riavvio modifichiamo il file di avvio nel seguente modo.

Anzitutto abilitiamo i servizi locali digitando:

E modifichiamo il file:

Inserendo, prima di exit 0, il precedente comando (questo sarà l’aspetto complessivo del file):

Adesso spostiamoci sui singoli nodi e per ciascun nodo digitiamo:

In questo modo creeremo la cartella per l’allocazione dei dati necessaria al nodo (con il comando -p diciamo ad mkdir di creare l’intero percorso).

Dopodiché avviamo il nodo digitando:

Affinché anche tutto ciò parta all’avvio digitiamo:

E poi ancora:

Modifichiamo il file affinché appaia in questo modo:

Riavviamo il tutto.

7. Verifichiamo il funzionamento del cluster

A questo punto possiamo verificare il funzionamento del cluster spostandoci sul nostro manager e digitando:

Entrando nel terminale del ndb_ngm digitiamo:

Quello che dovremmo vedere sarà qualcosa di simile a questo:

Se tutto è andato bene questo sarà il risultato. Qualora uno dei nodi non fosse raggiungibile, oppure non fosse possibile collegarsi al daemon ci verrebbe segnalato esplicitamente.

Per uscire dal manager è sufficiente digitare exit e premere invio.

Come ultima operazione proviamo a creare una tabella sul nostro cluster.

8. Creiamo una tabella sul cluster

Accediamo anzitutto al mysql digitando nel manager:

Questo ci permetterà di accedere con l’utente root del database e ci verrà chiesta la password a schermo.

Anche qui possiamo fare una seconda verifica di quello che ci è già noto:

Infatti se tutto è andato bene ci verrà dato il benvenuto con la versione del MySQL Cluster Community Server.

A questo punto creiamo il nostro database di prova digitando:

Inseriamo nel database cluster_test la nostra tabella di prova:

ATTENZIONE! E’ molto importante che l’engine sia impostato su ndbcluster, affinché la tabella lavori e sia distribuita sul cluster.

Inseriamo dei valori di prova:

Adesso proviamo ad interrogare la tabella digitando:

Il risultato dovrebbe essere questo:

Fatto, abbiamo il nostro cluster perfettamente funzionante e pronto all’uso.