Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libtorrent.so 0.13.8 crash on Rasberry PI4 kernel due to unaligned access #244

Open
MetalKnight opened this issue Jul 5, 2023 · 5 comments

Comments

@MetalKnight
Copy link

libtorrent 0.13.8, distributed with rtorrent 0.9.8
raspberry PI4 kernel version: 6.1.21-v8+ aarch64 GNU/Linux

rtorrent runs on a Raspberry PI 4 with storage configured to ext4 HDD.
was running fine for ages, I've updated the PI4 to the latest update yesterday and now rtorrent crashes after downloading some data from a torrent.
restarting the process makes it crash the sameway after the file chcksum has been completed

Caught SIGBUS, dumping stack:
rtorrent() [0x1fdf0]
/lib/arm-linux-gnueabihf/libc.so.6(__default_rt_sa_restorer+0) [0xf7493910]
/usr/lib/arm-linux-gnueabihf/libtorrent.so.21(+0xd3af4) [0xf792aaf4]
/usr/lib/arm-linux-gnueabihf/libtorrent.so.21(_ZN7torrent9PollEPoll7performEv+0xe0) [0xf7894984]
/usr/lib/arm-linux-gnueabihf/libtorrent.so.21(_ZN7torrent9PollEPoll7do_pollExi+0x78) [0xf7894adc]
/usr/lib/arm-linux-gnueabihf/libtorrent.so.21(_ZN7torrent11thread_base10event_loopEPS0_+0x174) [0xf78d189c]
rtorrent() [0x1e660]
/lib/arm-linux-gnueabihf/libc.so.6(__libc_start_main+0x114) [0xf747b740]

Error: Success
Signal code '1': Invalid address alignment.
Fault address: 0x110946d
The fault address is not part of any chunk.

using gdb gets the following information that shows that the issue is indeed in Thread 1 running libtorrent.so

(gdb) thread apply all backtrace

Thread 3 (Thread 0xf5dff200 (LWP 1536) "rtorrent scgi"):
#0  0xf7a7a1dc in epoll_wait (epfd=13, events=0x1f6750, maxevents=1024, timeout=600001) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1  0xf7dce898 in torrent::PollEPoll::poll(int) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#2  0xf7dceac8 in torrent::PollEPoll::do_poll(long long, int) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#3  0xf7e0b89c in torrent::thread_base::event_loop(torrent::thread_base*) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#4  0xf7af8310 in start_thread (arg=0xf5dff200) at pthread_create.c:477
#5  0xf7a79da8 in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:73 from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 2 (Thread 0xf6770200 (LWP 1535) "rtorrent disk"):
#0  0xf7a7a1dc in epoll_wait (epfd=10, events=0x1f01b8, maxevents=1024, timeout=10001) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1  0xf7dce898 in torrent::PollEPoll::poll(int) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#2  0xf7dceac8 in torrent::PollEPoll::do_poll(long long, int) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#3  0xf7e0b89c in torrent::thread_base::event_loop(torrent::thread_base*) () fro--Type <RET> for more, q to quit, c to continue without paging--
m /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#4  0xf7af8310 in start_thread (arg=0xf6770200) at pthread_create.c:477
#5  0xf7a79da8 in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:73 from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 1 (Thread 0xf6c2b040 (LWP 1531) "rtorrent main"):
#0  0xf7e64af4 in ?? () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#1  0xf7dce984 in torrent::PollEPoll::perform() () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#2  0xf7dceadc in torrent::PollEPoll::do_poll(long long, int) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#3  0xf7e0b89c in torrent::thread_base::event_loop(torrent::thread_base*) () from /usr/lib/arm-linux-gnueabihf/libtorrent.so.21
#4  0x0001e660 in ?? ()
#5  0xf79b5740 in __libc_start_main (main=0xfffef6e4, argc=-139534336, argv=0xf79b5740 <__libc_start_main+276>, init=<optimized out>, fini=0x170f98, rtld_fini=0xf7fcd510 <_dl_fini>, stack_end=0xfffef6e4) at libc-start.c:308
#6  0x0001f2c0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
@MetalKnight
Copy link
Author

