Code And Run

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?

  • 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! 🙂