Add camera SDK Nix derivation and remove Docker-based SDK installation

This commit is contained in:
UGA Innovation Factory
2025-12-18 20:38:19 -05:00
parent 6d441a14a1
commit aa4a50fb69

View File

@@ -30,6 +30,44 @@
}:
let
# Camera SDK derivation - extracts and installs the SDK
camera-sdk = pkgs.stdenv.mkDerivation {
pname = "mindvision-camera-sdk";
version = "2.1.0.49";
src = ./usda-vision/camera-management-api/camera_sdk/linuxSDK_V2.1.0.49(250108).tar.gz;
nativeBuildInputs = [ pkgs.makeWrapper ];
buildInputs = [ pkgs.libusb1 ];
unpackPhase = ''
tar xzf $src
cd "linuxSDK_V2.1.0.49(250108)"
'';
installPhase = ''
mkdir -p $out/lib $out/include
# Copy library files
if [ -d lib ]; then
cp -r lib/* $out/lib/ || true
fi
# Copy header files
if [ -d include ]; then
cp -r include/* $out/include/ || true
fi
# Make libraries executable
chmod +x $out/lib/*.so* 2>/dev/null || true
'';
meta = {
description = "MindVision Camera SDK";
platforms = pkgs.lib.platforms.linux;
};
};
# Create a derivation that packages the usda-vision directory
usda-vision-app = pkgs.stdenv.mkDerivation {
pname = "usda-vision";
@@ -64,21 +102,58 @@ let
echo "Source directory contents:"
ls -la $src/ || true
# Process docker-compose.yml first and create it in a temp location
# Replace .env paths, volume mount paths, and hostnames
# Process docker-compose.yml - replace paths, hostnames, and configure SDK from Nix
if [ -f $src/docker-compose.yml ]; then
${pkgs.gnused}/bin/sed \
-e 's|env_file:.*management-dashboard-web-app/\.env|env_file: /var/lib/usda-vision/.env|g' \
-e 's|\./management-dashboard-web-app/\.env|/var/lib/usda-vision/.env|g' \
-e 's|\./management-dashboard-web-app|/var/lib/usda-vision/management-dashboard-web-app|g' \
-e 's|\./media-api|/var/lib/usda-vision/media-api|g' \
-e 's|\./video-remote|/var/lib/usda-vision/video-remote|g' \
-e 's|\./scheduling-remote|/var/lib/usda-vision/scheduling-remote|g' \
-e 's|\./vision-system-remote|/var/lib/usda-vision/vision-system-remote|g' \
-e 's|\./camera-management-api|/var/lib/usda-vision/camera-management-api|g' \
-e 's|exp-dash|192.168.1.156|g' \
-e 's|localhost|192.168.1.156|g' \
$src/docker-compose.yml > $TMPDIR/docker-compose.yml
# Use Python for multi-line block removal
${pkgs.python3}/bin/python3 <<PYTHON_SCRIPT > $TMPDIR/docker-compose.yml
import re
with open('$src/docker-compose.yml', 'r') as f:
content = f.read()
# Replace paths and hostnames
replacements = [
(r'env_file:.*management-dashboard-web-app/\\.env', 'env_file: /var/lib/usda-vision/.env'),
(r'\\./management-dashboard-web-app/\\.env', '/var/lib/usda-vision/.env'),
(r'\\./management-dashboard-web-app', '/var/lib/usda-vision/management-dashboard-web-app'),
(r'\\./media-api', '/var/lib/usda-vision/media-api'),
(r'\\./video-remote', '/var/lib/usda-vision/video-remote'),
(r'\\./scheduling-remote', '/var/lib/usda-vision/scheduling-remote'),
(r'\\./vision-system-remote', '/var/lib/usda-vision/vision-system-remote'),
(r'\\./camera-management-api', '/var/lib/usda-vision/camera-management-api'),
('exp-dash', '192.168.1.156'),
('localhost', '192.168.1.156'),
('LD_LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib', 'LD_LIBRARY_PATH=/lib/camera-sdk:/usr/local/lib:/lib:/usr/lib'),
]
for pattern, replacement in replacements:
content = re.sub(pattern, replacement, content)
# Add SDK volume mount after timezone mount
content = re.sub(
r'( - /etc/timezone:/etc/timezone:ro)',
r'\\1\\n - \${camera-sdk}/lib:/lib/camera-sdk:ro',
content
)
# Remove SDK installation blocks (first block)
content = re.sub(
r' # Only install system packages if not already installed.*?else\\n.*?echo.*?System dependencies already installed.*?fi\\n',
'',
content,
flags=re.DOTALL
)
# Remove SDK installation blocks (second block)
content = re.sub(
r' # Install camera SDK if not already installed.*?fi;\\n',
'',
content,
flags=re.DOTALL
)
print(content, end='')
PYTHON_SCRIPT
fi
# Copy all application files using rsync with chmod, excluding files we'll provide separately
@@ -155,9 +230,17 @@ in
# Supabase
supabase-cli
# Camera SDK
camera-sdk
# USDA Vision application package with convenience scripts
usda-vision-app
];
# Make camera SDK libraries available system-wide
environment.variables = {
LD_LIBRARY_PATH = "${camera-sdk}/lib";
};
# Enable Docker service with LXC-compatible settings
virtualisation.docker = {