BOINC / boinc

Open-source software for volunteer computing and grid computing.
https://boinc.berkeley.edu
GNU Lesser General Public License v3.0
2.04k stars 449 forks source link

Boinc client code fails to compile on Ubuntu 20.04 #4010

Open mdatre opened 4 years ago

mdatre commented 4 years ago

Describe the bug Trying to compile entire Boinc code on Ubuntu 20.04 fails with multiple errors. Code compilation fails at several places due to different paths to *.h files such as gtk.h, gdk.h, hb.h, hb-blob.h, hb-common.h etc

If one fixes these by going to /usr/include and creating symlinks to actual file paths, the code then fails by giving following error

/usr/bin/ld: boincmgr-taskbarex.o: undefined reference to symbol 'gtk_status_icon_set_visible' /usr/bin/ld: /lib/x86_64-linux-gnu/libgtk-3.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: [Makefile:759: boincmgr] Error 1 make[2]: Leaving directory '/work/boinc_src/clientgui' make[1]: [Makefile:649: all-recursive] Error 1 make[1]: Leaving directory '/work/boinc_src' make: *** [Makefile:553: all] Error 2

Steps To Reproduce

  1. Download Boinc code
  2. Change to code directory
  3. ./_autosetup
  4. ./configure --prefix=/path/to/local/folder
  5. make

Expected behavior Entire code should compile without problems.

System Information

Dave-catcher commented 4 years ago

I have also failed to get BOINC to compile on 20.04 however, in my case the errors on running make all seem to be to do with WXwebview.

/usr/bin/ld: boincmgr-NoticeListCtrl.o: in function `wxString::ImplStr(char const*, wxMBConv const&)':
/usr/include/wx-3.0/wx/string.h:477: undefined reference to `wxWebViewNameStr'
/usr/bin/ld: /usr/include/wx-3.0/wx/string.h:477: undefined reference to `wxWebViewBackendDefault'
/usr/bin/ld: /usr/include/wx-3.0/wx/string.h:477: undefined reference to `wxWebViewDefaultURLStr'
/usr/bin/ld: boincmgr-NoticeListCtrl.o: in function `CNoticeListCtrl::Create(wxWindow*)':
/home/dave/Downloads/boinc-master/clientgui/NoticeListCtrl.cpp:90: undefined reference to `wxWebView::New(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, wxString const&, long, wxString const&)'
/usr/bin/ld: boincmgr-NoticeListCtrl.o: in function `wxEventTableEntry::wxEventTableEntry(int const&, int, int, wxEventFunctor*, wxObject*)':
/usr/include/wx-3.0/wx/event.h:3201: undefined reference to `wxEVT_WEBVIEW_NAVIGATING'
/usr/bin/ld: /usr/include/wx-3.0/wx/event.h:3201: undefined reference to `wxEVT_WEBVIEW_ERROR'
mdatre commented 4 years ago

/usr/bin/ld: /usr/include/wx-3.0/wx/event.h:3201: undefined reference to `wxEVT_WEBVIEW_ERROR'

I think this can be fixed by installing libwxgtk3.0-gtk3-dev libnotify-dev. I installed following APT packages when I got missing files errors. Yet it kept failing at several places due to changed paths of other *.h files in compilation.

$ sudo apt install libwxgtk3.0-gtk3-dev libnotify-dev libsqlite3-dev

Dave-catcher commented 4 years ago

Apt tells me I already have the newest versions.

dave@swarm:~/Downloads/boinc-master$ sudo apt install libwxgtk3.0-gtk3-dev libnotify-dev libsqlite3-dev
[sudo] password for dave: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libnotify-dev is already the newest version (0.7.9-1ubuntu2).
libwxgtk3.0-gtk3-dev is already the newest version (3.0.4+dfsg-15build1).
libsqlite3-dev is already the newest version (3.31.1-4ubuntu0.2).
adamradocz commented 4 years ago

This Docker container builds the client without any issue. I haven't built the Manager though.

AenBleidd commented 4 years ago

I believe it's because of this missing package: https://stackoverflow.com/questions/62301866/how-do-i-install-libwebkitgtk-on-ubuntu-20-04-lts

mdatre commented 4 years ago

I believe it's because of this missing package: https://stackoverflow.com/questions/62301866/how-do-i-install-libwebkitgtk-on-ubuntu-20-04-lts

@AenBleidd Do you mean for this error /usr/bin/ld: boincmgr-taskbarex.o: undefined reference to symbol 'gtk_status_icon_set_visible' /usr/bin/ld: /lib/x86_64-linux-gnu/libgtk-3.so.0: error adding symbols: DSO missing from command line

Or the one posted by @Dave-catcher ?

AenBleidd commented 4 years ago

@mdatre, your issue looks like is caused by this: https://developer.gnome.org/gtk3/stable/GtkStatusIcon.html#gtk-status-icon-set-visible

mdatre commented 4 years ago

@mdatre, your issue looks like is caused by this: https://developer.gnome.org/gtk3/stable/GtkStatusIcon.html#gtk-status-icon-set-visible

Ok, so that means the Boinc client code needs an update right? Since it is referring to a deprecated API, and thus complaining on newer OS versions.

AenBleidd commented 4 years ago

4011 created

Dave-catcher commented 4 years ago

Having run echo -e "# For Tizen studio\ndeb http://cz.archive.ubuntu.com/ubuntu bionic main universe" | sudo tee /etc/apt/sources.list.d/tizen-bionic-libwebkitgtk.list sudo apt update sudo apt-get install libwebkitgtk-1.0-0 I am still getting the same errors.

Dave-catcher commented 4 years ago

Don't know if it makes any difference, I am using xubuntu 20.04 as opposed to Ubuntu.

Dave-catcher commented 4 years ago

I should also mention that if I use --disable-manager at the ./configure stage so I am just compiling the client it completes.

mdatre commented 4 years ago

Actually I got all these errors on Ubuntu 18.04 as well. I switched my m/c from 20.04 to 18.04 with a BRAND new fresh install, did a "make clean" on my repo, and yet got the exact same errors in *.h file paths and then a different error

/usr/bin/ld: boincmgr-taskbarex.o: undefined reference to symbol 'gtk_status_icon_set_tooltip_text' //usr/lib/x86_64-linux-gnu/libgtk-3.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status Makefile:687: recipe for target 'boincmgr' failed make[2]: [boincmgr] Error 1 make[2]: Leaving directory '/work/boinc_src/clientgui' Makefile:649: recipe for target 'all-recursive' failed make[1]: [all-recursive] Error 1 make[1]: Leaving directory '/work/boinc_src' Makefile:553: recipe for target 'all' failed make: *** [all] Error 2

AenBleidd commented 4 years ago

@mdatre, do you really need to build GUI (BOINC Manager)? I understand that in any case it should be fixed in some way but maybe you can proceed without BOINC Manager for now?

mdatre commented 4 years ago

@AenBleidd No Boinc GUI is not a must for now, but I was just trying to compile and run everything as a local user than installing things in root space (using Ubuntu APT repo).

Dave-catcher commented 4 years ago

It is the behaviour of the manager in recent iterations not giving the same user control as in the past that has in part led me to start rolling my own which I did successfully with 19.10.

I also see it as a learning exercise.

RichardHaselgrove commented 4 years ago

BOINC's own Manager code still contains the full menus. The pared-down menus are prepared externally by Linux repo managers, who think they are only compiling for corporate users who don't have full authority to sysadmin their own machines. We need to ensure that BOINC's own build tools and/or downloadable binaries work for all.

Dave-catcher commented 4 years ago

BOINC's own Manager code still contains the full menus. The pared-down menus are prepared externally by Linux repo managers, who think they are only compiling for corporate users who don't have full authority to sysadmin their own machines. We need to ensure that BOINC's own build tools and/or downloadable binaries work for all.

Which is why I like to roll my own.

mdatre commented 4 years ago

This is how I have fixed it for now to be able to successfully compile and run client as well as gui on Ubuntu 18.04.

$ sudo apt install libwxgtk3.0-gtk3-dev libnotify-dev libsqlite3-dev libgtk2.0-dev libgtk-3-dev $ sudo apt install libwxgtk-webview3.0-gtk3-dev freeglut3-dev libxss-dev

Run configure script with additional LIBS and CXXFLAGS options

$ ./configure CXXFLAGS="-I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0" LIBS="-lgtk-3 -lgtk-x11-2.0" $ make

However while running the compiled Boinc client binary, I keep getting MAGIC-COOKIE error on the command prompt.

$ cd /path/to/client-files/ $ /work/boinc_src/client/boinc --gui_rpc_port 30000

08-Sep-2020 09:56:57 Initialization completed Invalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 key

I figure this has something to do with the DISPLAY or XAUTH environments, but unable to fix this error, although the boinc client and manager run fine.

Dave-catcher commented 4 years ago

Thank you. $ sudo apt install libwxgtk-webview3.0-gtk3-dev freeglut3-dev libxss-dev Enabled me to succeed. I didn't need the extra config flags.

mdatre commented 4 years ago

Thank you. $ sudo apt install libwxgtk-webview3.0-gtk3-dev freeglut3-dev libxss-dev Enabled me to succeed. I didn't need the extra config flags.

Cool. Did you also get that Invalid magic cookie error? If yes, were you able to fix it? If yes, pls let me know what got it fixed.

UPDATE: One needs to ensure that the directory from which boinc client command is run is owned by boinc user.

$ sudo chown boinc:boinc /path/to/client-files $ /work/boinc_src/client/boinc --gui_rpc_port 30000

Then the magic cookie error disappears, but if I cleared the folder then client was not able to restart, it always failed saying "Another instance of BOINC is running", which from code means it is unable to get a lock on the lockfile.

Any pointers to fix this appreciated.

smoe commented 4 years ago

On https://salsa.debian.org/pkg-boinc-team/boinc/-/blob/master/debian/rules you can inspect how the Debian+Ubuntu packages are doing it.

serval2412 commented 4 years ago

Following my comment in https://github.com/BOINC/boinc/issues/2271 and seeing reply from AenBleidd, I did: apt install libwxgtk-webview3.0-gtk3-dev freeglut3-dev libxss-dev It helped me too.

So it seems there's a check is lacking in _autosetup or configure.