Поиск по этому блогу

пятница, 28 октября 2011 г.

Puppet и Puppetmaster на Debian-Ubuntu

И так после недельного битья головой о гранит науки дало свои результаты:
Начнем все по шагово...
====SERVER=====
Установим сервер кукловода
#apt-get install puppetmaster
далее правим конфиг, т.е разрешим нашей подсети функционировать на все катушку
#nano /etc/puppet/fileserver.conf
разкомментил нужную нам подсеть:
[files]
path /etc/puppet/files
# allow *.example.com
# deny *.evil.example.com
allow 192.168.5.0/24
[plugins]
# allow *.example.com
# deny *.evil.example.com
allow 192.168.5.0/24

далее пропишем клиентов и сам сервер в хост, чтобы он понимал о чем идет речь.
#nano /etc/hosts
127.0.0.1 localhost
192.168.5.174 debian1.debian1 debian1
добавим это:
192.168.5.174 puppetmaster.debian1.debian1 puppetmaster
192.168.5.175 puppet1.debian3.debian3 puppet1
(здесь добавляются все клиенты puppet)

Конфигурационные файлы клиента и сервера хранятся в каталоге /etc/puppet. Наиболее важный из них — файл /etc/puppet/manifests/site.pp, содержащий манифест.
Он хранит описание состояний и должен существовать только на сервере. Для удобства отладки добавим в него простейшую конфигурацию:

# nano /etc/puppet/manifests/site.pp
class passwd {
file { "/etc/passwd":
owner => root,
group => root,
mode => 644,
}
}
node default {
include passwd
}
Также в конфиг puppet'a внесем следующий конфиг
#nano /etc/puppet/puppet.conf
вклинем это
[main]
# Стандартные пути к каталогам
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
# Расположение инструмента Facter,
# используемого для получения информации об ОС
factpath=$vardir/lib/facter
# Синхронизировать плагины
# (установил плагины на сервер — они копируются на клиентов если их нет то выставите false)
pluginsync=true
<!--Если плагинов нет то ставьте данный пункт false-->
# Каталог с шаблонами (о них читай ниже)
templatedir=$confdir/templates

====CLIENT====
Теперь на клиентской машине установим сам puppet
#apt-get install puppet
#nano /etc/puppet/puppet.conf
вклинем это
[main]
# Стандартные пути к каталогам
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
# Расположение инструмента Facter,
# используемого для получения информации об ОС
factpath=$vardir/lib/facter
# Синхронизировать плагины
# (установил плагины на сервер — они копируются на клиентов если нет плагинов тогда false)
pluginsync=true
<!--Если плагинов нет то ставьте данный пункт false-->
# Каталог с шаблонами (о них читай ниже)
templatedir=$confdir/templates

Далее необходимо перевести режим запуска puppet в yes
#nano /etc/default/puppet
# Defaults for puppet - sourced by /etc/init.d/puppet
# Start puppet on boot?
START=yes
# Startup options
DAEMON_OPTS=""

Далее прописать в /etc/hosts пути
#nano /etc/hosts
было так
127.0.0.1 localhost
192.168.5.175 debian3.debian3 debian3
добавили это
192.168.5.174 puppetmaster.debian1.debian1 puppetmaster
192.168.5.175 puppet1.debian3.debian3 puppet1

сформируем ключ
#puppetd --server puppetmaster.debian1.debian1 --waitforcert 60
если у вас вышла ошибка после запуска

root@debian3:~# puppetd --server puppetmaster.debian1.debian1 --waitforcert 60
Could not prepare for execution: Could not create PID file: /var/run/puppet/agent.pid
То вам надо остановить puppet клиент

root@debian3:~# /etc/init.d/puppet stop
Stopping puppet agent.
и можно повторно запустить преобразование сертификата.
#puppetd --server puppetmaster.debian1.debian1 --waitforcert 60
здесь debian1.debian1 сервер

====SERVER=====
посмотрим определил ли сервер клиента
#puppetca -la
root@debian1:~# puppetca -la
+ debian1.debian1 (48:B4:ED:39:51:D7:C4:8A:4E:44:DE:93:7F:39:26:61)
debian3.debian3 (6C:4C:10:07:5E:D0:EB:2B:49:CC:F8:FA:9A:1E:FB:9B)

Теперь подпишем третью машину на сертификат
#puppetca --sign {имя клиента}
root@debian1:~# puppetca --sign debian3.debian3
notice: Signed certificate request for debian3.debian3
notice: Removing file Puppet::SSL::CertificateRequest debian3.debian3 at '/var/lib/puppet/ssl/ca/requests/debian3.debian3.pem'
Или же подписываем сразу все:
#puppetca --sign --all

Далее это....
#nano /etc/puppet/manifests/site.pp
впишем
import "modules"
import "nodes"

Далее пропишем клиента на сервере
#nano /etc/puppet/manifests/nodes.pp
node basenode {
include hosts
}
node 'puppet1.debian3.debian3' inherits basenode {
}

