Vagrant Box 镜像准备:Packer 打包 Centos 7.9 系统
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vagrant Box 镜像准备:Packer 打包 Centos 7.9 系统相关的知识,希望对你有一定的参考价值。
目录
前言
使用 vagrant 的前提是要有 box 镜像盒子来初始化系统,网上有很多 box 可以下载,但是用自己的不是更香吗?自己动手,丰衣足食!
环境准备
软件准备
首先需要安装 vagrant + virtualbox + packer ,具体安装教程,请参考文章:☀️ 福利向:⚡️万字图文⚡️ 带你 Vagrant 从入门到超神!❤️
下载系统镜像
下载 centos 7.9 安装包,下载地址:精心整理Linux各版本安装包(包括Centos、Redhat、Oracle Linux),附下载链接🔗
这里使用最小的镜像源即可,在 https://mirrors.edge.kernel.org/centos/7.9.2009/isos/x86_64/
可以直接下载。
这里的校验码记录一下: 07b94e6b1a0b0260b94c83d6bb76b26bf7a310dc78d7a9c7432809fb9bc6194a
下载打包源码
下载打包模板源码:
git clone https://hub.fastgit.org/chef/bento.git
将系统镜像文件拷贝至 bento/packer_templates/centos
目录下:
确认环境准备好之后,可以开始进行打包。
开始打包
自定义json文件
使用目录中的 centos-7.9-x86_64.json
文件,复制为 centos79.json
,进行自定义修改:
{
"builders": [
{
"boot_command": [
"<up><wait><tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
],
"boot_wait": "5s",
"cpus": "{{ user `cpus` }}",
"disk_size": "{{user `disk_size`}}",
"guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
"guest_additions_url": "{{ user `guest_additions_url` }}",
"guest_os_type": "RedHat_64",
"hard_drive_interface": "sata",
"headless": "{{ user `headless` }}",
"http_directory": "{{user `http_directory`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
"memory": "{{ user `memory` }}",
"output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-virtualbox",
"shutdown_command": "echo 'vagrant' | sudo -S /sbin/halt -h -p",
"ssh_password": "vagrant",
"ssh_port": 22,
"ssh_timeout": "10000s",
"ssh_username": "vagrant",
"type": "virtualbox-iso",
"virtualbox_version_file": ".vbox_version",
"vm_name": "{{ user `template` }}"
}
],
"post-processors": [
{
"output": "{{ user `build_directory` }}/{{user `box_basename`}}.{{.Provider}}.box",
"type": "vagrant"
}
],
"provisioners": [
{
"environment_vars": [
"HOME_DIR=/home/vagrant",
"http_proxy={{user `http_proxy`}}",
"https_proxy={{user `https_proxy`}}",
"no_proxy={{user `no_proxy`}}"
],
"execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
"expect_disconnect": true,
"scripts": [
"{{template_dir}}/scripts/update.sh",
"{{template_dir}}/../_common/motd.sh",
"{{template_dir}}/../_common/sshd.sh",
"{{template_dir}}/scripts/networking.sh",
"{{template_dir}}/../_common/vagrant.sh",
"{{template_dir}}/../_common/virtualbox.sh",
"{{template_dir}}/../_common/vmware.sh",
"{{template_dir}}/../_common/parallels.sh",
"{{template_dir}}/scripts/cleanup.sh",
"{{template_dir}}/../_common/minimize.sh"
],
"type": "shell"
}
],
"variables": {
"box_basename": "centos7.9",
"build_directory": "../../builds",
"build_timestamp": "{{isotime \\"20210820071500\\"}}",
"cpus": "2",
"disk_size": "65536",
"git_revision": "__unknown_git_revision__",
"guest_additions_url": "",
"headless": "",
"http_directory": "{{template_dir}}/http",
"http_proxy": "{{env `http_proxy`}}",
"https_proxy": "{{env `https_proxy`}}",
"hyperv_generation": "1",
"hyperv_switch": "bento",
"iso_checksum": "07b94e6b1a0b0260b94c83d6bb76b26bf7a310dc78d7a9c7432809fb9bc6194a",
"iso_name": "CentOS-7-x86_64-Minimal-2009.iso",
"ks_path": "7/ks.cfg",
"memory": "2048",
"mirror": "",
"mirror_directory": "Volumes/DBA/voracle/bento/packer_templates/centos",
"name": "centos7.9",
"no_proxy": "{{env `no_proxy`}}",
"template": "centos-7.9-x86_64",
"version": "TIMESTAMP"
}
}
📢 注意:以下修改两个脚本,提前排坑。
修改 networking.sh 脚本
脚本位于 centos 中,../centos/scripts/networking.sh
,由于无法访问 github ,因此 /etc/hosts 需要增加 github ip:
# modify by luciferliu for github raw.githubusercontent.com:443; Connection refused
echo '185.199.108.133 raw.githubusercontent.com' >>/etc/hosts;
echo '185.199.109.133 raw.githubusercontent.com' >>/etc/hosts;
echo '185.199.110.133 raw.githubusercontent.com' >>/etc/hosts;
echo '185.199.111.133 raw.githubusercontent.com' >>/etc/hosts;
echo '54.186.51.210 vault.centos.org' >>/etc/hosts;
echo '3.22.185.178 vault.centos.org' >>/etc/hosts;
echo '34.253.151.233 vault.centos.org' >>/etc/hosts;
ping raw.githubusercontent.com -c 5
ping vault.centos.org -c 5
修改 vagrant.sh 脚本
脚本位于 bento/packer_templates/_common
目录下,由于未关闭防火墙,443端口无法访问,因此一直报错,手动关闭防火墙:
pubkey_url="https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub";
mkdir -p $HOME_DIR/.ssh;
# modify by luciferliu ,443 port is close, stop firewalld.service
RELS=$(cat /etc/system-release)
OS_VER_PRI=$(echo "${RELS#*release}" | awk '{print $1}' | cut -f 1 -d '.')
if [ "${OS_VER_PRI}" -eq 6 ]; then
service iptables stop
if command -v curl >/dev/null 2>&1; then
curl --insecure --location "$pubkey_url" > $HOME_DIR/.ssh/authorized_keys;
elif command -v fetch >/dev/null 2>&1; then
fetch -am -o $HOME_DIR/.ssh/authorized_keys "$pubkey_url";
elif command -v wget >/dev/null 2>&1; then
wget --no-check-certificate "$pubkey_url" -O $HOME_DIR/.ssh/authorized_keys;
else
echo "Cannot download vagrant public key";
exit 1;
fi
elif [ "${OS_VER_PRI}" -eq 7 ] || [ "${OS_VER_PRI}" -eq 8 ]; then
systemctl stop firewalld.service
if command -v wget >/dev/null 2>&1; then
wget --no-check-certificate "$pubkey_url" -O $HOME_DIR/.ssh/authorized_keys;
elif command -v curl >/dev/null 2>&1; then
curl --insecure --location "$pubkey_url" > $HOME_DIR/.ssh/authorized_keys;
elif command -v fetch >/dev/null 2>&1; then
fetch -am -o $HOME_DIR/.ssh/authorized_keys "$pubkey_url";
else
echo "Cannot download vagrant public key";
exit 1;
fi
fi
启动 packer 进行打包
packer build -only=virtualbox-iso centos79.json
显示如上,即已经打包成功,box 位置存放在:../../builds/centos7.9.virtualbox.box
。
上传 box 镜像
不做演示,比较简单。
box镜像下载地址:luciferliu/centos7.9
写在最后
为什么要打包 box 镜像盒子? 以后可以使用 vagrant 直接初始化创建 linux 系统,不需要再一步步创建,为自动化奠定基础。
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
技术交流可以 关注公众号:Lucifer三思而后行
以上是关于Vagrant Box 镜像准备:Packer 打包 Centos 7.9 系统的主要内容,如果未能解决你的问题,请参考以下文章
Vagrant Box 镜像准备:Packer 打包 Centos 6.10 系统
Vagrant Box 镜像准备:Packer 打包 Oracle Linux 8.3 系统
Vagrant Box 镜像准备:Packer 打包 Oracle Linux 7.9 系统
Vagrant Box 镜像准备:Packer 打包 Centos 8.3 系统