Opened 15 months ago

Closed 15 months ago

Last modified 15 months ago

#15733 closed defect (fixed)

ChimeraX check for new versions returns Intel Mac even on ARM Mac computer

Reported by: goddard@… 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 Tom Goddard, 15 months ago

Cc: Greg Couch Eric Pettersen added
Component: UnassignedTool Shed
Owner: set to Zach Pearson
Platform: all
Priority: normalhigh
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionChimeraX check for new versions returns Intel Mac even on ARM Mac computer

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.

comment:2 by Tom Goddard, 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 Zach Pearson, 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 Zach Pearson, 15 months ago

Oh, yeah, duh, I can see now you actually wrote extensive notes about it. 😅

comment:5 by Zach Pearson, 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 Zach Pearson, 15 months ago

Resolution: fixed
Status: assignedclosed

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 Tom Goddard, 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 Zach Pearson, 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.

Note: See TracTickets for help on using tickets.