Project

General

Profile

Build an Arvados development environment with OpenSSL 11 » History » Version 7

Brett Smith, 05/22/2024 08:02 PM
note historical

1 1 Brett Smith
h1. Build an Arvados development environment with OpenSSL 1.1
2
3 7 Brett Smith
h2. HISTORICAL
4
5
This page was written to address a deployment need for Arvados 2.5/2.6. Arvados 2.7 introduced support for Ruby 3.0+ which resolves this whole issue: you can deploy Arvados 2.7 on a distribution with OpenSSL 3.x and Ruby 3.x.
6
7 1 Brett Smith
h2. Background
8
9
The Arvados 2.x series requires Rails 5.2,
10
which requires Ruby 2.7,
11
which requires OpenSSL 1.1.
12
13
But Ubuntu 22.04+, Debian 12+, and RHEL 9+ all ship with OpenSSL 3. To get Arvados working on these distributions, you need to build OpenSSL 1.1 yourself, then build _a complete Ruby stack_ linked against it, including the @openssl@ and @pg@ gems. This page documents how to do that.
14
15
*This is expert-level stuff.* This page does not walk you through downloading, extracting, and navigating source. If you're not comfortable figuring out those steps yourself, then you probably won't be comfortable working with this stack once it's set up. Consider another development solution like arvbox.
16
17
h2. Environment assumptions
18
19
We're gonna install the whole stack under @/opt/arvados@. You can adjust to taste if you like.
20
21
I have @/var/lib/arvados@ symlinked to @/opt/arvados@ for compatibility with @arvados-server install@.
22
23
I have write permission to @/opt/arvados@, so I can install stuff without @sudo@ or any other elevated permissions.
24
25
I have @/opt/arvados/bin@ near the front of my @$PATH@. *This is important, even if the directory starts empty,* because some of these build steps will install tools here that later build steps need.
26
27
h2. Notes
28
29
I have documented the exact source code I used for all steps, but there should be a little slack in specific versions if needed.
30
31 2 Brett Smith
It might be possible to clean up some redundancy from the @configure@ lines, especially in @LDFLAGS@ settings. If you know better, feel free to make those edits.
32
33 1 Brett Smith
h2. Build steps
34
35 3 Brett Smith
h3. Install build dependencies
36
37
These are mostly for Ruby and should be enough to cover everything else.
38
39
<pre><code>sudo apt install bison build-essential file libffi-dev libgdbm-compat-dev libgdbm-dev libgmp-dev libncurses-dev libedit-dev libyaml-dev netbase pkg-config procps zlib1g-dev</code></pre>
40
41 1 Brett Smith
h3. OpenSSL 1.1
42
43
https://www.openssl.org/source/openssl-1.1.1v.tar.gz
44
45 5 Brett Smith
<pre><code>LDFLAGS="-Wl,-rpath=/opt/arvados/lib" ./config --prefix=/opt/arvados --openssldir=/opt/arvados/etc/ssl
46 1 Brett Smith
make -j6 test
47
make install</code></pre>
48
49
h3. Ruby 2.7 (including openssl gem)
50
51
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.7.tar.gz
52
53 2 Brett Smith
<pre><code>LDFLAGS="-Wl,-rpath=/opt/arvados/lib" ./configure --disable-install-static-library --enable-shared --disable-install-doc --prefix=/opt/arvados --with-openssl-dir=/opt/arvados
54 1 Brett Smith
make -j6
55
make install
56
gem install bundler --no-document
57
</code></pre>
58
59 6 Brett Smith
h3. libpq/PostgreSQL
60 1 Brett Smith
61
https://ftp.postgresql.org/pub/source/v15.4/postgresql-15.4.tar.bz2
62
63 6 Brett Smith
h4. What you should probably do: Complete install
64 1 Brett Smith
65 6 Brett Smith
@arvados-server boot@ will call @pg_config --bindir@ and expect to be able to find @initdb@ and @postgres@ under it. Because of that, you should probably just install the whole thing.
66
67 1 Brett Smith
<pre><code>LDFLAGS="-Wl,-rpath=/opt/arvados/lib" ./configure --prefix=/opt/arvados --with-ssl=openssl --with-includes=/opt/arvados/include --with-libraries=/opt/arvados/lib
68 6 Brett Smith
make -j6
69
make install
70
</code></pre>
71
72
h4. What I actually did: Fragile partial install
73
74
You can download the entire PostgreSQL source, configure it, then build and install just libpq and friends. Specific make tasks based on "this SO answer":https://stackoverflow.com/a/46386938.
75
76
@pg_config --bindir@ will return @/opt/arvados/bin@. To make @arvados-server boot@ happy, we symlink the binaries it needs from Debian's package.
77
78
<pre><code>LDFLAGS="-Wl,-rpath=/opt/arvados/lib" ./configure --prefix=/opt/arvados --with-ssl=openssl --with-includes=/opt/arvados/include --with-libraries=/opt/arvados/lib
79 1 Brett Smith
make -j6 -C src/backend generated-headers
80
make -j6 -C src/include install
81
make -j6 -C src/interfaces/libpq install
82
make -j6 -C src/bin/pg_config install
83 6 Brett Smith
ln -st /opt/arvados/bin /usr/lib/postgresql/15/bin/initdb /usr/lib/postgresql/15/bin/postgres
84 1 Brett Smith
</code></pre>
85
86
h3. pg gem 1.1.4
87
88
Run these steps in the @arvados/services/api@ directory. @bundle install@ will install all of the API server's dependencies, not just the @pg@ gem, but you were gonna do that sooner or later anyway so might as well now.
89
90 2 Brett Smith
<pre><code>cd .../arvados/services/api
91 1 Brett Smith
bundle config build.pg --with-opt-dir=/opt/arvados --with-pg-config=/opt/arvados/bin/pg_config
92
bundle install
93
</code></pre>
94
95
h2. Rest of the Arvados install
96
97
From here, you should be able to run @arvados-server install@ as described on "the hacking prerequisites dev environment":/projects/arvados/wiki/Hacking_prerequisites#Install-dev-environment. You can test that everything worked by running the API server tests (e.g., @run-tests.sh@ → @test services/api@).