Whonix on Mac M1 (ARM) - User Support (still unsupported at time of writing)

Check the clock. Is it off by that amount of time?

Yes it is and I found this line in the swdate logs

/bin/bash: line 1: 796 Bad system call (core dumped) addgroup sdwdate systemd-journal

On further inspection it seems that the UTM app is using my local timezone as the hardware clock time. I will see if I can configure it otherwise.

1 Like

Insufficient.

Daemon Log View

Another secomp issue?

Sorry I edited the post and found that UTM is passing my local timezone time to the hardware clock. Also, here is the info you asked for regarding the error line I posted.

$ sudo journalctl -b --no-pager -u sdwdate
[sudo] password for user:                     
-- Journal begins at Mon 2021-09-13 19:42:34 UTC, ends at Mon 2021-09-20 12:13:17 UTC. --
Sep 20 12:12:15 host systemd[1]: Starting Secure Distributed Web Date...
Sep 20 12:12:15 host bash[774]: /bin/bash: line 1:   788 Bad system call         (core dumped) addgroup sdwdate systemd-journal
Sep 20 12:12:15 host systemd[1]: Started Secure Distributed Web Date.
Sep 20 12:12:15 host sdwdate[809]: 2021-09-20 12:12:15 - sdwdate - INFO - sdwdate started. PID: 809
Sep 20 12:12:15 host sdwdate[809]: 2021-09-20 12:12:15 - sdwdate - INFO - Tor socks host: 127.0.0.1 Tor socks port: 9108
Sep 20 12:12:15 host sdwdate[809]: 2021-09-20 12:12:15 - sdwdate - INFO - Running sdwdate main loop. iteration: 1 / 10000
Sep 20 12:12:16 host sdwdate[809]: 2021-09-20 12:12:16 - sdwdate - INFO - PREPARATION:
Sep 20 12:12:16 host sdwdate[809]: 2021-09-20 12:12:16 - sdwdate - INFO -
Sep 20 12:12:16 host sdwdate[809]: /usr/libexec/helper-scripts/onion-time-pre-script: Start.
Sep 20 12:12:16 host sdwdate[809]: Static Time Sanity Check: Within minimum time 'Sun Jan 17 00:00:00 UTC 2021' and expiration timestamp 'Tue May 17 10:00:00 UTC 2033', ok.
Sep 20 12:12:16 host sdwdate[809]: Tor reports: NOTICE BOOTSTRAP PROGRESS=14 TAG=handshake SUMMARY="Handshaking with a relay"
Sep 20 12:12:16 host sdwdate[809]: Tor circuit: not established.
Sep 20 12:12:16 host sdwdate[809]: Tor Consensus Time Sanity Check: The clock might be too slow. Clock is slower than consensus/valid-after 2021-09-20 15:00:00.
Sep 20 12:12:16 host sdwdate[809]: /usr/libexec/helper-scripts/onion-time-pre-script: END: Exiting with exit_code '2' indicating 'wait, show busy icon and retry.'.
Sep 20 12:12:16 host sdwdate[809]: 2021-09-20 12:12:16 - sdwdate - INFO - PREPARATION RESULT: WAIT.
Sep 20 12:12:16 host sdwdate[809]: 2021-09-20 12:12:16 - sdwdate - INFO -
Sep 20 12:12:17 host sdwdate[809]: 2021-09-20 12:12:17 - sdwdate - INFO - PREPARATION:
Sep 20 12:12:17 host sdwdate[809]: 2021-09-20 12:12:17 - sdwdate - INFO -
Sep 20 12:12:17 host sdwdate[809]: /usr/libexec/helper-scripts/onion-time-pre-script: Start.
Sep 20 12:12:17 host sdwdate[809]: Static Time Sanity Check: Within minimum time 'Sun Jan 17 00:00:00 UTC 2021' and expiration timestamp 'Tue May 17 10:00:00 UTC 2033', ok.
Sep 20 12:12:17 host sdwdate[809]: Tor reports: NOTICE BOOTSTRAP PROGRESS=100 TAG=done SUMMARY="Done"
Sep 20 12:12:17 host sdwdate[809]: Tor circuit: established.
Sep 20 12:12:17 host sdwdate[809]: Tor Consensus Time Sanity Check: The clock might be too slow. Clock is slower than consensus/valid-after 2021-09-20 18:00:00.
Sep 20 12:12:17 host sdwdate[809]: /usr/libexec/helper-scripts/onion-time-pre-script: END: Exiting with exit_code '2' indicating 'wait, show busy icon and retry.'.
Sep 20 12:12:17 host sdwdate[809]: 2021-09-20 12:12:17 - sdwdate - INFO - PREPARATION RESULT: WAIT.
Sep 20 12:12:17 host sdwdate[809]: 2021-09-20 12:12:17 - sdwdate - INFO -
1 Like

