diff mbox series

[bug#36258,1/2] gnu: monero: Update to 0.14.1.0.

Message ID 87mui63rnd.fsf@yamatai
State Accepted
Headers show
Series [bug#36258,1/2] gnu: monero: Update to 0.14.1.0. | expand

Commit Message

Guillaume Le Vaillant June 25, 2019, 10:07 a.m. UTC
Guillaume LE VAILLANT a écrit :

> swedebugia a écrit :
>
>> Tests completed succesfully. I saw this note:
>>
>> +                       ;; TODO: Find why portability_wallet test fails
>> +                       ;; Maybe the Boost version used to create the test
>> +                       ;; wallet and the current Boost version are not
>> +                       ;; completely compatible?
>> +                       "Serialization.portability_wallet"
>> +                       "is_hdd.linux_os_root")
>>
>> Did you report this upstream?
>> Could you include the failed test also (commented below the comment)
>>
>> Otherwise LGTM :)
>>
>> PS: I started working on Aeon (fork of monero) since they are very similar it
>> should be "easy" to package now that you got monero working again.
>
> I'm not entirely sure why the "Serialization.portability_wallet" test
> fails. It might not be related to compatibility between Boost versions,
> because compiling with the same Boost version in two different ways
> gives different results.
>
> When I compile using 'guix build monero', the test fails.
> ---
> /tmp/guix-build-monero-0.14.1.0.drv-0/monero-0.14.1.0-checkout/tests/unit_tests/serialization.cpp:633: Failure
> Value of: r
>   Actual: false
> Expected: true
> ---
>
> When I compile by hand using 'guix environment --pure monero', the test
> passes.

I found out why the "Serialization.portability_wallet" failed; it was
because of missing write permissions on some test files.

Updated patch with the test enabled attached.

Comments

swedebugia June 25, 2019, 11:32 a.m. UTC | #1
On 2019-06-25 12:07, Guillaume LE VAILLANT wrote:
> 
> Guillaume LE VAILLANT a écrit :
> 
>> swedebugia a écrit :
>>
>>> Tests completed succesfully. I saw this note:
>>>
>>> +                       ;; TODO: Find why portability_wallet test fails
>>> +                       ;; Maybe the Boost version used to create the test
>>> +                       ;; wallet and the current Boost version are not
>>> +                       ;; completely compatible?
>>> +                       "Serialization.portability_wallet"
>>> +                       "is_hdd.linux_os_root")
>>>
>>> Did you report this upstream?
>>> Could you include the failed test also (commented below the comment)
>>>
>>> Otherwise LGTM :)
>>>
>>> PS: I started working on Aeon (fork of monero) since they are very similar it
>>> should be "easy" to package now that you got monero working again.
>>
>> I'm not entirely sure why the "Serialization.portability_wallet" test
>> fails. It might not be related to compatibility between Boost versions,
>> because compiling with the same Boost version in two different ways
>> gives different results.
>>
>> When I compile using 'guix build monero', the test fails.
>> ---
>> /tmp/guix-build-monero-0.14.1.0.drv-0/monero-0.14.1.0-checkout/tests/unit_tests/serialization.cpp:633: Failure
>> Value of: r
>>    Actual: false
>> Expected: true
>> ---
>>
>> When I compile by hand using 'guix environment --pure monero', the test
>> passes.
> 
> I found out why the "Serialization.portability_wallet" failed; it was
> because of missing write permissions on some test files.
> 
> Updated patch with the test enabled attached.
> 

Good catch :D

I do not have commit access so someone else will have to commit this.

I'm not going to review monero-gui because qt is too heavy for my 
mobile bandwidth.
Ludovic Courtès July 3, 2019, 10:06 a.m. UTC | #2
Hi,

swedebugia <swedebugia@riseup.net> skribis:

> I do not have commit access so someone else will have to commit this.

Applied!

The ‘core_tests’ bit of the test suite always takes an awful lot of
time:

