#15733 closed defect (fixed)
ChimeraX check for new versions returns Intel Mac even on ARM Mac computer
| Reported by: | Owned by: | Zach Pearson | |
|---|---|---|---|
| Priority: | high | Milestone: | |
| Component: | Tool Shed | Version: | |
| Keywords: | Cc: | Greg Couch, Eric Pettersen | |
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
The following bug report has been submitted:
Platform: macOS-14.5-arm64-arm-64bit
ChimeraX Version: 1.7.1 (2024-01-23 01:58:08 UTC)
Description
The check for new versions code on Mac show a link to return the Intel Mac ChimeraX even when the user is on a Mac ARM machine.
Log:
Startup Messages
---
warnings | Replacing fetcher for 'ngff' and format OME-Zarr from OME-Zarr
bundle with that from OME-Zarr bundle
Replacing fetcher for 'ngff' and format OME-Zarr from OME-Zarr bundle with
that from OME-Zarr bundle
Replacing fetcher for 'pdb_nmr' and format NMRSTAR from NMRSTAR bundle with
that from NMRSTAR bundle
UCSF ChimeraX version: 1.7.1 (2024-01-23)
© 2016-2023 Regents of the University of California. All rights reserved.
How to cite UCSF ChimeraX
> ui tool show Shell
OpenGL version: 4.1 Metal - 88.1
OpenGL renderer: Apple M2 Ultra
OpenGL vendor: Apple
Python: 3.11.2
Locale: UTF-8
Qt version: PyQt6 6.3.1, Qt 6.3.1
Qt runtime version: 6.3.2
Qt platform: cocoa
Hardware:
Hardware Overview:
Model Name: Mac Studio
Model Identifier: Mac14,14
Model Number: Z1800003VLL/A
Chip: Apple M2 Ultra
Total Number of Cores: 24 (16 performance and 8 efficiency)
Memory: 64 GB
System Firmware Version: 10151.121.1
OS Loader Version: 10151.121.1
Software:
System Software Overview:
System Version: macOS 14.5 (23F79)
Kernel Version: Darwin 23.5.0
Time since boot: 48 days, 21 hours, 34 minutes
Graphics/Displays:
Apple M2 Ultra:
Chipset Model: Apple M2 Ultra
Type: GPU
Bus: Built-In
Total Number of Cores: 60
Vendor: Apple (0x106b)
Metal Support: Metal 3
Displays:
PHL 278B1:
Resolution: 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like: 1920 x 1080 @ 60.00Hz
Main Display: Yes
Mirror: Off
Online: Yes
Rotation: Supported
Installed Packages:
aiobotocore: 2.12.2
aiohttp: 3.9.3
aioitertools: 0.11.0
aiosignal: 1.3.1
alabaster: 0.7.16
alphashape: 1.3.1
appdirs: 1.4.4
appnope: 0.1.3
asciitree: 0.3.3
asttokens: 2.4.1
attrs: 23.2.0
Babel: 2.14.0
backcall: 0.2.0
beautifulsoup4: 4.11.2
blockdiag: 3.0.0
blosc2: 2.0.0
botocore: 1.34.51
build: 0.10.0
certifi: 2022.12.7
cffi: 1.16.0
cftime: 1.6.3
charset-normalizer: 3.3.2
ChimeraX-AddCharge: 1.5.13
ChimeraX-AddH: 2.2.5
ChimeraX-AlignmentAlgorithms: 2.0.1
ChimeraX-AlignmentHdrs: 3.4.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 2.12.2
ChimeraX-AlphaFold: 1.0
ChimeraX-AltlocExplorer: 1.1.1
ChimeraX-AmberInfo: 1.0
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.49.1
ChimeraX-AtomicLibrary: 12.1.5
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.3.2
ChimeraX-BasicActions: 1.1.2
ChimeraX-BILD: 1.0
ChimeraX-BlastProtein: 2.1.2
ChimeraX-BondRot: 2.0.4
ChimeraX-BugReporter: 1.0.1
ChimeraX-BuildStructure: 2.10.5
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.2.2
ChimeraX-ButtonPanel: 1.0.1
ChimeraX-CageBuilder: 1.0.1
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.3.2
ChimeraX-ChangeChains: 1.1
ChimeraX-CheckWaters: 1.3.2
ChimeraX-ChemGroup: 2.0.1
ChimeraX-Clashes: 2.2.4
ChimeraX-Clipper: 0.22.3
ChimeraX-ColorActions: 1.0.3
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.5
ChimeraX-CommandLine: 1.2.5
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.7.1
ChimeraX-CoreFormats: 1.2
ChimeraX-coulombic: 1.4.2
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0.1
ChimeraX-DataFormats: 1.2.3
ChimeraX-Dicom: 1.2
ChimeraX-DistMonitor: 1.4
ChimeraX-DockPrep: 1.1.3
ChimeraX-Dssp: 2.0
ChimeraX-EMDB-SFF: 1.0
ChimeraX-ESMFold: 1.0
ChimeraX-FileHistory: 1.0.1
ChimeraX-FunctionKey: 1.0.1
ChimeraX-Geometry: 1.3
ChimeraX-gltf: 1.0
ChimeraX-Graphics: 1.1.1
ChimeraX-Hbonds: 2.4
ChimeraX-Help: 1.2.2
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.1
ChimeraX-ISOLDE: 1.7
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-IUPAC: 1.0
ChimeraX-Label: 1.1.8
ChimeraX-ListInfo: 1.2.2
ChimeraX-Log: 1.1.6
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.9.1
ChimeraX-Map: 1.1.4
ChimeraX-MapData: 2.0
ChimeraX-MapEraser: 1.0.1
ChimeraX-MapFilter: 2.0.1
ChimeraX-MapFit: 2.0
ChimeraX-MapSeries: 2.1.1
ChimeraX-Markers: 1.0.1
ChimeraX-Mask: 1.0.2
ChimeraX-MatchMaker: 2.1.2
ChimeraX-MCopy: 1.0
ChimeraX-MDcrds: 2.6.1
ChimeraX-MedicalToolbar: 1.0.2
ChimeraX-Meeting: 1.0.1
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.12.1
ChimeraX-MMTF: 2.2
ChimeraX-Modeller: 1.5.14
ChimeraX-ModelPanel: 1.4
ChimeraX-ModelSeries: 1.0.1
ChimeraX-Mol2: 2.0.3
ChimeraX-Mole: 1.0
ChimeraX-Morph: 1.0.2
ChimeraX-MouseModes: 1.2
ChimeraX-Movie: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nifti: 1.1
ChimeraX-NIHPresets: 1.1.15
ChimeraX-NRRD: 1.1
ChimeraX-Nucleotides: 2.0.3
ChimeraX-OME-Zarr: 0.5.2
ChimeraX-OpenCommand: 1.13.1
ChimeraX-PDB: 2.7.3
ChimeraX-PDBBio: 1.0.1
ChimeraX-PDBLibrary: 1.0.4
ChimeraX-PDBMatrices: 1.0
ChimeraX-PhenixUI: 1.2.0
ChimeraX-PickBlobs: 1.0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1
ChimeraX-PubChem: 2.1
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.2
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.1
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.2
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 4.0
ChimeraX-RotamerLibsDunbrack: 2.0
ChimeraX-RotamerLibsDynameomics: 2.0
ChimeraX-RotamerLibsRichardson: 2.0
ChimeraX-SaveCommand: 1.5.1
ChimeraX-SchemeMgr: 1.0
ChimeraX-SDF: 2.0.2
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.11
ChimeraX-Shape: 1.0.1
ChimeraX-Shell: 1.0.1
ChimeraX-Shortcuts: 1.1.1
ChimeraX-ShowSequences: 1.0.2
ChimeraX-SideView: 1.0.1
ChimeraX-Smiles: 2.1.2
ChimeraX-SmoothLines: 1.0
ChimeraX-SpaceNavigator: 1.0
ChimeraX-StdCommands: 1.12.4
ChimeraX-STL: 1.0.1
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.1.2
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0.1
ChimeraX-SwapAA: 2.0.1
ChimeraX-SwapRes: 2.2.2
ChimeraX-TapeMeasure: 1.0
ChimeraX-TaskManager: 1.0
ChimeraX-Test: 1.0
ChimeraX-TetraScapeCommand: 0.1
ChimeraX-Toolbar: 1.1.2
ChimeraX-ToolshedUtils: 1.2.4
ChimeraX-Topography: 1.0
ChimeraX-ToQuest: 1.0
ChimeraX-Tug: 1.0.1
ChimeraX-UI: 1.33.3
ChimeraX-uniprot: 2.3
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDockX: 1.3.2
ChimeraX-VIPERdb: 1.0
ChimeraX-Vive: 1.1
ChimeraX-VolumeMenu: 1.0.1
ChimeraX-vrml: 1.0
ChimeraX-VTK: 1.0
ChimeraX-WavefrontOBJ: 1.0
ChimeraX-WebCam: 1.0.2
ChimeraX-WebServices: 1.1.3
ChimeraX-Zone: 1.0.1
click: 8.1.7
click-log: 0.4.0
cloudpickle: 3.0.0
colorama: 0.4.6
comm: 0.2.1
contourpy: 1.2.0
cryptography: 42.0.5
cxservices: 1.2.2
cycler: 0.12.1
Cython: 0.29.33
dask: 2024.4.1
debugpy: 1.8.0
decorator: 5.1.1
distributed: 2024.4.1
docutils: 0.19
executing: 2.0.1
fasteners: 0.19
filelock: 3.9.0
fonttools: 4.47.2
frozenlist: 1.4.1
fsspec: 2024.3.1
funcparserlib: 2.0.0a0
glfw: 2.6.4
grako: 3.16.5
h5py: 3.10.0
html2text: 2020.1.16
idna: 3.6
ihm: 0.38
imagecodecs: 2023.9.18
imageio: 2.34.0
imagesize: 1.4.1
importlib-metadata: 7.1.0
ipykernel: 6.23.2
ipython: 8.14.0
ipython-genutils: 0.2.0
ipywidgets: 8.1.1
jedi: 0.18.2
Jinja2: 3.1.2
jmespath: 1.0.1
jupyter-client: 8.2.0
jupyter-core: 5.7.1
jupyterlab-widgets: 3.0.9
kiwisolver: 1.4.5
lazy-loader: 0.4
line-profiler: 4.0.2
locket: 1.0.0
lxml: 4.9.2
lz4: 4.3.2
MarkupSafe: 2.1.4
matplotlib: 3.7.2
matplotlib-inline: 0.1.6
msgpack: 1.0.4
multidict: 6.0.5
nest-asyncio: 1.6.0
netCDF4: 1.6.2
networkx: 3.1
nibabel: 5.0.1
nptyping: 2.5.0
numcodecs: 0.12.1
numexpr: 2.8.8
numpy: 1.25.1
ome-zarr: 0.8.3
openvr: 1.23.701
packaging: 21.3
ParmEd: 3.4.3
parso: 0.8.3
partd: 1.4.1
pep517: 0.13.0
pexpect: 4.9.0
pickleshare: 0.7.5
pillow: 10.2.0
pip: 23.0
pkginfo: 1.9.6
platformdirs: 4.1.0
prompt-toolkit: 3.0.43
psutil: 5.9.5
ptyprocess: 0.7.0
pure-eval: 0.2.2
py-cpuinfo: 9.0.0
pycollada: 0.7.2
pycparser: 2.22
pydicom: 2.3.0
Pygments: 2.16.1
pynmrstar: 3.3.2
pynrrd: 1.0.0
PyOpenGL: 3.1.7
PyOpenGL-accelerate: 3.1.7
pyopenxr: 1.0.2801
pyparsing: 3.0.9
pyproject-hooks: 1.0.0
PyQt6-commercial: 6.3.1
PyQt6-Qt6: 6.3.2
PyQt6-sip: 13.4.0
PyQt6-WebEngine-commercial: 6.3.1
PyQt6-WebEngine-Qt6: 6.3.2
pyspnego: 0.10.2
python-dateutil: 2.8.2
pytz: 2023.3.post1
PyYAML: 6.0.1
pyzmq: 25.1.2
qtconsole: 5.4.3
QtPy: 2.4.1
RandomWords: 0.4.0
requests: 2.31.0
Rtree: 1.1.0
s3fs: 2024.3.1
scikit-image: 0.22.0
scipy: 1.11.1
setuptools: 67.4.0
setuptools-scm: 7.0.5
sfftk-rw: 0.7.3
shapely: 2.0.2
six: 1.16.0
smbprotocol: 1.13.0
snowballstemmer: 2.2.0
sortedcontainers: 2.4.0
soupsieve: 2.5
sphinx: 6.1.3
sphinx-autodoc-typehints: 1.22
sphinxcontrib-applehelp: 1.0.8
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 1.0.6
sphinxcontrib-htmlhelp: 2.0.5
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 1.0.7
sphinxcontrib-serializinghtml: 1.1.10
stack-data: 0.6.3
superqt: 0.5.0
tables: 3.8.0
tblib: 3.0.0
tcia-utils: 1.5.1
tifffile: 2023.7.18
tinyarray: 1.2.4
tomli: 2.0.1
toolz: 0.12.1
tornado: 6.4
traitlets: 5.9.0
trimesh: 4.0.10
typing-extensions: 4.9.0
tzdata: 2023.4
urllib3: 2.0.7
wcwidth: 0.2.13
webcolors: 1.12
wheel: 0.38.4
wheel-filename: 1.4.1
widgetsnbextension: 4.0.9
wrapt: 1.16.0
yarl: 1.9.4
zarr: 2.17.2
zict: 3.0.0
zipp: 3.18.1
Change History (8)
comment:1 by , 15 months ago
| Cc: | added |
|---|---|
| Component: | Unassigned → Tool Shed |
| Owner: | set to |
| Platform: | → all |
| Priority: | normal → high |
| Project: | → ChimeraX |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → ChimeraX check for new versions returns Intel Mac even on ARM Mac computer |
comment:2 by , 15 months ago
Zach I assigned this to you instead of Greg because Greg is on vacation. Maybe you can modify the cxservices/services_cxnewer.py code so we stop shipping Intel Mac to people who are trying to update their ARM Mac ChimeraX.
If you are not comfortable doing it and testing it, reassign to Greg.
comment:3 by , 15 months ago
ChimeraX does not send enough information to the backend to make this distinction. The NewerVersionQuery class in core/src/toolshed/__init__.py will have to send "arch": platform.machine() # AMD64, arm64 along with its current parameters.
comment:4 by , 15 months ago
Oh, yeah, duh, I can see now you actually wrote extensive notes about it. 😅
comment:5 by , 15 months ago
I modified Webservices to interpret 'macosx' with no architecture as 'mac_universal'. I then started ChimeraX 1.7.1, loaded the interactive Python shell, imported NewerVersionQuery from chimerax.core.toolshed, and launched one.
Shortly after the 'ChimeraX Update Available' popup showed up on my screen. I clicked the link to download ChimeraX 1.8, and it took me to this URL:
https://www.rbvi.ucsf.edu/chimerax/cgi-bin/secure/chimerax-get.py?file=1.8/mac_universal/ChimeraX-1.8.dmg
I hit accept and got a copy of 1.8-mac-universal.
Then, I modified that ChimeraX to always send arm64 as the arch and got:
https://www.rbvi.ucsf.edu/chimerax/cgi-bin/secure/chimerax-get.py?file=1.8/mac_arm64/ChimeraX-1.8.dmg
Then I modified it to send x86_64 (platform.machine() on Intel; on Windows this is AMD64, not sure about Linux) and was sent to:
https://www.rbvi.ucsf.edu/chimerax/cgi-bin/secure/chimerax-get.py?file=1.8/macosx/ChimeraX-1.8.dmg
I'll have to modify the Webservices client to send the Arch parameter and then it'll be fixed.
comment:6 by , 15 months ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Should be fixed in tomorrow's build. To recap:
When old versions of ChimeraX on Mac ask for new versions, they always get universal builds.
New versions of ChimeraX from tomorrow will send their CPU architecture to the backend. Depending on what it is, Macs will get either the arm64 or intel builds.
comment:7 by , 15 months ago
The code you added "arch = platform.machine()" will say x86_64 when run from the Mac Intel ChimeraX on a Mac ARM machine. You need to use the actual CPU type. Maybe this will work for detecting ARM on Mac
'ARM64' in platform.uname().version
comment:8 by , 15 months ago
OK, now the line is arch = "arm64" if "arm64" in platform.uname().version.lower() else "x86_64" for Mac and 'arch=None' for other platforms. The backend throws the arch information for other platforms away for the time being.
This bug is a bad one. I checked the ChimeraX 1.8 downloads for the last 4 days in the web logs and 221 downloads were the Mac Intel version, while 538 were the Mac Universal and just 9 were Mac ARM. Almost all of the downloads should be Mac universal since that is the only one that is listed on the download page by default. But it appears that >200 users got the Intel Mac build and probably more than 100 of those were actually on Mac ARM machines.
The trouble is that all Mac ChimeraX versions send "macosx" as the operating system when checking for new versions, but "macosx" means Intel Mac. We use mac_arm64 for ARM Mac, and mac_universal for the universal build. Because it alway requests updates for Intel Mac, the link it gets back is for the Intel Mac ChimeraX even when the user's machine is an ARM Mac.
There are two parts to the fix. The cxservices backend code should return the mac_universal build when a check for macosx is requested. That will allow all the current ChimeraX 1.8, 1.7, ... builds out in the world to get the universal build so they can run native ARM code on the Mac. There is a fixup_os(os, os_version) in cxservices/service_cxnewer.py that can replace "macosx" with "mac_universal" to achieve this.
The other part of the fix is the toolshed code where it checks for a new version should ask for mac_arm64 if the CPU type on the computer is ARM and macosx if the CPU type is Intel. The code needs to check the actual CPU type, not the architecture of the ChimeraX Python which may be Intel even on an ARM Mac because this bug has made lots of Mac ARM users get Mac Intel ChimeraX. Also the cxservices fixup_os() code currently will break and return os = 'linux' if given mac_arm64, so that needs fixing too.