OK, I added the line -rtc base=utc to the qemu commands in UTM and the clock was able to synchronize. I still see the error in the logs that I posted above, but for comparison I will paste the successful log results below.

I would like to make a suggestion about the current functioning of swdate. When the time is an hour or more different from the UTC time, I do not believe it should only be considered a warning. I would ask that you make it an error that does not allow a tor connection, or at least put a big red warning sign that it could compromise your anonymity when swdategui loads.

2021-09-20 19:17:12 - /usr/bin/whonix-gateway-firewall - OK: Loading Whonix firewall...
2021-09-20 19:17:12 - /usr/bin/whonix-gateway-firewall - OK: Skipping firewall mode detection since already set to 'full'.
2021-09-20 19:17:12 - /usr/bin/whonix-gateway-firewall - OK: (Full torified network access allowed.)
2021-09-20 19:16:22 - /usr/bin/whonix-gateway-firewall - OK: Whonix firewall loaded.
/bin/bash: line 1:   814 Bad system call         (core dumped) addgroup sdwdate systemd-journal
2021-09-20 19:16:23 - sdwdate - INFO - sdwdate started. PID: 832
2021-09-20 19:16:23 - sdwdate - INFO - Tor socks host: 127.0.0.1 Tor socks port: 9108
2021-09-20 19:16:23 - sdwdate - INFO - Running sdwdate main loop. iteration: 1 / 10000
2021-09-20 19:16:23 - sdwdate - INFO - PREPARATION:
2021-09-20 19:16:23 - sdwdate - INFO -
/usr/libexec/helper-scripts/onion-time-pre-script: Start.
Static Time Sanity Check: Within minimum time 'Sun Jan 17 00:00:00 UTC 2021' and expiration timestamp 'Tue May 17 10:00:00 UTC 2033', ok.
Tor reports: NOTICE BOOTSTRAP PROGRESS=14 TAG=handshake SUMMARY="Handshaking with a relay"
Tor circuit: not established.
Tor Consensus Time Sanity Check: Clock within consensus parameters consensus/valid-after 2021-09-20 18:00:00 and consensus/valid-until 2021-09-20 21:00:00.
No Tor circuit established yet.
/usr/libexec/helper-scripts/onion-time-pre-script: END: Exiting with exit_code '2' indicating 'wait, show busy icon and retry.'.
2021-09-20 19:16:23 - sdwdate - INFO - PREPARATION RESULT: WAIT.
2021-09-20 19:16:23 - sdwdate - INFO -
2021-09-20 19:16:25 - sdwdate - INFO - PREPARATION:
2021-09-20 19:16:25 - sdwdate - INFO -
/usr/libexec/helper-scripts/onion-time-pre-script: Start.
Static Time Sanity Check: Within minimum time 'Sun Jan 17 00:00:00 UTC 2021' and expiration timestamp 'Tue May 17 10:00:00 UTC 2033', ok.
Tor reports: NOTICE BOOTSTRAP PROGRESS=95 TAG=circuit_create SUMMARY="Establishing a Tor circuit"
Tor circuit: not established.
Tor Consensus Time Sanity Check: Clock within consensus parameters consensus/valid-after 2021-09-20 18:00:00 and consensus/valid-until 2021-09-20 21:00:00.
No Tor circuit established yet.
/usr/libexec/helper-scripts/onion-time-pre-script: END: Exiting with exit_code '2' indicating 'wait, show busy icon and retry.'.
2021-09-20 19:16:25 - sdwdate - INFO - PREPARATION RESULT: WAIT.
2021-09-20 19:16:25 - sdwdate - INFO -
2021-09-20 19:16:28 - sdwdate - INFO - PREPARATION:
2021-09-20 19:16:28 - sdwdate - INFO - /usr/libexec/helper-scripts/onion-time-pre-script: Start.
Static Time Sanity Check: Within minimum time 'Sun Jan 17 00:00:00 UTC 2021' and expiration timestamp 'Tue May 17 10:00:00 UTC 2033', ok.
Tor reports: NOTICE BOOTSTRAP PROGRESS=100 TAG=done SUMMARY="Done"
Tor circuit: established.
Tor Consensus Time Sanity Check: Clock within consensus parameters consensus/valid-after 2021-09-20 18:00:00 and consensus/valid-until 2021-09-20 21:00:00.
Tor already reports circuit established.
/usr/libexec/helper-scripts/onion-time-pre-script: END: Exiting with exit_code '0' indicating 'success'.
2021-09-20 19:16:28 - sdwdate - INFO - PREPARATION RESULT: SUCCESS.
2021-09-20 19:16:28 - sdwdate - INFO -
2021-09-20 19:16:28 - sdwdate - INFO - Initial time fetching in progress...
2021-09-20 19:16:28 - sdwdate - INFO - Running sdwdate fetch loop. iteration: 1
2021-09-20 19:16:28 - sdwdate - INFO - pool 0: pool_size: 20 url_index: 19 already_picked_number: 1 already_picked_index: [19]
2021-09-20 19:16:28 - sdwdate - INFO - pool 1: pool_size: 22 url_index: 21 already_picked_number: 1 already_picked_index: [21]
2021-09-20 19:16:28 - sdwdate - INFO - pool 2: pool_size: 26 url_index: 10 already_picked_number: 1 already_picked_index: [10]
2021-09-20 19:16:28 - sdwdate - INFO - requested urls ['http://jrw32khnmfehvdsvwdf34mywoqj5emvxh4mzbkls6jk2cb3thcgz6nid.onion', 'http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion', 'http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion']
remote_times.py: url_to_unixtime_command (s):
url_to_unixtime 127.0.0.1 9108 http://jrw32khnmfehvdsvwdf34mywoqj5emvxh4mzbkls6jk2cb3thcgz6nid.onion 80 true
url_to_unixtime 127.0.0.1 9108 http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion 80 true
url_to_unixtime 127.0.0.1 9108 http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion 80 true
remote_times.py: i: 2 | done
remote_times.py: i: 1 | done
remote_times.py: i: 0 | done
remote 0: http://jrw32khnmfehvdsvwdf34mywoqj5emvxh4mzbkls6jk2cb3thcgz6nid.onion
* comment: https://web.archive.org/web/20210604184215/https://defcon.org/
* took_time     : 13.72 second(s)
* half_took_time: 6.86 second(s)
* exit_code: 5
* stdout: empty
* stderr: connect error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
* remote_status: error
remote 1: http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion
* comment: https://web.archive.org/web/20200717041213/https://riseup.net/en/security/network-security/tor https://riseup.net/en/security/network-security/tor https://riseup.net
* took_time     : 8.17 second(s)
* half_took_time: 4.08 second(s)
* replay_protection_unixtime: 1610841500
* remote_unixtime           : 1632165447
* consensus/valid-after           : 2021-09-20 18:00:00
* replay_protection_time          : 2021-01-17 00:00:00
* remote_time                     : 2021-09-20 19:17:27
* consensus/valid-until           : 2021-09-20 21:00:00
* time_diff_raw        : 51 second(s)
* time_diff_lag_cleaned: 46.92 second(s)
* Time Replay Protection         : sane
* Tor Consensus Time Sanity Check: sane
* remote_status: True
remote 2: http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion
* comment: https://web.archive.org/web/20210604164013/https://securedrop.org/directory/irozhlas-cz/
* took_time     : 3.71 second(s)
* half_took_time: 1.85 second(s)
* replay_protection_unixtime: 1610841500
* remote_unixtime           : 1632165433
* consensus/valid-after           : 2021-09-20 18:00:00
* replay_protection_time          : 2021-01-17 00:00:00
* remote_time                     : 2021-09-20 19:17:13
* consensus/valid-until           : 2021-09-20 21:00:00
* time_diff_raw        : 41 second(s)
* time_diff_lag_cleaned: 39.15 second(s)
* Time Replay Protection         : sane
* Tor Consensus Time Sanity Check: sane
* remote_status: True
remote_times.py: urls_list:
['http://jrw32khnmfehvdsvwdf34mywoqj5emvxh4mzbkls6jk2cb3thcgz6nid.onion', 'http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion', 'http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion']
remote_times.py: status_list:
['error', 'ok', 'ok']
remote_times.py: took_time_list:
[13.72, 8.17, 3.71]
remote_times.py: half_took_time_list:
[6.86, 4.08, 1.85]
remote_times.py: remote_unixtime_list:
[0, 1632165447, 1632165433]
remote_times.py: time_diff_raw_int_list:
[0, 51, 41]
remote_times.py: time_diff_lag_cleaned_float_list:
[0.0, 46.92, 39.15]
2021-09-20 19:16:42 - sdwdate - INFO - returned urls "['http://jrw32khnmfehvdsvwdf34mywoqj5emvxh4mzbkls6jk2cb3thcgz6nid.onion', 'http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion', 'http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion']"
2021-09-20 19:16:42 - sdwdate - INFO -
2021-09-20 19:16:42 - sdwdate - INFO - failed_urls: 1 allowed_failures: 7
2021-09-20 19:16:42 - sdwdate - INFO - pool 1: http://vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion, web_time: 2021-09-20 19:17:27, took_time: 8.17 seconds, time_diff_raw: 51 seconds, time_diff_lag_cleaned: 47 seconds
2021-09-20 19:16:42 - sdwdate - INFO - pool 2: http://3gtoclri7h6xrtjjapfezcerj4dqf3fwfk3jmhrhz25i5pyprmz47gad.onion, web_time: 2021-09-20 19:17:13, took_time: 3.71 seconds, time_diff_raw: 41 seconds, time_diff_lag_cleaned: 39 seconds
2021-09-20 19:16:42 - sdwdate - INFO - Running sdwdate fetch loop. iteration: 2
2021-09-20 19:16:42 - sdwdate - INFO - pool 0: pool_size: 20 url_index: 12 already_picked_number: 2 already_picked_index: [19, 12]
2021-09-20 19:16:42 - sdwdate - INFO - requested urls ['http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion']
remote_times.py: url_to_unixtime_command (s):
url_to_unixtime 127.0.0.1 9108 http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion 80 true
remote_times.py: i: 0 | done
remote 0: http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion
* comment: https://web.archive.org/web/20210604190703/https://cryptostorm.is/
* took_time     : 3.78 second(s)
* half_took_time: 1.89 second(s)
* replay_protection_unixtime: 1610841500
* remote_unixtime           : 1632165454
* consensus/valid-after           : 2021-09-20 18:00:00
* replay_protection_time          : 2021-01-17 00:00:00
* remote_time                     : 2021-09-20 19:17:34
* consensus/valid-until           : 2021-09-20 21:00:00
* time_diff_raw        : 48 second(s)
* time_diff_lag_cleaned: 46.11 second(s)
* Time Replay Protection         : sane
* Tor Consensus Time Sanity Check: sane
* remote_status: True
remote_times.py: urls_list:
['http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion']
remote_times.py: status_list:
['ok']
remote_times.py: took_time_list:
[3.78]
remote_times.py: half_took_time_list:
[1.89]
remote_times.py: remote_unixtime_list:
[1632165454]
remote_times.py: time_diff_raw_int_list:
[48]
remote_times.py: time_diff_lag_cleaned_float_list:
[46.11]
2021-09-20 19:16:46 - sdwdate - INFO - returned urls "['http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion']"
2021-09-20 19:16:46 - sdwdate - INFO -
2021-09-20 19:16:46 - sdwdate - INFO - failed_urls: 1 allowed_failures: 7
2021-09-20 19:16:46 - sdwdate - INFO - pool 0: http://stormwayszuh4juycoy4kwoww5gvcu2c4tdtpkup667pdwe4qenzwayd.onion, web_time: 2021-09-20 19:17:34, took_time: 3.78 seconds, time_diff_raw: 48 seconds, time_diff_lag_cleaned: 46 seconds
2021-09-20 19:16:46 - sdwdate - INFO - End fetching remote times.
2021-09-20 19:16:46 - sdwdate - INFO -
2021-09-20 19:16:46 - sdwdate - INFO - Success.
2021-09-20 19:16:46 - sdwdate - INFO -      request_took_times, sorted: [3.71, 3.78, 8.17]
2021-09-20 19:16:46 - sdwdate - INFO - request_half_took_times, sorted: [1.85, 1.89, 4.08]
2021-09-20 19:16:46 - sdwdate - INFO -           time_diff_raw, sorted: [41, 48, 51]
2021-09-20 19:16:46 - sdwdate - INFO -       diffs_lag_cleaned, sorted: [39, 46, 47]
2021-09-20 19:16:46 - sdwdate - INFO - median          request_took_times: +3.78
2021-09-20 19:16:46 - sdwdate - INFO - median     half_request_took_times: +1.89
2021-09-20 19:16:46 - sdwdate - INFO - median         raw time difference: +48.00
2021-09-20 19:16:46 - sdwdate - INFO - median lag_cleaned time difference: +46.00
2021-09-20 19:16:46 - sdwdate - INFO - Randomizing nanoseconds.
2021-09-20 19:16:46 - sdwdate - INFO - randomize                         : -0.553808289
2021-09-20 19:16:46 - sdwdate - INFO - new time difference               : +47.446191711
2021-09-20 19:16:46 - sdwdate - INFO - replay_protection_unixtime: 1610841500
2021-09-20 19:16:46 - sdwdate - INFO - old_unixtime              : 1632165406.209813833
2021-09-20 19:16:46 - sdwdate - INFO - new_unixtime              : 1632165453.656005621
2021-09-20 19:16:46 - sdwdate - INFO - replay_protection_time          : 2021-01-17 00:00:00
2021-09-20 19:16:46 - sdwdate - INFO - old_unixtime_human_readable     : 2021-09-20 19:16:46
2021-09-20 19:16:46 - sdwdate - INFO - new_unixtime_human_readable     : 2021-09-20 19:17:34
2021-09-20 19:16:46 - sdwdate - INFO - Instantly setting the time by using command: /bin/date --utc "+%Y-%m-%d %H:%M:%S" --set "@1632165453.656005621"
2021-09-20 19:17:33 - sdwdate - INFO - /bin/date output: 2021-09-20 19:17:33
2021-09-20 19:17:33 - sdwdate - INFO - Time Replay Protection: write 1632165454 to file: /var/lib/sdwdate/time-replay-protection-utc-unixtime
2021-09-20 19:17:33 - sdwdate - INFO - Time Replay Protection: write 2021-09-20 19:17:34 to file: /var/lib/sdwdate/time-replay-protection-utc-humanreadable
2021-09-20 19:17:33 - sdwdate - INFO - Sleeping for 127 minutes.
2021-09-20 19:17:33 - sdwdate - INFO - running command: sleep 7634.243415379
2021-09-20 19:17:33 - /usr/bin/whonix-gateway-firewall - OK: Loading Whonix firewall...
2021-09-20 19:17:33 - /usr/bin/whonix-gateway-firewall - OK: Skipping firewall mode detection since already set to 'full'.
2021-09-20 19:17:33 - /usr/bin/whonix-gateway-firewall - OK: (Full torified network access allowed.)
2021-09-20 19:17:33 - /usr/bin/whonix-gateway-firewall - OK: Whonix firewall loaded.
1 Like

