You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			148 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			148 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
# gvm
 | 
						|
by Josh Bussdieker (jbuss, jaja, jbussdieker)
 | 
						|
 | 
						|
GVM provides an interface to manage Go versions.
 | 
						|
 | 
						|
Features
 | 
						|
========
 | 
						|
* Install/Uninstall Go versions with `gvm install [tag]` where tag is "60.3", "go1", "weekly.2011-11-08", or "tip"
 | 
						|
* List added/removed files in GOROOT with `gvm diff`
 | 
						|
* Manage GOPATHs with `gvm pkgset [create/use/delete] [name]`. Use `--local` as `name` to manage repository under local path (`/path/to/repo/.gvm_local`).
 | 
						|
* List latest release tags with `gvm listall`. Use `--all` to list weekly as well.
 | 
						|
* Cache a clean copy of the latest Go source for multiple version installs.
 | 
						|
* Link project directories into GOPATH
 | 
						|
 | 
						|
Background
 | 
						|
==========
 | 
						|
When we started developing in Go mismatched dependencies and API changes plauged our build process and made it extremely difficult to merge with other peoples changes.
 | 
						|
 | 
						|
After nuking my entire GOROOT several times and rebuilding I decided to come up with a tool to oversee the process. It eventually evolved into what gvm is today.
 | 
						|
 | 
						|
Installing
 | 
						|
==========
 | 
						|
 | 
						|
To install:
 | 
						|
 | 
						|
    bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
 | 
						|
 | 
						|
Or if you are using zsh just change `bash` with `zsh`
 | 
						|
 | 
						|
Installing Go
 | 
						|
=============
 | 
						|
    gvm install go1
 | 
						|
    gvm use go1 [--default]
 | 
						|
Once this is done Go will be in the path and ready to use. $GOROOT and $GOPATH are set automatically.
 | 
						|
 | 
						|
Additional options can be specified when installing Go:
 | 
						|
 | 
						|
    Usage: gvm install [version] [options]
 | 
						|
        -s,  --source=SOURCE      Install Go from specified source.
 | 
						|
        -n,  --name=NAME          Override the default name for this version.
 | 
						|
        -pb, --with-protobuf      Install Go protocol buffers.
 | 
						|
        -b,  --with-build-tools   Install package build tools.
 | 
						|
        -B,  --binary             Only install from binary.
 | 
						|
        -h,  --help               Display this message.
 | 
						|
 | 
						|
List Go Versions
 | 
						|
================
 | 
						|
To list all installed Go versions (The current version is prefixed with "=>"):
 | 
						|
 | 
						|
    gvm list
 | 
						|
 | 
						|
Uninstalling
 | 
						|
============
 | 
						|
To completely remove gvm and all installed Go versions and packages:
 | 
						|
 | 
						|
    gvm implode
 | 
						|
 | 
						|
If that doesn't work see the troubleshooting steps at the bottom of this page.
 | 
						|
 | 
						|
Mac OS X Requirements
 | 
						|
====================
 | 
						|
 * Install Mercurial from http://mercurial.berkwood.com/
 | 
						|
 * Install Xcode Command Line Tools from the App Store.
 | 
						|
 | 
						|
Linux Requirements
 | 
						|
==================
 | 
						|
 | 
						|
Debian/Ubuntu
 | 
						|
==================
 | 
						|
    sudo apt-get install curl
 | 
						|
    sudo apt-get install git
 | 
						|
    sudo apt-get install mercurial
 | 
						|
    sudo apt-get install make
 | 
						|
    sudo apt-get install binutils
 | 
						|
    sudo apt-get install bison
 | 
						|
    sudo apt-get install gcc
 | 
						|
    sudo apt-get install build-essential
 | 
						|
 | 
						|
Redhat/Centos
 | 
						|
