Vagrant Box 标准封装通常只有 10G 左右,对于要在这之上各种玩 Docker 空间就会不够,Vagrant 硬盘扩容这篇文章是关于如何给 Box 扩容的,但是做起来还是稍微有点繁琐,今天我们就来自己定制一个符合自己需求的 Vagrant Box,以下是参考做的笔记

相关软件

操作系统 CentOS7 的镜像,本次使用CentOS-7-x86_64-Minimal-1908.iso
虚拟机软件 VirtualBox, 本次使用版本 VirtualBox 5.2.18
虚拟机管理软件 Vagrant,本次使用版本 Vagrant 2.2.0

虚拟机设置

QQ截图20191010092612.png

QQ截图20191010092621.png

安装 CentOS7

安装 CentOS7
选择默认分区
设置 root 密码为 vagrant

配置 CentOS7

安装后重启,root 登录,进入 CentOS 配置

1.更改网络配置,设置开机启动

将 ifcfg-enp0s3 的 ONBOOT=no,改为 ONBOOT=yes

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 

以前是传统的命名eth0、eth1等, CentOS7 里网卡代号是 enp0s3,如果觉得 ifcfg-enp0s3 不习惯,也可以改成 ifcfg-eth0:

# mv /etc/sysconfig/network-scripts/ifcfg-enp0s3  /etc/sysconfig/network-scripts/ifcfg-eth0

修改 Grub

# vi /etc/default/grub
# GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

2. 安装 openssh-server 通常自带安装了

# yum -y install openssh-server
# systemctl enable sshd.service
# systemctl start sshd.service
# systemctl status sshd.service

配置ssh, 没配的话连不上
备份/etc/ssh/sshd_config

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

修改 sshd_config 的 GSSAPIAuthentication 和 UseDNS

# sed -i  -e  's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_ config
# sed -i  -e  's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_ config
# systemctl restart sshd.service
# systemctl status sshd.service

配置 SELinux
将 SELinux 配置成 permissive 模式

# sed -i -e 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

3.关闭防火墙

CentOS7 中默认用的是 firewalld 做防火墙,iptables 如果需要的话要自己装,开发的 box 可以直接禁用掉 firewalld

# systemctl stop firewalld.service
# systemctl disable firewalld.service

4.安装 ntpd 服务及其他服务

ntpd 主要用来同步时间, ntpq -p可以验证是否能够同步。
CentOS7 中,默认没有ifconfig, netstat等工具,可以安装net-tools相关工具。

# yum install -y openssh-clients nano ntp  net-tools
# systemctl enable ntpd.service
# systemctl stop ntpd.service
# ntpdate cn.ntp.org.cn
# systemctl start ntpd.service
# ntpq -p

5.创建用户 vagrant

# useradd vagrant
# passwd vagrant
# groupadd admin
# usermod -G admin vagrant

6.配置 sudoers

将 vagrant 用户添加到 /etc/sudoers 中, 免密使用 sudo

# echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

7.安装virtualbox additions

首先在虚拟机上找到设备的菜单, 设备=>安装增强功能,然后挂载 cdrom,执行安装脚本

# yum install gcc bzip2 make kernel-devel-`uname -r` perl
# mkdir /home/vbox
# mount -t auto /dev/cdrom /home/vbox
# cd /home/vbox
# sh ./VBoxLinuxAdditions.run

8.添加 vagrant's public key

# su vagrant
$ mkdir -m 0700 -p /home/vagrant/.ssh
$ curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
$ chmod 0600 /home/vagrant/.ssh/authorized_keys

这一步切记进去看下是否下载了,由于网络不好 authorized_keys 下载不成功导致后面虚拟机启动不成功

9.安装必要的工具

# yum install vim wget git

10.清理 CentOS7

切换回 root,然后清理缓存,清理临时文件,清理命令历史,关闭虚拟机

# yum clean all
# rm -rf /var/cache/yum 
# rm -rf /tmp/*
# rm -f /var/log/wtmp /var/log/btmp
# history -c
# shutdown -h now

到这一步基本上工作就完成了,自用就不需要精简了,大小大概六七百兆的样子。

创建 Vagrant BOX

# vagrant package --output centos7-base.box --base CentOS7 //CentOS7 是当前虚拟机名字

会在当前目录生成一个centos7-base.box

测试 VBOX

首先将生成的box添加到box list中, 然后在当前目录 vagrant init boxname,修改在 vagrantfile 中打开这一行的注释 config.vm.network "private_network", ip: "192.168.33.10" vagrant up 启动虚拟机,完成后,vagrant ssh 进入虚拟机

$ vagrant box add centos7-base centos7-base.box
$ vagrant box list
$ vagrant init centos7-base
$ vagrant up
$ vagrant ssh

最后附上已经做好了 centos7-base.box 和带有 docker 安装的 vagrantfile 之所以没有安装进 VBox 是这样版本更加灵活
附件:Vagrantfile
centos7-base.box 链接: https://pan.baidu.com/s/15uLu0yNQNzH8yNbCvCsL7Q 提取码: e44v 下载后跟附件解压后的 vagrantfile 放同一个文件夹启动即可。

参考资料

制作一个CentOS7的Vagrant Box
使用 VirtualBox 制作自己的 Vagrant box