Skip to content

Commit fb2370c

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

File tree

3 files changed

+401
-77
lines changed

3 files changed

+401
-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: 139 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,165 +1,204 @@
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+
> [!WARNING]
16+
> The quick installer supports Alpine or Debian like systems.
1717
18-
This build script uses and depends on some related repositories.
18+
Latest release using libtorrent `v2`
1919

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)
20+
```bash
21+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash
22+
```
2423

25-
## Documentation
24+
Latest release using libtorrent `v1.2`
2625

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.
26+
```bash
27+
curl -sL https://raw.githubusercontent.com/userdocs/qbittorrent-nox-static/refs/heads/master/qi.bash | bash -s -- --libtorrent v1
28+
```
2929

30-
## WSL2
30+
You can now run it using this command:
31+
32+
```bash
33+
~/bin/qbittorrent
34+
```
3135

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

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

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

42-
### x86
48+
- [Overview](#-overview)
49+
- [Features](#-features)
50+
- [Installation](#-installation)
51+
- [Libtorrent Versions](#-libtorrent-versions)
52+
- [Version Management](#-version-management)
53+
- [Dependency Tracking](#-dependency-tracking)
54+
- [Build Attestation](#%EF%B8%8F-build-attestation)
55+
- [Related Projects](#-related-projects)
56+
- [WSL2 Support](#-wsl2-support)
57+
- [Documentation](#-documentation)
58+
59+
## 🔍 Overview
60+
61+
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:
62+
63+
- **Universal compatibility**: Run on any Linux distribution with matching CPU architecture
64+
- **No dependencies**: All required libraries are statically linked
65+
- **Latest versions**: Built with the most recent stable releases of all dependencies
66+
- **Multiple architectures**: Support for x86, x86_64, ARM variants
67+
68+
## ✨ Features
69+
70+
- 🔧 **Static compilation** - No external dependencies required
71+
- 🏗️ **Multi-architecture support** - x86, x86_64, armhf, armv7, aarch64
72+
- 📦 **Latest dependencies** - Always built with current stable versions
73+
- 🔄 **Automated builds** - CI/CD pipeline ensures fresh releases
74+
- 🛡️ **Build attestation** - Cryptographically signed provenance
75+
- 📊 **Version tracking** - JSON metadata for dependency versions
76+
77+
## 📦 Installation
78+
79+
Choose the command that matches your system architecture:
80+
81+
### x86 (32-bit Intel/AMD)
4382

4483
```bash
4584
mkdir -p ~/bin && source ~/.profile
4685
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86-qbittorrent-nox
4786
chmod 700 ~/bin/qbittorrent-nox
4887
```
4988

50-
### x86_64
89+
### x86_64 (64-bit Intel/AMD)
5190

5291
```bash
5392
mkdir -p ~/bin && source ~/.profile
5493
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/x86_64-qbittorrent-nox
5594
chmod 700 ~/bin/qbittorrent-nox
5695
```
5796

58-
### armhf (armv6)
97+
### armhf (ARM v6 - Raspberry Pi 1/Zero)
5998

6099
```bash
61100
mkdir -p ~/bin && source ~/.profile
62101
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armhf-qbittorrent-nox
63102
chmod 700 ~/bin/qbittorrent-nox
64103
```
65104

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

68107
```bash
69108
mkdir -p ~/bin && source ~/.profile
70109
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/armv7-qbittorrent-nox
71110
chmod 700 ~/bin/qbittorrent-nox
72111
```
73112

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

76115
```bash
77116
mkdir -p ~/bin && source ~/.profile
78117
wget -qO ~/bin/qbittorrent-nox https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/aarch64-qbittorrent-nox
79118
chmod 700 ~/bin/qbittorrent-nox
80119
```
81120

82-
## Libtorrent versions
121+
## 🔧 Libtorrent Versions
83122

84123
> [!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)
124+
> **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.
86125
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.
126+
This project automatically builds and releases binaries for both Libtorrent versions:
127+
128+
- **Libtorrent v1.2**: Stable and widely supported (recommended)
129+
- **Libtorrent v2.0**: Latest features and improvements
88130

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

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.
136+
### Getting Version-Specific Releases
95137

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

98-
For Libtorrent `v1.2`
140+
#### Libtorrent v1.2 Release Info
99141

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

104-
For Libtorrent `v2.0`
146+
#### Libtorrent v2.0 Release Info
105147

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

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

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

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.
156+
- qBittorrent
157+
- Libtorrent
158+
- Qt
159+
- Boost
160+
- OpenSSL
121161

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

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

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

130171
```bash
131172
jq -r '.revision' < <(curl -sL "https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json")
132173
```
133174

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

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

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

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

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

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

152-
## Dependency json
191+
## 📊 Dependency Tracking
153192

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.
193+
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.
155194

156-
Downloading the file like this:
195+
### Download Dependency Information
157196

158197
```bash
159198
curl -sL https://github.com/userdocs/qbittorrent-nox-static/releases/latest/download/dependency-version.json
160199
```
161200

162-
Will output a result like this:
201+
### Example Output
163202

164203
```json
165204
{
@@ -174,26 +213,22 @@ Will output a result like this:
174213
}
175214
```
176215

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-
179216
> [!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
217+
> 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.
183218
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)
219+
## 🛡️ Build Attestation
185220

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

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

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

192227
```bash
193228
gh attestation verify x86_64-qbittorrent-nox -o userdocs
194229
```
195230

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

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

0 commit comments

Comments
 (0)