Guida alla compilazione di aMule AdunanzA su Raspberry PI

raspberry
amule_adunanza

#1

aMule AdunanzA può essere installato su i dispositivi del progetto Raspberry PI basato su processori ARM.


Prerequisiti

Per utilizzare aMule AdunanzA sul Raspberry PI non ci sono complesse operazioni preliminari da seguire, a patto di aver eseguito un’installazione regolare di una delle distribuzioni Debian-based (Raspbian, XBian, RaspBMC ecc)

Da notare che, sebbene non sia necessario, è fortemente consigliato l’utilizzo di un hard-disk esterno per conservare perlomeno le cartelle Incoming e Temp.
Questa accortezza è rivolta a preservare la SD da usura precoce, non essendo progettata per un elevato numero di letture e scritture.
In tal caso è consigliato formattare il disco con un file system nativo di linux, ext3 o ext4, l’utilizzo di altri file system (tipo NTFS) possono portare ad un impegno eccessivo della CPU durante le continue operazioni di lettura e scrittura.
Ovviamente vista la modesta CPU del raspberry si userà amuled, ovvero il demone di amule, e lo si controllerà da remoto con un PC con la GUI remota.


Premessa

Attualmente la versione stabile di aMule AdunanzA è la 2012.1 basata su Amule ufficiale 2.3.1
mentre in beta c’è la versione 2015.1 rev 546
Quale versione usare? io vi consiglio di provare prima la stable e, in seguito, se non avete avuto problemi, provare a compilare la beta.


Installazione e compilazione##

Tutte i comandi seguenti devono essere eseguiti da shell (linea di comando)

aggiorniamo il sistema

$ sudo apt-get update && sudo apt-get upgrade

.
Installiamo le dipendenze necessarie alla compilazione:

$ sudo apt-get install build-essential subversion-tools cvs autogen automake1.10 libgtk2.0-dev zlib1g-dev libpng12-dev libgd2-xpm-dev libcrypto+±dev libgeoip-dev libglib2.0-dev libwxgtk2.8-dev flex bison gettext binutils-dev autopoint libupnp6-dev libupnp6

.

A questo punto è necessario scaricare la versione di Amule desiderata, qui trovate la versione stabile e qua la beta

quindi se volessimo compilare l’ultima beta dal repository svn, posizioniamoci in una directory dove scaricheremo i sorgenti e diamo il comando:

$ svn co http://svn.code.sf.net/p/amule-adunanza/code/branches/MoonRiver/ amule-adunanza

(quel numero che vedete dopo River/ non fa parte del comando ma è il numero di click, nn prendetelo in considerazione nel copia/incolla)

dopo aver scaricato i nostri sorgenti lanciamo l’autogen

$ cd amule-adunanza
$ ./autogen.sh

.

ed infine lanciamo il nostro configure

$ ./configure --enable-optimize –disable-debug –enable-amule-daemon –disable-geoip –disable-amulecmd –disable-webserver –disable-amule-gui –disable-monolithic –disable-ed2k

ora basta dare soltanto un make per iniziare la compilazione
.

$ make

Se non abbiamo commesso errori dopo circa 60/80 minuti la compilazione terminerà e non resta che lanciare l’ultimo comando per installare amuled nella directory giusta

$ sudo make install

che copierà il nostro demone, amuled, in /usr/local/bin/
ora non resta che lanciare e configurare il nostro amuled, ma non è lo scopo di questa guida!

Buona condivisione


Extra info

Quelle che seguono sono informazioni aggiuntive che spiegano le opzioni passate al configure.

Diamo un’occhiata alle opzioni principali che abbiamo dato al configure
–enable-optimize ottimizzazione per la nostra CPU
–disable-debug si disabilitano le opzioni per il debug, ovvero le info per gli sviluppatori
–enable-amule-daemon si compila il demone di amule: amuled
–disable-geoip si disabilitano le bandierine nazionali di amule (non useremo amule quindi non servono)
–disable-amulecmd –disable-webserver –disable-amule-gui –disable-monolithic –disable-ed2k: non compiliamo amulecmd, il webserver, la GUI, amule e ed2k

