martedì 22 marzo 2011

nfs su ubuntu

Introduzione

NFS sta per Network File System e indica un filesystem distribuito, ovvero condiviso fra un certo numero di nodi di una rete.

Alla base di questa tecnica c'è la necessità di accedere e lavorare sulle proprie risorse anche se non si è davanti al proprio computer.

La delocalizzazione delle informazioni porta tuttavia con sè tutta una serie di problematiche, prima delle quali vi è la coerenza dello stato delle informazioni ed il controllo della sincronizzazione delle modifiche effettuate (poichè UNIX è un sistema operativo multiutente ad un dato istante di tempo N utenti possono tentare di accedere in scrittura ad uno stesso file).

Installazione

Per installare il supporto per nfs lato kernel digitare:

sudo apt-get install nfs-kernel-server


Configurazione di NFS lato server

Il pacchetto necessario per il setup del servizio NFS di filesystem distribuito su Linux è nfs-kernel-server che viene gestito con i comandi da shell

/etc/init.d/nfs-kernel-server start|stop|restart|status


I servizi correlati con nfs sono :

/sbin/portmap: gestibile con il comando

/etc/init.d/portmap start | stop | restart

/etc/init.d/nfs-common

/etc/init.d/nfs-kernel-server


Il file di configurazione lato server è /etc/exports la cui sintassi è della seguente forma:

[directory da esportare] [host a cui esportarla] ([permessi])

Un esempio è il seguente :

/home/administrator *.pascal.org(ro) sola lettura sostituire ro con rw per lettura scrittura


Questo dice al server NFS di permettere a tutti i client del dominio pascal.org di accedere al filesystem in /home/administrator in modalità di sola lettura.

Il comando da usare per esaminare i fs montati è :

showmount



Per aumentare la sicurezza e la protezione del vostro server NFS dovrete definire la protezione servizi RPC lato server. Il file da editare è /etc/hosts.allow. Il formato di questo file è il seguente:

Programma:hosts:permissions

Ad esempio:

portmap:ALL EXCEPT .org:DENY

Nega a tutti gli hosts tranne quelli del dominio org l'accesso via RPC al file system distribuito NFS.

Configurazione dei clients


Il client che voglia accedere ad una risorsa NFS deve soltanto decidere come montare tale risorsa , se manualmente tramite il comando mount oppure automaticamente ad ogni avvio inserendo mount point e host nel file /etc/fstab.

Personalmente non consiglio quest'ultima soluzione poichè anche cercando di ottimizzare si va incontro a notevoli problemi di stabilità e sicurezza dei propri sistemi.

Come montare le risorse esportate:

Esempio: host B vuole temporaneamente montare la directory /home/administrator condivisa da host A sul suo fs locale /media/exported.

Il Comando su host B :

mount -t nfs hostA:/home/administrator /media/exported




La cartella /media/exported deve essere già creata e disponibile, come questa lo deve essere qualsiasi altra cartella che si desideri utilizzare.

Come fare se host B vuole montare sempre al boot la directory remota condivisa da host A?

Modificare il file /etc/fstab su hostB aggiungendo la seguente riga:

hostA:/home/administrator /media/exported nfs ro 0 0

martedì 1 marzo 2011

Collegare .Net a postgresql

Per collegare .net a Postgresql si deve aprire un nuovo progetto windows form (o terminale se si desidera).
Scaricare Npgsql da qui e poi dopo aver estratto i file aggiungere il riferimento al file Npgsql.dll in visual studio ricordandosi di inserire
using Npgsql;
dopo le dichiarazioni ad inizio della parte codice della form.
Procedere inserendo un dataGridView che noi chiameremo dataGridView1.
Poi si vada nel codice del form in cui si vuole visualizzare i dati e si inserisca la parte di codice in grassetto(inserisco la parte completa del codice di Form1.cs),
Ricordandosi di inserire ; all'interno della stringa alla fine di ogni coppia di valori
Parola chiave=Valore;
sapendo che i valori sono
# Server - specifies the server location
# User Id - the database user
# Port - default is 5432
# Password - the password for the database user
# Database - the database name

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

private DataSet ds = new DataSet();
private DataTable dt = new DataTable();

public Form1()
{
InitializeComponent();
try
{
//creazione stringa di connessione ricordandosi;
string connstring = "Server=prova;";
connstring = connstring + "Port=5432;";
connstring += "User Id=pippo;";
connstring += "Password=pluto;";
connstring += "Database=test;";

//creazione connessione con Npgsql
NpgsqlConnection conn = new NpgsqlConnection(connstring);
conn.Open();

//creazione di una query sql
string sql = "select * from coimaimp order by cod_impianto limit 100";
//creazione dataset dalla connsessione
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);


// resetto il DataSet per essere sicuro che sia vuoto
ds.Reset();

// riempio il DataSet con il risultato di NpgsqlDataAdapter
da.Fill(ds);

//Selezionamo la prima tabella dato che C# è in grado di gestire più tabelle
dt = ds.Tables[0];

//Collego il datagrid al DataTable per visualizzare i dati
dataGridView1.DataSource = dt;

//Chiudo la connessione(se non devo fare altre operazioni)
conn.Close();

}
catch (Exception msg)
{
//Visualizzo una finestra per sapere cosa è andato storto in caso di errore
MessageBox.Show(msg.ToString());
throw;
}

}
}
}