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!