Skip to content

Commit c450661

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

File tree

3 files changed

+400
-77
lines changed

3 files changed

+400
-77
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: 136 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,165 +1,201 @@
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

11-
> [!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)
11+
## 🚀 Quick Start
1312

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)
13+
### Quick Install
1514

16-
## Linked Github repositories
15+
Latest release using libtorrent `v2`
1716

18-
This build script uses and depends on some related repositories.
17+
```bash
18+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash
19+
```
1920

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)
21+
Latest release using libtorrent `v1.2`
2422

25-
## Documentation
23+
```bash
24+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash -s -- --libtorrent v1
25+
```
2626

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.
27+
You can now run it using this command:
2928

30-
## WSL2
29+
```bash
30+
~/bin/qbittorrent
31+
```
3132

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

37-
> [!TIP]
38-
> For the most current build visit the [latest release page](https://github.com/userdocs/qbittorrent-nox-static/releases/latest)
38+
**No installation hassles** - Single static binary
39+
**Latest versions** - Always up-to-date dependencies
40+
**Universal compatibility** - Runs on any Linux distro
41+
**Multiple architectures** - Support for ARM devices too
42+
43+
## 📋 Table of Contents
3944

40-
Or uses these commands for your arch:
45+
- [Overview](#-overview)
46+
- [Features](#-features)
47+
- [Installation](#-installation)
48+
- [Libtorrent Versions](#-libtorrent-versions)
49+
- [Version Management](#-version-management)
50+
- [Dependency Tracking](#-dependency-tracking)
51+
- [Build Attestation](#%EF%B8%8F-build-attestation)
52+
- [Related Projects](#-related-projects)
53+
- [WSL2 Support](#-wsl2-support)
54+
- [Documentation](#-documentation)
4155

42-
### x86
56+
## 🔍 Overview
57+
58+
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:
59+
60+
- **Universal compatibility**: Run on any Linux distribution with matching CPU architecture
61+
- **No dependencies**: All required libraries are statically linked
62+
- **Latest versions**: Built with the most recent stable releases of all dependencies
63+
- **Multiple architectures**: Support for x86, x86_64, ARM variants
64+
65+
## ✨ Features
66+
67+
- 🔧 **Static compilation** - No external dependencies required
68+
- 🏗️ **Multi-architecture support** - x86, x86_64, armhf, armv7, aarch64
69+
- 📦 **Latest dependencies** - Always built with current stable versions
70+
- 🔄 **Automated builds** - CI/CD pipeline ensures fresh releases
71+
- 🛡️ **Build attestation** - Cryptographically signed provenance
72+
- 📊 **Version tracking** - JSON metadata for dependency versions
73+
74+
## 📦 Installation
75+
76+
Choose the command that matches your system architecture:
77+
78+
### x86 (32-bit Intel/AMD)
4379

4480
```bash
4581
mkdir -p ~/bin && source ~/.profile
4682
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86-qbittorrent-nox
4783
chmod 700 ~/bin/qbittorrent-nox
4884
```
4985

50-
### x86_64
86+
### x86_64 (64-bit Intel/AMD)
5187

5288
```bash
5389
mkdir -p ~/bin && source ~/.profile
5490
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86_64-qbittorrent-nox
5591
chmod 700 ~/bin/qbittorrent-nox
5692
```
5793

58-
### armhf (armv6)
94+
### armhf (ARM v6 - Raspberry Pi 1/Zero)
5995

6096
```bash
6197
mkdir -p ~/bin && source ~/.profile
6298
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armhf-qbittorrent-nox
6399
chmod 700 ~/bin/qbittorrent-nox
64100
```
65101

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

68104
```bash
69105
mkdir -p ~/bin && source ~/.profile
70106
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armv7-qbittorrent-nox
71107
chmod 700 ~/bin/qbittorrent-nox
72108
```
73109

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

76112
```bash
77113
mkdir -p ~/bin && source ~/.profile
78114
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/aarch64-qbittorrent-nox
79115
chmod 700 ~/bin/qbittorrent-nox
80116
```
81117

82-
## Libtorrent versions
118+
## 🔧 Libtorrent Versions
83119

84120
> [!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)
121+
> **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.
86122
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.
123+
This project automatically builds and releases binaries for both Libtorrent versions:
124+
125+
- **Libtorrent v1.2**: Stable and widely supported (recommended)
126+
- **Libtorrent v2.0**: Latest features and improvements
88127

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

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.
133+
### Getting Version-Specific Releases
95134

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.
135+
Since this project builds both v1.2 and v2.0 simultaneously, you can target specific libtorrent versions using these commands:
97136

98-
For Libtorrent `v1.2`
137+
#### Libtorrent v1.2 Release Info
99138

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

104-
For Libtorrent `v2.0`
143+
#### Libtorrent v2.0 Release Info
105144

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

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

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

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.
153+
- qBittorrent
154+
- Libtorrent
155+
- Qt
156+
- Boost
157+
- OpenSSL
121158

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

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.
161+
- New releases start at revision `0`
162+
- Incremented by `1` for each rebuild
163+
- Updates to Qt, Boost, or OpenSSL only update existing release assets
164+
- Updates to qBittorrent or Libtorrent create new releases
125165

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

130168
```bash
131169
jq -r '.revision' < <(curl -sL "https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json")
132170
```
133171

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

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.
174+
For independent tracking of v1.2 and v2.0 revisions:
137175

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

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-
```
178+
```bash
179+
release="$(jq -r '. | "release-\(.qbittorrent)_v\(.libtorrent_1_2)"' < <(curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json))"
180+
```
143181

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-
```
182+
2. **Get the revision for that release:**
149183

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

152-
## Dependency json
188+
## 📊 Dependency Tracking
153189

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.
190+
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.
155191

156-
Downloading the file like this:
192+
### Download Dependency Information
157193

158194
```bash
159195
curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json
160196
```
161197

162-
Will output a result like this:
198+
### Example Output
163199

164200
```json
165201
{
@@ -174,26 +210,22 @@ Will output a result like this:
174210
}
175211
```
176212

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-
179213
> [!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
214+
> 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.
183215
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)
216+
## 🛡️ Build Attestation
185217

186-
Verify the integrity and provenance of an artifact using its associated cryptographically signed attestations.
218+
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.
187219

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

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

192224
```bash
193225
gh attestation verify x86_64-qbittorrent-nox -o userdocs
194226
```
195227

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

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

0 commit comments

Comments
 (0)