diff --git a/default.nix b/default.nix index 072d080..10118db 100644 --- a/default.nix +++ b/default.nix @@ -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 < $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 = {