==================
 | 
						|
 | 
						|
    sudo yum install curl
 | 
						|
    sudo yum install git
 | 
						|
    sudo yum install make
 | 
						|
    sudo yum install gcc
 | 
						|
    sudo yum install bison-devel
 | 
						|
    sudo yum install glibc-devel
 | 
						|
 | 
						|
 * Install Mercurial from http://pkgs.repoforge.org/mercurial/
 | 
						|
 | 
						|
FreeBSD Requirements
 | 
						|
====================
 | 
						|
 | 
						|
    sudo pkg_add -r bash
 | 
						|
    sudo pkg_add -r git
 | 
						|
    sudo pkg_add -r mercurial
 | 
						|
 | 
						|
Vendoring Native Code and Dependencies
 | 
						|
==================================================
 | 
						|
GVM supports vendoring package set-specific native code and related
 | 
						|
dependencies, which is useful if you need to qualify a new configuration
 | 
						|
or version of one of these dependencies against a last-known-good version
 | 
						|
in an isolated manner.  Such behavior is critical to maintaining good release
 | 
						|
engineering and production environment hygiene.
 | 
						|
 | 
						|
As a convenience matter, GVM will furnish the following environment variables to
 | 
						|
aid in this manner if you want to decouple your work from what the operating
 | 
						|
system provides:
 | 
						|
 | 
						|
1. ``${GVM_OVERLAY_PREFIX}`` functions in a manner akin to a root directory
 | 
						|
  hierarchy suitable for auto{conf,make,tools} where it could be passed in
 | 
						|
  to ``./configure --prefix=${GVM_OVERLAY_PREFIX}`` and not conflict with any
 | 
						|
  existing operating system artifacts and hermetically be used by your
 | 
						|
  workspace.  This is suitable to use with ``C{PP,XX}FLAGS and LDFLAGS``, but you will have
 | 
						|
  to manage these yourself, since each tool that uses them is different.
 | 
						|
 | 
						|
2. ``${PATH}`` includes ``${GVM_OVERLAY_PREFIX}/bin`` so that any tools you
 | 
						|
  manually install will reside there, available for you.
 | 
						|
 | 
						|
3. ``${LD_LIBRARY_PATH}`` includes ``${GVM_OVERLAY_PREFIX}/lib`` so that any
 | 
						|
  runtime library searching can be fulfilled there on FreeBSD and Linux.
 | 
						|
 | 
						|
4. ``${DYLD_LIBRARY_PATH}`` includes ``${GVM_OVERLAY_PREFIX}/lib`` so that any
 | 
						|
  runtime library searching can be fulfilled there on Mac OS X.
 | 
						|
 | 
						|
5. ``${PKG_CONFIG_PATH}`` includes ``${GVM_OVERLAY_PREFIX}/lib/pkgconfig`` so
 | 
						|
  that ``pkg-config`` can automatically resolve any vendored dependencies.
 | 
						|
 | 
						|
Recipe for success:
 | 
						|
 | 
						|
    gvm use go1.1
 | 
						|
    gvm pkgset use current-known-good
 | 
						|
    # Let's assume that this includes some C headers and native libraries, which
 | 
						|
    # Go's CGO facility wraps for us.  Let's assume that these native
 | 
						|
    # dependencies are at version V.
 | 
						|
    gvm pkgset create trial-next-version
 | 
						|
    # Let's assume that V+1 has come along and you want to safely trial it in
 | 
						|
    # your workspace.
 | 
						|
    gvm pkgset use trial-next-version
 | 
						|
    # Do your work here replicating current-known-good from above, but install
 | 
						|
    # V+1 into ${GVM_OVERLAY_PREFIX}.
 | 
						|
 | 
						|
See examples/native for a working example.
 | 
						|
 | 
						|
Troubleshooting
 | 
						|
===============
 | 
						|
Sometimes especially during upgrades the state of gvm's files can get mixed up. This is mostly true for upgrade from older version than 0.0.8. Changes are slowing down and a LTR is imminent. But for now `rm -rf ~/.gvm` will always remove gvm. Stay tuned!
 |