SlideShare a Scribd company logo
1 of 36
HOMEBREW
Awesome Package Management for OS X




ATLRUG                                 RailsMachine
June 2010                    Will Farrington & Mike Skalnik
HOMEBREW

1. Introduction

2. Getting Started

3. Creating Your Own Packages

4. Wrapping Things Up
HOMEBREW

1. Introduction

2. Getting Started

3. Creating Your Own Packages

4. Wrapping Things Up
INTRODUCTION
INTRODUCTION
• Packagemanagement for OS
 X that doesn’t suck
INTRODUCTION
• Packagemanagement for OS
 X that doesn’t suck

• Powered   by Ruby and Git
INTRODUCTION
• Packagemanagement for OS
 X that doesn’t suck

• Powered    by Ruby and Git

• Pretty   popular
INTRODUCTION
• Packagemanagement for OS
 X that doesn’t suck

• Powered    by Ruby and Git

• Pretty   popular

• Easy   to contribute
INTRODUCTION
• Packagemanagement for OS
 X that doesn’t suck

• Powered    by Ruby and Git

• Pretty   popular

• Easy   to contribute

• Only   requires XCode
HOW POPULAR IS PRETTY POPULAR?
HOW POPULAR IS PRETTY POPULAR?
HOW POPULAR IS PRETTY POPULAR?
WHY USE HOMEBREW?
WHY USE HOMEBREW?
• Fink   and MacPorts have the wrong philosophy
WHY USE HOMEBREW?
• Fink   and MacPorts have the wrong philosophy

• Sticks   to one standard prefix — /usr/local
WHY USE HOMEBREW?
• Fink   and MacPorts have the wrong philosophy

• Sticks   to one standard prefix — /usr/local

• Doesn’t    duplicate what Apple already provides
WHY USE HOMEBREW?
• Fink   and MacPorts have the wrong philosophy

• Sticks   to one standard prefix — /usr/local

• Doesn’t    duplicate what Apple already provides

• Making    new packages is dead simple
WHY USE HOMEBREW?
• Fink   and MacPorts have the wrong philosophy

• Sticks   to one standard prefix — /usr/local

• Doesn’t    duplicate what Apple already provides

• Making    new packages is dead simple

• Very   active user community
WHY NOT?
WHY NOT?
• Support for multiple versions of the same package is
 “okay”, but not great
WHY NOT?
• Support for multiple versions of the same package is
 “okay”, but not great

• Fink   and Macports “work” for now
WHY NOT?
• Support for multiple versions of the same package is
 “okay”, but not great

• Fink   and Macports “work” for now

• Doesn’t   duplicate anything Apple already provides
HOMEBREW

1. Introduction

2. Getting Started

3. Creating Your Own Packages

4. Wrapping Things Up
GETTING STARTED
GETTING STARTED

# Install Homebrew

$ ruby -e "$(curl http://gist.github.com/raw/323731/install_homebrew.rb)"

# Update formulas

$ brew update

# List all available formulas

$ brew search | less

# ... PROFIT!
USING HOMEBREW
$   brew install foo
$   brew uninstall foo
$   brew search [/regex/] [substring]
#   Update formulas from git
$   brew update
#   Remove old versions of foo
$   brew cleanup foo
$   brew info foo
#   Show which installed formulas are outdated
$   brew outdated
#   Remove all old versions of all formulas
$   brew prune
SOME FORMULAS
ack             haproxy     nginx

bzr             hg          redis

git             hub         rlwrap

cassandra       llvm        rtorrent

clojure         memcached   sphinx

coffee-script   mysql       subversion

ctags           mongodb     tex-live

go              monit       tokyo-cabinet
HOMEBREW

1. Introduction

2. Getting Started

3. Creating Your Own Packages

4. Wrapping Things Up
METAPHORS
             The package      /usr/local/Library/
 Formula
              description      Formula/foo.rb

            The installation
                              /usr/local/Cellar/
   Keg        prefix of a
                                   foo/0.1
               formula
             The location
  Cellar   where all kegs are /usr/local/Cellar
               installed
CODE
require 'formula'
CODE
require 'formula'

class Sl < Formula
  url 'http://ftp.de.debian.org/debian/pool/main/s/sl/
sl_3.03.orig.tar.gz'
  version '3.03'
  homepage 'http://packages.debian.org/source/oldstable/sl'
  md5 'd0d997b964bb3478f7f4968eee13c698'




