Foreman 企业级配置管理解决方案

时间:2022-08-31 17:42:22

Foreman 企业级配置管理解决方案

笔记本 puppet foreman


构建运维体系

本文是构建运维体系的其中一个关键环节.

什么是 foreman

Foreman 是一个集成的 数据中心生命周期管理工具 ,提供了服务开通,配置管理以及报告功能,和 Puppet Dahboard 一样,Foreman也是一个 Ruby on Rails 程序. Foreman 和 Dashboard 不同的地方是在于,Foreman 更多的关注服务开通和管理数据中心的能力,例如和引导工具,PXE启动服务器,DHCP服务器及服务 器开通工具进行集成.

Foreman 机器统一管理平台:

  • Foreman与puppet集成使用,作为puppet的前端使用
  • Foreman可以作为外部节点分类器
  • Foreman可以通过facter组件显示系统信息,并且可以收集puppet报告
  • Foreman可以管理大规模节点,实现配置版本的回溯

1.foreman的架构

  1. foreman本身只是一个框架,通过smart-proxy代理各种应用程序完成各项功能。
    Foreman 企业级配置管理解决方案
  2. foreman通过代理DNS、DHCP、TFTP完成了kickstart、cobbler、jumpstart等各种自动化安装系统工具的图形统一管理窗口,实现的结果是只需要在foreman上定制各种模板(pxe、ks),不同的模板还可以嵌套各种片段(snippet)达到统一、简化的目的。完成之后,便可以添加节点,关联定义的各种模板生成各种的pxe和ks文件实现自动化安装。
  3. foreman通过代理puppet、puppet CA完成对puppet自动签名、puppet环境、class、变量、facter的管理。
  4. foreman通过ENC和静态组管理class和node之间的关联。
  5. foreman通过puppet plugin,可以在UI上完成对节点puppet命令的触发动作,触发的方法可以借助puppetkick(已经被遗弃)、mcollective(借助sudo)、puppetssh(借助sshkey)、salt、customrun等各种工具实现。
  6. foreman可以收集所有节点运行puppet���报告、执行情况。
  7. foreman还提供了各种搜索、报表等功能,能够更好的展现节点的运行状况。
  8. foreman除了管理裸机外还可以管理各种虚拟化软件,比如RHEV-M、EC2、VMWware和OpenStack等。
  9. foreman还可以和LDAP以及AD集成。
  10. foreman还提供了强大了用户、权限管理入口,可以建立多个用户、多个用户组、还可以对权限进行角色的定义等。不同的权限用户在UI上所看到的功能以及主机是不一样的。
  11. foreman还提供了所有在UI上操作的Audits(审计)功能,这样可以保障所有用户的操作都有据可查。

2.foreman发展线路图

Foreman 企业级配置管理解决方案

安装Foreman

本文所有操作基于centos 6.2环境

系统要求

1.支持平台

以下系统支持installer.并经过官方测试

  • Red Hat Enterprise Linux 6 or 7
  • CentOS or Scientific Linux 6 or 7
  • Fedora 19
  • Debian 7 (Wheezy)
  • Ubuntu 14.04 (Trusty)
  • Ubuntu 12.04 (Precise)

2.puppet兼容性

Puppet version Foreman installer Smart proxy Report/fact processors External node classifier
0.25.x Not supported Untested Untested Supported *
2.6.0 - 2.6.5 Not supported Untested Untested Supported *
2.6.5+ Not supported Supported Supported Supported
2.7.x Supported Supported Supported Supported
3.0.x Limited support 1.1 or higher Supported Supported
3.1.x - 3.4.x 1.1 or higher 1.1 or higher Supported Supported
3.5.x 1.4.3 or higher 1.4.2 or higher Supported Supported
3.6.0+ 1.4.3 or higher 1.5.1 or higher Supported Supported
4.x Not supported Not supported Untested Untested

3.Facter兼容性

  • Foreman 兼容 Facter 1.x 版本
  • Facter 2.x版本需要Foreman installer和Foreman 1.4.2以上版本才支持

3.防火墙配置

端口 协议 Required For
53 TCP,UDP DNS Server
67, 68 UDP DHCP Server
69 UDP * TFTP Server
80, 443 TCP
    服务 - 使用 Apache + PassengerHTTP & HTTPS Foreman web
3000 TCP HTTP access to Foreman web UI - using standalone WEBrick service
3306 TCP Separate MySQL database
5910 - 5930 TCP VNC控制器
5432 TCP PostgreSQL数据库
8140 TCP
    Puppet Master
