Skip to content

Instantly share code, notes, and snippets.

@eloypnd
Last active November 30, 2021 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eloypnd/b840ec8ce12eb5f8fd67 to your computer and use it in GitHub Desktop.
Save eloypnd/b840ec8ce12eb5f8fd67 to your computer and use it in GitHub Desktop.
Instalación "limpia" de Mac OS X y entorno de desarrollo

Instalación "limpia" de Mac OS X y entorno de desarrollo

Este manual explica el proceso para hacer una instalación "limpia" de Mac OS X y los programas y aplicaciones básicas para tener el ordenador listo para empezar en el menor tiempo posible.

En el momento en que estoy escribiendo esto asumimos que el SO a instalar es Mac OS X 10.10 Yosemite. Algunas rutas de archivos pueden variar un poco si la version que quieres instalar es más antigua, pero en general los pasos a seguir son los mismos.

Utilizamos algunas herramientas como dotfiles, homebrew (y sus Brewfiles) o cask para agilizar ciertas tareas repetitivas como instalar aplicaciones.

Necesitaremos:

  • Memoria USB de 8GB mínimo
  • El instalador de Mac OS X 10.10 Yosemite
  • Al menos 30 minutos para instalar el SO
  • Unos 10 minutos para el resto de Apps

1. Crear un "disco" de instalación externo para OS X

Desde hace algún tiempo ( 20 de Julio del 2011 con el lanzamiento de Mac OS X 10.7 Lion) Apple no distribuye su sistema operativo en nigún dispositivo físico, solo a través de descarga en la Mac App Store. Es por ello que lo primero que necesitamos hacer es descargarnos el SO de la tienda de la manzana y crear un disco de arranque con este instalador.

  1. Descargamos (pero no instalamos) “Install OS X Yosemite.app” de la Mac App Store
  2. Preparamos el “disco” USB para usarlo como “disco” de instalacón:
  3. Insertamos el dispositivo USB
  4. Abrimos la aplicación Utilidad de Discos que se encuentra en /Aplicaciones/Utilidades/
  5. Selecciona el dispositivo USB en la columna izquierda de la aplicación.
  6. En la columna derecha selecciona la pestaña Borrar y “formatea” el dispositivo seleccionando el formato _Mac OS Extended (Journaled)
  7. Una vez listo el dispositivo USB debemos copiar el “instalador” en él. Para ello:
  8. Abrimos la aplicación Terminal que se encuentra en la carpeta /Aplicaciones/Utilidades/Terminal.app
  9. Copiamos esto en la línea de comandos1: sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install\ OS\ X\ Yosemite.app --nointeraction
  10. Te pedirá tu contraseña de administrador, debes introducirla.
  11. Ahora que tenemos el disco de instalación listo solo debemos reiniciar el ordenador y arrancar desde este dispositivo USB que hemos creado. Para ello bastará con reinicar el ordenador y mantener pulsada la tecla alt ⌥.

2. Instalar Mac OS X

Una vez hemos iniciado el desde nuestro dispositivo externo podemos formatear la unidad principal de nuestro ordenador y hacer una instalación limpia del sistema operativo.

3. Despues de la instalación

Una vez tenemos el SO instalado vamos a comenzar a organizar e instalar las herramientas mínimas necesarias. Para ello usaremos principalmente algunos scripts ejecutados desde la línea de comandos, para así agilizar esta tediosa tarea. Para ellos usaremos principalmente Homebrew2 para herramientas de la línea de comandos y Cask3 para las aplicaciones nativas de OS X.

En primer lugar empezaremos por instalar las aplicaciones y herramientas que no estan disponibles a través en Homebrew ni en Cask. Estas aplicaciones las tenemos que instalar desde la Mac App Store:

  • Xcode. Entorno de desarrollo de Apple

  • 1Password. Gestor de contraseñas (También se puede comprar una licencia a través de su web instalar con cask)

  • Pixelmator. Edición de images para Mac

  • Sketch. Edición de gráficos vectoriales para Mac

    Una vez instalado Xcode, ábrelo y acepta los “Terminos y condiciones”. Instala las Utilidades de la línea de comandos abriendo el Terminal y escribiendo:
    xcode-select --install

    Esto solo funciona a partir de Mac OS X 10.9 Maverics. Para versiones anteriores instalas Utilidades de la línea de comandos desde las Preferencias de Xcode.

    Otra forma alternativa: GCC Installer for OSX | Xcode, GCC, and Homebrew