Also happening for me. Unrelated.

/lib/systemd/system/sdwdate.service

## required for anondate which uses journalctl
## group systemd-journal might not exist yet during the build process.
## addgroup is a debianism
ExecStartPre=/bin/bash -c 'addgroup sdwdate systemd-journal || true'

Should be fixed but not an actual issue here.

1 Like

That is really complex. Not your suggestion but overall secure network time synchronization design is really complex.

This chapter might explain it best.

To discuss this further, please open a dedicated forum thread for that or use sdwdate and sdwdate-gui development thread.

That should probably be the default.

Funny thing, it is the default in Qemu according to what I read, and there is not mention of the setting in the UTM plist file for Whonix to change it. I guess it is something UTM changed in their code for the bundled qemu helper?

Will look at the info for swdate you linked, thank you.

1 Like

OK, this is odd. I do not see anything in the plists for Whonix about time, but in the qemu options it shows -rtc base=localtime being passed to qemu. I have no idea where this setting is coming from. I was able to add -rtc base=utc, but it seems like a bad solution to have both settings passed to qemu. I will contact UTM developer and see if it is something he puts in.

EDIT:
There is already an issue with UTM project for this. https://github.com/utmapp/UTM/issues/3104

1 Like

Hi could anyone share the UTM files for whonix gateway and workstation please? Thank you :slight_smile:

