flowchart TD
A["bootasm.S + bootmain.c"] --> B["bootblock.o:带符号的 ELF"]
B --> C["bootblock:512 字节启动扇区"]
D["内核 C / 汇编文件"] --> E["kernel:内核 ELF"]
F["initcode / entryother 裸二进制"] --> E
C --> G["xv6.img:启动盘"]
E --> G
H["用户程序 + 用户库"] --> I["_init / _sh / _ls 等"]
J["mkfs.c"] --> K["mkfs:Linux 上运行的工具"]
I --> L["fs.img:xv6 文件系统盘"]
K --> L
G --> M["QEMU 启动 xv6"]
L --> M
Typing vagrant from the command line will display a list of all available commands.
Be sure that you are in the same directory as the Vagrantfile when running these commands!
Creating a VM
vagrant init – Initialize Vagrant with a Vagrantfile and ./.vagrant directory, using no specified base image. Before you can do vagrant up, you’ll need to specify a base image in the Vagrantfile.
vagrant init <boxpath> – Initialize Vagrant with a specific box. To find a box, go to the public Vagrant box catalog. When you find one you like, just replace it’s name with boxpath. For example, vagrant init ubuntu/trusty64.
Starting a VM
vagrant up – starts vagrant environment (also provisions only on the FIRST vagrant up)
vagrant resume – resume a suspended machine (vagrant up works just fine for this as well)
vagrant provision – forces reprovisioning of the vagrant machine
vagrant reload – restarts vagrant machine, loads new Vagrantfile configuration
vagrant reload --provision – restart the virtual machine and force provisioning
Getting into a VM
vagrant ssh – connects to machine via SSH
vagrant ssh <boxname> – If you give your box a name in your Vagrantfile, you can ssh into it with boxname. Works from any directory.
Stopping a VM
vagrant halt – stops the vagrant machine
vagrant suspend – suspends a virtual machine (remembers state)
Cleaning Up a VM
vagrant destroy – stops and deletes all traces of the vagrant machine
vagrant destroy -f – same as above, without confirmation
Boxes
vagrant box list – see a list of all installed boxes on your computer
vagrant box add <name> <url> – download a box image to your computer
vagrant box outdated – check for updates vagrant box update
vagrant box remove <name> – deletes a box from the machine
vagrant package – packages a running virtualbox env in a reusable box
Saving Progress
-vagrant snapshot save [options] [vm-name] <name> – vm-name is often default. Allows us to save so that we can rollback at a later time
Tips
vagrant -v – get the vagrant version
vagrant status – outputs status of the vagrant machine
vagrant global-status – outputs status of all vagrant machines
vagrant global-status --prune – same as above, but prunes invalid entries
vagrant provision --debug – use the debug flag to increase the verbosity of the output
vagrant push – yes, vagrant can be configured to deploy code!
vagrant up --provision | tee provision.log – Runs vagrant up, forces provisioning and logs all output to a file
Plugins
vagrant-hostsupdater : $ vagrant plugin install vagrant-hostsupdater to update your /etc/hosts file automatically each time you start/stop your vagrant box.
Notes
If you are using VVV, you can enable xdebug by running vagrant ssh and then xdebug_on from the virtual machine’s CLI.