Una vez instaladas (o mientras se instalan) las aplicaciones que solo se pueden conseguir a través Mac App Store continuamos “personalizando” nuestra herramienta de trabajo.

Command Line and OhMyZsh

La linea de comandos es esencial. Para tener un entorno más productivo necesitamos:

  1. Instala las Utilidades de la línea de comandos abriendo el Terminal y escribiendo:

    xcode-select --install

  2. Instalamos Oh My ZSH! para mejorar nuestro entorno de trabajo en la linea de comandos.

    sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

homebrew y cask

Ahora vamos a instalar Homebrew, un gestor de paquetes para Mac OSX. Para ello copiamos la siguiente linea en el 'prompt' de la línea de comandos:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Instalar desde Caskfile

  • Alfred
  • Dropbox
  • Evernote
  • Mailbox (beta)
  • Skype
  • Google Chrome
  • Google Chrome Canary
  • Opera
  • Atom
  • MacDown

Alfred v2 support Finding Symlinked Applications


enlaces relacionados

dotfiles

Ahora vamos a hacer de nuestra línea de comandos un entorno mucho más amigable con síntaxis coloreada, predicción de comandos, un prompt” más informativo, etc. Para ello vamos a usar los “dotfiles”. Esto por si solo se merece un artículo, que por supuesto escribiremos en algún momento. Pero por ahora solo comentaremos que estos dotfiles son como ficheros de configuración para distintas herramientas de la línea de comandos. Es por ello que de estos dotfiles hay tantas versiones como desarrolladores hay en el universo (para gustos colores). Los que yo uso actualmente estan muy inspirados en los .dotfiles de Mathias Bynens. Aquí os dejo algunos otras opciones para dotfiles:

enlaces relacionados

Development environment

Atom packages

  • [project-manager]
  • [seti-syntax]
  • [seti-ui]

npm packages

Enlaces - Bibliografía

Apendices

Actualización de GIT

$ which git
/usr/local/bin/git
$ git —version
git version 2.1.3
$ brew doctor
...
$ brew update
...
$ brew upgrade git
...
$ brew doctor
...
$ git —version
git version 2.2.1

Comprobar si tenemos instaladas las 'Command Line Tools' de Xcode

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer

Footnotes

  1. Comprueba que el nombre del dispositivo es el mismo que se indica en el comando /Volumes/Untitled. De no ser así cámbialo por el nombre que hayas dado a tu dispositivo.

  2. Homebrew es un gestor de paquetes para Mac OS X al estilo de apt-get para sitemas Linux.

  3. Hombrew-Cask es una “extensión” de Homebrew para poder gestionar (instalar/actualizar/desinstalar) aplicaciones nativas de Mac OS X a traves de la línea de comandos y así poder usar scripts para agilizar estas tareas.

@eloypnd
Copy link
Author

eloypnd commented May 11, 2016

wildcard sub-dominios en local

  • instalar dnsmasq para configurar wildcard en sub-dominios para localhost
$ brew install dnsmasq
   ...
$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
  • editar /usr/local/etc/dnsmasq.conf
address=/local/127.0.0.1
  • iniciar dnsmasq
$ sudo brew services start dnsmasq
  • si necesitamos editar dnsmasq.conf tendremos que reiniciar dnsmasq:
$ sudo launchctl stop homebrew.mxcl.dnsmasq
$ sudo launchctl start homebrew.mxcl.dnsmasq
  • para que OS X resuelva las peticiones de *.local a localhost tenemos que añadir un resolver:
$ sudo mkdir /etc/resolver
$ sudo touch /etc/resolver/local
  • editar /etc/resolver/local
nameserver 127.0.0.1
  • para que el nuevo resolver funcione tenemos que reiniciar el ordenador

REFERENCIAS

@eloypnd
Copy link
Author

eloypnd commented May 17, 2016

renee | work computer installed packages

brew

dnsmasq 2.75
fleetctl 0.11.7
git 2.8.1 2.8.2_1
git-flow 0.4.1
go 1.6.2
httpie 0.9.3
nginx 1.10.0 1.8.1
nginx-full 1.10.0 1.8.1
node 5.11.0 6.1.0
openssl 1.0.2g 1.0.2h
pcre 8.38
subs-filter-nginx-module 0.6.4
unrar 5.3.11
watch 3.3.10

brew cask