end
CODE
require 'formula'

class Sl < Formula
  url 'http://ftp.de.debian.org/debian/pool/main/s/sl/
sl_3.03.orig.tar.gz'
  version '3.03'
  homepage 'http://packages.debian.org/source/oldstable/sl'
  md5 'd0d997b964bb3478f7f4968eee13c698'

  def install
    system 'make'
    bin.install 'sl'
    man1.install 'sl.1'
  end
end
HOMEBREW

1. Introduction

2. Getting Started

3. Creating Your Own Packages

4. Wrapping Things Up
Any Questions?
HOMEBREW
twitter.com/machomebrew

github.com/mxcl/homebrew

irc.freenode.net/#machomebrew

homebrew@librelist.com
WILL FARRINGTON
Chief Intern of Entirely Superfluous Job Titles
will@railsmachine.com
willfarrington.com

MIKE SKALNIK
Head Intern — Crockpot-Related R&D, Gardening
mike@railsmachine.com
mikeskalnik.com

More Related Content

What's hot

ITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementOrtus Solutions, Corp
 
AusNOG 2019 - Getting IPv6 Private Addressing Right
AusNOG 2019 - Getting IPv6 Private Addressing RightAusNOG 2019 - Getting IPv6 Private Addressing Right
AusNOG 2019 - Getting IPv6 Private Addressing RightMark Smith
 
Geecon 2019 - Taming Code Quality in the Worst Language I Know: Bash
Geecon 2019 - Taming Code Quality  in the Worst Language I Know: BashGeecon 2019 - Taming Code Quality  in the Worst Language I Know: Bash
Geecon 2019 - Taming Code Quality in the Worst Language I Know: BashMichał Kordas
 
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...OpenNebula Project
 
Puppet Camp London 2015: Puppet Contained
Puppet Camp London 2015: Puppet ContainedPuppet Camp London 2015: Puppet Contained
Puppet Camp London 2015: Puppet ContainedPuppet
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management toolAndrey Smirnov
 
Back to the Basics: The Home Lab
Back to the Basics: The Home LabBack to the Basics: The Home Lab
Back to the Basics: The Home LabMalcolmGalland
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony AppsPablo Godel
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer ToolboxPablo Godel
 
Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTJoshua Thijssen
 
Installing and Getting Started with Alfresco
Installing and Getting Started with AlfrescoInstalling and Getting Started with Alfresco
Installing and Getting Started with AlfrescoWildan Maulana
 
Alfresco Day Roma 2015: Infrastructure as Code with Chef-Alfresco
Alfresco Day Roma 2015: Infrastructure as Code with Chef-AlfrescoAlfresco Day Roma 2015: Infrastructure as Code with Chef-Alfresco
Alfresco Day Roma 2015: Infrastructure as Code with Chef-AlfrescoAlfresco Software
 
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...NETWAYS
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsWO Community
 
Kinect Workshop Part 1/2
Kinect Workshop Part 1/2Kinect Workshop Part 1/2
Kinect Workshop Part 1/2Seiya Konno
 
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenRefactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenNETWAYS
 
Distributed Developer Workflows using Git
Distributed Developer Workflows using GitDistributed Developer Workflows using Git
Distributed Developer Workflows using GitSusan Potter
 

What's hot (20)

ITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package Management
 
AusNOG 2019 - Getting IPv6 Private Addressing Right
AusNOG 2019 - Getting IPv6 Private Addressing RightAusNOG 2019 - Getting IPv6 Private Addressing Right
AusNOG 2019 - Getting IPv6 Private Addressing Right
 
Capistrano
CapistranoCapistrano
Capistrano
 
Geecon 2019 - Taming Code Quality in the Worst Language I Know: Bash
Geecon 2019 - Taming Code Quality  in the Worst Language I Know: BashGeecon 2019 - Taming Code Quality  in the Worst Language I Know: Bash
Geecon 2019 - Taming Code Quality in the Worst Language I Know: Bash
 
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...
OpenNebulaConf2017EU: OpenNebula Companion tools: Admins Little Helpers by Bo...
 
Puppet Camp London 2015: Puppet Contained
Puppet Camp London 2015: Puppet ContainedPuppet Camp London 2015: Puppet Contained
Puppet Camp London 2015: Puppet Contained
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
 
Back to the Basics: The Home Lab
Back to the Basics: The Home LabBack to the Basics: The Home Lab
Back to the Basics: The Home Lab
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer Toolbox
 
Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
 
