vagrant使用 vagrant下载

  • 环境版本

    & 'c:\Program Files\Oracle\VirtualBox\VBoxManage.exe' --version
    5.2.20r125813
    
    vagrant -v
    Vagrant 2.2.10
    Vagrant 2.2.9
    
  • 添加镜像文件

    # 添加镜像
    vagrant box add centos7 /Users/jcleng/Downloads/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
    # 查看镜像列表
    vagrant box list
    # 移除镜像
    vagrant box remove centos7
    
  • 初始化虚拟机

    vagrant init centos7
    # 执行成功之后会创建一个文件,所有的操作都在Vagrantfile所在目录执行
    Vagrantfile
    # 删除该虚拟机,Vagrantfile文件还是存在,镜像也还存在
    vagrant destroy
    # 然后可以重新创建(启动)(或者查看镜像 vagrant box list)
    vagrant up
    
    # VBoxManage命令显示所有的虚拟机
    vboxmanage list vms
    ## win
    & 'c:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms
    # 打包为box文件(当前Vagrantfile所在目录执行)
    vagrant package --output ./CentOS7-my-2019-10-31.box
    
  • 修改Vagrantfile文件

    config.vm.network "private_network", ip: "192.168.33.10"
    
    config.vm.network "public_network"
    
    config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = false
    # Customize the amount of memory on the VM:
    vb.memory = "1024"
    end
    
  • 文件共享插件

# 国内源: https://gems.ruby-china.com/
# 目录映射 使用 config.vm.synced_folder 提示 vagrant mount: unknown filesystem type 'vboxsf',请安装这个插件
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/
# 安装之后 reload 会自动安装linux依赖,确保已经换源,否则会很慢或者失败
vagrant reload

# 启动之后可能会报错,文件夹无法挂载
package kernel-devel-3.10.0-1127.el7.x86_64 available
# 换阿里源,更新系统,然后推出重启虚拟机,会重新安装相关依赖文件,自动挂载/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso 即可
  • 启动

    vagrant up
    
  • 停止

    vagrant halt
    
  • 进入ssh

    vagrant ssh
    
  • 配置ssh

    # 电脑生成密匙,无脑回车
    ssh-keygen -t rsa
    # 复制.pub文件内容,ssh-rsa开头的很长
    cat ~/.ssh/id_rsa.pub
    # 复制到虚拟机authorized_keys文件,里面有一个vagrant的,换行粘贴进去
    vi ~/.ssh/authorized_keys
    # 登录
    ssh [email protected]
    
  • 配置默认网卡

# 多张网卡启动的时候会提示选择网卡,等待用户选择
Available bridged network interfaces:
1) Realtek PCIe GbE Family Controller
2) Hyper-V Virtual Ethernet Adapter
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
==> default:
    default: Which interface should the network bridge to?

# 配置文件修改
config.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
  • 私有网络地址

# VirtualBox 查看VirtualBox Host-Only的网络适配器网段,定义一个同网段的ip
# Hyper-V 查看Hyper-V的网络适配器网段,定义一个同网段的ip

# 使用hyperv可能无法生效,原因未知
config.vm.network "private_network", ip: "192.168.56.100"

# 使用hyperv手动配置ip段和静态ip
## hyper-v创建新的交换机,自动会创建一个网卡
## 把物理网卡网络共享到该新网卡, 自动会分配新的网卡ip段
## 修改虚拟机的网络适配器,选择刚刚创建的新的网卡
## 重启虚拟机,然后手动修改新的静态ip段即可
### 用nmcli命令新增一个对应段的ip,比如192.168.137.120,重启网络即可

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:14:99:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.232/24 brd 192.168.137.255 scope global noprefixroute dynamic eth0
       valid_lft 604650sec preferred_lft 604650sec
    inet 192.168.137.120/24 brd 192.168.137.255 scope global secondary noprefixroute eth0
       valid_lft forever preferred_lft forever
  • 如果默认vagrant的公钥被弄丢了(默认不会保存到实体机),使用自己实体机生成的rsa

# 在 config.vm.synced_folder 下面添加,然后复制C:\Users\jcleng\.ssh\id_rsa.pub到虚拟机的/home/vagrant/.ssh/authorized_keys 里面即可
  config.ssh.private_key_path = "C:/Users/jcleng/.ssh/id_rsa"
  config.ssh.forward_agent = true
# 然后 vagrant ssh 即可连接
  • 使用hyperv

下载hyperv的镜像然后, 修改如下(屏蔽默认virtualbox的设置), cmd需要管理员方式打开: 设置了synced_folder,提示smb共享输入用户名和密码时,输入当前winwdos的账户密码即可

  config.vm.define "hyperv"
  config.vm.provider "hyperv" do |h|
      h.memory = "512"
      h.maxmemory = 16384
      h.cpus = 2
      h.vm_integration_services = {
        guest_service_interface: true,
        CustomVMSRV: true
      }
  end
  • 手动指定临时ip

# 在已有eth0的网卡上创建一个固定ip
sudo ifconfig eth0:0 172.18.11.208 up
sudo ifconfig eth0:1 172.18.11.210 up
# 关闭
sudo ifconfig eth0:0 down

# 查看结果

root@centos7:/home/vagrant# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:14:99:00 brd ff:ff:ff:ff:ff:ff
    inet 172.18.11.203/20 brd 172.18.15.255 scope global noprefixroute dynamic eth0
       valid_lft 85912sec preferred_lft 85912sec
    inet 172.18.11.209/16 brd 172.18.255.255 scope global eth0:0
       valid_lft forever preferred_lft forever
    inet 172.18.11.210/16 brd 172.18.255.255 scope global secondary eth0:1
       valid_lft forever preferred_lft forever

# 配置到Vagrantfile启动文件
  config.vm.provision "shell", inline: <<-SHELL
    ifconfig eth0:0 172.18.11.208 up
    ifconfig eth0:1 172.18.11.210 up
  SHELL
  • linux虚拟机手动安装VBoxGuestAdditions

# 下载 https://download.virtualbox.org/virtualbox/6.1.34/VBoxGuestAdditions_6.1.34.iso
# 然后虚拟机手动加载iso文件到虚拟硬盘
# 启动系统进入linux进行挂载
mkdir /tmp/cd
sudo mount /dev/cdrom /tmp/cd
# 安装运行
sudo /tmp/cd/VBoxLinuxAdditions.run
# 最后重启虚拟机即可
  • box的默认目录

# 设置环境变量即可
VAGRANT_HOME=D:\.vagrant.d
  • 配置vscode .ssh\config

Host vbox_0001
    HostName 172.21.12.250
    Port 22
    User vagrant
    IdentityFile D:\work\001vbox\.vagrant\machines\hyperv\hyperv\private_key

使用qemu

# 替换 C:\Program Files\Vagrant\embedded\gems\specifications
https://rubygems.org
# 为
https://gems.ruby-china.com

# 安装vagrant-qemu插件
vagrant plugin install vagrant-qemu --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

# 修改配置
  config.vm.box = "centos/7"

  config.vm.provider "qemu" do |qe|
    qe.arch = "x86_64"
    qe.machine = "q35"
    qe.memory = "2024"
    qe.cpu = "max"
    # qe.smp = "cpus=2,sockets=1,cores=2,threads=1"
    qe.smp = "6"
    qe.net_device = "virtio-net-pci"
    qe.extra_qemu_args = %w(-accel tcg,thread=multi,tb-size=512)
    qe.gui = false
    qe.no_daemonize = true
    qe.control_port = 33333
    qe.debug_port = 33334
    qe.qemu_dir="C:\\Program Files\\qemu\\share"
  end
# 初始化启动
vagrant up --provider qemu

# 使用的镜像是 libvirt 的镜像
https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/libvirt/unknown/vagrant.box
https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1609_01.LibVirt.box
https://app.vagrantup.com/jborean93/boxes/WindowsServer2016/versions/1.2.0/providers/libvirt/amd64/vagrant.box
# 使用nixos镜像需要安装cifs-utils,实现smb文件共享
cifs-utils
  • box自带配置文件, 可以修改

C:\Users\Administrator\.vagrant.d\boxes\win\0\libvirt\Vagrantfile