awaiting instructions on how to provide you further debug info.
thanks

@MetalKnight
Copy link
Author

kernel alignment options

sudo modprobe configs
zgrep ALIGN /proc/config.gz
# CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_CMA_ALIGNMENT=8
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set

@MetalKnight
Copy link
Author

some debug thoughts taken from
epics-base/pvDataCPP#84

@MetalKnight
Copy link
Author

MetalKnight commented Jul 6, 2023

I've found a workaround:

  • build the source code of rakshasa/libtorrent with configure plus option --enable-aligned
  • of course I had to manually build the rtorrent binary as well against the previous library
  • I also had to manually install: libssl-dev, libncurses5-dev, libncursesw5-dev, autoconf-archive, libcurl-dev.

I can revert to the old binary anytime if you still need me to help with debug the unaligned issue.

@stickz
Copy link
Contributor

stickz commented Jan 3, 2024

Thanks so much for reporting this information. I would like to add information here. This also happens on x86 - not just ARM. I can confirm that configuring rakshasa/libtorrent with --enable-aligned resolves the problem.

../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: No such file or directory.
(gdb) bt
#0  __memmove_avx_unaligned () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:222
#1  0x00007ffff7dfd269 in torrent::Chunk::to_buffer(void*, unsigned int, unsigned int) () from /lib/libtorrent.so.21
#2  0x00007ffff7e2ad0c in torrent::PeerConnectionBase::up_chunk() () from /lib/libtorrent.so.21
#3  0x00007ffff7e2eb3a in torrent::PeerConnection<(torrent::Download::ConnectionType)1>::event_write() ()
   from /lib/libtorrent.so.21
#4  0x00007ffff7dd0848 in torrent::PollEPoll::perform() () from /lib/libtorrent.so.21
#5  0x00007ffff7df3b62 in torrent::thread_base::event_loop(torrent::thread_base*) () from /lib/libtorrent.so.21
#6  0x000055555558e8c4 in main ()

stickz added a commit to stickz/docker-rtorrent-rutorrent that referenced this issue Jan 3, 2024
rTorrent requires the usage of aligned memory access on all platforms (x86 and ARM) to prevent a memory access crash from happening. As such, we need to configure libtorrent with `--enable-aligned` to enable the feature.

This is also more efficient for CPU usage at the cost of slightly more memory consumption.  However, due to the relatively small usage of memory, all platforms will benefit.

More information can be found here: rakshasa/libtorrent#244
Cryptik-Rick added a commit to Cryptik-Rick/docker-rtorrent-rutorrent that referenced this issue Jun 9, 2024
* cleanup workflow

* Bump action to latest major

* readme: fix badge and typo

* readme: update about section

* Alpine Linux 3.17

Also update to PHP 8.1 and Nginx 1.22.1.

GeoIP2 extension has been updated to 1.3.1 from a fork for
compat with PHP 8.1.

Created a fork of xmlrpc-c on GitHub to fix issues with SVN
checkout from Sourceforge.

