Major update of the guide, feel free to mention me or correct any mistakes that might have slipped

Aeriem 2020-01-16 16:31:22 +01:00
parent 521050ab3d
commit 9064b66242

@ -4,59 +4,57 @@
Both are based on Debian. Debian 9.0 ships with a patched version of an older qBittorrent-nox release (3.3.7). qBittorrent 4.x has many improvements to the webUI component which are of particular use for headless operation. Both are based on Debian. Debian 9.0 ships with a patched version of an older qBittorrent-nox release (3.3.7). qBittorrent 4.x has many improvements to the webUI component which are of particular use for headless operation.
This guide outlines the steps needed to compile qBittorrent-nox 4.1.x and run it as a service. Both DietPi and Raspbian provide pre-compiled qBittorrent using either `dietpi-software` or `apt`. Use this guide if you want to run the most recent qBittorrent (and libtorrent-rasterbar). This guide outlines the steps needed to compile qBittorrent-nox 4.2.x and run it as a service. Both DietPi and Raspbian provide pre-compiled qBittorrent using either `dietpi-software` or `apt`. Use this guide if you want to run the most recent qBittorrent (and libtorrent-rasterbar).
This guide was made possible by the authors of the [Debian/Ubuntu compilation guide](https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu "Debian/Ubuntu compilation guide") and [Guide on running qBittorrent as a service](https://github.com/qbittorrent/qBittorrent/wiki/Setting-up-qBittorrent-on-Ubuntu-server-as-daemon-with-Web-interface-(15.04-and-newer) "Guide on running qBittorrent as a service"). A few DietPi-specific amendments are included. This guide was made possible by the authors of the [Debian/Ubuntu compilation guide](https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu "Debian/Ubuntu compilation guide") and [Guide on running qBittorrent as a service](https://github.com/qbittorrent/qBittorrent/wiki/Setting-up-qBittorrent-on-Ubuntu-server-as-daemon-with-Web-interface-(15.04-and-newer) "Guide on running qBittorrent as a service"). A few DietPi-specific amendments are included.
**Major update:**
**In order to bring this guide up-to-date with the latest changes, I will do a pretty major update of it. I tested the changes, but some things might have slipped. Please feel free to mention me ([Aeriem](https://github.com/Aeriem)) should any issues arise. A big thanks to the original author of this guide ([jtmoon79](https://github.com/jtmoon79)).**
# Table of Contents # Table of Contents
* [Dependencies ](#dependencies-) * [Dependencies](#dependencies)
* [Compiling Libtorrent ](#compiling-libtorrent-) * [Compiling Libtorrent](#compiling-libtorrent)
* Either * [Get the source code](#get-the-source-code)
* [A. `git clone` from repository](#a-git-clone-from-repository) * [A. `git clone` from repository](#a-git-clone-from-repository)
* [B. download the latest release](https://github.com/arvidn/libtorrent/releases) * [B. Download the latest release](#b-download-the-latest-release)
* [Compile Libtorrent 1.1.x](#compile-libtorrent-11x) * [Compile Libtorrent](#compile-libtorrent)
* [Add Libtorrent as system library ](#add-libtorrent-as-system-library-) * [Add Libtorrent as a system library](#add-libtorrent-as-a-system-library)
* [Compiling qBittorrent-nox ](#compiling-qbittorrent-nox-) * [Compiling qBittorrent-nox](#compiling-qbittorrent-nox)
* [Compile 4.1.x version](#compile-41x-version) * [Get the source code](#get-the-source-code-1)
* [A. `git clone` from repository](#a-git-clone-from-repository-1) * [A. `git clone` from repository](#a-git-clone-from-repository-1)
* [B. Download the release source code](https://github.com/qbittorrent/qBittorrent/releases) * [B. Download the latest release](#b-download-the-latest-release-1)
* [Compile qBittorrent-nox](#compile-qbittorrent-nox) * [Compile qBittorrent-nox](#compile-qbittorrent-nox)
* [Running qBittorrent-nox on boot ](#running-qbittorrent-nox-on-boot-) * [Running qBittorrent-nox on boot](#running-qbittorrent-nox-on-boot)
* [Add user for qBittorrent-nox service](#add-user-for-qbittorrent-nox-service) * [Add user for qBittorrent-nox service](#add-user-for-qbittorrent-nox-service)
* [Create systemd service file](#create-systemd-service-file) * [Create systemd service file](#create-systemd-service-file)
* [Run and check systemd service status](#run-and-check-systemd-service-status) * [Run and check systemd service status](#run-and-check-systemd-service-status)
* [Updating qBittorrent-nox ](#updating-qbittorrent-nox-) * [Updating qBittorrent-nox](#updating-qbittorrent-nox)
* [Get a copy of the latest qBittorrent release version](#get-a-copy-of-the-latest-qbittorrent-release-version) * [Updating an already compiled version of qBittorrent-nox](#updating-an-already-compiled-version-of-qBittorrent-nox)
* [check version, install, check version](#check-version-install-check-version) * [Checking the version to verify that the binary got updated](#checking-the-version-to-verify-that-the-binary-got-updated)
# Dependencies
# Dependencies <a name="dependencies"></a>
You will first need to install various tools and libraries needed for compilation. You will first need to install various tools and libraries needed for compilation.
~~~~ ~~~~
sudo apt-get install \ sudo apt install build-essential pkg-config automake libtool libc6-dev libboost-dev libboost-system-dev libboost-chrono-dev libboost-random-dev libssl-dev qtbase5-dev qttools5-dev-tools libqt5svg5-dev zlib1g-dev
build-essential \
pkg-config \
automake \
libtool \
libc6-dev \
libboost-dev \
libboost-system-dev \
libboost-chrono-dev \
libboost-random-dev \
libssl-dev \
qtbase5-dev \
qttools5-dev-tools \
libqt5svg5-dev \
zlib1g-dev
~~~~ ~~~~
If you choose to retrieve source code using `git clone` then also `sudo apt-get install git`. If you choose to retrieve source code using `git clone`, then also `sudo apt install git`.
# Compiling Libtorrent <a name="libtorrent"></a> # Compiling Libtorrent
DietPi's repositories include an older version of [Libtorrent](https://libtorrent.org/ "Libtorrent"). You will need to compile Libtorrent 1.1.x to get qBittorrent-nox 4.x running.
To get the Libtorrent 1.1.x source code, either DietPi's and Raspbian's repositories include older versions of [Libtorrent](https://libtorrent.org/). You will need to compile Libtorrent 1.2.x to get qBittorrent-nox 4.2.x running.
## Get the source code
Two versions of Libtorrent are currently maintained: 1.1.x and 1.2.x.
Since release 4.2.0, qBittorrent makes use of the newer 1.2.x version, so get the latest release of this one.
To get the Libtorrent source code, either:
A. `git clone ...` A. `git clone ...`
@ -68,37 +66,29 @@ B. `wget ...`
git clone https://github.com/arvidn/libtorrent.git git clone https://github.com/arvidn/libtorrent.git
cd libtorrent cd libtorrent
# select the latest release tag # select the latest release tag
git checkout $(git tag | grep libtorrent-1_1_ | sort -t _ -n -k 3 | tail -n 1) git checkout $(git tag | grep libtorrent-1_2_ | sort -t _ -n -k 3 | tail -n 1)
~~~~~ ~~~~~
### B. download [the latest release](https://github.com/arvidn/libtorrent/releases) ### B. Download the [latest release](https://github.com/arvidn/libtorrent/releases)
using release *libtorrent_1_2_0* in this example
~~~~~ ~~~~~
wget https://github.com/arvidn/libtorrent/archive/libtorrent_1_2_0.zip wget https://github.com/arvidn/libtorrent/archive/libtorrent-1_2_3.zip
unzip libtorrent_1_2_0.zip unzip libtorrent-1_2_3.zip
cd libtorrent-libtorrent_1_2_0 cd libtorrent-libtorrent-1_2_3
~~~~~ ~~~~~
NOTE: libtorrent 1.2 is reported to not work with the current release version of qBittorrent (4.1.6). You need to use libtorrent 1.1.x. ## Compile Libtorrent
## Compile Libtorrent 1.1.x
~~~~ ~~~~
./autotool.sh ./autotool.sh
export CXXFLAGS=-std=c++11 ./configure --disable-debug --enable-encryption --with-boost-libdir=/usr/lib/arm-linux-gnueabihf --with-libiconv CXXFLAGS="-std=c++14"
./configure \
--disable-debug \
--enable-encryption \
--with-boost-libdir=/usr/lib/arm-linux-gnueabihf \
--with-libiconv
make -j$(nproc) make -j$(nproc)
sudo make install sudo make install
~~~~~ ~~~~~
#### out of memory (OOM) #### out of memory (OOM)
If OOM errors occur then add a swap file. If OOM errors occur, add a swap file.
~~~~~ ~~~~~
sudo dd if=/dev/zero of=/.swapfile bs=1M count=1024 sudo dd if=/dev/zero of=/.swapfile bs=1M count=1024
@ -111,9 +101,9 @@ sudo swapoff /.swapfile
sudo rm /.swapfile sudo rm /.swapfile
~~~~~ ~~~~~
(Those commands were copied from [here](https://dev.deluge-torrent.org/wiki/Building/libtorrent#TemporarySwapFileforRasperryPiorlowmemorysystems)). (Those commands were copied from [here](https://dev.deluge-torrent.org/wiki/Building/libtorrent#TemporarySwapFileforRasperryPiorlowmemorysystems).)
One example manifestation of an OOM error on Raspbian OS looks like One example manifestation of an OOM error on Raspbian OS looks like:
~~~~~ ~~~~~
$ make $ make
@ -123,57 +113,49 @@ make[1]: Entering directory '/tmp/libtorrent-libtorrent_1_2_0/src'
g++: internal compiler error: Killed (program cc1plus) g++: internal compiler error: Killed (program cc1plus)
~~~~~ ~~~~~
## Add Libtorrent as system library <a name="systemlibrary"></a> ## Add Libtorrent as a system library
You will need to add Libtorrent as a system library or qBittorrent-nox won't run after you compile it. You will need to add Libtorrent as a system library or qBittorrent-nox won't run after you compile it.
Create file `/etc/ld.so.conf.d/libtorrent.conf` with contents Create a file `sudo nano /etc/ld.so.conf.d/libtorrent.conf` with contents `/usr/local/lib`.
~~~~~
/usr/local/lib
~~~~~
Run `sudo ldconfig` afterward. Run `sudo ldconfig` afterward.
Check if your <code>LD_LIBRARY_PATH</code> environment variable is set and the path <code>/usr/local/lib</code> is included. Check if your `LD_LIBRARY_PATH` environment variable is set and the path `/usr/local/lib` is included: run `env` in your terminal and look for `LD_LIBRARY_PATH`.
Simply run <code>env</code> in your terminal and look for <code>LD_LIBRARY_PATH</code>. If so, you are good to go. If not, add the path to the variable: `export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}`
If so, you are good to go. If not, add the path to the variable:
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
# Compiling qBittorrent-nox <a name="qbittorrentnox"></a> # Compiling qBittorrent-nox
## Compile 4.1.x version ## Get the source code
To get the qBittorrent-nox source code, either To get the qBittorrent-nox source code, either:
A. compile a cloned git repository _or_ A. `git clone ...`
B. download a release source code. B. `wget ...`
### A. `git clone` from repository ### A. `git clone` from repository
~~~~ ~~~~
git clone -b v4_1_x https://github.com/qbittorrent/qBittorrent git clone -b v4_2_x https://github.com/qbittorrent/qBittorrent
cd qBittorrent cd qBittorrent
~~~~~ ~~~~~
You may select the branch version on the [branches page](https://github.com/qbittorrent/qBittorrent/branches). You may select the branch version on the [branches page](https://github.com/qbittorrent/qBittorrent/branches).
### B. Download the [release source code](https://github.com/qbittorrent/qBittorrent/releases) ### B. Download the [latest release](https://github.com/qbittorrent/qBittorrent/releases)
Using release *release-4.1.5* in this example,
~~~~ ~~~~
wget https://github.com/qbittorrent/qBittorrent/archive/release-4.1.5.zip wget https://github.com/qbittorrent/qBittorrent/archive/release-4.2.1.zip
unzip release-4.1.5.zip unzip release-4.2.1.zip
cd qBittorrent-release-4.1.5 cd qBittorrent-release-4.2.1
~~~~~ ~~~~~
## Compile qBittorrent-nox ## Compile qBittorrent-nox
~~~~ ~~~~
./configure --disable-gui --enable-systemd --with-boost-libdir=/usr/lib/arm-linux-gnueabihf ./configure --disable-gui --enable-systemd --with-boost-libdir=/usr/lib/arm-linux-gnueabihf CXXFLAGS="-std=c++14"
make -j$(nproc) make -j$(nproc)
sudo make install sudo make install
~~~~~ ~~~~~
@ -182,27 +164,49 @@ NOTE: Review [Ubuntu/Debian compilation guide](https://github.com/qbittorrent/qB
The binary should be located at `/usr/local/bin/qbittorrent-nox`. If `qbittorrent-nox` was installed using `apt` then that binary will be at `/usr/bin/qbittorrent-nox`. _Do not confuse them!_ The binary should be located at `/usr/local/bin/qbittorrent-nox`. If `qbittorrent-nox` was installed using `apt` then that binary will be at `/usr/bin/qbittorrent-nox`. _Do not confuse them!_
**WebUI access information** **Web UI access informations**
* _http://localhost:8080_ * _http://localhost:8080_
* Username: _admin_ * Username: _admin_
* Password: _adminadmin_ * Password: _adminadmin_
qBittorrent-nox is currently installed as a terminal application, which is not optimal for headless use. We now will add qBittorrent-nox as a service. qBittorrent-nox is currently installed as a terminal application, which is not optimal for headless use. We now will add qBittorrent-nox as a service.
# Running qBittorrent-nox on boot <a name="onboot"></a> # Running qBittorrent-nox on boot
## Add user for qBittorrent-nox service ## Add user for qBittorrent-nox service
For Raspbian:
~~~~
sudo useradd -rm qbittorrent -G pi -s /usr/sbin/nologin
~~~~
For DietPi:
~~~~ ~~~~
sudo useradd -rm qbittorrent -G dietpi -s /usr/sbin/nologin sudo useradd -rm qbittorrent -G dietpi -s /usr/sbin/nologin
~~~~ ~~~~
## Create systemd service file ## Create systemd service file
_UPDATE:_ this may not be necessary if qBittorrent compilation was configured with flag `--enable-systemd`. _UPDATE:_ this **may** not be necessary if qBittorrent compilation was configured with flag `--enable-systemd`.
Create a systemd service file at `/etc/systemd/system/qbittorrent.service`. Contents are: Create a systemd service file `sudo nano /etc/systemd/system/qbittorrent.service`.
Contents for Raspbian:
~~~~
Description=qBittorrent Daemon Service
After=network.target
[Service]
User=qbittorrent
Group=pi
ExecStart=/usr/local/bin/qbittorrent-nox
ExecStop=/usr/bin/killall -w qbittorrent-nox
[Install]
WantedBy=multi-user.target
~~~~~
Contents for DietPi:
~~~~ ~~~~
Description=qBittorrent Daemon Service Description=qBittorrent Daemon Service
After=network.target After=network.target
@ -218,44 +222,35 @@ WantedBy=multi-user.target
~~~~~ ~~~~~
## Run and check systemd service status ## Run and check systemd service status
~~~~ ~~~~
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl start qbittorrent sudo systemctl start qbittorrent
sudo systemctl status qbittorrent sudo systemctl status qbittorrent
~~~~~ ~~~~~
The `systemctl status` command should show qBittorrent-nox is active and running. The `systemctl status` command should show qBittorrent-nox is `active (running)`.
Enable `qbittorrent` service during boot. Enable `qbittorrent` service during boot: `sudo systemctl enable qbittorrent`.
~~~~ # Updating qBittorrent-nox
sudo systemctl enable qbittorrent
~~~~~
# Updating qBittorrent-nox <a name="upqbt"></a> ## Updating an already compiled version of qBittorrent-nox
## Get a copy of the latest qBittorrent release version
On DietPi, you will need to run the following commands to update an already compiled version of qBittorrent-nox:
~~~~ ~~~~
systemctl stop qbittorrent systemctl stop qbittorrent
./configure --disable-gui --with-boost-libdir=/usr/lib/arm-linux-gnueabihf ./configure --disable-gui --with-boost-libdir=/usr/lib/arm-linux-gnueabihf CXXFLAGS="-std=c++14"
sudo make -j$(nproc) sudo make -j$(nproc)
make install make install
~~~~ ~~~~
## check version to verify that the binary got updated. ## Checking the version to verify that the binary got updated
~~~~ ~~~~
sudo systemctl stop qbittorrent sudo systemctl stop qbittorrent
/usr/local/bin/qbittorrent-nox --version /usr/local/bin/qbittorrent-nox --version
~~~~ ~~~~
If the version has changed then the new version was successfully compiled and installed! If the version has changed then the new version was successfully compiled and installed!
Restart the `qbittorrent` service. Restart the `qbittorrent` service: `sudo systemctl start qbittorrent`.
~~~~
sudo systemctl start qbittorrent
~~~~