Skip to content

Commit ee67d30

Browse files
committed
Update README.md
1 parent 13cb4e7 commit ee67d30

File tree

3 files changed

+407
-76
lines changed

3 files changed

+407
-76
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ repos:
33
hooks:
44
- id: make-scripts-executable
55
name: Make script files executable
6-
entry: bash -c 'git add --chmod=+x qbt-nox-static.bash qbittorrent-nox-static.sh'
6+
entry: bash -c 'git add --chmod=+x qi.bash qbt-nox-static.bash qbittorrent-nox-static.sh'
77
language: system
8-
files: '(qbt-nox-static\.bash|qbittorrent-nox-static\.sh)$'
8+
files: '(qi\.bash|qbt-nox-static\.bash|qbittorrent-nox-static\.sh)$'
99
pass_filenames: false
1010

1111
- repo: https://github.com/pre-commit/pre-commit-hooks

README.md

Lines changed: 145 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,165 +1,211 @@
1-
# qbittorrent-nox-static
1+
# qBittorrent-nox Static Builds
22

33
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9817ad80d35c480aa9842b53001d55b0)](https://app.codacy.com/gh/userdocs/qbittorrent-nox-static?utm_source=github.com&utm_medium=referral&utm_content=userdocs/qbittorrent-nox-static&utm_campaign=Badge_Grade)
44
[![CodeFactor](https://www.codefactor.io/repository/github/userdocs/qbittorrent-nox-static/badge)](https://www.codefactor.io/repository/github/userdocs/qbittorrent-nox-static)
55
[![CI](https://github.com/userdocs/qbittorrent-nox-static/actions/workflows/ci-main-reusable-caller.yml/badge.svg)](https://github.com/userdocs/qbittorrent-nox-static/actions/workflows/ci-main-reusable-caller.yml)
66

7-
## Summary
7+
Cross-platform static builds of qBittorrent-nox with the latest dependencies
88

9-
The `qbittorrent-nox-static` project is a `bash` build script that compiles a static `qbittorrent-nox` binary using the latest available dependencies from their source. These statically linked binaries can run on any matching CPU architecture and are not OS specific. This means you can run a `x86_64` Alpine edge build on any Linux based OS of like CentOS | Fedora | OpenSuse | Debian | Ubuntu and more.
9+
[📦 Latest Release](https://github.com/userdocs/qbittorrent-nox-static/releases/latest)[📖 Documentation](https://userdocs.github.io/qbittorrent-nox-static/introduction/)[🏷️ All Releases](https://github.com/userdocs/qbittorrent-nox-static/tags)
1010

1111
> [!TIP]
12-
> You don't need to use the script to access the binaries it creates, just use the [release tag](https://github.com/userdocs/qbittorrent-nox-static/tags) you need or [latest release page](https://github.com/userdocs/qbittorrent-nox-static/releases/latest)
12+
>
13+
> Docker: Use https://hotio.dev/containers/qbittorrent
14+
>
15+
> Libtorrent `v1.2` and `v2` static builds combined into a single docker image with vpn support.
1316
14-
See here for how to [install the latest release](https://github.com/userdocs/qbittorrent-nox-static?tab=readme-ov-file#install-the-latest-release)
17+
## 🚀 Quick Start
1518

16-
## Linked Github repositories
19+
### Quick Install
1720

18-
This build script uses and depends on some related repositories.
21+
> [!NOTE]
22+
>
23+
> `qi.bash`: The quick installer supports Alpine or Debian like systems.
1924
20-
- [qbt-musl-cross-make](https://github.com/userdocs/qbt-musl-cross-make)
21-
- [qbt-workflow-files](https://github.com/userdocs/qbt-workflow-files)
22-
- [qbt-ninja-build](https://github.com/userdocs/qbt-ninja-build)
23-
- [qbt-cmake-ninja-crossbuilds](https://github.com/userdocs/qbt-cmake-ninja-crossbuilds)
25+
Latest release using libtorrent `v2`
2426

25-
## Documentation
27+
```bash
28+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash
29+
```
2630

27-
> [!TIP]
28-
> Visit the [documentation](https://userdocs.github.io/qbittorrent-nox-static/introduction/) for in depth information on using this project and script usage.
31+
Latest release using libtorrent `v1.2`
32+
33+
```bash
34+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash -s -- --libtorrent v1
35+
```
2936

30-
## WSL2
37+
You can now run it using this command:
38+
39+
```bash
40+
~/bin/qbittorrent
41+
```
3142

3243
> [!TIP]
33-
> These static builds can be used on WSL2 and accessed via `localhost:8080` using the download instructions below
44+
> Access the WebUI at `http://localhost:8080`
3445
35-
## Install the latest release
46+
### What You Get
3647

37-
> [!TIP]
38-
> For the most current build visit the [latest release page](https://github.com/userdocs/qbittorrent-nox-static/releases/latest)
48+
**No installation hassles** - Single static binary
49+
**Latest versions** - Always up-to-date dependencies
50+
**Universal compatibility** - Runs on any Linux distro
51+
**Multiple architectures** - Support for ARM devices too
3952

40-
Or uses these commands for your arch:
53+
## 📋 Table of Contents
4154

42-
### x86
55+
- [Overview](#-overview)
56+
- [Features](#-features)
57+
- [Installation](#-installation)
58+
- [Libtorrent Versions](#-libtorrent-versions)
59+
- [Version Management](#-version-management)
60+
- [Dependency Tracking](#-dependency-tracking)
61+
- [Build Attestation](#%EF%B8%8F-build-attestation)
62+
- [Related Projects](#-related-projects)
63+
- [WSL2 Support](#-wsl2-support)
64+
- [Documentation](#-documentation)
65+
66+
## 🔍 Overview
67+
68+
The `qbittorrent-nox-static` project provides a bash build script that compiles static `qbittorrent-nox` binaries using the latest available dependencies from their source. These statically linked binaries offer several advantages:
69+
70+
- **Universal compatibility**: Run on any Linux distribution with matching CPU architecture
71+
- **No dependencies**: All required libraries are statically linked
72+
- **Latest versions**: Built with the most recent stable releases of all dependencies
73+
- **Multiple architectures**: Support for x86, x86_64, ARM variants
74+
75+
## ✨ Features
76+
77+
- 🔧 **Static compilation** - No external dependencies required
78+
- 🏗️ **Multi-architecture support** - x86, x86_64, armhf, armv7, aarch64
79+
- 📦 **Latest dependencies** - Always built with current stable versions
80+
- 🔄 **Automated builds** - CI/CD pipeline ensures fresh releases
81+
- 🛡️ **Build attestation** - Cryptographically signed provenance
82+
- 📊 **Version tracking** - JSON metadata for dependency versions
83+
84+
## 📦 Installation
85+
86+
Choose the command that matches your system architecture:
87+
88+
### x86 (32-bit Intel/AMD)
4389

4490
```bash
4591
mkdir -p ~/bin && source ~/.profile
4692
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86-qbittorrent-nox
4793
chmod 700 ~/bin/qbittorrent-nox
4894
```
4995

50-
### x86_64
96+
### x86_64 (64-bit Intel/AMD)
5197

5298
```bash
5399
mkdir -p ~/bin && source ~/.profile
54100
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86_64-qbittorrent-nox
55101
chmod 700 ~/bin/qbittorrent-nox
56102
```
57103

58-
### armhf (armv6)
104+
### armhf (ARM v6 - Raspberry Pi 1/Zero)
59105

60106
```bash
61107
mkdir -p ~/bin && source ~/.profile
62108
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armhf-qbittorrent-nox
63109
chmod 700 ~/bin/qbittorrent-nox
64110
```
65111

66-
### armv7
112+
### armv7 (ARM v7 - Raspberry Pi 2/3/4 32-bit)
67113

68114
```bash
69115
mkdir -p ~/bin && source ~/.profile
70116
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armv7-qbittorrent-nox
71117
chmod 700 ~/bin/qbittorrent-nox
72118
```
73119

74-
### aarch64
120+
### aarch64 (ARM 64-bit - Raspberry Pi 3/4/5 64-bit)
75121

76122
```bash
77123
mkdir -p ~/bin && source ~/.profile
78124
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/aarch64-qbittorrent-nox
79125
chmod 700 ~/bin/qbittorrent-nox
80126
```
81127

82-
## Libtorrent versions
128+
## 🔧 Libtorrent Versions
83129

84130
> [!IMPORTANT]
85-
> Libtorrent `v1.2` is currently the main branch supported by qBittorrent since a change with the release of [4.4.5](https://www.qbittorrent.org/news.php)
131+
> **Libtorrent v1.2** is currently the main branch supported by qBittorrent since the release of [4.4.5](https://www.qbittorrent.org/news.php). However, both v1.2 and v2.0 builds are provided.
86132
87-
Libtorrent `v2.0` builds are still released as latest releases as it it does not really matter to this project as it always builds and releases for both `v1.2` and `v2.0`. See the next section for how to get the version you need via the latest release URL.
133+
This project automatically builds and releases binaries for both Libtorrent versions:
134+
135+
- **Libtorrent v1.2**: Stable and widely supported (recommended)
136+
- **Libtorrent v2.0**: Latest features and improvements
88137

89138
> [!TIP]
90-
> You can view the current latest and pre releases and tags here <https://github.com/userdocs/qbittorrent-nox-static/tags>
139+
> You can view all current releases and pre-releases at <https://github.com/userdocs/qbittorrent-nox-static/tags>
91140
92-
## Getting the Version you want via the latest release URL
141+
## 🎯 Version Management
93142

94-
Since this project builds and releases both v1.2 and v2.0 builds simultaneously we can use the commands below to always get the latest version of the related pre release via the latest release `dependency-version.json` asset.
143+
### Getting Version-Specific Releases
95144

96-
Using this method it does not matter which version is the latest release or pre release as the commands will provide you the version specific info you need for the twinned latest/pre releases.
145+
Since this project builds both v1.2 and v2.0 simultaneously, you can target specific libtorrent versions using these commands:
97146

98-
For Libtorrent `v1.2`
147+
#### Libtorrent v1.2 Release Info
99148

100149
```bash
101150
jq -r '. | "release-\(.qbittorrent)_v\(.libtorrent_1_2)"' < <(curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json)
102151
```
103152

104-
For Libtorrent `v2.0`
153+
#### Libtorrent v2.0 Release Info
105154

106155
```bash
107156
jq -r '. | "release-\(.qbittorrent)_v\(.libtorrent_2_0)"' < <(curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json)
108157
```
109158

110-
## Revisions
111-
112-
The build has 5 main dependencies tracked that will trigger a rebuild on an update being available.
159+
### Build Revisions
113160

114-
- qBittorrent
115-
- Libtorrent
116-
- Qt
117-
- Boost
118-
- Openssl
161+
The build system tracks 5 main dependencies that trigger automatic rebuilds:
119162

120-
When a new build is triggered for updating `qBittorrent` or `Libtorrent` a new release will be generated as the release tags will be updated.
163+
- qBittorrent
164+
- Libtorrent
165+
- Qt
166+
- Boost
167+
- OpenSSL
121168

122-
Since I do not append revision info to tags `Qt` - `Boost` - `Openssl` or patched builds it will only update the existing release assets.
169+
**Revision Tracking:**
123170

124-
Revisions values are incremented in the `dependency-version.json` of the release. All new releases start at a revision of `0` and increment by `1` per revised build.
171+
- New releases start at revision `0`
172+
- Incremented by `1` for each rebuild
173+
- Updates to Qt, Boost, or OpenSSL only update existing release assets
174+
- Updates to qBittorrent or Libtorrent create new releases
125175

126-
### Tracking latest release revisions (Libtorrent v2.0)
127-
128-
Simply use this command.
176+
#### Check Latest Revision
129177

130178
```bash
131179
jq -r '.revision' < <(curl -sL "https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json")
132180
```
133181

134-
### Tracking v2.0 and v1.2 releases independently
182+
#### Track Specific Version Revisions
135183

136-
There are times when the revision counts may differ between `v2.0` and `v1.2` builds as the `dependency-version.json` is unique to the release but has some shared values that won't change. In this case you need to track them as independent values unique to their release.
184+
For independent tracking of v1.2 and v2.0 revisions:
137185

138-
To do this you start by getting the current release version value first, for example, getting the `v1.2` prerelease revision value.
186+
1. **Get the release tag:**
139187

140-
```bash
141-
release="$(jq -r '. | "release-\(.qbittorrent)_v\(.libtorrent_1_2)"' < <(curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json))"
142-
```
188+
```bash
189+
release="$(jq -r '. | "release-\(.qbittorrent)_v\(.libtorrent_1_2)"' < <(curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json))"
190+
```
143191

144-
Then get the revision from that specific release.
145-
146-
```bash
147-
jq -r '.revision' < <(curl -sL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${release}/dependency-version.json")
148-
```
192+
2. **Get the revision for that release:**
149193

150-
Now you have tracked the current revision of the latest release of the libtorrent v1.2 binary.
194+
```bash
195+
jq -r '.revision' < <(curl -sL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${release}/dependency-version.json")
196+
```
151197

152-
## Dependency json
198+
## 📊 Dependency Tracking
153199

154-
From `release-4.4.5` each release contains a `dependency-version.json` file that provide some key version information for that is shared across the latest release and the twinned pre release. This helps to overcome some limitations of the API for consistently and directly accessing this information.
200+
Each release includes a `dependency-version.json` file that provides version information shared across latest and pre-releases. This helps overcome API limitations for consistent access to version data.
155201

156-
Downloading the file like this:
202+
### Download Dependency Information
157203

158204
```bash
159205
curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json
160206
```
161207

162-
Will output a result like this:
208+
### Example Output
163209

164210
```json
165211
{
@@ -174,26 +220,22 @@ Will output a result like this:
174220
}
175221
```
176222

177-
As demonstrated above by using the latest release URL we can construct the tag of the twinned pre release and therefore the asset URL with no margin for error.
178-
179223
> [!IMPORTANT]
180-
> From the release of qBittorrent v5 configure based builds will be unsupported and we will only be able to use cmake to build qBittorrent v5 onwards. All releases from that point on will drop Qt5 builds as at this point cmake,Qt6 and v5 should be the default and preferred build combination with Qt5 being a legacy dependency.
181-
182-
## gh attestation verify
224+
> Starting with qBittorrent v5, configure-based builds will be unsupported. Only CMake builds will be available, with Qt6 as the default. Qt5 builds will be considered legacy and eventually dropped.
183225
184-
Binaries built from the release of release `release-5.0.0_v2.0.10` and `release-5.0.0_v1.2.19` revision `1` use [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance)
226+
## 🛡️ Build Attestation
185227

186-
Verify the integrity and provenance of an artifact using its associated cryptographically signed attestations.
228+
Binaries built from `release-5.0.0_v2.0.10` and `release-5.0.0_v1.2.19` revision `1` onwards use [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) for cryptographic verification.
187229

188-
https://cli.github.com/manual/gh_attestation_verify
230+
### Verify Binary Integrity
189231

190-
For example:
232+
You can verify the integrity and provenance of downloaded binaries using GitHub CLI:
191233

192234
```bash
193235
gh attestation verify x86_64-qbittorrent-nox -o userdocs
194236
```
195237

196-
Will give you this result for the `release-5.0.0_v2.0.10` revision `1` binary.
238+
### Example Verification Output
197239

198240
```bash
199241
Loaded digest sha256:a656ff57b03ee6218205d858679ea189246caaecbbcc38d4d2b57eb81d8e59bb for file://x86_64-qbittorrent-nox
@@ -204,3 +246,32 @@ sha256:a656ff57b03ee6218205d858679ea189246caaecbbcc38d4d2b57eb81d8e59bb was atte
204246
REPO PREDICATE_TYPE WORKFLOW
205247
userdocs/qbittorrent-nox-static https://slsa.dev/provenance/v1 .github/workflows/matrix_multi_build_and_release_qbt_workflow_files.yml@refs/heads/master
206248
```
249+
250+
For more information, visit the [GitHub CLI attestation documentation](https://cli.github.com/manual/gh_attestation_verify).
251+
252+
## 🔗 Related Projects
253+
254+
This build script depends on several related repositories:
255+
256+
- [qbt-musl-cross-make](https://github.com/userdocs/qbt-musl-cross-make) - Cross-compilation toolchain
257+
- [qbt-workflow-files](https://github.com/userdocs/qbt-workflow-files) - CI/CD workflow templates
258+
- [qbt-ninja-build](https://github.com/userdocs/qbt-ninja-build) - Ninja build system integration
259+
- [qbt-host-deps](https://github.com/userdocs/qbt-host-deps) - Host dependency management
260+
- [qbt-cmake-ninja-crossbuilds](https://github.com/userdocs/qbt-cmake-ninja-crossbuilds) - CMake cross-build configurations
261+
262+
## 💻 WSL2 Support
263+
264+
> [!TIP]
265+
> These static builds work perfectly on WSL2! After installation, access the WebUI at `localhost:8080` from your Windows browser.
266+
267+
The static nature of these builds makes them ideal for WSL2 environments where dependency management can be challenging.
268+
269+
## 📖 Documentation
270+
271+
> [!TIP]
272+
> For comprehensive documentation, visit the [project documentation](https://userdocs.github.io/qbittorrent-nox-static/introduction/) which covers:
273+
>
274+
> - Detailed build instructions
275+
> - Advanced configuration options
276+
> - Troubleshooting guides
277+
> - Contributing guidelines

0 commit comments

Comments
 (0)