├── .gitattributes ├── .gitignore ├── puppet ├── production │ ├── modules │ │ ├── yarn │ │ │ ├── files │ │ │ │ └── .npmrc │ │ │ └── manifests │ │ │ │ └── init.pp │ │ ├── nodejs │ │ │ └── manifests │ │ │ │ └── init.pp │ │ ├── unison │ │ │ └── manifests │ │ │ │ └── init.pp │ │ ├── github │ │ │ └── manifests │ │ │ │ ├── init.pp │ │ │ │ └── known_hosts.pp │ │ ├── motd │ │ │ ├── files │ │ │ │ └── 00-header │ │ │ └── manifests │ │ │ │ └── init.pp │ │ ├── bash │ │ │ ├── manifests │ │ │ │ └── init.pp │ │ │ └── files │ │ │ │ ├── .bash_aliases │ │ │ │ └── .screenrc │ │ └── system │ │ │ └── manifests │ │ │ └── init.pp │ └── manifests │ │ └── default.pp └── scripts │ └── setup.sh ├── Vagrantfile ├── README.md └── LICENSE.md /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | sources 3 | *.cmd 4 | *.log 5 | -------------------------------------------------------------------------------- /puppet/production/modules/yarn/files/.npmrc: -------------------------------------------------------------------------------- 1 | cache=/home/vagrant/.cache/yarn/v6 2 | -------------------------------------------------------------------------------- /puppet/production/manifests/default.pp: -------------------------------------------------------------------------------- 1 | stage { "bootstrap": 2 | before => Stage["main"] 3 | } 4 | 5 | class { "system": 6 | stage => bootstrap 7 | } 8 | 9 | include bash 10 | include github 11 | include motd 12 | include nodejs 13 | include system 14 | include unison 15 | include yarn 16 | -------------------------------------------------------------------------------- /puppet/production/modules/nodejs/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class nodejs { 2 | package { "nodejs": 3 | ensure => latest 4 | } 5 | 6 | exec { "install n": 7 | command => "/usr/bin/npm install -g n", 8 | require => Package["nodejs"] 9 | } 10 | 11 | exec { "switch node version": 12 | command => "/usr/bin/n i 20.8.1", 13 | require => Exec["install n"] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /puppet/production/modules/unison/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class unison { 2 | exec { "download unison": 3 | command => "/usr/bin/wget --content-disposition https://archive.archlinux.org/packages/u/unison/unison-2.48.15-3-x86_64.pkg.tar.xz --directory-prefix=/tmp" 4 | } 5 | 6 | exec { "uncompress unison": 7 | command => "/bin/tar xf /tmp/unison-2.48.15-3-x86_64.pkg.tar.xz -C /", 8 | require => Exec["download unison"] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /puppet/production/modules/github/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class github { 2 | require github::known_hosts 3 | 4 | package { "git": 5 | ensure => latest 6 | } 7 | 8 | vcsrepo { "/var/sources": 9 | ensure => present, 10 | provider => git, 11 | revision => "trunk", 12 | source => "https://github.com/Automattic/wp-calypso.git", 13 | owner => "vagrant", 14 | group => "vagrant", 15 | require => Package["git"] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /puppet/production/modules/yarn/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class yarn { 2 | package { "yarn": 3 | ensure => latest 4 | } 5 | 6 | file { "/home/vagrant/.npmrc": 7 | ensure => present, 8 | source => "puppet:///modules/yarn/.npmrc", 9 | mode => "0644", 10 | owner => "vagrant", 11 | group => "vagrant" 12 | } 13 | 14 | file_line { "increase Node memory limit": 15 | ensure => present, 16 | line => "NODE_OPTIONS=--max-old-space-size=11000", 17 | path => "/etc/environment" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /puppet/production/modules/motd/files/00-header: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Displays the following text banner generated with 'figlet -c -w 40 "calypso"'. The output of this command was first 4 | # pasted below and then any backquote (anywhere) and backslash (located at the end of a line) was escaped with slashes. 5 | echo " _ 6 | ___ __ _| |_ _ _ __ ___ ___ 7 | / __/ _\` | | | | | '_ \/ __|/ _ \\ 8 | | (_| (_| | | |_| | |_) \__ \ (_) | 9 | \___\__,_|_|\__, | .__/|___/\___/ 10 | |___/|_| 11 | 12 | Welcome to WordPress.com goodness" 13 | -------------------------------------------------------------------------------- /puppet/production/modules/bash/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class bash { 2 | file { "/root/.bash_aliases": 3 | ensure => present, 4 | source => "puppet:///modules/bash/.bash_aliases", 5 | mode => "0644", 6 | owner => "root", 7 | group => "root" 8 | } 9 | 10 | file { "/home/vagrant/.bash_aliases": 11 | ensure => present, 12 | source => "puppet:///modules/bash/.bash_aliases", 13 | mode => "0644", 14 | owner => "vagrant", 15 | group => "vagrant" 16 | } 17 | 18 | file { "/home/vagrant/.screenrc": 19 | ensure => present, 20 | source => "puppet:///modules/bash/.screenrc", 21 | mode => "0644", 22 | owner => "vagrant", 23 | group => "vagrant" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /puppet/production/modules/bash/files/.bash_aliases: -------------------------------------------------------------------------------- 1 | # Default aliases 2 | alias c="clear" 3 | alias l="ls --almost-all --group-directories-first -l --time-style=long-iso" 4 | 5 | # Calypso aliases 6 | alias cds="cd /var/sources" 7 | alias yc="yarn clean" 8 | alias ydc="yarn run distclean" 9 | alias ys="yarn start" 10 | alias yl="yarn lint" 11 | alias ylb="yarn run eslint-branch" 12 | alias yt="yarn test" 13 | 14 | # Git aliases 15 | alias gb="git branch" 16 | alias gc="git checkout" 17 | alias gcp="git cherry-pick" 18 | alias gd="git diff" 19 | alias gf="git fetch" 20 | alias gl="git log --abbrev-commit --pretty=format:'%Cred%h%Creset%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset'" 21 | alias gp="git pull -p" 22 | alias gr="git restore" 23 | alias gs="git status" 24 | 25 | # Gnu Screen aliases 26 | alias s="screen -d -R -U" 27 | -------------------------------------------------------------------------------- /puppet/production/modules/github/manifests/known_hosts.pp: -------------------------------------------------------------------------------- 1 | class github::known_hosts { 2 | # Makes sure the system file that contains SSH keys of known hosts is readable by all users. This basically fixes the 3 | # Puppet bug mentioned in http://bit.ly/1BNtqDv. 4 | file { "/etc/ssh/ssh_known_hosts": 5 | ensure => file, 6 | mode => "0644" 7 | } 8 | 9 | # Adds GitHub host signature in this system file to prevent manual confirmation during repository cloning. The key 10 | # below is based on official fingerprints and was taken from http://bit.ly/1spcKuZ. 11 | sshkey { "github.com": 12 | ensure => present, 13 | key => "AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=", 14 | type => "ssh-rsa" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /puppet/production/modules/motd/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class motd { 2 | service { "ssh": 3 | ensure => running 4 | } 5 | 6 | file_line { "disable last login message": 7 | path => "/etc/ssh/sshd_config", 8 | line => "PrintLastLog no", 9 | match => "^PrintLastLog (no|yes)$", 10 | notify => Service["ssh"] 11 | } 12 | 13 | file { "/etc/update-motd.d/00-header": 14 | ensure => present, 15 | source => "puppet:///modules/motd/00-header", 16 | mode => "0755", 17 | owner => "root", 18 | group => "root", 19 | notify => Exec["generate motd"] 20 | } 21 | 22 | file { "/etc/update-motd.d/10-help-text": 23 | ensure => absent, 24 | notify => Exec["generate motd"] 25 | } 26 | 27 | # Removes /etc/update-motd.d/50-landscape-sysinfo 28 | package { "landscape-common": 29 | ensure => purged, 30 | notify => Exec["generate motd"] 31 | } 32 | 33 | file { "/etc/update-motd.d/51-cloudguest": 34 | ensure => absent, 35 | notify => Exec["generate motd"] 36 | } 37 | 38 | file_line { "comment blank line": 39 | path => "/etc/update-motd.d/97-overlayroot", 40 | line => "#echo", 41 | match => "^#?echo$", 42 | notify => Exec["generate motd"] 43 | } 44 | 45 | file { "/etc/update-motd.d/98-cloudguest": 46 | ensure => absent, 47 | notify => Exec["generate motd"] 48 | } 49 | 50 | exec { "generate motd": 51 | command => "/bin/run-parts /etc/update-motd.d > /var/run/motd.dynamic" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /puppet/production/modules/system/manifests/init.pp: -------------------------------------------------------------------------------- 1 | class system { 2 | include apt 3 | 4 | apt::source { "nodejs": 5 | key => { 6 | id => "9FD3B784BC1C6FC31A8A0A1C1655A0AB68576280", 7 | server => "hkp://keyserver.ubuntu.com:80" 8 | }, 9 | location => "https://deb.nodesource.com/node_20.x" 10 | } 11 | 12 | apt::source { "yarn": 13 | key => { 14 | id => "72ECF46A56B4AD39C907BBB71646B01B86E50310", 15 | source => "https://dl.yarnpkg.com/debian/pubkey.gpg" 16 | }, 17 | location => "https://dl.yarnpkg.com/debian/", 18 | release => "stable", 19 | repos => "main" 20 | } 21 | 22 | exec { "update system": 23 | command => "/usr/bin/apt-get update", 24 | require => [Apt::Source["nodejs"], Apt::Source["yarn"]] 25 | } 26 | 27 | exec { "upgrade system": 28 | command => "/usr/bin/apt-get upgrade --assume-yes", 29 | path => ["/bin/", "/sbin/", "/usr/bin/", "/usr/sbin/"], 30 | require => Exec["update system"], 31 | timeout => 0 32 | } 33 | 34 | file_line { "increase file watcher system limit": 35 | ensure => present, 36 | line => "fs.inotify.max_user_watches=30000", 37 | path => "/etc/sysctl.conf" 38 | } 39 | 40 | exec { "make new file watcher system limit effective": 41 | command => "/sbin/sysctl -p", 42 | require => File_line["increase file watcher system limit"] 43 | } 44 | 45 | file_line { "disable Playwright download": 46 | ensure => present, 47 | line => "PLAYWRIGHT_SKIP_DOWNLOAD=true", 48 | path => "/etc/environment" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | VAGRANTFILE_API_VERSION = "2" 5 | 6 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 7 | config.vm.define "wp-calypso-1.11" do |node| 8 | node.vm.box = "bento/ubuntu-23.04" 9 | node.vm.host_name = "calypso.automattic.com" 10 | 11 | node.vm.network :forwarded_port, guest: 3000, host: 3000 12 | node.vm.network :forwarded_port, guest: 9898, host: 9898 13 | end 14 | 15 | # Disables default synced folders 16 | config.vm.synced_folder ".", "/vagrant", disabled: true 17 | 18 | config.vm.provider "virtualbox" do |vb| 19 | vb.name = "Calypso Bootstrap 1.11" 20 | vb.cpus = 4 21 | vb.memory = 12000 22 | 23 | vb.customize [ 24 | "modifyvm", :id, 25 | "--cableconnected1", "on", 26 | "--clipboard", "bidirectional", 27 | "--description", "Virtual machine to develop with WordPress.com Calypso.", 28 | "--graphicscontroller", "vmsvga", 29 | "--natdnshostresolver1", "on", 30 | "--natdnsproxy1", "on", 31 | "--vram", "16", 32 | "--vrde", "off", 33 | ] 34 | end 35 | 36 | # Installs the latest versions of Puppet third-party modules 37 | config.vm.provision "shell", path: "puppet/scripts/setup.sh" 38 | 39 | config.vm.provision "puppet" do |puppet| 40 | puppet.environment = "production" 41 | puppet.environment_path = "puppet" 42 | end 43 | 44 | config.vm.post_up_message = " _ 45 | ___ __ _| |_ _ _ __ ___ ___ 46 | / __/ _` | | | | | '_ \\/ __|/ _ \\ 47 | | (_| (_| | | |_| | |_) \\__ \\ (_) | 48 | \\___\\__,_|_|\\__, | .__/|___/\\___/ 49 | |___/|_| 50 | 51 | Calypso is ready to go! 52 | " 53 | end 54 | -------------------------------------------------------------------------------- /puppet/scripts/setup.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | ## Constants ########################################################################################################## 4 | 5 | TRUE=0 6 | FALSE=1 7 | 8 | 9 | ## Shell ############################################################################################################## 10 | 11 | function error() { 12 | log error "$1" 13 | } 14 | 15 | function info() { 16 | log info "$1" 17 | } 18 | 19 | function log() { 20 | if [[ "$1" == "error" ]]; then 21 | echo -e "! $2" 22 | else 23 | echo -e "> $2" 24 | fi 25 | } 26 | 27 | function is_module_installed() { 28 | module=$1 29 | module_list=$2 30 | 31 | local results=$(echo "$module_list" | grep $module); 32 | 33 | if [[ -z "$results" ]]; then 34 | return $FALSE 35 | else 36 | return $TRUE 37 | fi 38 | } 39 | 40 | 41 | 42 | ## Shell ############################################################################################################## 43 | 44 | info "Updating packages list" 45 | 46 | apt-get update 47 | 48 | info "Installing Puppet" 49 | 50 | apt-get install --assume-yes --quiet puppet 51 | 52 | if [[ $? -eq $TRUE ]]; then 53 | info "Puppet installed successfully" 54 | 55 | module_list=$(puppet module list) 56 | 57 | for module in puppetlabs-apt puppetlabs-sshkeys_core puppetlabs-vcsrepo 58 | do 59 | is_module_installed $module "$module_list" 60 | 61 | if [[ $? -eq $FALSE ]]; then 62 | info "Installing Puppet module '$module'" 63 | 64 | puppet module install $module 65 | 66 | if [[ $? -eq $TRUE ]]; then 67 | info "Puppet module '$module' installed successfully" 68 | else 69 | error "Unable to install Puppet module '$module'" 70 | fi 71 | else 72 | info "Puppet module '$module' already installed" 73 | fi 74 | done 75 | else 76 | error "Unable to install Puppet" 77 | fi 78 | -------------------------------------------------------------------------------- /puppet/production/modules/bash/files/.screenrc: -------------------------------------------------------------------------------- 1 | ####################################################################################################################### 2 | # 3 | # GNU Screen Configuration 4 | # 5 | 6 | 7 | 8 | # Enables UTF8 support 9 | defutf8 on 10 | 11 | # Disables the presentation page 12 | startup_message off 13 | 14 | # Disables flashing of the screen when the shell rings the terminal bell (e.g. when performing autocompletion which 15 | # would return lots of possibilities) 16 | vbell off 17 | 18 | # Configures status bar at the bottom of the screen 19 | hardstatus alwayslastline 20 | hardstatus string "%-w%{= BW} %n %t %{-}%+w" 21 | 22 | # Bumps up the size of the scrollback buffer 23 | defscrollback 20000 24 | 25 | # Defines a shortcut to clear the screen and the scrollback buffer in one shot 26 | bind _ eval "clear" "scrollback 0" "scrollback 20000" 27 | 28 | # Tells screen to use the terminal emulator buffer to enable scrollbars 29 | termcapinfo xterm ti@:te@ 30 | 31 | # Defines CTRL-z as the escape combination instead of CTRL-a which is quite useful to go to the beginning of a line in a 32 | # shell or in vim. The original CTRL-z binding is accessible through 'CTRL-z + a'. 33 | escape ^za 34 | 35 | # Makes sure windows numbering starts at zero to match the keyboard layout 36 | bind c screen 1 37 | bind ^c screen 1 38 | bind 0 select 10 39 | 40 | # Maps some keyboard shortcuts 41 | bindkey -k k9 clear # F9 = clear window 42 | bindkey -k k; detach # F10 = detach screen 43 | bindkey -k F1 prev # F11 = go to previous window 44 | bindkey -k F2 next # F12 = go to next window 45 | 46 | # Forces screen to use a login shell and loads the .profile 47 | shell -${SHELL} 48 | 49 | # Makes sure previous output is not overwritten when using tools like 'less' 50 | altscreen on 51 | 52 | # Launchs the following windows at startup (the last being selected by default) 53 | chdir /var/sources 54 | screen -t tests 3 -bash 55 | 56 | screen -t server 2 -bash 57 | 58 | screen -t sources 1 -bash 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Calypso Bootstrap 3 | ================= 4 | 5 | Calypso Bootstrap is a **portable development environment** for [Calypso](https://github.com/Automattic/wp-calypso/), the powerful administration interface of [WordPress.com](http://wordpress.com). It allows you to install, configure, and start a virtual machine that is ready to run Calypso - with a single command. This sandbox makes it very easy to learn about, test, and hack Calypso without messing with the configuration of your computer. It uses some cool technologies such as [Vagrant](http://www.vagrantup.com/), [Puppet](https://puppetlabs.com/puppet/what-is-puppet), and [VirtualBox](http://virtualbox.org/) under the hood. 6 | 7 | > Check out [Calypso Bootstrap (WSL)](https://github.com/Automattic/wp-calypso-bootstrap-wsl) if you specifically want to run Calypso on Windows, as it has better performance. 8 | 9 | ### Prerequisites 10 | 11 | You need to have the following software already installed: 12 | 13 | * [Vagrant](http://www.vagrantup.com/downloads.html) 14 | * [VirtualBox](https://www.virtualbox.org/wiki/Downloads) 15 | 16 | > Note you should be able to use another virtual machine provider, but currently only VirtualBox is supported. 17 | 18 | Make sure Vagrant is available from your terminal or console with: 19 | 20 | ``` 21 | $ vagrant version 22 | 23 | Installed Version: 1.8.1 24 | Latest Version: 1.8.1 25 | ``` 26 | 27 | ### Installing 28 | 29 | Installing Calypso is very easy - just load a terminal or console and: 30 | 31 | 1. Clone the Calypso Bootstrap repository to your computer 32 | 2. Go to your fresh new Calypso Bootstrap directory 33 | 3. Type `vagrant up` to bring the sandbox to life 34 | 35 | On Linux, it will probably look like this: 36 | 37 | ``` 38 | $ git clone https://github.com/Automattic/wp-calypso-bootstrap.git 39 | $ cd wp-calypso-bootstrap 40 | $ vagrant up 41 | ``` 42 | 43 | On Windows, it's going to be very similar: 44 | 45 | ``` 46 | C:\>git clone https://github.com/Automattic/wp-calypso-bootstrap.git 47 | C:\>cd wp-calypso-bootstrap 48 | C:\wp-calypso-bootstrap>vagrant up 49 | ``` 50 | 51 | Note this installation process **can take quite some time** the first time you perform a `vagrant up` since it will basically: 52 | 53 | 1. Download an image of the current stable version of Ubuntu 54 | 2. Load it into the virtual machine and update it 55 | 3. Install all necessary packages such as Git, Node.js, or Yarn 56 | 4. Download the Calypso repository 57 | 58 | Finally, just add `127.0.0.1 calypso.localhost` to your `hosts` file. 59 | 60 | ### Running 61 | 62 | You should have a virtual machine up and running by now. The next step is simply to connect to this sandbox via SSH with your favorite terminal or console, either by typing `vagrant ssh`, or using the following parameters: 63 | 64 | * Host name: `127.0.0.1` 65 | * Port: `2222` 66 | * User name: `vagrant` 67 | * User password: `vagrant` 68 | 69 | > These parameters should be pretty standard. However, if you encounter any issues connecting to the virtual machine, you can check them with the `vagrant ssh-config` command. 70 | > 71 | > Note your SSH client should be configured to allow [SSH agent forwarding](https://developer.github.com/guides/using-ssh-agent-forwarding/) if you want to be able to use your local SSH keys to connect to GitHub from inside the virtual machine (using agents such as [ssh-agent](http://en.wikipedia.org/wiki/Ssh-agent) or [Pageant](http://en.wikipedia.org/wiki/PuTTY#Components)). 72 | 73 | You should then be presented with something similar to the following: 74 | 75 | ``` 76 | _ 77 | ___ __ _| |_ _ _ __ ___ ___ 78 | / __/ _` | | | | | '_ \/ __|/ _ \ 79 | | (_| (_| | | |_| | |_) \__ \ (_) | 80 | \___\__,_|_|\__, | .__/|___/\___/ 81 | |___/|_| 82 | 83 | Welcome to WordPress.com goodness 84 | 85 | vagrant@calypso:~$ 86 | ``` 87 | 88 | Now simply head to the Calypso directory: 89 | 90 | ``` 91 | vagrant@calypso:~$ cd /var/sources 92 | ``` 93 | 94 | And install dependencies with: 95 | 96 | ``` 97 | vagrant@calypso:/var/sources$ yarn 98 | ``` 99 | 100 | Start the application with: 101 | 102 | ``` 103 | vagrant@calypso:/var/sources$ yarn start 104 | ``` 105 | 106 | This will build Calypso, which can be a lengthy process. Hopefully at some point you'll see: 107 | 108 | ``` 109 | Ready! You can load http://calypso.localhost:3000/ now. Have fun! 110 | ``` 111 | 112 | You should now be able to access Calypso in your browser at http://calypso.localhost:3000! 113 | 114 | ### Hacking 115 | 116 | The Calypso repository is located in `/var/sources` on the virtual machine. **This isn't a shared folder**, i.e. a directory that is shared between the virtual machine (the guest system) and your own computer (the host system). This was done for performance reason as well as to work around a number of limitations (most of them originating from running Windows as host system). 117 | 118 | With Calypso Bootstrap you can either work from the virtual machine itself or from your computer. In the former case, you would edit files in the `/var/sources` folder directly. In the latter, you would have to sync this folder to your computer using a tool such as [rsync](https://en.wikipedia.org/wiki/Rsync) or [unison](http://www.cis.upenn.edu/~bcpierce/unison/) (which is installed by default). From there, you would be able to edit files using your favorite code editor. 119 | 120 | ### Relaxing 121 | 122 | You can shutdown the virtual machine with `vagrant halt` and start it again with `vagrant up`. You can also pause it with `vagrant suspend` and unpause it with `vagrant resume`. 123 | 124 | Good job, you deserve a cup of coffee now! 125 | 126 | ### Troubleshooting 127 | 128 | If you encounter any issues, check Calypso's [readme](https://github.com/Automattic/wp-calypso/blob/trunk/README.md) and [documentation](https://github.com/Automattic/wp-calypso/tree/trunk/docs). If you're still stuck, [we're here to help](https://github.com/Automattic/wp-calypso/blob/trunk/docs/CONTRIBUTING.md#were-here-to-help). 129 | 130 | ### License 131 | 132 | Calypso Bootstrap is licensed under [GNU General Public License v2 (or later)](./LICENSE.md). 133 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The GNU General Public License, Version 2, June 1991 (GPLv2) 2 | ============================================================ 3 | 4 | > Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 | > 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 6 | 7 | Everyone is permitted to copy and distribute verbatim copies of this license 8 | document, but changing it is not allowed. 9 | 10 | 11 | Preamble 12 | -------- 13 | 14 | The licenses for most software are designed to take away your freedom to share 15 | and change it. By contrast, the GNU General Public License is intended to 16 | guarantee your freedom to share and change free software--to make sure the 17 | software is free for all its users. This General Public License applies to most 18 | of the Free Software Foundation's software and to any other program whose 19 | authors commit to using it. (Some other Free Software Foundation software is 20 | covered by the GNU Library General Public License instead.) You can apply it to 21 | your programs, too. 22 | 23 | When we speak of free software, we are referring to freedom, not price. Our 24 | General Public Licenses are designed to make sure that you have the freedom to 25 | distribute copies of free software (and charge for this service if you wish), 26 | that you receive source code or can get it if you want it, that you can change 27 | the software or use pieces of it in new free programs; and that you know you can 28 | do these things. 29 | 30 | To protect your rights, we need to make restrictions that forbid anyone to deny 31 | you these rights or to ask you to surrender the rights. These restrictions 32 | translate to certain responsibilities for you if you distribute copies of the 33 | software, or if you modify it. 34 | 35 | For example, if you distribute copies of such a program, whether gratis or for a 36 | fee, you must give the recipients all the rights that you have. You must make 37 | sure that they, too, receive or can get the source code. And you must show them 38 | these terms so they know their rights. 39 | 40 | We protect your rights with two steps: (1) copyright the software, and (2) offer 41 | you this license which gives you legal permission to copy, distribute and/or 42 | modify the software. 43 | 44 | Also, for each author's protection and ours, we want to make certain that 45 | everyone understands that there is no warranty for this free software. If the 46 | software is modified by someone else and passed on, we want its recipients to 47 | know that what they have is not the original, so that any problems introduced by 48 | others will not reflect on the original authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software patents. We wish 51 | to avoid the danger that redistributors of a free program will individually 52 | obtain patent licenses, in effect making the program proprietary. To prevent 53 | this, we have made it clear that any patent must be licensed for everyone's free 54 | use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and modification 57 | follow. 58 | 59 | 60 | Terms And Conditions For Copying, Distribution And Modification 61 | --------------------------------------------------------------- 62 | 63 | **0.** This License applies to any program or other work which contains a notice 64 | placed by the copyright holder saying it may be distributed under the terms of 65 | this General Public License. The "Program", below, refers to any such program or 66 | work, and a "work based on the Program" means either the Program or any 67 | derivative work under copyright law: that is to say, a work containing the 68 | Program or a portion of it, either verbatim or with modifications and/or 69 | translated into another language. (Hereinafter, translation is included without 70 | limitation in the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not covered by 73 | this License; they are outside its scope. The act of running the Program is not 74 | restricted, and the output from the Program is covered only if its contents 75 | constitute a work based on the Program (independent of having been made by 76 | running the Program). Whether that is true depends on what the Program does. 77 | 78 | **1.** You may copy and distribute verbatim copies of the Program's source code 79 | as you receive it, in any medium, provided that you conspicuously and 80 | appropriately publish on each copy an appropriate copyright notice and 81 | disclaimer of warranty; keep intact all the notices that refer to this License 82 | and to the absence of any warranty; and give any other recipients of the Program 83 | a copy of this License along with the Program. 84 | 85 | You may charge a fee for the physical act of transferring a copy, and you may at 86 | your option offer warranty protection in exchange for a fee. 87 | 88 | **2.** You may modify your copy or copies of the Program or any portion of it, 89 | thus forming a work based on the Program, and copy and distribute such 90 | modifications or work under the terms of Section 1 above, provided that you also 91 | meet all of these conditions: 92 | 93 | * **a)** You must cause the modified files to carry prominent notices stating 94 | that you changed the files and the date of any change. 95 | 96 | * **b)** You must cause any work that you distribute or publish, that in whole 97 | or in part contains or is derived from the Program or any part thereof, to 98 | be licensed as a whole at no charge to all third parties under the terms of 99 | this License. 100 | 101 | * **c)** If the modified program normally reads commands interactively when 102 | run, you must cause it, when started running for such interactive use in the 103 | most ordinary way, to print or display an announcement including an 104 | appropriate copyright notice and a notice that there is no warranty (or 105 | else, saying that you provide a warranty) and that users may redistribute 106 | the program under these conditions, and telling the user how to view a copy 107 | of this License. (Exception: if the Program itself is interactive but does 108 | not normally print such an announcement, your work based on the Program is 109 | not required to print an announcement.) 110 | 111 | These requirements apply to the modified work as a whole. If identifiable 112 | sections of that work are not derived from the Program, and can be reasonably 113 | considered independent and separate works in themselves, then this License, and 114 | its terms, do not apply to those sections when you distribute them as separate 115 | works. But when you distribute the same sections as part of a whole which is a 116 | work based on the Program, the distribution of the whole must be on the terms of 117 | this License, whose permissions for other licensees extend to the entire whole, 118 | and thus to each and every part regardless of who wrote it. 119 | 120 | Thus, it is not the intent of this section to claim rights or contest your 121 | rights to work written entirely by you; rather, the intent is to exercise the 122 | right to control the distribution of derivative or collective works based on the 123 | Program. 124 | 125 | In addition, mere aggregation of another work not based on the Program with the 126 | Program (or with a work based on the Program) on a volume of a storage or 127 | distribution medium does not bring the other work under the scope of this 128 | License. 129 | 130 | **3.** You may copy and distribute the Program (or a work based on it, under 131 | Section 2) in object code or executable form under the terms of Sections 1 and 2 132 | above provided that you also do one of the following: 133 | 134 | * **a)** Accompany it with the complete corresponding machine-readable source 135 | code, which must be distributed under the terms of Sections 1 and 2 above on 136 | a medium customarily used for software interchange; or, 137 | 138 | * **b)** Accompany it with a written offer, valid for at least three years, to 139 | give any third party, for a charge no more than your cost of physically 140 | performing source distribution, a complete machine-readable copy of the 141 | corresponding source code, to be distributed under the terms of Sections 1 142 | and 2 above on a medium customarily used for software interchange; or, 143 | 144 | * **c)** Accompany it with the information you received as to the offer to 145 | distribute corresponding source code. (This alternative is allowed only for 146 | noncommercial distribution and only if you received the program in object 147 | code or executable form with such an offer, in accord with Subsection b 148 | above.) 149 | 150 | The source code for a work means the preferred form of the work for making 151 | modifications to it. For an executable work, complete source code means all the 152 | source code for all modules it contains, plus any associated interface 153 | definition files, plus the scripts used to control compilation and installation 154 | of the executable. However, as a special exception, the source code distributed 155 | need not include anything that is normally distributed (in either source or 156 | binary form) with the major components (compiler, kernel, and so on) of the 157 | operating system on which the executable runs, unless that component itself 158 | accompanies the executable. 159 | 160 | If distribution of executable or object code is made by offering access to copy 161 | from a designated place, then offering equivalent access to copy the source code 162 | from the same place counts as distribution of the source code, even though third 163 | parties are not compelled to copy the source along with the object code. 164 | 165 | **4.** You may not copy, modify, sublicense, or distribute the Program except as 166 | expressly provided under this License. Any attempt otherwise to copy, modify, 167 | sublicense or distribute the Program is void, and will automatically terminate 168 | your rights under this License. However, parties who have received copies, or 169 | rights, from you under this License will not have their licenses terminated so 170 | long as such parties remain in full compliance. 171 | 172 | **5.** You are not required to accept this License, since you have not signed 173 | it. However, nothing else grants you permission to modify or distribute the 174 | Program or its derivative works. These actions are prohibited by law if you do 175 | not accept this License. Therefore, by modifying or distributing the Program (or 176 | any work based on the Program), you indicate your acceptance of this License to 177 | do so, and all its terms and conditions for copying, distributing or modifying 178 | the Program or works based on it. 179 | 180 | **6.** Each time you redistribute the Program (or any work based on the 181 | Program), the recipient automatically receives a license from the original 182 | licensor to copy, distribute or modify the Program subject to these terms and 183 | conditions. You may not impose any further restrictions on the recipients' 184 | exercise of the rights granted herein. You are not responsible for enforcing 185 | compliance by third parties to this License. 186 | 187 | **7.** If, as a consequence of a court judgment or allegation of patent 188 | infringement or for any other reason (not limited to patent issues), conditions 189 | are imposed on you (whether by court order, agreement or otherwise) that 190 | contradict the conditions of this License, they do not excuse you from the 191 | conditions of this License. If you cannot distribute so as to satisfy 192 | simultaneously your obligations under this License and any other pertinent 193 | obligations, then as a consequence you may not distribute the Program at all. 194 | For example, if a patent license would not permit royalty-free redistribution of 195 | the Program by all those who receive copies directly or indirectly through you, 196 | then the only way you could satisfy both it and this License would be to refrain 197 | entirely from distribution of the Program. 198 | 199 | If any portion of this section is held invalid or unenforceable under any 200 | particular circumstance, the balance of the section is intended to apply and the 201 | section as a whole is intended to apply in other circumstances. 202 | 203 | It is not the purpose of this section to induce you to infringe any patents or 204 | other property right claims or to contest validity of any such claims; this 205 | section has the sole purpose of protecting the integrity of the free software 206 | distribution system, which is implemented by public license practices. Many 207 | people have made generous contributions to the wide range of software 208 | distributed through that system in reliance on consistent application of that 209 | system; it is up to the author/donor to decide if he or she is willing to 210 | distribute software through any other system and a licensee cannot impose that 211 | choice. 212 | 213 | This section is intended to make thoroughly clear what is believed to be a 214 | consequence of the rest of this License. 215 | 216 | **8.** If the distribution and/or use of the Program is restricted in certain 217 | countries either by patents or by copyrighted interfaces, the original copyright 218 | holder who places the Program under this License may add an explicit 219 | geographical distribution limitation excluding those countries, so that 220 | distribution is permitted only in or among countries not thus excluded. In such 221 | case, this License incorporates the limitation as if written in the body of this 222 | License. 223 | 224 | **9.** The Free Software Foundation may publish revised and/or new versions of 225 | the General Public License from time to time. Such new versions will be similar 226 | in spirit to the present version, but may differ in detail to address new 227 | problems or concerns. 228 | 229 | Each version is given a distinguishing version number. If the Program specifies 230 | a version number of this License which applies to it and "any later version", 231 | you have the option of following the terms and conditions either of that version 232 | or of any later version published by the Free Software Foundation. If the 233 | Program does not specify a version number of this License, you may choose any 234 | version ever published by the Free Software Foundation. 235 | 236 | **10.** If you wish to incorporate parts of the Program into other free programs 237 | whose distribution conditions are different, write to the author to ask for 238 | permission. For software which is copyrighted by the Free Software Foundation, 239 | write to the Free Software Foundation; we sometimes make exceptions for this. 240 | Our decision will be guided by the two goals of preserving the free status of 241 | all derivatives of our free software and of promoting the sharing and reuse of 242 | software generally. 243 | 244 | 245 | No Warranty 246 | ----------- 247 | 248 | **11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 249 | THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE 250 | STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM 251 | "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, 252 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 253 | PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 254 | PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 255 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 256 | 257 | **12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 258 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 259 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 260 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR 261 | INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 262 | BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 263 | FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER 264 | OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 265 | --------------------------------------------------------------------------------