далее создадим каталоги и файлы
mkdir -p /etc/puppet/modules/hosts/files
mkdir /etc/puppet/modules/hosts/manifests
touch /etc/puppet/modules/hosts/files/hosts
touch /etc/puppet/modules/hosts/manifests/init.pp

Далее вклинем то что у нас в /etc/hosts
#nano /etc/puppet/modules/hosts/files/hosts
192.168.5.175 puppetmaster.debian1.debian1 puppetmaster
192.168.5.174 puppet1.debian2.debian2 puppet1
192.168.5.178 puppet2.debian3.debian3 puppet2

#nano /etc/puppet/modules/hosts/manifests/init.pp
class hosts {
file { "/etc/hosts":
owner => root,
group => root,
mode => 775,
source => "puppet:///hosts/hosts"
}
}
====CLIENT====
Далее введем команду чтобы проверить наш клиент

#puppetd -vt
root@debian3:~# puppetd -vt
info: Retrieving plugin
info: Caching catalog for debian3.debian3
info: Applying configuration version '1319272945'
notice: Finished catalog run in 0.04 seconds

====SERVER====P.S.
Послушать порт
#netstat -an|grep LISTEN|grep 8140
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN

Либо так
#lsof -i :8140
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
puppet 23586 puppet 7u IPv4 771014 0t0 TCP *:8140 (LISTEN)
значит все окай!

Сервер работает на порту 8140, так что в случае проблем, проверьте настройки сети, клиентские машины должны иметь доступ к порту 8140 на управляющем сервере.
Проверим в браузере
https://192.168.5.75:8140
должно выйти это
The indirection name must be purely alphanumeric, not ''
Проверить запущен ли сервер или клиент можно так
#service puppetmaster status
master is running.

#service puppet status
agent is running.


P.S. и так при первой попытке у меня все заработало нормально единственной проблемой была та, что клиент не тянул конфиг с сервера. После переустановки возникла другая проблема, а именно:

err: Could not retrieve catalog from remote server: getaddrinfo: Name or service not known
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

среда, 12 октября 2011 г.

Радио/видео вещание по Lan IceCast на Debian squeeze

          И так в данном посте будет описание и метод поднятия сервера онлайн вещания mp3 музыки. приступим....
Установим необходимые пакеты тажке у вас должен быть установлен апач, но я сразу поднимал LAMP сервер
#apt-get install libshout-dev
#apt-get install libmp3lame-dev (данный пакет почему то не установился на другой тачке)
#apt-get install libxml2-dev
#aptitude install javacc libjavacc-maven-plugin-java jtb javacc-doc g++ gpp partimage-doc vacation clisp clisp-dev clisp-doc partimage fldiff gawk perl python-cxx python-cxx-dev
Далее закачаем сам проигрыватель
#wget http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz
распакуем
#tar -zxvf ices-0.4.tar.gz
зайдем в распакованный архив
#cd ices-0.4
ну и установим его
#./configure
#make
#make install
#apt-get install icecast2
отредактируем сам конфиг, в нем я ничего не трогал кроме пароля админа(я выделил жирным шрифтом)
#nano /etc/icecast2/icecast.xml

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>123</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>123</relay-password>
        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>123</admin-password>
    </authentication>
Далее необходимо включить демон меняем false на true
#nano /etc/default/icecast2

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true
теперь можно запустить его коммандой
#/etc/init.d/icecast2 start
Теперь перейдет к настройке Icec 0.4
Сделаем конфиг IceCast(по идеи шаблон конфига должен быть в /usr/local/etc/ices.conf.dist и его можно скопировать в /usr/local/etc/ices.conf)
#nano /usr/local/etc/ices.conf

