Popax21 / synaTudor

GNU Lesser General Public License v2.1
89 stars 10 forks source link

tudor_host fails on NixOS #27

Closed MrQubo closed 1 month ago

MrQubo commented 1 month ago

journalctl:

``` Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Activated sandbox Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Received init message - USB device 2-3 Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Initialized libcrypto Jul 16 22:29:25 work tudor_host_launcher[24142]: libusb: warning [op_init] sysfs not mounted Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Initialized libusb Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported resource data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported exception data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Initialized libusb Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported resource data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported exception data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Loaded driver DLL 'synaFpAdapter104.dll' [186656 bytes] Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported resource data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] PE file contains unsupported exception data directory! Jul 16 22:29:25 work tudor_host_launcher[24142]: [WRN] Data directory 4 has invalid bounds! [end 0x17ebe0 > image end 0x17e000] Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Loaded driver DLL 'synaWudfBioUsb104.dll' [1567712 bytes] Jul 16 22:29:25 work tudor_host_launcher[24142]: [INF] Initializing driver DLL 'synaFpAdapter104.dll'... Jul 16 22:29:25 work tudor_host_launcher[24142]: [ERR] Unresolved import called! Jul 16 20:29:57 work systemd-coredump[20908]: [LNK] Process 20905 (tudor_host) of user 3333 dumped core. Module libudev.so.1 without build-id. Module libseccomp.so.2 without build-id. Module libcap.so.2 without build-id. Module libusb-1.0.so.0 without build-id. Module tudor_host without build-id. Stack trace of thread 20905: #0 0x00007fe4283cbefc __pthread_kill_implementation (libc.so.6 + 0x8fefc) #1 0x00007fe42837be86 raise (libc.so.6 + 0x3fe86) #2 0x00007fe428364935 abort (libc.so.6 + 0x28935) #3 0x00000000004037a2 unresolved_stub.cold (tudor_host + 0x37a2) #4 0x00007fe4282c68a2 n/a (n/a + 0x0) #5 0x00007fe4282c65b5 n/a (n/a + 0x0) ELF object binary architecture: AMD x86-64 Jul 16 20:29:57 work fprintd[20895]: Tudor host process died! Exit Code 134 ```

uname -a: Linux work 6.8.12 #1-NixOS SMP PREEMPT_DYNAMIC Thu May 30 07:49:53 UTC 2024 x86_64 GNU/Linux

I'm trying to make synaTudor work on NixOS. I cannot make much sense of this error though, so any help would be very appreciated. For context, I've made some changes to the build process to make it work on NixOS, so it might be possible that the issue was caused by my changes.

MrQubo commented 1 month ago

I've got more logs from tudor_cli:

