Index | Thread | Search

From:
David Uhden Collado <david@uhden.dev>
Subject:
Re: [NEW WIP]: net/monero (help needed)
To:
lucas@sexy.is
Cc:
ports@openbsd.org
Date:
Tue, 20 Aug 2024 07:03:15 +0200

Download raw body.

Thread
  • Lucas Gabriel Vuotto:

    [NEW WIP]: net/monero (help needed)

  • > Hey,
    > 
    > I've been working on and off in a port for Monero for quite some time.
    > Thanks to your's and byteskeptical interest, I got back to it and now I
    > have a working port attached here.
    > 
    
    Honestly, I don't understand why people create ports for OpenBSD without 
    trying to get them added to the official ports tree. In your case, I 
    imagine it might be to test it more thoroughly, but it's still 
    beneficial to share it to receive feedback from others.
    
    >> Dear all,
    >>
    >> I am currently working on creating a port of the Monero CLI wallet for
    >> OpenBSD, the work I have done so far is attached in this email. This project
    >> is of personal interest to me, as well as to others who view privacy as an
    >> essential component of cybersecurity.
    > 
    > First of all, it wasn't super clear to me if you only ported (or
    > intended to port) monero-wallet-cli. The attached port is for all the
    > binaries you build from upstream, and in particular monerod.
    > 
    
    It's all part of the Monero CLI wallet, as the Monero developers 
    intended. I think that separating the binaries could be 
    counterproductive. On the other hand, my interest, along with that of 
    many others porting this software to OpenBSD, is primarily to host a 
    node. Personally, I currently host a public Monero node on a Raspberry 
    Pi 5 running Debian. However, once OpenBSD is compatible with this 
    hardware, I plan to install it and attempt to run this and other 
    services there.
    
    >> I am in the process of learning how to create ports for OpenBSD, which is
    >> why I have chosen to start with software that seems relatively
    >> straightforward to port.
    > 
    > Hell no. ^^
    
    I have realized this the hard way.
    
    > 
    >> I think this port is complete. However, it is still a work in progress and I
    >> am hesitant to propose it for inclusion in the ports tree due to the
    >> following issue:
    >>
    >> When building this software as a non-root user, the following error occurs:
    >>
    >> LLVM ERROR: out of memory
    >> c++: error: unable to execute command: Abort trap (core dumped)
    >>
    >> This issue is documented in the original project, and the solution is to
    >> increase the ulimit size to 2 GB:
    >>
    >> ulimit -d 2000000
    >>
    >> I would like to know if it is possible to resolve this issue within the port
    >> itself, or if it would be acceptable to add this port to the tree despite
    >> the problem, perhaps by including a note in the README file.
    > 
    > Didn't deal with this. I run with PORTS_PRIVSEP=Yes and _pbuild runs
    > with 8GB base in amd64.
    
    I am glad this is not a problem.
    
    > 
    >> Additionally, while working on this port and reading the documentation, I
    >> encountered several questions that I had to deduce based on how other
    >> OpenBSD ports handle them:
    >>
    >> a. The directories pointed to by certain macros in bsd.port.mk, such as
    >> PREFIX and LOCALSTATEDIR.
    > 
    > SUBST_VARS in bsd.port.mk(5) explains a bit, item 16 of [1] explains how
    > each directory is used, "make show=VAR" shows the value of VAR.
    > 
    > Having given that piece of information, I don't see a specific question
    > in your comment.
    > 
    >> b. How to configure a port to create a new user when needed, for instance,
    >> to run a daemon, as is the case with this port.
    > 
    > Take a look at pkg_create(1) @newuser. That needs to be added to
    > pkg/PLIST, like done in the attached port.
    > 
    >> These have been the most challenging parts for me, and I find the
    >> documentation unclear on these points.
    > 
    > It's quite spread over several manpages, so it's a bit confusing /
    > difficult at times.
    > 
    >> This port has been tested on an amd64 platform. Unfortunately, I do not have
    >> access to compatible machines with other architectures to conduct further
    >> testing. If anyone is able to test the port on different platforms, I would
    >> greatly appreciate it. I am currently using a virtual machine, as the only
    >> computer I own with sufficient resources to compile this software in a
    >> reasonable time frame is not compatible with OpenBSD.
    >>
    >> Initially, I considered naming the port net/monero-cli since there is an
    >> official GUI wallet. However, I decided to leave it as net/monero, as I
    >> don't think the GUI wallet will be ported in the future due to the
    >> dependencies that would also need to be ported. If I ever attempt to port a
    >> GUI wallet, I would try with Feather Wallet, as it seems the most feasible
    >> option given that it uses QT.
    > 
    > So, properly about David port, it's mostly fine, but
    > 
    > - it's uncommon to have things listed both in RDEPs and BDEPs, and in
    >    this particular case all of the are actually LDEPs
    
    I agree.
    
    > - you don't need the do-install target, cmake manages it fine
    
    The modules used in OpenBSD ports handle so many tasks for you that, at 
    first, you might not realize you don't need to add instructions for 
    certain tasks because the module already takes care of them. The package 
    building infrastructure in OpenBSD is highly refined.
    
    > - you don't need gmake
    
    According to the original project documentation, you do need it.
    
    > - I ran into a compilation error because hidapi was installed
    
    Thanks, I didn't realize that. It might be because I built the software 
    using the "no-dev" CMake option.
    
    > 
    > About byteskeptical port:
    > 
    > - small detail, but REVISION isn't needed for an import
    > - ONLY_FOR_ARCHS is for things that actually don't build in the other
    >    arches, not for things not tested in different arches
    > - upstream tarballs are preferred over GitHub-generated tarballs
    > - also the RDEPs and BDEPs that should be LDEPs and the do-install
    >    target
    > - I run into some compilation error with this one too, but I don't want
    >    to recompile it yet again. I believe it was a different one than the
    >    David, but the issue is also present in here: if hidapi is detected
    >    at configure-time, then the port fails compilation
    > - the patches for replacing {sprintf,strcat} with {snprintf,strncat} are
    >    better suited for upstream, which benefits all the users
    > 
    > My tarball does the following:
    > 
    > - adds hidapi and miniupnp deps, as they are automatically picked up and
    >    there isn't a sensible way to disable them, which means issue for
    >    bulks (hidapi requires patching a source file)
    >    - I do have a hardware wallet to try it out, but I haven't managed to
    >      do so yet and is low in my priority list. I don't see much point in
    >      having neither this nor the individual binaries as FLAVORs: OpenBSD
    >      packages tend to be bulky and prefers something that works mostly
    >      as expected for 80% of the users over saving space.
    
    I think it would be beneficial to test this feature to ensure the port 
    provides 100% of the software's functionality.
    
    > - uses devel/readline instead of base's, as the latter results in broken
    >    display (requires patching cmake files)
    > - disables liblzma, which is autodetected while looking for libunwind
    >    (requires patching cmake files)
    > - disables the docs: I think they're only dev docs and nothing for
    >    user-facing programs, and saves a dep on doxygen which tends to break
    >    things
    > - dropped pkg/monerod.login. I'm currently at 38% of a full sync,
    >    haven't run into issues with the defaults yet.
    
    I think it would be great if you could provide updates on how it 
    performs once the blockchain is fully synchronized.
    
    > - don't install the example monerod.conf: it's 3 lines and the defaults
    >    work
    > - OpenBSD tends to prefer /var/prog to /var/lib/prog, so the home for
    >    _monerod is /var/monero (also means that the default location of the
    >    blockchain is /var/monero/.bitmonero)
    > - I picked up UID 627 for _monerod. zarafa was replaced by kopano in
    >    2017, so I think it should be safe to reuse it now.
    > - couldn't make libunwind work and pointing it to
    
    How did you detect all these problems? What recommendations can you give 
    me to properly debug a port? I imagine it’s because you're a programmer, 
    while I’m merely a system administrator.
    
    >    /usr/include/c++/v1/libunwind.h and libc++abi.so isn't enough:
    
    Does anyone know why libunwind is not available on OpenBSD? I am 
    referring to the portable version, not the one included in Clang.
    
    https://github.com/libunwind/libunwind
    
    > 
    > ld: warning: easylogging++.cc(easylogging++.cc.o:(el::base::utils::File::buildStrippedFilename(char const*, char*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned long)) in archive external/easylogging++/libeasylogging.a): warning: strcat() is almost always misused, please use strlcat()
    > ld: error: undefined symbol: el::base::debug::StackTrace::generateNew()
    >>>> referenced by stack_trace.cpp
    >>>>                stack_trace.cpp.o:(tools::log_stack_trace(char const*)) in archive src/common/libcommon.a
    > 
    > ld: error: undefined symbol: el::base::debug::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, el::base::debug::StackTrace const&)
    >>>> referenced by stack_trace.cpp
    >>>>                stack_trace.cpp.o:(tools::log_stack_trace(char const*)) in archive src/common/libcommon.a
    > 
    >    but StackTrace::generateNew is behind a complex ifdef and I don't
    >    feel we're missing out on much without it.
    > 
    > That's more than enough for a mail. Port attached. Bye.
    > 
    > 	Lucas
    
    Thank you for your help! Hopefully this software can be added to the 
    OpenBSD ports tree before the next stable release.
    
    > 
    > 
    > diff refs/heads/master 9676c6688a222bd27c6b3fee2f9b2bee4297eea1
    > commit - 3e15eae7e00ea78227ed46a1a7153ce4d102ead1
    > commit + 9676c6688a222bd27c6b3fee2f9b2bee4297eea1
    > blob - 5104415dc091f405d9c26b9c73d49c1d2e7be77e
    > blob + 7ba9d8a70c4595b0489e10b1b6ccadcf749d2846
    > --- infrastructure/db/user.list
    > +++ infrastructure/db/user.list
    > @@ -135,7 +135,7 @@ id  user		group		port
    >   624 _noip		_noip		net/no-ip
    >   625 _varnish		_varnish	www/varnish
    >   626 _pound		_pound		www/pound
    > -#627 _zarafa		_zarafa		mail/zarafa/zarafa
    > +627 _monerod		_monerod	net/monero
    >   628 _kamailio		_kamailio	telephony/kamailio
    >   629 _avahi		_avahi		net/avahi
    >   630 _victorialogs	_victorialogs	sysutils/victorialogs
    
    
    
  • Lucas Gabriel Vuotto:

    [NEW WIP]: net/monero (help needed)