2022-03-23 16:33:50 +01:00
# OpenBSD Build Guide
2015-09-28 11:24:23 +02:00
2022-05-20 15:34:13 +02:00
**Updated for OpenBSD [7.1 ](https://www.openbsd.org/71.html )**
2015-09-28 11:24:23 +02:00
2022-03-23 16:33:50 +01:00
This guide describes how to build bitcoind, command-line utilities, and GUI on OpenBSD.
2015-09-28 11:24:23 +02:00
2022-03-23 16:33:50 +01:00
## Preparation
### 1. Install Required Dependencies
Run the following as root to install the base dependencies for building.
2015-09-28 11:24:23 +02:00
```bash
2022-03-23 16:33:50 +01:00
pkg_add bash git gmake libevent libtool boost
2022-04-06 11:43:50 +02:00
# Select the newest version of the following packages:
2022-03-23 16:33:50 +01:00
pkg_add autoconf automake python
```
2017-10-03 04:15:55 +02:00
2022-03-23 16:33:50 +01:00
See [dependencies.md ](dependencies.md ) for a complete overview.
### 2. Clone Bitcoin Repo
Clone the Bitcoin Core repository to a directory. All build scripts and commands will run from this directory.
``` bash
2017-10-03 04:15:55 +02:00
git clone https://github.com/bitcoin/bitcoin.git
2015-09-28 11:24:23 +02:00
```
2022-03-23 16:33:50 +01:00
### 3. Install Optional Dependencies
2015-09-28 11:24:23 +02:00
2022-03-23 16:33:50 +01:00
#### Wallet Dependencies
2015-09-28 11:24:23 +02:00
2022-03-23 16:33:50 +01:00
It is not necessary to build wallet functionality to run either `bitcoind` or `bitcoin-qt` .
###### Descriptor Wallet Support
`sqlite3` is required to support [descriptor wallets ](descriptors.md ).
``` bash
2022-06-07 23:04:20 +02:00
pkg_add sqlite3
2022-03-23 16:33:50 +01:00
```
2015-09-28 11:24:23 +02:00
2022-03-23 16:33:50 +01:00
###### Legacy Wallet Support
BerkeleyDB is only required to support legacy wallets.
2015-09-28 11:24:23 +02:00
2017-11-16 05:26:02 +01:00
It is recommended to use Berkeley DB 4.8. You cannot use the BerkeleyDB library
2022-03-23 16:33:50 +01:00
from ports. However you can build it yourself, [using the installation script included in contrib/ ](/contrib/install_db4.sh ), like so, from the root of the repository.
2015-09-28 11:24:23 +02:00
2020-02-12 19:16:39 +01:00
```bash
2022-03-23 16:33:50 +01:00
./contrib/install_db4.sh `pwd`
2015-09-28 11:24:23 +02:00
```
2022-03-23 16:33:50 +01:00
Then set `BDB_PREFIX` :
2016-08-26 16:26:09 +02:00
2020-02-12 19:16:39 +01:00
```bash
2017-12-22 09:44:32 +01:00
export BDB_PREFIX="$PWD/db4"
```
2016-08-26 16:26:09 +02:00
2022-03-23 16:33:50 +01:00
#### GUI Dependencies
###### Qt5
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, Qt 5 is required.
```bash
pkg_add qt5
```
## Building Bitcoin Core
2015-09-28 11:24:23 +02:00
2020-02-12 19:16:39 +01:00
**Important**: Use `gmake` (the non-GNU `make` will exit with an error).
2015-09-28 11:24:23 +02:00
Preparation:
```bash
2018-05-21 16:43:04 +02:00
2022-03-23 16:33:50 +01:00
# Adapt the following for the version you installed (major.minor only):
export AUTOCONF_VERSION=2.71
2018-10-19 06:15:25 +02:00
export AUTOMAKE_VERSION=1.16
2018-05-21 16:43:04 +02:00
2015-09-28 11:24:23 +02:00
./autogen.sh
```
2022-03-23 16:33:50 +01:00
### 1. Configuration
2015-09-28 11:24:23 +02:00
2022-05-20 15:34:13 +02:00
Note that external signer support is currently not available on OpenBSD, since
the used header-only library Boost.Process fails to compile (certain system
calls and preprocessor defines like `waitid()` and `WEXITED` are missing).
2021-06-24 14:58:42 +02:00
2022-03-23 16:33:50 +01:00
There are many ways to configure Bitcoin Core, here are a few common examples:
##### Descriptor Wallet and GUI:
This enables the GUI and descriptor wallet support, assuming `sqlite` and `qt5` are installed.
2015-09-28 11:24:23 +02:00
```bash
2022-05-20 15:34:13 +02:00
./configure MAKE=gmake
2015-09-28 11:24:23 +02:00
```
2022-03-23 16:33:50 +01:00
##### Descriptor & Legacy Wallet. No GUI:
This enables support for both wallet types and disables the GUI:
2020-09-07 04:16:57 +02:00
```bash
2022-05-20 15:34:13 +02:00
./configure --with-gui=no \
2020-09-07 04:16:57 +02:00
BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" \
BDB_CFLAGS="-I${BDB_PREFIX}/include" \
MAKE=gmake
```
2022-03-23 16:33:50 +01:00
### 2. Compile
**Important**: Use `gmake` (the non-GNU `make` will exit with an error).
2015-09-28 11:24:23 +02:00
```bash
2022-03-23 16:33:50 +01:00
gmake # use "-j N" for N parallel jobs
gmake check # Run tests if Python 3 is available
2015-09-28 11:24:23 +02:00
```
2022-03-23 16:33:50 +01:00
## Resource limits
2015-09-28 11:24:23 +02:00
2017-12-22 09:44:32 +01:00
If the build runs into out-of-memory errors, the instructions in this section
might help.
The standard ulimit restrictions in OpenBSD are very strict:
2022-03-23 16:33:50 +01:00
```bash
data(kbytes) 1572864
```
2017-12-22 09:44:32 +01:00
2018-10-25 21:58:08 +02:00
This is, unfortunately, in some cases not enough to compile some `.cpp` files in the project,
2017-12-22 09:44:32 +01:00
(see issue [#6658 ](https://github.com/bitcoin/bitcoin/issues/6658 )).
If your user is in the `staff` group the limit can be raised with:
2022-03-23 16:33:50 +01:00
```bash
ulimit -d 3000000
```
2017-12-22 09:44:32 +01:00
The change will only affect the current shell and processes spawned by it. To
make the change system-wide, change `datasize-cur` and `datasize-max` in
`/etc/login.conf` , and reboot.