写在前面

利用vagrant保持开发生产环境一致是一个很好的方法,不过vagrant官网上的box文件下载是真的很慢,因此,这里教大家如何自制box文件。
这篇文章你会接触到:
  • vagrant使用基础
  • 如何定制vagrantfile
  • 如何设置CentOS 7
  • Virtualbox使用基础
  • 如何利用vagrant打包CentOS 7成box文件
    学习前提,已经会使用Virtualbox,并且安装了CentOS 7,如果不会可以看我上一篇文章: VirtualBox下安装CentOS7系统
    另外,你要安装好vagrant, 官网
    制作环境:
  • window 10
  • vagrant 2.2.2
  • virtualbox 5.2.8

一、 添加新用户

启动创建好的CentOS 7新系统,输入帐号密码:
 
 
 
添加用户,按照提示输入两次密码,用户:vagrant, 密码也是:vagrant, 注意,root用户的密码也要是vagrant, 然后再设置用户权限:
p #添加vagrant用户
passwd vagrant #设置vagrant密码
groupadd admin #添加admin用户组
usermod -G admin vagrant #添加vagrant进admin用户组
 
4
 
添加用户
 
 
设置用户组

二、设置sudoers

添加vagrant用户进入/etc/sudoers,不用密码登录
echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers # 追加信息到/etc/sudoers
1

三、更改网络配置,设置开机启动

将ifcfg-enp0s3的ONBOOT=no,改为ONBOOT=yes
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
1
 
 
其实,如果是按照我上一篇文章:VirtualBox下安装CentOS7系统 安装的系统,这一步是不用配置的,打开文件可以看到onboot设置已经是yse了。
ping www.baidu.com #测试网络是否正常

四、关闭防火墙

centos7中默认用的是firewalld做防火墙,开发的box可以直接禁用掉firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service

五、安装必备软件

当然是个人喜好,不过这些都很有用,最好装上:
yum install -y wget

六、添加vagrant's public key

su vagrant # 切换到vagrant
sudo mkdir -m 0700 -p /home/vagrant/.ssh
 sudo chown -R vagrant:vagrant /home/vagrant/.ssh  
https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub 
vim /home/vagrant/.ssh/authorized_keys #获取上一行的内容 写入该文件
sudo chmod 0600 /home/vagrant/.ssh/authorized_keys

七、安装 virtualBox guest addition

由于我们安装的系统是无界面的,因此只能通过命令行安装:
su root
yum clean all # 清空yum缓存并强制重读任何改变过的配置文件
yum groupinstall "Development tools" # 安装开发工具,这个工具会安装一些常用的开发编译工具, 后面要用,如 gcc,git
wget http://download.virtualbox.org/virtualbox/5.2.8/VBoxGuestAdditions_5.2.8.iso # 这里的5.2.8对应的是virtualbox的版本号,可以根据自己的版本号更改
速度慢可以下载到本地后通过scp传到服务器 再执行
scp -P 22 /Users/mac/Downloads/VBoxGuestAdditions_5.2.12.iso root@192.168.1.210:/usr/local/src
sudo mkdir /media/VBoxGuestAdditions  
sudo mount -o loop,ro VBoxGuestAdditions_5.2.8.iso /media/VBoxGuestAdditions
yum -y install elfutils-libelf-devel
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
#注意 上一步会报错 elfutils-libelf-devel 这个没安装
#cat /var/log/vboxadd-setup.log
su vagrant
sudo mkdir /www
exit
#测试是否安装成功 首先在vbox里面 挂载 /www 到www 在centos里面执行
su root
mount -t vboxsf www /www
ls /www #如果有你电脑的共享文件 成功了,没有那继续看错误日志
rm VBoxGuestAdditions_5.2.8.iso
sudo umount /media/VBoxGuestAdditions
sudo rmdir /media/VBoxGuestAdditions
 
 

八、清理操作

清除刚刚做的操作留下的一些内容,保持系统干净
yum clean all # 清除yum操作缓存
rm -rf /tmp/* # 清除tmp下的零时文件
rm -f /var/log/wtmp /var/log/btmp # 清除日志
history -c # 清除历史
shutdown -h now # 立即关机
 

九、 制作Vagrant Box

在宿主机上cmd输入以下内容:
vagrant package --output centos-7.box --base CentOS7_1
--output后面是打包成box的文件名,--base是virtualbox里的centos名称
 
 
打包成功

十、测试

创建新的目录,用vagrant启动centos。
mkdir centos-7 # 创建目录
cd centos-7 # 进入目录
vagrant init centos-7 # 创建新的环境
vagrant box add centos-7 C:/Users/steven/centos-7.box # 添加新的box
3
4
这里目录里会出现一个vagrantfile, 修改文件:
Vagrant.configure("2") do |config|
 
config.vm.box = "centos-7" # 虚拟机上出现的名字
config.vm.hostname = "WEB"
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"
config.ssh.insert_key = false
config.ssh.private_key_path = ["~/.ssh/id_rsa"]
config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/authorized_keys"
config.vm.synced_folder ".", "/vagrant", disabled: true
 
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "centos7-learn", "--memory", "1536"]
end
end
 
简单配置好,可以启动了.
# 启动虚拟机,第一次启动会比较久
vagrant up
# 执行vagrantfile里的命令,把本地的id_ras.pub传到虚拟机里,
# 不用这一步,没办法使用vagrant ssh 直接登录,要输入密码,执行了这一步,就可以免密登录
vagrant provision
# 登录虚拟机
vagrant ssh
 
 
 
 
 

用CentOS 7自制Vagrant Box文件的更多相关文章

  1. 通过Vagrant搭建PHP环境(一) Vagrant box添加配置

    系统Windows10 Vagrant 1.8.1 VirtualBox 5.0.20 vagrant box下载地址:http://cloud.centos.org/centos/7/vagrant ...

  2. 创建自己的Vagrant box

    这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...

  3. 如何拥有一个自己的Vagrant box

    这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...

  4. laravel homestead vagrant box安装使用,问题,及相关命令

    Vagrant is a tool that manages oracle virtual boxes 1.本地下载https://atlas.hashicorp.com/laravel/boxes/ ...

  5. vagrant box保存路径修改

    add box的时候默认保存在C盘用户文件夹 C:\Users\xxx.vagrant.d,通过设置VAGRANT_HOME环境变量改变默认位置 WIN setx VAGRANT_HOME “X:/y ...

  6. Vagrant (3) —— 复制/备份Vagrant Box

    Vagrant (3) -- 复制/备份Vagrant Box 摘要 介绍复制/备份Vagrant Box基本方法 版本 Vagrant版本: 1.8.1 内容 复制vagrant box并压缩 关闭 ...

  7. vagrant box各种命令汇总

    最近在研究laravel,中间用到了vagrant 虚拟机管理工具,学习一下他的命令 vagrant box命令 用于管理boxes的命令,比如添加.删除等等. 此命令的功能主要通过以下子命令完成: ...

  8. Vagrant box ubuntu/xenial64 添加vagrant用户解决没有登录密码的问题

    参考了Vagrant box ubuntu/xenial64 の ubuntuユーザ の passwordについて 1. 可以通过 Git Bash 使用  vagrant ssh 登录到Ubuntu ...

  9. 如何制作一个vagrant box

        因为要用的窗口应用,基于服务器的各种box不能使用(曾经尝试安装桌面,没有成功).所以试着基于Ubuntu的虚拟机创建自己的box. 过程中主要参考了这篇文章:http://www.360do ...

随机推荐

  1. 阿里云短信服务验证码封装类 - PHP

    本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用 使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的 composer requir ...

  2. git多账号使用

    1 背 景 在公司上班的员工会同时拥有两个git账号, 一个是公司内部的, 仅允许工作时使用; 另一个是个人的, 常用于日常的学习记录. 此时, 面临的问题是如何在一台电脑(客户端)上正常使用两个账号 ...

  3. 关于Java代理那些事儿

    代理是啥?就是代替你执行你持有的主要功能,并且能在你的基础之上完成一些其他的功能.代理的目的就是生成一个和原对象具有同样功能的对象.在Java中,代理是一种设计模式.在Spring的面向切面编程(AO ...

  4. Java代码工具EasyCode使用

    写Java代码,增删改查,最无趣而又最基础.那机器人就来了,帮你写,减少你的基础的无趣的工作. 推荐两个代写代码的神奇工具Mybatis-generator与EasyCode.这两款软件的数据库持久层 ...

  5. [算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)

    题目 3在十进制下满足若各位和能被3整除,则该数能被3整除. 5在十六进制下也满足此规律. 给定数字k,求多少进制(1e18进制范围内)下能满足此规律,找出一个即可,无则输出-1. 题解 写写画画能找 ...

  6. Java中读取配置文件中的内容,并将其赋值给静态变量的方法

    应用场景 项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方 ...

  7. 数据库:drop、truncate、delete的区别

    近日在删除数据时,发现除了常用的Delete & Drop语句之外,还有Truncate也是与删除数据相关的,针对上述三种有进行简单的比较与整理 用法 drop 用法:drop table 表 ...

  8. ios自动识别电话并变色的问题解决方法

    问题: 在做移动端页面时发现长串数字都被ios系统的手机识别为电话号码,且文字变成很土的蓝色,点击有下划线并弹出提示拨打该电话号码. 解决方法: 1.在head中加上下面这行代码就OK了(仅限于单页面 ...

  9. 使用jsonify返回json数据

    from flask import Flask, jsonify app = Flask(__name__) json_data = [ {"name":"json&qu ...

  10. java经典算法40题-附带解决代码

    前一段时间工作比较闲,每天没有代码敲的日子有点无聊,于是为了保证自己的编程逻辑力的日常清醒,故百度了一些经典的java算法,然后自己思考编程解决问题,虽然那些东西比较基础了,但是有些题目小编看到了也是 ...