Maybe ready image for all?

I built version 16.0.2.8 and still have the gz files for UTM.

https://drive.google.com/file/d/1g5N0XLtonNCvuQAgyQNjV_oQth2ZBe7x/view?usp=sharing
https://drive.google.com/file/d/1ehN5UzMT-um80Xg0P2keDmcQnzgSp8kj/view?usp=sharing

For there to be ready images, someone trusted by the developers and therefore the community would need to sign the builds. Otherwise, someone could put anything in the built images.

3 Likes

thank you all for this amazing build, I also got it working in mac M1 with UTM

1 Like

You are the best :+1: :+1: :+1: Thank you

1 Like

Hey! Thanks for the images, they are working. But I have another question, how to start Tor Browser in Workstation? At startup, an error occurs that the arm architecture does not support sse2 instructions.

I also tried to install the version for arm using the tor-deb-repo instruction on the Tor website, but at the moment of sudo apt update, an error occurs.

I can’t beat her. Are there any other ways to get Tor up and running?

Please kindly do not accidentally substitute Tor for a question related to Tor Browser, as this causes confusion.

Please review:

− -device virtio-net-pci,netdev=external
-device virtio-net-pci,netdev=internal \ -device virtio-net-pci,netdev=internal
− -netdev user,id=external,ipv6=off,net=10.0.2.0/24 \ + -netdev socket,id=internal,connect=:8010
− -netdev socket,id=internal,listen=:8010 \

Grenmill (talk | contribs | block) rollback 1 edit

Workstation should connect to Gateway socket, not listen. Also it should not have external network

I just ran update-torbrowser in the terminal. This will download the latest M1 build of torbrowser bundle and install it. You can run it periodically to check for an update.

WARNING: The update script will wipe out your entire browser settings, so if you customize settings you will need to export them and then reimport them upon updating.

This may be a dumb question and I will delete it if so. Am i wrong that UTM can emulate x86 on Apple Silicon albeit at lower performance? Would it not be simpler to run cli gateway on M1 emulating x86? Again sorry if this is too off topic.

You are the best!