www.dedoshop.com
Risultati da 1 a 6 di 6
Like Tree28Likes
  • 15 Post By Ethereal
  • 3 Post By Ethereal
  • 1 Post By Ethereal

Discussione: [Tutorial] Xbox 360 Homebrew.La Libreria LibXenon e le Applicazioni.

  1. #1
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231

    [Tutorial] Xbox 360 Homebrew.La Libreria LibXenon e le Applicazioni.

    Salve a tutti.

    Benchè nuovo utente del forum volevo dare il mio contributo scrivendo una guida "Dalla A alla Z" sull'Homebrew per Xbox360. Con questo tutorial voglio integrare e un pò aggiornare l'ottimo lavoro fatto già dall'utente Pa0lone, che ho avuto modo di leggere.

    Per iniziare:

    Il requisito fondamentale è una console Xbox360 con modifica JTAG (SMC Hack) o RGH. Giusto per essere esaustivi, una Xbox 360 modificata con queste due tecniche permette l'esecuzione di codice non firmato. Alla maggior parte degli utenti questo interessa perchè in questo modo possono far girare dashboard alternative, eseguire le proprie copie di backup direttamente da HDD ecc...

    C'è però un'altra comunità di utenti che ha visto in queste modifiche l'opportunità di poter creare delle applicazioni che siano al tempo stesso libere, quindi sotto licenza GPL, e anche legali, da creare e da distribuire. Questo perchè, le applicazioni che si trovano in rete, avviabili da Dashboard, es. XeXMenu, implicano comunque, per la loro creazione, l'utilizzo di alcune librerie di sviluppo protette da Copyright di Microsoft, il cui utilizzo quindi, se non autorizzato, è illegale.

    Non solo, ma per riuscire a trovare le applicazioni che cerchiamo, molte volte siamo costretti a girovagare per la rete per ore, e non sempre il software che scarichiamo è pulito e pronto al funzionamento, molte volte senza saperlo ci si becca anche qualche bel trojan o rootkit.

    Il Reset Glitch Hack sta permettendo invece la creazione di applicazioni, come per esempio gli emulatori, che vengono costantemente aggiornate dagli sviluppatori e hanno raggiunto una notevole stabilità.

    Sapevate che è possibile far diventare la Xbox 360 un vero e proprio computer, con a bordo Linux? E sto parlando della distribuzione Ubuntu o Debian all'ultima versione, non qualche sistema operativo a riga di comando. Voi direte, ma io Linux non lo so usare. Ormai Linux ha eguagliato Windows sull'aspetto "User Friendly" e non è necessario essere degli smanettoni per utilizzarlo. Magari affronteremo anche quest'argomento in un altro tutorial.

    Okay. Passiamo alla parte pratica.

    Requisiti:

    Oltre al requisito della console abbiamo bisogno di avere:

    - Un sistema operativo Linux. Ubuntu o Debian vanno benissimo allo scopo.
    Il mio consiglio è quello di utilizzare una macchina virtuale. Se non sapete come fare, coprirò questo argomento in un altro tutorial, mostrandovi come fare utilizzando del software libero disponibile per Windows.
    Se siete utenti MAC potete utilizzare Parallel per creare il vostro ambiente virtuale.

    Se non volete utilizzare ambienti virtuali e utilizzate Windows, sarà necessario scaricare e installare Cygwin. Tutti questi procedimenti sono però più complicati del metodo con ambiente virtuale e meno adatti a chi si avvicina per le prime volte a questo mondo, per cui per ora tratterò solo di questo metodo.

    Personalmente la piattaforma che utilizzo io è la distribuzione Debian. In ogni caso per quello che dobbiamo fare le differenze fra distribuzioni non ci riguardano.

    Eseguiamo il Login nella macchina e apriamo il Terminale. Gli utenti Windows devono vedere il Terminale come se fosse il Prompt di MS-DOS.

    Ciò che dovete verificare prima di iniziare è che il vostro utente abbia i permessi di SUDO, cioè di poter eseguire un comando in qualità di superutente. Per gli utenti Windows, il superutente è l'utente Administrator, per gli utenti Linux il superutente è l'utente root.

    Le operazioni come Superutente danno accesso al Filesystem, quindi utilizzatele con attenzione se volete sperimentare qualcosa non trattato in questa guida. Normalmente, invece, con i normali diritti utente si ha controllo soltanto sulla propria cartella Home.

    Da terminale digitiamo:

    Codice:
    sudo su
    Codice:
    id nomeutente
    Sostituite "nomeutente" con il nome che desiderate dare al vostro utente.

    Ci viene restituita la lista di gruppi al quale appartiene il nostro utente.

    Se volte creare un nuovo utente con il quale lavorare, da terminale digitate:

    Codice:
    adduser nomeutente
    Vi verrà chiesto di inserire una password per l'utente e confermarla.

    Torniamo al comando precedente il comando id. Ah, è necessaria una precisazione: In Linux, i comandi così come ogni altra cosa, dai nomi file ai nomi delle cartelle, alle password e tutto il resto è CASE-SENSITIVE. Vale a dire che "ID" è diverso da "id" e da "Id" e da "iD". Se digitate un comando nella sua corretta forma semantica, se ciò che avete digitato è maiuscolo ma andava scritto in minuscolo vi sarà restituito un errore perciò ricordatevi di questa cosa.

    Questo è l'output per l'utente xbox appena creato:

    Codice:
    uid=1001(xbox) gid=1001(xbox) gruppi=1001(xbox)
    Adesso dobbiamo dargli i diritti amministrativi e i diritti di sudo.

    Codice:
    usermod -G adm,sudo xbox
    Questo è il nuovo output dando il comando id:

    Codice:
    uid=1001(xbox) gid=1001(xbox) gruppi=1001(xbox),4(adm),27(sudo)
    Il nostro utente adesso è amministratore del sistema e ha i diritti per eseguire comandi come superutente.

    Sempre da riga di comando digitiamo:

    Codice:
    sudo su
    Adesso bisogna copiare il codice sorgente della libreria LibXenon e compilare la Toolchain. Ma per poterlo fare abbiamo bisogno di installare alcuni pacchetti nel nostro Sistema Operativo.
    Per farlo usiamo il comando "apt-get install". "apt-get" è il comando usato per installare pacchetti (software) in un sistema operativo Unix-like.

    Codice:
    apt-get install libgmp3-dev libmpfr-dev libmpc-dev texinfo git-core gettext build-essential subversion
    Confermiamo l'installazione quando ci verrà chiesto, qualche secondo più tardi.

    Installate le necessarie dipendenze, utilizziamo il comando "git" per accedere al repository git di LibXenon e scaricare il codice sorgente.
    Esiste un unico repository ufficiale per la libreria LibXenon, ed è quella del Free60 Project. Gli sviluppatori che vogliono apportare modifiche possono farlo derivando il proprio codice da quello ufficiale. Scaricato il codice sorgente, andrà compilata la Toolchain e Libxenon.

    Codice:
    git clone https://github.com/Free60Project/libxenon
    Codice:
    cd libxenon/toolchain
    Codice:
    ./build-xenon-toolchain toolchain
    Il processo di building della Toolchain impiegherà un pò di tempo. I pacchetti fondamentali che saranno scaricati saranno: Binutils, Newlib e Gcc.

    ***Fate sempre attenzione ai messaggi restituiti dal processo di installazione.Se qualcosa va storto lo capite da lì.***

    I messaggi che dovrete ricevere in questo processo sono:

    "Extracting" - "Configuring" e "Building", per tutti i pacchetti che vi ho menzionato.

    Ma GCC, pacchetto indispensabile, ha bisogno di eseguire il build due volte, quindi dovrete leggere:

    "Building GCC - 2nd pass. This could take a while".

    Se questo passaggio non avviene, c'è qualche problema e va risolto a monte.

    Terminata la procedura di building della Toolchain dobbiamo aggiungere delle variabili di sistema al nostro file d'avvio. Il file d'avvio di Linux è .bashrc.

    Di questo verrà comunque dato avviso al termine del processo di compilazione.

    Codice:
    gedit ~/.bashrc
    E all'interno del file, dopo l'ultima riga inseriamo le seguenti variabili

    Codice:
    export DEVKITXENON="/usr/local/xenon"
    export PATH="$PATH:$DEVKITXENON/bin:$DEVKITXENON/usr/bin"
    ***Metodo alternativo***

    Dalla vostra home:

    Codice:
    cd /etc/profile.d
    Create un nuovo file con estensione .sh. Ad esempio devkitxenon.sh

    All'interno, inserite le variabili

    Codice:
    export DEVKITXENON="/usr/local/xenon"
    export PATH="$PATH:$DEVKITXENON/bin:$DEVKITXENON/usr/bin"
    salvate e chiudete il file.

    Da prompt dei comandi:

    Codice:
    chmod +x nomefile.sh
    Riavviate. Adesso la vostra libreria LibXenon è accessibile anche senza dare i permessi di root al momento della compilazione di un'applicazione.


    La Toolchain e LibXenon sono compilati.

    Abbiamo terminato la prima fase. Il codice base è pronto.

    Ora, per poter compilare con successo il software homebrew per la Xbox 360 abbiamo bisogno di installare alcuni pacchetti aggiuntivi. Questi pacchetti però non possono essere installati normalmente con "apt-get install", perchè questi pacchetti non solo vanno installati e configurati per LibXenon, ma cosa più importante, per l'architettura della Xbox360.

    La CPU della Xbox360 è una CPU IBM PowerPC.

    Normalmente il processo di installazione sarebbe leggermente complesso, perchè consiste nel caricare le variabili necessarie ad utilizzare LibXenon per l'installazione dei pacchetti ed in seguito specificare da riga di comando che si deve utilizzare per la compilazione il gcc++ per LibXenon.

    Ma l'installazione di questi pacchetti è stata adesso inclusa nel codice sorgente della libreria LibXenon, quindi installarli sarà semplicissimo.
    Allora: Questa è la "lista della spesa" per la seconda fase.

    1. Zlib

    2. Libpng

    3. Freetype

    4. Bzip2

    5. Zlx

    6. Bin2s.


    Rimanendo nella cartella toolchain digitate:

    Codice:
    ./build-xenon-toolchain libs
    Adesso procuriamoci Zlx.

    Zlx è una libreria molto utile e potente che serve per implementare alcune funzioni di browsing e ricerca. Infatti, già scaricando il codice dal sito e compilandolo, ci ritroveremo un file che farà da browser per tutti gli homebrew. Una dashboard che permette di eseguire diverse operazioni, come lanciare il server HTTP, fare il dump della nand, riavviare Xell...

    Sempre dalla cartella home del nostro utente lanciamo:

    Codice:
    svn checkout http://zlx.googlecode.com/svn/trunk/
    Questo comando estrae la versione più aggiornata della Zlx in una cartella "trunk" nella nostra home.

    Al termine del download apparirà il messaggio "Estratta revisione X (a seconda della revisione, es. 9)".

    Quindi:

    Codice:
    cd trunk
    make -f Makefile_lib
    make -f Makefile_lib install
    Bene. Anche la seconda fase è terminata. Complimenti! Avete finito. La vostra piattaforma è pronta.

    E adesso, direte voi?

    Vi spiego come funziona.

    Gli sviluppatori per homebrew per Xbox360 utilizzano lo stesso repository che viene usato per LibXenon, Github.

    Ciò che dovete imparare ad usare è il comando git, utilizzato già prima. Serve a prelevare una copia della versione presente nel repository per poterla poi compilare, ma anche per scaricare gli update al codice sorgente, tornare indietro se un update rivela dare problemi eccetera.

    Inoltre dove imparare ad usare il comando "make". Make è il comando che serve per compilare il codice sorgente e restituire un unico file eseguibile.

    Attualmente ci sono diversi progetti in cantiere da parte degli sviluppatori LibXenon, e quasi tutti non li trovate per la versione XeX.

    Ve ne cito alcuni:

    Mupen64-360: Un emulatore Nintendo 64 per Xbox360, dal creatore del RGH. Praticamente perfetto, tutti i giochi da me testati funzionano benissimo. Implementa il dynarec per una ricompilazione dinamica delle ROM e un framerate sempre sui 50/60 FPS.

    PCSXR-Xenon: Un emulatore di Playstation 1 per Xbox 360. Già funzionante ma ancora in corso d'opera, testato con Final Fantasy 8 e 9, funzionano alla perfezione. Dal developer e amico Ced2911.

    FCEUX-Xenon: Emulatore di giochi per Nintendo. Anche lui portato sulla Xbox 360 da Ced2911.

    Genesis Plus Xenon: Emulatore di giochi per Sega Genesis Plus, di Ced2911.

    Mame-lx: Questo, uno dei più interessanti. Già funzionante, ma ancora in corso d'opera, sempre a cura di Ced2911, è l'emulatore per Mame per Xbox360!!!
    Aggiornato alla versione 144u7! Da provare assolutamente. Perchè giocare Street Fighter 2 sulla Xbox non ha prezzo ^_^.

    XeLL: A cura di tuxuser, è il famoso bootloader per Xbox 360 che mostra la CPU Key e la DVD Key. Dovete sapere che viene continuamente aggiornato con nuove caratteristiche e miglioramenti, quindi avere sempre l'ultima versione aiuta sempre molto! Attenzione, se volete le versioni beta, prima di poterle compilare avete bisogno della libreria "LibXenon-testing".


    Quindi...mettiamo per esempio che volete compilare il Mame.

    Navigate sulla pagina dello sviluppatore. In questo caso: [url]https://github.com/Ced2911[/url]. Cercate il progetto Mame. In questo caso il link è:

    [url]https://github.com/Ced2911/mame-lx[/url]

    Dalla vostra home:

    Codice:
    git clone https://github.com/Ced2911/mame-lx
    Verrà creata la cartella "mame-lx". Entratevi e digitate semplicemente:
    Codice:
    make
    ***Attenzione***. Nel caso del mame, all'interno della cartella btools ci sono degli eseguibili, fondamentali per la compilazione. A loro va dato il privilegio di esecuzione come programma. Per cui digitiamo:

    Codice:
    chmod -R 755 btools
    Non è necessario specificare che si fa un CROSS_COMPILE per una piattaforma Xenon. Tutto accadrà automaticamente.

    Se avete un processore multicore potete velocizzare la compilazione, abbastanza lunga nel caso del Mame, in questo modo:

    Dovete aggiungere l'opzione "-jX" dove "X" è uguale al numero di core che avete (o avete assegnato alla macchina virtuale) + 1.
    Quindi, in caso di un processore a 4 core:

    Codice:
    make -j5
    Al termine, nella cartella del mame troverete un file chiamato "mamexenonXX.elf32". "XX" può essere 32 o 64 bit a seconda del vostro Sistema Operativo.

    E' presente anche un file chiamato "mamexenonXX.elf". Non va utilizzato.

    XeLL è capace di riconoscere, per quello che ci serve, i file denominati cosi: "xenon.elf"; "vmlinux". Ci sono anche altre nomenclature ma non ci servono allo scopo.

    Prendete quindi il file "mamexenonXX.elf32" e rinominatelo "xenon.elf".

    Da riga di comando è:

    Codice:
    mv mamexenonXX.elf32 xenon.elf
    Se vi prendete un attimo, però, e andate nella cartella compilata della libreria ZLX, troverete il file zlxbrowser.elf32.

    Questo è il menu per LibXenon.

    Quindi, prendete una chiavetta USB. Formattatela in FAT32. Copiate all'interno della chiavetta il file "xenon.elf". Se avete il browser zlx, potete rinominare questo in "xenon.elf" e rinominare il mame in "mame.elf". Da browser poi potrete navigare sul file e scegliere di eseguirlo. Create poi una cartella "roms" dove inserirete le vostre rom (di giochi legalmente posseduti).

    Avere il browser è molto comodo, perchè magari una volta compilati gli altri homebrew potete tenerli tutti insieme con le loro rom nello stesso HDD esterno o chiavetta USB.

    Testate e gioite ^_^.

    Questi sono alcuni dei repository git più importanti:

    [URL="https://github.com/Cancerous"]https://github.com/Cancerous[/URL]
    [URL="https://github.com/gligli"]https://github.com/gligli[/URL]
    [URL="https://github.com/lantus"]https://github.com/lantus[/URL]
    [URL="https://github.com/tuxuser"]https://github.com/tuxuser[/URL]


    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^

    Altri comandi git che avete bisogno di imparare sono:

    "git pull" e "git revert"

    git pull: Serve per applicare gli aggiornamenti al codice sorgente. Mettiamo ad esempio che abbiamo scaricato il codice sorgente del mame un mese fa e vogliamo testare il codice che è stato migliorato dal developer.

    Dalla cartella dell'homebrew, mame-lx in questo caso:

    Codice:
    git pull https://github.com/Ced2911/mame-lx master
    "master" è il cosidetto branch del codice sorgente. Quando lo sviluppatore applica gli aggiornamenti, lo fa su un branch. E bisogna specificarlo quando si chiede di applicare un aggiornamento.

    Git Revert lo spiegherò più avanti per non mettere troppa roba nel pentolone e seguire un filo unico.

    Adesso che avete scaricato gli aggiornamenti, vorrete fare una compilazione pulita.

    Quindi, sempre dalla cartella del mame:

    Codice:
    make clean
    Questo ripulisce la cartella dai file compilati, nonchè dal pointer della compilazione.

    E poi di nuovo "make".

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^

    Bene, io penso di aver finito, per ora. Spero di aver fatto cosa gradita e che vi cimenterete in questa avventura.

    Sicuramente ne avrete molte soddisfazioni, a me ne da molte perchè è come creare qualcosa da soli e c'è una
    soddisfazione in più nel farla funzionare.

    Con le indicazioni che vi ho dato non dovreste incontrare problemi, ma le vie del Signore sono infinite quindi, se doveste
    incontrare dei problemi nella compilazione, postatelo qui e vi aiuterò a risolverli.

    Alla prossima.

    Ethereal
    Ultima modifica di Ethereal; 15-02-12 alle 22: 58
    Raiden, carloss, angelo and 12 others like this.

  2. #2
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231
    Fra un'oretta farò seguito a questa guida con la procedura dettagliata per la creazione di una macchina virtuale con Vmware, VirtualPC e Parallel per MAC.

    Darò tempo agli utenti di capire questi nuovi ambienti e procedure, dopodichè, se vorrete, procederò alla stesura di una guida per installare Linux sulla Xbox360.

    Distribuzione Debian Squeeze o Ubuntu Oneiric Ocelot.

    Inoltre, giusto così per impressionare gli amici, potremo vedere l'installazione di Windows 3.11 e Windows 95.

    A fra poco.

  3. #3
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231
    Citazione Originariamente Scritto da carloss Visualizza Messaggio
    Ottima guida ma non ho capito una cosa. Hai detto che usi una macchina virtuale o che comunque le librerie si possono installare su pc linux o window... ma non serve un cross compiler?
    ^_^ Non ho detto che non serve un cross compiler, piuttosto che non avremo bisogno di specificarlo per la compilazione.

    Probabilmente è prematuro parlare di queste cose, spero che non "spaventino" i nuovi utenti che inizierebbero a pensare che è troppo difficile e quindi getterebbero la spugna.

    Comunque...

    Innanzitutto: CROSS COMPILE è la procedura per la quale si procede alla compilazione di un codice sorgente per un'architettura diversa da quella della CPU sul quale lanciamo la compilazione.

    I meno esperti non devono pensare che queste procedure vengono utilizzate solo per i possessori di S.O. linux. Tutti i software, siano essi per Windows, MAC, Linux, Android, iOS, Solaris, Unix-Like (FreeBSD, NetBSD, Fedora, Red Hat), SPARC, eccetera, TUTTI, devono seguire un processo che è quello della creazione del codice sorgente e la sua successiva compilazione.
    Ciò che cambia sono gli strumenti con i quali si compila.

    In ogni codice sorgente open source, per poterlo convertire in un file eseguibile e renderlo comprensibile al S.O. è presente un file chiamato "Makefile" o "makefile".

    Il Makefile contiene tutte le istruzioni necessarie alla compilazione. I makefile forniti dagli sviluppatori LibXenon, data l'eccezione che dev'essere fatta per la compilazione per il processore Xenon, contengono le istruzioni necessarie al cross compiling (se necessario) al loro interno.

    Ho detto "se necessario" perchè se avete un PC con architettura PowerPC non avrete bisogno di cross-compilare. Come si fa allora?

    Nessun problema. Il Makefile al momento della compilazione controlla se vi è questa eventualità.

    Il Makefile per essere eseguito ha bisogno del pacchetto make, ma non dovete preoccuparvi di questo perchè di norma è già contenuto in Linux quando viene installato.

    L'unica eccezione a questo, cioè quando dev'essere specificato nel make che si sta compilando per un architettura differente è nella compilazione del kernel Linux per Xbox 360. Ma è qualcosa che affronteremo abbastanza più avanti.

  4. #4
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231
    Per il resto...Immagino vogliate essere un pò invogliati nel lavoro che vi ho proposto nel tutorial. Così...questo è un esempio di ciò che potrete avere alla fine.
    Scusate per la qualità del video, è fatto rapidamente e in bassa qualità per non caricare troppo l'upload. Comunque vi mostro l'avvio del browser ZLX, Genesis Plus e Mame compilati da me. Il Mame, soprattutto, sappiate che quello che vi compilerete da soli sarà la vostra versione, perchè non ne esiste una versione pubblica scaricabile.


  5. #5
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231
    In sostanza il mio problema e quello di aggiornare ffplay se non e possibile farlo come descritto in questa guida come posso farlo???
    Questa guida tratta della compilazione degli Homebrew con LibXenon. Quindi no, non puoi farlo usando come riferimento questa guida. Per ora ci sono già dei tutorial in sospeso e preferisco terminare prima quelli. Se avrò tempo ti manderò un pm con le istruzioni di compilazione.

    Ora, terminate le spiegazioni, vorrei essere chiaro.

    NON OFFRO SUPPORTO, PER QUANTO RIGUARDA QUESTO TUTORIAL, SU ALTRI ARGOMENTI CHE NON SIANO QUELLI TRATTATI ^_^

    Altrimenti diventa un minestrone.
    MARCHISIO80 likes this.

  6. #6
    Homebrew Developer
    Data Registrazione
    Feb 2012
    Località
    Roma
    Messaggi
    231
    Grazie Pa0l0ne.

    A beneficio degli altri utenti:

    La modifica al codice interessa ciò che il software deve intendere come percorso delle rom. Il developer, Gligli, non avendo rilasciato ancora nessuna versione pubblica dell'emulatore (e non credo che lo farà per un pò di tempo), utilizzava come percorso "sda". Qui viene invece descritta come root del percorso "uda".

    Cosa sono? In Linux ogni dispositivo ha una nomenclatura per consentire l'indirizzamento delle operazioni di I/O.

    Nel nostro caso:

    - sd(a): Sono i dispositivi SATA

    - hd(a): Sono i dispositivi IDE

    - ud(a): Sono i dispositivi USB

    Perchè ho messo la "a" fra parentesi? Perchè a seconda del numero di dispositivi della stessa classe presente quella lettera cambia.


    Quindi, due HDD sata saranno: "sda" ed "sdb".

    E se ci sono due partizioni nello stesso HDD sata?

    In questo caso ogni partizione sarà contrassegnata da un numero. E avremo: "sda1", "sda2".

    La modifica al codice sorgente dice al programma di cercare le ROM nei dispositivi USB.

    Una piccola modifica. Nel file .cfg che è stato postato: Provate a modificare

    Dynarec.Enabled=0 con Dynarec.Enabled=1

    Ok. Changelog del Tutorial.

    Guida modificata. Rimosse ed aggiornate le procedure per l'installazione delle librerie. Adesso è possibile lanciare un solo comando per installare
    Zlib - Libpng - Bzip2 - Bin2s e Freetype.

    Aggiunta una descrizione aggiuntiva sul processo di compilazione della libreria LibXenon.
    Ultima modifica di Ethereal; 12-02-12 alle 15: 59

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  

realizzazione siti internet ed e-commerce mugello