--8<---------------cut here---------------start------------->8---
Test project /tmp/guix-build-monero-0.14.1.0.drv-0/build
      Start  1: hash-target
 1/13 Test  #1: hash-target ......................   Passed    0.85 sec
      Start  2: core_tests
 2/13 Test  #2: core_tests .......................   Passed  3871.80 sec
      Start  9: hash-fast
--8<---------------cut here---------------end--------------->8---

Anyway, thanks!

Ludo’.
swedebugia July 14, 2019, 11:11 a.m. UTC | #3
On 2019-07-03 12:06, Ludovic Courtès wrote:
> Hi,
> 
> swedebugia <swedebugia@riseup.net> skribis:
> 
>> I do not have commit access so someone else will have to commit this.
> 
> Applied!


It times out:


       Start  1: hash-target
  1/13 Test  #1: hash-target ......................   Passed    1.00 sec
       Start  2: core_tests
building of 
`/gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv' timed 
out after 3600 seconds of silence
@ build-failed 
/gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv - timeout

http://ci.guix.gnu.org/log/5n9alpgkb7kmv87gwn30fbwqmpd6k138-monero-0.14.1.0
Guillaume Le Vaillant July 14, 2019, 11:51 a.m. UTC | #4
swedebugia a écrit :

> It times out:
>
>
>       Start  1: hash-target
>  1/13 Test  #1: hash-target ......................   Passed    1.00 sec
>       Start  2: core_tests
> building of `/gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv'
> timed out after 3600 seconds of silence
> @ build-failed
> /gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv - timeout
>
> http://ci.guix.gnu.org/log/5n9alpgkb7kmv87gwn30fbwqmpd6k138-monero-0.14.1.0

We could disable 'core_tests' in the test phase if the time they take is
a problem. The other enabled tests should only take 5 or 10 minutes
I think.
Ludovic Courtès July 14, 2019, 1:32 p.m. UTC | #5
Hi swedebugia and Guillaume,

Guillaume Le Vaillant <glv@posteo.net> skribis:

