← Documentation hubCurrent published guide

ArcGIS Enterprise 12.1 on Linux: certification procedure

Target confirmed by the operator: ArcGIS Enterprise 12.1, Linux. Distribution, architecture, SDK installation, and staging server remain to be recorded. This repository has not produced or registered a certified .cdpk.

Version and platform baseline

Esri's installation compatibility table lists Node 24.13.0 for Server 12.1 and Node 22.14.0–24.13.0 for the SDK 12.1 CLI. It recommends matching the development/server OS family and Node version. CDF runtime is included with Server 12.0 and later.

Build the SDK scaffold and native dependencies on Linux, using the target architecture and Node 24.13.0. Record the actual server patch/runtime version before building. The diagnostic image now defaults to node:24.13.0-bookworm-slim; CI verifies Node 22.14.0 and 24.13.0. A Debian container test does not certify every supported Server Linux distribution. Security scans still gate release; matching a vendor runtime does not establish that an image is vulnerability-free.

Keep CloudFS disabled for the initial local/HTTPS/S3 core certification. Its matching signed extension and provider qualification are separate activation gates.

Prepare the genuine SDK package

Install the 12.1 SDK with CDF CLI on the Linux development host. Use the SDK-generated files and preserve its runtime/scaffold dependencies. Commands follow the official CLI reference and app creation guide.

node --version
cdf --version
cdf createapp duckdb-cdf-12-1
cd duckdb-cdf-12-1
cdf createprovider duckdb-readonly

From the reviewed repository on that Linux host, run npm ci, npm run build, source preflight, and npm pack. Install the resulting tarball as a production dependency in providers/duckdb-readonly, preserving its generated package/lockfile.

Point the scaffold's src/index.js Model field to its src/model.js. A minimal model wrapper in the generated provider is:

const path = require('path');
const CoreModel = require('duckdb-arcgis-provider');
module.exports = class Model extends CoreModel {
  constructor() {
    super({ configPath: path.join(__dirname, 'provider-config.json') });
  }
};

Place a validated provider-config.json next to the wrapper. Use explicit Linux source, extension and writable scratch paths suitable for the ArcGIS service account. Relative core source paths resolve inside the installed core package. Keep installExtensions=false in production; preinstall signed, matching spatial/httpfs/aws extensions using the package's scripts/install-extensions.js on the target host. Inject credentials through the service's approved secret mechanism.

Use the matching full-fetch or pass-through data-loading pattern and read-only settings in the generated manifest. Begin with full-fetch for the baseline; qualify P1 pass-through independently. Define a dataSource service parameter only when required, with key/label/description; constrain configuration to the sources that service may expose. The async getData(req) interface reads req.params.dataSource. No callback, legacy host/id parameters, or npm config module is needed. See Esri's model and service-parameter contract.

Run the generated app's own tests and npm start. Simulate service parameters with the SDK's x-esri-cdf-service-params header. Verify its GeoServices routes; this repository's /api/sources routes belong to the diagnostic server. Retain the scaffold's index/manifest settings and reconcile its lifecycle with one model/native connection per worker.

From the generated app root:

cdf export duckdb-readonly
sha256sum <generated-package>.cdpk

cdf export produces the real .cdpk. The core npm tarball/container is an input, not a replacement CDF artifact. A GIS administrator then registers the reviewed package and creates a staging service using the supported Server administration workflow. Record registration/service metadata without saving administrator tokens in reports.

Staging acceptance record

Test Required evidence
Package/native load SDK/Server patch, Linux distribution/architecture, Node/DuckDB/extension versions, dependency lock, .cdpk checksum, successful registration
Complete data Source snapshot/count and preflight report; no truncation; known IDs and null geometry preserved
Layer metadata ObjectID/field types, geometry family, CRS, extent and max-record behavior match source and clients
Queries Attribute and spatial predicates, IDs, counts, paging, ordering/statistics supported by CDF full-fetch agree with expected results
Clients ArcGIS Pro and a web map render, select, query and show correct pop-ups
Access Authorized service use works; denied service access fails; dataSource cannot expose another trust domain
Failure handling Missing/expired credentials, unavailable source, invalid/duplicate IDs, schema drift, mixed geometry, row/byte overflow and timeouts fail clearly
Recovery Service/Server restarts and source rotation preserve identity; readiness and client queries recover; rollback restores the known package/config/snapshot
Capacity/freshness Representative concurrent/soak workload, RSS/CPU/spill, error/latency/staleness targets, queue/cancellation/restart evidence

Use the operations commands to capture preflight and capacity evidence. Native interruption is cooperative; prove the supervisor can terminate/restart an unresponsive worker. Verify CDF process cleanup and source access under the actual service account.

Certification can be signed off only after every applicable row passes on the target staging site. The local Windows host has no SDK CLI or staging connection, and its Docker daemon is unavailable. Linux CI, a generated package, and these staging checks remain required external evidence.

For P1 certification, compare safe where semantics, page ordering/tie-breakers, selected fields, IDs beyond maxRecordCount, counts/extents, output projection and grouped statistics against known complete datasets. Exercise projected 3857/local sources and ArcGIS points/paths/rings, schema approval/drift, source identity changes/outages and two-worker isolation. Record the actual CDF manifests and filtersApplied behavior; unsupported query operations must return explicit errors.