Archive for category sistemi

Nvidia – Come far funzionare la tecnologia Optimus su Ubuntu 11.10

Chi (come me) ha incautamente acquistato un nuovo notebook con scheda video Nvidia e tecnologia Optimus, sperando di avere l’acceleratore 3D pienamente supportato, si č sbagliato di grosso. A quanto pare Nvidia non ha alcuna intenzione di rendere compatibile questa tecnologia con Linux (gli auguro di fare la stessa fine che hanno fatto fare ad SGI), pero’ non tutto e’ perduto, il progetto Bumblebee fortunatamente ci viene in aiuto:

Per prima cosa facciamo un po’ di pulizia nel caso che abbiate smandruppato pesantemente la vostra box con inutili driver Nvidia, se avete installato i driver scaricati da nvidia.com, e il vostro X server non parte piu’:

# nvidia-uninstall
# rm /etc/X11/xorg.conf
# apt-get --reinstall install libgl1-mesa-glx
# reboot

Installiamo Bumblebee:

# wget https://raw.github.com/Bumblebee-Project/Bumblebee/master/cleanup
# chmod +x cleanup
# ./cleanup
# ppa-purge ppa:mj-casalogic/ironhide
# add-apt-repository ppa:ubuntu-x-swat/x-updates
# add-apt-repository ppa:bumblebee/stable
# apt-get update
# apt-get install bumblebee
# usermod -a -G bumblebee $USERNAME
# reboot

Per usufruire dell'acceleratore 3D sara' necessario lanciare il programma da terminale aggiungendo 'optirun':

# optirun glxinfo

@2012-01-17
Dopo alcuni giorni di utilizzo posso asserire con certezza quanto segue:

bumblebee in questo stadio di sviluppo č praticamente inutile, rassegnatevi!

Share

, , , , , , , , , ,

No Comments

Apache2 – mod_evasive

Vediamo come prevenire attacchi DDOS con questo modulo di apache:

# up2date -i httpd-devel
# cd /usr/local/src
# wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
# tar -zxvf mod_evasive_1.10.1.tar.gz
# cd mod_evasive
# /usr/sbin/apxs -cia mod_evasive20.c

Adesso aggiungiamo quanto segue in /etc/apache2/apache2.conf

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600

</IfModule>

# /etc/init.d/apache2 restart

Share

, ,

No Comments

Apache2: nascondere informazioni generali e versione di PHP

Per prima cosa editare /etc/apache2/apache2.conf e aggiungere le seguenti 2 direttive:

ServerTokens ProductOnly
ServerSignature Off

Adesso sitemiamo anche il php editando i seguenti files/etc/php5/apache2/php.ini e /etc/php5/cli/php.ini e modificando in entrambi i files:

expose_php On

in

expose_php Off

/etc/init.d/apache2 restart

Share

, , ,

No Comments

Nginx & Ubuntu 10.04 – SSL reverse proxy

Ho sempre preferito HAproxy nel vasto (nemmeno troppo) panorama dei reverse-proxy fino a quando non mi sono accorto che non č in grado di gestire nativamente i certificati ma č necessaria l’implementazione di STunnel, ovvero, secondo me, di un accrocchione epico. Qui di seguito vedremo come implementare NGiNX con supporto SSL attivo.

Recuperiamo tutto il software necessaio alla compilazione:
sudo aptitude -y install build-essential
sudo aptitude -y install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

Recuperiamo i sorgenti e compiliamo:

cd /usr/src/
wget http://nginx.org/download/nginx-1.0.6.tar.gz
tar zvxf nginx-1.0.6.tar.gz
cd nginx-1.0.6
./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
make && make install

Creiamo lo script di init:

nano /etc/init.d/nginx

e mettiamo al suo interno quanto segue:

#!/bin/sh

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx rProxy server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;

restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac

exit 0

rendiamolo esguibile all’avvio del server:

sudo chmod +x /etc/init.d/nginx
sudo /usr/sbin/update-rc.d -f nginx defaults

creiamo la struttura in apache style per gestire i vhosts:

sudo mkdir /usr/local/nginx/sites-available
sudo mkdir /usr/local/nginx/sites-enabled

modifichiamo nginx.conf e cancelliamo tutto il suo contenuto:

echo " " > /usr/local/nginx/conf/nginx.conf

e mettiamo al suo interno:

user www-data www-data;
worker_processes 4;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
tcp_nopush on;
tcp_nodelay off;
keepalive_timeout 5;

gzip on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml
application/xml+rss text/javascript;

include /usr/local/nginx/sites-enabled/*;
}

e adesso creiamo il nostro virtual host:

nano /usr/local/nginx/sites-available/sito.com

e mettiamo al suo interno:

upstream sito_com {
server web1:81;
server web2:81;
}

server {

listen 443;

ssl on;
ssl_certificate /etc/ssl/sito.com.crt;
ssl_certificate_key /etc/ssl/sito.com.key;

server_name sito.com;

location / {

# needed to forward user's IP address backendS
proxy_set_header X-Real-IP $remote_addr;

# needed for HTTPS
#proxy_set_header X_FORWARDED_PROTO https;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;

proxy_pass http://sito_com;

} #end locationy

} #end server

e attiviamo il vhosts:

sudo ln -s /usr/local/nginx/sites-available/sito.com /usr/local/nginx/sites-enabled/sito.com

ovviamente web1 e web2 sono i backend e avranno un ip in /etc/hosts del server, inoltre i backend avranno un vhost di apache sito.com in ascolto sulla porta 81.

Adesso creiamo dei certificati giusto per provare che il tutto funzioni a dovere:

cd /etc/ssl
openssl genrsa -des3 -out sito.com.key 1024
openssl req -new -key sito.com.key -out sito.com.csr
cp sito.com.key sito.com.key.bak
openssl rsa -in sito.com.key.bak -out sito.com.key

/etc/init.d/nginx restart

restartiamo il proxy e siamo pronti per testare il nostro proxy puntando il browser su https://sito.com

that’s all folks

Share

, , , , , , ,

No Comments

Exim4: Come pulire i messaggi congelati

Mi appunto qui una breve procedura di pulizia dei ‘Message Frozen’ di Exim4.

Per conoscere il numero di mail in stato Frozen:

exim4 -bpr | grep frozen | wc -l

 

Per cancellarle:

exiqgrep -z -i | xargs exim -Mrm

 

Share

, , , ,

No Comments

Linux: come trovare files piu’ grandi di 1GB

Mi appunto un rapido comando su come trovare (recursivamente) files piu’ grandi di 1 GB sul file system:

 

find / -type f -size +1G -exec ls -lh {} \; | less

Share

, , , , , , ,

No Comments

Condividere rapidamente directory via HTTP

Spesso configurare un nuovo vhost su apache, per permettere di scaricare rapidamente alcuni files da una particolare directory (magari fuori dalla tipica /var/www), puo’ richiedere troppo tempo; a tal proposito ci viene in aiuto il modulo CGIHTTPServer di Python che ci permette di startare un piccolo webserver minimale in ascolto di default sulla porta 8000. Ecco qui un piccolo script da eseguire direttamente nella directory che vogliamo condividere.

$ nano cgiserver

e copiamo all’interno quanto segue:

#!/usr/bin/env python

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
from SocketServer import ForkingMixIn

class ForkingServer(ForkingMixIn, HTTPServer):
pass

serveraddr = ('', 8000)
srvr = ForkingServer(serveraddr, CGIHTTPRequestHandler)
srvr.serve_forever()

rendiamo il file eseguibile:

$ chmod 700 cgiserver

ed infine lo eseguiamo

$ ./cgiserver

Share

, , , , , ,

No Comments

Linux: come trovare tutti i link simbolici presenti sul file system

Mi appunto un comando veloce che mette in evidenza, in modo recursivo, tutti i link symbolici fatti sul filesystem (o in una specifica directory):

# ls -lR <path> |grep "^l"

Share

, , ,

No Comments

VNC Server su Debian Sid / Ubuntu

Ho usato per un bel po’ di tempo, devo dire con soddisfazione, Xtightvncserver fino a qualche giorno fa quando Metacity ha deciso di non avviarsi piu’ e di fallire causa incompatibilita’ tra il server VNC e la nuovissima versione di X presente sul sistema. A questo punto non avendo voglia di attendere una patch (se mai arrivera’) ho deciso di cambiare VNC server utilizzandone uno perfettamente integrato con l’Xserver: X11VNC

Per l’installzione e’ sufficiente dare un:
#apt-get install x11vnc

dopo di che lo possiamo lanciare semplicemente con:
#x11vnc

altrimenti

#x11vnc -many

-many significa che quando una sessione termina il server resta in attesa di una nuova connessione.

A questo punto ho deciso di lanciarlo all’avvio della macchina semplicemente editando /etc/rc.local ed aggiungendo quanto segue:

Se si tratta di Debian Sid

## Starto VNC server in ipv4
killall -9 vino-server
nohup x11vnc -many -display :0 \
-auth $(ps aux | grep -v grep | grep /usr/bin/Xorg | cut -d" " -f30) &

Nel caso di una Ubuntu

## Starto VNC server in ipv4
killall -9 vino-server
nohup x11vnc -many -xkb -display :0 &

Share

, , , , ,

No Comments

Bash: cercare file e directory modificati oggi

Mi appunto qui di seguito due comandi, il primo mostra i files modificati oggi, il secondo le directory:

find -maxdepth 1 -type f -mtime -1

find -maxdepth 1 -type d -mtime -1

Share

, , , ,

No Comments