Installing and Getting Started with Alfresco
Installing and Getting Started with AlfrescoInstalling and Getting Started with Alfresco
Installing and Getting Started with Alfresco
 
Alfresco Day Roma 2015: Infrastructure as Code with Chef-Alfresco
Alfresco Day Roma 2015: Infrastructure as Code with Chef-AlfrescoAlfresco Day Roma 2015: Infrastructure as Code with Chef-Alfresco
Alfresco Day Roma 2015: Infrastructure as Code with Chef-Alfresco
 
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Kinect Workshop Part 1/2
Kinect Workshop Part 1/2Kinect Workshop Part 1/2
Kinect Workshop Part 1/2
 
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van WijngaardenRefactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
 
JUC 2015 Pipeline Scaling
JUC 2015 Pipeline ScalingJUC 2015 Pipeline Scaling
JUC 2015 Pipeline Scaling
 
Distributed Developer Workflows using Git
Distributed Developer Workflows using GitDistributed Developer Workflows using Git
Distributed Developer Workflows using Git
 

Similar to Homebrew Package Management for OS X

Composer - The missing package manager for PHP
Composer - The missing package manager for PHPComposer - The missing package manager for PHP
Composer - The missing package manager for PHPTareq Hasan
 
Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015ice799
 
Getting Started with Go
Getting Started with GoGetting Started with Go
Getting Started with GoSteven Francia
 
Happy Go Programming Part 1
Happy Go Programming Part 1Happy Go Programming Part 1
Happy Go Programming Part 1Lin Yo-An
 
CommandBox & ForgeBox Package Management
CommandBox & ForgeBox Package ManagementCommandBox & ForgeBox Package Management
CommandBox & ForgeBox Package ManagementOrtus Solutions, Corp
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Elsemckern
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
04 02-2018--Slackware Wire Shark Installation
04 02-2018--Slackware Wire Shark Installation04 02-2018--Slackware Wire Shark Installation
04 02-2018--Slackware Wire Shark InstallationAlexander Bitar
 
perlbrew yapcasia 2010
perlbrew yapcasia 2010perlbrew yapcasia 2010
perlbrew yapcasia 2010Kang-min Liu
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Chef
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chefice799
 
Package Management via Spack on SJTU π Supercomputer
Package Management via Spack on SJTU π SupercomputerPackage Management via Spack on SJTU π Supercomputer
Package Management via Spack on SJTU π SupercomputerJianwen Wei
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)p3castro
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by dockerWei-Ting Kuo
 

Similar to Homebrew Package Management for OS X (20)

Composer - The missing package manager for PHP
Composer - The missing package manager for PHPComposer - The missing package manager for PHP
Composer - The missing package manager for PHP
 
Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015
 
Getting Started with Go
Getting Started with GoGetting Started with Go
Getting Started with Go
 
Happy Go Programming Part 1
Happy Go Programming Part 1Happy Go Programming Part 1
Happy Go Programming Part 1
 
CommandBox at CFCamp 2014
CommandBox at CFCamp 2014CommandBox at CFCamp 2014
CommandBox at CFCamp 2014
 
CommandBox & ForgeBox Package Management
CommandBox & ForgeBox Package ManagementCommandBox & ForgeBox Package Management
CommandBox & ForgeBox Package Management
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Debian packaging
Debian packagingDebian packaging
Debian packaging
 
Packaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything ElsePackaging is the Worst Way to Distribute Software, Except for Everything Else
Packaging is the Worst Way to Distribute Software, Except for Everything Else
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
04 02-2018--Slackware Wire Shark Installation
04 02-2018--Slackware Wire Shark Installation04 02-2018--Slackware Wire Shark Installation
04 02-2018--Slackware Wire Shark Installation
 
perlbrew yapcasia 2010
perlbrew yapcasia 2010perlbrew yapcasia 2010
perlbrew yapcasia 2010
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015
 
Chef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & ChefChef Conf 2015: Package Management & Chef
Chef Conf 2015: Package Management & Chef
 
Docker perl build
Docker perl buildDocker perl build
Docker perl build
 
Package Management via Spack on SJTU π Supercomputer
Package Management via Spack on SJTU π SupercomputerPackage Management via Spack on SJTU π Supercomputer
Package Management via Spack on SJTU π Supercomputer
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)
 
Shipping python project by docker
Shipping python project by dockerShipping python project by docker
Shipping python project by docker
 