* Set  S6_KILL_GRACETIME to 10 seconds (crazy-max#171)

* Align xmlrpc-c version

* ci: increase timeout

* Update CHANGELOG

* Configure xml-rpc correctly

`xmlrpc-c` is not configured properly. It will cause a very significant performance regression, if the `wininet` and `libwww` clients are not disabled. We want `xmlrpc-c` to use `curl` because it's razor fast and stable. These changes require testing before being merged. I don't have time to test it. The change value is of high importance.

* Install nginx and webdav module from Alpine repo

* New year

* Update CHANGELOG

* Make rtorrent and libtorrent with -O2 -flto

rTorrent, libTorrent and xmlrpc support link time optimizations. It's safe to do this. Make rTorrent and libTorrent with Level 2 optimizations. (default is no optimization)

* Bump php version

Needed to bump php7 to php81 to match the installed version, so rutorrent plugins can initiatlise properly.

* Update CHANGELOG

* Fix nginx logs folder perms

* ruTorrent v4.0-stable

* Update GeoIP2 ruTorrent plugin

* Update CHANGELOG

* ruTorrent V4.0.1-hotfix

* Update CHANGELOG

* feat(rutorrent): sets `$localHostedMode = true` (crazy-max#215)

* Update CHANGELOG

* ruTorrent v4.0.2-hotfix 

Bumps ruTorrent version to 4.0.2-hotfix for additional stability improvements.

* Set $cachedPluginLoading to false

* Update CHANGELOG

* Improve watch directory support

Use inotify event instead of task schedule to check watch directory.
https://man7.org/linux/man-pages/man7/inotify.7.html

* Remove erase data workaround

This workaround is no longer desirable, as discussed here:
crazy-max#225 (comment)

closes crazy-max#203
closes crazy-max#225

* Fix RU_REMOVE_CORE_PLUGINS defaults

Remove erasedata from defaults. Set to `false` to disable
removal of core ruTorrent plugins.

* ruTorrent v4.0.4

* RU_CACHED_PLUGIN_LOADING env var (default false)

* Update CHANGELOG

* Bump docker/bake-action from 2 to 3

Bumps [docker/bake-action](https://github.com/docker/bake-action) from 2 to 3.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](docker/bake-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* ruTorrent: version 4.1.2 stable

This commit bumps ruTorrent to version 4.1.2 stable. Critical bugs are resolved, which cause the web interface to fail to load. It is backwards compatible with other settings in version 4.0.4 stable. https://github.com/Novik/ruTorrent/releases/tag/v4.1.2

* ruTorrent: version 4.1.3 stable

This commit fixes an issue with the RSS context menu not displaying when the `rssurlrewrite` plugin is enabled.
https://github.com/Novik/ruTorrent/releases/tag/v4.1.3

* Update CHANGELOG

* Install php81-dom for ruTorrent v4.1

The `php81-dom` extension is required for ruTorrent v4.1 to function properly. Novik/ruTorrent#2500

`v4.1.3` throws an error when trying to update RSS Feeds. `v4.1.4` will be released next and fix this issue. However, it's still highly recommended to include this extension for optimization. See crazy-max#236. It wasn't enough to just include `php81-xml`. Alpine puts the DOM module into a separate package.

* ruTorrent: Upgrade to version 4.1.5

Fixes a bunch of bugs with RSS Feeds, torrent deletion and caching issues. Cache expiry removed in version 4.1.4. Deprecated options removed from configuration.

* Curl: Add building optimizations

Compile curl and c-ares with level 2 optimizations and link time optimizations. Pipe curl because it barely takes any memory.

* Update CHANGELOG

* chore: remove gitignore and dockerignore

* rTorrent: Improve session saving

This commit improves session saving support for rTorrent to prevent unnecessary loss of torrent files. It also increases the session saving interval from 20 minutes to 1 hour to reduce disk i/o usage with thousands of torrents. Session saving is a very intensive task and torrents fail to save into session by default when added.

* Update CHANGELOG

* ruTorrent: Upgrade to version 4.1.6

* ruTorrent: Upgrade to version 4.1.7

* chore: update labels

* chore: cleanup labels config

* chore: update github form templates

* ci: missing concurrency check

* test: use composite container-logs-check action

* ci: use compose stack for testing

* switch to compose v2

* Alpine Linux 3.18

* Dockerfile: fix src stages

* Update CHANGELOG

* ruTorrent v4.2.2

* Update CHANGELOG

* ruTorrent v4.2.5

* Update CHANGELOG

* rutorrent 4.2.6

Updating rutorrent to  4.2.6

* Bump actions/checkout from 3 to 4

Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump crazy-max/ghaction-github-labeler from 4 to 5

Bumps [crazy-max/ghaction-github-labeler](https://github.com/crazy-max/ghaction-github-labeler) from 4 to 5.
- [Release notes](https://github.com/crazy-max/ghaction-github-labeler/releases)
- [Commits](crazy-max/ghaction-github-labeler@v4...v5)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-github-labeler
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/setup-qemu-action from 2 to 3

Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](docker/setup-qemu-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/bake-action from 3 to 4

Bumps [docker/bake-action](https://github.com/docker/bake-action) from 3 to 4.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](docker/bake-action@v3...v4)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/login-action from 2 to 3

Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update README

* Update CHANGELOG

* Bump docker/setup-buildx-action from 2 to 3

Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](docker/metadata-action@v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Upgrade to ruTorrent v4.2.9

* Update CHANGELOG

* rTorrent: Add stability patches

This commit adds multiple stability patches to rtorrent.

* Update CHANGELOG

* fix version for tagging

* rTorrent: Add tracker scrape feature

Resolves a software stability issue on rTorrent with tens of thousands of trackers. Announces trackers by default at regular intervals instead of forcefully announcing everything at startup.

* ci: distribute build across runners

* ci: fix build

* Improve c-ares & curl build process

This commit improves the c-ares and curl build process to use cmake instead. This is a much better choice for docker container. We do not require the features GNU Make provides. CMake should also be more stable for testing pull requests on GitHub.

It also upgrades the c-ares and curl version to receive the latest bug fixes and performance changes. There's been a huge leap forward since the older changes. Put simple, curl 8 is faster.

* Update README

* Update CHANGELOG

* Build fixes & improvements

- Compile everything with level 3 optimizations.
- Disable warnings for the rtorrent software stack to prevent overflows and reduce overall ARM build time.
- Fix critical issues with xml-rpc and libtorrent not applying the build flags.
- Add build flags to mktorrent.
- Fix configure params. Spaces are not allowed.
- Drop c++ support for xmlrpc (not required)

* Upgrade to Alpine 3.19

php 8.2 for ruTorrent v4.2.9.
gcc 13.2 for the rTorrent packages

* Update CHANGELOG

* build(deps): bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](docker/metadata-action@v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* rTorrent: Implement UDNS support

This pull request implements the UDNS library into libtorrent for asynchronous DNS requests on UDP trackers. The current c-ares support is limited to TCP trackers.

It resolves stability issues with the rTorrent software stack where it resolves UDP trackers synchronously by default. With a large number of torrents, the software will give out and fail to seed.

It also caches the result of `sscanf` into vector object, to avoid calling it thousands of times on broken trackers. This prevents the software from crashing and increases performance.

* Fix PHP version in rtlocal.rc

* Update CHANGELOG

* Update CHANGELOG.md

* rTorrent: Resolve memory leaks

This patch resolves critical memory leaks with the rTorrent software, that can cause an out of memory condition to happen. It has been tested for months and has demonstrated proven memory stability for rTorrent.

* rTorrent: Resolve memory access crash

rTorrent requires the usage of aligned memory access on all platforms (x86 and ARM) to prevent a memory access crash from happening. As such, we need to configure libtorrent with `--enable-aligned` to enable the feature.

This is also more efficient for CPU usage at the cost of slightly more memory consumption.  However, due to the relatively small usage of memory, all platforms will benefit.

More information can be found here: rakshasa/libtorrent#244

* ruTorrent v4.2.10

Signed-off-by: djerfy <djerfy@gmail.com>

* rTorrent: Add TCP socket configurations

By overriding the default rmem and wmem values for TCP sockets, we can greatly improve torrent throughput on rTorrent at a tiny cost to memory.

The default values of 4M per socket are a significant step up from rTorrent defaults. The maximum values are raised on alpine, allowing the user to configure up to 64M if they desire.

Environment variables are added to allow the user to control the values within the docker container. Documentation is updated explaining the environment variables and a recommendation for the next steps.

* Add php82-fileinfo package

Fixes uploading of custom PNG icons for trackers.

* new year

* ruTorrent v4.3.0

* update examples and test case

* readme: fix markdown

* Update CHANGELOG

* Fix CHANGELOG

* Update .rtlocal.rc file for changes

fixes crazy-max#336

* ruTorrent v4.3.0 fix

We must add `$useInternalHybrid = true;` to the torrent creator configuration file for ruTorrent v4.3.0.

* update README

* Update CHANGELOG

* ruTorrent v4.3.1-hotfix

Signed-off-by: djerfy <djerfy@gmail.com>

* ruTorrent: Do not permit core plugin removal of httprpc

Users are receiving 404 errors during version upgrades. We need to disallow removing the httprpc plugin because it's required for ruTorrent v4.3+ operation. See crazy-max#345.

* Update CHANGELOG

* Switch to rTorrent stickz project

rTorrent stickz is a project maintained by a core collaborator of ruTorrent.
https://github.com/stickz/rtorrent

It includes significant performance and stability optimizations for the rTorrent software. It also ensures full compatibility with link time optimizations during the build process.

It is a drop in replacement for rTorrent with all the core patches from this docker container included. It also improves the implementation of UDNS to make it more reliable.

The rTorrent stickz project focuses on performance and stability of the torrent client. It is designed to be fully compatible with ruTorrent. Also, it does not seek to modify the torrent software in any way that may be undesirable for users. As a result, it is a perfect candidate for this docker container!

* nginx: Disable listening for IPV6

fixes crazy-max#348

There is no point in supporting IPV6 on this docker container. IPV4 is required anyways for rTorrent to function properly.

If the user disables loading the IPV6 kernel module at boot time, the docker container will fail to initialize if nginx is listening for IPV6.

* ruTorrent: Upgrade to v4.3.2

* Update CHANGELOG

* rTorrent: Upgrade to version 3.1

closes crazy-max#354

Please tag a next release after merging.

* Update CHANGELOG

* rTorrent: Upgrade to v3.2

# Version 3.2 hotfix
- This hotfix resolves a critical issue with flushing invalid bencode to disk. 
- It also optimizes writing bencode to disk. Metadata is now only flushed when required.

## What's Changed
* rTorrent: Fix & optimize write_bencode by @stickz in stickz/rtorrent@970deae

**Full Changelog**: stickz/rtorrent@v3.1-0.9.8-0.13.8...v3.2-0.9.8-0.13.8

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: djerfy <djerfy@gmail.com>
Co-authored-by: CrazyMax <crazy-max@users.noreply.github.com>
Co-authored-by: CrazyMax <contact@crazymax.dev>
Co-authored-by: stickz <stickman002@mail.com>
Co-authored-by: Aciel <chaosnated@gmail.com>
Co-authored-by: Jeremy Chabernaud <djerfy@gmail.com>
Co-authored-by: blueberryapple <9259833+blueberryapple@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ac1dburn <colinborins@hotmail.com>
Co-authored-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Co-authored-by: daschiller <david.schiller@gmx.at>
Cryptik-Rick added a commit to Cryptik-Rick/docker-rtorrent-rutorrent that referenced this issue Jun 9, 2024
* cleanup workflow

* Bump action to latest major

* readme: fix badge and typo

* readme: update about section

* Alpine Linux 3.17

Also update to PHP 8.1 and Nginx 1.22.1.

GeoIP2 extension has been updated to 1.3.1 from a fork for
compat with PHP 8.1.

Created a fork of xmlrpc-c on GitHub to fix issues with SVN
checkout from Sourceforge.

* Set  S6_KILL_GRACETIME to 10 seconds (crazy-max#171)

* Align xmlrpc-c version

* ci: increase timeout

* Update CHANGELOG

* Configure xml-rpc correctly

`xmlrpc-c` is not configured properly. It will cause a very significant performance regression, if the `wininet` and `libwww` clients are not disabled. We want `xmlrpc-c` to use `curl` because it's razor fast and stable. These changes require testing before being merged. I don't have time to test it. The change value is of high importance.

* Install nginx and webdav module from Alpine repo

* New year

* Update CHANGELOG

* Make rtorrent and libtorrent with -O2 -flto

rTorrent, libTorrent and xmlrpc support link time optimizations. It's safe to do this. Make rTorrent and libTorrent with Level 2 optimizations. (default is no optimization)

* Bump php version

Needed to bump php7 to php81 to match the installed version, so rutorrent plugins can initiatlise properly.

* Update CHANGELOG

* Fix nginx logs folder perms

* ruTorrent v4.0-stable

* Update GeoIP2 ruTorrent plugin

* Update CHANGELOG

* ruTorrent V4.0.1-hotfix

* Update CHANGELOG

* feat(rutorrent): sets `$localHostedMode = true` (crazy-max#215)

* Update CHANGELOG

* ruTorrent v4.0.2-hotfix 

Bumps ruTorrent version to 4.0.2-hotfix for additional stability improvements.

* Set $cachedPluginLoading to false

* Update CHANGELOG

* Improve watch directory support

Use inotify event instead of task schedule to check watch directory.
https://man7.org/linux/man-pages/man7/inotify.7.html

* Remove erase data workaround

This workaround is no longer desirable, as discussed here:
crazy-max#225 (comment)

closes crazy-max#203
closes crazy-max#225

* Fix RU_REMOVE_CORE_PLUGINS defaults

Remove erasedata from defaults. Set to `false` to disable
removal of core ruTorrent plugins.

* ruTorrent v4.0.4

* RU_CACHED_PLUGIN_LOADING env var (default false)

* Update CHANGELOG

* Bump docker/bake-action from 2 to 3

Bumps [docker/bake-action](https://github.com/docker/bake-action) from 2 to 3.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](docker/bake-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* ruTorrent: version 4.1.2 stable

This commit bumps ruTorrent to version 4.1.2 stable. Critical bugs are resolved, which cause the web interface to fail to load. It is backwards compatible with other settings in version 4.0.4 stable. https://github.com/Novik/ruTorrent/releases/tag/v4.1.2

* ruTorrent: version 4.1.3 stable

This commit fixes an issue with the RSS context menu not displaying when the `rssurlrewrite` plugin is enabled.
https://github.com/Novik/ruTorrent/releases/tag/v4.1.3

* Update CHANGELOG

* Install php81-dom for ruTorrent v4.1

The `php81-dom` extension is required for ruTorrent v4.1 to function properly. Novik/ruTorrent#2500

`v4.1.3` throws an error when trying to update RSS Feeds. `v4.1.4` will be released next and fix this issue. However, it's still highly recommended to include this extension for optimization. See crazy-max#236. It wasn't enough to just include `php81-xml`. Alpine puts the DOM module into a separate package.

* ruTorrent: Upgrade to version 4.1.5

Fixes a bunch of bugs with RSS Feeds, torrent deletion and caching issues. Cache expiry removed in version 4.1.4. Deprecated options removed from configuration.

* Curl: Add building optimizations

Compile curl and c-ares with level 2 optimizations and link time optimizations. Pipe curl because it barely takes any memory.

* Update CHANGELOG

* chore: remove gitignore and dockerignore

* rTorrent: Improve session saving

This commit improves session saving support for rTorrent to prevent unnecessary loss of torrent files. It also increases the session saving interval from 20 minutes to 1 hour to reduce disk i/o usage with thousands of torrents. Session saving is a very intensive task and torrents fail to save into session by default when added.

* Update CHANGELOG

* ruTorrent: Upgrade to version 4.1.6

* ruTorrent: Upgrade to version 4.1.7

* chore: update labels

* chore: cleanup labels config

* chore: update github form templates

* ci: missing concurrency check

* test: use composite container-logs-check action

* ci: use compose stack for testing

* switch to compose v2

* Alpine Linux 3.18

* Dockerfile: fix src stages

* Update CHANGELOG

* ruTorrent v4.2.2

* Update CHANGELOG

* ruTorrent v4.2.5

* Update CHANGELOG

* rutorrent 4.2.6

Updating rutorrent to  4.2.6

* Bump actions/checkout from 3 to 4

Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump crazy-max/ghaction-github-labeler from 4 to 5

Bumps [crazy-max/ghaction-github-labeler](https://github.com/crazy-max/ghaction-github-labeler) from 4 to 5.
- [Release notes](https://github.com/crazy-max/ghaction-github-labeler/releases)
- [Commits](crazy-max/ghaction-github-labeler@v4...v5)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-github-labeler
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/setup-qemu-action from 2 to 3

Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](docker/setup-qemu-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/bake-action from 3 to 4

Bumps [docker/bake-action](https://github.com/docker/bake-action) from 3 to 4.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](docker/bake-action@v3...v4)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/login-action from 2 to 3

Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update README

* Update CHANGELOG

* Bump docker/setup-buildx-action from 2 to 3

Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](docker/metadata-action@v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Upgrade to ruTorrent v4.2.9

* Update CHANGELOG

* rTorrent: Add stability patches

This commit adds multiple stability patches to rtorrent.

* Update CHANGELOG

* fix version for tagging

* rTorrent: Add tracker scrape feature

Resolves a software stability issue on rTorrent with tens of thousands of trackers. Announces trackers by default at regular intervals instead of forcefully announcing everything at startup.

* ci: distribute build across runners

* ci: fix build

* Improve c-ares & curl build process

This commit improves the c-ares and curl build process to use cmake instead. This is a much better choice for docker container. We do not require the features GNU Make provides. CMake should also be more stable for testing pull requests on GitHub.

It also upgrades the c-ares and curl version to receive the latest bug fixes and performance changes. There's been a huge leap forward since the older changes. Put simple, curl 8 is faster.

* Update README

* Update CHANGELOG

* Build fixes & improvements

- Compile everything with level 3 optimizations.
- Disable warnings for the rtorrent software stack to prevent overflows and reduce overall ARM build time.
- Fix critical issues with xml-rpc and libtorrent not applying the build flags.
- Add build flags to mktorrent.
- Fix configure params. Spaces are not allowed.
- Drop c++ support for xmlrpc (not required)

* Upgrade to Alpine 3.19

php 8.2 for ruTorrent v4.2.9.
gcc 13.2 for the rTorrent packages

* Update CHANGELOG

* build(deps): bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](docker/metadata-action@v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* rTorrent: Implement UDNS support

This pull request implements the UDNS library into libtorrent for asynchronous DNS requests on UDP trackers. The current c-ares support is limited to TCP trackers.

It resolves stability issues with the rTorrent software stack where it resolves UDP trackers synchronously by default. With a large number of torrents, the software will give out and fail to seed.

It also caches the result of `sscanf` into vector object, to avoid calling it thousands of times on broken trackers. This prevents the software from crashing and increases performance.

* Fix PHP version in rtlocal.rc

* Update CHANGELOG

* Update CHANGELOG.md

* rTorrent: Resolve memory leaks

This patch resolves critical memory leaks with the rTorrent software, that can cause an out of memory condition to happen. It has been tested for months and has demonstrated proven memory stability for rTorrent.

* rTorrent: Resolve memory access crash

rTorrent requires the usage of aligned memory access on all platforms (x86 and ARM) to prevent a memory access crash from happening. As such, we need to configure libtorrent with `--enable-aligned` to enable the feature.

This is also more efficient for CPU usage at the cost of slightly more memory consumption.  However, due to the relatively small usage of memory, all platforms will benefit.

More information can be found here: rakshasa/libtorrent#244

* ruTorrent v4.2.10

Signed-off-by: djerfy <djerfy@gmail.com>

* rTorrent: Add TCP socket configurations

By overriding the default rmem and wmem values for TCP sockets, we can greatly improve torrent throughput on rTorrent at a tiny cost to memory.

The default values of 4M per socket are a significant step up from rTorrent defaults. The maximum values are raised on alpine, allowing the user to configure up to 64M if they desire.

Environment variables are added to allow the user to control the values within the docker container. Documentation is updated explaining the environment variables and a recommendation for the next steps.

* Add php82-fileinfo package

Fixes uploading of custom PNG icons for trackers.

* new year

* ruTorrent v4.3.0

* update examples and test case

* readme: fix markdown

* Update CHANGELOG

* Fix CHANGELOG

* Update .rtlocal.rc file for changes

fixes crazy-max#336

* ruTorrent v4.3.0 fix

We must add `$useInternalHybrid = true;` to the torrent creator configuration file for ruTorrent v4.3.0.

* update README

* Update CHANGELOG

* ruTorrent v4.3.1-hotfix

Signed-off-by: djerfy <djerfy@gmail.com>

* ruTorrent: Do not permit core plugin removal of httprpc

Users are receiving 404 errors during version upgrades. We need to disallow removing the httprpc plugin because it's required for ruTorrent v4.3+ operation. See crazy-max#345.

* Update CHANGELOG

* Switch to rTorrent stickz project

rTorrent stickz is a project maintained by a core collaborator of ruTorrent.
https://github.com/stickz/rtorrent

It includes significant performance and stability optimizations for the rTorrent software. It also ensures full compatibility with link time optimizations during the build process.

It is a drop in replacement for rTorrent with all the core patches from this docker container included. It also improves the implementation of UDNS to make it more reliable.

The rTorrent stickz project focuses on performance and stability of the torrent client. It is designed to be fully compatible with ruTorrent. Also, it does not seek to modify the torrent software in any way that may be undesirable for users. As a result, it is a perfect candidate for this docker container!

* nginx: Disable listening for IPV6

fixes crazy-max#348

There is no point in supporting IPV6 on this docker container. IPV4 is required anyways for rTorrent to function properly.

If the user disables loading the IPV6 kernel module at boot time, the docker container will fail to initialize if nginx is listening for IPV6.

* ruTorrent: Upgrade to v4.3.2

* Update CHANGELOG

* rTorrent: Upgrade to version 3.1

closes crazy-max#354

Please tag a next release after merging.

* Update CHANGELOG

* rTorrent: Upgrade to v3.2

# Version 3.2 hotfix
- This hotfix resolves a critical issue with flushing invalid bencode to disk. 
- It also optimizes writing bencode to disk. Metadata is now only flushed when required.

## What's Changed
* rTorrent: Fix & optimize write_bencode by @stickz in stickz/rtorrent@970deae

**Full Changelog**: stickz/rtorrent@v3.1-0.9.8-0.13.8...v3.2-0.9.8-0.13.8

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: djerfy <djerfy@gmail.com>
Co-authored-by: CrazyMax <crazy-max@users.noreply.github.com>
Co-authored-by: CrazyMax <contact@crazymax.dev>
Co-authored-by: stickz <stickman002@mail.com>
Co-authored-by: Aciel <chaosnated@gmail.com>
Co-authored-by: Jeremy Chabernaud <djerfy@gmail.com>
Co-authored-by: blueberryapple <9259833+blueberryapple@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ac1dburn <colinborins@hotmail.com>
Co-authored-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Co-authored-by: daschiller <david.schiller@gmx.at>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants