`
7shao
  • 浏览: 49607 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

puppet详细安装

阅读更多
puppet详细安装
首先要确定服务器端和客户端都安装了
gcc-c++、openssl、openssl-devel
cronte -e
*/2  *    *    *    *   /usr/sbin/ntpdate clock.nc.fukuoka-u.ac.jp >/dev/null 2>&1


rpm -Uvh http://mirrors.sohu.com/fedora-epel/5Server/x86_64/epel-release-5-4.noarch.rpm
yum -y install mysql* ruby-mysql ruby ruby-devel ruby-irb ruby-rdoc ruby-ri
查看版本ruby -v
cd /usr/local/src/
wget http://puppetlabs.com/downloads/facter/facter-latest.tgz
tar -zxvf facter-latest.tgz && cd facter-1.6.6
ruby install.rb
服务器端安装puppet-server

rpm -Uvh http://mirrors.sohu.com/fedora-epel/5Server/x86_64/epel-release-5-4.noarch.rpm
yum install puppet-server
vi /etc/hosts
192.168.1.231     server.cbcv.net      server
192.168.1.232     client.cbcv.net      client
vi /etc/sysconfig/network
HOSTNAME=server.cbcv.net

service puppetmaster start
时间需要同步
/usr/sbin/ntpdate clock.nc.fukuoka-u.ac.jp



客户端
rpm –Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
yum install puppet









puppetd --server server.cbcv.net --test

服务端:
[root@server ~]# md5sum /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem
f833cbbd129456d3e4df5daec0b612b8 /var/lib/puppet/ssl/ca/signed/client.puppet.com.pem
客户端:
[root@client ~]# md5sum /var/lib/puppet/ssl/certs/client.puppet.com.pem
f833cbbd129456d3e4df5daec0b612b8 /var/lib/puppet/ssl/certs/client.puppet.com.pem
上边揭黑部分的两串代码相同,说明客户端和服务端的认证签名完成。
注意:
如果想重新生成签名可以先在服务端用puppetca –clean client.puppet.com清除服务端的证书,然后在客户端删除/var/lib/puppet这个文件夹,删除之后再认证的话可以重新生成这个文件夹
在主服务器上/etc/puppet/manifests

vi /etc/puppet/manifests/site.pp
node default{
   file { "/tmp/tmp1.txt":
           content=> "hello, first puppet manifest";
}
}


然后在客户端执行:
puppetd --test --server server.cbcv.net
再查看/tmp/看是否生成tmp1.txt






1、puppet 用户管理特性
allows_duplicates: 支持同样的用户拥有同样的uid
manages_homedir: 管理用户的home目录,删除和新建
manages_passwords: 管理用户密码
manages_solaris_rbac: 管理角色和普通用户
puppet 用户资源管理参数
allowdupe: 是否允许相同的uid用户存在,可以设置的值为true或者false.
auths:  指定用户的认证方式。多个认证方式可用数组列出来
comment: 用户的描述。
ensure: 指定用户是否存在,可以设置的值为present,absent,role.
gid :用户的组ID。
groups:指定该用户属于那些组的成员.
home: 用户的主目录。
managehome: 指定用户是否管理home主目录.
provider
指定用provider,用什么命令来执行用户操作,可用的provider有:
directoryservice OS X 上面的用户管理命令,不详述,有需求请参考原文档
hpuxuseradd hp-ux 系统的用户管理命令
ldap ldap方式管理用户
pw freebsd上面的用户管理
user_role_add solaris 上面的用户管理
useradd linux上面的用户管理







puppet和facter下载地址:


http://downloads.puppetlabs.com/puppet/
ruby下载地址:

http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz

环境准备:
[root@server bin]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#127.0.0.1              localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.1.231      server.cbcv.net        server
192.168.1.232      client.cbcv.net        client
[root@server bin]# more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=server.cbcv.net

<客户端也是类似一样,略......>



tar -zxvf ruby-1.8.7.tar.gz
cd ruby-1.8.7
./configure --prefix=/usr/local/ruby
make
make install
操作系统PATH路径:
export PATH=/usr/local/ruby/bin:$PATH

查看ruby --version版本

安装facter
tar -zxvf facter-1.6.7.tar.gz
cd facter-1.6.7            
ruby install.rb

安装puppet
tar -zxvf puppet-2.7.13.tar.gz
[root@server puppet-2.7.9]# cp conf/auth.conf /etc/puppet/
[root@server puppet-2.7.9]# cp conf/namespaceauth.conf /etc/puppet/
[root@server puppet-2.7.9]# cp conf/redhat/puppet.conf /etc/puppet/
[root@server puppet-2.7.9]# cp conf/redhat/server.init /etc/init.d/puppetmaster
[root@server puppet-2.7.9]# chmod +x /etc/init.d/puppetmaster
[root@server puppet-2.7.9]# /etc/init.d/puppetmaster start
Starting puppetmaster: /bin/bash: /usr/sbin/puppetmasterd: No such file or directory
                                                           [FAILED]
  
[root@server puppet-2.7.9]# cp sbin/puppetmasterd /usr/sbin/
[root@server puppet-2.7.9]# chmod -R 777 /usr/sbin/puppetmasterd
[root@server puppet-2.7.9]# cp sbin/puppetmasterd /bin/puppetmasterd
[root@server puppet-2.7.9]# chmod -R 777 /bin/puppetmasterd
[root@server puppet-2.7.9]# /etc/init.d/puppetmaster start         
Starting puppetmaster: /usr/bin/env: ruby: No such file or directory
                                                           [FAILED]
[root@server puppet-2.7.9]# ln -s /usr/local/ruby/bin/
erb         filebucket  pi          puppetdoc   rdoc        ruby       
facter      irb         puppet      ralsh       ri          testrb     
[root@server puppet-2.7.9]# ln -s /usr/local/ruby/bin/ruby /usr/bin/
[root@server puppet-2.7.9]# /etc/init.d/puppetmaster start         
Starting puppetmaster: Could not prepare for execution: Got 6 failure(s) while initializing: change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet; change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet; change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet; change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet; change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet; change from absent to directory failed: Could not set 'directory on ensure: Could not find group puppet
                                                           [FAILED]
[root@server puppet-2.7.9]# useradd puppet
[root@server puppet-2.7.9]# /etc/init.d/puppetmaster start
Starting puppetmaster:                                     [  OK  ]

[root@server sbin]# pwd
/usr/local/src/puppet-2.7.9/sbin
cp -r * /usr/sbin/



[root@server manifests]# chkconfig --add puppetmaster
[root@server manifests]# chkconfig puppetmaster on





客户端其它安装和服务器安装相同,除了用cp conf/redhat/client.init /etc/init.d/puppet
[root@localhost puppet-2.7.9]# cp conf/auth.conf /etc/puppet/
[root@localhost puppet-2.7.9]# cp conf/namespaceauth.conf /etc/puppet/
[root@localhost puppet-2.7.9]# cp conf/redhat/puppet.conf /etc/puppet/
[root@localhost puppet-2.7.9]# cp conf/redhat/client.init /etc/init.d/puppet
[root@localhost puppet-2.7.9]# chmod +x /etc/init.d/puppet
[root@localhost puppet-2.7.9]# service puppet start
Starting puppet: /bin/bash: /usr/sbin/puppetd: No such file or directory
                                                           [FAILED]
[root@localhost puppet-2.7.9]# cp sbin/puppetd /usr/sbin/puppetd
[root@localhost puppet-2.7.9]# service puppet start            
Starting puppet: /usr/bin/env: ruby: No such file or directory
                                                           [FAILED]
[root@localhost puppet-2.7.9]# chmod +x /usr/sbin/puppetd
[root@localhost puppet-2.7.9]# service puppet start      
Starting puppet: /usr/bin/env: ruby: No such file or directory
                                                           [FAILED]
[root@localhost puppet-2.7.9]# ln -s /usr/local/ruby/bin/ruby /usr/bin/
[root@localhost puppet-2.7.9]# /etc/init.d/puppet start
Starting puppet:                                           [  OK  ]




进行测试:
在服务器端执行:
puppetca --list
应该是无
在客户端执行 puppetd --server server.cbcv.net  --test
再到服务器端执行:
puppetca –s client.cbcv.net
clinet.cbcv.net (BF:5D:58:D0:F2:06:8C:FB:5C:AA:08:80:87:DC:92:20)

如果看到了客户端的证书请求,
针对客户端请求为
puppetca –s client.cbcv.net
用下面的命令对所有证书请求签名:
puppetca -s –a

在主服务器上/etc/puppet/manifests

vi /etc/puppet/manifests/site.pp
node default{
   file { "/tmp/test.txt":
           content=> "hello, Test";
}
}

再重启一下服务器service puppetmaster restart 和客户端service puppet restart
再执行puppetd --server server.cbcv.net  --test
看/tmp下面是不是有test.txt文件了


2、文件传输








默认时间vim /etc/puppet/puppet.con
server = puppet-server #指定服务端

runinterval =1800 ###默认是30分钟,可以修改此处的值,单位为秒
在客户端修改即可!最好重启一下server puppet restart

puppet 如何全客户端自动签名
a.vim /etc/puppet/puppet.conf
[puppetmaster]
autosign=true      #增加这两行
autosing=/etc/puppet/autosign.conf 
#增加这两行添加
* 表示所有,或者添加域名,IP或者网段。举例:
b.再编辑 /etc/puppet/autosign.conf**.test.com192.168.0.1/24




错误总结<此错误是因为用了yum去安装。看到别人写的OK......>:
第一次认证的时候报下边的错误:
[root@client ~]# puppetd --server server.cbcv.net  --test
err: Could not retrieve catalog from remote server: certificate verify failed
我做测试发现的原因有三种:
第一:是hostname没有设置好,在安装前一定要把hostname设置好,设置好之后尽量重启机器。实在不行就删了重新安装。
第二:时间不同步,时间不同步也会报认证失败的错误,可以用date设置时间,只要不是差得太多就没事。
第三:是ssl的问题,在你用的这个客户端puppet已经做过其他的机器的客户端的情况下,因为已经生成的有证书,可能会和现在的冲突,把/var/lib/puppet/ssl这个文件夹删掉之后就行了。


1.3配置c/s模式的puppet的实验环境
Puppet的的客户端和服务端是靠ssl链接的,在服务端有一个自签名的根证书,在安装软件的时候自动生成。每个客户端的证书要经过根证书签名才能和服务器连接。所以首先要在客户端执行下面的命令来请求服务器签名证书。
puppetd --server server.cbcv.net --test


执行上面的命令,客户端将生成证书,并且把证书签名请求发到服务器端。登录到服务
器端,执行下面的命令查看是否有客户端的证书请求:
puppetca --list 这个查看没有签名的证书
client..cbcv.net
如果看到了客户端的证书请求,用下面的命令对所有证书请求签名:
puppetca –s client.cbcv.net
或者puppetca -s –a 这条命令是对所有为签名的请求签名。
签过名之后可以看到:
[root@server ~]# puppetca --list --all
puppetca --list --all
+ client.cbcv.net (A1:6C:15:FF:36:8C:F0:9A:89:BA:E1:2B:39:34:5C:3A)
+ server.cbcv.net  (75:66:8E:DD:F0:A4:F2:ED:6F:B0:88:74:A0:CD:C8:48)

如果出现这些就说明签名完成。



















puppet记录
1.       修改文件属性的site.pp
file { "/home/1.txt":
       owner => "root",
       group => "root",
       mode  => 644,
}
2.执行shell命令
exec { "echo111":
cwd => "/tmp",
command => " echo abcd >> /home/1.txt",
user => "root",
path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
}

3.文件传输
需要有fileserver.conf例如
[abc]
path /etc/puppet/files/
allow *
其中 site.pp的设置如下
file { "/home/test.txt":
        source  => "puppet://puppet/abc/test.txt",
        }
此处的abc为fileserver.conf中定义模块
其前面的蓝色部分是puppet server端的名称(在hosts中解析,未使用DNS)

4.服务检查及修改
可以通过puppet对一些服务进行检查。puppet是通过service命令操作的。所以,只能针对在/etc/init.d/目录下的服务
site.pp的配置示例
service {  portmap:
ensure => "stopped",
}
ensure 还有一个参数是 running 如果服务停止,puppet会让服务启动。

puppet.conf
[puppetmasterd]
        reports = store
        hostprivkey = /etc/puppet/ssl/private_keys/sh-zj1.tele.trac.i.vmx.cn.pem
        hostcsr = /etc/puppet/ssl/csr_sh-zj1.tele.trac.i.vmx.cn.pem
        hostpubkey = /etc/puppet/ssl/public_keys/sh-zj1.tele.trac.i.vmx.cn.pem
        hostcert = /etc/puppet/ssl/certs/sh-zj1.tele.trac.i.vmx.cn.pem
        autosign = true


5.cron
cron { "test1":    #title部分,可用来作为注释。
ensure     => absent,   #删除相应的crontab
command => "( /bin/echo 123 >/home/lipengfei/abc )",   #要执行的命令
user => "root",       #添加到root用户下的crontab中
minute     => "*/3",        #即第一个星号
hour => ['2-4'],                    #即第二个星号
monthday => "21",        #即第三个星号
month     => "12",         #即第四个星号
weekday  => "2",           #即第五个星号
}
说明:absent 选项可以支持 cron中的5个时间位置,如:monthday => absent,
即把 monthday 对应该的位置至为 *



增加多个site.pp

可以先在site.pp中增加

import "test.pp"

然后再在里面执行需要操作的内容。

可用puppetd --server server.cbcv.net  --test进行测试。

如果有报错:notice: Ignoring --listen on onetime run
notice: Skipping run of Puppet configuration client; administratively disabled; use 'puppet Puppet configuration client --enable' to re-enable.

那么需要在客户端执行puppet agent --enable即可。

puppet agent --disable为关闭。







资源:
常用的资源主要有以下几个:
file:文件管理
package:软件包管理
service:系统服务管理
cron:配置定时任务
exec:运行shell命令
定义一个资源,需要指定资源的类型和title。看下例:


file { “/etc/password”: name => “/etc/passwd”, owner => root, group => root, mode => 644; } 上边代码:file是指定资源的类型,第二行的”/etc/password”是资源的title,title的作用是让puppet能唯一识别这个资源。后边的三个就不用说了。 下一个例子:

file { "/etc/ssh/sshd_config": mode => 0644, owner => root , group => root, source => puppet://$fileserver/ssh/sshd_config ", } Service { “sshd”: subscribe => File[/etc/sshd/sshdconfig], }

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics