Installare GitLab in Debian 8 con certificato Let’s Encrypt

Da utente root:

su -

apt-get update && apt-get install curl

Installo certbot

echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list

apt-get update && apt-get install certbot -t jessie-backports

Creo il file di configurazione di letsencrypt per gitlab.(cambiare gitlab.yourdomain.com con il nome del vostro sito e your@email.com con il vostro indirizzo email)

Il dominio mattermost.yourdomain.com serve per abilitare anche la chat inclusa in gitlab (cambiare yourdomain.com col vostro dominio)

mkdir -p /root/letsencrypt-config 
cat <<EOT >> /root/letsencrypt-config/gitlab.ini
# this is the let's Encrypt config for our gitlab instance

# use the webroot authenticator. 
 authenticator = webroot
# the following path needs to be served by our webserver
# to validate our domains
 webroot-path = /var/www/letsencrypt

# generate certificates for the specified domains.
domains = gitlab.yourdomain.com, mattermost.yourdomain.com

# register certs with the following email address
email = your@email.com

# use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096
EOT

Creo una cartella per la verifica del sito

mkdir -p /var/www/letsencrypt

Installo Gitlab

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
apt-get install gitlab-ce

Modifico il file di configurazione di Gitlab impostando il nome del sito (cambiare gitlab.yourdomain.com con il nome del vostro sito)

vi /etc/gitlab/gitlab.rb
external_url "http://gitlab.yourdomain.com"

Per abilitare la chat mattermost modificare anche la seguente riga:

mattermost_external_url 'http://mattermost.yourdomain.com'

Aggiungo al file di configurazione delle linee per utilizzare le chiavi e per attivare l’invio della posta. Modificare opportunamente le variabili evidenziate

cat <<EOT >> /etc/gitlab/gitlab.rb
### Customize NGINX
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate']= "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem"

nginx['custom_gitlab_server_config']="location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"

### SMTP
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
gitlab_rails['smtp_password'] = "my-gmail-password"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
EOT

Per configurare anche la chat Mattermost aggiungere le seguenti righe:

cat <<EOT >> /etc/gitlab/gitlab.rb
mattermost_nginx['custom_gitlab_mattermost_server_config'] = "location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"
mattermost['enable'] = true
mattermost['gitlab_auth_endpoint'] = "https://gitlab.yourdomain.com/oauth/authorize"
mattermost['gitlab_token_endpoint'] = "https://gitlab.yourdomain.com/oauth/token"
mattermost['gitlab_user_api_endpoint'] = "https://gitlab.yourdomain.com/api/v3/user"
mattermost_nginx['redirect_http_to_https'] = true
mattermost_nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem"
mattermost_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem"
mattermost['email_enable_sign_up_with_email'] = true
mattermost['email_enable_sign_in_with_email'] = true
mattermost['email_enable_sign_in_with_username'] = true
mattermost['email_send_email_notifications'] = true
mattermost['email_require_email_verification'] = false
mattermost['email_smtp_username'] = "my.email@gmail.com"
mattermost['email_smtp_password'] = "my-gmail-password"
mattermost['email_smtp_server'] = "smtp.gmail.com"
mattermost['email_smtp_port'] = 587
mattermost['email_connection_security'] = "STARTTLS"
EOT

Per altre configurazioni smtp vedi: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md

Riconfiguro GITLAB

gitlab-ctl reconfigure

Creo il certificato

certbot certonly -c /root/letsencrypt-config/gitlab.ini

Modifico la configurazione impostando https

vi /etc/gitlab/gitlab.rb
external_url "https://gitlab.yourdomain.com/"

anche per Mattermost

mattermost_external_url 'https://mattermost.yourdomain.com'

Creo uno script per l’aggiornamento del certificato

cat <<EOT >> /etc/cron.monthly/renew-ssl-certificates

#!/bin/bash

/usr/bin/certbot certonly -c /root/letsencrypt-config/gitlab.ini --renew-by-default
# or /usr/bin/certbot renew --quiet

gitlab-ctl restart
EOT

Rendo eseguibile lo script

chmod +x /etc/cron.monthly/renew-ssl-certificates

Accedo a gitlab con l’utente root (la password viene richiesta alla prima schermata)

Dall’area admin – Settings – Applications, modifico l’url dell’applicazione Mattermost da http a https

https://mattermost.yourdomain.com/signup/gitlab/complete

https://mattermost.yourdomain.com/login/gitlab/complete

VestaCP e Iptables su container Proxmox

Utilizzando il Pannello VestaCP su una macchina virtuale (container) sotto Proxmox ho riscontrato che non potevo inviare mail tramite smtp.

Indagando sono riuscito a capire che iptables non funziona correttamente nei container di Proxmox.
In particolare queste regole ad esempio non si attivano:
– append INPUT – match state – state ESTABLISHED, RELATED – jump ACCEPT
– append OUTPUT – match state – state ESTABLISHED, RELATED – jump ACCEPT
Allora, visto che modprobe non è attivo nei container ho trovato che nella macchina padre Proxmox bisogna modificare il file

/etc/vz/vz.conf
e nella sezione IPv4 modificare la riga IPTABLES in:

IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT xt_mac ipt_owner"

A questo punto riavviare la macchina e dai container le regole viste sopra funzionano..
Ma ho visto anche che lo script di attivazione di iptables di vestaCP fa un test per verificare se e’ presente il modulo “state” che non funziona ancora..

Allora ho modificato il file
/usr/local/vesta/bin/v-update-firewall

alla riga 41 e seguenti in questo modo:

# Checking conntrack module avaiabilty
#$modprobe nf_conntrack >/dev/null 2>&1
#$modprobe nf_conntrack_ftp >/dev/null 2>&1
cat /proc/net/ip_tables_matches | grep state > /dev/null 2>&1
if [ $? -ne 0 ]; then
stateful='no'
fi

riavviando dal pannello VestaCP il servizio di firewall, ora tutto funziona a dovere !!

Proxmox firewall e router con un solo ip pubblico

Ecco come ho impostato il server proxmox per avere un firewall e il routing tramite un unico ip pubblico.

Dal pannello di controllo web abilitare eth0 con l’ip pubblico senza bridge e vmbr0 con un ip locale:

...
auto eth0
iface eth0 inet static
         address 91.11.22.33
         netmask 255.255.255.0
         broadcast 91.11.22.255
         gateway 91.11.22.254

auto vmbr0
iface vmbr0 inet static
        address 10.254.254.254
        netmask 255.0.0.0
        broadcast 10.255.255.255
        bridge_ports none
        bridge_stp off
        bridge_fd 0

...
...

Ora install shorewall

sudo aptitude install shorewall

Creo il file /etc/shorewall/zones e ci scrivo:

#ZONE   TYPE            OPTIONS         IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
dmz     ipv4

Creo il file /etc/shorewall/interfaces e ci scrivo:

#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          blacklist,nosmurfs
dmz     venet0          detect          routeback
dmz     vmbr0           detect          routeback,bridge

Creo il file /etc/shorewall/policy e ci scrivo:

#SOURCE DEST    POLICY          LOG     LIMIT:          CONNLIMIT:
#                               LEVEL   BURST           MASK

# From Firewall Policy
fw      fw      ACCEPT
fw      net     ACCEPT
fw      dmz     ACCEPT

# From DMZ Policy

dmz     dmz     ACCEPT
dmz     net     ACCEPT
dmz     fw      DROP            info

# From Net Policy
net     fw      DROP            info
net     dmz     DROP            info

# THE FOLLOWING POLICY MUST BE LAST
#
all     all     REJECT          info

Creo il file /etc/shorewall/rules e ci scrivo:

#ACTION          SOURCE     DEST       PROTO   DEST        SOURCE     ORIGINAL    RATE

# Permit access to SSH
SSH/ACCEPT       net        fw         -       -            -          -        
  6/min:5

# Permit access to Proxmox Manager and Console
ACCEPT           net        fw         tcp     443,5900:5999

# PING Rules
Ping/ACCEPT      all        all

# LAST LINE -- DO NOT REMOVE

Alla fine la cartella /etc/shorewall dovrebbe contenere i seguenti file:

drwxr-xr-x  2 root root 4096 Apr 14 15:15 .
drwxr-xr-x 77 root root 4096 Apr 14 13:15 ..
-rw-r--r--  1 root root  453 Nov  8  2007 Makefile
-rw-r--r--  1 root root  214 Apr 14 15:03 interfaces
-rw-r--r--  1 root root  494 Apr 14 15:10 policy
-rw-r--r--  1 root root  517 Apr 14 15:15 rules
-rw-r--r--  1 root root 4004 Apr 14 13:18 shorewall.conf
-rw-r--r--  1 root root  183 Apr 14 13:19 zones

Controllo ora il funzionamento di shorewall:

shorewall try /etc/shorewall 60

in questo minuto di prova posso provare se risponde il pannello di controllo web di proxmox e se riesco a loggarmi in ssh al server.

Se tutto funziona posso abilitare proxmox all’avvio automatico: modifico il file /etc/default/shorewall e cambio:

startup=0

in

startup=1

Posso ora avviare shorewall manualmente col comando

shorewall start

oppure riavviarlo al bisogno con

shorewall restart

Per permettere alle macchine virtuali di uscire in internet creo il file /etc/shorewall/masq e sccrivo:

#INTERFACE      SOURCE          ADDRESS         PROTO   PORT(S) IPSEC   MARK
eth0            10.0.0.0/8

# LAST LINE -- DO NOT REMOVE

per dirottare il traffico web (porta 80) su una macchina virtuale inserisco nel file /etc/shorewall/rules questa regola:

DNAT                    net     dmz:10.0.1.101          tcp     80

Posso anche cambiare porta di destinazione nella macchina virtuale con la regola:

DNAT                    net     dmz:10.0.1.103:8180     tcp     80

Le macchine virtuali potranno avere degli indirizzi privati del tipo 10.xxx.yyy.zzz (es 10.0.1.101) ed essere gestiti semplicemente con un’interfaccia venet.

Shorewall ha alcune opzioni comode e interessanti:

safe-restart

salva la configurazione attuale, quindi applica quella nuova e chiede conferma per mantenere le nuove regole; se la conferma non è data entro 60 secondi sono riapplicate le regole precedenti;

try configuration-directory [timeout]

riavvia shorewall utilizzando la configurazione presente nella directory specificata e se sono rilevati errori o se il timeout è raggiunto, le regole precedenti sono riapplicate;

show check

esegue la validazione sintattica della configurazione;

logwatch

simile a tail -f $LOGFILE;

ipcalc [<address> <mask> | <address/vlsm>]

dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.

(per questo post ho preso pesantemente spunto dal seguente: http://www.myatus.co.uk/2009/08/31/guide-firewall-and-router-with-proxmox/)

Come rimuovere i Credits da Phoca Gallery

Usate Joomla, magari la versione nuova 1.6 e avete installato la galleria di immagini Phoca Gallery 3.0 rc3 ?

Magari vorreste anche togliere dalle pagine della galleria la scritta “Powered by Phoca Gallery” che compare in ogni pagina della gallery.

Bene allora questo vi può esser utile:

Dalla cartella principale del vostro sito entrate nella cartella

administrator/components/com_phocagallery/libraries/phocagallery/utils/

ed editate il file utils.php

cercate la funzione footer() e mettete un cancelletto (#) davanti alla riga che inizia per echo base64_decode

Otterrete così:

public function footer() {
  #echo base64_decode('PGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjojZDNkM2QzOyI+UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnBob2NhLmN6IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJQaG9jYS5jeiI+UGhvY2E8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cucGhvY2EuY3ovcGhvY2FnYWxsZXJ5IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJQaG9jYSBHYWxsZXJ5Ij5HYWxsZXJ5PC9hPjwvZGl2Pg0K');
 }

Funziona ?

Creazione di un tema personalizzato per Plone 4

Nell’articolo precedente abbiamo visto come installare Plone in un server Ubuntu 10.04, ora vediamo come creare un tema personalizzato per Plone 4.

Dalla cartella principale dove abbiamo installato Plone 4, entrimo nella cartella src:

cd plone402/src

Utilizziamo paster per generare il template:

paster create -t plone3_theme

Alle richieste rispondiamo in questo modo:

Enter project name: plonetheme.testplone4
Variables:
 egg:      plonetheme.testplone4
 package:  plonethemetestplone4
 project:  plonetheme.testplone4
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']:
Skin Name (Name of the theme (human facing, added to portal_skins)) ['']: Tema Test Plone4
Empty Styles? (Override default public stylesheets with empty ones?) [False]:
Include Documentation? (Include in-line documentation in generated code?) [True]:
Version (Version number for project) ['1.0']:
Description (One-line description of the project) ['An installable theme for Plone 3']:

Note:

  • Il nome così formato corrisponde al namespace tipico dei prodotti Plone
  • Lo Skin Name e’ il nome che poi sarà visibile
  • Empty styles: impostando su yes verranno generati automaticamente dei fogli di stile vuoti che avranno la precedenza su quelli standard di Plone. Risulta piu’ semplice però lasciar attivi i CSS originali e andar a sovrascrivere solo le parti da modificare

Il tema è stato ora generato ma dovremo farlo riconoscere a Plone4

cd ..

editiamo il file buildout.cfg e lo modifichiamo in questo modo:

Originale Modificato
develop =
develop =
 src/plonetheme.testplone4
eggs =
 Zope2
 Plone
 ${buildout:eggs}
eggs =
 Zope2
 Plone
 ${buildout:eggs}
 plonetheme.testplone4
zcml =
zcml =
 plonetheme.testplone4

Salviamo le modifiche e rilanciamo lo script buildout

./bin/buildout -v

Il parametro -v aumenta la verbosità

Riavviamo il server:

./bin/instance fg

(per stoppare il server utilizzeremo la combinazione di tasti ctrl+c)

Col browser puntiamo al pannello di configurazione di Plone4: http://192.168.1.203:8080/Plone/plone_control_panel

e selezioniamo il link Prodotti Aggiuntivi

in alternativa possiamo puntare direttamente all’indirizzo: http://192.168.1.203:8080/Plone/prefs_install_products_form

Selezioniamo il tema che abbiamo creato e attiviamolo con l’apposito tasto

Ora vedremo il sito Plone spogliato di tutti i fogli di stile:

Brutta sorpresa direte, visto che prima abbiamo scelto di non sovrascrivere i css originari.

Con Plene 3 avrei avuto il risultato voluto ma con Plone 4 c’è ancora un passaggio da fare.

Il tema che abbiamo trovato inizialmente su Plone 4 si chiama Sunburst Theme ma in Plone 3 il tema di default si chiamava Plone Default. Il vecchio tema è ancora disponibile ma ora in Plone 4 si chiama Plone Classic Theme.

Il tema che abbiamo creato dunque va adattato a Plone 4.

Basta modificare il file che troviamo in src/plonetheme.testplone4/plonetheme/testplone4/profiles/default/skins.xml in questo modo:

Originale
<skin-path name="Tema Test Plone4" based-on="Plone Default">
Modificato
<skin-path name="Tema Test Plone4" based-on="Sunburst Theme">

Una volta salvata la modifica dovremo riavviare il server Zope per vederne l’effetto.

Ora vediamo come personalizzare il tema che abbiamo creato.

Gli strumenti che ci servono sono:

  • Firefox ed il plugin Firebug
  • Un buon editor (Komodo per esempio), magari che supporti l’editazione di file remoti
  • Eventualmente un Grid System (deco.gs per esempio) per aiutarci nello sviluppo

Il primo lavoro che dovremo fare e’ copiare brutalmente i fogli di stile utilizzati dal tema SunBurst nel nostro tema, per poterli poi modificare a piacere.

Per fare questo in modo semplice creiamo in ubuntu 2 variabili di sistema temporanee partendo dalla directory principale di Plone4 (nel nostro caso ~/plone402):

cd ~/plone402
orig=`cat bin/instance | grep "plonetheme.sunburst" | cut -d \' -f2`/plonetheme/sunburst/skins/sunburst_styles
dest=src/plonetheme.testplone4/plonetheme/testplone4/skins/plonetheme_testplone4_styles/

Verifichiamo i valori memorizzati con:

echo $orig
echo $dest

e copiamo i file da modificare:

cp $orig/ploneCustom.css.dtml $dest
cp $orig/public.css $dest

Ora col nostro editor di testo possiamo modificare a piacere questi files.

Possiamo pensare di modificare public.css quando volgiamo modificare dei tag esistenti e inserire eventuali tag nuovi nel file ploneCustom.css.dtml ma questa scelta è arbitraria. L’importante è sapere che ploneCustom.css.dtml ha la precedenza su public.css.

(work in progress….)

Installazione Plone 4.0.2 su Ubuntu server 10.04LTS

Ecco come installare l’ultima versione di Plone (4.0.2) in un sistema Ubuntu minimale (installato in una virtual machine tramite l’immagine mini.iso ver 10.04 a 32bit).

Inizia l’installazione di Ubuntu

Scelgo la lingua:

Do un nome al server:

Partiziono come consigliato:

Nel nostro caso bastano le partizioni essenziali:

Imposto gli aggiornamenti automatici relativi alla sicurezza:

Scelgo di installare solo i componenti essenziali e il servizio ssh

Termino la procedura con l’installazione di Grub

Una volta che il server ha terminato l’installazione e si sarà riavviato, scopriamo l’indirizzo ip assegnato dinamicamente dal server DHCP:

ifconfig eth0

Ora dal nostro PC possiamo accedere al server virtuale tramite ssh:

ssh fc@192.168.1.203

(anche Putty va bene se abbiamo solo Windows a disposizione)

Ora possiamo installare i pacchetti che serviranno a Plone4.
Nota bene: tutti i comandi vanno eseguiti come utente normale, non quindi da root, quando serviranno i privilegi di root verrà specificato di eseguirli tramite sudo

sudo aptitude install build-essential python-dev python-pip python-pastescript python-setuptools python-imaging subversion

Installiamo ora i componenti che ci servono per installare rapidamente i progetti Zope

sudo pip install zopeskel

Possiamo ora utilizzare paster per installare Plone. Diamo un’occhiata per vedere quali template sono disponibili:

paster create --list-templates
Available templates:
 archetype:          A Plone project that uses Archetypes content types
 basic_namespace:    A basic Python project with a namespace package
 basic_package:      A basic setuptools-enabled package
 basic_zope:         A Zope project
 kss_plugin:         A project for a KSS plugin
 nested_namespace:   A basic Python project with a nested namespace (2 dots in name)
 paste_deploy:       A web application deployed through paste.deploy
 plone:              A project for Plone products
 plone2.5_buildout:  A buildout for Plone 2.5 projects
 plone2.5_theme:     A theme for Plone 2.5
 plone2_theme:       A theme for Plone 2.1
 plone3_buildout:    A buildout for Plone 3 installation
 plone3_portlet:     A Plone 3 portlet
 plone3_theme:       A theme for Plone 3
 plone_app:          A project for Plone products with a nested namespace (2 dots in name)
 plone_hosting:      Plone hosting: buildout with ZEO and Plone versions below 3.2
 plone_pas:          A project for a Plone PAS plugin
 recipe:             A recipe project for zc.buildout
 silva_buildout:     A buildout for Silva projects

Utilizziamo il template plone3_buildout visto che non c’e’ ancora un template specifico per Plone4

paster create -t plone3_buildout

Alle domande che ci vengono poste rispondiamo nel modo seguente

Enter project name: plone402
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: easy
Plone Version (Plone version # to install) ['3.3.5']: 4.0.2
Zope2 Install Path (Path to Zope2 installation; leave blank to fetch one!) ['']:
Plone Products Directory (Path to Plone products; leave blank to fetch [Plone 3.0/3.1 only]) ['']:
Initial Zope Username (Username for Zope root admin user) ['admin']: admin
Initial User Password (Password for Zope root admin user) ['']: admin
HTTP Port (Port that Zope will use for serving HTTP) ['8080']:
Debug Mode (Should debug mode be "on" or "off"?) ['off']: on
Verbose Security? (Should verbose security be "on" or "off"?) ['off']: off

Per il passaggio successivo ci servirà anche il pacchetto distribute

sudo easy_install distribute==0.6.14

Entriamo nella cartella creata in precedenza:

cd plone402/

Lanciamo lo script bootstrap.py

python bootstrap.py

Alla fine otterremo la risposta: Generated script ‘/home/fc/plone402/bin/buildout’.

Ora scarichiamo tutti i pacchetti e le dipendenze indicate nel file buildout.cfg col comando:

./bin/buildout

Questo è il passaggio più lungo ma anche l’ultimo 😉

Ora avviamo il server Zope

./bin/instance console

Nota: è ancora possibile avviare il server tramite il comando ./bin/instance fg ma dalla versione 4 si consiglia di utilizzare ./bin/instance console

Se vogliamo avviare il server in modalità background scriveremo: ./bin/instance start

e col nostro Browser verifichiamo il funzionamento di Plone puntando all’indirizzo: http://192.168.1.203:8080 (sostituite all’occorrenza il numero IP con quello del vostro server):

Questo post è stato riadattato dall’originale di Noe Misael Nieto Arroyo

Nel prossimo articolo vedremo come creare un nostro tema per Plone 4

Installazione Python e Plone 4 da sorgenti

Ecco un video di 5 minuti che mostra come installare in un sistema Unix-like Python e Plone 4 da file sorgenti:

[youtube]DtYwZOedlcI[/youtube]

I requisiti di sistema sono:

  • Strumenti per la compilazione (il pacchetto build-essential per Linux Debian o Ubuntu per esempio)
  • Subversion per il download da repository svn

La procedura da linea di comando:

Creo una cartella dove metto tutto il necessario (in questo modo non modifico minimamente le impostazione del sistema e posso fare tutto senza i permessi di root)

cd ~
mkdir plone
cd plone

Scarico Python e una libreria necessaria a Plone per la gestione delle immagini

wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz

Scompatto Python e PIL

tar xvzf Python-2.7.tgz
tar xvzf Imaging-1.1.7.tar.gz

Creo una cartella dove installare Python

mkdir -p ~/plone/python/2.7

Configuro Python per l’installazione nella cartella predisposta (specificare il percorso assoluto)

cd ~/plone/Python-2.7
./configure --prefix=/Users/fc/plone/python/2.7/

Compilo e installo Python

make
make install

Installo PIL

cd ~/plone/Imaging-1.1.7
~/plone/python/2.7/bin/python2.7 setup.py install
cd ~/plone/

Scarico il buildout di Plone 4 dal repository svn

svn co http://svn.plone.org/svn/plone/buildouts/plone-coredev/branches/4.0/ plone4

Installo Plone 4

cd plone4
~/plone/python/2.7/bin/python2.7 ./bootstrap.py

Modifico eventualmente il file buildout.cfg

vi ./buildout.cfg

Scarico tutti i pacchetti necessari

./bin/buildout

Avvio il server Zope per generare l’instanza Plone

./bin/instance.fg

Dal mio Browser visito la pagina: http://localhost:8080

Google Apps: POP su più client

Indiscutibile la qualità del servizio di posta che Google offre tramite Google Apps, si può scegliere se consultare la posta via web (io lo preferisco), oppure utilizzare un client di posta installato nel PC tramite il protocollo POP3 o anche tramite IMAP.

Gli affezionati al protocollo POP3 vorranno continuare ad utilizzarlo ma sorge un problema quando si vuol consultare lo stesso account di posta da più di un PC tramite il protocollo POP3. Si noterà infatti che il secondo PC che tenta di scaricare la posta non trova i messaggi che il primo PC ha già scaricato.

Ecco allora come fare: per poter utilizzare su piu’ PC tramite POP la posta configurata su Google Apps o Gmail, occorre anteporre al nome utente la stringa “recent:

Nelle impostazioni del  client POP , sostituire ‘username@dominio.com’ nel campo ‘Username’ o ‘e-mail’ con il la voce  ‘recent:username@dominio.com’.

Ricordare di configurare il proprio client POP in modo da lasciare i messaggi sul server

Per approfondimenti seguite questi link:

Download facile da YouTube

Post Obsoleto, e’ cambiata l’interfaccia di YouTube 🙁

Ecco come scaricare facilmente i video di youtube sul proprio pc:

Ho testato con Firefox e Safari ma funziana anche su IE8

Trascinare il seguente link nella barra dei segnalibri (o aggiungere nei seganlibri):

Get YouTube video

Quando da una pagina di YouTube cliccherete su questo link, sotto la finestra delle impostazioni del video troverete un link per scaricare il filmato in formato MP4 o se disponibile, in alta definizione..

Sorgente: http://googlesystem.blogspot.com/2008/04/download-youtube-videos-as-mp4-files.html