<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
<!-- Путь до плей листа(текстовый документ)-->
<Playlist>
<!-- This is the filename used as a playlist when using the builtin playlist handler. -->
<File>/home/radio/playlist.txt</File>
<!-- Set this to 0 if you don’t want to randomize your playlist, and to 1 if you do. -->
<!-- Настройка перемешивания треков, 1 – перемешивать 0 – играть по порядку -->
<Randomize>1</Randomize>
<!--One of builtin, perl, or python. -->
<Type>builtin</Type>
<!-- Module name to pass to the playlist handler if using  perl or python.
If you use the builtin playlist handler then this is ignored -->
<Module>ices</Module>
<!-- Set this to the number of seconds to crossfade between tracks.
Leave out or set to zero to disable crossfading (the default).
<Crossfade>5</Crossfade> -->
</Playlist>
<Execution>
<!-- Set this to 1 if you want ices to launch in the background as a daemon -->
<Background>0</Background>
<!-- Set this to 1 if you want to see more verbose output from ices -->
<Verbose>0</Verbose>
<!-- This directory specifies where ices should put the logfile, cue file
and pid file (if daemonizing). Don’t use /tmp if you have l33t h4x0rz
on your server. -->
<BaseDirectory>/tmp</BaseDirectory>
</Execution>
<!--Настройка подключения в серверу-->
<Stream>
<Server>
<!-- Hostname or ip of the icecast server you want to connect to -->
<Hostname>192.168.5.75</Hostname>
<!-- Port of the same -->
<Port>8000</Port>
<!-- Encoder password on the icecast server -->
<Password>123</Password>
<!-- Header protocol to use when communicating with the server.
Shoutcast servers need «icy», icecast 1.x needs «xaudiocast», and 
icecast 2.x needs «http». -->
<Protocol>http</Protocol>
</Server>
<!-- Настройки точки монтирования(канала)-->
<!-- The name of the mountpoint on the icecast server -->
<Mountpoint>/radio</Mountpoint>
<!-- The name of the dumpfile on the server for your stream. DO NOT set
this unless you know what you’re doing.
<Dumpfile>ices.dump</Dumpfile> -->
<!-- The name of you stream, not the name of the song! -->
<Name>localhost</Name>
<!-- Genre of your stream, be it rock or pop or whatever -->
<Genre>Default genre</Genre>
<!-- Longer description of your stream -->
<Description>Default description</Description>
<!-- URL to a page describing your stream -->
<URL>http://192.168.5.75</URL>
<!-- 0 if you don’t want the icecast server to publish your stream on the yp server, 1 if you do -->
<Public>1</Public>
<!-- Настройка битрейта потока -->
<!-- Stream bitrate, used to specify bitrate if reencoding, otherwise
just used for display on YP and on the server. Try to keep it accurate -->
<Bitrate>128</Bitrate>
<!-- If this is set to 1, and ices is compiled with liblame support,
ices will reencode the stream on the fly to the stream bitrate. -->
<Reencode>0</Reencode>
<!-- Number of channels to reencode to, 1 for mono or 2 for stereo -->
<!-- Sampe rate to reencode to in Hz. Leave out for LAME’s best choice
<Samplerate>44100</Samplerate> -->
<Channels>2</Channels>
</Stream>
</ices:Configuration>
Далее создадим каталог куда будет складываться вся музыка
#mkdir /home/radio
#cd /home/radio/
далее зальем сначала музыку в созданную папку, а после вводим комманду для создания плей листа
#ls > playlist.txt
Теперь запустим 
#ices -c /usr/local/etc/ices.conf
Если не запускается командой выше, или запускается и начинает использовать стандартный конфиг, то запустите Ices командой:
#ices
ну и в браузере проверим должно все работать.
http://localhost:8000/radio
Также чтобы прослушать созданное радио на удаленном узле откройте проигрываетель и пропишите выше указанную ссылку.
Теперь поднимем сервер видео транляции
И так статью слепил с двух ссылок 1 и 2
Создадим файл /etc/ezstream.xml и добавим в него следующее:

<ezstream>
    <url>http://192.168.5.75:8000/video</url>
    <sourcepassword>123</sourcepassword>
    <format>THEORA</format>
    <filename>/etc/ezstream.m3u</filename>
    <shuffle>1</shuffle>
    <svrinfoname>Test TV</svrinfoname>
    <svrinfourl>http://ylsoftware.com либо ваш IP</svrinfourl>
    <svrinfogenre></svrinfogenre>
    <svrinfodescription>Test TV-Chanel</svrinfodescription>
    <svrinfobitrate>200</svrinfobitrate>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
    <reencode>
        <enable>1</enable>
        <encdec>
            <format>THEORA</format>
            <match>.avi</match>
            <decode>ffmpeg2theora -x 720 -y 400 -a 0 -v 4 --title "@M@" -o - "@T@"</decode>
        </encdec>
        <encdec>
            <format>THEORA</format>
            <match>.mpg</match>
            <decode>ffmpeg2theora -x 720 -y 400 -a 0 -v 4 --title "@M@" -o - "@T@"</decode>
        </encdec>
    </reencode>
</ezstream>
И сделаем его испольняемым 
#chmod +x  /etc/ezstream.xml 

Для запуска ezstream в качестве демона создайте скрипт следующего содеражния:(но я его не добавлял запускаю в ручную)
#!/bin/sh
ezstream -c /etc/ezstream.xml >/dev/null 2>/dev/null &
И добавьте его в автозапуск. Для этого нужно дописать стрчку вызова скрипта в /etc/init.d/rc.local
Далее
Создадим в данном пути фаил для плей листа, куда внесем путь к нашему фильму
#nano /etc/ezstream.m3u
/home/nosensus/video/house_md_s08e01_rus_eng.avi
Сделаем данный фаил исполняемым
#chmod +x /etc/ezstream.m3u
Далее установим проигрыватель
#apt-get install ffmpeg2theora
#apt-get install ezstream
Запустим наш сервер
#ezstream -c /etc/ezstream.xml
Ну и теперь пройдем по ссылке http://127.0.0.1:8000/video.ogg