Kategorien
Allgemein Linux Wissen

Quickie: borg Backup unter Linux Mint compilieren

In der offiziellen Anleitung unter https://borgbackup.readthedocs.io/en/1.2-maint/installation.html wird beschrieben, wie man borg Backup direkt aus dem git Repository übersetzt.

Soweit, so gut.

Unter Linux Mint sollte es mit der Anleitung für Ubuntu funktionieren; allerdings begegnen wir hier zwei Schwierigkeiten:

  • Es gibt dort keine libdeflate.pc für pkgconfig
  • Aktuell (Stand: 01.05.2022) bringen die Repositories python 3.8.10 mit, die aktuelle Build-Umgebung erfordert python 3.10

Unser erster beherzter Versuch, das Programm zu übersetzen, geht also getrost in die Hose:

(borg-env) root@predator:~/work/borg# pip install -e .
Obtaining file:///root/work/borg
Installing build dependencies … done
Getting requirements to build wheel … error
ERROR: Command errored out with exit status 1:
command: /root/work/borg-env/bin/python /tmp/tmpw56tmeen get_requires_for_build_wheel /tmp/tmpznxt2x99
cwd: /root/work/borg
Complete output (22 lines):
Detected and preferring libcrypto [via pkg-config]
Detected and preferring liblz4 [via pkg-config]
Detected and preferring libzstd [via pkg-config]
Detected and preferring libxxhash [via pkg-config]
Traceback (most recent call last):
File "/tmp/tmpw56tmeen", line 280, in
main()
File "/tmp/tmpw56tmeen", line 263, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
File "/tmp/tmpw56tmeen", line 114, in get_requires_for_build_wheel
return hook(config_settings)
File "/tmp/pip-build-env-6ryfad3j/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 177, in get_requires_for_build_wheel
return self._get_build_requires(
File "/tmp/pip-build-env-6ryfad3j/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 159, in _get_build_requires
self.run_setup()
File "/tmp/pip-build-env-6ryfad3j/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 174, in run_setup
exec(compile(code, file, 'exec'), locals())
File "setup.py", line 189, in
lib_ext_kwargs(pc, 'BORG_LIBDEFLATE_PREFIX', 'deflate', 'libdeflate', '>= 1.5'),
File "setup.py", line 154, in lib_ext_kwargs
raise Exception(
Exception: Could not find deflate lib/headers, please set BORG_LIBDEFLATE_PREFIX or ensure libdeflate.pc is in PKG_CONFIG_PATH.

<!-- wp:paragraph -->
<p>ERROR: Command errored out with exit status 1: /root/work/borg-env/bin/python /tmp/tmpw56tmeen get_requires_for_build_wheel /tmp/tmpznxt2x99 Check the logs for full command output.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>(borg-env) root@predator:~/work/borg# aptitude search libdeflate | grep "i "<br>i libdeflate-dev - headers for whole-buffer compression and decompression library<br>i A libdeflate0 - fast, whole-buffer DEFLATE-based compression and decompression</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>(borg-env) root@predator:~/work/borg#</p>
<!-- /wp:paragraph -->

Systemvoraussetzungen

Python und alle (benötigten) Libraries usw. installieren:

sudo apt-get install python3 python3-dev python3-pip python3-virtualenv \
libacl1-dev libacl1 \
libssl-dev \
liblz4-dev libzstd-dev libxxhash-dev \
build-essential \
pkg-config python3-pkgconfig
sudo apt-get install libfuse-dev fuse
sudo apt-get install libfuse3-dev fuse3

Wer git noch nicht hat…

sudo apt-get install git

Zusätzlich benötigen wir noch libdeflate:

sudo apt-get install libdeflate-dev libdeflate0

Der eigentliche build

Ich übersetze borg im Verzeichnis /root/work (never work as root^^)

git verewigt den Quellcode unter /root/work/borg, die Build-Umgebung soll unter /root/work/borg-env residieren.

cd /root/work
# get borg from github
git clone https://github.com/borgbackup/borg.git
# create a virtual environment
virtualenv --python=$(which python3) borg-env
source borg-env/bin/activate   # always before using!

Hinweis: In der oben verlinkten Anleitung ist ein Tippfehler. Hier kommen runde statt geschweifter Klammern zum Einsatz, es muss $(which pyton3) und nicht ${which python3} heißen.

# install borg + dependencies into virtualenv
cd borg
pip install -r requirements.d/development.txt
pip install -r requirements.d/docs.txt  # optional, to build the docs

Nun widmen wir uns den eingangs erwähnten Problemen. Zuerst setzen wir eine Variable, die der build-Umgebung den Pfad zur deflate-Library mitteilt:

export BORG_LIBDEFLATE_PREFIX=/usr/src/linux-headers-$(uname -r)/include/config/pstore/deflate

Die Versionsabhängigkeit in Bezug auf den Python-Interpreter lösen wir, indem wir eine Zeile in der setup.cfg verändern.

Im Abschnitt [options] finden wir die minimale Versionsangabe. Aus

python_requires = >=3.10

wird nach einem beherzten Eingriff:

python_requires = >=3.8.10

Danach lässt sich borg problemlos übersetzen:

pip install -e .

Viel Erfolg!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.