Author: Alex
-
VPN selector
Un piccolo script utile per gestire piú connessioni VPN. Lo script Python non fa altro che cercare tutti i file ovpn nelle sotto directory della directory passata come parametro (Documents/OpenVPN é la scelta di default). Per il momento non é molto testato ma sembra funzionare 😉
Lo trovate qui.
-
Debootstrap
Questo post é un piccolo howto su come installare Debian (o distro derivate come ubuntu) con debootstrap.
Nota importante
Lo scopo principale di questo post é spiegare il funzionamento di debootstrap e tenere degli appunti sulle fasi principali per l’installazione, non quello di fare un cut&paste diretto dei comandi.
Assunzioni
In questo post si assume che:
- il disco sia già stato partizionato nella maniera corretta;
- si stia installando debian sid;
- la partizione di root é
/dev/sda1
; - la partizione /home
/dev/sda5
; - la partizione di swap é
/dev/sda2
.
Preparare il sistema live
Per prima cosa occorre avere un media boot-abile di una distribuzione debian-based (ubuntu, mint, debian…etc). Facciamo il boot con il sistema live e accediamo alla console o, se si preferisce l’interfaccia grafica, ad un emulatore di terminale.
Probabilmente l’installazione live non contiene debootstrap. Lo si può installare con:
sudo apt-get install debootstrap
.Preparare le partizioni
Se il disco non é partizionato o si vuole cambiarne la suddivisione si può usare fdisk. Il mio disco solitamente é già partizionato e, soprattutto, nella partizione /home ci sono tutti i miei dati. Se questa é anche la vostra condizione occorre stare molto attenti a formattare unicamente la partizione root e non quella home. Il comando da eseguire é:
sudo mkfs.ext3 /dev/sda1
.Ora creiamo una directory sotto /mnt che sarà la base dell’installazione:
sudo mkdir /mnt/new_install
Successivamente montiamo lì i nostri filesystem:sudo mount /dev/sda1 /mnt/new_install
. (si potrebbe montare già da ora anche la directory /home ma per evitare cancellazioni accidentali meglio farlo dopo)Eseguire debootstrap
Ok, si é pronti finalmente a lanciare debootsrap:
sudo debootstrap --verbose --arch=amd64 sid /mnt/new_install
. Per fare questo dovrete essere connessi ad internet. Una volta eseguito il comando si dovrà aspettare lo scaricamento e l’installazione del sistema base.Ora, se tutto é andato per il verso giusto, dovremmo avere in /mnt/new_install la struttura base del fileystem e possiamo dunque procedere con il mount dei filesystem di sistema:
- proc:
sudo mount -t proc /proc /mnt/new_install/proc
- sysfs:
sudo mount -t sysfs /sys /mnt/new_install/sysfs
- dev:
sudo mount --bind /dev /mnt/new_install/dev
Inoltre creiamo un file che servità durante l’installazione del bootloader:touch /mnt/new_install/etc/mtab
Infine copiamo il file con i dns di sistema nella nuova installazione:
sudo cp -a /etc/resolv.conf /mnt/new_install/etc/resolv.conf
Chrooting
Possiamo ora fare chroot nella nuova installazione:
sudo chroot /mnt/new_install /bin/bash
Da questo momento in poi saremo all’interno della nuova installazione. Per prima cosa, prima che ci si dimentichi e si debba rifare tutto da capo, impostiamo la password di root del sistema:
passwd
Dopodiché installiamo qualche pacchetto fondamentale con apt-get o aptitude:
- linux-image
- grub
- vim 🙂 Nel mio caso ora é il momento di montare il filesystem /home con:
sudo mount /dev/sda5 /mnt/new_install/home
e, se si vuole partire da un configurazione pulita per il proprio utente, spostare la vecchia home_dir:sudo mv /mnt/new_install/home/user /mnt/new_install/home/user_old
Ultimo passo da non dimenticare, pena un kernel panic al primo avvio, creare il file /etc/ contenente:
proc /proc proc nodev,noexec,nosuid 0 0 /dev/sda1 / ext3 errors=remount-ro 0 1 /dev/sda5 /home ext3 defaults,user_xattr 0 2 /dev/sda2 none swap sw 0 0
Ora é possibile uscire dal chroot e fare il reboot del sistema. Una volta fatto il boot nel sistema base si può partire con l’installazione di tutti i pacchetti (xorg, etc) e con la creazione degli utenti.
Finito, la nostra disto é installata!
-
NetworkManager: openvpn secrets error
<policy user="at_console"> <allow own="org.freedesktop.NetworkManager.openvpn"/> <allow send_destination="org.freedesktop.NetworkManager.openvpn"/> </policy>
-
Silverlight e Windows Login
In Sirverlight non esiste nativamente il modo per ottenere le informazioni sull’utente connesso a Windows. Quello che si può fare é utilizzare del codice ASP lato server e poi recuperare le informazioni da Silverlight.
Nel nostro container ASP che host il controllo Silverlight aggiungiamo qualcosa del tipo:
.... void Page_Load() { this.UsernameField.Value = User.Identity.Name; } ...
.... void Page_Load() { this.UsernameField.Value = User.Identity.Name; } ...
Nel body invece mettiamo un controllo nascosto per contenere i nostri dati:
... ...
... ...
Lato Silverlight leggiamo, quando ci occorre, il volore del tag input:
public string GetUser() { HtmlDocument doc = HtmlPage.Document; if (doc == null) { return string.Empty; } HtmlElement elm = doc.GetElementById("UserField"); if (elm == null) { return string.Empty; } return elm.GetAttribute("value"); }
-
IIS errore 0x8ffe2740
Questo errore si verifica se la porta sulla quale si sta cercando di far girare un Web Site é già in uso (Skype, Visual Studio, etc.). Ci voleva così tanto a scriverlo?
-
Siesta
!
-
WCF ServiceHost e Cross Domain Policy
A volte capita di dover accedere con un’applicazione web a servizi hostati in un dominio esterno. Questo si risolve nella maggioranza dei casi impostando in maniera corretta il file
[clientaccesspolicy.xml](http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx "clientaccesspolicy").
Nel caso in cui però il Web Service in questione non sia hostato da un vero e proprio web server ma da un’applicazione .NET (sia essa console o form) si deve ovviare al problema della Cross Domain Policy in manera più fantasiosa ((poi dicono che gli informatici non hanno fantasia 🙂 )) .
_
_Quello che sto per descrivere é un modo semplice per simulare la presenza del file
clientaccesspolicy.xml
quando si ha a che fare con un ServiceHost.Supponendo di avere già il Web Service funzionante (
MyService
), quello che resta da fare é far implementare ad esso un’interfaccia del tipo:[ServiceContract] public interface IPolicyRetriever { [OperationContract] [WebGet(UriTemplate = "/clientaccesspolicy.xml")] Stream GetSilverlightPolicy(); }
[ServiceContract] public interface IPolicyRetriever { [OperationContract] [WebGet(UriTemplate = "/clientaccesspolicy.xml")] Stream GetSilverlightPolicy(); }
Inquesta interfaccia specifichiamo che il servizio deve rispondere quando viene interrogato l’Uri
/clientaccesspolicy.xml
.Il gioco è fatto.
Basta ora implementare il service in un modo simile a questo:
public Stream GetSilverlightPolicy() { string result = @ "; WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"; return new MemoryStream(Encoding.UTF8.GetBytes(result)); }
public Stream GetSilverlightPolicy() { string result = @ "; WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"; return new MemoryStream(Encoding.UTF8.GetBytes(result)); }
e creare il ServiceHost dove aggiungere i due endpoint.
class Program { static void Main(string[] args) { Uri baseAddress = new Uri("http://localhost:9090"); // Create the ServiceHost. using (ServiceHost host = new ServiceHost(typeof(MyService), baseAddress)) { // Enable metadata publishing. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; host.Description.Behaviors.Add(smb); host.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), new Uri("http://localhost:9090/myservice.svc")); host.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior()); host.Open(); Console.ReadLine(); host.Close(); } } }
class Program { static void Main(string[] args) { Uri baseAddress = new Uri("http://localhost:9090"); // Create the ServiceHost. using (ServiceHost host = new ServiceHost(typeof(MyService), baseAddress)) { // Enable metadata publishing. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; host.Description.Behaviors.Add(smb); host.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), new Uri("http://localhost:9090/myservice.svc")); host.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior()); host.Open(); Console.ReadLine(); host.Close(); } } }
Ecco fatto; il nostro client potrà accedere al WebService senza problemi.
-
Cartello stradale a Lecco…
Certo che se ne vedono di cose strane…
!
Ed io che pensavo che certe cose le facessero solo gli ingegneri! 🙂