Sometimes, `brew cask fetch`/`install` fails with an error message similar to this: ``` ==> Downloading https://w3g3a5v6.ssl.hwcdn.net/upload2/game/214692/735 Error: Download failed on Cask 'steamed-hams' with message: Operation not supported @ rb_sysopen - /Users/claudia/Documents/dev/brew/var/homebrew/locks/steamed-hams--1.0 .com&Expires=1520937180&Signature=CGmDulxL8pmutKTlCleNTUY%2FyO9Xyl5u9y VZUE0uWrjadjuz67Jp7zx3H7NEOhSyOhu8nzicEHRBjr3uSoOJzwkLC8LBLKnz%2B2X%2B iq5m6IdwSVFcLp2Q1Hr2kR7ETn3rF1DIq5o0lHCyzMmyNe5giEKJNW8WF0KXriULhzLTWL SA3ZTLCIofAdRiiGje1kNYY3C0SBqymQB8CG3ONn5kj7CIGbxrDOq5xI2ZSJdIyPysSX7S LvEDBw2KdR24q9t1wfjS9LUzelf5TWk6ojj8p9%2FHjl%2Fi%2FVCXNN4o1mW%2FMayy2t TY1qcC%2FTmqI1ulZS8SNuaSgr9Iys9oDF1%2BPK%2B4Sg==&hwexp=1520937440&hwsi g=55bc66884b925ef22f8673c33bfcc33b.incomplete.lock ``` To reproduce the issue, check out this branch and run the `cask/download_strategy` test suite: ``` brew tests --only=cask/download_strategy ``` Or take a real-life example, which would be a Cask whose URL has **1.** no `.` character anywhere in the URL path itself (outside of the domain name), **and 2.** at least one query parameter with a `.` character in it; **and 3.** other query parameters following that with a combined length of more than 255 characters. This combination may be uncommon but it exists, especially in [URLs that change on every visit](1002d41242/doc/cask_language_reference/stanzas/url.md (urls-that-change-on-every-visit)), for example [`steamed-hams`](9d7df499cd/Casks/steamed-hams.rb) from my `claui/cask-games` tap: $ brew tap claui/cask-games $ brew cask fetch steamed-hams In a nutshell, **URL query strings sometimes look like a very long file extension to Homebrew,** which it then proceeds to use as a file name. In `CurlDownloadStrategy`, Homebrew seems to apply a heuristic to the cask URL in order to figure out a possibly meaningful file extension. Sometimes this heuristic produces immensely long file extensions, especially when there’s a query parameter with a `.` character in it but not in the URL path itself (outside of the domain name). Homebrew then believes that everything after the `.` is a file extension. In one of the later steps, it tries to create a lock file containing that extension, which fails because HFS+ cannot handle files whose base file name has more than 255 characters. One solution would be to improve Homebrew’s extension detector a bit so that it won’t cross individual URL query param boundaries any longer. This is done by adding `&` as a stop character: ``` def ext Pathname.new(@url).extname[/[^?&]+/] end ``` This appears to fix the issue for most (if not all) practical purposes.
Homebrew
Features, usage and installation instructions are summarised on the homepage. Terminology (e.g. the difference between a Cellar, Tap, Cask and so forth) is explained here.
What Packages Are Available?
- Type
brew searchfor a list. - Or visit formulae.brew.sh to browse packages online.
- Or use
brew search --desc <keyword>to browse packages from the command line.
More Documentation
brew help, man brew or check our documentation.
Troubleshooting
First, please run brew update and brew doctor.
Second, read the Troubleshooting Checklist.
If you don't read these it will take us far longer to help you with your problem.
Contributing
We'd love you to contribute to Homebrew. First, please read our Contribution Guide and Code of Conduct.
We explicitly welcome contributions from people who have never contributed to open-source before: we were all beginners once! We can help build on a partially working pull request with the aim of getting it merged. We are also actively seeking to diversify our contributors and especially welcome contributions from women from all backgrounds and people of colour.
A good starting point for contributing is running brew audit --strict with some of the packages you use (e.g. brew audit --strict wget if you use wget) and then read through the warnings, try to fix them until brew audit --strict shows no results and submit a pull request. If no formulae you use have warnings you can run brew audit --strict without arguments to have it run on all packages and pick one.
Alternatively, for something more substantial, check out one of the issues labeled help wanted in Homebrew/brew or Homebrew/homebrew-core.
Good luck!
Security
Please report security issues to our HackerOne.
Who Are You?
Homebrew's lead maintainer is Mike McQuaid.
Homebrew/homebrew-core's lead maintainer is ilovezfs.
Homebrew/brew's other current maintainers are ilovezfs, Alyssa Ross, JCount, Misty De Meo, Gautham Goli, Markus Reiter and William Woodruff.
Homebrew/homebrew-core's other current maintainers are FX Coudert, JCount, Misty De Meo and Tom Schoonjans.
Former maintainers with significant contributions include Tim Smith, Baptiste Fontaine, Xu Cheng, Martin Afanasjew, Dominyk Tiller, Brett Koonce, Charlie Sharpsteen, Jack Nagel, Adam Vandenberg, Andrew Janke, Alex Dunn, neutric, Tomasz Pajor, Uladzislau Shablinski and Homebrew's creator: Max Howell.
Community
License
Code is under the BSD 2-clause "Simplified" License. Documentation is under the Creative Commons Attribution license.
Donations
Homebrew is a non-profit project run entirely by unpaid volunteers. We need your funds to pay for software, hardware and hosting around continuous integration and future improvements to the project. Every donation will be spent on making Homebrew better for our users.
Please consider a regular donation through Patreon:
Alternatively, if you'd rather make a one-off payment:
- Donate with PayPal
- Donate by USA $ check from a USA bank:
- Make check payable to "Software Freedom Conservancy, Inc." and place "Directed donation: Homebrew" in the memo field. Checks should then be mailed to:
- Software Freedom Conservancy, Inc. 137 Montague ST STE 380 BROOKLYN, NY 11201 USA
- Make check payable to "Software Freedom Conservancy, Inc." and place "Directed donation: Homebrew" in the memo field. Checks should then be mailed to:
- Donate by wire transfer: contact accounting@sfconservancy.org for wire transfer details.
Homebrew is a member of the Software Freedom Conservancy which provides us with an ability to receive tax-deductible, Homebrew earmarked donations (and many other services). Software Freedom Conservancy, Inc. is a 501(c)(3) organization incorporated in New York, and donations made to it are fully tax-deductible to the extent permitted by law.
Sponsors
Our Xserve ESXi boxes for CI are hosted by MacStadium.
Our Jenkins CI installation is hosted by DigitalOcean.
Our physical hardware is hosted by Commsworld.
Our bottles (binary packages) are hosted by Bintray.
Our website is hosted by Netlify.
Secure password storage and syncing provided by 1Password for Teams by AgileBits.
Homebrew is a member of the Software Freedom Conservancy.