1password 6.2.1
atom 1.7.3
avocode 2.5.3
dropbox latest
firefox 46.0.1
franz 0.9.10
google-chrome latest
gpgtools 2015.09
heroku-toolbelt (!)
komanda latest
launchrocket 0.7
licecap 1.25
nylas-n1 0.4.33-e8f137e
opera 37.0.2178.32
robomongo 0.9.0-rc8,c113244
skyfonts 5.0.0.0
skype latest
slack 2.0.2
sourcetree 2.2.4
spectacle 1.0.6
spotify latest
sublime-text 2.0.2
transmission 2.92
virtualbox 5.0.20-106931
vlc 2.2.3

npm glocal packages

/usr/local/lib
├── babel-cli@6.5.1
├── bower@1.7.7
├── browserify@12.0.1
├── bunyan@1.7.0
├── eslint@2.2.0
├── eslint-plugin-react@4.2.3
├── generator-wikismith@0.2.2
├── grunt-cli@0.1.13
├── gulp@3.9.1
├── json-server@0.8.8
├── keybase@0.8.25
├── keybase-installer@1.0.3
├── mocha@2.3.4
├── nodemon@1.9.0
├── npm@3.8.6
├── optiopay-cli@0.0.1 -> /Users/eloypineda/workspace/code/op-sandbox/node-cli
├── redux-cli@1.5.1
├── surge@0.17.7
├── watchify@3.6.1
├── webpack@1.12.14
└── yo@1.5.0

atom packages