Con le ultime versioni beta di amule è possibile compilarlo aggiungendo anche le librerie Boost C++, attualmente alla versione 1.59
Se avete installato boost in /home/pi/boost_1_59_0 basta aggiungere al configure questo ulteriore parametro:

–with-boost=/home/pi/boost_1_59_0/



Installare Adunanza su Raspberry Pi 3 con Debian Jessie
Amule su Raspberry e binutils
aMuled: cartelle condivise e webserver
Guida: Amule AdunanzA su Banana PI/PRO Debian Wheezy
Amule Adunanza su NAS Buffalo LS-VL
Amule Adunanza sul Banana PI
aMuleAdunanza su raspberryPi 1 revB+ (lowID e Firewalled)
Adunanza per raspberry
Help amule daemon buffer overflow crash
Adunanza Demone, Openmediavault
Adunanza Demone, Openmediavault
*** buffer overflow detected ***: amuled terminated
Prima connessione a kad
Link Amule Adunanza mancante
Problema: Amule(d) Adunanza e Ubuntu server 14.04
Raspberry e amule adunanza configurazione
#2

ciao coge,se io volessi provare su LMDE 64 bit update pack 8 e su linux mint 17 32 bit mate edition queste istruzioni vanno bene ed installerei amule adunanza completo ? :smile:


#3

si e no
si: le istruzioni funzionano sicuramente su debian, non so su altre distribuzioni

no: le istruzioni ti fanno compilare il solo amuled, se vuoi compilare amule e amuleGUI devi modificare il configure abilitandoli, modificando i

–disable-amule-gui –disable-monolithic

in

–enable-amule-gui –enable-monolithic


#4

grazie coge,LMDE è direttamente derivata da debian quindi li dovrebbe funzionare,ti farò sapere,ciao :smile:


#5

grazie coge,su LMDE 32 bit sono riuscito a compilare aMule AdunanzA 2014.1b1 Snapshot:
rev. 525
sembra che funzioni bene …ma ho dovuto modificare anche altre cosette oltre a questo che dava errore svn co http://svn.code.sf.net/p/amule-adunanza/code/branches/MoonRiver/2 amule-adunanza perchè c’è un 2 di troppo poi proverò su linux mint 17,ciao :slight_smile:


#6

cmq è il numero dopo (moonriver) ed inoltre ho modificato quanto segue :

$ ./configure --enable-optimize --disable-debug --enable-amule-daemon --enable-geoip --enable-amulecmd --disable-webserver --enable-amule-gui --disable-upnp --enable-monolithic --enable-ed2k
ho creato una cartella (mulo) dentro la mia home ed ho fatto tutto li dentro ciao


#7

Ciao, assumendo trattarsi di una situazione con raspbian su raspberrypi headless, per passare dalla stabile alla beta, occorre rimuovere prima la stabile o è possibile compilare la beta che si sostituisce e sovrascrive alla stabile etc?
Si perdono i crediti e la configurazione etc?
L’opzione enable-amule-gui è necessaria per consentire il collegamento da un altro dispositivo tramite gui al demone o ha un altro significato?
L’opzione enable-amulecmd è necessaria per consentire il corretto shutdown del demone con amulecmd?
Giacchè la prima volta che ho compilato ha impiegato tre ore, e la seconda due,
quali sono le opzioni migliori per compilare il demone e gestirlo tramite gui da un altro dispositivo?
Grazie


#8

tra una beta e l’altra, io ho sempre sovrascritto, ma credo valga anche nel passaggio dalla stabile alla beta, ovviamente se parliamo sempre di amule adunanza e non amule vanilla

se nn cancelli la directory .aMuleAdunanzA, no

esattamente l’opposto, informa il compilatore di compilarti la GUI che userai per comandare il demone, ma non è questo il nostro caso visto che useremo un PC e non il raspberry stesso per comandare il demone, quindi va messo -disable-amule-gui

non lo sò, non ho mai usato amulecmd, io per comandare il demone uso uno script (devo sempre fare una guida)

piu di due ore per compilare sono molte, io ho leggermente overcloccato il rasp e impiego poco piu di un’ora. Le opzioni per un uso come da te richiesto sono quelle nel primo post, che ti ripeto:

./configure --enable-optimize –disable-debug –enable-amule-daemon –disable-geoip –disable-amulecmd –disable-webserver –disable-amule-gui –disable-upnp –disable-monolithic –disable-ed2k

comunque se vuoi puoi scaricare il solo amuled già compilato da me lo trovi qua:
https://drive.google.com/open?id=0B3WsG6CF7-wCZXdjVGVnS2ZzaTg&authuser=0

spostalo in /usr/local/bin/ rinominalo in amuled e poi dagli i giusti permessi (755)


#9

Ciao a tutti!
Grazie @CoGe per la guida, stavo impazzendo nella ricerca dei pacchetti necessari alla compilazione.

Però ho un problema con la mia configurazione:
./configure --enable-optimize --disable-monolithic --disable-ed2k --disable-debug --disable-upnp --enable-amulecmd --enable-webserver --disable-amule-gui --enable-amule-daemon --disable-geoip

e sinceramente non so se sia dovuto ad un bug oppure ad una mia carenza.
La stable 2012.1 compila correttamente, mentre la MoonRiver restituisce questo errore al make:

ExternalConnector.cpp: In constructor ‘CaMuleExternalConnector::CaMuleExternalConnector()’:

ExternalConnector.cpp:210:4: error: class ‘CaMuleExternalConnector’ does not have any field named ‘m_InputLine’

Makefile:3337: set di istruzioni per l'obiettivo "amulecmd-ExternalConnector.o" non riuscito

Il comando su cui si ingalia è questo:
g++ -DHAVE_CONFIG_H -I. -I.. -DUSE_WX_EXTENSIONS -I/usr/lib/arm-linux-gnueabihf/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -DwxUSE_GUI=0 -I./libs -Ilibs -I./include -I/usr/include -D__WEAK_CRYPTO__ -W -Wall -Wshadow -Wundef -O2 -pthread -MT amulecmd-ExternalConnector.o -MD -MP -MF .deps/amulecmd-ExternalConnector.Tpo -c -o amulecmd-ExternalConnector.otest -f ‘ExternalConnector.cpp’ || echo ‘./’ExternalConnector.cpp

Per il momento mi accontento della stable ma è sempre una segnalazione. :smiley:


#10

Io non compilo amulecmd e il webserver, e uso anche le librerie boost
quindi nn sono nella tua stessa situazione (hai raspbian giusto?)

prova a disabilitarli nel tuo configure e riprova,
quando poi passa di qua @mr_hyde potrebbe darci qualche info in più sull’errore

anche se credo che l’errore sia proprio su amulecmd, domani se ho tempo faccio qualche prova di compilazione


#11

confermo l’errore (uguale al tuo) in fase di compilazione del solo amulecmd

ho provato ad compilare sia con che senza le librerie boost (1.57.0) l’errore non cambia:

g++ -DHAVE_CONFIG_H -I. -I… -DUSE_WX_EXTENSIONS -I/usr/lib/arm-linux-gnueabihf/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -DwxUSE_GUI=0 -I./libs -Ilibs -I./include -W -Wall -Wshadow -Wundef -O2 -pthread -MT amulecmd-ExternalConnector.o -MD -MP -MF .deps/amulecmd-ExternalConnector.Tpo -c -o amulecmd-ExternalConnector.o test -f 'ExternalConnector.cpp' || echo './'ExternalConnector.cpp
ExternalConnector.cpp: In constructor ‘CaMuleExternalConnector::CaMuleExternalConnector()’:
ExternalConnector.cpp:210:4: error: class ‘CaMuleExternalConnector’ does not have any field named 'm_InputLine’
Makefile:3427: recipe for target ‘amulecmd-ExternalConnector.o’ failed

