For the last few months I’ve been really digging into my local development environment setup. Specifically I’ve been using Vagrant and Virtual Box with the Drupal-VM. Here’s some instructions I put together and my custom configs for Mac & Windows . I usually start my day by opening my terminal, doing a
cd into the virtual machine directory and then doing
vagrant up. I also realized recently that I could be using my VM as a mounted disk through Transmit. Sounds like an opportunity for automation…
Well, first thing, if we want to automatically start up the VM, when the system boots, we need to get rid of the password prompt that vagrant gives after doing a $
vagrant up. Doing a bit of googling led me to this info:
Run the command
sudo visudo from a termninal, type your password, and now you’re editing the sudoer file. You’ll want to paste these lines below (depending on whether you are running Vagrant on OS X or Linux.
As of version 1.7.3, the sudoers file in OS X should have these entries:
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports %admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
so, let’s bang open our terminal and add those lines.
At this point we can
cd into the directory where our VagrantFile lives and then do a $
vagrant up. We shouldn’t have to enter our password. Yay!
vagrant upat startup
Ok, next step is to actually get run the $
vagrant up command when the OS boots up. This is a task for the launchd.plist so just to get a refresher on what we can do there, open up terminal and enter
man launchd.plist or visit the Apple Developer command reference. Per the instructions, and the example at the end, we need to create a plist file. Something like this should work:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/opt/php56/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/DevDesktop/drush:/Applications/DevDesktop/drush</string> </dict> <key>Label</key> <string>com.wintercreative.vagrantup</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/vagrant</string> <string>up</string> </array> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/com.wintercreative.vagrantup.err</string> <key>StandardOutPath</key> <string>/tmp/com.wintercreative.vagrantup.out</string> <key>WorkingDirectory</key> <string>/Users/justinwinter/Sites/drupal-vm</string> </dict> </plist>
I ended up using Sublime Text 3 to get this started and then opened it up in XCode because I like the plist editor there better.
Name this file
com.wintercreative.vagrantup.plist and drop it in the
~/Library/LaunchAgents/ directory. Then you’ll need to change the ownership and permissions of that file to the user you’re logging in as.
$sudo chown justinwinter:staff ~/Library/LaunchAgents/com.wintercreative.vagrantup.plist $sudo chmod 644 ~/Library/LaunchAgents/com.wintercreative.vagrantup.plist
Next you’ll need to run launchctl to add the launch script to be loaded.
$sudo launchctl load -w ~/Library/LaunchAgents/com.wintercreative.vagrantup.plist
A few gotchas I ran into:
/Library/LaunchDaemonsfolder. This turned out to be a bad idea for a few reasons. Without getting into too much detail, this blog post, The Difference between launchdaemons vs launchagents, is really incredible as far as breaking down the difference between the two. Bottom line is that it’s better to use
~/Library/LaunchAgentsfor this task.
/usr/local/bin/vagrantand I had that path wrong to start. The error comes up as 78 if you do a $
sudo launchctl list.
brew cask install launchcontrol. http://www.soma-zone.com/LaunchControl/ - This totally helped me push past the last roadblock. Ok, let’s test it out one final time. From within your VM folder, run $
vagrant haltto make sure the VM isn’t running, and then restart.
First, you have to download and install the TransmitDisk Transmit Disk allows you to mount any of your Favorites in the Finder itself, even if Transmit’s not running. These volumes are real: drag files to your SFTP server, save a small graphic to your Amazon S3 bucket directly from Photoshop, or roll your own backup volume.
Next I just followed these instructions
tell application "Transmit" set myFave to item 1 of (favorites whose name is "My Favorite") tell current tab of (make new document at end) connect to myFave with mount close end tell end tell
I want this to run after vagrant is finished and not right at login because the VM hasn’t finished provisioning yet and therefore can’t be mounted. Task for another time…
On windows I found you can also map an SFTP connection to a network drive using this software - https://www.eldos.com/sftp-net-drive/download-release.php
There may be other/better options out there but this one was pointed to via the super user thread here: http://superuser.com/questions/291786/map-remote-drive-in-windows-over-ssh