{"id":27424510,"url":"https://github.com/matioupi/trm2rinex-docker","last_synced_at":"2025-10-08T12:49:27.133Z","repository":{"id":93407635,"uuid":"431131130","full_name":"Matioupi/trm2rinex-docker","owner":"Matioupi","description":"Docker+Wine wrapper for Trimble convertToRinex tool","archived":false,"fork":false,"pushed_at":"2023-05-04T14:36:34.000Z","size":15513,"stargazers_count":9,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-14T11:52:23.188Z","etag":null,"topics":["docker","gnss","rinex","rinex2","rinex3","trimble","trimble-gps"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Matioupi.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-11-23T14:25:44.000Z","updated_at":"2024-12-18T19:03:36.000Z","dependencies_parsed_at":"2023-04-26T00:33:13.647Z","dependency_job_id":null,"html_url":"https://github.com/Matioupi/trm2rinex-docker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Matioupi/trm2rinex-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Matioupi%2Ftrm2rinex-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Matioupi%2Ftrm2rinex-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Matioupi%2Ftrm2rinex-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Matioupi%2Ftrm2rinex-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Matioupi","download_url":"https://codeload.github.com/Matioupi/trm2rinex-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Matioupi%2Ftrm2rinex-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278948019,"owners_count":26073747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","gnss","rinex","rinex2","rinex3","trimble","trimble-gps"],"created_at":"2025-04-14T11:49:55.972Z","updated_at":"2025-10-08T12:49:27.126Z","avatar_url":"https://github.com/Matioupi.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# trm2rinex docker image for Trimble convertToRinex utility use on Linux\n\n## Introduction\n\nThis repository provides material and instructions to build a docker image that packages the Trimble [convertToRinex](https://geospatial.trimble.com/trimble-rinex-converter) utility together with a minimal [Wine](https://www.winehq.org/) setup, allowing to run the native Windows only software on a Linux x86 based system. Final image is around 300MB\n\nThe Trimble utility can be found at official Trimble page : https://geospatial.trimble.com/trimble-rinex-converter\n\n**For intellectual property reasons, unless Trimble provides me with a written authorization to do so, I will not provide a pre-build docker image because it would contain the Trimble binaries and I'm not explicitely allowed to redistribute them.\nEven if no specific license terms are displayed on Trimble page or when installing the software manually on a regular Windows machine.**\n\nThe image has been successfully built and tested using [Wine 6.22](https://github.com/wine-mirror/wine/commit/986254d6c17ee1e5fb3aed6effcf2766bf1e787e) release and the following Trimble required binaries for version 3.14 of Trimble [convertToRinex](https://geospatial.trimble.com/trimble-rinex-converter) :\n\n- https://dl.trimble.com/osg/survey/gpsconfigfiles/21.9.27/trimblecfgupdate.exe\n- https://trl.trimble.com/dscgi/ds.py/Get/File-869391/convertToRinex314.msi\n\nIf they are still available at time you build the image, then they will be downloaded and used automatically. Otherwise you may need to get the manually from another source and modify the Dockerfile around lines 213 and 214 to change the source of the files.\n\n## Quick start : building the image\n\nRetrieve the repository and build the docker image with command:\n\n```bash\ndocker build -t yourreponame/trm2rinex:cli-light .\n```\n\nYou can change the repo (or even omit it), image name and tag to whatever you want.\n\nThe image build has 3 stages :\n\n- stage 1 : a minimal [Wine 6.22](https://github.com/wine-mirror/wine/commit/986254d6c17ee1e5fb3aed6effcf2766bf1e787e) build (from source).\n- stage 2 : download and installation of the Trimble binaries, cleanup of the filesystem to have a light final stage image.\n- stage 3 : final image build stage.\n\nImage build time will take some time (about 10 minutes on my computer) and will need a few gigs af space on the hard drive (about 3GB for the stage 1 Wine source code build stage, 900MB for the stage 2 and 300MB for final image\n\nYou can modify the build command to prevent caching intermediate stages:\n\n```bash\ndocker build --no-cache -t yourreponame/trm2rinex:cli-light .\n```\n\nThis will save some space, but you'll have to rebuild from scratch each time you modify the Dockerfile.\n\n## Image customization\n\nA few variables at the beginning of Dockerfile allows some customization. Here they are with some details about what they do.\n\n| Variable               | Description |\n| --- | --- |\n|`USER_NAME`             | name of the non-root user inside the container (user is created with sudo rights) |\n|`USER_PASSWD`           | password of that user |\n|`USER_UID`              | id of the user inside the container which may ideally be matched to the id of user on docker host in order to remove file access persmission issues.\u003cbr/\u003eDefault to 1000 which is the the id of the main user on my desktop ubuntu setup |\n|`USER_GID`              | same idea as for `USER_UID` but for group id.\u003cbr/\u003eDefaults to 100 which is the id of *users* group on many distributions |\n|`MAKE_JN`               | number of build cores used to compile Wine. Adapt to the computer where you'll build the image |\n|`DELAY_BETWEEN_INSTALL` | this value in seconds is used to wait between some wine calls at stage 2 when installing the Windows binaries.\u003cbr/\u003eI noticed that a wait is needed in order to let wineserver and other wine process terminate cleanly.\u003cbr/\u003eYou may need to increase this value on slow machines |\n\n## Usage\n\nHere are a few possible use case examples:\n\n- Display usage details (docker and original Trimble convertToRienx command line options)\n\n```bash\ndocker run --rm yourreponame/trm2rinex:cli-light\n```\n\n- Provide an interactive shell inside the container (mostly for debug and inspection purposes)\n```bash\ndocker run -it --rm yourreponame/trm2rinex:cli-light /bin/bash\n```\n\n- Converts the Trimble proprietary format file MAGC320b.2021.rt27 (which for this example is assumed to be located on the current directory) into RINEX 3.04 version files.  \nFor actual conversion use cases, it is requiered to map volumes with read permission (**for the container user**) at the input file location, and write permission (**for the container user**) at the output files location.  \n\n   - `data/MAGC320b.2021.rt27` defines the input file (relative to container filesystem root)  \n   - `-p data/out` defines the path for the conversion output (relative to container filesystem root)  \n   - `-n` to **NOT** perform height reference point corrections\n   - `-d` to include doppler observables in the output observation file\n   - `-co` to include clock corrections in the output observation file\n   - `-s` to include signal strength values in the output observation file\n   - `-v 3.04` to choose which RINEX version is generated (cf. command line usage for details)  \n   - `-h 0.1387` to include the marker to antenna ARP vertical offset into RINEX header\n\n```bash\ndocker run --rm -v \"$(pwd):/data\" yourreponame/trm2rinex:cli-light data/MAGC320b.2021.rt27 -p data/out -n -d -co -s -v 3.04 -h 0.1387\n```  \n\n- as stated above, path are relative to the container root filesystem, and you can also use them with a Windows like syntax remembering that the filesystem root `/` is mapped to `Z:\\`for Wine path, and that you need to escape character `\\` as `\\\\` in commands. The following commands are therefore also valid with alternative path syntax (additionnal options removed for focus on path).\n\n```bash\ndocker run --rm -v \"$(pwd):/data\" yourreponame/trm2rinex:cli-light Z:\\\\data\\\\MAGC320b.2021.rt27 -p Z:\\\\data\\\\out\ndocker run --rm -v \"$(pwd):/data\" yourreponame/trm2rinex:cli-light Z:/data/MAGC320b.2021.rt27 -p Z:/data/out\n```\n\n- Performs the conversion with a file based set of options which allow for a more complete control of the conversion (cf. command line usage for details)\n\n```bash\ndocker run --rm -v \"$(pwd):/data\" yourreponame/trm2rinex:cli-light data/MAGC320b.2021.rt27 -p data/out @data/magc-rinex304.settings\n```\n\n## Test runs, output comparaison and performances benchmark vs. native Windows based tool\n\n`test_run_results` subdirectory from the repository contains the conversion outputs of the provided MAGC320b.2021.rt27 file performed with convertToRinex version 3.14 runned natively on a Windows 10 Pro computer or the docker container executed from an Ubuntu 21.10 Desktop install (same dual boot i9-9880H based computer)\n\n- Rinex 2.11 : Windows 10 Pro native conversion\n```DOS\ncmd /v:on /c \"echo !time! \u0026\u0026 \"C:\\Program Files (x86)\\Trimble\\convertToRINEX\\convertToRinex.exe\" C:\\GNSS\\test\\MAGC320b.2021.rt27 -p C:\\GNSS\\test\\out_211_native\\ @C:\\GNSS\\test\\magc-rinex211.settings \u0026\u0026 echo !time!\"\n```\n```console\n12:37:28.26\nAnalyse C:\\GNSS\\test\\MAGC320b.2021.rt27... Terminé.\nConversion en cours MAGC320b.2021.rt27... Succès\n12:37:34.89\n```\n\n- Rinex 3.04 : Windows 10 Pro native conversion\n```DOS\ncmd /v:on /c \"echo !time! \u0026\u0026 \"C:\\Program Files (x86)\\Trimble\\convertToRINEX\\convertToRinex.exe\" C:\\GNSS\\test\\MAGC320b.2021.rt27 -p C:\\GNSS\\test\\out_304_native\\ @C:\\GNSS\\test\\magc-rinex304.settings \u0026\u0026 echo !time!\"\n```\n```console\n12:36:48.11\nAnalyse C:\\GNSS\\test\\MAGC320b.2021.rt27... Terminé.\nConversion en cours MAGC320b.2021.rt27... Succès\n12:36:55.76\n```\n\n- Rinex 2.11 : Ubuntu 21.10 + Docker conversion\n```bash\ntime docker run --rm -v \"$(pwd):/data\" mathieupeyrega/trm2rinex:cli-light data/MAGC320b.2021.rt27 -p data/test_run_results/out_211_docker @data/magc-rinex211.settings\n```\n```console\nScanning data/MAGC320b.2021.rt27...Complete!\nConverting MAGC320b.2021.rt27...Success \n\nreal\t0m17,287s\nuser\t0m0,018s\nsys\t0m0,024s\n```\n\n- Rinex 3.04 : Ubuntu 21.10 + Docker conversion\n```bash\ntime docker run --rm -v \"$(pwd):/data\" mathieupeyrega/trm2rinex:cli-light data/MAGC320b.2021.rt27 -p data/test_run_results/out_304_docker @data/magc-rinex304.settings\n```\n```console\nScanning data/MAGC320b.2021.rt27...Complete!\nConverting MAGC320b.2021.rt27...Success \n\nreal\t0m19,091s\nuser\t0m0,021s\nsys\t0m0,018s\n```\n- Benchmarks show a rough x3 time increase factor with the Docker+Wine solution, but it's the only solution I know about in order to convert to RINEX Trimble proprietary format with a vendor based tool from a Linux based operating system.\n\n|OS|Conversion type|Time|\n|---|---|---|\n|Windows 10 Pro|RINEX 2.11|6.63s|\n|Ubuntu 21.10|RINEX 2.11|17.3s|\n|Windows 10 Pro|RINEX 3.04|7.65s|\n|Ubuntu 21.10|RINEX 3.04|19.1s|\n\n- Comparisons of result files shows that only the run date in the headers differs which validates the conversion:\n\n```bash\ndiff test_run_results/out_211_native/MAGC320b.2021.21o test_run_results/out_211_docker/MAGC320b.2021.21o\n```\n```console\n2c2\n\u003c cnvtToRINEX 3.14.0  trm2rinex-docker    20211123 113731 UTC PGM / RUN BY / DATE \n---\n\u003e cnvtToRINEX 3.14.0  trm2rinex-docker    20211123 131646 UTC PGM / RUN BY / DATE \n```\n```bash\ndiff test_run_results/out_304_native/MAGC320b.2021.21o test_run_results/out_304_docker/MAGC320b.2021.21o\n```\n```console\n2c2\n\u003c cnvtToRINEX 3.14.0  trm2rinex-docker    20211123 113651 UTC PGM / RUN BY / DATE \n---\n\u003e cnvtToRINEX 3.14.0  trm2rinex-docker    20211123 131718 UTC PGM / RUN BY / DATE\n```\n\n## Known issues\n\nI tried and failed running this image on some Synology NAS through Synology provided Docker package.  \nTested equipement where :\n- [RS3617xs+](https://global.download.synology.com/download/Document/Hardware/DataSheet/RackStation/17-year/RS3617xs+/fre/Synology_RS3617xs_Plus_Data_Sheet_fre.pdf)\n- [SA3600](https://global.download.synology.com/download/Document/Hardware/DataSheet/SA/20-year/SA3600/enu/Synology_SA3600_Data_Sheet_enu.pdf)\n\nboth devices were equipped with 32GB of RAM and running DSM 7.0.1. While possible to get a bash prompt and run usual Linux commands without issue, any \"wine\" call hang forever.:\n\n## Wish list\n\nIn case some Trimble folks are reading these lines, I'd love if they could make this repository obsolete by providing command line versions of their tools for various operating systems and architectures (x86, x86_64, ARM, ARM64).  \nOther wishes to Trimble:\n- Add an option to set a start and/or time (trimming away extra-data)\n- Mixed navigation output for RINEX 3.xx\n- Rinex 3.xx conventions auto naming scheme\n- Provide a decent documentation for the command line options (e.g. for the antenna height corrections)\n\n## Credits and License\n\n- download_mono.sh script is almost copied from https://github.com/scottyhardy/docker-wine/blob/master/download_gecko_and_mono.sh\nand therefore licensed under the same MIT terms as well as the rest of this repository.\n\n- [Trimble convertToRinex](https://geospatial.trimble.com/trimble-rinex-converter) software is a property of Trimble company.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatioupi%2Ftrm2rinex-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatioupi%2Ftrm2rinex-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatioupi%2Ftrm2rinex-docker/lists"}