occorre il nostro dev di fiducia :slight_smile:
toc toc @mr_hyde


#12

No, serve solo a dire alla procedura di build (invocata con “make”) che occorre anche compilare per produrre l’eseguibile “amulecmd” che è quello che ti serve per “pilotare” il demone da linea di comando (insomma: un analogo di “–enable-amule-gui” ma per l’interfaccia testuale invece che grafica).

Per la MoonRiver: io la sto compilando praticamente su tutto (per ora non mi sono ancora cimentato con Windows) con amulecmd abilitato e non ho avuto problemi.

Appena ho due minuti di tempo da dedicare ad aMule guardo che cosa ha di speciale m_InputLine e poi vi faccio sapere.

Probabilmente non ha alcuna rilevanza ma rinfrescatemi comunque la memoria (me lo avrete già scritto un miliardo di volte all’incirca): mi scrivete la versione di compilatore gcc/g++ usata dai vostri Raspberry?

Ciao,
Mr Hyde (che sta combattendo con il cugino per Windows… inizio proprio ad odiarlo…)


#13

pi@raspberrypi ~ $ gcc --version
gcc (Debian 4.6.3-14+rpi1) 4.6.3
Copyright © 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


#14
#ifdef HAVE_LIBREADLINE
// ADUNANZA END
	char *		m_InputLine;
// ADUNANZA BEGIN
// Allineamento aMule SVN 2.4.0 rev 10854
#endif

Problema di dipendenze: immagino vi manchi una libreria per la “readline” o che lo script di configure non riesca a capire che la avete.

Nell’output di configure controllate scritte del tipo

checking for a readline compatible library... -lreadline
checking readline.h usability... no
checking readline.h presence... no
checking for readline.h... no
checking readline/readline.h usability... yes
checking readline/readline.h presence... yes
checking for readline/readline.h... yes
checking whether readline supports history... yes
checking history.h usability... no
checking history.h presence... no
checking for history.h... no
checking readline/history.h usability... yes
checking readline/history.h presence... yes
checking for readline/history.h... yes

Ad ogni modo vedo di mettere sotto la stessa “#ifdef HAVE_LIBREADLINE” anche l’utlizzo di quella variabile in modo da rendere possibile la compilazione anche quando non avete quella libreria.

EDIT: appena fatta la commit, provate


#15

c’è qualcosa che nn và

il configure mi da errore se uso le librerie boost (nn si possono usare in test)
e il make nn inizia nemmeno a compilare, esce praticamente subito e senza errore come se nn avessi messo nessun enable


#16

@CoGe

Mumble mumble… In teoria io ho modificato solo un file .cpp, quindi il configure non dovrebbe risentirne…

EDIT: per scrupolo ho provato a ri-compilare con il Mac e a me funziona… Non che la cosa abbia molto significato visto che a me funzionava anche prima…

Hai provato a ri-fare tutta la trafila con

make distclean
svn update
bash autogen.sh
configure …
make ?

Ciao,
Mr Hyde

P.S.: la mia lotta con il “cugino per Windows” prosegue… Non funzionerà niente, ma almeno adesso non mi funzionerà niente a 64 bit! E pure in debug, tie’ :wink:

P.P.S.: lo so che sembro fuori di testa ma… E’ che lo sono proprio dopo N giorni trascorsi a combattere con il mulo Windows…


#17