CommandBox : Free CFML
CommandBox : Free CFMLCommandBox : Free CFML
CommandBox : Free CFML
 
Ekon24 mORMot 2
Ekon24 mORMot 2Ekon24 mORMot 2
Ekon24 mORMot 2
 

Recently uploaded

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 

Recently uploaded (20)

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 

Homebrew Package Management for OS X

Editor's Notes

  1. Introduce yourselves!
  2. Here&amp;#x2019;s what we&amp;#x2019;ll be covering today
  3. Package managers on OS X have historically been... pretty awful. Homebrew kicks it up a notch. The whole package manager is written in Ruby and uses git for the &amp;#x201C;repository&amp;#x201D; It&amp;#x2019;s insanely popular. Absolutely huge number of people contributing to it, and even more using it and filing bug reports (ie. requests) Contribution is as simple as forking the repo on github and then making an issue with a link to your commits All you need to install to get up and running is the OS X toolchain &amp;#x2014; ie. XCode
  4. Package managers on OS X have historically been... pretty awful. Homebrew kicks it up a notch. The whole package manager is written in Ruby and uses git for the &amp;#x201C;repository&amp;#x201D; It&amp;#x2019;s insanely popular. Absolutely huge number of people contributing to it, and even more using it and filing bug reports (ie. requests) Contribution is as simple as forking the repo on github and then making an issue with a link to your commits All you need to install to get up and running is the OS X toolchain &amp;#x2014; ie. XCode
  5. Package managers on OS X have historically been... pretty awful. Homebrew kicks it up a notch. The whole package manager is written in Ruby and uses git for the &amp;#x201C;repository&amp;#x201D; It&amp;#x2019;s insanely popular. Absolutely huge number of people contributing to it, and even more using it and filing bug reports (ie. requests) Contribution is as simple as forking the repo on github and then making an issue with a link to your commits All you need to install to get up and running is the OS X toolchain &amp;#x2014; ie. XCode
  6. Package managers on OS X have historically been... pretty awful. Homebrew kicks it up a notch. The whole package manager is written in Ruby and uses git for the &amp;#x201C;repository&amp;#x201D; It&amp;#x2019;s insanely popular. Absolutely huge number of people contributing to it, and even more using it and filing bug reports (ie. requests) Contribution is as simple as forking the repo on github and then making an issue with a link to your commits All you need to install to get up and running is the OS X toolchain &amp;#x2014; ie. XCode
  7. Package managers on OS X have historically been... pretty awful. Homebrew kicks it up a notch. The whole package manager is written in Ruby and uses git for the &amp;#x201C;repository&amp;#x201D; It&amp;#x2019;s insanely popular. Absolutely huge number of people contributing to it, and even more using it and filing bug reports (ie. requests) Contribution is as simple as forking the repo on github and then making an issue with a link to your commits All you need to install to get up and running is the OS X toolchain &amp;#x2014; ie. XCode
  8. It&amp;#x2019;s the third most forked repository on github!
  9. It&amp;#x2019;s the third most forked repository on github!
  10. Fink and MacPorts try to shove Linux-style package management into OS X. That&amp;#x2019;s the wrong way to do it. There are plenty of good Linux package managers out there, and yeah, technically they *can* be made to work on OS X, but they&amp;#x2019;ll never really fit in. Homebrew was designed *for* OS X, not around it. One of homebrew&amp;#x2019;s own philosophies is that the user shouldn&amp;#x2019;t need super-user or sudo access to install packages. Instead, it makes /usr/local accessible to the current user and recommends using it as the homebrew prefix. No duplication means doesn&amp;#x2019;t replace ruby, perl, php, etc And as already shown, huge user community
  11. Fink and MacPorts try to shove Linux-style package management into OS X. That&amp;#x2019;s the wrong way to do it. There are plenty of good Linux package managers out there, and yeah, technically they *can* be made to work on OS X, but they&amp;#x2019;ll never really fit in. Homebrew was designed *for* OS X, not around it. One of homebrew&amp;#x2019;s own philosophies is that the user shouldn&amp;#x2019;t need super-user or sudo access to install packages. Instead, it makes /usr/local accessible to the current user and recommends using it as the homebrew prefix. No duplication means doesn&amp;#x2019;t replace ruby, perl, php, etc And as already shown, huge user community
  12. Fink and MacPorts try to shove Linux-style package management into OS X. That&amp;#x2019;s the wrong way to do it. There are plenty of good Linux package managers out there, and yeah, technically they *can* be made to work on OS X, but they&amp;#x2019;ll never really fit in. Homebrew was designed *for* OS X, not around it. One of homebrew&amp;#x2019;s own philosophies is that the user shouldn&amp;#x2019;t need super-user or sudo access to install packages. Instead, it makes /usr/local accessible to the current user and recommends using it as the homebrew prefix. No duplication means doesn&amp;#x2019;t replace ruby, perl, php, etc And as already shown, huge user community
  13. Fink and MacPorts try to shove Linux-style package management into OS X. That&amp;#x2019;s the wrong way to do it. There are plenty of good Linux package managers out there, and yeah, technically they *can* be made to work on OS X, but they&amp;#x2019;ll never really fit in. Homebrew was designed *for* OS X, not around it. One of homebrew&amp;#x2019;s own philosophies is that the user shouldn&amp;#x2019;t need super-user or sudo access to install packages. Instead, it makes /usr/local accessible to the current user and recommends using it as the homebrew prefix. No duplication means doesn&amp;#x2019;t replace ruby, perl, php, etc And as already shown, huge user community
  14. Fink and MacPorts try to shove Linux-style package management into OS X. That&amp;#x2019;s the wrong way to do it. There are plenty of good Linux package managers out there, and yeah, technically they *can* be made to work on OS X, but they&amp;#x2019;ll never really fit in. Homebrew was designed *for* OS X, not around it. One of homebrew&amp;#x2019;s own philosophies is that the user shouldn&amp;#x2019;t need super-user or sudo access to install packages. Instead, it makes /usr/local accessible to the current user and recommends using it as the homebrew prefix. No duplication means doesn&amp;#x2019;t replace ruby, perl, php, etc And as already shown, huge user community
  15. Homebrew can install multiple versions of the same package, but it doesn&amp;#x2019;t all &amp;#x201C;link&amp;#x201D; them into place. Basically homebrew installs each package in its own little prefix in /usr/local, but then symlinks one of them into the &amp;#x201C;standard&amp;#x201D; /usr/local directories, like lib and bin. It&amp;#x2019;s not ideal, but it doesn&amp;#x2019;t prevent you from really using multiple versions of things like libraries. Change is hard. Getting others to change is really hard. Don&amp;#x2019;t like the way Apple ships PHP? Out of luck.
  16. Homebrew can install multiple versions of the same package, but it doesn&amp;#x2019;t all &amp;#x201C;link&amp;#x201D; them into place. Basically homebrew installs each package in its own little prefix in /usr/local, but then symlinks one of them into the &amp;#x201C;standard&amp;#x201D; /usr/local directories, like lib and bin. It&amp;#x2019;s not ideal, but it doesn&amp;#x2019;t prevent you from really using multiple versions of things like libraries. Change is hard. Getting others to change is really hard. Don&amp;#x2019;t like the way Apple ships PHP? Out of luck.
  17. Homebrew can install multiple versions of the same package, but it doesn&amp;#x2019;t all &amp;#x201C;link&amp;#x201D; them into place. Basically homebrew installs each package in its own little prefix in /usr/local, but then symlinks one of them into the &amp;#x201C;standard&amp;#x201D; /usr/local directories, like lib and bin. It&amp;#x2019;s not ideal, but it doesn&amp;#x2019;t prevent you from really using multiple versions of things like libraries. Change is hard. Getting others to change is really hard. Don&amp;#x2019;t like the way Apple ships PHP? Out of luck.
  18. Getting homebrew installed and running is pretty easy.
  19. Using it, is also pretty easy
  20. Finding useful packages, is also really easy.
  21. but above all else, creating your own packages to contribute, is really, really easy
  22. Some terminology we&amp;#x2019;ll use here. Formulas are the ruby file describing the package, and the keg is where a particular version of a formula is installed to, and the Cellar holds all of these kegs. So let&amp;#x2019;s write a package definition
  23. First thing is to require the formula library
  24. Then, make some method calls to set metadata for the formula
  25. and now tell homebrew how to build and install it
  26. Once you&amp;#x2019;ve got your formula made or updated and you&amp;#x2019;ve pushed to your own remote, just file an issue on the source repo on github with a link to your commits and wait! That&amp;#x2019;s it.
  27. So, any questions?
  28. Here&amp;#x2019;s other places you might want to go for homebrew-related activities
  29. And thank you!