``` [INF] Initializing libcrypto... [INF] Initializing libusb... [INF] Found sensor USB device [bus 2 addr 3 vid 0x06cb pid 0x00be] [INF] Opening sensor USB device... [INF] Dropping root privileges... [new uid=1000 new gid=1] [INF] Initializing tudor driver... [WRN] PE file contains unsupported resource data directory! [WRN] PE file contains unsupported exception data directory! [DBG] DLL synaFpAdapter104.dll: PE+ image [DBG] -> machine: 8664 [DBG] -> image size: 0002f000 [DBG] -> entry point: 0000e594 [DBG] -> num data dirs: 16 [DBG] -> num sections: 6 [DBG] -> num relocations: 853 [DBG] Copied image memory to mapping at 0x7f2495bd1000 - 0x7f2495c00000 [VRB] Couldn't resolve import HeapFree@KERNEL32.dll [DBG] Allocated import stub page at 0x7f2496408000 [VRB] Couldn't resolve import GetProcessHeap@KERNEL32.dll [VRB] Couldn't resolve import VerifyVersionInfoW@KERNEL32.dll [VRB] Couldn't resolve import HeapAlloc@KERNEL32.dll [VRB] Couldn't resolve import VerSetConditionMask@KERNEL32.dll [VRB] Couldn't resolve import WriteConsoleW@KERNEL32.dll [VRB] Couldn't resolve import __C_specific_handler@KERNEL32.dll [VRB] Couldn't resolve import RtlVirtualUnwind@KERNEL32.dll [VRB] Couldn't resolve import QueryPerformanceCounter@KERNEL32.dll [VRB] Couldn't resolve import GetSystemTimeAsFileTime@KERNEL32.dll [VRB] Couldn't resolve import InitializeSListHead@KERNEL32.dll [VRB] Couldn't resolve import RtlUnwindEx@KERNEL32.dll [VRB] Couldn't resolve import InterlockedFlushSList@KERNEL32.dll [VRB] Couldn't resolve import EncodePointer@KERNEL32.dll [VRB] Couldn't resolve import RaiseException@KERNEL32.dll [VRB] Couldn't resolve import RtlPcToFileHeader@KERNEL32.dll [VRB] Couldn't resolve import ExitProcess@KERNEL32.dll [VRB] Couldn't resolve import FindClose@KERNEL32.dll [VRB] Couldn't resolve import FindFirstFileExW@KERNEL32.dll [VRB] Couldn't resolve import FindNextFileW@KERNEL32.dll [VRB] Couldn't resolve import IsValidCodePage@KERNEL32.dll [VRB] Couldn't resolve import GetACP@KERNEL32.dll [VRB] Couldn't resolve import GetOEMCP@KERNEL32.dll [VRB] Couldn't resolve import GetCPInfo@KERNEL32.dll [VRB] Couldn't resolve import MultiByteToWideChar@KERNEL32.dll [VRB] Couldn't resolve import WideCharToMultiByte@KERNEL32.dll [VRB] Couldn't resolve import InitializeCriticalSectionAndSpinCount@KERNEL32.dll [VRB] Couldn't resolve import LCMapStringW@KERNEL32.dll [VRB] Couldn't resolve import GetFileType@KERNEL32.dll [VRB] Couldn't resolve import GetStringTypeW@KERNEL32.dll [VRB] Couldn't resolve import HeapSize@KERNEL32.dll [VRB] Couldn't resolve import HeapReAlloc@KERNEL32.dll [VRB] Couldn't resolve import SetStdHandle@KERNEL32.dll [VRB] Couldn't resolve import FlushFileBuffers@KERNEL32.dll [VRB] Couldn't resolve import GetConsoleCP@KERNEL32.dll [VRB] Couldn't resolve import GetConsoleMode@KERNEL32.dll [VRB] Couldn't resolve import SetFilePointerEx@KERNEL32.dll [VRB] Couldn't resolve import CreateFileW@KERNEL32.dll [VRB] Couldn't resolve import GetTraceEnableFlags@ADVAPI32.dll [VRB] Couldn't resolve import GetTraceEnableLevel@ADVAPI32.dll [VRB] Couldn't resolve import GetTraceLoggerHandle@ADVAPI32.dll [DBG] Applied 853 relocations [DBG] Applying memory protections to image [DBG] -> section .text | 0x7f2495bd2000 - 0x7f2495bec143 | r-x [DBG] -> section .rdata | 0x7f2495bed000 - 0x7f2495bf8234 | r-- [DBG] -> section .data | 0x7f2495bf9000 - 0x7f2495bfb010 | rw- [DBG] -> section .pdata | 0x7f2495bfc000 - 0x7f2495bfd818 | r-- [DBG] -> section .rsrc | 0x7f2495bfe000 - 0x7f2495bfe698 | r-- [DBG] -> section .reloc | 0x7f2495bff000 - 0x7f2495bff6f4 | r-- [INF] Loaded driver DLL 'synaFpAdapter104.dll' [186656 bytes] [WRN] PE file contains unsupported resource data directory! [WRN] PE file contains unsupported exception data directory! [WRN] Data directory 4 has invalid bounds! [end 0x17ebe0 > image end 0x17e000] [DBG] DLL synaWudfBioUsb104.dll: PE+ image [DBG] -> machine: 8664 [DBG] -> image size: 0017e000 [DBG] -> entry point: 0004b950 [DBG] -> num data dirs: 16 [DBG] -> num sections: 6 [DBG] -> num relocations: 1681 [DBG] Copied image memory to mapping at 0x7f2495a53000 - 0x7f2495bd1000 [VRB] Couldn't resolve import VerSetConditionMask@ntdll.dll [VRB] Couldn't resolve import RtlInitUnicodeString@ntdll.dll [VRB] Couldn't resolve import PeekConsoleInputA@KERNEL32.dll [VRB] Couldn't resolve import GetEnvironmentVariableW@KERNEL32.dll [VRB] Couldn't resolve import CreateDirectoryW@KERNEL32.dll [VRB] Couldn't resolve import ConnectNamedPipe@KERNEL32.dll [VRB] Couldn't resolve import DisconnectNamedPipe@KERNEL32.dll [VRB] Couldn't resolve import CreateNamedPipeW@KERNEL32.dll [VRB] Couldn't resolve import GetNamedPipeClientComputerNameW@KERNEL32.dll [VRB] Couldn't resolve import GetSystemTime@KERNEL32.dll [VRB] Couldn't resolve import GetNamedPipeClientProcessId@KERNEL32.dll [VRB] Couldn't resolve import lstrcmpW@KERNEL32.dll [VRB] Couldn't resolve import ReadConsoleInputW@KERNEL32.dll [VRB] Couldn't resolve import GetNumberOfConsoleInputEvents@KERNEL32.dll [VRB] Couldn't resolve import VerifyVersionInfoW@KERNEL32.dll [VRB] Couldn't resolve import OpenEventW@KERNEL32.dll [VRB] Couldn't resolve import CreateFileW@KERNEL32.dll [VRB] Couldn't resolve import SetConsoleMode@KERNEL32.dll [VRB] Couldn't resolve import MoveFileExW@KERNEL32.dll [VRB] Couldn't resolve import DeleteFileW@KERNEL32.dll [VRB] Couldn't resolve import lstrcpynW@KERNEL32.dll [VRB] Couldn't resolve import GetTimeZoneInformation@KERNEL32.dll [VRB] Couldn't resolve import SetEnvironmentVariableW@KERNEL32.dll [VRB] Couldn't resolve import RtlVirtualUnwind@KERNEL32.dll [VRB] Couldn't resolve import HeapFree@KERNEL32.dll [VRB] Couldn't resolve import HeapAlloc@KERNEL32.dll [VRB] Couldn't resolve import GetFileType@KERNEL32.dll [VRB] Couldn't resolve import InitializeCriticalSectionAndSpinCount@KERNEL32.dll [VRB] Couldn't resolve import GetSystemTimeAsFileTime@KERNEL32.dll [VRB] Couldn't resolve import CompareStringW@KERNEL32.dll [VRB] Couldn't resolve import LCMapStringW@KERNEL32.dll [VRB] Couldn't resolve import GetConsoleCP@KERNEL32.dll [VRB] Couldn't resolve import GetConsoleMode@KERNEL32.dll [VRB] Couldn't resolve import GetFileSizeEx@KERNEL32.dll [VRB] Couldn't resolve import SetFilePointerEx@KERNEL32.dll [VRB] Couldn't resolve import IsValidCodePage@KERNEL32.dll [VRB] Couldn't resolve import GetACP@KERNEL32.dll [VRB] Couldn't resolve import GetOEMCP@KERNEL32.dll [VRB] Couldn't resolve import GetCPInfo@KERNEL32.dll [VRB] Couldn't resolve import GetProcessHeap@KERNEL32.dll [VRB] Couldn't resolve import MultiByteToWideChar@KERNEL32.dll [VRB] Couldn't resolve import GetStringTypeW@KERNEL32.dll [VRB] Couldn't resolve import SetStdHandle@KERNEL32.dll [VRB] Couldn't resolve import FlushFileBuffers@KERNEL32.dll [VRB] Couldn't resolve import ReadConsoleW@KERNEL32.dll [VRB] Couldn't resolve import ExitProcess@KERNEL32.dll [VRB] Couldn't resolve import SetEndOfFile@KERNEL32.dll [VRB] Couldn't resolve import WriteConsoleW@KERNEL32.dll [VRB] Couldn't resolve import RaiseException@KERNEL32.dll [VRB] Couldn't resolve import HeapSize@KERNEL32.dll [VRB] Couldn't resolve import HeapReAlloc@KERNEL32.dll [VRB] Couldn't resolve import RtlUnwindEx@KERNEL32.dll [VRB] Couldn't resolve import RtlPcToFileHeader@KERNEL32.dll [VRB] Couldn't resolve import RtlUnwind@KERNEL32.dll [VRB] Couldn't resolve import EncodePointer@KERNEL32.dll [VRB] Couldn't resolve import InterlockedFlushSList@KERNEL32.dll [VRB] Couldn't resolve import QueryPerformanceCounter@KERNEL32.dll [VRB] Couldn't resolve import InitializeSListHead@KERNEL32.dll [VRB] Couldn't resolve import lstrcpyA@KERNEL32.dll [VRB] Couldn't resolve import FindNextFileW@KERNEL32.dll [VRB] Couldn't resolve import OutputDebugStringA@KERNEL32.dll [VRB] Couldn't resolve import GetSystemInfo@KERNEL32.dll [VRB] Couldn't resolve import ReleaseMutex@KERNEL32.dll [VRB] Couldn't resolve import CreateMutexA@KERNEL32.dll [VRB] Couldn't resolve import LocalFree@KERNEL32.dll [VRB] Couldn't resolve import GetCurrentDirectoryA@KERNEL32.dll [VRB] Couldn't resolve import CreateDirectoryA@KERNEL32.dll [VRB] Couldn't resolve import FindClose@KERNEL32.dll [VRB] Couldn't resolve import FindFirstFileA@KERNEL32.dll [VRB] Couldn't resolve import FindNextFileA@KERNEL32.dll [VRB] Couldn't resolve import LoadLibraryA@KERNEL32.dll [VRB] Couldn't resolve import CreateFileA@KERNEL32.dll [VRB] Couldn't resolve import CancelIo@KERNEL32.dll [VRB] Couldn't resolve import FindFirstFileExW@KERNEL32.dll [VRB] Couldn't resolve import FreeLibraryAndExitThread@KERNEL32.dll [VRB] Couldn't resolve import WideCharToMultiByte@KERNEL32.dll [VRB] Couldn't resolve import lstrlenA@KERNEL32.dll [VRB] Couldn't resolve import GetTickCount@KERNEL32.dll [VRB] Couldn't resolve import GetThreadId@KERNEL32.dll [VRB] Couldn't resolve import ResumeThread@KERNEL32.dll [VRB] Couldn't resolve import CreateThread@KERNEL32.dll [VRB] Couldn't resolve import ExitThread@KERNEL32.dll [VRB] Couldn't resolve import ConvertStringSecurityDescriptorToSecurityDescriptorW@ADVAPI32.dll [VRB] Couldn't resolve import CryptDuplicateHash@ADVAPI32.dll [VRB] Couldn't resolve import CryptDestroyHash@ADVAPI32.dll [VRB] Couldn't resolve import CryptHashData@ADVAPI32.dll [VRB] Couldn't resolve import CryptCreateHash@ADVAPI32.dll [VRB] Couldn't resolve import CryptDecrypt@ADVAPI32.dll [VRB] Couldn't resolve import CryptEncrypt@ADVAPI32.dll [VRB] Couldn't resolve import CryptImportKey@ADVAPI32.dll [VRB] Couldn't resolve import CryptGenRandom@ADVAPI32.dll [VRB] Couldn't resolve import CryptGetHashParam@ADVAPI32.dll [VRB] Couldn't resolve import CryptSetHashParam@ADVAPI32.dll [VRB] Couldn't resolve import CryptSetKeyParam@ADVAPI32.dll [VRB] Couldn't resolve import CryptDestroyKey@ADVAPI32.dll [VRB] Couldn't resolve import CryptReleaseContext@ADVAPI32.dll [VRB] Couldn't resolve import CryptAcquireContextA@ADVAPI32.dll [VRB] Couldn't resolve import RegDeleteValueA@ADVAPI32.dll [VRB] Couldn't resolve import GetTraceLoggerHandle@ADVAPI32.dll [VRB] Couldn't resolve import AllocateAndInitializeSid@ADVAPI32.dll [VRB] Couldn't resolve import FreeSid@ADVAPI32.dll [VRB] Couldn't resolve import InitializeSecurityDescriptor@ADVAPI32.dll [VRB] Couldn't resolve import SetSecurityDescriptorDacl@ADVAPI32.dll [VRB] Couldn't resolve import SetEntriesInAclA@ADVAPI32.dll [VRB] Couldn't resolve import GetTraceEnableLevel@ADVAPI32.dll [VRB] Couldn't resolve import GetTraceEnableFlags@ADVAPI32.dll [VRB] Couldn't resolve import WppAutoLogStop@WppRecorderUM.dll [VRB] Couldn't resolve import WppAutoLogStart@WppRecorderUM.dll [VRB] Couldn't resolve import WppAutoLogTrace@WppRecorderUM.dll [VRB] Couldn't resolve import CoTaskMemAlloc@OLE32.dll [VRB] Couldn't resolve import CoTaskMemFree@OLE32.dll [VRB] Couldn't resolve import PropVariantClear@OLE32.dll [VRB] Couldn't resolve import PowerUnregisterSuspendResumeNotification@api-ms-win-power-base-l1-1-0.dll [VRB] Couldn't resolve import PowerRegisterSuspendResumeNotification@api-ms-win-power-base-l1-1-0.dll [VRB] Couldn't resolve import CM_Query_And_Remove_SubTreeA@api-ms-win-devices-config-l1-1-2.dll [VRB] Couldn't resolve import CM_Get_Device_Interface_List_SizeA@api-ms-win-devices-config-l1-1-2.dll [VRB] Couldn't resolve import CM_Get_Device_Interface_ListA@api-ms-win-devices-config-l1-1-2.dll [VRB] Couldn't resolve import CM_Setup_DevNode@api-ms-win-devices-config-l1-1-1.dll [VRB] Couldn't resolve import CM_Get_Device_Interface_PropertyW@api-ms-win-devices-config-l1-1-1.dll [VRB] Couldn't resolve import CM_Locate_DevNodeW@api-ms-win-devices-config-l1-1-1.dll [VRB] Couldn't resolve import CryptProtectData@CRYPT32.dll [VRB] Couldn't resolve import CryptUnprotectData@CRYPT32.dll [VRB] Couldn't resolve import CryptUnprotectMemory@CRYPT32.dll [VRB] Couldn't resolve import CryptEncodeObject@CRYPT32.dll [VRB] Couldn't resolve import CryptDecodeObject@CRYPT32.dll [VRB] Couldn't resolve import CryptProtectMemory@CRYPT32.dll [VRB] Couldn't resolve import BCryptSecretAgreement@bcrypt.dll [VRB] Couldn't resolve import BCryptGenerateSymmetricKey@bcrypt.dll [VRB] Couldn't resolve import BCryptCloseAlgorithmProvider@bcrypt.dll [VRB] Couldn't resolve import BCryptDeriveKey@bcrypt.dll [VRB] Couldn't resolve import BCryptDestroySecret@bcrypt.dll [VRB] Couldn't resolve import BCryptDestroyKey@bcrypt.dll [VRB] Couldn't resolve import BCryptDecrypt@bcrypt.dll [VRB] Couldn't resolve import BCryptGetProperty@bcrypt.dll [VRB] Couldn't resolve import BCryptOpenAlgorithmProvider@bcrypt.dll [VRB] Couldn't resolve import BCryptEncrypt@bcrypt.dll [VRB] Couldn't resolve import BCryptSetProperty@bcrypt.dll [VRB] Couldn't resolve import BCryptVerifySignature@bcrypt.dll [VRB] Couldn't resolve import BCryptSignHash@bcrypt.dll [VRB] Couldn't resolve import BCryptGenerateKeyPair@bcrypt.dll [VRB] Couldn't resolve import BCryptExportKey@bcrypt.dll [VRB] Couldn't resolve import BCryptImportKeyPair@bcrypt.dll [VRB] Couldn't resolve import BCryptFinalizeKeyPair@bcrypt.dll [DBG] Applied 1681 relocations [DBG] Applying memory protections to image [DBG] -> section .text | 0x7f2495a54000 - 0x7f2495b1e494 | r-x [DBG] -> section .rdata | 0x7f2495b1f000 - 0x7f2495badba8 | r-- [DBG] -> section .data | 0x7f2495bae000 - 0x7f2495bc6e54 | rw- [DBG] -> section .pdata | 0x7f2495bc7000 - 0x7f2495bcee0c | r-- [DBG] -> section .rsrc | 0x7f2495bcf000 - 0x7f2495bcf4d0 | r-- [DBG] -> section .reloc | 0x7f2495bd0000 - 0x7f2495bd0e10 | r-- [INF] Loaded driver DLL 'synaWudfBioUsb104.dll' [1567712 bytes] [INF] Initializing driver DLL 'synaFpAdapter104.dll'... [ERR] Unresolved import GetSystemTimeAsFileTime@KERNEL32.dll called! ```
Popax21 commented 1 month ago

