Compare commits
50 Commits
4.3.020200
...
14.2.5.992
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a149240962 | ||
|
|
203665be42 | ||
|
|
6c73fdbe28 | ||
|
|
0fd37c121c | ||
|
|
d0e1c52430 | ||
|
|
d905eb1a9c | ||
|
|
73f60599a0 | ||
|
|
46a9021a49 | ||
|
|
454d4a325a | ||
|
|
27c8324ebd | ||
|
|
358eefe9c6 | ||
|
|
722bd16154 | ||
|
|
72ca1908f8 | ||
|
|
fb1cae11aa | ||
|
|
5cafd8e13c | ||
|
|
61ca0015f3 | ||
|
|
ba58ecb683 | ||
|
|
58f4ae5129 | ||
|
|
16788fb0f2 | ||
|
|
24b3491eef | ||
|
|
978d08a5fd | ||
|
|
668e9858cc | ||
|
|
e38b7158db | ||
|
|
b3c6a6e811 | ||
|
|
1b64db93e7 | ||
|
|
81242e2067 | ||
|
|
53200a7b1f | ||
|
|
f66091b91f | ||
|
|
4f6acb37d1 | ||
|
|
40a39fe84a | ||
|
|
9cdd5ef3d3 | ||
|
|
c70fd537e9 | ||
|
|
dea7c84f45 | ||
|
|
8d1dac2300 | ||
|
|
25691a42ff | ||
|
|
884270d998 | ||
|
|
8fcc3fb181 | ||
|
|
1e38561692 | ||
|
|
db829a8a40 | ||
|
|
5d2bcceef4 | ||
|
|
ddb0bea2aa | ||
|
|
450d6b60ec | ||
|
|
2421611e80 | ||
|
|
804a0a417c | ||
|
|
12c6b8b45d | ||
|
|
8f57215fc9 | ||
|
|
9f36ab0e69 | ||
|
|
3eb0345870 | ||
|
|
00249991fd | ||
|
|
9989d4583d |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@@ -1 +1,2 @@
|
||||
github: linuxserver
|
||||
open_collective: linuxserver
|
||||
|
||||
@@ -19,7 +19,7 @@ RUN \
|
||||
apt-get update && \
|
||||
apt-get install -y \
|
||||
gnupg \
|
||||
python && \
|
||||
python3 && \
|
||||
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
|
||||
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
|
||||
|
||||
@@ -19,7 +19,7 @@ RUN \
|
||||
apt-get update && \
|
||||
apt-get install -y \
|
||||
gnupg \
|
||||
python && \
|
||||
python3 && \
|
||||
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
|
||||
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
|
||||
|
||||
@@ -19,7 +19,7 @@ RUN \
|
||||
apt-get update && \
|
||||
apt-get install -y \
|
||||
gnupg \
|
||||
python && \
|
||||
python3 && \
|
||||
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
|
||||
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
|
||||
|
||||
171
Jenkinsfile
vendored
171
Jenkinsfile
vendored
@@ -14,6 +14,8 @@ pipeline {
|
||||
environment {
|
||||
BUILDS_DISCORD=credentials('build_webhook_url')
|
||||
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
|
||||
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
|
||||
GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
|
||||
CONTAINER_NAME = 'qbittorrent'
|
||||
BUILD_VERSION_ARG = 'QBITTORRENT_VERSION'
|
||||
LS_USER = 'linuxserver'
|
||||
@@ -126,6 +128,8 @@ pipeline {
|
||||
steps {
|
||||
script{
|
||||
env.IMAGE = env.DOCKERHUB_IMAGE
|
||||
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/' + env.CONTAINER_NAME
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
|
||||
} else {
|
||||
@@ -144,6 +148,8 @@ pipeline {
|
||||
steps {
|
||||
script{
|
||||
env.IMAGE = env.DEV_DOCKERHUB_IMAGE
|
||||
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
|
||||
} else {
|
||||
@@ -162,6 +168,8 @@ pipeline {
|
||||
steps {
|
||||
script{
|
||||
env.IMAGE = env.PR_DOCKERHUB_IMAGE
|
||||
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
|
||||
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
|
||||
if (env.MULTIARCH == 'true') {
|
||||
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
|
||||
} else {
|
||||
@@ -269,6 +277,26 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
/* #######################
|
||||
GitLab Mirroring
|
||||
####################### */
|
||||
// Ping into Gitlab to mirror this repo and have a registry endpoint
|
||||
stage("GitLab Mirror"){
|
||||
when {
|
||||
environment name: 'EXIT_STATUS', value: ''
|
||||
}
|
||||
steps{
|
||||
sh '''curl -H "Content-Type: application/json" -H "Private-Token: ${GITLAB_TOKEN}" -X POST https://gitlab.com/api/v4/projects \
|
||||
-d '{"namespace_id":'${GITLAB_NAMESPACE}',\
|
||||
"name":"'${LS_REPO}'",
|
||||
"mirror":true,\
|
||||
"import_url":"https://github.com/linuxserver/'${LS_REPO}'.git",\
|
||||
"issues_access_level":"disabled",\
|
||||
"merge_requests_access_level":"disabled",\
|
||||
"repository_access_level":"enabled",\
|
||||
"visibility":"public"}' '''
|
||||
}
|
||||
}
|
||||
/* ###############
|
||||
Build Container
|
||||
############### */
|
||||
@@ -316,7 +344,9 @@ pipeline {
|
||||
sh "docker build --no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} \
|
||||
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
|
||||
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
sh "docker push lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
retry(5) {
|
||||
sh "docker push lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
}
|
||||
sh '''docker rmi \
|
||||
${IMAGE}:arm32v7-${META_TAG} \
|
||||
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
|
||||
@@ -343,7 +373,9 @@ pipeline {
|
||||
sh "docker build --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \
|
||||
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
|
||||
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
retry(5) {
|
||||
sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
|
||||
}
|
||||
sh '''docker rmi \
|
||||
${IMAGE}:arm64v8-${META_TAG} \
|
||||
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
|
||||
@@ -502,17 +534,27 @@ pipeline {
|
||||
passwordVariable: 'DOCKERPASS'
|
||||
]
|
||||
]) {
|
||||
echo 'Logging into DockerHub'
|
||||
retry(5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
|
||||
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
|
||||
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
|
||||
docker push ${PUSHIMAGE}:latest
|
||||
docker push ${PUSHIMAGE}:${META_TAG}
|
||||
done
|
||||
'''
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
|
||||
for DELETEIMAGE in "${GITHUBIMAGE}" "{GITLABIMAGE}" "${IMAGE}"; do
|
||||
docker rmi \
|
||||
${DELETEIMAGE}:${META_TAG} \
|
||||
${DELETEIMAGE}:latest || :
|
||||
done
|
||||
'''
|
||||
sh "docker tag ${IMAGE}:${META_TAG} ${IMAGE}:latest"
|
||||
sh "docker push ${IMAGE}:latest"
|
||||
sh "docker push ${IMAGE}:${META_TAG}"
|
||||
sh '''docker rmi \
|
||||
${IMAGE}:${META_TAG} \
|
||||
${IMAGE}:latest || :'''
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -531,44 +573,72 @@ pipeline {
|
||||
passwordVariable: 'DOCKERPASS'
|
||||
]
|
||||
]) {
|
||||
retry(5) {
|
||||
sh '''#! /bin/bash
|
||||
set -e
|
||||
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
|
||||
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin
|
||||
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
|
||||
if [ "${CI}" == "false" ]; then
|
||||
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
|
||||
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
|
||||
fi
|
||||
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}"; do
|
||||
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-latest
|
||||
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker push ${MANIFESTIMAGE}:amd64-latest
|
||||
docker push ${MANIFESTIMAGE}:arm32v7-latest
|
||||
docker push ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
|
||||
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
|
||||
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
|
||||
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
|
||||
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
|
||||
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} --os linux --arch arm
|
||||
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:latest
|
||||
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
|
||||
done
|
||||
docker tag ${IMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:amd64-${META_TAG}
|
||||
docker tag ${IMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-${META_TAG}
|
||||
docker tag ${IMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-${META_TAG}
|
||||
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:latest
|
||||
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:${META_TAG}
|
||||
docker tag ${GITHUBIMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-latest
|
||||
docker tag ${GITHUBIMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-latest
|
||||
docker push ${GITHUBIMAGE}:amd64-${META_TAG}
|
||||
docker push ${GITHUBIMAGE}:arm32v7-${META_TAG}
|
||||
docker push ${GITHUBIMAGE}:arm64v8-${META_TAG}
|
||||
docker push ${GITHUBIMAGE}:latest
|
||||
docker push ${GITHUBIMAGE}:${META_TAG}
|
||||
docker push ${GITHUBIMAGE}:arm32v7-latest
|
||||
docker push ${GITHUBIMAGE}:arm64v8-latest
|
||||
'''
|
||||
}
|
||||
sh '''#! /bin/bash
|
||||
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
|
||||
'''
|
||||
sh '''#! /bin/bash
|
||||
if [ "${CI}" == "false" ]; then
|
||||
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
|
||||
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
|
||||
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
|
||||
fi'''
|
||||
sh "docker tag ${IMAGE}:amd64-${META_TAG} ${IMAGE}:amd64-latest"
|
||||
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} ${IMAGE}:arm32v7-latest"
|
||||
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-latest"
|
||||
sh "docker push ${IMAGE}:amd64-${META_TAG}"
|
||||
sh "docker push ${IMAGE}:arm32v7-${META_TAG}"
|
||||
sh "docker push ${IMAGE}:arm64v8-${META_TAG}"
|
||||
sh "docker push ${IMAGE}:amd64-latest"
|
||||
sh "docker push ${IMAGE}:arm32v7-latest"
|
||||
sh "docker push ${IMAGE}:arm64v8-latest"
|
||||
sh "docker manifest push --purge ${IMAGE}:latest || :"
|
||||
sh "docker manifest create ${IMAGE}:latest ${IMAGE}:amd64-latest ${IMAGE}:arm32v7-latest ${IMAGE}:arm64v8-latest"
|
||||
sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm32v7-latest --os linux --arch arm"
|
||||
sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8"
|
||||
sh "docker manifest push --purge ${IMAGE}:${META_TAG} || :"
|
||||
sh "docker manifest create ${IMAGE}:${META_TAG} ${IMAGE}:amd64-${META_TAG} ${IMAGE}:arm32v7-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}"
|
||||
sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v7-${META_TAG} --os linux --arch arm"
|
||||
sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8"
|
||||
sh "docker manifest push --purge ${IMAGE}:latest"
|
||||
sh "docker manifest push --purge ${IMAGE}:${META_TAG}"
|
||||
sh '''docker rmi \
|
||||
${IMAGE}:amd64-${META_TAG} \
|
||||
${IMAGE}:amd64-latest \
|
||||
${IMAGE}:arm32v7-${META_TAG} \
|
||||
${IMAGE}:arm32v7-latest \
|
||||
${IMAGE}:arm64v8-${META_TAG} \
|
||||
${IMAGE}:arm64v8-latest \
|
||||
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
|
||||
docker rmi \
|
||||
${DELETEIMAGE}:amd64-${META_TAG} \
|
||||
${DELETEIMAGE}:amd64-latest \
|
||||
${DELETEIMAGE}:arm32v7-${META_TAG} \
|
||||
${DELETEIMAGE}:arm32v7-latest \
|
||||
${DELETEIMAGE}:arm64v8-${META_TAG} \
|
||||
${DELETEIMAGE}:arm64v8-latest || :
|
||||
done
|
||||
docker rmi \
|
||||
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
|
||||
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
|
||||
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -652,16 +722,19 @@ pipeline {
|
||||
sh 'echo "build aborted"'
|
||||
}
|
||||
else if (currentBuild.currentResult == "SUCCESS"){
|
||||
sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
else {
|
||||
sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
|
||||
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
|
||||
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
|
||||
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
|
||||
}
|
||||
}
|
||||
}
|
||||
cleanup {
|
||||
cleanWs()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
66
README.md
66
README.md
@@ -1,13 +1,13 @@
|
||||
[](https://linuxserver.io)
|
||||
|
||||
[](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
|
||||
[](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
|
||||
[](https://discourse.linuxserver.io "post on our community forum.")
|
||||
[](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
|
||||
[](https://anchor.fm/linuxserverio "on hiatus. Coming back soon (late 2018).")
|
||||
[](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
|
||||
[](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
|
||||
[](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
|
||||
[](https://discourse.linuxserver.io "post on our community forum.")
|
||||
[](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
|
||||
[](https://github.com/linuxserver "view the source for all of our repositories.")
|
||||
[](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
|
||||
|
||||
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring :-
|
||||
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring:
|
||||
|
||||
* regular and timely application updates
|
||||
* easy user mappings (PGID, PUID)
|
||||
@@ -20,17 +20,20 @@ Find us at:
|
||||
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
|
||||
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
|
||||
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
|
||||
* [Podcast](https://anchor.fm/linuxserverio) - on hiatus. Coming back soon (late 2018).
|
||||
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
|
||||
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
|
||||
|
||||
# [linuxserver/qbittorrent](https://github.com/linuxserver/docker-qbittorrent)
|
||||
[](https://github.com/linuxserver/docker-qbittorrent/releases)
|
||||
[](https://microbadger.com/images/linuxserver/qbittorrent "Get your own version badge on microbadger.com")
|
||||
[](https://microbadger.com/images/linuxserver/qbittorrent "Get your own version badge on microbadger.com")
|
||||
[](https://hub.docker.com/r/linuxserver/qbittorrent)
|
||||
[](https://hub.docker.com/r/linuxserver/qbittorrent)
|
||||
[](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/)
|
||||
[](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/qbittorrent/latest/index.html)
|
||||
|
||||
[](https://github.com/linuxserver/docker-qbittorrent)
|
||||
[](https://github.com/linuxserver/docker-qbittorrent/releases)
|
||||
[](https://github.com/linuxserver/docker-qbittorrent/packages)
|
||||
[](https://gitlab.com/Linuxserver.io/docker-qbittorrent/container_registry)
|
||||
[](https://microbadger.com/images/linuxserver/qbittorrent "Get your own version badge on microbadger.com")
|
||||
[](https://hub.docker.com/r/linuxserver/qbittorrent)
|
||||
[](https://hub.docker.com/r/linuxserver/qbittorrent)
|
||||
[](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/)
|
||||
[](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/qbittorrent/latest/index.html)
|
||||
|
||||
The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
|
||||
|
||||
@@ -50,6 +53,14 @@ The architectures supported by this image are:
|
||||
| arm64 | arm64v8-latest |
|
||||
| armhf | arm32v7-latest |
|
||||
|
||||
## Version Tags
|
||||
|
||||
This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.
|
||||
|
||||
| Tag | Description |
|
||||
| :----: | --- |
|
||||
| latest | Stable qbittorrent releases |
|
||||
| unstable | Unstable qbittorrent releases |
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -81,7 +92,7 @@ Compatible with docker-compose v2 schemas.
|
||||
|
||||
```
|
||||
---
|
||||
version: "2"
|
||||
version: "2.1"
|
||||
services:
|
||||
qbittorrent:
|
||||
image: linuxserver/qbittorrent
|
||||
@@ -119,6 +130,23 @@ Container images are configured using parameters passed at runtime (such as thos
|
||||
| `-v /config` | Contains all relevant configuration files. |
|
||||
| `-v /downloads` | Location of downloads on disk. |
|
||||
|
||||
## Environment variables from files (Docker secrets)
|
||||
|
||||
You can set any environment variable from a file by using a special prepend `FILE__`.
|
||||
|
||||
As an example:
|
||||
|
||||
```
|
||||
-e FILE__PASSWORD=/run/secrets/mysecretpassword
|
||||
```
|
||||
|
||||
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
|
||||
|
||||
## Umask for running applications
|
||||
|
||||
For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional `-e UMASK=022` setting.
|
||||
Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up [here](https://en.wikipedia.org/wiki/Umask) before asking for support.
|
||||
|
||||
## User / Group Identifiers
|
||||
|
||||
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
|
||||
@@ -160,6 +188,11 @@ WebUI\ServerDomains=*
|
||||
```
|
||||
|
||||
|
||||
## Docker Mods
|
||||
[](https://mods.linuxserver.io/?mod=qbittorrent "view available mods for this container.")
|
||||
|
||||
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.
|
||||
|
||||
|
||||
## Support Info
|
||||
|
||||
@@ -225,6 +258,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
||||
|
||||
## Versions
|
||||
|
||||
* **03.04.20:** - Fix adding search engine plugin
|
||||
* **02.08.19:** - Add qbitorrent-cli for processing scripts.
|
||||
* **23.03.19:** - Switching to new Base images, shift to arm32v7 tag.
|
||||
* **14.01.19:** - Rebase to Ubuntu, add multi arch and pipeline logic.
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
adduser3.116ubuntu1
|
||||
apt1.6.12
|
||||
apt-utils1.6.12
|
||||
base-files10.1ubuntu2.7
|
||||
apt1.6.12ubuntu0.1
|
||||
apt-utils1.6.12ubuntu0.1
|
||||
base-files10.1ubuntu2.8
|
||||
base-passwd3.5.44
|
||||
bash4.4.18-2ubuntu1.2
|
||||
bsdutils1:2.31.1-0.4ubuntu3.4
|
||||
bsdutils1:2.31.1-0.4ubuntu3.6
|
||||
bzip21.0.6-8.1ubuntu0.2
|
||||
ca-certificates20180409
|
||||
ca-certificates20190110~18.04.1
|
||||
coreutils8.28-1ubuntu1
|
||||
curl7.58.0-2ubuntu3.8
|
||||
curl7.58.0-2ubuntu3.9
|
||||
dash0.5.8-2.10
|
||||
dbus1.12.2-1ubuntu1.1
|
||||
dbus1.12.2-1ubuntu1.2
|
||||
debconf1.5.66ubuntu1
|
||||
debianutils4.8.4
|
||||
diffutils1:3.6-1
|
||||
dirmngr2.2.4-1ubuntu1.2
|
||||
dpkg1.19.0.5ubuntu2.3
|
||||
e2fsprogs1.44.1-1ubuntu1.2
|
||||
fdisk2.31.1-0.4ubuntu3.4
|
||||
file1:5.32-2ubuntu0.2
|
||||
e2fsprogs1.44.1-1ubuntu1.3
|
||||
fdisk2.31.1-0.4ubuntu3.6
|
||||
file1:5.32-2ubuntu0.4
|
||||
findutils4.6.0+git+20170828-2
|
||||
gcc-8-base8.3.0-6ubuntu1~18.04.1
|
||||
gcc-8-base8.4.0-1ubuntu1~18.04
|
||||
geoip-bin1.6.12-1
|
||||
geoip-database20180315-1
|
||||
gnupg2.2.4-1ubuntu1.2
|
||||
@@ -40,36 +40,36 @@ init-system-helpers1.51
|
||||
krb5-locales1.16-2ubuntu0.1
|
||||
libacl12.2.52-3build1
|
||||
libapparmor12.12-4ubuntu5.1
|
||||
libapt-inst2.01.6.12
|
||||
libapt-pkg5.01.6.12
|
||||
libapt-inst2.01.6.12ubuntu0.1
|
||||
libapt-pkg5.01.6.12ubuntu0.1
|
||||
libasn1-8-heimdal7.5.0+dfsg-1
|
||||
libassuan02.5.1-2
|
||||
libattr11:2.4.47-2build1
|
||||
libaudit11:2.8.2-1ubuntu1
|
||||
libaudit-common1:2.8.2-1ubuntu1
|
||||
libblkid12.31.1-0.4ubuntu3.4
|
||||
libblkid12.31.1-0.4ubuntu3.6
|
||||
libboost-system1.65.11.65.1+dfsg-0ubuntu5
|
||||
libbz2-1.01.0.6-8.1ubuntu0.2
|
||||
libc62.27-3ubuntu1
|
||||
libcap-ng00.7.7-3.1
|
||||
libc-bin2.27-3ubuntu1
|
||||
libcom-err21.44.1-1ubuntu1.2
|
||||
libcurl47.58.0-2ubuntu3.8
|
||||
libcom-err21.44.1-1ubuntu1.3
|
||||
libcurl47.58.0-2ubuntu3.9
|
||||
libdb5.35.3.28-13.1ubuntu1.1
|
||||
libdbus-1-31.12.2-1ubuntu1.1
|
||||
libdbus-1-31.12.2-1ubuntu1.2
|
||||
libdebconfclient00.213ubuntu1
|
||||
libdouble-conversion12.0.1-4ubuntu1
|
||||
libexpat12.2.5-3ubuntu0.2
|
||||
libext2fs21.44.1-1ubuntu1.2
|
||||
libfdisk12.31.1-0.4ubuntu3.4
|
||||
libext2fs21.44.1-1ubuntu1.3
|
||||
libfdisk12.31.1-0.4ubuntu3.6
|
||||
libffi63.2.1-8
|
||||
libgcc11:8.3.0-6ubuntu1~18.04.1
|
||||
libgcrypt201.8.1-4ubuntu1.1
|
||||
libgcc11:8.4.0-1ubuntu1~18.04
|
||||
libgcrypt201.8.1-4ubuntu1.2
|
||||
libgeoip11.6.12-1
|
||||
libglib2.0-02.56.4-0ubuntu0.18.04.4
|
||||
libglib2.0-data2.56.4-0ubuntu0.18.04.4
|
||||
libglib2.0-02.56.4-0ubuntu0.18.04.6
|
||||
libglib2.0-data2.56.4-0ubuntu0.18.04.6
|
||||
libgmp102:6.1.2+dfsg-2
|
||||
libgnutls303.5.18-1ubuntu1.1
|
||||
libgnutls303.5.18-1ubuntu1.3
|
||||
libgpg-error01.27-6
|
||||
libgssapi3-heimdal7.5.0+dfsg-1
|
||||
libgssapi-krb5-21.16-2ubuntu0.1
|
||||
@@ -78,21 +78,22 @@ libheimbase1-heimdal7.5.0+dfsg-1
|
||||
libheimntlm0-heimdal7.5.0+dfsg-1
|
||||
libhogweed43.4-1
|
||||
libhx509-5-heimdal7.5.0+dfsg-1
|
||||
libicu6060.2-3ubuntu3
|
||||
libidn2-02.0.4-1.1build2
|
||||
libicu6060.2-3ubuntu3.1
|
||||
libidn2-02.0.4-1.1ubuntu0.2
|
||||
libk5crypto31.16-2ubuntu0.1
|
||||
libkeyutils11.5.9-9.2ubuntu2
|
||||
libkrb5-26-heimdal7.5.0+dfsg-1
|
||||
libkrb5-31.16-2ubuntu0.1
|
||||
libkrb5support01.16-2ubuntu0.1
|
||||
libksba81.3.5-2
|
||||
libldap-2.4-22.4.45+dfsg-1ubuntu1.4
|
||||
libldap-common2.4.45+dfsg-1ubuntu1.4
|
||||
libldap-2.4-22.4.45+dfsg-1ubuntu1.5
|
||||
libldap-common2.4.45+dfsg-1ubuntu1.5
|
||||
liblz4-10.0~r131-2ubuntu3
|
||||
liblzma55.2.2-1.3
|
||||
libmagic11:5.32-2ubuntu0.2
|
||||
libmagic-mgc1:5.32-2ubuntu0.2
|
||||
libmount12.31.1-0.4ubuntu3.4
|
||||
libmagic11:5.32-2ubuntu0.4
|
||||
libmagic-mgc1:5.32-2ubuntu0.4
|
||||
libmount12.31.1-0.4ubuntu3.6
|
||||
libmpdec22.4.2-1ubuntu1
|
||||
libncurses56.1-1ubuntu1.18.04
|
||||
libncursesw56.1-1ubuntu1.18.04
|
||||
libnettle63.4-1
|
||||
@@ -106,49 +107,49 @@ libpam-runtime1.1.8-3.6ubuntu2.18.04.1
|
||||
libpcre32:8.39-9
|
||||
libprocps62:3.3.12-3ubuntu1.2
|
||||
libpsl50.19.1-5build1
|
||||
libpython2.7-minimal2.7.15-4ubuntu4~18.04.2
|
||||
libpython2.7-stdlib2.7.15-4ubuntu4~18.04.2
|
||||
libpython-stdlib2.7.15~rc1-1
|
||||
libqt5core5a5.9.5+dfsg-0ubuntu2.3
|
||||
libqt5dbus55.9.5+dfsg-0ubuntu2.3
|
||||
libqt5network55.9.5+dfsg-0ubuntu2.3
|
||||
libqt5xml55.9.5+dfsg-0ubuntu2.3
|
||||
libpython3.6-minimal3.6.9-1~18.04ubuntu1
|
||||
libpython3.6-stdlib3.6.9-1~18.04ubuntu1
|
||||
libpython3-stdlib3.6.7-1~18.04
|
||||
libqt5core5a5.9.5+dfsg-0ubuntu2.5
|
||||
libqt5dbus55.9.5+dfsg-0ubuntu2.5
|
||||
libqt5network55.9.5+dfsg-0ubuntu2.5
|
||||
libqt5xml55.9.5+dfsg-0ubuntu2.5
|
||||
libreadline77.0-3
|
||||
libroken18-heimdal7.5.0+dfsg-1
|
||||
librtmp12.4+20151223.gitfa8646d.1-1
|
||||
libsasl2-22.1.27~101-g0780600+dfsg-3ubuntu2
|
||||
libsasl2-modules2.1.27~101-g0780600+dfsg-3ubuntu2
|
||||
libsasl2-modules-db2.1.27~101-g0780600+dfsg-3ubuntu2
|
||||
libseccomp22.4.1-0ubuntu0.18.04.2
|
||||
libsasl2-22.1.27~101-g0780600+dfsg-3ubuntu2.1
|
||||
libsasl2-modules2.1.27~101-g0780600+dfsg-3ubuntu2.1
|
||||
libsasl2-modules-db2.1.27~101-g0780600+dfsg-3ubuntu2.1
|
||||
libseccomp22.4.3-1ubuntu3.18.04.2
|
||||
libselinux12.7-2build2
|
||||
libsemanage12.7-2build2
|
||||
libsemanage-common2.7-2build2
|
||||
libsepol12.7-1
|
||||
libsmartcols12.31.1-0.4ubuntu3.4
|
||||
libsqlite3-03.22.0-1ubuntu0.1
|
||||
libss21.44.1-1ubuntu1.2
|
||||
libsmartcols12.31.1-0.4ubuntu3.6
|
||||
libsqlite3-03.22.0-1ubuntu0.4
|
||||
libss21.44.1-1ubuntu1.3
|
||||
libssl1.0.01.0.2n-1ubuntu5.3
|
||||
libssl1.11.1.1-1ubuntu2.1~18.04.4
|
||||
libstdc++68.3.0-6ubuntu1~18.04.1
|
||||
libsystemd0237-3ubuntu10.31
|
||||
libssl1.11.1.1-1ubuntu2.1~18.04.6
|
||||
libstdc++68.4.0-1ubuntu1~18.04
|
||||
libsystemd0237-3ubuntu10.41
|
||||
libtasn1-64.13-2
|
||||
libtinfo56.1-1ubuntu1.18.04
|
||||
libtorrent-rasterbar91.1.13+git20191027.909211888e+patched-configure-1ppa1~18.04
|
||||
libudev1237-3ubuntu10.31
|
||||
libtorrent-rasterbar101.2.6+git20200425.a9968916ca-1ppa1~18.04
|
||||
libudev1237-3ubuntu10.41
|
||||
libunistring20.9.9-0ubuntu2
|
||||
libuuid12.31.1-0.4ubuntu3.4
|
||||
libuuid12.31.1-0.4ubuntu3.6
|
||||
libwind0-heimdal7.5.0+dfsg-1
|
||||
libxml22.9.4+dfsg1-6.1ubuntu1.2
|
||||
libxml22.9.4+dfsg1-6.1ubuntu1.3
|
||||
libzstd11.3.3+dfsg-2ubuntu1.1
|
||||
locales2.27-3ubuntu1
|
||||
login1:4.5-1ubuntu2
|
||||
lsb-base9.20170808ubuntu1
|
||||
mawk1.3.3-17ubuntu3
|
||||
mime-support3.60ubuntu1
|
||||
mount2.31.1-0.4ubuntu3.4
|
||||
mount2.31.1-0.4ubuntu3.6
|
||||
ncurses-base6.1-1ubuntu1.18.04
|
||||
ncurses-bin6.1-1ubuntu1.18.04
|
||||
openssl1.1.1-1ubuntu2.1~18.04.4
|
||||
openssl1.1.1-1ubuntu2.1~18.04.6
|
||||
p7zip16.02+dfsg-6
|
||||
p7zip-full16.02+dfsg-6
|
||||
passwd1:4.5-1ubuntu2
|
||||
@@ -156,12 +157,12 @@ perl-base5.26.1-6ubuntu0.3
|
||||
pinentry-curses1.1.0-1
|
||||
procps2:3.3.12-3ubuntu1.2
|
||||
publicsuffix20180223.1310-1
|
||||
python2.7.15~rc1-1
|
||||
python2.72.7.15-4ubuntu4~18.04.2
|
||||
python2.7-minimal2.7.15-4ubuntu4~18.04.2
|
||||
python-minimal2.7.15~rc1-1
|
||||
qbittorrent-cli1.5.19237-1
|
||||
qbittorrent-nox4.1.9.99~201910280138-6733-7825d86~ubuntu18.04.1
|
||||
python33.6.7-1~18.04
|
||||
python3.63.6.9-1~18.04ubuntu1
|
||||
python3.6-minimal3.6.9-1~18.04ubuntu1
|
||||
python3-minimal3.6.7-1~18.04
|
||||
qbittorrent-cli1.5.19350-1
|
||||
qbittorrent-nox1:4.2.5.99~202004250119-7015-2c65b79~ubuntu18.04.1
|
||||
qttranslations5-l10n5.9.5-0ubuntu1
|
||||
readline-common7.0-3
|
||||
sed4.4-2
|
||||
@@ -169,11 +170,11 @@ sensible-utils0.0.12
|
||||
shared-mime-info1.9-2
|
||||
sysvinit-utils2.88dsf-59.10ubuntu1
|
||||
tar1.29b-2ubuntu0.1
|
||||
tzdata2019c-0ubuntu0.18.04
|
||||
tzdata2020a-0ubuntu0.18.04
|
||||
ubuntu-keyring2018.09.18.1~18.04.0
|
||||
unrar1:5.5.8-1
|
||||
unzip6.0-21ubuntu1
|
||||
util-linux2.31.1-0.4ubuntu3.4
|
||||
util-linux2.31.1-0.4ubuntu3.6
|
||||
xdg-user-dirs0.17-1ubuntu1
|
||||
xz-utils5.2.2-1.3
|
||||
zlib1g1:1.2.11.dfsg-0ubuntu2
|
||||
|
||||
@@ -13,6 +13,12 @@ available_architectures:
|
||||
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
|
||||
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
|
||||
|
||||
# development version
|
||||
development_versions: true
|
||||
development_versions_items:
|
||||
- { tag: "latest", desc: "Stable qbittorrent releases" }
|
||||
- { tag: "unstable", desc: "Unstable qbittorrent releases" }
|
||||
|
||||
# container parameters
|
||||
common_param_env_vars_enabled: true
|
||||
param_container_name: "{{ project_name }}"
|
||||
@@ -63,6 +69,7 @@ app_setup_block: |
|
||||
|
||||
# changelog
|
||||
changelogs:
|
||||
- { date: "03.04.20:", desc: "Fix adding search engine plugin" }
|
||||
- { date: "02.08.19:", desc: "Add qbitorrent-cli for processing scripts." }
|
||||
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }
|
||||
- { date: "14.01.19:", desc: "Rebase to Ubuntu, add multi arch and pipeline logic." }
|
||||
|
||||
@@ -9,7 +9,7 @@ mkdir -p \
|
||||
[[ ! -e /config/qBittorrent/qBittorrent.conf ]] && \
|
||||
cp /defaults/qBittorrent.conf /config/qBittorrent/qBittorrent.conf
|
||||
|
||||
# chown download directory if currently set to root
|
||||
# chown download directory if currently not set to abc
|
||||
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then
|
||||
chown -R abc:abc /downloads
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user