> swedebugia a écrit :
>
>> It times out:
>>
>>
>>       Start  1: hash-target
>>  1/13 Test  #1: hash-target ......................   Passed    1.00 sec
>>       Start  2: core_tests
>> building of `/gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv'
>> timed out after 3600 seconds of silence
>> @ build-failed
>> /gnu/store/y35w9qpz1v9k7srxajpaqch4s7l8mind-monero-0.14.1.0.drv - timeout
>>
>> http://ci.guix.gnu.org/log/5n9alpgkb7kmv87gwn30fbwqmpd6k138-monero-0.14.1.0

Yeah, like I wrote earlier, this test takes a lot of time, and so,
depending on the machine, it might take longer than the
max-silent-timeout.  Not great.

> We could disable 'core_tests' in the test phase if the time they take is
> a problem. The other enabled tests should only take 5 or 10 minutes
> I think.

I’d rather not disable tests just because they take a long time.

An obvious workaround would be to have the test machinery display some
sort of progress report or really anything that shows it’s still “doing
something” so that we don’t hit max-silent-timeout.

Do you know if the build system or CTest has a flag that would make it
more verbose?

Thanks,
Ludo’.
swedebugia July 14, 2019, 2:55 p.m. UTC | #6
On 2019-07-14 15:32, Ludovic Courtès wrote:
...
> 
> I’d rather not disable tests just because they take a long time.
> 
> An obvious workaround would be to have the test machinery display some
> sort of progress report or really anything that shows it’s still “doing
> something” so that we don’t hit max-silent-timeout.
> 
> Do you know if the build system or CTest has a flag that would make it
> more verbose?

It has:
https://linux.die.net/man/1/ctest

-V,--verbose
Enable verbose output from tests.
Test output is normally suppressed and only summary information is 
displayed. This option will show all test output.

-VV,--extra-verbose
Enable more verbose output from tests.
Test output is normally suppressed and only summary information is 
displayed. This option will show even more test output.

--debug
Displaying more verbose internals of CTest.
This feature will result in large number of output that is mostly useful 
for debugging dashboard problems.

Could you test those Guillaume and see if it helps us?
diff mbox series

Patch

From a41ff296f296e43834af07c20e60319b302b70f7 Mon Sep 17 00:00:00 2001
From: Guillaume LE VAILLANT <glv@posteo.net>
Date: Sat, 15 Jun 2019 10:12:36 +0200
Subject: [PATCH 1/2] gnu: monero: Update to 0.14.1.0.

* gnu/packages/finance.scm (monero): Update to 0.14.1.0.
* gnu/packages/patches/monero-use-system-miniupnpc.patch: Update file.
---
 gnu/packages/finance.scm                      | 90 ++++++++++--------
 .../patches/monero-use-system-miniupnpc.patch | 95 +++----------------
 2 files changed, 62 insertions(+), 123 deletions(-)

diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 5b95bcb704..7cdb41b372 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -11,6 +11,7 @@ 
 ;;; Copyright © 2018 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,6 +40,7 @@ 
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
@@ -68,6 +70,7 @@ 
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages upnp)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages gnuzilla))
@@ -428,49 +431,59 @@  other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
 
 (define-public monero
   ;; This package bundles easylogging++ and lmdb.
-  ;; The bundled easylogging++ is modified, and the changes will not be upstreamed.
+  ;; The bundled easylogging++ is modified, and the changes will not be
+  ;; upstreamed.
   ;; The devs deem the lmdb driver too critical a consenus component, to use
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.12.3.0")
+    (version "0.14.1.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/monero-project/monero")
-             (commit (string-append "v" version))))
+             (url "https://github.com/monero-project/monero.git")
+             (commit (string-append "v" version))
+             (recursive? #t)))
        (file-name (git-file-name name version))
        (patches (search-patches "monero-use-system-miniupnpc.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Delete bundled dependencies.
+           (for-each
+            delete-file-recursively
+            '("external/miniupnp" "external/rapidjson"
+              "external/unbound"))
+           #t))
        (sha256
         (base32
-         "14db9kgjm2ha93c2x5fjdw01xaqshn756qr3x2cnzyyjh7caz5qd"))))
+         "1asa197fad81jfv12qgaa7y7pdr1r1pda96m9pvivkh4v30cx0nh"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
-       ("googletest" ,googletest)
+       ("git" ,git)
        ("graphviz" ,graphviz)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
     (inputs
-     `(("bind" ,isc-bind)
-       ("boost" ,boost)
-       ("zeromq" ,zeromq)
+     `(("boost" ,boost)
        ("cppzmq" ,cppzmq)
        ("expat" ,expat)
-       ("libsodium" ,libsodium)
+       ("hidapi" ,hidapi)
        ("libunwind" ,libunwind)
-       ("lmdb" ,lmdb)
-       ("miniupnpc" ,monero-miniupnpc)
+       ("libsodium" ,libsodium)
+       ("miniupnpc" ,miniupnpc)
        ("openssl" ,openssl)
        ("rapidjson" ,rapidjson)
-       ("unbound" ,unbound)))
+       ("readline" ,readline)
+       ("unbound" ,unbound)
+       ("xz" ,xz)
+       ("zeromq" ,zeromq)))
     (arguments
      `(#:out-of-source? #t
-       #:build-type "release"
-       #:configure-flags '("-DBUILD_TESTS=ON"
-                           ,@(if (string=? "aarch64-linux" (%current-system))
-                                 '("-DARCH=armv8-a")
-                                 '())
+       #:configure-flags '("-DARCH=default"
+                           "-DBUILD_TESTS=ON"
                            "-DBUILD_GUI_DEPS=ON")
        #:phases
        (modify-phases %standard-phases
@@ -479,24 +492,24 @@  other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
            (lambda _
              (setenv "HOME" (getcwd))
              #t))
-         (add-after 'set-home 'fix-wallet-path-for-unit-tests
-           (lambda _
-             (substitute* "tests/unit_tests/serialization.cpp"
-               (("\\.\\./\\.\\./\\.\\./\\.\\./") "../../"))
-             #t))
-         (add-after 'fix-wallet-path-for-unit-tests 'change-log-path
+         (add-after 'set-home 'change-log-path
            (lambda _
              (substitute* "contrib/epee/src/mlog.cpp"
                (("epee::string_tools::get_current_module_folder\\(\\)")
-                "\".bitmonero\""))
-             (substitute* "contrib/epee/src/mlog.cpp"
-               (("return \\(") "return ((std::string(getenv(\"HOME\"))) / "))
+                "\".bitmonero\"")
+               (("return \\(")
+                "return ((std::string(getenv(\"HOME\"))) / "))
              #t))
+         (add-after 'change-log-path 'fix-file-permissions-for-tests
+           (lambda _
+             (for-each (lambda (f)
+                         (chmod f #o644))
+                       (find-files "tests/data/" "wallet_9svHk1.*"))
+             #t))
+         ;; Only try tests that don't need access to network or system
          (replace 'check
            (lambda _
-             (invoke "make" "ARGS=-E 'unit_tests|libwallet_api_tests'"
-                     "test")))
-         ;; The excluded unit tests need network access
+             (invoke "make" "ARGS=-R 'hash|core_tests'" "test")))
          (add-after 'check 'unit-tests
            (lambda _
              (let ((excluded-unit-tests
@@ -506,22 +519,17 @@  other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
                        "DNSResolver.IPv4Success"
                        "DNSResolver.DNSSECSuccess"
                        "DNSResolver.DNSSECFailure"
-                       "DNSResolver.GetTXTRecord")
+                       "DNSResolver.GetTXTRecord"
+                       "is_hdd.linux_os_root")
                      ":")))
                (invoke "tests/unit_tests/unit_tests"
                        (string-append "--gtest_filter=-"
-                                      excluded-unit-tests)))))
-         (add-after 'install 'install-blockchain-import-export
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
-               (install-file "bin/monero-blockchain-import" bin)
-               (install-file "bin/monero-blockchain-export" bin)))))))
+                                      excluded-unit-tests))))))))
     (home-page "https://getmonero.org/")
     (synopsis "Command-line interface to the Monero currency")
     (description
-     "Monero is a secure, private, untraceable currency.  This package provides the
-Monero command line client and daemon.")
+     "Monero is a secure, private, untraceable currency.  This package provides
+the Monero command line client and daemon.")
     (license license:bsd-3)))
 
 (define-public monero-gui
diff --git a/gnu/packages/patches/monero-use-system-miniupnpc.patch b/gnu/packages/patches/monero-use-system-miniupnpc.patch
index 6bc825d121..c5d376d793 100644
--- a/gnu/packages/patches/monero-use-system-miniupnpc.patch
+++ b/gnu/packages/patches/monero-use-system-miniupnpc.patch
@@ -1,111 +1,42 @@ 
-This reverts commit 1e20d705e7c64d2b17c031f345057d1e8850fafa, so that it's possible to use our own
-miniupnpc, instead of a git submodule.
----
- CMakeLists.txt          |  8 ++++++++
- external/CMakeLists.txt | 41 +++++++++++++++++++++++++++++++----------
- src/p2p/net_node.inl    | 13 ++++++++++---
- 3 files changed, 49 insertions(+), 13 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 3b93988e..ef948885 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -430,6 +430,14 @@ include_directories("${CMAKE_CURRENT_BINARY_DIR}/translations")
- 
- add_subdirectory(external)
- 
-+# Final setup for miniupnpc
-+if(UPNP_STATIC OR IOS)
-+  add_definitions("-DUPNP_STATIC")
-+else()
-+  add_definitions("-DUPNP_DYNAMIC")
-+  include_directories(${UPNP_INCLUDE})
-+endif()
-+
- # Final setup for libunbound
- include_directories(${UNBOUND_INCLUDE})
- link_directories(${UNBOUND_LIBRARY_DIRS})
 diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
-index 1fc4d64c..b4f712ee 100644
+index 7553f87e..8e865c6c 100644
 --- a/external/CMakeLists.txt
 +++ b/external/CMakeLists.txt
-@@ -34,21 +34,42 @@
- # We always compile if we are building statically to reduce static dependency issues...
- # ...except for FreeBSD, because FreeBSD is a special case that doesn't play well with
- # others.
-+if(NOT IOS)
-+    find_package(Miniupnpc QUIET)
-+endif()
+@@ -37,19 +37,7 @@
  
--find_package(Miniupnpc REQUIRED)
-+# If we have the correct shared version and we're not building static, use it
-+if(STATIC OR IOS)
-+ set(USE_SHARED_MINIUPNPC false)
-+elseif(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER)
-+ set(USE_SHARED_MINIUPNPC true)
-+endif()
+ find_package(Miniupnpc REQUIRED)
  
 -message(STATUS "Using in-tree miniupnpc")
-+if(USE_SHARED_MINIUPNPC)
-+  message(STATUS "Using shared miniupnpc found at ${MINIUPNP_INCLUDE_DIR}")
- 
 -add_subdirectory(miniupnp/miniupnpc)
-+  set(UPNP_STATIC false PARENT_SCOPE)
-+  set(UPNP_INCLUDE ${MINIUPNP_INCLUDE_DIR} PARENT_SCOPE)
-+  set(UPNP_LIBRARIES ${MINIUPNP_LIBRARY} PARENT_SCOPE)
-+else()
-+  if(STATIC)
-+    message(STATUS "Using miniupnpc from local source tree for static build")
-+  else()
-+    message(STATUS "Using miniupnpc from local source tree (/external/miniupnp/miniupnpc)")
-+  endif()
- 
 -set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
 -if(MSVC)
 -  set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
 -elseif(NOT MSVC)
 -  set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
 -endif()
-+  add_subdirectory(miniupnp/miniupnpc)
-+
-+  set_property(TARGET libminiupnpc-static PROPERTY FOLDER "external")
-+  if(MSVC)
-+    set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267")
-+  elseif(NOT MSVC)
-+    set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value")
-+  endif()
- 
+-if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+-	set_property(TARGET libminiupnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -D_NETBSD_SOURCE")
+-endif()
+-
 -set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
-+  set(UPNP_STATIC true PARENT_SCOPE)
-+  set(UPNP_LIBRARIES "libminiupnpc-static" PARENT_SCOPE)
-+endif()
++set(UPNP_LIBRARIES "miniupnpc" PARENT_SCOPE)
  
  find_package(Unbound)
  
 diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
-index 9b21705e..76340a22 100644
+index 74924e4f..3554dd0d 100644
 --- a/src/p2p/net_node.inl
 +++ b/src/p2p/net_node.inl
-@@ -49,9 +49,16 @@
+@@ -49,9 +49,9 @@
  #include "storages/levin_abstract_invoke2.h"
  #include "cryptonote_core/cryptonote_core.h"
  
 -#include <miniupnp/miniupnpc/miniupnpc.h>
 -#include <miniupnp/miniupnpc/upnpcommands.h>
 -#include <miniupnp/miniupnpc/upnperrors.h>
-+// We have to look for miniupnpc headers in different places, dependent on if its compiled or external
-+#ifdef UPNP_STATIC
-+  #include <miniupnp/miniupnpc/miniupnpc.h>
-+  #include <miniupnp/miniupnpc/upnpcommands.h>
-+  #include <miniupnp/miniupnpc/upnperrors.h>
-+#else
-+  #include "miniupnpc.h"
-+  #include "upnpcommands.h"
-+  #include "upnperrors.h"
-+#endif
++#include <miniupnpc/miniupnpc.h>
++#include <miniupnpc/upnpcommands.h>
++#include <miniupnpc/upnperrors.h>
  
  #undef MONERO_DEFAULT_LOG_CATEGORY
  #define MONERO_DEFAULT_LOG_CATEGORY "net.p2p"
--- 
-2.16.2
-
-- 
2.22.0