This doesn't sound like something caused by NixOS, this sounds like an unsupported Windows driver being relinked. Did you switch out the Window driver DLLs by chance?

EDIT: Actually, taking another look, it more so looks like the WinAPI resolver fails to initialize somehow, causing it to fail to resolve functions which are actually implemented. Resolver functions usually are registered using static constructor functions (see here), so there's a chance that those static constructors are no longer being invoked correctly. This might be related to the "some change to the build system" you referenced; I don't know what you changed, so I can't really help debug this further right now.

MrQubo commented 1 month ago

Thanks! You were exactly right. I compiled libtudor statically and the constructors weren't called. I've got it working now.

I have one more problem that could be NixOS specific, tudor-host-launcher.service isn't started automatically and it needs be started manually. I don't see any WantedBy in this service, is that how it's supposed to be?

Popax21 commented 1 month ago

Thanks! You were exactly right. I compiled libtudor statically and the constructors weren't called. I've got it working now.

I have one more problem that could be NixOS specific, tudor-host-launcher.service isn't started automatically and it needs be started manually. I don't see any WantedBy in this service, is that how it's supposed to be?

The service should automatically start once its D-Bus service is accessed, not on system start. Glad to hear it's working by the way!

MrQubo commented 1 month ago

Thank you! It's thanks to your big work here!

Ah, okay, it's mi first time packaging dbus. It seems like service files should go to share/dbus-1/system-services not etc/dbus-1/system-services on NixOS.

By the way, in net.reactivated.TudorHostLauncher.service.in, shouldn't the line Exec=@INSTALL_DIR@/tudor_host_launcher be replaced with Exec=/bin/false? I think the tudor_host_launcher is started by the systemd service and not dbus service? I've replaced it with Exec=/bin/false and everything still works fine for me.