boinc

Iniziamo una discussione su come portare BOINC 7.x su Fedora :slight_smile:

Sei riuscito a contattare il pacchettizzatore precedente?

Sono in contatto con lui da settimane. Dopo gli scrivo dicendo che c’è un gruppo di persone che gli vuole dare una mano. Però non aspettiamo che mi risponda perché potrebbero passare giorni

Ok

Allora, io ho provato a creare l’rpm.

mkdir -p ~/rpm-boinc-client
rm -rf ~/rpm-boinc-client/*
mkdir ~/rpm-boinc-client/6
mkdir ~/rpm-boinc-client/7
#abbiamo creato una cartella di lavoro che contiene a sua volta due cartelle dove inserire i sorgenti delle versioni 6 e 7

cd ~/rpm-boinc-client/6
yumdownloader --source boinc-client
rpm2cpio boinc-client*.rpm | cpio -ivd
rm -f ~/rpm-boinc-client/6/boinc-client*.rpm
sed -i 's/%{_unitdir}\/%{name}/%{_unitdir}\/%{name}.service/g' boinc-client.spec
sed -i 's/After=network.target graphical.target/After=network.target/g' boinc-client-systemd
#abbiamo inserito nella prima cartella i sorgenti della versione 6, patchati per correggere l'errore

cd ~/rpm-boinc-client/7
svn export http://boinc.berkeley.edu/svn/branches/boinc_core_release_7_0
#Esportata revisione 25826
pushd boinc_core_release_7_0
cp ../../6/trim .
./_autosetup
popd
tar -cJvf boinc-7.0.7.tar.xz boinc_core_release_7_0
rm -rf ~/rpm-boinc-client/7/boinc_core_release_7_0
#abbiamo creato il file boinc-7.0.7.tar.xz, come da istruzioni nel file spec della versione 6

A questo punto ho modificato il file boinc-client.spec in modo che le modifiche risultano le seguenti:

[marco@localhost ~]$ diff /home/marco/rpm-boinc-client/{6,7}/boinc-client.spec
1,2c1,2
< %global revision 25218
< %global version_ 6_12
---
> %global revision 25826
> %global version_ 7_0
6c6
< Version:	6.12.43
---
> Version:	7.0.7
15d14
< # patch < boinc-manager-Makefile.patch
26,28d24
< #Wrong indentation in Makefile.am breaks the build
< #Filed upstream: http://boinc.berkeley.edu/trac/ticket/1132
< Source9:	boinc-manager-Makefile.patch
[marco@localhost ~]$ 

Come potete vedere, oltre al cambio di versione ho solo rimosso i riferimenti alla patch boinc-manager-Makefile.patch, visto che le righe relative appaioni commentate (e quindi rimosse) nella versione 7.

Infine ho provato a creare l’rpm con

cd ~/rpmbuild/SOURCES
rpmbuild -v -bb boinc-client.spec

Solo che ottengo il seguente errore (riporto le ultime righe dell’output):

libtool: link: g++ -Wall -Wextra -Wshadow -Wredundant-decls -Wdisabled-optimization -Wpointer-arith -Wstrict-aliasing -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15 -Wall -Wl,-z -Wl,relro -o boinc_client boinc_client-acct_mgr.o boinc_client-acct_setup.o boinc_client-app.o boinc_client-app_control.o boinc_client-app_start.o boinc_client-check_state.o boinc_client-client_msgs.o boinc_client-client_state.o boinc_client-client_types.o boinc_client-coproc_detect.o boinc_client-cpu_sched.o boinc_client-cs_account.o boinc_client-cs_apps.o boinc_client-cs_benchmark.o boinc_client-cs_cmdline.o boinc_client-cs_files.o boinc_client-cs_notice.o boinc_client-cs_platforms.o boinc_client-cs_prefs.o boinc_client-cs_proxy.o boinc_client-cs_scheduler.o boinc_client-cs_statefile.o boinc_client-cs_trickle.o boinc_client-current_version.o boinc_client-dhrystone.o boinc_client-dhrystone2.o boinc_client-file_names.o boinc_client-file_xfer.o boinc_client-gui_http.o boinc_client-gui_rpc_server.o boinc_client-gui_rpc_server_ops.o boinc_client-hostinfo_network.o boinc_client-hostinfo_unix.o boinc_client-http_curl.o boinc_client-log_flags.o boinc_client-main.o boinc_client-net_stats.o boinc_client-pers_file_xfer.o boinc_client-rr_sim.o boinc_client-sandbox.o boinc_client-scheduler_op.o boinc_client-time_stats.o boinc_client-whetstone.o boinc_client-work_fetch.o  -L../lib ../lib/.libs/libboinc.a -L/usr/lib64 ../lib/.libs/libboinc_crypt.a -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0 -lcurl -L/usr -lssl -lcrypto -ldl -lnsl -lz -lXss -lpthread -lm -pthread
/usr/bin/ld: boinc_client-hostinfo_unix.o: undefined reference to symbol 'XOpenDisplay'
/usr/bin/ld: note: 'XOpenDisplay' is defined in DSO /lib64/libX11.so.6 so try adding it to the linker command line
/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[2]: *** [boinc_client] Error 1
make[2]: Leaving directory `/home/marco/rpmbuild/BUILD/boinc_core_release_7_0/client'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/marco/rpmbuild/BUILD/boinc_core_release_7_0'
make: *** [all] Error 2
errore: Stato d'uscita errato da /var/tmp/rpm-tmp.O8MnRt (%build)


Errori di compilazione RPM:
    Stato d'uscita errato da /var/tmp/rpm-tmp.O8MnRt (%build)

E qui mi sono fermato. Ho notato che il file spec fa riferimento ad altre patch (boinc-guirpcauth.patch, boinc-glib-compat.patch e boinc-xcb-compat.patch) che non so se servano ancora nella nuova versione; in ogni caso io le ho lasciate così come erano.

Se qualcuno sa dare qualche consiglio…

Secondo me vi conviene creare solo il file rpm sorgente e poi utilizzare mock per la compilazione. Così avrete modo di controllare eventuali pacchetti richiesti per la compilazione mancanti.

Mi pare però hai sfruttato un processo un po’ macchinoso per creare l’albero di directory per la creazione dell’rpm…

[quote=MarioS]
Mi pare però hai sfruttato un processo un po’ macchinoso per creare l’albero di directory per la creazione dell’rpm…[/quote]
Non direi. Ho solo creato due cartelle, una con i files per la versione 6 (quella attualmente scaricabile con yum) e una per la 7.
E poi, se dobbiamo discuterne qui, mi sembra il caso di automatizzare il più possibile il tutto per renderlo chiaro per tutti quelli che volessero provare a dare una mano.

Ma non hai seguito una “operazione standard” per creare un albero di directory standard per un rpm…Meglio così secondo me:

$ rpmdev-setuptree
$ yumdownloader --source boinc-client
$ rpm -ivh boinc-client*.src.rpm

I pacchetti sorgente e le patch vanno in rpmbuild/SOURCES.
Lo spec sta in rpmbuild/SPECS.

Mi pare generi meno confusione del tuo suggerimento…

Poi crei il tuo sorgente come hai indicato o come è indicato nel file spec:

$ cd rpmbuild/SOURCES
$ svn export http://boinc.berkeley.edu/svn/branches/boinc_core_release_7_0
$ pushd boinc_core_release_7_0
$ patch < boinc-manager-Makefile.patch #--- Da portare attenzione che sia corretta la patch rispetto alla versione scaricata da vcs
$ ./_autosetup
$ ./trim #--- Dovrebbe essere presente in SOURCES, contiene lo script necessario per eliminare i binari scaricati da vcs
$ popd
$ tar -cJvf boinc-7.0.7.tar.xz boinc_core_release_7_0

Poi modifichi il file spec come da te fatto.

Infine crei il pacchetto sorgente:

$ rpmbuild -bs rpmbuild/SPECS/boinc-client.spec

E lo si compila con mock:

$ mock rpmbuild/SRPMS/boinc-client-{versione}.src.rpm

Fine.

mi stavo chiedendo se non fosse auspicabile continuare la discussione in inglese così da rendere più agevole la partecipazione del package mantainer e di altri utenti

A parer mio allora bisogna spostarsi sul forum internazionale e non qui se si vuole discutere in inglese.

[quote=MarioS]Ma non hai seguito una “operazione standard” per creare un albero di directory standard per un rpm…Meglio così secondo me:

$ rpmdev-setuptree
$ yumdownloader --source boinc-client
$ rpm -ivh boinc-client*.src.rpm

I pacchetti sorgente e le patch vanno in rpmbuild/SOURCES.
Lo spec sta in rpmbuild/SPECS.

Mi pare generi meno confusione del tuo suggerimento…
[/quote]
Beh, io semplicemente ho creato una cartella di lavoro, in modo che le modifiche le faccio sulla copia in rpmbuild/SOURCES (altrimenti se faccio pasticci devo riscaricare l’rpm ogni volta). Probabilmente ho dimenticato di dire che i files necessari li ho copiati (a mano) in rpmbuild/SOURCES. Inoltre, personalmente, preferisco tenere due cartelle separate per i files necessari per le versioni 6 e 7, anche se poi quello che serve va sicuramente copiato in rpmbuild/SOURCES e affini.

In ogni caso bisogna anche dare

#cd ~/rpmbuild/SOURCES
sed -i 's/%{_unitdir}\/%{name}/%{_unitdir}\/%{name}.service/g' boinc-client.spec
sed -i 's/After=network.target graphical.target/After=network.target/g' boinc-client-systemd

Per correggere il https://bugzilla.redhat.com/show_bug.cgi?id=814060 ancora non risolto nei repository ufficiali, altrimenti non funziona.

Infine:

mock rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm
ERROR: Must be member of 'mock' group to run mock! (marco)

Ma tra gli utenti del gruppo mock mi risulta anche marco.

Forse con un vcs locale (git?) puoi tenere traccia delle varie modifiche che fai, anche di eventuali pasticci e tornare indietro.

Prova a sloggarti dal tuo utente e a rieffettuare il login se sei sicuro di averlo configurato correttamente per usare mock:

# usermod -a -G mock marco 

È che io sono sempre stato un lupo solitario, non conosco (e non so usare) strumenti come git.

[quote]
Prova a sloggarti dal tuo utente e a rieffettuare il login se sei sicuro di averlo configurato correttamente per usare mock:

[code]

usermod -a -G mock marco

[/code][/quote]
No, avevo toppato in pieno, ORA marco fa parte del gruppo mock, prima avevo frainteso la lista di tutti gli utenti con quella degli utenti del gruppo mock.
Mock è un po’ lento, quando (se?) finisce vi faccio sapere. Per ora è bloccato su:

[marco@localhost ~]$ mock rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm
INFO: mock.py version 1.1.22 starting...
State Changed: init plugins
INFO: selinux enabled
State Changed: start
INFO: Start(rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm)  Config(fedora-17-x86_64)
State Changed: lock buildroot
State Changed: clean
INFO: chroot (/var/lib/mock/fedora-17-x86_64) unlocked and deleted
State Changed: unlock buildroot
State Changed: init
State Changed: lock buildroot
Mock Version: 1.1.22
INFO: Mock Version: 1.1.22
INFO: calling preinit hooks
INFO: enabled root cache
State Changed: unpacking root cache
INFO: enabled yum cache
State Changed: cleaning yum metadata
INFO: enabled ccache
State Changed: running yum
State Changed: unlock buildroot
INFO: Installed packages:
State Changed: setup

Niente. Strano errore:

File non trovato: /builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/bin/boincscr

(da build.log)
:gratt: :gratt: :gratt:

Quando lo da quell’errore?

Ci deve essere un errore nel file SPEC.
Direi di seguire il consiglio di Mario, creare l’RPM sorgente e poi utilizzare Mock. Una volta che Mock compila l’RPM si vanno a vedere gli errori e eventuali warning.

[marco@localhost ~]$ mock rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm
INFO: mock.py version 1.1.22 starting...
State Changed: init plugins
INFO: selinux enabled
State Changed: start
INFO: Start(rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm)  Config(fedora-17-x86_64)
State Changed: lock buildroot
State Changed: clean
INFO: chroot (/var/lib/mock/fedora-17-x86_64) unlocked and deleted
State Changed: unlock buildroot
State Changed: init
State Changed: lock buildroot
Mock Version: 1.1.22
INFO: Mock Version: 1.1.22
INFO: calling preinit hooks
INFO: enabled root cache
State Changed: unpacking root cache
INFO: enabled yum cache
State Changed: cleaning yum metadata
INFO: enabled ccache
State Changed: running yum
State Changed: unlock buildroot
INFO: Installed packages:
State Changed: setup
State Changed: build
ERROR: Exception(rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm) Config(fedora-17-x86_64) 3 minutes 19 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-17-x86_64/result
ERROR: Command failed. See logs for output.
 # 'bash', '--login', '-c', 'rpmbuild -bb --target x86_64 --nodeps builddir/build/SPECS/boinc-client.spec']
[marco@localhost ~]$ 

Il file /var/lib/mock/fedora-17-x86_64/result/build.lock è un po’ lunghetto (più di 3000 righe); comunque finisce con

Elaborazione file: boinc-client-7.0.7-1.r25826svn.fc17.x86_64
Esecuzione(%doc) in corso: /bin/sh -e /var/tmp/rpm-tmp.11T7ce
+ umask 022
+ cd /builddir/build/BUILD
+ cd boinc_core_release_7_0
+ DOCDIR=/builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/share/doc/boinc-client-7.0.7
+ export DOCDIR
+ /usr/bin/mkdir -p /builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/share/doc/boinc-client-7.0.7
+ cp -pr COPYING COPYRIGHT USAGE_FEDORA /builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/share/doc/boinc-client-7.0.7
+ exit 0
Provides: config(boinc-client) = 7.0.7-1.r25826svn.fc17 libboinc_api.so.7()(64bit) libboinc_graphics2.so.7()(64bit) libboinc_opencl.so.7()(64bit)
Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(pre): /bin/sh shadow-utils
Requires(post): /bin/sh systemd-sysv systemd-units
Requires(preun): /bin/sh systemd-units
Requires(postun): /bin/sh systemd-units
Requires: libatk-1.0.so.0()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcairo.so.2()(64bit) libcrypto.so.10()(64bit) libcurl.so.4()(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.2.5)(64bit) libfontconfig.so.1()(64bit) libfreetype.so.6()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libgdk-x11-2.0.so.0()(64bit) libgdk_pixbuf-2.0.so.0()(64bit) libgio-2.0.so.0()(64bit) libglib-2.0.so.0()(64bit) libgobject-2.0.so.0()(64bit) libgtk-x11-2.0.so.0()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libnsl.so.1()(64bit) libpango-1.0.so.0()(64bit) libpangocairo-1.0.so.0()(64bit) libpangoft2-1.0.so.0()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libssl.so.10()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libz.so.1()(64bit) rtld(GNU_HASH)
Elaborazione file: boinc-manager-7.0.7-1.r25826svn.fc17.x86_64
errore: File non trovato: /builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/bin/boincscr
Errori di compilazione RPM:
    File non trovato: /builddir/build/BUILDROOT/boinc-client-7.0.7-1.r25826svn.fc17.x86_64/usr/bin/boincscr
Child return code was: 1
EXCEPTION: Command failed. See logs for output.
 # 'bash', '--login', '-c', 'rpmbuild -bb --target x86_64 --nodeps builddir/build/SPECS/boinc-client.spec']
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/mockbuild/trace_decorator.py", line 70, in trace
    result = func(*args, **kw)
  File "/usr/lib/python2.7/site-packages/mockbuild/util.py", line 352, in do
    raise mockbuild.exception.Error, ("Command failed. See logs for output.\n # %s" % (command,), child.returncode)
Error: Command failed. See logs for output.
 # 'bash', '--login', '-c', 'rpmbuild -bb --target x86_64 --nodeps builddir/build/SPECS/boinc-client.spec']
LEAVE do --> EXCEPTION RAISED

Ci dai la parte dello SPEC di %build?
Hai definito anche una BUILDROOT?

[quote=robyduck]Ci dai la parte dello SPEC di %build?
Hai definito anche una BUILDROOT?[/quote]

  1. mock non l’avevo mai usato: ieri l’ho installato con yum, ho aggiunto marco al gruppo mock, ed eseguito
mock rpmbuild/SRPMS/boinc-client-7.0.7-1.r25826svn.fc17.src.rpm

come suggerito da MarioS. Non ho configurato in alcun modo mock.
2) se invece ti riferisci al file boinc-client.spec con cui tento di creare l’rpm (ho provato ad usare il file spec di boinc 6 con poche modifiche; la parte che segue dovrebbe essere esattamente identica):

Source4:	USAGE_FEDORA
[cut]
BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
[cut]
%build
%ifarch %{ix86}
%global boinc_platform i686-pc-linux-gnu
%endif
%ifarch powerpc ppc
%global boinc_platform powerpc-linux-gnu
%endif
%ifarch powerpc64 ppc64
%global boinc_platform ppc64-linux-gnu
%endif

# We want to install .mo, not .po files, see http://boinc.berkeley.edu/trac/ticket/940
sed -i 's/BOINC-Manager\.po/BOINC-Manager\.mo/g' locale/Makefile.in

# Install user hints
install -p -m644 %{SOURCE4} .

%global confflags --disable-dependency-tracking --enable-dynamic-client-linkage --disable-server --disable-fcgi --enable-unicode --with-ssl --with-x STRIP=: DOCBOOK2X_MAN=/usr/bin/db2x_docbook2man

%if %{defined boinc_platform}
CXXFLAGS=`pkg-config gtk+-x11-2.0 --cflags --libs` %configure %{confflags} --with-boinc-platform=%{boinc_platform}
%else
CXXFLAGS=`pkg-config gtk+-x11-2.0 --cflags --libs` %configure %{confflags}
%endif

# Disable rpaths
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool

# Parallel make does not work, see upstream bugtracker at:
# http://boinc.berkeley.edu/trac/ticket/775
make

E, per inciso, se tento di creare l’rpm con

rpmbuild -v -bb boinc-client.spec

dà errore eseguendo il make, secondo me.
Con mock effettimamente anch’io ho l’impressione che non sia configurato a dovere (cerca un file nel posto sbagliato?), ma ho tanto l’impressione che il problema fondamentale sia la necessità di modificare (non so come) il file spec).

Ho scritto a Milos, vediamo che mi dice.