soft shutdown not working on macOS Sonoma 14.2.1
Dear Team,
The soft shutdown is not working on macOS Sonoma 14.2.1
I am running buskill-v0.7.0 using root like this
sudo open "/Applications/buskill-v0.7.0.app"
Could you have a look ? Thanks
Here is the full debug log with several attempts
12:55:17,549 root INFO =============================================================================== 12:55:17,550 root INFO INFO: Writing to log file '/var/folders/yj/pv3cnb7d5c9_s1xdsg_ztvbh0000gn/T/buskill.log' 12:55:17,550 root DEBUG BUSKILL_VERSION|{'VERSION': 'v0.7.0', 'GITHUB_REF': 'refs/heads/v0.7.0', 'GITHUB_SHA': '4139a515ea941dba3fffe5714226b135569f46e2', 'SOURCE_DATE_EPOCH': '1687039680'}| 12:55:17,550 root DEBUG os.environ|environ({'USER': 'dh', 'COMMAND_MODE': 'unix2003', '__CFBundleIdentifier': 'buskill-v0.7.0', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'LOGNAME': 'dh', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.HjiPsXX67p/Listeners', 'HOME': '/Users/dh', 'SHELL': '/bin/zsh', 'TMPDIR': '/var/folders/yj/pv3cnb7d5c9_s1xdsg_ztvbh0000gn/T/', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'XPC_SERVICE_NAME': 'application.buskill-v0.7.0.18450406.18450465', 'XPC_FLAGS': '0x0', 'KIVY_DATA_DIR': '/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy_install/data', 'KIVY_MODULES_DIR': '/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy_install/modules', 'GST_REGISTRY_FORK': 'no', 'GST_PLUGIN_PATH': '/Applications/buskill-v0.7.0.app/Contents/MacOS:/Applications/buskill-v0.7.0.app/Contents/MacOS/gst-plugins', 'GST_REGISTRY': '/Applications/buskill-v0.7.0.app/Contents/MacOS/registry.bin', 'GST_PLUGIN_SYSTEM_PATH': ''})| 12:55:17,550 root DEBUG sys.argv|['/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill']| 12:55:17,550 root DEBUG sys.builtin_modules_names|('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', '_sre', '_stat', '_string', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time', 'xxsubtype', 'zipimport')| 12:55:17,550 root DEBUG sys.executable|/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill| 12:55:17,550 root DEBUG sys.path|['/Applications/buskill-v0.7.0.app/Contents/MacOS/base_library.zip', '/Applications/buskill-v0.7.0.app/Contents/MacOS/lib-dynload', '/Applications/buskill-v0.7.0.app/Contents/MacOS']| 12:55:17,550 root DEBUG sys.prefix|/Applications/buskill-v0.7.0.app/Contents/MacOS| 12:55:17,550 root DEBUG sys.version|3.7.8 (default, Jul 4 2020, 10:17:17) [Clang 11.0.3 (clang-1103.0.32.62)]| 12:55:17,550 root DEBUG sys.api_version|1013| 12:55:17,550 root DEBUG sys.version_info|sys.version_info(major=3, minor=7, micro=8, releaselevel='final', serial=0)| 12:55:17,550 root DEBUG name|main| 12:55:17,550 root DEBUG sys.platform|darwin| 12:55:17,573 root DEBUG platform.platform()|Darwin-23.2.0-x86_64-i386-64bit| 12:55:17,574 root DEBUG platform.system()|Darwin| 12:55:17,574 root DEBUG platform.release()|23.2.0| 12:55:17,574 root DEBUG platform.version()|Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:34 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T8103| 12:55:17,574 root DEBUG platform.machine()|x86_64| 12:55:17,574 root DEBUG platform.uname()|uname_result(system='Darwin', node='Ss-MacBook-Air.local', release='23.2.0', version='Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:34 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T8103', machine='x86_64', processor='i386')| 12:55:17,574 root DEBUG platform.mac_ver()|('10.16', ('', '', ''), 'x86_64')| 12:55:17,575 root INFO buskill version {'VERSION': 'v0.7.0', 'GITHUB_REF': 'refs/heads/v0.7.0', 'GITHUB_SHA': '4139a515ea941dba3fffe5714226b135569f46e2', 'SOURCE_DATE_EPOCH': '1687039680'} 12:55:17,575 packages.buskill DEBUG DEBUG: EXECUTED_AS_SCRIPT:|False| DEBUG: EXE_PATH:|/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill| DEBUG: EXE_DIR:|/Applications/buskill-v0.7.0.app/Contents/MacOS| DEBUG: EXE_FILE:|buskill| DEBUG: APP_DIR:|/Applications/buskill-v0.7.0.app| DEBUG: APPS_DIR:|/Applications| DEBUG: SRC_DIR:|/Applications/buskill-v0.7.0.app/Contents/MacOS| DEBUG: os.environ['PATH']:|/usr/bin:/bin:/usr/sbin:/sbin:/Applications/buskill-v0.7.0.app/Contents/MacOS:/Applications/buskill-v0.7.0.app|
12:55:17,576 packages.buskill INFO INFO: using DATA_DIR:|/Applications/.buskill| 12:55:17,577 packages.buskill DEBUG DEBUG: CONF_FILE:|/Applications/.buskill/config.ini|
12:55:17,590 kivy INFO [Logger ] Record log in /Applications/.buskill/logs/kivy_24-02-18_0.txt
12:55:17,589 kivy INFO [Kivy ] v1.11.1
12:55:17,590 kivy INFO [Kivy ] Installed at "/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy/init.pyc"
12:55:17,590 kivy INFO [Python ] v3.7.8 (default, Jul 4 2020, 10:17:17)
[Clang 11.0.3 (clang-1103.0.32.62)]
12:55:17,590 kivy INFO [Python ] Interpreter at "/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill"
12:55:17,636 kivy INFO [Factory ] 184 symbols loaded
12:55:17,921 kivy INFO [Image ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
12:55:18,142 kivy INFO [Window ] Provider: sdl2
12:55:19,146 kivy INFO [GL ] Using the "OpenGL ES 2" graphics system
12:55:19,147 kivy INFO [GL ] Backend used
Thanks for the report.
Please do not execute BuKill as root. It's designed to spawn a very small child program as root to execute the shutdown. More info here
- https://github.com/BusKill/buskill-app/issues/14
The relevant error from you log is here
12:55:30,482 packages.buskill DEBUG DEBUG: Attempting to set 'trigger' set to 'soft-shutdown'
12:55:30,482 packages.buskill DEBUG DEBUG: Called spawn_root_child()
12:55:30,482 packages.buskill DEBUG DEBUG: No root_child detected. Attempting to spawn one.
12:55:30,482 packages.buskill INFO INFO: You have requested BusKill to do something that requires elevated privliges on your platform. If you'd like to proceed, please authorize BusKill to preform actions as Administrator. Your system may prompt you for your password to proceed.
12:55:30,482 packages.buskill DEBUG DEBUG: root_child_path:|/Applications/buskill-v0.7.0.app/Contents/MacOS/root_child_mac|
12:55:30,483 packages.buskill ERROR ERROR: root_child is not owned by gid=0 nor your group. Refusing to spawn script as root!
This is a security protection. BusKill refuses to try to execute a file as root if it's not owned by root, because then a malicious software with non-root privileges could edit the file and then wait for it to be executed as root to escalate their privileges to become root.
https://github.com/BusKill/buskill-app/blob/53f631d7cf45bcafc752a520625099d0fcca9ede/src/packages/buskill/init.py#L631-L686
@samxplogs Can you please:
- Tell how you installed the BusKill software and
- Execute
ls -lah /Applications/buskill-v0.7.0.app/Contents/MacOS/and paste the output here
TODO:
- Add better logging that outputs the owner, group, and mode of the root_child script
- Add better logging that outputs the owner & group of the current user
- Update root_child to actually harden/change owner, group, and mode of the root_child script on first execution
- GUI error message if it refuses to execute root child due to unexpected permissions (link to docs with a longer description of the issue). Eg
WARNING: Unexpected permissions. Refusing to spawn root child
Hello Michael,
I have downloaded the dmg file buskill-mac-v0.7.0-x86_64.dmg over here https://github.com/BusKill/buskill-app/releases/tag/v0.7.0 Then I mounted the file by double clicking. Finally I dragged and dropped the buskill-v0.7.0 binary to the Applications folder.
ls -lah /Applications/buskill-v0.7.0.app/Contents/MacOS/ total 29512 drwxr-xr-x@ 46 dh admin 1.4K Jun 18 2023 . drwxr-xr-x@ 7 dh admin 224B Jun 18 2023 .. -rwxr-xr-x@ 1 dh admin 271K Jun 18 2023 FLAC -rwxr-xr-x@ 1 dh admin 727K Jun 18 2023 FreeType lrwxr-xr-x 1 dh admin 17B Jun 18 2023 KEYS -> ../Resources/KEYS -rwxr-xr-x@ 1 dh admin 47K Jun 18 2023 Ogg -rwxr-xr-x@ 1 dh admin 2.3M Jun 18 2023 Python -rwxr-xr-x@ 1 dh admin 1.3M Jun 18 2023 SDL2 -rwxr-xr-x@ 1 dh admin 136K Jun 18 2023 SDL2_image -rwxr-xr-x@ 1 dh admin 133K Jun 18 2023 SDL2_mixer -rwxr-xr-x@ 1 dh admin 48K Jun 18 2023 SDL2_ttf -rwxr-xr-x@ 1 dh admin 931K Jun 18 2023 Vorbis lrwxr-xr-x 1 dh admin 24B Jun 18 2023 pycache -> ../Resources/pycache lrwxr-xr-x 1 dh admin 29B Jun 18 2023 base_library.zip -> ../Resources/base_library.zip -rwxr-xr-x@ 1 dh admin 4.2M Jun 18 2023 buskill lrwxr-xr-x 1 dh admin 33B Jun 18 2023 buskill-icon-150.png -> ../Resources/buskill-icon-150.png lrwxr-xr-x 1 dh admin 30B Jun 18 2023 buskill-icon.icns -> ../Resources/buskill-icon.icns lrwxr-xr-x 1 dh admin 23B Jun 18 2023 buskill.kv -> ../Resources/buskill.kv lrwxr-xr-x 1 dh admin 27B Jun 18 2023 buskill_cli.py -> ../Resources/buskill_cli.py lrwxr-xr-x 1 dh admin 27B Jun 18 2023 buskill_gui.py -> ../Resources/buskill_gui.py lrwxr-xr-x 1 dh admin 31B Jun 18 2023 buskill_version.py -> ../Resources/buskill_version.py lrwxr-xr-x 1 dh admin 20B Jun 18 2023 certifi -> ../Resources/certifi lrwxr-xr-x 1 dh admin 21B Jun 18 2023 docutils -> ../Resources/docutils lrwxr-xr-x 1 dh admin 18B Jun 18 2023 fonts -> ../Resources/fonts lrwxr-xr-x 1 dh admin 16B Jun 18 2023 gpg -> ../Resources/gpg lrwxr-xr-x 1 dh admin 19B Jun 18 2023 images -> ../Resources/images drwxr-xr-x@ 9 dh admin 288B Jun 18 2023 kivy lrwxr-xr-x 1 dh admin 25B Jun 18 2023 kivy_install -> ../Resources/kivy_install drwxr-xr-x@ 51 dh admin 1.6K Jun 18 2023 lib-dynload lrwxr-xr-x 1 dh admin 30B Jun 18 2023 libassuan.0.dylib -> ../Resources/libassuan.0.dylib -rwxr-xr-x@ 1 dh admin 2.3M Jun 18 2023 libcrypto.1.1.dylib lrwxr-xr-x 1 dh admin 31B Jun 18 2023 libgcrypt.20.dylib -> ../Resources/libgcrypt.20.dylib lrwxr-xr-x 1 dh admin 33B Jun 18 2023 libgpg-error.0.dylib -> ../Resources/libgpg-error.0.dylib lrwxr-xr-x 1 dh admin 28B Jun 18 2023 libintl.8.dylib -> ../Resources/libintl.8.dylib lrwxr-xr-x 1 dh admin 22B Jun 18 2023 libintl.a -> ../Resources/libintl.a lrwxr-xr-x 1 dh admin 26B Jun 18 2023 libintl.dylib -> ../Resources/libintl.dylib -rwxr-xr-x@ 1 dh admin 197K Jun 18 2023 liblzma.5.dylib lrwxr-xr-x 1 dh admin 28B Jun 18 2023 libnpth.0.dylib -> ../Resources/libnpth.0.dylib -rwxr-xr-x@ 1 dh admin 288K Jun 18 2023 libreadline.8.dylib -rwxr-xr-x@ 1 dh admin 510K Jun 18 2023 libssl.1.1.dylib lrwxr-xr-x 1 dh admin 29B Jun 18 2023 libusb-1.0.dylib -> ../Resources/libusb-1.0.dylib lrwxr-xr-x 1 dh admin 20B Jun 18 2023 main.py -> ../Resources/main.py -rwxr-xr-x@ 1 dh admin 226K Jun 18 2023 modplug -rwxr-xr-x@ 1 dh admin 271K Jun 18 2023 mpg123 lrwxr-xr-x 1 dh admin 21B Jun 18 2023 packages -> ../Resources/packages -r-x------@ 1 dh admin 609K Jun 18 2023 root_child_mac
@samxplogs can you also please provide the numerical ids with
ls -lahn /Applications/buskill-v0.7.0.app/Contents/MacOS/
Hey @maltfield, here you go
ls -lahn /Applications/buskill-v0.7.0.app/Contents/MacOS/ total 29512 drwxr-xr-x@ 46 501 80 1.4K Jun 18 2023 . drwxr-xr-x@ 7 501 80 224B Jun 18 2023 .. -rwxr-xr-x@ 1 501 80 271K Jun 18 2023 FLAC -rwxr-xr-x@ 1 501 80 727K Jun 18 2023 FreeType lrwxr-xr-x 1 501 80 17B Jun 18 2023 KEYS -> ../Resources/KEYS -rwxr-xr-x@ 1 501 80 47K Jun 18 2023 Ogg -rwxr-xr-x@ 1 501 80 2.3M Jun 18 2023 Python -rwxr-xr-x@ 1 501 80 1.3M Jun 18 2023 SDL2 -rwxr-xr-x@ 1 501 80 136K Jun 18 2023 SDL2_image -rwxr-xr-x@ 1 501 80 133K Jun 18 2023 SDL2_mixer -rwxr-xr-x@ 1 501 80 48K Jun 18 2023 SDL2_ttf -rwxr-xr-x@ 1 501 80 931K Jun 18 2023 Vorbis lrwxr-xr-x 1 501 80 24B Jun 18 2023 pycache -> ../Resources/pycache lrwxr-xr-x 1 501 80 29B Jun 18 2023 base_library.zip -> ../Resources/base_library.zip -rwxr-xr-x@ 1 501 80 4.2M Jun 18 2023 buskill lrwxr-xr-x 1 501 80 33B Jun 18 2023 buskill-icon-150.png -> ../Resources/buskill-icon-150.png lrwxr-xr-x 1 501 80 30B Jun 18 2023 buskill-icon.icns -> ../Resources/buskill-icon.icns lrwxr-xr-x 1 501 80 23B Jun 18 2023 buskill.kv -> ../Resources/buskill.kv lrwxr-xr-x 1 501 80 27B Jun 18 2023 buskill_cli.py -> ../Resources/buskill_cli.py lrwxr-xr-x 1 501 80 27B Jun 18 2023 buskill_gui.py -> ../Resources/buskill_gui.py lrwxr-xr-x 1 501 80 31B Jun 18 2023 buskill_version.py -> ../Resources/buskill_version.py lrwxr-xr-x 1 501 80 20B Jun 18 2023 certifi -> ../Resources/certifi lrwxr-xr-x 1 501 80 21B Jun 18 2023 docutils -> ../Resources/docutils lrwxr-xr-x 1 501 80 18B Jun 18 2023 fonts -> ../Resources/fonts lrwxr-xr-x 1 501 80 16B Jun 18 2023 gpg -> ../Resources/gpg lrwxr-xr-x 1 501 80 19B Jun 18 2023 images -> ../Resources/images drwxr-xr-x@ 9 501 80 288B Jun 18 2023 kivy lrwxr-xr-x 1 501 80 25B Jun 18 2023 kivy_install -> ../Resources/kivy_install drwxr-xr-x@ 51 501 80 1.6K Jun 18 2023 lib-dynload lrwxr-xr-x 1 501 80 30B Jun 18 2023 libassuan.0.dylib -> ../Resources/libassuan.0.dylib -rwxr-xr-x@ 1 501 80 2.3M Jun 18 2023 libcrypto.1.1.dylib lrwxr-xr-x 1 501 80 31B Jun 18 2023 libgcrypt.20.dylib -> ../Resources/libgcrypt.20.dylib lrwxr-xr-x 1 501 80 33B Jun 18 2023 libgpg-error.0.dylib -> ../Resources/libgpg-error.0.dylib lrwxr-xr-x 1 501 80 28B Jun 18 2023 libintl.8.dylib -> ../Resources/libintl.8.dylib lrwxr-xr-x 1 501 80 22B Jun 18 2023 libintl.a -> ../Resources/libintl.a lrwxr-xr-x 1 501 80 26B Jun 18 2023 libintl.dylib -> ../Resources/libintl.dylib -rwxr-xr-x@ 1 501 80 197K Jun 18 2023 liblzma.5.dylib lrwxr-xr-x 1 501 80 28B Jun 18 2023 libnpth.0.dylib -> ../Resources/libnpth.0.dylib -rwxr-xr-x@ 1 501 80 288K Jun 18 2023 libreadline.8.dylib -rwxr-xr-x@ 1 501 80 510K Jun 18 2023 libssl.1.1.dylib lrwxr-xr-x 1 501 80 29B Jun 18 2023 libusb-1.0.dylib -> ../Resources/libusb-1.0.dylib lrwxr-xr-x 1 501 80 20B Jun 18 2023 main.py -> ../Resources/main.py -rwxr-xr-x@ 1 501 80 226K Jun 18 2023 modplug -rwxr-xr-x@ 1 501 80 271K Jun 18 2023 mpg123 lrwxr-xr-x 1 501 80 21B Jun 18 2023 packages -> ../Resources/packages -r-x------@ 1 501 80 609K Jun 18 2023 root_child_mac
In the meantime, I tried
sudo chown root:wheel [buskill-v0.7.0.app](http://buskill-v0.7.0.app)
I browsed online and I have found that root:wheel: Specifies the new owner (root) and group (wheel). On macOS, wheel is a traditional group name for the system administrator group, similar to root.
However it is still not working at that time.
23:11:56,959 root INFO =============================================================================== 23:11:56,960 root INFO INFO: Writing to log file '/var/folders/yj/pv3cnb7d5c9_s1xdsg_ztvbh0000gn/T/buskill.log' 23:11:56,960 root DEBUG BUSKILL_VERSION|{'VERSION': 'v0.7.0', 'GITHUB_REF': 'refs/heads/v0.7.0', 'GITHUB_SHA': '4139a515ea941dba3fffe5714226b135569f46e2', 'SOURCE_DATE_EPOCH': '1687039680'}| 23:11:56,960 root DEBUG os.environ|environ({'USER': 'dh', 'COMMAND_MODE': 'unix2003', '__CFBundleIdentifier': 'buskill-v0.7.0', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'LOGNAME': 'dh', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.pCgGfrvZHC/Listeners', 'HOME': '/Users/dh', 'SHELL': '/bin/zsh', 'TMPDIR': '/var/folders/yj/pv3cnb7d5c9_s1xdsg_ztvbh0000gn/T/', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'XPC_SERVICE_NAME': 'application.buskill-v0.7.0.18450406.18450465', 'XPC_FLAGS': '0x0', 'KIVY_DATA_DIR': '/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy_install/data', 'KIVY_MODULES_DIR': '/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy_install/modules', 'GST_REGISTRY_FORK': 'no', 'GST_PLUGIN_PATH': '/Applications/buskill-v0.7.0.app/Contents/MacOS:/Applications/buskill-v0.7.0.app/Contents/MacOS/gst-plugins', 'GST_REGISTRY': '/Applications/buskill-v0.7.0.app/Contents/MacOS/registry.bin', 'GST_PLUGIN_SYSTEM_PATH': ''})| 23:11:56,960 root DEBUG sys.argv|['/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill']| 23:11:56,960 root DEBUG sys.builtin_modules_names|('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', '_sre', '_stat', '_string', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time', 'xxsubtype', 'zipimport')| 23:11:56,960 root DEBUG sys.executable|/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill| 23:11:56,960 root DEBUG sys.path|['/Applications/buskill-v0.7.0.app/Contents/MacOS/base_library.zip', '/Applications/buskill-v0.7.0.app/Contents/MacOS/lib-dynload', '/Applications/buskill-v0.7.0.app/Contents/MacOS']| 23:11:56,960 root DEBUG sys.prefix|/Applications/buskill-v0.7.0.app/Contents/MacOS| 23:11:56,960 root DEBUG sys.version|3.7.8 (default, Jul 4 2020, 10:17:17) [Clang 11.0.3 (clang-1103.0.32.62)]| 23:11:56,960 root DEBUG sys.api_version|1013| 23:11:56,960 root DEBUG sys.version_info|sys.version_info(major=3, minor=7, micro=8, releaselevel='final', serial=0)| 23:11:56,960 root DEBUG name|main| 23:11:56,960 root DEBUG sys.platform|darwin| 23:11:56,990 root DEBUG platform.platform()|Darwin-23.2.0-x86_64-i386-64bit| 23:11:56,990 root DEBUG platform.system()|Darwin| 23:11:56,990 root DEBUG platform.release()|23.2.0| 23:11:56,990 root DEBUG platform.version()|Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:34 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T8103| 23:11:56,990 root DEBUG platform.machine()|x86_64| 23:11:56,990 root DEBUG platform.uname()|uname_result(system='Darwin', node='Ss-MacBook-Air.local', release='23.2.0', version='Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:34 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T8103', machine='x86_64', processor='i386')| 23:11:56,991 root DEBUG platform.mac_ver()|('10.16', ('', '', ''), 'x86_64')| 23:11:56,991 root INFO buskill version {'VERSION': 'v0.7.0', 'GITHUB_REF': 'refs/heads/v0.7.0', 'GITHUB_SHA': '4139a515ea941dba3fffe5714226b135569f46e2', 'SOURCE_DATE_EPOCH': '1687039680'} 23:11:56,992 packages.buskill DEBUG DEBUG: EXECUTED_AS_SCRIPT:|False| DEBUG: EXE_PATH:|/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill| DEBUG: EXE_DIR:|/Applications/buskill-v0.7.0.app/Contents/MacOS| DEBUG: EXE_FILE:|buskill| DEBUG: APP_DIR:|/Applications/buskill-v0.7.0.app| DEBUG: APPS_DIR:|/Applications| DEBUG: SRC_DIR:|/Applications/buskill-v0.7.0.app/Contents/MacOS| DEBUG: os.environ['PATH']:|/usr/bin:/bin:/usr/sbin:/sbin:/Applications/buskill-v0.7.0.app/Contents/MacOS:/Applications/buskill-v0.7.0.app|
23:11:56,992 packages.buskill INFO INFO: using DATA_DIR:|/Applications/.buskill| 23:11:56,993 packages.buskill DEBUG DEBUG: CONF_FILE:|/Applications/.buskill/config.ini|
23:11:57,8 kivy INFO [Logger ] Record log in /Applications/.buskill/logs/kivy_24-02-25_0.txt
23:11:57,8 kivy INFO [Kivy ] v1.11.1
23:11:57,8 kivy INFO [Kivy ] Installed at "/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy/init.pyc"
23:11:57,8 kivy INFO [Python ] v3.7.8 (default, Jul 4 2020, 10:17:17)
[Clang 11.0.3 (clang-1103.0.32.62)]
23:11:57,8 kivy INFO [Python ] Interpreter at "/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill"
23:11:57,136 kivy INFO [Factory ] 184 symbols loaded
23:11:57,701 kivy INFO [Image ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
23:11:58,37 kivy INFO [Window ] Provider: sdl2
23:11:58,865 kivy INFO [GL ] Using the "OpenGL ES 2" graphics system
23:11:58,866 kivy INFO [GL ] Backend used
23:45:39,454 packages.buskill INFO INFO: using DATA_DIR:|/Applications/.buskill| 23:45:39,455 packages.buskill DEBUG DEBUG: CONF_FILE:|/Applications/.buskill/config.ini|
23:45:39,462 kivy INFO [Logger ] Record log in /Applications/.buskill/logs/kivy_24-02-25_1.txt
23:45:39,462 kivy INFO [Kivy ] v1.11.1
23:45:39,462 kivy INFO [Kivy ] Installed at "/Applications/buskill-v0.7.0.app/Contents/MacOS/kivy/init.pyc"
23:45:39,462 kivy INFO [Python ] v3.7.8 (default, Jul 4 2020, 10:17:17)
[Clang 11.0.3 (clang-1103.0.32.62)]
23:45:39,462 kivy INFO [Python ] Interpreter at "/Applications/buskill-v0.7.0.app/Contents/MacOS/buskill"
23:45:39,484 kivy INFO [Factory ] 184 symbols loaded
23:45:39,605 kivy INFO [Image ] Providers: img_tex, img_imageio, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
23:45:39,733 kivy INFO [Window ] Provider: sdl2
23:45:40,122 kivy INFO [GL ] Using the "OpenGL ES 2" graphics system
23:45:40,123 kivy INFO [GL ] Backend used
I browsed online and I have found that root:wheel: Specifies the new owner (root) and group (wheel). On macOS, wheel is a traditional group name for the system administrator group, similar to root.
@samxplogs try setting the uid and gid to 0
Also, don't change the .app dir's permissions. The file whose permissions that are relevant here are the root child script /Applications/buskill-v0.7.0.app/Contents/MacOS/root_child_mac
For example:
sudo chown 0:0 /Applications/buskill-v0.7.0.app/Contents/MacOS/root_child_mac
On our cloud mac mini, we have owner of maltfield:staff = 502:20.
I just did an install of the BusKill v0.7.0 app on our cloud mac mini. We have basically the same user owner (50X) as this report, but the group owner (for which this error is thrown) is different.
OP has group owner admin w/ gid = 80
$ ls -lah /Applications/buskill-v0.7.0.app/Contents/MacOS/
...
-r-x------@ 1 dh admin 609K Jun 18 2023 root_child_mac
$
$ ls -lahn /Applications/buskill-v0.7.0.app/Contents/MacOS/
-r-x------@ 1 501 80 609K Jun 18 2023 root_child_mac
And we have staff w/ gid = 20
maltfield@host ~ % ls -lah Desktop/buskill-v0.7.0.app/Contents/MacOS
...
-r-x------ 1 maltfield staff 609K Jun 16 2023 root_child_mac
maltfield@host ~ %
maltfield@host ~ % ls -lahn Desktop/buskill-v0.7.0.app/Contents/MacOS
...
-r-x------ 1 502 20 609K Jun 16 2023 root_child_mac
maltfield@host ~ %
That explains why this didn't get detected in our tests. On our machine, my user maltfield is a member of the staff group. But I guess OP's user is not a member of the admin group.
https://github.com/BusKill/buskill-app/blob/53f631d7cf45bcafc752a520625099d0fcca9ede/src/packages/buskill/init.py#L682-L686
For reference, here's our full ls output
maltfield@host ~ % ls -lah Desktop/buskill-v0.7.0.app/Contents/MacOS
total 29512
drwxr-xr-x 46 maltfield staff 1.4K Jun 16 2023 .
drwxr-xr-x 7 maltfield staff 224B Jun 16 2023 ..
-rwxr-xr-x 1 maltfield staff 271K Jun 16 2023 FLAC
-rwxr-xr-x 1 maltfield staff 727K Jun 16 2023 FreeType
lrwxr-xr-x 1 maltfield staff 17B Jun 16 2023 KEYS -> ../Resources/KEYS
-rwxr-xr-x 1 maltfield staff 47K Jun 16 2023 Ogg
-rwxr-xr-x 1 maltfield staff 2.3M Jun 16 2023 Python
-rwxr-xr-x 1 maltfield staff 1.3M Jun 16 2023 SDL2
-rwxr-xr-x 1 maltfield staff 136K Jun 16 2023 SDL2_image
-rwxr-xr-x 1 maltfield staff 133K Jun 16 2023 SDL2_mixer
-rwxr-xr-x 1 maltfield staff 48K Jun 16 2023 SDL2_ttf
-rwxr-xr-x 1 maltfield staff 931K Jun 16 2023 Vorbis
lrwxr-xr-x 1 maltfield staff 24B Jun 16 2023 __pycache__ -> ../Resources/__pycache__
lrwxr-xr-x 1 maltfield staff 29B Jun 16 2023 base_library.zip -> ../Resources/base_library.zip
-rwxr-xr-x 1 maltfield staff 4.2M Jun 16 2023 buskill
lrwxr-xr-x 1 maltfield staff 33B Jun 16 2023 buskill-icon-150.png -> ../Resources/buskill-icon-150.png
lrwxr-xr-x 1 maltfield staff 30B Jun 16 2023 buskill-icon.icns -> ../Resources/buskill-icon.icns
lrwxr-xr-x 1 maltfield staff 23B Jun 16 2023 buskill.kv -> ../Resources/buskill.kv
lrwxr-xr-x 1 maltfield staff 27B Jun 16 2023 buskill_cli.py -> ../Resources/buskill_cli.py
lrwxr-xr-x 1 maltfield staff 27B Jun 16 2023 buskill_gui.py -> ../Resources/buskill_gui.py
lrwxr-xr-x 1 maltfield staff 31B Jun 16 2023 buskill_version.py -> ../Resources/buskill_version.py
lrwxr-xr-x 1 maltfield staff 20B Jun 16 2023 certifi -> ../Resources/certifi
lrwxr-xr-x 1 maltfield staff 21B Jun 16 2023 docutils -> ../Resources/docutils
lrwxr-xr-x 1 maltfield staff 18B Jun 16 2023 fonts -> ../Resources/fonts
lrwxr-xr-x 1 maltfield staff 16B Jun 16 2023 gpg -> ../Resources/gpg
lrwxr-xr-x 1 maltfield staff 19B Jun 16 2023 images -> ../Resources/images
drwxr-xr-x 9 maltfield staff 288B Jun 16 2023 kivy
lrwxr-xr-x 1 maltfield staff 25B Jun 16 2023 kivy_install -> ../Resources/kivy_install
drwxr-xr-x 51 maltfield staff 1.6K Jun 16 2023 lib-dynload
lrwxr-xr-x 1 maltfield staff 30B Jun 16 2023 libassuan.0.dylib -> ../Resources/libassuan.0.dylib
-rwxr-xr-x 1 maltfield staff 2.3M Jun 16 2023 libcrypto.1.1.dylib
lrwxr-xr-x 1 maltfield staff 31B Jun 16 2023 libgcrypt.20.dylib -> ../Resources/libgcrypt.20.dylib
lrwxr-xr-x 1 maltfield staff 33B Jun 16 2023 libgpg-error.0.dylib -> ../Resources/libgpg-error.0.dylib
lrwxr-xr-x 1 maltfield staff 28B Jun 16 2023 libintl.8.dylib -> ../Resources/libintl.8.dylib
lrwxr-xr-x 1 maltfield staff 22B Jun 16 2023 libintl.a -> ../Resources/libintl.a
lrwxr-xr-x 1 maltfield staff 26B Jun 16 2023 libintl.dylib -> ../Resources/libintl.dylib
-rwxr-xr-x 1 maltfield staff 197K Jun 16 2023 liblzma.5.dylib
lrwxr-xr-x 1 maltfield staff 28B Jun 16 2023 libnpth.0.dylib -> ../Resources/libnpth.0.dylib
-rwxr-xr-x 1 maltfield staff 288K Jun 16 2023 libreadline.8.dylib
-rwxr-xr-x 1 maltfield staff 510K Jun 16 2023 libssl.1.1.dylib
lrwxr-xr-x 1 maltfield staff 29B Jun 16 2023 libusb-1.0.dylib -> ../Resources/libusb-1.0.dylib
lrwxr-xr-x 1 maltfield staff 20B Jun 16 2023 main.py -> ../Resources/main.py
-rwxr-xr-x 1 maltfield staff 226K Jun 16 2023 modplug
-rwxr-xr-x 1 maltfield staff 271K Jun 16 2023 mpg123
lrwxr-xr-x 1 maltfield staff 21B Jun 16 2023 packages -> ../Resources/packages
-r-x------ 1 maltfield staff 609K Jun 16 2023 root_child_mac
maltfield@host ~ %
maltfield@host ~ % ls -lahn Desktop/buskill-v0.7.0.app/Contents/MacOS
total 29512
drwxr-xr-x 46 502 20 1.4K Jun 16 2023 .
drwxr-xr-x 7 502 20 224B Jun 16 2023 ..
-rwxr-xr-x 1 502 20 271K Jun 16 2023 FLAC
-rwxr-xr-x 1 502 20 727K Jun 16 2023 FreeType
lrwxr-xr-x 1 502 20 17B Jun 16 2023 KEYS -> ../Resources/KEYS
-rwxr-xr-x 1 502 20 47K Jun 16 2023 Ogg
-rwxr-xr-x 1 502 20 2.3M Jun 16 2023 Python
-rwxr-xr-x 1 502 20 1.3M Jun 16 2023 SDL2
-rwxr-xr-x 1 502 20 136K Jun 16 2023 SDL2_image
-rwxr-xr-x 1 502 20 133K Jun 16 2023 SDL2_mixer
-rwxr-xr-x 1 502 20 48K Jun 16 2023 SDL2_ttf
-rwxr-xr-x 1 502 20 931K Jun 16 2023 Vorbis
lrwxr-xr-x 1 502 20 24B Jun 16 2023 __pycache__ -> ../Resources/__pycache__
lrwxr-xr-x 1 502 20 29B Jun 16 2023 base_library.zip -> ../Resources/base_library.zip
-rwxr-xr-x 1 502 20 4.2M Jun 16 2023 buskill
lrwxr-xr-x 1 502 20 33B Jun 16 2023 buskill-icon-150.png -> ../Resources/buskill-icon-150.png
lrwxr-xr-x 1 502 20 30B Jun 16 2023 buskill-icon.icns -> ../Resources/buskill-icon.icns
lrwxr-xr-x 1 502 20 23B Jun 16 2023 buskill.kv -> ../Resources/buskill.kv
lrwxr-xr-x 1 502 20 27B Jun 16 2023 buskill_cli.py -> ../Resources/buskill_cli.py
lrwxr-xr-x 1 502 20 27B Jun 16 2023 buskill_gui.py -> ../Resources/buskill_gui.py
lrwxr-xr-x 1 502 20 31B Jun 16 2023 buskill_version.py -> ../Resources/buskill_version.py
lrwxr-xr-x 1 502 20 20B Jun 16 2023 certifi -> ../Resources/certifi
lrwxr-xr-x 1 502 20 21B Jun 16 2023 docutils -> ../Resources/docutils
lrwxr-xr-x 1 502 20 18B Jun 16 2023 fonts -> ../Resources/fonts
lrwxr-xr-x 1 502 20 16B Jun 16 2023 gpg -> ../Resources/gpg
lrwxr-xr-x 1 502 20 19B Jun 16 2023 images -> ../Resources/images
drwxr-xr-x 9 502 20 288B Jun 16 2023 kivy
lrwxr-xr-x 1 502 20 25B Jun 16 2023 kivy_install -> ../Resources/kivy_install
drwxr-xr-x 51 502 20 1.6K Jun 16 2023 lib-dynload
lrwxr-xr-x 1 502 20 30B Jun 16 2023 libassuan.0.dylib -> ../Resources/libassuan.0.dylib
-rwxr-xr-x 1 502 20 2.3M Jun 16 2023 libcrypto.1.1.dylib
lrwxr-xr-x 1 502 20 31B Jun 16 2023 libgcrypt.20.dylib -> ../Resources/libgcrypt.20.dylib
lrwxr-xr-x 1 502 20 33B Jun 16 2023 libgpg-error.0.dylib -> ../Resources/libgpg-error.0.dylib
lrwxr-xr-x 1 502 20 28B Jun 16 2023 libintl.8.dylib -> ../Resources/libintl.8.dylib
lrwxr-xr-x 1 502 20 22B Jun 16 2023 libintl.a -> ../Resources/libintl.a
lrwxr-xr-x 1 502 20 26B Jun 16 2023 libintl.dylib -> ../Resources/libintl.dylib
-rwxr-xr-x 1 502 20 197K Jun 16 2023 liblzma.5.dylib
lrwxr-xr-x 1 502 20 28B Jun 16 2023 libnpth.0.dylib -> ../Resources/libnpth.0.dylib
-rwxr-xr-x 1 502 20 288K Jun 16 2023 libreadline.8.dylib
-rwxr-xr-x 1 502 20 510K Jun 16 2023 libssl.1.1.dylib
lrwxr-xr-x 1 502 20 29B Jun 16 2023 libusb-1.0.dylib -> ../Resources/libusb-1.0.dylib
lrwxr-xr-x 1 502 20 20B Jun 16 2023 main.py -> ../Resources/main.py
-rwxr-xr-x 1 502 20 226K Jun 16 2023 modplug
-rwxr-xr-x 1 502 20 271K Jun 16 2023 mpg123
lrwxr-xr-x 1 502 20 21B Jun 16 2023 packages -> ../Resources/packages
-r-x------ 1 502 20 609K Jun 16 2023 root_child_mac
maltfield@host ~ %
@samxplogs could you please provide us some more info about your system's groups, so I can figure out the best approach to patch this?
Please execute the following commands as your normal dh user, and paste the output here
groups
cat /etc/group
I'll go first
maltfield@host ~ % groups
staff everyone localaccounts _appserverusr admin _appserveradm _lpadmin com.apple.sharepoint.group.1 com.apple.sharepoint.group.2 _appstore _lpoperator _developer _analyticsusers com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh-disabled com.apple.access_remote_ae com.apple.sharepoint.group.3 com.apple.sharepoint.group.4
maltfield@host ~ %
maltfield@host ~ % cat /etc/group
##
# Group Database
#
# Note that this file is consulted directly only when the system is running
# in single-user mode. At other times this information is provided by
# Open Directory.
#
# See the opendirectoryd(8) man page for additional information about
# Open Directory.
##
nobody:*:-2:
nogroup:*:-1:
wheel:*:0:root
daemon:*:1:root
kmem:*:2:root
sys:*:3:root
tty:*:4:root
operator:*:5:root
mail:*:6:_teamsserver
bin:*:7:
procview:*:8:root
procmod:*:9:root
owner:*:10:
everyone:*:12:
_taskgated:*:13:_taskgated
group:*:16:
staff:*:20:root
_networkd:*:24:
_installassistant:*:25:
_lp:*:26:
_postfix:*:27:
_postdrop:*:28:
certusers:*:29:root,_jabber,_postfix,_cyrus,_calendar,_dovecot
_keytabusers:*:30:_calendar,_jabber,_postfix
_scsd:*:31:
_ces:*:32:
_appstore:*:33:_appstore
utmp:*:45:
authedusers:*:50:
interactusers:*:51:
netusers:*:52:
consoleusers:*:53:
_mcxalr:*:54:
_appleevents:*:55:
_geod:*:56:
_devdocs:*:59:
_sandbox:*:60:
localaccounts:*:61:
netaccounts:*:62:
_mdnsresponder:*:65:
_uucp:*:66:
_ard:*:67:
dialer:*:68:
network:*:69:
_www:*:70:_devicemgr,_teamsserver
_eppc:*:71:_eppc
_cvs:*:72:
_svn:*:73:
_mysql:*:74:
_sshd:*:75:
_qtss:*:76:
_mailman:*:78:
_appserverusr:*:79:
admin:*:80:root
_appserveradm:*:81:
_clamav:*:82:
_amavisd:*:83:
_jabber:*:84:
_appowner:*:87:
_windowserver:*:88:
_spotlight:*:89:
accessibility:*:90:
_tokend:*:91:
_securityagent:*:92:
_calendar:*:93:_teamsserver
_teamsserver:*:94:_devicemgr
_update_sharing:*:95:
_installer:*:96:
_atsserver:*:97:
_lpadmin:*:98:
_unknown:*:99:
_lpoperator:*:100:
_softwareupdate:*:200:_softwareupdate
_guest:*:201:
_coreaudiod:*:202:
_screensaver:*:203:
_developer:*:204:
_locationd:*:205:
_detachedsig:*:207:_locationd
_trustevaluationagent:*:208:
_odchpass:*:209:_teamsserver
_timezone:*:210:
_lda:*:211:
_cvms:*:212:
_usbmuxd:*:213:
_postgres:*:216:_devicemgr,_calendar,_teamsserver,_xserverdocs
_devicemgr:*:220:
_webauthserver:*:221:_teamsserver,_devicemgr
_netbios:*:222:
_warmd:*:224:_warmd
_dovenull:*:227:
_netstatistics:*:228:
_assetcache:*:235:
_coremediaiod:*:236:
_launchservicesd:*:239:
_iconservices:*:240:
_distnote:*:241:
_nsurlsessiond:*:242:
_nsurlstoraged:*:243:
_displaypolicyd:*:244:
_astris:*:245:
_gamecontrollerd:*:247:
_mbsetupuser:*:248:
_ondemand:*:249:
_analyticsusers:*:250:_analyticsd,_networkd,_timed,_reportmemoryexception,_mbsetupuser
_xserverdocs:*:251:
_wwwproxy:*:252:
_mobileasset:*:253:
_findmydevice:*:254:
_datadetectors:*:257:
_captiveagent:*:258:
_ctkd:*:259:
_applepay:*:260:
_hidd:*:261:
_cmiodalassistants:*:262:
_analyticsd:*:263:_analyticsd
_webdeveloper:*:264:
_fpsd:*:265:_fpsd
_timed:*:266:
_nearbyd:*:268:_nearbyd
_reportmemoryexception:*:269:_reportmemoryexception
_driverkit:*:270:_driverkit
com.apple.access_ftp:*:395:
com.apple.access_disabled:*:396:
com.apple.access_sessionkey:*:397:
com.apple.access_screensharing:*:398:
com.apple.access_ssh:*:399:
com.apple.access_remote_ae:*:400:
maltfield@host ~ %
Interesting to note: my user appears to be member of both admin and staff groups
Note: this is currently blocked by issue #78:
- https://github.com/BusKill/buskill-app/issues/78
Thanks, the following command fixed the permissions sudo chown 0:0 /Applications/buskill-v0.7.0.app/Contents/MacOS/root_child_mac
When I arm, I am prompted for my password and disconnecting the buskill volume triggered the shutdown seamlessly. Well done ! 🙏
Here the details about my groups:
staff everyone localaccounts _appserverusr admin _appserveradm _lpadmin _appstore _lpoperator _developer _analyticsusers com.apple.access_ftp com.apple.access_screensharing-disabled com.apple.access_ssh com.apple.access_remote_ae com.apple.sharepoint.group.1
and output from cat /etc/group
nobody::-2: nogroup::-1: wheel::0:root daemon::1:root kmem::2:root sys::3:root tty::4:root operator::5:root mail::6:_teamsserver bin::7: procview::8:root procmod::9:root owner::10: everyone::12: _taskgated::13:_taskgated group::16: staff::20:root _networkd::24: _installassistant::25: _lp::26: _postfix::27: _postdrop::28: certusers::29:root,_jabber,_postfix,_cyrus,_calendar,_dovecot _keytabusers::30:_calendar,_jabber,_postfix _scsd::31: _ces::32: _appstore::33:_appstore utmp::45: authedusers::50: interactusers::51: netusers::52: consoleusers::53: _mcxalr::54: _appleevents::55: _geod::56: _devdocs::59: _sandbox::60: localaccounts::61: netaccounts::62: _mdnsresponder::65: _uucp::66: _ard::67: dialer::68: network::69: _www::70:_devicemgr,_teamsserver _eppc::71:_eppc _cvs::72: _svn::73: _mysql::74: _sshd::75: _qtss::76: _mailman::78: _appserverusr::79: admin::80:root _appserveradm::81: _clamav::82: _amavisd::83: _jabber::84: _appowner::87: _windowserver::88: _spotlight::89: accessibility::90: _tokend::91: _securityagent::92: _calendar::93:_teamsserver _teamsserver::94:_devicemgr _update_sharing::95: _installer::96: _atsserver::97: _lpadmin::98: _unknown::99: _lpoperator::100: _softwareupdate::200:_softwareupdate _guest::201: _coreaudiod::202: _screensaver::203: _developer::204: _locationd::205: _detachedsig::207:_locationd _trustevaluationagent::208: _odchpass::209:_teamsserver _timezone::210: _lda::211: _cvms::212: _usbmuxd::213: _postgres::216:_devicemgr,_calendar,_teamsserver,_xserverdocs _devicemgr::220: _webauthserver::221:_teamsserver,_devicemgr _netbios::222: _warmd::224:_warmd _dovenull::227: _netstatistics::228: _assetcache::235: _coremediaiod::236: _launchservicesd::239: _iconservices::240: _distnote::241: _nsurlsessiond::242: _displaypolicyd::244: _astris::245: _gamecontrollerd::247: _mbsetupuser::248: _ondemand::249: _analyticsusers::250:_analyticsd,_networkd,_timed,_reportmemoryexception,_mbsetupuser _xserverdocs::251: _wwwproxy::252: _mobileasset::253: _findmydevice::254: _datadetectors::257: _captiveagent::258: _ctkd::259: _applepay::260: _hidd::261: _cmiodalassistants::262: _analyticsd::263:_analyticsd _webdeveloper::264: _fpsd::265:_fpsd _timed::266: _nearbyd::268:_nearbyd _reportmemoryexception::269:_reportmemoryexception _driverkit::270:_driverkit _diskimagesiod::271:_diskimagesiod _logd::272:_logd _appinstalld::273:_appinstalld _installcoordinationd::274:_installcoordinationd _demod::275:_demod _rmd::277:_rmd _accessoryupdater::278:_accessoryupdater _knowledgegraphd::279:_knowledgegraphd _coreml::280:_coreml _sntpd::281:_sntpd,_timed _trustd::282:_trustd _mmaintenanced::283:_mmaintenanced _darwindaemon::284:_darwindaemon _notification_proxy::285: _avphidbridge::288:_avphidbridge _biome::289:_biome _backgroundassets::291:_backgroundassets _mobilegestalthelper::293: _audiomxd::294: _terminusd::295: _neuralengine::296:_neuralengine com.apple.access_ftp::395: com.apple.access_disabled::396: com.apple.access_sessionkey::397: com.apple.access_screensharing::398: com.apple.access_ssh::399: com.apple.access_remote_ae::400: _oahd:*:441:_oahd
Whaaaat? You're in the admin group?!? Then my theory of the cause of this bug is kaput.
I'll work on a prerelease with better debug output that can hopefully explain what's going-on on your system..
Thanks, the following command fixed the permissions sudo chown 0:0 /Applications/buskill-v0.7.0.app/Contents/MacOS/root_child_mac
When I arm, I am prompted for my password and disconnecting the buskill volume triggered the shutdown seamlessly. Well done ! 🙏
It's a good workaround, but let's keep working to fix this so other users never encounter this bug ;)
TODO:
1. Add better logging that outputs the owner, group, and mode of the root_child script 2. Add better logging that outputs the owner & group of the current user 3. Update root_child to actually harden/change owner, group, and mode of the root_child script on first execution 4. GUI error message if it refuses to execute root child due to unexpected permissions (link to docs with a longer description of the issue). Eg `WARNING: Unexpected permissions. Refusing to spawn root child`
Update: The BusKill CI Builds are finally fixed, so I can finally return to this ticket and implement/test the above items
I confirmed that #1 & #2 in the TODO list above are already done.
To implement #4, I need to setup some sort of communication between the src/packages/buskill/__init__.py's spawn_root() function to the src/buskill_gui.py's rearm_if_required() function. I'll try to see if I can raise and catch an exception. First let's see if any of the built-in exceptions meet our needs:
- https://docs.python.org/3/library/exceptions.html#built-in-exceptions
I was successfully able to throw an exception in the buskill class and catch the exception & display it to the user in the GUI in the latest build
- https://github.com/BusKill/buskill-app/releases/tag/10068421746_mac
Unfortunately, it still lets the user 'arm' after it tells the user that they couldn't set the trigger due to permissions errors. Worse, it tells the user in the app that it's armed with 'soft-shutdown'. This is a lie. It cannot trigger because there is now root_child process spawned.
The best way to prevent this is to have some secondary check occur at the time that the user hits the "arm" button. Basically we should find a way to "ping" the root_child. If it doesn't "pong" back, then we should raise an error rather than let the user think that they're armed, when they're not.
TODO: update the buskill class' toggle() function to "ping" the root_child if it's arming 'soft-shutdown' on a mac. If we don't get a pong back, keep the buskill gui in the blue/disarmed state, and raise a modal error popup in the UI
update: I'm currently blocked again by this ticket:
- https://github.com/BusKill/buskill-app/issues/24#issuecomment-2251459209
update: I fixed the builds dependency issue above
I manually changed the permissions of the root_child_mac binary to 0510, and I confirmed that the UI properly displays an error when calling set_trigger() upon leaving the Settings screen.
I manually changed the user owner of the root_child_mac binary to nobody, and I confirmed that the UI properly displays an error when calling set_trigger() upon leaving the Settings screen.
I manually changed the group owner of the root_child_mac binary to everyone, and I confirmed that the UI properly displays an error when calling set_trigger() upon leaving the Settings screen.
I manually moved the root_child_mac binary to root_child_mac_actual and created a symlink to this named root_child_mac, and I confirmed that the UI properly displays an error when calling set_trigger() upon leaving the Settings screen.
I removed the link, restored the file, and was successfully prompted for my password and able to return to the main screen without an error message. I was able to arm to the 'soft-shutdown' trigger without issues.
Bonus: I restarted the app and tried to set the trigger to 'soft-shutdown' again. This time I cancelled the auth prompt to type my password. I confirmed that the UI properly displays the error returned by the OS upon leaving the Settings screen.
I implemented a ping/pong function in the root_child_mac.py script. And I made the toggle() function of the buskill object attempt to ping the root_child before arming (only continuing if it responded with a pong message).
- https://github.com/BusKill/buskill-app/commit/3a79d757f94ac23a6f7dba55dc1468d0fb8837d9
I just tested the latest build on our mac mini, and I confirmed that this is working
- https://github.com/BusKill/buskill-app/releases/tag/10104820428_mac
00:41:30,846 packages.buskill DEBUG DEBUG: attempting to arm BusKill via <bound method BusKill.armNix of <packages.buskill.BusKill object at 0x10a386660>>() with the 'soft-shutdown' trigger
00:41:30,846 packages.buskill DEBUG DEBUG: Attempting to send 'ping' command to root child
00:41:30,848 root_child INFO Command received
00:41:30,848 root_child DEBUG Command is 'ping'
00:41:30,848 root_child INFO pong
00:41:30,849 root_child INFO Waiting for command
00:41:30,849 packages.buskill DEBUG DEBUG: Response from root-child:|pong|
I disarmed buskill, then I kill -9ed the root_child process manually. Then I clicked the "arm" button again.
00:47:47,709 packages.buskill DEBUG DEBUG: attempting to disarm BusKill
00:47:47,714 packages.buskill INFO INFO: BusKill is disarmed.
00:47:52,444 packages.buskill DEBUG DEBUG: attempting to arm BusKill via <bound method BusKill.armNix of <packages.buskill.BusKill object at 0x10a386660>>() with the 'soft-shutdown' trigger
00:47:52,444 packages.buskill DEBUG DEBUG: Attempting to send 'ping' command to root child
00:47:52,446 packages.buskill DEBUG DEBUG: Response from root-child:||
00:47:52,447 packages.buskill ERROR ERROR: Unable to ping root child process
The app didn't arm (it stayed blue/disarmed), and I got an error message modal popup in the GUI that said
ERROR Unable to toggle buskill state
ERROR: Unable to ping root child process
Success! This is important: the user is no longer given a false sense of security by telling them that the soft-shutdown trigger is "armed", if that's not the case. This, imho, is the most important outcome of this ticket.
Success! This is important: the user is no longer given a false sense of security by telling them that the
soft-shutdowntrigger is "armed", if that's not the case. This, imho, is the most important outcome of this ticket.
Ugh, I spoke too soon. It looks like there's another bug in our latest build that prevents the non-root-child-process (the one that listens to usb hotplug events) from executing
00:52:06,27 packages.buskill DEBUG DEBUG: Exception thrown in child process: Failed to load dynlib/dll 'libusb-1.0.dylib'. Most likely this dynlib/dll was not found when the application was frozen.
00:52:06,37 packages.buskill DEBUG DEBUG: Traceback: Traceback (most recent call last):
File "PyInstaller/loader/pyimod03_ctypes.py", line 53, in __init__
File "ctypes/__init__.py", line 379, in __init__
OSError: dlopen(libusb-1.0.dylib, 6): image not found
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "buskill/__init__.py", line 1632, in run
multiprocessing.Process.run(self)
File "multiprocessing/process.py", line 108, in run
File "buskill/__init__.py", line 1104, in armNix
with usb1.USBContext() as context:
File "usb1/__init__.py", line 2144, in __enter__
File "usb1/__init__.py", line 2174, in open
File "usb1/_libusb1.py", line 210, in loadLibrary
File "usb1/_libusb1.py", line 219, in __loadLibrary
File "usb1/_libusb1.py", line 158, in __getLibrary
File "PyInstaller/loader/pyimod03_ctypes.py", line 55, in __init__
pyimod03_ctypes.install.<locals>.PyInstallerImportError: Failed to load dynlib/dll 'libusb-1.0.dylib'. Most likely this dynlib/dll was not found when the application was frozen.
Worst of all, the GUI app changes to red, and it says "Armed". It's definitely not armed.
Good news is that there is an OSError() exception thrown, so I should just have to wrap that multiprocessing.Process() call in a try: statement, and I can prevent this false-assurance the same way I did above.
Sigh, of course, in a GUI, this is more complicated than initially expected.
The non-root-child process (referenced as self.usb_handler) that sits in the background and monitors for usb hotplug events when armed doesn't propagate its exceptions up to the parent process. Even to learn about the exceptions, I had to write this hack that overloads the run() function of the multiprocessing.Process() object
- https://stackoverflow.com/questions/63758186/how-to-catch-exceptions-thrown-by-functions-executed-using-multiprocessing-proce
In the example above, the parent is able to catch exceptions from the child, but only by wrapping a .join() in a try: statement -- which is, of course, blocking.
I could wait some amount of time after kicking-off the self.usb_handler child process (say, 1 second), and then check self.usb_handler._exception instance field that I use to catch & store any exceptions -- but then the UI would freeze during that time. Is it acceptable to make the user wait for 1 second before the app switches from blue/disarmed to red/armed?
Edit: probably a better option than spawn-wait-then-check-for-exception would be to make the usb_handler child (which is itself just an execution of self.ARM_FUNCTION) update some instance field of the process with either an "OK" message or, possibly better, an incrementing counter. That way I can just enter some (near-)infinite loop that checks this new keepalive_iter instance field and the _exception instance field. When one of them turns non-null, we'll exit the loop and either update the GUI as armed (if keepalive_iter is non-NULL) or throw and error and keep the GUI disarmed (if _exception is non-NULL)
Bonus: have some timeout. Eg if we've been looping for 1 second and both instance fields are non-NULL, exit the loop, display an error, and leave the app disarmed.
all right, I implemented ^ this idea. I tested it, and it appears to be working fine on Linux
- https://github.com/BusKill/buskill-app/commit/395cc76547f51b52df3a930fcc26d618e2895ea1
We added a new usb_handler.status instance field, which starts-out at 0. And I added a loop after kicking-off the non-root-child usb_handler process that loops infinitely until either usb_handler._exception is not None or usb_handler.status is > 0.
In the former case, we throw an error and the app stays disarmed/blue
In the later, we continue with updating the app armed/red
TODO test on macOS
well, the latest build just locks-up the GUI after pressing the "Arm" button. And I didn't even get my debug log prints from inside the while loop, so it looks like it never made it that far. I'll have to add some more debug prints to figure out where it's failing.
ok, I finally got the exception passing functional between the non-root child process and the main parent process's GUI.
Here's what we needed in the end:
- https://github.com/buskill/buskill-app/compare/ad12cb2e533644d6e12e1da3f2dcad04346fc01e..0f9fafdf9571d1913cf3f67a1d50a0f4db6a2732
Note: this issue is currently blocked by #87
- https://github.com/BusKill/buskill-app/issues/87
I created a separate issue for resolving the OSError: dlopen(libusb-1.0.dylib, 6): image not found bug, which is currently preventing me from continuing with fixing this ticket's bug
Update: I fixed the OSError: dlopen(libusb-1.0.dylib, 6): image not found bug by bumping the libusb tarball from libusb-1.0.23 to libusb-1.0.27 in the MacOS build script
- https://github.com/BusKill/buskill-app/commit/8a174077834f4f14e17d9286c888acdc56ea0fb8
I think the only thing remaining in this ticket (before testing) is to have the root_child harden its own owner permissions on first execution