ricompilo con calma e poi riscrivo

 ./configure --enable-optimize --disable-debug --enable-amule-daemon --disable-alc --disable-alcc --disable-geoip --enable-amulecmd --disable-webserver --disable-amule-gui --disable-cas --disable-wxcas --disable-xas --disable-upnp --disable-monolithic --disable-ed2k --with-boost=/media/MediaForLinux/boost_1_57_0/

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... armv6l-unknown-linux-gnueabihf
checking host system type... armv6l-unknown-linux-gnueabihf
checking if this is a FreeBSD 4 or earlier system... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking how to run the C++ preprocessor... g++ -E
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for gawk... (cached) mawk
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking whether make sets $(MAKE)... (cached) yes
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
checking for ranlib... ranlib
checking for a sed that does not truncate output... /bin/sed
checking for bison... bison -y
checking for ranlib... (cached) ranlib
checking for strip... strip
checking for ar... ar
checking for ld... ld
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for working volatile... yes
checking for zlib >= 1.1.4... yes (version 1.2.7)
checking for File::Copy... ok
checking for the --with-toolkit option... will be automatically detected
checking for the --with-wxshared option... will be automatically detected
checking for the --with-wxdebug option... will be automatically detected
checking for the --with-wxversion option... will be automatically detected
checking for wx-config... /usr/bin/wx-config
checking for wxWidgets version >= 2.8.12 (--unicode=yes)... yes (version 2.8.12)
checking if wxWidgets was built in DEBUG mode... no
checking if wxWidgets was built in STATIC mode... no
checking which wxWidgets toolkit was selected... gtk2
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for crypto++ version >= 5.1... yes (version 5.6.1, installed)
checking whether the C++ compiler (g++) uses strict aliasing... no
checking that wxWidgets has support for large files... yes
checking for exception-handling... yes
checking typeinfo usability... yes
checking typeinfo presence... yes
checking for typeinfo... yes
checking for <cxxabi.h> and __cxa_demangle()... yes
checking for Boost headers version >= 1.47.0... /media/MediaForLinux/boost_1_57_0/
checking for Boost's header version... 1_57
checking for the toolset name used by Boost for g++... gcc46 -gcc
checking for Boost sources... no
checking boost/system/error_code.hpp usability... no
checking boost/system/error_code.hpp presence... no
checking for boost/system/error_code.hpp... no
checking for the Boost system library... configure: error: cannot compile a test that uses Boost system

#18

Continua la discussione da Guida alla compilazione di aMule AdunanzA su Raspberry PI:

Confermo passaggio dalla stabile alla beta e crediti e configurazione mantenuti.

Ho visto lo script tuttavia mi è capitato che il demone partisse prima dell’hd sul dock saturando la sd, per cui, al momento, lancio il demone a manina e ogni tanto lo chiudo con shutdown (amulecmd) per manutenzione, dato che nella gui non vedo la possibilità di terminarlo.

[quote]
piu di due ore per compilare sono molte, io ho leggermente overcloccato il rasp e impiego poco piu di un’ora. Le opzioni per un uso come da te richiesto sono quelle nel primo post, che ti ripeto[/quote]
Hai ragione: compilava troppo.
Con le opzioni da te indicate (e amulecmd), impiega poco più di un’oretta senza overclock.

Quindi, ricapitolando:
Initialising aMuleDAdunanzA MOD based on aMule SVN compiled with wxGTK2 v2.8.12 (Snapshot: rev. 532) AdunanzA 2014.1b1
su
Linux version 3.12.32+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #721 PREEMPT Fri Nov 7 16:50:31 GMT 2014
senza inghippo.

Ti ringrazio per il supporto tecnico e ringrazio gli sviluppatori per l’applicazione, e ovviamente, tutti quelli che danno il proprio contributo (e hanno contribuito) a questa comunità, sui forum, in chat, chi manda avanti la baracca etc


#19

Ehm, ho sbagliato: anzichè rispondere citando, ho risposto come argomento collegato, è possibile rimediare?


#20

Fatto -.-’’’’