8443 TCP Smart Proxy, open only to Foreman

Foreman Installer

Foreman installer 是Foreman简化的安装程序,包含了一整套foreman的puppet模块,通过rpm包和添加必要的配置的来完成foreman的安装。包含必要组件:Foreman web UI, Smart Proxy, Passenger,和可选组件 TFTP, DNS and DHCP servers.
官方强烈建议使用installer安装.而不是只用安装包.这样能大量减少手工配置.
默认配置:

  • Apache HTTP with SSL (使用puppet的证书)
  • Foreman running under mod_passenge
  • Smart Proxy configured for Puppet, TFTP and SSL
  • Puppet master running under mod_passenger
  • Puppet agent configured
  • TFTP server (under xinetd on Red Hat platforms)

可选配置:

  • ISC DHCP server
  • BIND DNS server

1.实验安装

all in one 模式安装, 指在让初学者了解更多foreman组件,达到快速应用.
安装foreman-installer,通过foreman-installer部署foreman支持两种方式:

  • foreman-installer -i 交互式安装
  • foreman-installer –help 说明-v展现详细的过程,–noop模拟不实际操作.参数安装

配置源及安装foreman-installer

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm yum -y install epel-release http://yum.theforeman.org/releases/1.7/el6/x86_64/foreman-release.rpm yum -y install foreman-installer

配置主机名

sed -i 's/HOSTNAME=.*$/HOSTNAME=gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com/' /etc/sysconfig/network
hostname -f#foreman ip 192.168.137.2
hostname gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com
echo "192.168.137.2 gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com full" >>/etc/hosts

禁用selinux

setenforce 0
sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config

安装foreman-proxy,puppet,foreman,dns,fstp

foreman-installer \
--verbose \ --foreman-admin-username=admin \ --foreman-admin-password="Yi7YCjy2xEsU9YVc" \ --enable-foreman \ --enable-foreman-cli \ --enable-foreman-plugin-bootdisk \ --enable-foreman-plugin-setup \ --enable-foreman-proxy \ --enable-puppet \ --foreman-db-adapter=mysql2 \ --foreman-db-type=mysql \ --foreman-environment=production \ --foreman-version=present \ --foreman-proxy-dns=true \ --foreman-proxy-dns-forwarders=8.8.8.8 \ --foreman-proxy-dns-forwarders=223.6.6.6 \ --foreman-configure-epel-repo=false \ --foreman-proxy-dns-zone=yw.cwh.com

测试puppet

puppet agent -vt

安装puppet客户端(puppet ip 192.168.137.3)

echo '192.168.137.2 gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com' >> /etc/hosts
hostname gz-nb-cwh-test.yw.cwh.com
sed -i 's/HOSTNAME=.*$/HOSTNAME=gz-nb-cwh-test.yw.cwh.com/' /etc/sysconfig/network
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum -y install puppet 
puppet agent -vt

/etc/puppet/puppet.conf

[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    ssldir = $vardir/ssl

[agent]
    classfile = $vardir/classes.txt
    olocalconfig = $vardir/localconfig
    server = gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com 
    certname = gz-nb-cwh-test.yw.cwh.com
    report = true
    pluginsync = true
    masterport = 8140
    environment = production
    listen = false
    splay = false
    splaylimit = 1800
    runinterval = 1800
    noop = false
    configtimeout = 120
    usecacheonfailure = true

测试puppet

puppet agent -vt

2.集成mcollective

mcollective是一个类似salt的基于消息队列的并行工作执行系统框架.它使用发布订阅中间件(Publish Subscribe Middleware)这样的现代化工具和通过目标数据(meta data)而不是主机名(hostnames)来实时发现网络资源这样的现代化理念。提供了一个可扩展的而且迅速的并行执行环境。服务器端是被管理端,客户端是分发远程命令的管理端
Foreman 企业级配置管理解决方案
puppet与MCollective结合,首先MCollective可以用来调度puppet,解决puppet定时执行的问题,其次MCollective可以使用puppet的facts作为过滤器. 最后MCollective能够很好应对多数据中心的生产环境.
Foreman 企业级配置管理解决方案

安装 rabbitmq-server

yum install rabbitmq-server -y
mkdir -p /var/run/rabbitmq
chmod 775 /var/run/rabbitmq/ -R
/etc/init.d/rabbitmq-server start

加载插件并设置监听61613端口

ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin/rabbitmq-env /usr/sbin/rabbitmq-env
ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin/rabbitmq-plugins /usr/sbin/rabbitmq-plugins 
rabbitmq-plugins enable rabbitmq_stomp
rabbitmq-plugins enable rabbitmq_management
echo '[{rabbitmq_stomp, [{tcp_listeners, [{"0.0.0.0",61613}]}]}].' > /etc/rabbitmq/rabbitmq.config
/etc/init.d/rabbitmq-server restart
netstat -ntlp|grep beam

删除默认账号创建账号密码

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl delete_user guest
rabbitmqctl add_user cwh 123456
rabbitmqctl add_user admin 123456
rabbitmqctl add_user web_admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" cwh  ".*" ".*" ".*"
rabbitmqctl set_permissions -p "/" web_admin  ".*" ".*" ".*"
rabbitmqctl set_permissions -p "/" admin  ".*" ".*" ".*"
rabbitmqctl list_users
rabbitmqctl list_permissions -p "/"

登陆http://192.168.137.2:15672/#/exchanges
添加mcollective_broadcast = topic,mcollective_directed = direct
mcollective安装客户端(ip:192.168.137.2)

yum install mcollective-* -y

/etc/mcollective/client.cfg

main_collective = mcollective
collectives = mcollective
libdir = /usr/libexec/mcollective
logger_type = console
#loglevel = debug
loglevel = warn
# Plugins
securityprovider = psk
plugin.psk = a36cd839414370e10fd281b8a38a4f41
direct_addressing = 1
plugin.rabbitmq.initial_reconnect_delay = 0.01
plugin.rabbitmq.max_reconnect_delay = 30.0
plugin.rabbitmq.use_exponential_back_off = true
plugin.rabbitmq.back_off_multiplier = 2
plugin.rabbitmq.max_reconnect_attempts = 0
plugin.rabbitmq.randomize = false
connector = rabbitmq
plugin.rabbitmq.vhost = /
plugin.rabbitmq.pool.size = 1
plugin.rabbitmq.pool.1.host = 192.168.137.2
plugin.rabbitmq.pool.1.port = 61613
plugin.rabbitmq.pool.1.user = cwh
plugin.rabbitmq.pool.1.password = 123456
plugin.rabbitmq.pool.1.ssl = false
# Facts
factsource = yaml
plugin.yaml = /etc/mcollective/facts.yaml

mcollective安装服务器端(ip:192.168.137.3)

yum install mcollective mcollective-* -y

/etc/mcollective/server.cfg

main_collective = mcollective
collectives = mcollective
libdir = /usr/libexec/mcollective
logfile = /var/log/puppet/mcollective.log
loglevel = debug
daemonize = 1
# --rabbitmq Plugins--
securityprovider = psk
plugin.psk = a36cd839414370e10fd281b8a38a4f41
direct_addressing = 1
connector = rabbitmq
plugin.rabbitmq.initial_reconnect_delay = 0.01
plugin.rabbitmq.max_reconnect_delay = 30.0
plugin.rabbitmq.use_exponential_back_off = true
plugin.rabbitmq.back_off_multiplier = 2
plugin.rabbitmq.max_reconnect_attempts = 0
plugin.rabbitmq.randomize = false
plugin.rabbitmq.timeout = -1
plugin.rabbitmq.pool.size = 1
plugin.rabbitmq.vhost = /
plugin.rabbitmq.pool.1.host = 192.168.137.2
plugin.rabbitmq.pool.1.port = 61613
plugin.rabbitmq.pool.1.user = cwh
plugin.rabbitmq.pool.1.password = 123456
plugin.rabbitmq.pool.1.ssl = false
# --Puppet provider specific options--
plugin.service.provider = puppet
plugin.service.puppet.hasstatus = true
plugin.service.puppet.hasrestart = true
plugin.puppet.command = puppet agent
plugin.puppet.splay = true
plugin.puppet.splaylimit = 30
plugin.puppet.config = /etc/puppet/puppet.conf
# --Facts--
#factsource = yaml
factsource = facter
plugin.yaml = /etc/mcollective/facts.yaml

启动服务端

/etc/init.d/mcollective start
chkconfig mcollective on

在客户端测试mco命令

mco ping -v
mco puppet -v runonce

配置foreman和foreman-proxy

管理"->"设置"->"puppet"-> puppetrun:true
vim /etc/foreman-proxy/settings.d/puppet.yml
:puppet_provider: customrun
:customrun_cmd: /usr/bin/mco
:customrun_args: puppet runonce -I
/etc/init.d/foreman-proxy restart   
#最后在foreman页面上点击"运行puppet"进行测试#"

foreman 配置

foreman web界面

待补充

配置管理

1.环境

这里的环境对应Puppet environments, puppet的环境配置,主要的作用是用来做灰度发布.一般使用production和development区分生产环境和非生产环境.只有在非生产环境,经过充分测试的代码,才允许发布到生产环境中.foreman提供的环境管理功能如下:

  • 从现有的puppet环境中导入配置. 配置-环境-从gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com导入.
  • 可以手动创建环境.配置-环境-新建puppet环境
  • 指定主机的应用环境
  • 与主机组绑定相应的环境

默认配置下,导入四中环境common,development,example_env,production.
环境只能绑定主机和组,主机的优先级高于组


2.puppet类

foreman的puppet类, 相当于puppet的模块. 模块一般指实现单一功能配置. 比如配置mysql,dns,ntp. foreman对puppet模块有较高的要求,为了现可复用性. init.pp必须包含足够需要的变量定义.通过变量覆盖,实现配置的差异化.在传统的puppet部署中,要把一个模块应用到一个客户端,需要实例化这个类.然而在foreman中,只要把类绑定组或主机.就相当于实例化.
把master上/etc/puppet/modules/导入到foreman
配置->puppet类-> 从gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com导入

单个模块里面,一般包含很多子类. 如果从页面导入, 会把子类一起导入.在foreman上,子类是可以不导入的, 为了轻便管理类.可以通过配置,过滤掉子类.

/usr/share/foreman/config/ignored_environments.yml
:filters:
  - !ruby/regexp '/params$/'   - !ruby/regexp '/base$/'   - !ruby/regexp '/install$/'   - !ruby/regexp '/service$/'   - !ruby/regexp '/config$/' 

puppet有大量 写好的而且很优秀的第三方模块.可以访问https://forge.puppetlabs.com 查看需要的模块.同时建议初学者阅读这些模块代码.
这里安装dns和ntp模块,然后导入到foreman中.导入的时候可以选择导入的环境.这一步是实现灰度发布的关键.

puppet module install ghoneycutt-dnsclient
puppet module install puppetlabs-ntp

puppet模块的规范,详细查看深入puppet,这里不再深入

/etc/puppet/modules/ntp/
├── file
├── lib
│   └── puppet
│       └── parser
│           └── functions
│               └── ntp_dirname.rb
├── manifests
│   ├── init.pp
├── templates
│   └── ntp.conf.erb    

发现dns和ntp的默认服务器ip地址 并不是我们需要的. 同时dns,ntp服务器的配置,也可能由于机房不同发生变化,很明显的一个例子就是腾讯的服务器,配置的是内网的dns服务器.这里需要用到foreman一个关键的功能代理参数

配置->puppet类->dnsclient->智能代理参数
nameserver-> 勾选覆盖,同时修改默认值,然后提交

["121.10.118.123","114.114.114.114","223.5.5.5","223.6.6.6","112.124.47.27","202.96.128.143","202.96.128.166","202.96.128.86"]

同理,修改ntp类的servers默认值为

['time.nist.gov', '0.asia.pool.ntp.org','1.asia.pool.ntp.org','2.asia.pool.ntp.org','3.asia.pool.ntp.org','time-a.nist.gov', 'time.windows.com','ntp.fudan.edu.cn','61.129.42.44', '43.119.133.233']

3.配置组

配置组的作用是把几个类组合在一起. 以比较便捷的方式,让主机或主机组匹配多个类.
比如dns和ntp属于系统级别配置可以组合成centos_system 配置组,而mysql,php可以组合成centos_lnmp 配置组.

配置->配置组->新建配置组
name -> centos_system
添加 dnsclient,ntp


4.主机组

顾名思义,就是把有共同特征的主机组成一个组. 从puppet的角度上可以分为.测试组和线上生产环境组. 从项目差异化的角度看,可以按照项目的不同和地理位置的差异来区分.组是可以继承的,
组的规划相对复杂,需要考虑线上线下服务器的实际情况. 这里新建一个开发组,并关联centos_system配置组,用来测试puppet的ntp和dns模块.

配置-> 主机组->新建主机组
名称-> 开发组
puppet类->可用配置组->centos_system->add

主机组的关注点:

  • 网络->域名 配置正确的域名是实现域名自动解析的关键.
  • 操作系统 主机组规定系统架构,主要应用于自动重装系统方面.
  • 主机组->puppet CA,主puppet服务器 这里是实现跨网络,分布式架构的关键
  • puppet类 应用不同的puppet模块,实现配置的主要手段
  • 参数 实现机器配置差异化

5.主机

主机->所有主机
主机是管理的最小单元,所有的配置,优先级别最高的单元.
从规模化管理的角度,劲量避免编辑主机配置,造成的特例差异化.因为特例差异化,往往会提高维护成本.


6.变量

变量的优先级顺序,从低到高

  • 全局变量 配置->全局变量 对所有主机生效
  • 设置选项 管理->设置
  • 域名级别 架构->域名->参数
  • 操作系统级别 主机->操作系统->参数
  • 主机组级别 配置->主机组->参数
  • 主机级别 所有主机->编辑->参数

看到这里,完成了上述步骤,试试在foreman web 上勾选gz-nb-cwh-test.yw.cwh.com主机 点击运行puppet


puppet模块设计

首先,明确puppet的应用场景,一般分为一次性初始化配置和长久配置.

  • 一次性初始化配置 常用于软件环境的构建 比如 foreman-installer
  • 长久配置是实现系统环境和服务的统一.包含服务的自动恢复,减少人工处理

系统配置涉及众多方面的内容比如dns 日志切割 ssh配置等,是一项长期优化的过程.建议使用xmind思维导图,先规划好配置的具体项目,然后逐个跟进实现puppet模块.
Foreman 企业级配置管理解决方案

为了实现跨平台和更好的兼容性,一些系统常见的配置可以使用第三方模块,而不用自己编写
第三方模块的使用原则

  • 优先使用puppetlabs模块
  • 不使用复杂度过高的第三方模块(包含细化管理的类)
  • 不使用不兼容多个linux系统的第三方模块(实际情况需要兼容centos和suse)
  • 避免修改第三方模块,方便日后升级
  • 通过foreman的puppet类定义生产环境比较通用的默认参数

1.产品生命周期

Foreman 企业级配置管理解决方案

  • 建立git版本控制,master为production,建立developpment,testing分支
  • 配置puppet agent和foreman环境,本地开发属于developpment,内网属于testing

这里,我使用github作为仓库,首先访问https://github.com ,并创建仓库.

yum install git -y
cd /etc/puppet/environments/production
touch README.md
git init
git add README.md
git commit -m "first commit"
git config --global user.name "caiwenhao"
git config --global user.email "caiwenhao186@gmail.com"
git config --global credential.helper 'cache --timeout 3600' 
git remote add origin https://github.com/caiwenhao/foreman.git
git push -u origin master

卸载掉之前安装的puppet modules,重新安装到/etc/puppet/environments/production/modules

puppet module uninstall puppetlabs-ntp
puppet module uninstall ghoneycutt-dnsclient --ignore-changes
puppet module uninstall puppetlabs-stdlib
puppet module install -i /etc/puppet/environments/production/modules ghoneycutt-dnsclient
puppet module install -i /etc/puppet/environments/production/modules puppetlabs-ntp

ghoneycutt-dnsclient,puppetlabs-ntp是不用修改源码可用的模块,直接提交到master分支

git add manifests/ modules/
git commit -m "install modules ghoneycutt-dnsclient puppetlabs-ntp"
git push -u origin master

创建一个development分支

cd /etc/puppet/environments/
git clone https://caiwenhao@github.com/caiwenhao/foreman.git development
cd development
git checkout -b development 
git push origin development:development
git branch --set-upstream development origin/development

创建一个testing分支

cd /etc/puppet/environments/
git clone https://caiwenhao@github.com/caiwenhao/foreman.git testing
git push origin testing:testing
git branch --set-upstream testing origin/testing

development分支,添加saz-timezone模块

cd  /etc/puppet/environments/development/
puppet module install -i /etc/puppet/environments/development/modules saz-timezone
git add *
git commit -m "add modules saz-timezone"
git push
  1. 同步环境:foreman导入development,testing,production删掉多余的环境,配置-> puppet环境->从xxx导入
  2. 同步puppet模块:配置->puppet类->从xxx导入
  3. 修改默认参数:设置timezone类的覆盖参数Asia/Shanghai
  4. 添加到配置组:配置->配置组->centos_system->timezone
  5. 修改开发机�����为development环境
  6. 修改主机环境属性:去掉环境配置,从主机组继承
  7. 设置->puppet:update_environment_from_facts = false

至此集合git分支管理的多环境配置,已经初步搞定. 后续通过入development->testing->production的灰度发布模式,管理foreman.

把github仓库迁移至公司仓库

mkdir /data/git
git init
git clone --bare https://github.com/caiwenhao/foreman.git
cd foreman.git/
git remote add git-mingchao http://caiwenhao@git.mingchao.com/git/caiwenhao/foreman.git
git push git-mingchao master
git push --mirror git-mingchao

2.RubyMine

比较推荐使用IDE查看和编写puppet模块,工具提升效率. 这里推荐RubyMine 是目前比较好的支持puppet语法,支持通过sftp方式同步代码,支持git管理,支持远程命令. 一切都是为了开发更加本地化.
访问 http://www.jetbrains.com/ruby/ 下载 RubyMine 7

name:syn
===== LICENSE BEGIN =====
43740-12042010
00001nNPIOrzPwvJjS"Y8Nafc6RELU
nlmUzXskacwerrfwQvstArii0nTYef
ZX"QYSGu6yLR8pJECxe6TyjYB9V1OQ
===== LICENSE END =====
  1. 创建新项目 foreman
  2. 添加foreman sftp服务器 tools->deployment->configuration->+
    Foreman 企业级配置管理解决方案
    本地代码 实时同步到远程/etc/puppet/environments/development/
    Foreman 企业级配置管理解决方案
    mapping 选择跟目录
    Foreman 企业级配置管理解决方案
  3. 配置ctrl+s同步到远程 tools->deployment->options-> ctrl+s
  4. 下载远程代码
    tools->deployment->browse remote host->右键->download from here

构建rpm生态系统

1.创建第三方软件仓库

  • 大部分rpm可以通过yumdownloader从第三方源下载
  • 小部分定制版本的rpm则需要通过rpmbuild或fpm制作

配置第三方源,方便下载已有rpm包

wget http://www.atomicorp.com/installers/atomic
sh atomic
yum install rpmforge-release.x86_64
rpm -ivh http://ftp.sjtu.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm

安装createrepo工具并创建目录

yum install yum-fastestmirror createrepo -y
yum clean all
yum makecache
yum check-update mkdir /data/web/yum/centos/6.2/{i386,x86_64,noarch,updates,SRPMS} -p
cd /data/web/yum/centos/6.2/
ls|xargs -i createrepo {}

安装yumdownloader工具,从第三方源下载需要的rpm包

yum -y install yum-utils
cd /data/web/yum/centos/6.2/
yumdownloader --resolve curl bzip2 lsof 
cd /data/web/yum/centos/6.2/
ls | xargs -i createrepo --update {}

/etc/yum.repos.d/mcyw.repo

[mcyw]
baseurl=http://192.168.137.2:8080/centos/6.5/x86_64
gpgcheck=0
enabled=1
name=mcyw centos
priority=1 

/etc/httpd/conf.d/yum.conf

Listen :8080
<VirtualHost 192.168.137.2:8080>
DocumentRoot /data/web/yum/
ServerName xxx
ErrorLog /var/log/httpd/yum_error.log
CustomLog /var/log/httpd/yum_access.log combined
</VirtualHost>

2.制作rpm之rpmbuild

配置rpm编译环境

yum -y install gcc rpm-build pcre-devel
mkdir -p /data/rpm
cd  /data/rpm
rpm --showrc|grep _topdir|awk -F/ '{print $2}'|xargs mkdir
echo %_topdir  /data/rpm > ~/.rpmmacros

3.制作rpm之fpm

安装fpm

yum -y install ruby rubygems ruby-devel
gem sources -a http://ruby.taobao.org/
gem sources --remove http://rubygems.org/
gem install fpm

4.加速yum的几种方法

foreman问题集锦

常见错误

1.证书错误

实验环境的终极处理办法

#master:192.168.137.2 处理
puppet cert clean -all
/bin/mv /var/lib/puppet/ssl /data/backup/tmp/
mkdir -p /var/lib/puppet/ssl
/etc/init.d/foreman-proxy 
/etc/init.d/puppetmaster start
puppet agent -vt
ruby /etc/puppet/node.rb gz-nb-cwh-poreman-192.168.137.2.yw.cwh.com
/etc/init.d/puppetmaster stop
/etc/init.d/foreman-proxy start

#agent:192.168.137.3 处理
find /var/lib/puppet/ssl -name gz-nb-cwh-test.yw.cwh.com.pem -delete
puppet agent -vt