What changes
Prerequisites
- A separate Linux x86-64 host for v3. The
scanoss-services-apibinary needs glibc 2.36 or later, so use Debian 12 or later, or another distribution with glibc 2.36+. libgcryptandzlib, for exampleapt install libgcrypt20 zlib1gon Debian.- At least 7.5 TB of SSD for the crc64 KB. The full KB is about 7.2 TB today and grows by about 400 GB a month, so plan room for the updates you’ll import.
- 64 GB of RAM and 16 to 20 CPU threads as a starting point. That is what SCANOSS runs on its own crc64 scan nodes. The services themselves use little memory: most of the RAM works as the operating system’s page cache for the KB, and more cache means faster scans.
- Your SFTP credentials, the same ones you use for v2 KB downloads.
- Outbound HTTPS to
api.osv.dev, if you turn on the OSV vulnerability source in the API service’s config. - An API key for
scanoss-cliis not needed when you point it at your own deployment. A custom API URL may run without a key.
Set up v3
1
Download the crc64 knowledge base
The crc64 KB is in your SFTP account under Never point
kb/crc64/, next to the v2 KB you download today:The
kb-download.sh script from the
on-premise repository downloads all three. Its
default is still the v2 KB, so always pass one of the crc64 modes with -m. See the
script’s documentation
for every option.-o at a folder that holds a v2 KB: the tables have the same names. The crc64
KB and the DuckDB files are not part of every subscription. Without access, the script
stops and asks you to contact SCANOSS support.The script asks for your SFTP host, port, user, and password unless you pass them. If you
download with your own SFTP client instead, only take a full release folder that contains the COMPLETE file. A folder without it is
still being published.Check every file after the download. Each entry has a checksum manifest: from release 26.10,
a SHA-256 file under sha256sum/, and before that an MD5 file under md5sum/. Each DuckDB
file comes with a .sha256 file next to it.2
Install LDB 5 and engine 6
Install the crc64 line of LDB first, then the engine. Their releases carry a
-crc64 suffix,
for example v5.0.0-crc64 for LDB and v6.0.0-crc64 for the engine. Debian packages are on
the LDB releases and
engine releases pages.Put the oss folder of the full KB where the engine reads it, /var/lib/ldb/oss, as in
v2. Then check that both binaries report the crc64 line:3
Install and configure the API service
scanoss-services-api is one Linux x86-64 binary. It links the system libldb.so from
LDB 5. Download the release from your SCANOSS SFTP account, with the same credentials you use
for the KB.Copy the binary onto your PATH, and check it:- Scan-only or decoration-only nodes. Leave out
serving_dbfor a node that only scans. Leave outscan.engine_pathfor a node that only decorates. - Candidates per match.
scan.batch.pipeline.max_componentssets how many candidate components a full-file match reports when the client doesn’t ask. A client can override it for one scan withscanoss-cli scan --max-components Nor--max-components all. - DuckDB files. Point
serving_db.pathat a symlink to the file, not at the file. To switch to a new month’s file, change the symlink and send the processSIGHUP. The service checks the new file, switches to it, and keeps the old one if the new one fails its checks. - File contents. The crc64 KB has no
sourcestable, so/v3/file-contentsisn’t served from your KB. Evidence links in licence and copyright results point at the public SCANOSS URLs by default.
4
Put it behind your proxy or load balancer
- Authentication.
scanoss-services-apihas no authentication of its own. Don’t expose it directly. Put it behind your own reverse proxy and network controls. The service can also require client certificates (mutual TLS) withserver.tls.client_ca_file. - TLS. The service listens on plain HTTP by default. Terminate TLS at your proxy, or
turn on
server.tlsin the config. - More than one node. A
scanoss-cliscan uploads in several blocks and then polls for the result. The service keeps each scan in its own memory and local disk, so every request for one scan must reach the same node. Route by the scan ID: theX-Scan-Idheader on uploads to/v3/wfp/scan, and the ID in the path ofGET /v3/wfp/scan/{id}. With one node, you don’t need this. - Upload size. Allow request bodies of at least the upload block size.
scanoss-clisends 1 MiB blocks by default.
5
Validate
Check that the service is up and that its dependencies are ready:Compare the components with a v2 scan of the same code. Expect some differences. See
Behaviour changes that alter results.
/v3/health/ready answers 503 with "status": "not_ready" when a critical dependency,
such as the serving database, is unavailable. The service also serves its API reference at
/v3/docs/.Then scan something you know, and decorate it:6
Point clients at v3
Set the API URL on each client that moves to v3:Use the base URL only.
scanoss-cli adds the /v3 paths. See
From scanoss-py to scanoss-cli for the
rest of the client changes.7
Keep v2 running
Leave your v2 deployment in place. Clients that stay on
scanoss-py, and the SCANOSS
integrations, need it: they can’t talk to v3. If something goes wrong on v3, point the moved
clients back at v2. Nothing on the v2 host changes, so that is your rollback.Keep v3 up to date
- KB updates. SCANOSS publishes crc64 KB updates on the same cadence as v2, under
kb/crc64/update/<version>/in your SFTP account. Download them withkb-download.sh -m crc64_updateand import them as described in the KB update guide, using the crc64 folder instead of the v2 one. Check each download against its checksum manifest. - Decoration data. Each release has new DuckDB files under
kb/duckdb/<YY.MM>/. Download the new file, check it against its.sha256file, point theserving_db.pathsymlink at it, and reload the service (systemctl reloadwith the unit above, orkill -HUP). - Engine and LDB. Upgrade them together and stay on the crc64 line. Check
ldb -vandscanoss -vafter every upgrade. - The API service. Keep the previous binary until the new one passes
/v3/health/ready, so you can switch back.