{"id":17235899,"url":"https://github.com/publicarray/ruspk","last_synced_at":"2026-02-24T03:08:01.033Z","repository":{"id":44025766,"uuid":"252677068","full_name":"publicarray/ruspk","owner":"publicarray","description":"A much faster reimplementation of https://github.com/SynoCommunity/spkrepo https://synocommunity.com","archived":false,"fork":false,"pushed_at":"2023-09-19T12:06:41.000Z","size":1622,"stargazers_count":5,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"frontend","last_synced_at":"2025-10-19T07:55:40.601Z","etag":null,"topics":["reposetory","rust","synology","synology-servers"],"latest_commit_sha":null,"homepage":"https://ruspk.vercel.app/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/publicarray.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-03T08:38:36.000Z","updated_at":"2025-06-15T18:29:33.000Z","dependencies_parsed_at":"2025-04-14T02:08:31.450Z","dependency_job_id":"bfc19160-4dcd-4a91-a6a9-4821da8b99fe","html_url":"https://github.com/publicarray/ruspk","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/publicarray/ruspk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publicarray%2Fruspk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publicarray%2Fruspk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publicarray%2Fruspk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publicarray%2Fruspk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/publicarray","download_url":"https://codeload.github.com/publicarray/ruspk/tar.gz/refs/heads/frontend","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/publicarray%2Fruspk/sbom","scorecard":{"id":749065,"data":{"date":"2025-08-11","repo":{"name":"github.com/publicarray/ruspk","commit":"9b8fdcc5591d9431c29b08575f13058c203c7278"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.2,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/publicarray/ruspk/build.yml/frontend?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/publicarray/ruspk/build.yml/frontend?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/publicarray/ruspk/build.yml/frontend?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:16: pin your Docker image by updating docker.io/ubuntu:22.04 to docker.io/ubuntu:22.04@sha256:1aa979d85661c488ce030ac292876cf6ed04535d3a237e49f61542d8e5de5ae0","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'frontend'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":0,"reason":"62 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-wq9x-qwcq-mmgf","Warn: Project is vulnerable to: RUSTSEC-2024-0365","Warn: Project is vulnerable to: RUSTSEC-2021-0141","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2024-0384","Warn: Project is vulnerable to: RUSTSEC-2024-0019 / GHSA-r8w9-5wcg-vfj7","Warn: Project is vulnerable to: RUSTSEC-2023-0072 / GHSA-xphf-cx8h-7q9g","Warn: Project is vulnerable to: GHSA-q445-7m23-qrmw","Warn: Project is vulnerable to: RUSTSEC-2024-0357","Warn: Project is vulnerable to: RUSTSEC-2025-0004 / GHSA-rpmj-rpgj-qmpm","Warn: Project is vulnerable to: GHSA-4fcv-w3qc-ppgg","Warn: Project is vulnerable to: RUSTSEC-2025-0022","Warn: Project is vulnerable to: RUSTSEC-2024-0436","Warn: Project is vulnerable to: RUSTSEC-2025-0010","Warn: Project is vulnerable to: GHSA-4p46-pwfr-66x6","Warn: Project is vulnerable to: RUSTSEC-2025-0009","Warn: Project is vulnerable to: GHSA-c86p-w88r-qvqr","Warn: Project is vulnerable to: GHSA-c827-hfw6-qwvm","Warn: Project is vulnerable to: RUSTSEC-2024-0336 / GHSA-6g7w-8wpp-frhj","Warn: Project is vulnerable to: GHSA-9344-p847-qm5c","Warn: Project is vulnerable to: RUSTSEC-2024-0345","Warn: Project is vulnerable to: RUSTSEC-2024-0006 / GHSA-r7qv-8r2h-pg27","Warn: Project is vulnerable to: GHSA-rr8g-9fpq-6wmg","Warn: Project is vulnerable to: RUSTSEC-2025-0023","Warn: Project is vulnerable to: RUSTSEC-2023-0052 / GHSA-8qv2-5vq6-g2g7","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-fwvg-2739-22v7","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-c59h-r6p8-q9wc","Warn: Project is vulnerable to: GHSA-fq54-2j52-jc42","Warn: Project is vulnerable to: GHSA-77r5-gw3j-2mpf","Warn: Project is vulnerable to: GHSA-7m27-7ghc-44w9","Warn: Project is vulnerable to: GHSA-f82v-jwr5-mffw","Warn: Project is vulnerable to: GHSA-fr5h-rqp8-mj6g","Warn: Project is vulnerable to: GHSA-g77x-44xx-532m","Warn: Project is vulnerable to: GHSA-7gfc-8cq8-jh5f","Warn: Project is vulnerable to: GHSA-qpjv-v59x-3qc4","Warn: Project is vulnerable to: GHSA-3h52-269p-cp9r","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-54xq-cgqr-rpm3","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-wqq4-5wpv-mx2g","Warn: Project is vulnerable to: GHSA-3787-6prv-h9w3","Warn: Project is vulnerable to: GHSA-9qxr-qj54-h672","Warn: Project is vulnerable to: GHSA-m4v8-wqvr-p9f7","Warn: Project is vulnerable to: GHSA-c76h-2ccp-4975","Warn: Project is vulnerable to: GHSA-cxrh-j4jr-qwg3","Warn: Project is vulnerable to: GHSA-f8mp-x433-5wpf","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-m95q-7qp3-xv42"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T19:43:23.259Z","repository_id":44025766,"created_at":"2025-08-22T19:43:23.259Z","updated_at":"2025-08-22T19:43:23.259Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29770365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T03:07:52.931Z","status":"ssl_error","status_checked_at":"2026-02-24T03:07:49.415Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["reposetory","rust","synology","synology-servers"],"created_at":"2024-10-15T05:34:55.278Z","updated_at":"2026-02-24T03:08:01.012Z","avatar_url":"https://github.com/publicarray.png","language":"Rust","readme":"# Synorepo-rs\n\n[![ruspk's current version badge](https://img.shields.io/crates/v/ruspk.svg)](https://crates.io/crates/ruspk)\n\nsynorepo-rs is a super fast synology repository server. It uses the existing database structure from [spkrepo](https://github.com/SynoCommunity/spkrepo)\n\nOnly postgres is supported at the moment.\n\n## Install\n\n```sh\ncargo install diesel_cli\n# cargo install ruspk\necho 'DATABASE_URL=postgresql://user:pass@localhost/dbname' \u003e .env\ndiesel migration --migration-dir migrations/postgres/ run\nruspk\n```\n\nAvailable Features: `mysql`, `postgres` and `sqlite`\n\n### Quick start\n\n```sh\n# arch\nsudo pacman -S postgresql git rustup\nrustup default stable\n# ubuntu\nsudo apt install postgresql postgresql-contrib libpq-dev git cargo clang llvm pkg-config nettle-dev socat\ncurl https://get.acme.sh | sh -s email=email@example.com\n\nfish_add_path /home/seb/.cargo/bin\ngit clone https://github.com/publicarray/ruspk \u0026\u0026 cd ruspk\nsudo su - postgres -c \"initdb --locale en_US.UTF-8 -D '/var/lib/postgres/data\"\nsudo systemctl enable --now postgresql\n#journalctl -xeu postgresql.service\n\n#createuser -U postgres -P ruspk\n#createdb ruspk -U postgres\n\n#psql -U postgres\nsudo -u postgres psql\ncreate database ruspk;\ncreate user ruspk with encrypted password 'ruspk';\ngrant all privileges on database ruspk to ruspk;\nALTER DATABASE ruspk OWNER TO ruspk;\nGRANT USAGE, CREATE ON SCHEMA PUBLIC TO ruspk;\nexit\n#psql -U ruspk\n\necho 'DATABASE_URL=postgresql://ruspk:ruspk@localhost/ruspk' \u003e .env\ncargo install diesel_cli --no-default-features --features postgres\ndiesel migration --migration-dir migrations/postgres/ run\ncargo install cargo-watch\ncargo watch -x run\n#\u0026 cargo run\nyarn --cwd frontend dev\n\n```\n### Test the API\n\n```sh\n# NAS package list request\ncurl -sv 'http://127.0.0.1:8080/nas?package_update_channel=beta\u0026unique=synology_apollolake_418play\u0026build=24922\u0026language=enu\u0026major=6\u0026micro=2\u0026arch=apollolake\u0026minor=2\u0026timezone=Melbourne\u0026nano=4' | jq\n\n# upload new package (wip)\nhttp --verify=no --ignore-stdin --auth $PUBLISH_API_KEY: POST $PUBLISH_URL/packages @$SPK_FILE_NAME\n```\n\n## Configuration (`.env` file)\n\n```env\n## Log levels for each component\n# RUST_LOG=\"ruspk=info,actix_web=info,actix_server=info\"\n## Or generic\nRUST_LOG=\"info\"\n## For web server logs set one of\n# RUST_LOG=\"info\"\n# RUST_LOG=\"actix_web=info\"\n## For verbose logs\n# RUST_LOG=\"trace\"\n\n## Database connection\n# DATABASE_URL=file:db/database.sqlite\n# DATABASE_URL=mysql://user:pass@localhost/dbname\n# DATABASE_URL=postgresql://user:pass@localhost/dbname\n\n## IP address to Bind to and listen for connections\nLISTEN=0.0.0.0\n\n## Port to Bind to and listen for connections\nPORT=80\n\n## URL to prepend for spk archive, icon and screenshot files\nURL=https://packages.synocommunity.com\n\n## Public key to advertise for signed packages\nPUBLIC_KEY_FILE=pubkey.pem\n\n## Time in seconds to allow stale responses to be served from memory cache\nCACHE_TTL=600\n```\n\n# Dev Guides\n\n\u003chttps://diesel.rs/\u003e\n\n\u003chttps://actix.rs/\u003e\n\n\u003chttps://yew.rs/\u003e\n\n\u003chttps://github.com/SynoCommunity/spksrc/wiki/Package-Center-specifications\u003e\n\n\u003chttp://spkrepo.readthedocs.org/\u003e\n\n## Backup and restore database\n\n```sh\ncd server/db\npg_dump -U ruspk ruspk \u003e ruspk.sql\npsql -U ruspk -d ruspk -f ruspk.sql\n```\n\nUpgrade Database\n\n```sh\nparu -S postgresql-12-upgrade\n\nsudo systemctl stop postgresql\nsudo mv /var/lib/postgres/data /var/lib/postgres/olddata\nsudo mkdir /var/lib/postgres/data\nsudo chown postgres:postgres /var/lib/postgres/data\nsudo su postgres\n[postgres]$ initdb -D /var/lib/postgres/data\n[postgres]$ /opt/pgsql-13/bin/pg_ctl -D /var/lib/postgres/olddata/ start\n# sudo cp /usr/lib/postgresql/postgis-3.so /opt/pgsql-13/lib/ # Only if postgis installed\n[postgres]$ pg_dumpall -h /tmp -f /tmp/old_backup.sql\n[postgres]$ /opt/pgsql-13/bin/pg_ctl -D /var/lib/postgres/olddata/ stop\nsudo systemctl start postgresql # in a new terminal window\n[postgres]$ psql -f /tmp/old_backup.sql postgres\nsudo rm /tmp/old_backup.sql\nparu -Rns postgresql-12-upgrade\n```\n\n## development\n\n```sh\nsystemctl start postgresql\nmkdir -p frontend/dist\ncargo run\nyarn --cwd frontend dev\n# rustup override add nightly\n# rustup override unset\n```\n\n### Debugging\n\n`RUST_BACKTRACE=1 CACHE_TTL=0 RUST_LOG=\"warn,ruspk=trace,actix_web=info,actix_server=info\" cargo run`\n\n## lint\n\n```sh\n# formatting\n# $ rustup component add rustfmt\ncargo fmt\n# fix common mmistakes\n# $ rustup component add clippy\ncargo clippy\n# check security advisories\n# $ cargo install cargo-audit\ncargo audit\n# Get latest versions defined in Cargo.toml\n# $ cargo install cargo-update\ncargo update\n# update Cargo.toml\n# $ cargo install cargo-edit\ncargo upgrade\n# check of errors\ncargo check\n# show errors in your favourite editor\n# https://rust-analyzer.github.io/manual.html#rust-analyzer-language-server-binary\n# $ rustup +nightly component add rust-analyzer-preview\n```\n\n## release\n\n```sh\ncargo build --release\nRUST_LOG=\"warn\" target/release/ruspk\nyarn --cwd frontend export -o dist\ncargo publish\n```\n\nOptimised build (**not** used for benchmarks and no measurable improvement):\n\n`RUSTFLAGS=\"-C opt-level=3 -C debuginfo=0 -C target-cpu=native\" cargo build --release`\n\n\u003chttps://github.com/image-rs/image\u003e\n\n\u003chttps://tlakomy.com/the-truth-about-cookies-tokens-and-apis\u003e\n\n\n\n\n## Create a Key\n\n```sh\ncargo install sq\nsq key generate --userid \"synocommunity.com\" --export pgpkey.pem\n# or\ngpg --generate-key\n```\n\n## Reset Database\n\n```sh\npsql -U postgres -d ruspk -f server/db/reset.sql \u0026\u0026 psql -U ruspk -d ruspk -f server/db/synorepo.sql\n```\n\n## Analyse Postgres Database\n\nThis is so the query planner has more information so it can make better choices.\n\n```sh\nvacuumdb -v -U postgres -Z ruspk\n```\n\n## Docker\n\n```sh\npodman pull docker.io/rust docker.io/postgres\npodman build -t ruspk .\npodman run --name postgres -e POSTGRES_PASSWORD=ruspk --shm-size=256MB -d ruspk\npodman run --name ruspk -p 8080:8080 -e DATABASE_URL=postgresql://ruspk:ruspk@postgres/ruspk ruspk\n```\n\n### Docker Compose\n```sh\npodman-compose down\n#podman volume rm ruspk_db-data\npodman-compose up -d\npodman cp server/db/synorepo.sql ruspk_db:/synorepo.sql\npodman-compose exec db psql -U ruspk -d ruspk -f /synorepo.sql\npodman-compose logs -f ruspk\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpublicarray%2Fruspk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpublicarray%2Fruspk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpublicarray%2Fruspk/lists"}