Foreman 企业级配置管理解决方案
Foreman 企业级配置管理解决方案
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的架构
- foreman本身只是一个框架,通过smart-proxy代理各种应用程序完成各项功能。 
 
- foreman通过代理DNS、DHCP、TFTP完成了kickstart、cobbler、jumpstart等各种自动化安装系统工具的图形统一管理窗口,实现的结果是只需要在foreman上定制各种模板(pxe、ks),不同的模板还可以嵌套各种片段(snippet)达到统一、简化的目的。完成之后,便可以添加节点,关联定义的各种模板生成各种的pxe和ks文件实现自动化安装。
- foreman通过代理puppet、puppet CA完成对puppet自动签名、puppet环境、class、变量、facter的管理。
- foreman通过ENC和静态组管理class和node之间的关联。
- foreman通过puppet plugin,可以在UI上完成对节点puppet命令的触发动作,触发的方法可以借助puppetkick(已经被遗弃)、mcollective(借助sudo)、puppetssh(借助sshkey)、salt、customrun等各种工具实现。
- foreman可以收集所有节点运行puppet���报告、执行情况。
- foreman还提供了各种搜索、报表等功能,能够更好的展现节点的运行状况。
- foreman除了管理裸机外还可以管理各种虚拟化软件,比如RHEV-M、EC2、VMWware和OpenStack等。
- foreman还可以和LDAP以及AD集成。
- foreman还提供了强大了用户、权限管理入口,可以建立多个用户、多个用户组、还可以对权限进行角色的定义等。不同的权限用户在UI上所看到的功能以及主机是不一样的。
- foreman还提供了所有在UI上操作的Audits(审计)功能,这样可以保障所有用户的操作都有据可查。
2.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 | 
 | 
| 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 | 
 | 
| 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 -vt2.集成mcollective
mcollective是一个类似salt的基于消息队列的并行工作执行系统框架.它使用发布订阅中间件(Publish Subscribe Middleware)这样的现代化工具和通过目标数据(meta data)而不是主机名(hostnames)来实时发现网络资源这样的现代化理念。提供了一个可扩展的而且迅速的并行执行环境。服务器端是被管理端,客户端是分发远程命令的管理端 
 
puppet与MCollective结合,首先MCollective可以用来调度puppet,解决puppet定时执行的问题,其次MCollective可以使用puppet的facts作为过滤器. 最后MCollective能够很好应对多数据中心的生产环境. 
安装 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.yamlmcollective安装服务器端(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模块. 
为了实现跨平台和更好的兼容性,一些系统常见的配置可以使用第三方模块,而不用自己编写 
第三方模块的使用原则
- 优先使用puppetlabs模块
- 不使用复杂度过高的第三方模块(包含细化管理的类)
- 不使用不兼容多个linux系统的第三方模块(实际情况需要兼容centos和suse)
- 避免修改第三方模块,方便日后升级
- 通过foreman的puppet类定义生产环境比较通用的默认参数
1.产品生命周期
- 建立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-ntpghoneycutt-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/testingdevelopment分支,添加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- 同步环境:foreman导入development,testing,production删掉多余的环境,配置->puppet环境->从xxx导入
- 同步puppet模块:配置->puppet类->从xxx导入
- 修改默认参数:设置timezone类的覆盖参数Asia/Shanghai
- 添加到配置组:配置->配置组->centos_system->timezone
- 修改开发机�����为development环境
- 修改主机环境属性:去掉环境配置,从主机组继承
- 设置->- 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-mingchao2.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 =====- 创建新项目 foreman
- 添加foremansftp服务器tools->deployment->configuration->+
 
 本地代码 实时同步到远程/etc/puppet/environments/development/
 
 mapping选择跟目录
 
- 配置ctrl+s同步到远程tools->deployment->options->ctrl+s
- 下载远程代码 
 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 > ~/.rpmmacros3.制作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 -vtForeman 企业级配置管理解决方案的更多相关文章
- 《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案
		本章内容提要 ● 理解企业级应用的安全顾虑 ● 理解Hadoop尚未为企业级应用提供的安全机制 ● 考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hado ... 
- Sentry 企业级数据安全解决方案 - Relay 运行模式
		内容整理自官方开发文档 Relay 可以在几种主要模式之一下运行,如果您正在配置 Relay server 而不是使用默认设置,那么事先了解这些模式至关重要. 模式存储在配置文件中,该文件包含 rel ... 
- Sentry 企业级数据安全解决方案 - Relay 配置选项
		Relay 的配置记录在文件 .relay/config.yml 中.要更改此位置,请将 --config 选项传递给任何 Relay 命令: ❯ ./relay run --config /path ... 
- Sentry 企业级数据安全解决方案 - Relay 监控 & 指标收集
		内容整理自官方文档 系列 Sentry 企业级数据安全解决方案 - Relay 入门 Sentry 企业级数据安全解决方案 - Relay 运行模式 Sentry 企业级数据安全解决方案 - Rela ... 
- Sentry 企业级数据安全解决方案 - Relay 项目配置
		内容整理自官方文档 系列 Sentry 企业级数据安全解决方案 - Relay 入门 Sentry 企业级数据安全解决方案 - Relay 运行模式 Sentry 企业级数据安全解决方案 - Rela ... 
- Sentry 企业级数据安全解决方案 - Relay 操作指南
		内容整理自官方文档 本篇回顾了我们在自托管外部使用 Relay 时的操作指南,即在您的硬件上运行的 Relay 并将事件转发到 sentry.io. 系列 Sentry 企业级数据安全解决方案 - R ... 
- Sentry 企业级数据安全解决方案 - Relay PII 和数据清理
		本文档描述了一种我们希望最终对用户隐藏的配置格式.该页面仍然存在的唯一原因是当前 Relay 接受这种格式以替代常规数据清理设置. 以下文档探讨了 Relay 使用和执行的高级数据清理配置的语法和语义 ... 
- 《Hadoop》对于高级编程Hadoop实现构建企业级安全解决方案
		本章小结 ● 理解企业级应用的安全顾虑 ● 理解Hadoop尚未为企业级应用提供的安全机制 ● 考察用于构建企业级安全解决方式的方法 第10章讨论了Hadoop安全性以及Hadoop ... 
- (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)
		转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ... 
随机推荐
- Web项目练习总结(错误校正篇)
			老师布置任务,从SVN上弄个项目来练练手,熟悉下过程. myeclipse安装SVN 然后把MobileManageSys下下来 然后漫长的等待... 然后配置数据库,导入,这里用的是SQLyog,其 ... 
- node.js动态调试
			supervisor node ./bin/www npm start 不会动态运行和调试程序,相当于动态部署 
- Java编程思想-泛型-简单泛型例子
			基本类型无法做为类型参数 代码如下: /** * */ package test.thinkinjava.Generics; import java.util.ArrayList; import ja ... 
- web.xml配置详解 (及<context-param>配置作用 )
			http://blog.csdn.net/guihaijinfen/article/details/8363839 <context-param>配置作用 http://blog.csdn ... 
- OC语法简写
			NSNumber [NSNumber numberWithInt:666] 等价于 @666 [NSNumber numberWithLongLong:666ll] 等价于 @666ll [NSNum ... 
- Best Time to Buy and Sell sock II
			Say you have an array for which the ith element is the price of a given stock on day i. Design an al ... 
- eclipse中如何导入jar包
			如图,首先右键点击项目,选择最下面的properties, 然后进去之后点击java build path,右边会出来4个选项卡,选择libraries, 这时候最右边会有多个选项,第一个add ja ... 
- php图片上传
			//处理图片 private function imageDeal($param){ $arrType=array('image/jpg','image/bmp','image/png','image ... 
- 【行为型】Strategy模式
			策略模式意图将解决问题的算法分别封装成一个个对象的形式,并使这些算法对象相互间可被替换.模式比较简单,对于策略对象结构的设计,可抽象一个抽象基类,并定义好相关算法(纯)虚接口,并由各种具体的实现算法子 ... 
- Spring事务管理中@Transactional的propagation参数
			所谓事务传播性,就是被调用者的事务与调用者的事务之间的关系.举例说明. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //in A.java Class A { @Tr ... 
