跳转至

Vagrant

官方站点

文档:https://developer.hashicorp.com/vagrant/docs

Box 镜像仓库:https://portal.cloud.hashicorp.com/vagrant/discover

快速开始

安装 Vagrant

scoop install vagrant

设置环境变量

安装完成后,配置 .vagrant.d 的位置,通过 vagrant 下载的 box 都会存放在该目录下。设置VAGRANT_HOME环境变量即可。

安装 Provider 插件

以 Vmware Workstation Pro 17 为例:

vagrant plugin install vagrant-vmware-desktop

备注

VagrantVMware 插件修改

可能已过时,最新版本不需要修改。

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\VagrantVMware
###ImagePath
C:\\HashiCorp\\VagrantVMwareUtility\\bin\\vagrant-vmware-utility.exe service run -config-file="C:\\programdata\\hashicorp\\vagrant-vmware-desktop\\config\\service.hcl" -log-file="C:\\programdata\\hashicorp\\vagrant-vmware-desktop\\logs/utility.log" -license-override professional

导入 Box

先到官网下载好 Box,再导入,以 Rocky Linux 9 为例:

官方下载

USTC Mirror

WindowsServer 下载

vagrant box add rocky9 Rocky-9-Vagrant-VMware-版本号xx.x86_64.box

初始化和启动

mkdir rocky9-dev
cd rocky9-dev
vagrant init rocky9-dev
vagrant up
Vagrantfile示例
Vagrant.configure("2") do |config|
  config.vm.box = "rocky9"
  config.vm.hostname = "rs9-dev"
  config.vm.disk :disk, size: "50GB", primary: true
  config.vm.network "private_network", type: "dhcp"

  config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true" #禁用默认ssh端口转发
  config.vm.network "forwarded_port", guest: 22, host: 20090 #ssh
  config.vm.network "forwarded_port", guest: 29494, host: 29494 #1panel

  config.vm.provider "vmware_desktop" do |v|
      v.vmx["memsize"] = "8192"
      v.vmx["numvcpus"] = "2"
  end
end

安装完成后打开 VMware,发现列表中没有 centos/7,找到 VMware 底部托盘,选择 打开全部后台虚拟机 后即可看到。

备注

VMware 不显示托盘图标的需要到编辑-首选项-工作区调整配置选项)

更改默认的 SSH 端口

Vagrant 默认转发宿主的 2222 端口到虚拟机的 22 端口(默认设置,无须配置)。

如果想要修改端口号或者去掉,解决办法是先禁用默认的 ssh 转发,再添加自定义转发:

config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
config.vm.network "forwarded_port", guest: 22, host: 3333

注意:第一条规则必须有 id: "ssh" ,否则会报如下错误:

Forwarded port ‘2222’ (host port) is declared multiple times with the protocol ‘tcp’.

重启后,即可看到转发端口已经更改为 3333。

启用 SSH 密码登录

以 Rocky Linux9 为例。

初始化虚拟机后,首次必须使用 ssh 私钥文件登录。

### 查看ssh私钥路径,将私钥文件导入到你的ssh连接工具后即可直接登录。
PS D:\opt\Vagrant\instance\rocky9> vagrant  ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 20090
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile D:/opt/Vagrant/instance/rocky9/.vagrant/machines/default/vmware_desktop/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  PubkeyAcceptedKeyTypes +ssh-rsa
  HostKeyAlgorithms +ssh-rsa

进入虚拟机内部后,开启 ssh 密码登录即可。官方 Rockylinux 的 Vagrant 镜像,用户和密码都是 vagrant。

sudo -i
vi /etc/ssh/sshd_config
###这两项配置改成yes
PermitRootLogin yes
PasswordAuthentication yes
###重启ssh服务
systemctl restart sshd

Snipaste_2024-11-26_14-56-21

扩展磁盘未分配空间

安装后磁盘分区如下:

[vagrant@ldev-rs9 ~]$ sudo lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   50G  0 disk
├─sda1   8:1    0  100M  0 part /boot/efi
├─sda2   8:2    0 1000M  0 part /boot
├─sda3   8:3    0    4M  0 part
├─sda4   8:4    0    1M  0 part
└─sda5   8:5    0  7.8G  0 part /
[vagrant@ldev-rs9 ~]$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G   18M  1.6G   2% /run
efivarfs         64K  5.1K   54K   9% /sys/firmware/efi/efivars
/dev/sda5       7.8G  3.2G  4.6G  42% /
/dev/sda2       936M  105M  832M  12% /boot
/dev/sda1       100M  7.0M   93M   8% /boot/efi
tmpfs           793M     0  793M   0% /run/user/1000
vmhgfs-fuse     954G  742G  213G  78% /mnt/vagrant-mounts/1000-1000

可以看到 sda 磁盘大小为 5GB,而所有分配的分区加起来也不足 50G。所以磁盘末尾存在未分配空间,尝试将其分配到根分区。

[vagrant@ldev-rs9 ~]$ sudo dnf install cloud-utils-growpart #安装包
[vagrant@ldev-rs9 ~]$ sudo growpart /dev/sda 5

CHANGED: partition=5 start=2265088 old: size=16384000 end=18649087 new: size=102592479 end=104857566
[vagrant@ldev-rs9 ~]$ sudo xfs_growfs /

meta-data=/dev/sda5              isize=512    agcount=4, agsize=512000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0 nrext64=0
data     =                       bsize=4096   blocks=2048000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2048000 to 12824059
[vagrant@ldev-rs9 ~]$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G   18M  1.6G   2% /run
efivarfs         64K  5.1K   54K   9% /sys/firmware/efi/efivars
/dev/sda5        49G  3.5G   46G   8% /
/dev/sda2       936M  105M  832M  12% /boot
/dev/sda1       100M  7.0M   93M   8% /boot/efi
tmpfs           793M     0  793M   0% /run/user/1000

后续需要扩容磁盘,则调整 Vagrantfile 里的 disk size,然后重复此操作即可。

SSH 报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

重新创建虚拟机后 SSH 失败,使用ssh-keygen -R [127.0.0.1]:20090刷新主机 SSH 密钥指纹。

PS D:\opt\Vagrant\instance\ldev-rs9> tssh
🍺 dev-rs9
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ecdsa-sha2-nistp256 key sent by the remote host is
SHA256:hhIADxWLiIpUHGfv08X1ng9nRXtQS6wl0NtUCZCVPTY
Please contact your system administrator.
Add correct host key in C:\Users\dsf\.ssh\known_hosts to get rid of this message.
new conn [127.0.0.1:20090] failed: ssh: handshake failed: knownhosts: key mismatch
PS D:\opt\Vagrant\instance\ldev-rs9> ssh-keygen -R [127.0.0.1]:20090
# Host [127.0.0.1]:20090 found: line 17
# Host [127.0.0.1]:20090 found: line 18
# Host [127.0.0.1]:20090 found: line 19
C:\Users\dsf/.ssh/known_hosts updated.
Original contents retained as C:\Users\dsf/.ssh/known_hosts.old