mainSlogopaceclick Blog  · informatica · elettronica · astronomia..

5 funzioni utili che può fare un Raspberry Pi in rete (FTP/TFTP/WEB/SAMBA/SYSLOG)

Vediamo come fare ad impostare un Raspberry Pi per poterlo usare come server nella rete locale.

Di seguito troverete una lista di comandi e azioni da eseguire passo passo per configurare il dispositivo.

undefined

[1] SERVER FTP

mkdir -p /home/pi/files/
chmod 777 /home/pi/files/
sudo bash

apt-get install pure-ftpd -y
pure-pw useradd pi -u pi -g pi -d /home/pi/files/

impostare come password: raspberry, poi

pure-pw mkdb
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/60puredb
service pure-ftpd restart

 

[2] SERVER TFTP

wget http://downloads.sourceforge.net/project/tftp-server/tftp%20server%20single%20port/opentftpspV1.66.tar.gz
tar xvf opentftpspV1.66.tar.gz
cd opentftp/

g++ opentftpd.cpp -oopentftpd -lpthread
mkdir /home/pi/files
chmod 777 /home/pi/files/

sudo bash

cp opentftpd /usr/bin/
vi /etc/opentftp.ini

nel file dovrete verificare o aggiungere il seguente contenuto

[LISTEN-ON]

[HOME]
/home/pi/files

[TFTP-OPTIONS]
username=pi
ThreadPoolSize=10
Read=Y
Write=Y
Overwrite=Y
/usr/bin/opentftpd -i /etc/opentftp.ini

 

[3] WEB SERVER

mkdir -p /home/pi/files/
chmod 777 /home/pi/files/
sudo bash
apt-get install apache2 -y
rm -rf /var/www/html/
ln -s /home/pi/files/ /var/www/html

 

[4] SAMBA SERVER

mkdir -p /home/pi/files/
chmod 777 /home/pi/files/
sudo bash
apt-get update
apt-get install samba -y
rm /etc/samba/smb.conf
vi /etc/samba/smb.conf

nel file dovrete verificare o aggiungere il seguente contenuto

[global] netbios name = server server string = server workgroup = WORKGROUP security = user
[server] comment = server path = "/home/pi/files/" public = yes guest ok = yes read only = no
pdbedit -a -u pi

impostare come password: raspberry, poi

service smbd restart

 

[5] SYSLOG SERVER

mkdir -p /home/pi/files
chmod 777 /home/pi/files
sudo bash
apt-get install syslog-ng -y

modificare il file config che si trova in:

/etc/syslog-ng/syslog-ng.conf

cambiare le impostazioni di permessi del file config da 640 a 644:

options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no); owner("root"); group("adm"); perm(0644); stats_freq(0); bad_hostname("^gconfd$");
};

inserire nel file anche queste 3 linee di configurazione:

source s_net { udp(ip(0.0.0.0) port(514)); };
destination d_files { file("/home/pi/files/${YEAR}_${MONTH}_${DAY}__${HOST}"); };
log { source(s_net); destination(d_files); };

salvare il file modificato e riavviare il server:

service syslog-ng restart

 

[PLUS] RADIUS SERVER 

sudo bash
apt-get update
apt-get install freeradius -y

modificare (con vi <file>) il file config che si trova in:

/etc/freeradius/clients.conf

nel file dovrete verificare o aggiungere il seguente contenuto

client 0.0.0.0/0 {
 secret = {RADIUS server shared key}
 shortname = anyone
}

modificare (con vi <file>) il file config che si trova in:

/etc/freeradius/users

nel file dovrete verificare o aggiungere il seguente contenuto

testuser Cleartext-password := "password"


[PLUS] DHCP SERVER

sudo bash

impostare un IP statico nel file

/etc/dhcpcd.conf

inserire ad esempio

static value
interface eth0
static ip_address=192.168.0.1/24
static routers=192.168.0.254
static domain_name_servers=8.8.8.8

riavviare il raspberry

reboot

aggiornare

apt-get update
apt-get install isc-dhcp-server -y

modificare il file config per DHCP che si trova in

/etc/dhcp/dhcpd.conf

inserire ad esempio

subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.20 192.168.0.40;
 option routers 192.168.0.254;
 option domain-name-servers 8.8.8.8;
}

se volete anche inserire opzioni aggiuntive in base al vendor, aggiungete

option vendor-class-identifier "AppleInc";
option vendor-encapsulated-options "192.168.1.100";

avviare il server DHCP con il comando

dhcpd -cf /etc/dhcp/dhcpd.conf

7 modi per creare Task .NET C#

Se stiamo programmando in C# (.NET) e siamo nella situazione di dover creare ed eseguire un Task in un nuovo thread, possiamo procedere in molti modi diversi.

Per prima cosa aggiungiamo la seguente direttiva di using:

 using System.Threading.Tasks;

Usiamo uno dei seguenti metodi:

1. Metodo classico

Task.Factory.StartNew(() => { Console.WriteLine("Hello Task :D"); });

2. Usando Delegate

Task task = new Task(delegate { MyVariousCommands(); });
task.Start();

3. Usando Action

Task task = new Task(new Action(MyMethod));
task.Start();

dove MyMethod è in metodo vero e proprio:

private void MyMethod()
{
  Console.WriteLine("Hello Task :D");
}

4. Usando Lambda senza metodo

Task task = new Task( () => { MyVariousCommands(); } );
task.Start();

5. Usando Lambda con metodo

Task task = new Task( () => MyMethod() );
task.Start();

6. Usando Run (.NET 4.5)

public async Task DoStuff()
{
  await Task.Run(() => MyMethod());
}

7. Usando FromResult (.NET 4.5)

public async Task DoStuff()
{
  int result = await Task.FromResult<int>(SumMe(1, 2));
}

private int SumMe(int a, int b)
{
  return a + b;
}


Ricordate
che nonè possibile avviare un Task che è già stato eseguito.
In questo caso (se dobbiamo rieseguire uno stesso Task) dovremo re-inizializzare il Task prima di poterlo ri-eseguire.

Twitter: un override per modificare automaticamente l'altezza del widget

Se avete embeddato il widget di Twitter in una vostra pagina avrete notato che l'altezza è fissa e non si adatta automaticamente con la pagina.

Se avete la necessità che si ridimensioni automaticamente aggiungete questo script alla fine della pagina web.

 

<script>
    $(document).ready(function () {
        detectFr();
    });
    function detectFr() {
        if ($("#twitter-widget-0").length > 0) {
            setTimeout(function () {
                setH();
            }, 250);
        } else {
            setTimeout(function () {
                detectFr();
            }, 500);
        }
    }
var panningBottom = 100; //<< INSERIRE IL VALORE CHE PIU' SI ADATTA AL VOSTRO HEADER
    function setH(){
        $('.twitter-timeline, .twitter-timeline-rendered').css('height', window.innerHeight-panningBottom);
    }
</script>

In questo modo, al caricamento, lo script andrà a cercare l'iframe in cui viene caricato il widget da Twitter, e ne imposterà l'altezza in base a quella della pagina madre.

Se avete un header più o meno alto, potete aumentare o meno il valore di panning-bottom per evitare che l'altezza impostata sia troppo lunga.

Ovviamente per funzionare, lo script ha bisogno dell'embed di jQuery.

 

Home