diff --git a/.github/codeql.yml b/.github/codeql.yml deleted file mode 100644 index c480707..0000000 --- a/.github/codeql.yml +++ /dev/null @@ -1,89 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ "main" ] - paths: - - "get-version.py" - pull_request: - branches: [ "main" ] - paths: - - "get-version.py" - schedule: - - cron: '24 3 * * 2' - -jobs: - analyze: - name: Analyze - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners - # Consider using larger runners for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - # required for all workflows - security-events: write - - # only required for workflows in private repositories - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - language: [ 'python' ] - # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] - # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v3 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" - diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e321bcf..3cdbb87 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,8 +12,3 @@ updates: directory: "/" schedule: interval: "daily" - - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "daily" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8d19d65..8f5db56 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,59 +1,56 @@ name: Build & Release +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: workflow_dispatch: + inputs: + version: + description: "Version" + required: false + type: string push: branches: - "main" + - "develop" paths-ignore: - - ".github/**" - "docs/**" - - "README.md" - - "get_version.py" + - "**.md" env: - IMAGE_NAME: baidunetdisk-docker + DOCKERHUB_SLUG: docker.io/yucatovo/baidunetdisk-docker + GHCR_SLUG: ghcr.io/yucat-ovo/baidunetdisk-docker jobs: - Build: - name: Build - strategy: - matrix: - arch: [linux/amd64, linux/arm64] + prepare: + name: prepare runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@master - - name: Set variables - id: set-vars - run: | - VERSION="1.0.4" - GITHUB_REF=${{ github.ref }} - BRACH=${GITHUB_REF#refs/heads/} - DATE=$(date '+%Y-%m-%dT%H:%M:%S%Z') - ARCH=${{ matrix.arch }} - PLATFORM_PAIR=${ARCH//\//-} - PLATFORM=${ARCH//linux\//} - - echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT - echo "GITHUB_REF=${GITHUB_REF}" >> $GITHUB_OUTPUT - echo "BRACH=${BRACH}" >> $GITHUB_OUTPUT - echo "DATE=${DATE}" >> $GITHUB_OUTPUT - echo "PLATFORM_PAIR=${PLATFORM_PAIR}" >> $GITHUB_OUTPUT - echo "PLATFORM=${PLATFORM}" >> $GITHUB_OUTPUT - name: Docker Meta - id: meta uses: docker/metadata-action@v5 + id: meta with: images: | - ${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }} - ghcr.io/${{ github.repository }} + ${{ env.DOCKERHUB_SLUG }} + ${{ env.GHCR_SLUG }} tags: | - type=raw,value=${{ steps.set-vars.outputs.VERSION }} - type=raw,value=${{ steps.set-vars.outputs.BRACH }} - type=raw,value=${{ steps.set-vars.outputs.PLATFORM }} - type=raw,value=latest + type=ref,event=branch,enable=${{ github.ref_name != github.event.repository.default_branch }} + type=edge,branch=develop + type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} + type=sha + labels: | + org.opencontainers.image.title=BaiduNetdisk-Docker + org.opencontainers.image.description=A BaiduNetdisk image base on Linuxserver.io's KasmVNC image. + org.opencontainers.image.vendor=YuCat-OVO + + - name: Rename meta bake definition file + run: | + mv "${{ steps.meta.outputs.bake-file }}" "/tmp/bake-meta.json" - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -61,66 +58,106 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Upload meta bake definition + uses: actions/upload-artifact@v4 + with: + name: bake-meta + path: /tmp/bake-meta.json + if-no-files-found: error + retention-days: 1 + + build: + runs-on: ubuntu-latest + needs: + - prepare + strategy: + fail-fast: false + matrix: + platform: ["linux/amd64", "linux/arm64"] + steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> "$GITHUB_ENV" + echo "ARCH=${platform//linux\//}" >> "$GITHUB_ENV" + + - name: Checkout + uses: actions/checkout@v4 + + - name: Download meta bake definition + uses: actions/download-artifact@v4 + with: + name: bake-meta + path: /tmp + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + buildkitd-flags: "--debug" + - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io - username: ${{ github.actor }} + username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push by digest - id: build - uses: docker/build-push-action@v5 + - name: Build + id: bake + uses: docker/bake-action@v4 with: - context: . - platforms: ${{ matrix.arch }} - build-args: | - BUILD_DATE=${{ steps.set-vars.outputs.DATE }} - VERSION=${{ steps.set-vars.outputs.VERSION }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + files: | + ./docker-bake.hcl + /tmp/bake-meta.json + targets: ${{ env.PLATFORM_PAIR }} + set: | + *.tags= + *.platform=${{ matrix.platform }} + *.cache-from=type=gha,scope=build-${{ env.PLATFORM_PAIR }} + *.cache-to=type=gha,scope=build-${{ env.PLATFORM_PAIR }} + *.output=type=image,"name=${{ env.DOCKERHUB_SLUG }},${{ env.GHCR_SLUG }}",push-by-digest=true,name-canonical=true,push=true - - name: Export digest + - name: Export digest (amd64) + if: ${{ matrix.platform }} == "linux/amd64" run: | mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" + digest="${{ fromJSON(steps.bake.outputs.metadata).image-amd64['containerimage.digest'] }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Export digest (arm64) + if: ${{ matrix.platform }} == "linux/arm64" + run: | + mkdir -p /tmp/digests + digest="${{ fromJSON(steps.bake.outputs.metadata).image-arm64['containerimage.digest'] }}" touch "/tmp/digests/${digest#sha256:}" - name: Upload digest uses: actions/upload-artifact@v4 with: - name: digests-${{ steps.set-vars.outputs.PLATFORM_PAIR }} + name: digests-${{ env.PLATFORM_PAIR }} path: /tmp/digests/* if-no-files-found: error retention-days: 1 - Merge: + merge: runs-on: ubuntu-latest needs: - - Build + - build steps: - - name: Checkout - uses: actions/checkout@master - - name: Set variables - id: set-vars - run: | - VERSION="1.0.3" - GITHUB_REF=${{ github.ref }} - BRACH=${GITHUB_REF#refs/heads/} - DATE=$(date '+%Y-%m-%dT%H:%M:%S%Z') - ACTOR=${{ github.actor }} - - echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT - echo "GITHUB_REF=${GITHUB_REF}" >> $GITHUB_OUTPUT - echo "BRACH=${BRACH}" >> $GITHUB_OUTPUT - echo "DATE=${DATE}" >> $GITHUB_OUTPUT - echo "ACTOR=${ACTOR,,}" >> $GITHUB_OUTPUT + - name: Download meta bake definition + uses: actions/download-artifact@v4 + with: + name: bake-meta + path: /tmp - name: Download digests uses: actions/download-artifact@v4 @@ -132,39 +169,29 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Docker Meta - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }} - ghcr.io/${{ github.repository }} - tags: | - type=raw,value=${{ steps.set-vars.outputs.VERSION }} - type=raw,value=${{ steps.set-vars.outputs.BRACH }} - type=raw,value=latest - - - name: Login to Docker Hub + - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io - username: ${{ github.actor }} + username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Create manifest list and push working-directory: /tmp/digests run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf 'ghcr.io/${{ steps.set-vars.outputs.ACTOR }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) + docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.DOCKERHUB_SLUG }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \ + $(printf '${{ env.DOCKERHUB_SLUG }}@sha256:%s ' *) + docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.GHCR_SLUG }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \ + $(printf '${{ env.GHCR_SLUG }}@sha256:%s ' *) - name: Inspect image run: | - docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} + tag=$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' /tmp/bake-meta.json) + docker buildx imagetools inspect ${{ env.DOCKERHUB_SLUG }}:${tag} + docker buildx imagetools inspect ${{ env.GHCR_SLUG }}:${tag} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..a322d5d --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,59 @@ +name: test + +on: + workflow_dispatch: +# push: +# branches: +# - "main" +# - "develop" +# paths-ignore: +# - "docs/**" +# - "**.md" + +env: + BUILD_TAG: localhost:5000/yucatovo/baidunetdisk-docker:test + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: ["linux/amd64", "linux/arm64"] + services: + registry: + image: registry:3.0.0-alpha.1 + ports: + - 5000:5000 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set the value + id: set-vars + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> "$GITHUB_ENV" + echo "ARCH=${platform//linux\//}" >> "$GITHUB_ENV" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver-opts: network=host + platforms: ${{ matrix.platform }} + + - name: Build + uses: docker/bake-action@v4 + with: + push: true + targets: ${{ env.TARGET }} + env: + DEFAULT_TAG: ${{ env.BUILD_TAG }}-${{ env.PLATFORM_PAIR }} + + - name: Test + run: | + uname -m + docker run --rm --platform "${{ matrix.platform }}" alpine:edge echo hello diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml deleted file mode 100644 index ac69818..0000000 --- a/.github/workflows/version.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Get BaiduNetdisk Version - -on: - workflow_dispatch: - schedule: - - cron: "0 3 * * 0" - push: - branches: - - "main" - paths: - - "get_version.py" - -jobs: - get-version: - name: Get BaiduNetdisk Version - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set variables - id: set-vars - run: | - RELEASE_NAME="Released on $(date +%Y%m%d%H%M)" - - echo "RELEASE_NAME=${RELEASE_NAME}" >> $GITHUB_OUTPUT - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.11.7" - - - name: Run Script - run: | - pip install -r requirements.txt - python get_version.py - - - name: Git push assets to branch - run: | - git config --local user.name "github-actions[bot]" - git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add *.json - git commit -m "${{ steps.set-vars.outputs.RELEASE_NAME }}" || true - git push diff --git a/.gitignore b/.gitignore index 68bc17f..b745cbd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.vscode/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/Dockerfile b/Dockerfile index 999f6b9..8d92355 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,15 @@ # syntax=docker/dockerfile:1 +FROM docker.io/library/alpine:edge as download -FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm +RUN \ + sed -i 's/dl-cdn.alpinelinux.org/mirrors.lzu.edu.cn/g' /etc/apk/repositories && \ + apk update && \ + apk add wget curl jq &&\ + wget -nv $(curl 'https://yun.baidu.com/disk/cmsdata?platform=linux&page=1&num=1' | jq -r '.["list"][0]["url_1"]') -O /tmp/baidunetdisk.deb -# set version label -ARG BUILD_DATE -ARG VERSION -ARG TARGETPLATFORM -LABEL build_version="version:- ${VERSION} Build-date:- ${BUILD_DATE}" -LABEL maintainer="YuCat-OVO" -LABEL org.opencontainers.image.source="https://github.com/linuxserver/docker-baseimage-kasmvnc" +FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm-062d5346-ls56 + +LABEL org.opencontainers.image.source="https://github.com/YuCat-OVO/BaiduNetdisk-Docker" ENV \ CUSTOM_PORT="8080" \ @@ -16,67 +17,22 @@ ENV \ HOME="/config" \ TITLE="Baidunetdisk" -COPY url.json /tmp/ - +COPY --from=download /tmp/baidunetdisk.deb /tmp/baidunetdisk.deb # add local files COPY root/ / RUN \ - TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64} && \ - echo "**** arch: ${TARGETPLATFORM} ****" && \ - echo "**** add icon ****" && \ - curl -o \ - /kclient/public/icon.png \ - https://raw.githubusercontent.com/YuCat-OVO/BaiduNetdisk-Docker/master/docs/baidunetdisk.png && \ + sed -i "s/deb.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\ + sed -i "s/security.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\ echo "**** fix trusted.gpg ****" && \ mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/docker.gpg && \ - echo "**** install runtime packages ****" && \ - if [ -n ${TZ} ]; then \ - echo "**** TZ not found, setting up ****" && \ - export TZ=Asia/Shanghai; \ - fi && \ - export DEBIAN_FRONTEND=noninteractive && \ - apt-get update && \ + apt-get update -y && \ apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing \ - wget \ fonts-wqy-microhei \ fonts-wqy-zenhei \ - dbus \ - fcitx-rime \ - libnss3 \ - libopengl0 \ - libxkbcommon-x11-0 \ - libxcb-cursor0 \ - libxcb-icccm4 \ - libxcb-image0 \ - libxcb-keysyms1 \ - libxcb-randr0 \ - libxcb-render-util0 \ - libxcb-xinerama0 \ - libxdamage1 \ - poppler-utils \ - python3 \ - python3-xdg \ desktop-file-utils && \ + \ echo "**** install BaiduNetdisk ****" && \ - if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \ - echo "**** ${TARGETPLATFORM}, reading from url.json ****"; \ - BAIDUNETDISK_VERSION=$(jq -r ".[-2]" /tmp/url.json); \ - BAIDUNETDISK_URL=$(jq -r ".[-2]" /tmp/url.json); \ - elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \ - echo "**** ${TARGETPLATFORM}, reading from url.json ****"; \ - BAIDUNETDISK_VERSION=$(jq -r ".[-1]" /tmp/url.json); \ - BAIDUNETDISK_URL=$(jq -r ".[-1]" /tmp/url.json); \ - echo "**** ${TARGETPLATFORM}, add args ****" && \ - sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" /defaults/*; \ - else \ - echo "**** err, use default url ****" && \ - BAIDUNETDISK_URL="https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb"; \ - fi && \ - echo "***** Getting ${BAIDUNETDISK_URL} ****" && \ - curl -o \ - /tmp/baidunetdisk.deb -L \ - "$BAIDUNETDISK_URL" && \ for i in \ $(dpkg -I /tmp/baidunetdisk.deb | grep "Depends" | cut -c11- | awk -F ', ' '{ for(i=1; i<=NF; i++) print $i }'); \ do \ @@ -88,6 +44,8 @@ RUN \ fi \ done && \ dpkg -i /tmp/baidunetdisk.deb && \ + echo "**** add test ****" && \ + chmod +x /usr/bin/mytest && \ echo "**** cleanup ****" && \ apt-get clean && \ rm -rf \ diff --git a/Dockerfile.arm64 b/Dockerfile.arm64 new file mode 100644 index 0000000..926b1c2 --- /dev/null +++ b/Dockerfile.arm64 @@ -0,0 +1,56 @@ +# syntax=docker/dockerfile:1 +FROM docker.io/library/alpine:edge as download + +RUN \ + sed -i 's/dl-cdn.alpinelinux.org/mirrors.lzu.edu.cn/g' /etc/apk/repositories && \ + apk update && \ + apk add wget curl jq &&\ + wget -nv $(curl 'https://yun.baidu.com/disk/cmsdata?platform=linux&page=1&num=1' | jq -r '.["list"][0]["url_1"]' | sed "s/amd64/arm64/g") -O /tmp/baidunetdisk.deb + +FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm-062d5346-ls56 + +LABEL org.opencontainers.image.source="https://github.com/YuCat-OVO/BaiduNetdisk-Docker" + +ENV \ + CUSTOM_PORT="8080" \ + CUSTOM_HTTPS_PORT="8181" \ + HOME="/config" \ + TITLE="Baidunetdisk" + +COPY --from=download /tmp/baidunetdisk.deb /tmp/baidunetdisk.deb +# add local files +COPY root/ / + +RUN \ + sed -i "s/deb.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\ + sed -i "s/security.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\ + echo "**** fix trusted.gpg ****" && \ + mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/docker.gpg && \ + apt-get update -y && \ + apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing \ + fonts-wqy-microhei \ + fonts-wqy-zenhei \ + desktop-file-utils && \ + \ + echo "**** install BaiduNetdisk ****" && \ + sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" /defaults/*; \ + for i in \ + $(dpkg -I /tmp/baidunetdisk.deb | grep "Depends" | cut -c11- | awk -F ', ' '{ for(i=1; i<=NF; i++) print $i }'); \ + do \ + if [ -n "$(dpkg -l | grep ^ii | grep $i)" ]; \ + then \ + echo "${i} installed,skip"; \ + else \ + apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing ${i}; \ + fi \ + done && \ + dpkg -i /tmp/baidunetdisk.deb && \ + echo "**** add test ****" && \ + chmod +x /usr/bin/mytest && \ + sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" root/usr/bin/mytest; \ + echo "**** cleanup ****" && \ + apt-get clean && \ + rm -rf \ + /tmp/* \ + /var/lib/apt/lists/* \ + /var/tmp/* diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 0000000..d9c1b90 --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,25 @@ +variable "DEFAULT_TAG" { + default = "baidunetdisk-docker:latest" +} + +group "linux-amd64" { + targets = ["image-amd64"] +} +group "linux-arm64" { + targets = ["image-arm64"] +} + +target "docker-metadata-action" { + tags = ["${DEFAULT_TAG}"] +} + +target "image-amd64" { + platforms = ["linux/amd64"] + inherits = ["docker-metadata-action"] + dockerfile = "Dockerfile" +} +target "image-arm64" { + platforms = ["linux/arm64"] + inherits = ["docker-metadata-action"] + dockerfile = "Dockerfile.arm64" +} diff --git a/get_version.py b/get_version.py deleted file mode 100644 index c3bcddd..0000000 --- a/get_version.py +++ /dev/null @@ -1,244 +0,0 @@ -import json -import re -import time - -import requests -from lxml import etree - -GLOBAL_HEADER = { - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" -} - -# 截至2024-03-01最新的版本 -GLOBAL_VERSION = [ - "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb", -] - -# 定义需要检测的版本号范围 -max_version = [4, 20, 0] -min_version = [4, 17, 0] - -# 定义请求延时时间(秒) -GLOBAL_REQUEST_DELAY = 0.5 - - -def get_js_url() -> str: - """请求百度网盘下载页,获取存在下载链接的js文件""" - max_attempts = 5 - attempt = 0 - - url = "" - while attempt < max_attempts: - try: - r = requests.get( - "https://pan.baidu.com/download", - headers=GLOBAL_HEADER, - ) - e = etree.HTML(r.text, parser=None) - - # 获取包含链接的js文件 - for i in e.xpath("//script/@src"): - if re.search("https:\\/\\/.*chunk-common.*\\.js", i): - url = i - # print(url) - return url - except Exception as e: - print(f"An error occurred: {e}") - attempt += 1 - time.sleep(1) # 等待1秒再重试 - - if attempt == max_attempts: - print("Failed after several attempts") - return url - - -def append_json(json_file_name: str, add): - """为Json添加元素""" - file = None - try: - with open(json_file_name, "r") as f: - file = json.load(f) - # print("file=", file) - - except FileNotFoundError: - file = json.loads("") - - file.append(add) - - # print("ufile=", u_file) - - with open(json_file_name, "w") as f: - f.write(json.dumps(file, sort_keys=True, indent=4)) - return - - -def parse_url_from_json() -> list: - l = "" - try: - with open("url.json", "r") as f: - l = json.load(f) - except FileNotFoundError: - l = [] - return l - - -def parse_url_from_js(): - """从js文件中提取下载的链接并且去重,写入文件 url.json""" - url = get_js_url() - u_url = [] - - max_attempts = 5 - attempt = 0 - - while attempt < max_attempts: - try: - - d_url = "" - r = requests.get( - url, - headers=GLOBAL_HEADER, - ) - # 过滤链接 - d_url = re.findall( - '(?:link|url(?:_[0-9])?):"https://[a-zA-Z/\\.]*?/netdisk/[a-zA-Z10-9/\\._-]*?(?=")', - r.text, - ) - - # 清理 - for i in range(len(d_url)): - d_url[i] = re.sub('(link|url(?:_[0-9])?):"', "", d_url[i]) - - # 去重 - for i in d_url: - if i not in u_url: - u_url.append(i) - - break - except Exception as e: - print(f"An error occurred: {e}") - attempt += 1 - time.sleep(1) # 等待1秒再重试 - - if attempt == max_attempts: - print("Failed after several attempts,set url to default") - u_url = GLOBAL_VERSION - - with open("url.json", "w") as f: - f.write(json.dumps(u_url, sort_keys=True, indent=4)) - return - - -def make_info_json(urls: list): - """保存为Json文件""" - # print("urls:", urls) - l_url = urls[-3:] - # print(l_url) - j = [] - for i in l_url: - j.append( - { - "version": re.findall("(?<=/)((?:[0-9]{1,2}(?:\\.)?){1,3})(?=/)", i)[0], - "arch": re.findall("(amd64|arm64|x86_64)", i)[0], - "pak": re.findall("(rpm|deb)", i)[0], - "url": i, - }, - ) - # print(j) - with open("info.json", "w") as f: - f.write(json.dumps(j, sort_keys=True, indent=4)) - return - - -def make_url_temple(arch: str): - """按照之前所获取的 url.json,创建模板""" - l = "" - url_temple = "" - try: - with open("url.json", "r") as f: - l = json.load(f) - for i in l: - if re.search("amd64", i) != None and re.search("deb", i) != None: - url_temple = re.sub("amd64", arch, i) - url_temple = re.sub( - "(?<=[_/])((?:[0-9]{1,2}(?:\\.)?){1,3})(?=[_/])", "{0}", url_temple - ) - break - # print(url_temple) - except FileNotFoundError: - url_temple = "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/{0}/baidunetdisk_{0}_arm64.deb" - # print(url_temple) - return url_temple - - -def check_version(version: list, arch: str): - """检测指定版本号是否可用""" - url = make_url_temple(arch).format(".".join(str(v) for v in version)) - # url = "https://httpbin.org/status/200" - # print("Getting {0}".format(url)) - - max_attempts = 5 - attempt = 0 - - while attempt < max_attempts: - try: - response = requests.head( - url, - headers=GLOBAL_HEADER, - ) - if response.status_code == 200: - return True - else: - return False - except Exception as e: - print(f"An error occurred: {e}") - attempt += 1 - time.sleep(1) # 等待1秒再重试 - - if attempt == max_attempts: - print("Failed after several attempts") - - return - - -def find_latest_version(min_version, max_version): - """寻找最新版本号""" - version_list = [ - [x, y, z] - for x in range(max_version[0], min_version[0] - 1, -1) - for y in range(max_version[1], min_version[1] - 1, -1) - for z in range(20, -1, -1) - if not (x == max_version[0] and y == max_version[1] and z > max_version[2]) - if not (x == min_version[0] and y == min_version[1] and z < min_version[2]) - ] - for arch in ["amd64", "arm64"]: - for version in version_list: - # 检测指定版本号是否可用 - if check_version(version, arch): - print( - "arch {0} version {1} is available".format( - arch, ".".join(str(v) for v in version) - ) - ) - append_json( - "url.json", - make_url_temple(arch).format(".".join(str(v) for v in version)), - ) - time.sleep(GLOBAL_REQUEST_DELAY) - break - else: - print( - "arch {0} version {1} is not available".format( - arch, ".".join(str(v) for v in version) - ) - ) - time.sleep(GLOBAL_REQUEST_DELAY) - - # 找不到可用版本号,返回None - return None - - -if __name__ == "__main__": - parse_url_from_js() - find_latest_version(min_version, max_version) - urls = parse_url_from_json() - make_info_json(urls) diff --git a/info.json b/info.json deleted file mode 100644 index 11b3a2f..0000000 --- a/info.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "arch": "amd64", - "pak": "deb", - "url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb", - "version": "4.11.5" - }, - { - "arch": "amd64", - "pak": "deb", - "url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb", - "version": "4.17.7" - }, - { - "arch": "arm64", - "pak": "deb", - "url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_arm64.deb", - "version": "4.17.7" - } -] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index b091a2f..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -lxml==5.2.1 -requests==2.31.0 \ No newline at end of file diff --git a/root/usr/bin/mytest b/root/usr/bin/mytest new file mode 100644 index 0000000..6545aeb --- /dev/null +++ b/root/usr/bin/mytest @@ -0,0 +1,9 @@ +#!/usr/bin/with-contenv bash +# shellcheck shell=bash + +sudo -u root -s /bin/bash -c "/opt/baidunetdisk/baidunetdisk --no-sandbox" > /tmp/baidunetdisk_output.txt 2>&1 & +sleep 15 + +echo -e '\033[0;31m' +cat /tmp/baidunetdisk_output.txt +echo -e '\033[0m' diff --git a/url.json b/url.json deleted file mode 100644 index 771552e..0000000 --- a/url.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - "https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.19.0.18.exe", - "https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_6.9.10.1.exe", - "https://issuepcdn.baidupcs.com/issue/netdisk/MACguanjia/BaiduNetdisk_mac_4.11.0.dmg", - "https://issuepcdn.baidupcs.com/issue/netdisk/MACguanjia/BaiduNetdisk_mac_4.11.0_arm64.dmg", - "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk-4.11.5.x86_64.rpm", - "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb", - "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb", - "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_arm64.deb" -] \ No newline at end of file