介绍
本章节以node_exporter为例子
初始化环境
yum -y install rpm-build
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
打包
cd ~/rpmbuild/RPMS/
tree
.
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│ └── node_exporter-0.17.0.tar.gz
├── SPECS
│ └── nodenode_exporter.spec
└── SRPMS
└── node_exporter-0.17.0-1.src.rpm
cat> SPECS/nodenode_exporter.spec <<EOF
Name: node_exporter
Version: 0.17.0
Release: 1
Summary: node_exporter install package
License: GPL
Source: node_exporter-0.17.0.tar.gz
%description
node_exporter install package
%prep
%setup -q
%build
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_expoter sends log files to Logstash or directly to Elasticsearch.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/node_exporter-0.17.0/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
EOF
%preun
echo "卸载前清理"
systemctl disable node_exporter.service
systemctl stop node_exporter.service
%postun
echo "卸载删除"
rm -rf /usr/lib/systemd/system/node_exporter.service
rm -rf /usr/local/node_exporter-0.17.0/
%pre
echo "安装前检测环境变量"
%install
echo "安装"
cp -rf %{_builddir}/node_exporter-0.17.0 /usr/local/node_exporter-0.17.0
%post
echo "安装后"
echo $HOSTNAME
systemctl disable node_exporter.service
systemctl start node_exporter.service
%files
%doc
%changelog
EOF
rpmbuild -ba SPECS/nodenode_exporter.spec
分发
ansible -i host all -m copy -a "src=/root/rpmbuild/RPMS dest=/root/"
部署和卸载
#安装
ansible -i host all -m copy -a "rpm -ivh node_exporter-0.17.0-1.x86_64.rpm"
#卸载
ansible -i host all -m copy -a "rpm -e node_exporter-0.17.0-1.x86_64"
通过yum仓库部署
createrepo /root/rpmbuild/RPMS/
python -m SimpleHTTPServer 80
cat /etc/yum.repos.d/local.repo
[local]
name=localyum
baseurl=http://172.16.0.144:80/
enabled=1
gpgcheck=0
#打包
while true; do echo 1 ; sleep 1; done
#更新仓库
createrepo /root/rpmbuild/RPMS/
#yum makecache && yum update