�[36mBuilt-in Atom Packages�[39m (89)
├── about@1.4.2
├── archive-view@0.61.1
├── atom-dark-syntax@0.27.0
├── atom-dark-ui@0.51.0
├── atom-light-syntax@0.28.0
├── atom-light-ui@0.43.0
├── autocomplete-atom-api@0.10.0
├── autocomplete-css@0.11.0
├── autocomplete-html@0.7.2
├── autocomplete-plus@2.29.1
├── autocomplete-snippets@1.10.0
├── autoflow@0.27.0
├── autosave@0.23.1
├── background-tips@0.26.0
├── base16-tomorrow-dark-theme@1.1.0
├── base16-tomorrow-light-theme@1.1.1
├── bookmarks@0.38.2
├── bracket-matcher@0.81.0
├── command-palette@0.38.0
├── deprecation-cop@0.54.1
├── dev-live-reload@0.47.0
├── encoding-selector@0.21.0
├── exception-reporting@0.37.0
├── find-and-replace@0.199.0
├── fuzzy-finder@1.0.5
├── git-diff@1.0.1
├── go-to-line@0.30.0
├── grammar-selector@0.48.1
├── image-view@0.57.0
├── incompatible-packages@0.25.1
├── keybinding-resolver@0.35.0
├── language-c@0.51.1
├── language-clojure@0.20.0
├── language-coffee-script@0.46.1
├── language-csharp@0.12.0
├── language-css@0.36.0
├── language-gfm@0.85.0
├── language-git@0.12.1
├── language-go@0.42.0
├── language-html@0.44.1
├── language-hyperlink@0.16.0
├── language-java@0.17.0
├── language-javascript@0.110.0
├── language-json@0.17.6
├── language-less@0.29.0
├── language-make@0.21.0
├── language-mustache@0.13.0
├── language-objective-c@0.15.1
├── language-perl@0.32.0
├── language-php@0.37.0
├── language-property-list@0.8.0
├── language-python@0.43.0
├── language-ruby@0.68.3
├── language-ruby-on-rails@0.25.0
├── language-sass@0.46.0
├── language-shellscript@0.21.0
├── language-source@0.9.0
├── language-sql@0.20.0
├── language-text@0.7.1
├── language-todo@0.27.0
├── language-toml@0.18.0
├── language-xml@0.34.4
├── language-yaml@0.25.1
├── line-ending-selector@0.3.1
├── link@0.31.1
├── markdown-preview@0.158.0
├── metrics@0.53.1
├── notifications@0.63.1
├── one-dark-syntax@1.2.0
├── one-dark-ui@1.2.0
├── one-light-syntax@1.2.0
├── one-light-ui@1.2.0
├── open-on-github@1.0.1
├── package-generator@1.0.0
├── settings-view@0.235.1
├── snippets@1.0.1
├── solarized-dark-syntax@1.0.0
├── solarized-light-syntax@1.0.0
├── spell-check@0.67.0
├── status-bar@1.1.2
├── styleguide@0.45.2
├── symbols-view@0.112.0
├── tabs@0.92.0
├── timecop@0.33.1
├── tree-view@0.205.0
├── update-package-dependencies@0.10.0
├── welcome@0.34.0
├── whitespace@0.32.2
└── wrap-guide@0.38.1

�[36mCommunity Packages (16)�[39m /Users/eloypineda/.atom/packages
├── atom-beautify@0.29.7
├── base16-syntax@1.7.0
├── docblockr@0.7.3
├── editorconfig@1.4.1
├── file-icons@1.7.11
├── git-projects@1.17.0
├── linter@1.11.4
├── linter-eslint@7.2.2
├── linter-jsonlint@1.2.5
├── merge-conflicts@1.4.2
├── nucleus-dark-ui@0.7.21
├── project-manager@2.9.7
├── react@0.15.0
├── seti-syntax@1.0.1
├── seti-ui@1.1.2
└── unity-ui@2.1.4

└── (empty)

@eloypnd
Copy link
Author

eloypnd commented Apr 6, 2018

$ brew install adr-tools dnsmasq git httpie node openssl python3 sqlite tig unrar watch yarn
...

$ brew cask install 1password atom brave calibre docker dropbox firefox google-chrome gpg-suite keybase licecap macdown nvalt opera sketch skyfonts skype slack sourcetree spectacle spotify station transmission tunnelblick virtualbox visual-studio-code vlc
...

$ brew tap caskroom/fonts
...

$ brew cask install font-fira-code font-hack

@eloypnd
Copy link
Author

eloypnd commented Dec 3, 2019

Downgrade Node.js version with homebrew:

  • brew install node@12
  • brew unlink node
  • brew link --force --overwrite node@12

@eloypnd
Copy link
Author

eloypnd commented Dec 3, 2019

Visual Studio Code

~/Library/Application Support/Code/User/settings.json

{
    "editor.fontFamily": "Fira Code",
    "editor.fontLigatures": true,
    // "editor.fontWeight": "300",
    // "editor.minimap.enabled": true,
    // "editor.renderWhitespace": "boundary",
    "editor.tabSize": 2,
    // "files.autoSave": "on",
    "workbench.colorTheme": "Base16 Dark Oceanic Next",
    // extensions
    "gitProjectManager.baseProjectsFolders": [
        "~/workspace/code"
    ],
    "editor.multiCursorModifier": "alt",
    "telemetry.enableTelemetry": false,
    "telemetry.enableCrashReporter": false,
    "editor.formatOnSave": true,
    "editor.minimap.enabled": false,
    "[jsonc]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[json]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "editor.renderWhitespace": "selection",
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "workbench.startupEditor": "newUntitledFile"
}

@eloypnd
Copy link
Author

eloypnd commented Jan 21, 2020

Backup

Copy home folder

rsync -av --progress . /Volumes/path/to/copy/folder --exclude='.*' --exclude='Applications' --exclude='Library' --exclude='Music' --exclude='node_modules'

@eloypnd
Copy link
Author

eloypnd commented Mar 5, 2020

Keep your application settings in sync (OS X/Linux) https://github.com/lra/mackup

@eloypnd
Copy link
Author

eloypnd commented Apr 11, 2020

Homebrew multi user setup

#!/bin/bash

# Create a new group, brew
sudo dseditgroup -o create brew

# Change owner to brew group on brew assets
sudo chgrp -R brew $(brew --prefix)/*

# Change permissions to brew group
sudo chmod -R g+w $(brew --prefix)/*

# Add a user to the brew group
sudo dseditgroup -o edit -a userOne -t user brew

# Add another user to the brew group
sudo dseditgroup -o edit -a userTwo -t user brew

# Validate links, etc.
brew doctor

# Make any corrections from the `brew doctor` warnings, such as relinking.

# Run brew doctor to validate fixes
brew doctor

# Make sure it's working without error, with an update
brew update

dseditgroup

Issue with OhMyZsh:

# leave zsh group as it was before
sudo chgrp -R wheel /usr/local/share/zsh
sudo chgrp -R wheel /usr/local/share/zsh/*

@eloypnd
Copy link
Author

eloypnd commented Nov 30, 2021

Spectacle is no longer maintained, replace with Rectangle app

From https://gist.github.com/eloypnd/b840ec8ce12eb5f8fd67#gistcomment-2403465:

$ brew cask install 1password atom brave calibre docker dropbox firefox google-chrome gpg-suite keybase licecap macdown nvalt opera rectangle sketch skyfonts skype slack sourcetree spotify station transmission tunnelblick virtualbox visual-studio-code vlc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment