Page MenuHomeFreeBSD

ArangoDB FreeBSD port
ClosedPublic

Authored by dev_dudu.ro on Oct 25 2017, 4:48 PM.
Referenced Files
Unknown Object (File)
Tue, Dec 17, 1:15 PM
Unknown Object (File)
Sun, Dec 15, 3:22 PM
Unknown Object (File)
Thu, Dec 12, 7:23 PM
Unknown Object (File)
Thu, Dec 12, 9:34 AM
Unknown Object (File)
Wed, Dec 11, 6:35 AM
Unknown Object (File)
Wed, Nov 27, 4:38 PM
Unknown Object (File)
Wed, Nov 27, 4:37 PM
Unknown Object (File)
Mon, Nov 25, 8:58 PM
Subscribers

Details

Summary

This is a FreeBSD port of ArangoDB 3.2.8. ArangoDB is a production ready highly available Multi-Model NoSQL database

Diff Detail

Repository
rP FreeBSD ports repository
Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

Hi and welcome to FreeBSD!

Please exclude the dot files from this review (.arcconfig, .gitignore, .gitattributes).
Please reorder and space out sections in the main Makefile (https://www.freebsd.org/doc/en/books/porters-handbook/book.html#porting-order).
Please include a pkg-plist with this submission.
Please address inline comments as well.

Usually when adding a new port, you should run "portlint -A" from "portlint" package and make sure that the output is clean.

databases/arangodb32/Makefile
3

Please make "32" a suffix.

10

If you make "32" a suffix, GH_ACCOUNT, GH_PROJECT, and GH_TAGNAME variables can go away.

13

The comment needs to be more informative.
It's implied that this is a FreeBSD port, so the comment only contains the port name.

28

Try to fix files before they hit STAGEDIR if you can. Also, these can be combined:

${REINPLACE_CMD} -e 's|/usr/local/var/lib|/var/db|g' ${STAGEDIR}/usr/local/etc/arangodb3/*.conf
databases/arangodb32/pkg-descr
5

The website redirects to https://www.arangodb.com/, so please use this for WWW.
Please remove the trailing empty line and make the description a bit longer.

dev_dudu.ro marked 4 inline comments as done.

How did you generate pkg-plist? The files listed in it are already relative to LOCALBASE and @dir should only specify directories that are empty.
The "make makeplist" target should generate a pkg-plist close to what you want, so then you need to review it and make any manual changes you need.

I see that this piece of software bundles a few things already available as ports: v8, boost, curl, etc. It is preferable to not rely on bundled dependencies.
There is a summary why bundled libraries are bad here, but this applies to all dependencies in general:
https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/bundled-libs.html

Is it possible to unbundle some or all of these things?

databases/arangodb32/pkg-descr
2

How about this line, taken from Github summary?

ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.

Could you also try running "make stage-qa" and "make check-orphans" please and make sure these are clean?

====> Running Q/A tests (stage-qa)
Warning: port uses /usr/local/var instead of /var
===> Checking for items in STAGEDIR missing from pkg-plist
Error: Orphaned: %%DATADIR%%3/js/server/modules/@arangodb/foxx/legacy/controller.js
Error: Orphaned: %%DATADIR%%3/js/server/modules/@arangodb/foxx/legacy/query.js
Error: Orphaned: %%DATADIR%%3/js/server/modules/@arangodb/foxx/legacy/swaggerDocs.js
Error: Orphaned: @dir share/man/man1
Error: Orphaned: @dir share/man/man8
Error: Orphaned: @dir var/lib/arangodb3
Error: Orphaned: @dir var/lib/arangodb3-apps
Error: Orphaned: @dir var/log/arangodb3
===> Checking for items in pkg-plist which are not in STAGEDIR
===> Error: Plist issues found.
*** Error code 1
dev_dudu.ro marked an inline comment as done.

Silenced stage-qa and check-orphans.

How did you generate pkg-plist? The files listed in it are already relative to LOCALBASE and @dir should only specify directories that are empty.
The "make makeplist" target should generate a pkg-plist close to what you want, so then you need to review it and make any manual changes you need.

I had done it manually, it has been a long while since I submitted my previous FreeBSD port, I wasn't aware of these shortcuts, thanks for pointing them out!

I see that this piece of software bundles a few things already available as ports: v8, boost, curl, etc. It is preferable to not rely on bundled dependencies.
There is a summary why bundled libraries are bad here, but this applies to all dependencies in general:
https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/bundled-libs.html

Is it possible to unbundle some or all of these things?

Sadly ArangoDB has a very opinionated CMake configuration, it's far from ideal, I know. For instance it links against specific bits of the V8 library that are linked in a different fashion from the FreeBSD V8 port. On the upside all 3rd party dependencies bundled with Arango are statically linked into it so they don't pollute the global namespace.

The only way as far as I can tell to get rid of in-tree dependencies is to rewrite a good chunk of the CMake files. I'd rather get the port up and running and more eyes and testers on it and then work with ArangoDB on making their build system more flexible and FreeBSD friendly.

I can see in the build system that some components are hard to decouple.
Try decoupling what you can, like boost or libcurl.

Other than that, fix the plist and don't compress man pages and we can move on to more testing.

databases/arangodb32/Makefile
20

This list is short enough to go on one line. I tested this and I can confirm that bundled v8 doesn't build with ninja.

41

The ports system already compresses man pages on install, so you should not do this.

I can see in the build system that some components are hard to decouple.
Try decoupling what you can, like boost or libcurl.

There is an inconvenient add_subdirectory(3rdParty) that bundles everything unconditionally, is it OK if we leave that for now while we work with ArangoDB on untangling it?

Other than that, fix the plist and don't compress man pages and we can move on to more testing.

I will submit a new patch shortly that does not explicitly compress man pages. Other than that I think the plist looks good, unless I am missing the obvious (check-plist/check-orphans return successfully).

Thanks!

Do not explicitly gzip man pages.

Simplify the man page moving logic

databases/arangodb32/Makefile
22

This should happen earlier, see Chapter 14. Order of Variables in Port Makefiles.

dev_dudu.ro marked an inline comment as done.

Move USE_GITHUB to its rightful place.

databases/arangodb32/Makefile
16

I found it strange that this needed git to build, so I tried removing it. Turns out it does not need git at all, so you can remove this.

It does, however, need Python 2, you'll have to add python:2.7 to the USES line below.

21–22

When using cmake, it us usually better to use the type when setting a variable, it avoids mistakes and typos. Here:

-DUSE_JEMALLOC:BOOL=false
-DUSE_BACKTRACE:BOOL=true
-DBASE_LD_FLAGS:STRING=...

Remove git dependency and add python dependency

This looks pretty good, but %%DATADIR%%3 and %%DOCSDIR%%3 in pkg-plist should really be directories.
Can you consider configuring these to match the port name or maybe swithing the portname to arangodb3?

This looks pretty good, but %%DATADIR%%3 and %%DOCSDIR%%3 in pkg-plist should really be directories.
Can you consider configuring these to match the port name or maybe swithing the portname to arangodb3?

I'm not sure I understand what you mean - should I replace them with the actual final value - e.g. /usr/local/share, or add @dir entries for them to pkg-plist?

As for the renaming bit I was thinking of following the mongodbXY port convention and eventually add an arangodb33 port that is set to conflict with the arangodb32 port. Thoughts?

Thanks!

This looks pretty good, but %%DATADIR%%3 and %%DOCSDIR%%3 in pkg-plist should really be directories.
Can you consider configuring these to match the port name or maybe swithing the portname to arangodb3?

I'm not sure I understand what you mean - should I replace them with the actual final value - e.g. /usr/local/share, or add @dir entries for them to pkg-plist?

The directory that gets installed is /usr/local/share/arangodb3, which suggests that PORTNAME should be agangodb3?
There are several other places where arangodb3 name gets used. Example:

: ${arangod_dbpath="/var/db/arangodb3"}
: ${arangod_logpath="/var/log/arangodb3"}
: ${arangod_apppath="/var/db/arangodb3-apps"}

As for the renaming bit I was thinking of following the mongodbXY port convention and eventually add an arangodb33 port that is set to conflict with the arangodb32 port. Thoughts?

Versioning it like mongodbXY is a good idea in general, but it is useful if the two versions are incompatible or require special upgrade/migration steps (like postgresql).
Another consideration is how long do you expect people to run arangodb 3.2 once 3.3 is realeased.

Thanks!

dev_dudu.ro edited the summary of this revision. (Show Details)

Updated to 3.2.7
Addressed reviewer comments

This looks pretty good, but %%DATADIR%%3 and %%DOCSDIR%%3 in pkg-plist should really be directories.
Can you consider configuring these to match the port name or maybe swithing the portname to arangodb3?

I'm not sure I understand what you mean - should I replace them with the actual final value - e.g. /usr/local/share, or add @dir entries for them to pkg-plist?

The directory that gets installed is /usr/local/share/arangodb3, which suggests that PORTNAME should be agangodb3?
There are several other places where arangodb3 name gets used. Example:

: ${arangod_dbpath="/var/db/arangodb3"}
: ${arangod_logpath="/var/log/arangodb3"}
: ${arangod_apppath="/var/db/arangodb3-apps"}

As for the renaming bit I was thinking of following the mongodbXY port convention and eventually add an arangodb33 port that is set to conflict with the arangodb32 port. Thoughts?

Versioning it like mongodbXY is a good idea in general, but it is useful if the two versions are incompatible or require special upgrade/migration steps (like postgresql).
Another consideration is how long do you expect people to run arangodb 3.2 once 3.3 is realeased.

Thanks!

Thanks. I've polished the port, I think it should be OK now as arangodb32.

dev_dudu.ro edited the summary of this revision. (Show Details)
dev_dudu.ro added a reviewer: mat.

Update to 3.2.8

This doesn't build for me:

/work/stage/usr/local/share/arangodb/js/server/bootstrap/coordinator-database.js
CMake Error at cmake_install.cmake:87 (file):
  file INSTALL cannot find
  "/usr/home/lifanov/src/svn/freebsd/ports/head/databases/arangodb32/work/.build/var/log/arangodb3".
gmake[1]: *** [Makefile:99: install/strip] Error 1

This doesn't build for me:

/work/stage/usr/local/share/arangodb/js/server/bootstrap/coordinator-database.js
CMake Error at cmake_install.cmake:87 (file):
  file INSTALL cannot find
  "/usr/home/lifanov/src/svn/freebsd/ports/head/databases/arangodb32/work/.build/var/log/arangodb3".
gmake[1]: *** [Makefile:99: install/strip] Error 1

I had forgotten to add the cmake patch file, that should be fixed now.

Update the arangodb user directory

OK, this works now and looks pretty good.
Can you consider making some configuration files @sample?
https://www.freebsd.org/doc/en/books/porters-handbook/book.html#plist-config

There are two steps to it:

  1. install the file with .sample suffix (like arangod.conf.sample)
  2. list it with @sample in pkg-plist:

@sample %%ETCDIR%%/arangod.conf.sample

When pkg installs a package with @sample entries, these get copied to the correct location if the files are missing
and then the user can modify the configuration files without causing checksum mismatches and without the files
being clobbered on package update.

Install configuration files as samples.

OK, this works now and looks pretty good.
Can you consider making some configuration files @sample?
https://www.freebsd.org/doc/en/books/porters-handbook/book.html#plist-config

There are two steps to it:

  1. install the file with .sample suffix (like arangod.conf.sample)
  2. list it with @sample in pkg-plist:

@sample %%ETCDIR%%/arangod.conf.sample

When pkg installs a package with @sample entries, these get copied to the correct location if the files are missing
and then the user can modify the configuration files without causing checksum mismatches and without the files
being clobbered on package update.

Thanks for this, I'd forgotten about sample files, all done now!

I re-tested it and the port looks good now.
Would you like me to commit it?

Is there a Bugzilla issue for it?

This revision is now accepted and ready to land.Nov 21 2017, 3:04 PM

I re-tested it and the port looks good now.
Would you like me to commit it?

Is there a Bugzilla issue for it?

Thank you for your help thus far, it's been awesome! If you wouldn't mind committing the port, that would also be great. Here is the Bugzilla issue: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223240

This revision was automatically updated to reflect the committed changes.