Varnish – Asennus ja konfigurointi
Mikä on varnish?
Varnish on välityspalvelin eli reverse proxy. Se hoitaa internetistä tulleiden pyyntöjen välittämisen palvelimelle tehokkaasti, mikä mahdollistaa palvelimelle suuremman kävijämäärän sekä pienentää sivuston latausnopeutta.
Suorituskyvyn testaus
Apachen suorituskykyä kannattaa testata ennen Varnishin asennusta, jotta näkee kuinka paljon Varnish on nopeuttanut palvelimen toimintaa.
Varnishin asennuksen jälkeen luvut voi vaikka nostaa tuhanteen ja 99% pyynnöistä saa silti vastauksen alle viidessä sekunnissa.
Esimerkki
$ab -n 100 -c 100 http://esimerkki.org/
-c HTTP yhteyksien määrä
-n Pyyntöjen määrä
Asennus
Asennettaan Varnish ja konfiguroidaan se jakamaan sisältöä portin 80 kautta. Sisältö haetaan portin 8080 kautta webpalvelimelta (apache).
$sudo apt-get install varnish
muokataan tiedostoa /etc/varnish/default.vcl
$sudo nano /etc/default/varnish
backend default {
.host = ”127.0.0.1”;
.port = ”8080”;
}
Muokataan tiedostoa /etc/default/varnish ja poistetaan risuaidat Alternative 2 kohdasta. Lopputulos näyttää tältä:
$sudo nano /etc/default/varnish
DAEMON_OPTS=”-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m”
Apachen konfigurointi
$sudo nano /etc/apache2/ports.conf
NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080
Muutetaan myös Virtual Hostin tiedostoa. Jos käytät muuta Virtual Hostia kuin default, tee muutokset siihen.
$sudo nano /etc/apache2/sites-available/default
<VirtualHost 127.0.0.1:8080>
Lopuksi uudelleen käynnistetään Varnish ja Apache.
$sudo service apache2 restart
$sudo service varnish restart
Lisämateriaalia: https://www.varnish-cache.org/docs/2.1/index.html
Linux projekti – Mumble-palvelin, lopputestaus ja raportointi, vk 49 ja 50
Projektin viimeistelyksi toistin aiemmin tehdyt asennukset ym. Ubuntu 12.04 live-cd:llä, siltä varalta että palvelimeni asetukset olisivat sotkeneet ylläpitolisäosan asennusta.
Testiasennus, Ubuntu 12.04 live-cd
Ice
Pohjalla oli LAMP-palvelin asennettuna.
$ sudo apt-get update
$ sudo apt-get install php-zeroc-ice
$ sudo service apache2 restart
/home/ubuntu/public_html/index.php
<?php
phpinfo();?>
Avaa http://localhost/~ubuntu/ Etsi (ctrl+f) ice version. Pitäisi olla esim. 3.4.2, jos löytyy niin Ice on ladattu. Aiemmin käyttämieni ohjeiden mukaan Ice piti lisätä php dynamic extensioneihin. Huomasin, että Ice lisää itsensä oletuksena sinne asennuksen yhteydessä.
/home/ubuntu/public_html/
$ wget https://github.com/downloads/Kissaki/MumPI/MumPI_2.2.3.tar.gz
$ tar xvf MumPI_2.2.3.tar
MumPIn tekijän mukaan seuraaville kansioille pitää antaa kaikki oikeudet:
/MumPI
/MumPI/data
/MumPI/tmp
$ sudo chmod 777 *directory*
chmod oikeudet
owner/group/others
# 4 = read, 2 = write, 1 = execute
# 4+2 = 6 = read/write
# 4+2+1= 7 = read/write/execute
Avaa http://localhost/~ubuntu/MumPI/install/.
Sama ongelma ilmeni taas. http://localhost/~ubuntu/MumPI/admin/ näyttää pelkkää tyhjää.
$ sudo tail- 10 /var/log/apache2/error.log
…
[error] [client 127.0.0.1] PHP Warning: require_once(Ice.php): failed to open stream: No such file or directory in /home/ubuntu/public_html/MumPI/classes/ServerInterface.php on line 6
[error] [client 127.0.0.1] PHP Fatal error: require_once(): Failed opening required ’Ice.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /home/ubuntu/public_html/MumPI/classes/ServerInterface.php on line 6
…
En löytänyt ratkaisua ongelmalle.
Ylläpito ja hallinta Mumble-clientin kautta
Web-interface ei toiminut, joten tässä on lyhyt opas Mumble-palvelimen ylläpitoon asiakasohjelman kautta.
Ensiksi luodaan Mumble superuser
$sudo dpkg-reconfigure mumble-server
Kirjaudu Mumble-palvelimelle superuserina. Nyt voit muokata käyttäjäoikeuksia ja luoda pysyviä kanavia. Ensiksi kannattaa luoda uusi käyttäjä itsellesi ja antaa sille admin oikeudet, ettei superuseria tarvitse käyttää turhaan.
Käyttäjä pitää kuitenkin ensin rekisteröidä palvelimelle, ennen kun sille voi määritellä oikeuksia. Valikkorivistä Self -> Register.
Kuvassa luotu pysyvä kanava, jossa 2 rekisteröityä käyttäjää.
Lisäsin käyttäjän testikanavan admin ryhmään.
Projektin loppuraportti
Alunperin suunnittelin Mumble-palvelimen ylläpidon toteuttamista web-käyttöliittymän kautta, mutta niiden asentaminen epäonnistui useista yrityksistä huolimatta. Asennuksen yhteydessä ilmenneet ongelmat vaativat epäkäytännöllisiä ratkaisuja(jotka eivät välttämättä edes toimineet), mikä kyseenalaistaa Mumble-palvelimen web-käyttöliittymän laatua.
Jatkossa aion hoitaa oman palvelimeni ylläpidon asiakasohjelman kautta ja ellei olosuhteet vaadi nimenomaan web-käyttöliittymää, niin suosittelisin muille samaa.
Projekti eteni aikataulun mukaisesti varsinkin alkuvaiheissa, mutta ongelmien ilmetessä eteneminen hidastui ja projektin vaiheiden toteuttaminen ei mennyt aikataulun mukaisesti.
Itse Mumble-palvelin toimii täydellisesti ja on täysin käyttökelpoinen jokapäiväiseen käyttöön. Palvelimen saa myös salasanan määrittelemällä, jolla voidaan estää ulkopuolisten pääsy palvelimelle.
Jos huomasit virheitä projektin toteuttamisessa tai tiedät ratkaisun ongelmiin, niin jätäthän kommentin.
Aiemmat projektin vaiheet:
https://miroseppala.wordpress.com/2012/10/30/linux-projekti-mumble-palvelin-ja-sen-yllapito/
https://miroseppala.wordpress.com/2012/11/13/linux-projekti-mumble-palvelin-viikot-44-45-ja-46/
https://miroseppala.wordpress.com/2012/11/27/linux-projekti-mumble-palvelin-viikot-47-ja-48/
Tämä projekti on osana Tero Karvisen Linux-Projekti kurssia
http://terokarvinen.com/2012/aikataulu-%E2%80%93-linux-projekti-ict4tn018-1
Linux keskitetty hallinta – Mumble/mumble-server moduuli
Aihe
Valitsin moduulin aiheen tekemäni Linux projektin mukaan. Alunperin moduuli olisi asentanut mumble web interfacelle tarvittavat osat ja muuttanut asetuksia oikeiksi.
Pluginit eivät kuitenkaan suostuneet toimimaan, joten moduulin aihetta piti muuttaa. Päätin tehdä moduulin joka asentaa mumble clientin ja luo ohjeet palvelimeen yhdistämiselle. Tein myös manifestin mumble-palvelimen asennukselle, ylläpidolle ja muokkaamiselle. Ihanteena oli asentaa moduulin avulla palvelin yhelle koneelle ja clientti(jossa on palvelimen tiedot valmiiksi) muihin koneisiin.
En kuitenkaan saannut selvitettyä, minne Mumble tallentaa palvelimien tiedot, vaikka yritin $ dpkg –listfiles mumble komennolla sitä etsiä. Päädyin luomaan ohjeet kaikkiin asennattaviin koneisiin. Ohjeesta löytyy tiedot, miten Mumble-palvelimeen yhdistetään.
Palvelimen asentaminen yhdelle koneelle ja clientin muihin ei onnistunut, tämä johtui lähinnä ajan puutteesta. En ehtinyt perehtymään erilaisiin ratkaisuihin. Tein kuitenkin manifestin Mumble-palvelinta varten, joka kuitenkin toimii erikseen ajettaessa.
Mumble moduuli
$ tree -A
.
├── files
│ ├── mumblelogin
│ └── mumble-server.ini
└── manifests
├── init.pp
└── murmur.pp
#init.pp
class mumble {
package { ’mumble’:
ensure => installed,
}file { ’mumblelogin’:
path => ’/tmp/mumblelogin’,
ensure => file,
source => ’/home/user/puppet/modules/mumble/files/mumblelogin’,
}
}
Testaus:
$ sudo puppet apply –modulepath ./modules/ -e ’include mumble’
notice: /Stage[main]/Mumble/File[mumblelogin]/ensure: defined content as ’{md5}9278b9cec74ef097bc8182dc23c76240’
notice: Finished catalog run in 0.16 seconds
Mumble-palvelin manifesti
#installs mumble-server with correct configurations (/etc/mumble-server.ini). Ensures server keeps running
#restarts mumble-server when /etc/mumble-server.ini is modified
#murmur.pp
package { ’mumble-server’:
ensure => present,
before => File [’/etc/mumble-server.ini’],
}file { ’mumble-server.ini’:
path => ’/etc/mumble-server.ini’,
ensure => present,
source => ’/home/user/puppet/modules/mumble/files/mumble-server.ini’,
require => Package [’mumble-server’],
}service { mumble-server:
require => Package [’mumble-server’],
ensure => running,
subscribe => File [’/etc/mumble-server.ini’]
}
Testaus:
/puppet/modules/mumble/manifests/
$ sudo puppet apply murmur.pp
notice: /Stage[main]//File[mumble-server.ini]/ensure: defined content as ’{md5}53e5161ea9da10ac7bf21235da38b784’
notice: /Stage[main]//Service[mumble-server]/ensure: ensure changed ’stopped’ to ’running’
notice: /Stage[main]//Service[mumble-server]: Triggered ’refresh’ from 1 events
notice: Finished catalog run in 0.31 seconds
Lähteet:
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet
http://docs.puppetlabs.com/learning/modules1.html
Linux projekti – Mumble-palvelin viikot 47 ja 48
Viikko 47 ja 48 – Ongelmanratkaisua
Viikolla 46 ilmeni ongelmia MAP:n asennuksen kanssa. Kun asennussivu pyysi tietokannan nimeä, se ei hyväksynyt sitä aluksi. Poistin tietokannan ja tein uuden phpmyadminin kautta oletusasetuksia käyttäen, tällä kertaa MAP hyväksyi kaiken ja loi tarvittavat taulut.
Asennuksen jälkeen MAP:n ylläpitosivu ei kuitenkaan avautunut. Aloin käymään läpi asennusohjeita tarkistaakseni, että olin tehnyt kaikki oikein. Ohjeista ei kuitenkaan löytynyt mitään hyödyllistä. Kokeilin myös ottaa yhteyttä MAP:n ylläpitäjiin IRC:n kautta, mutta kanava vaikutti kuolleelta ja kukaan ei vastannut.
Useiden tuntien pähkäilyn jälkeen päätin kokeilla toista Mumble-palvelin web interfacea(MumPI). Asennus sujui ongelmitta, mutta sama ongelma ilmeni jälleen kerran ja MumPI:n sivu ei auennut. Vasta tässä vaiheessa tajusin alkaa käymään lokeja läpi, kun alkoi näyttämään siltä, että vika on tuskin MAP:ssa.
$ sudo tail -10 /var/log/apache2/error.log
Lokista paljastui heti Iceen ja PHP:n liittyviä virheitä.
PHP Warning: PHP Startup: Unable to load dynamic library
’/usr/lib/php5/20090626/IcePHP.so’ – /usr/lib/php5/20090626/IcePHP.so: cannot
open shared object file: No such file or directory in Unknown on line 0
Käytin tässä olevaa ratkaisua ja apache ei enää ilmoittanut samasta virheestä.
Seuraava virhe johtui siitä, että olin lisännyt /etc/php5/apache2/php.ini tiedoston dynamic extensions kohtaan extension=/usr/lib/php5/20090626+lfs/IcePHP.so
PHP Warning: Module ’ice’ already loaded in Unknown on line 0
Ratkaisu ongelmaan löytyi täältä. Loki ilmoittaa kuitenkin vielä seuraavista virheistä:
[error] [client …] PHP Warning: require_once(Ice.php): failed to open stream: No such file or directory in /home/*****/public_html/MumPI/classes/ServerInterface.php on line 6
[error] [client …] PHP Fatal error: require_once(): Failed opening required ’Ice.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /home/*****/public_html/MumPI/classes/ServerInterface.php on line 6
Toistaiseksi en ole saannut vielä ratkaistua näitä ongelmia, mutta muutamat linkit näyttivät lupaavilta.
https://github.com/Kissaki/MumPI/wiki/FAQ
Kokeilin FAQ:n ratkaisua, mutta virheilmoitus pysyi samana. Ice.php:n lukeminen ei onnistunut.
http://sourceforge.net/projects/phpmumbleadmin/forums/forum/1065855/topic/5488397
Luin langan läpi, mutta en ole ehtinyt kokeilla vielä siinä tehtyjä toimenpiteitä.
Jatkotoimenpiteet
Poltin jo uuden Ubuntu 12.04 live CD:n, jotta voin kokeilla kaiken asennusta tyhjältä pohjalta, sillä koneella aiemmin tehdyt asiat mm. mumble-djangolla ovat saattaneet jollain tavalla sotkea asioita. Samalla suoritan lopputestauksen ja katson, voiko tekemäni toimeenpiteet toistaa ja saako niistä saman lopputuloksen.
Pahimmassa tapauksessa, jos en saa minkäänlaista web interfacea toimimaan, kirjoitan lyhyehkön oppaan Mumble-palvelimen hallinnasta shellin kautta. Ennen radikaaleja toimenpiteitä aion kuitenkin yrittää ratkaista ongelmaa etsimällä ratkaisua netistä.
Projekti ei ole edennyt täysin aikataulun mukaan, mutta uskon saavani sen valmiiksi ajoissa.
Puppet – Puppet forge/Github module, cookbook
Tässä julkaisussa tehdyt toimenpiteet suoritettiin SSH-yhteyden yli palvelinkoneella, jonka käyttöjärjestelmänä on Ubuntu 12.04.
Puppet Moduuli – reidmv/openssh
Tämä on yksinkertainen moduuli, joka asentaa openssh-palvelimen. Moduulin sivulla kerrotaan moduulin mukautuvan eri käyttöalustoille (debian/redhat).
Ladataan ja puretaan moduuli. Tutkitaan samalla moduulin rakennetta.
$ wget http://forge.puppetlabs.com/reidmv/openssh/0.0.2.tar.gz
$ tar -xvf 0.0.2.tar.gz
$ cd reidmv-openssh-0.0.2/
$ tree -A
.
├── files
│ ├── debian
│ │ └── sshd_config
│ └── redhat
│ └── sshd_config
├── manifests
│ ├── debian.pp
│ ├── init.pp
│ └── redhat.pp
├── metadata.json
├── Modulefile
├── README.md
└── tests
└── ssh.pp
Modulin hakemistossa olevista tekstitiedostoista ei löytynyt ohjeita moduulin käyttöön. Ne listasivat moduulin perustietoja, kuten version, tekijän ja kuvauksen moduulista. Rakenteesta näkee, että debianille ja redhatille on omat manifestinsa sekä _config tiedostonsa. Katsotaan init.pp ja debian.pp manifesteja:
$cd manifests/
$nano init.pp
class openssh {
case $::osfamily {
’RedHat’: { include openssh::redhat }
’Debian’: { include openssh::debian }
default: { notify { ”Class[openssh] does not support $::osfamily”: } }
}}
init.pp näyttäisi suorittavan käyttöjärjestelmän mukaan tarvittavan manifestin ja ilmoittaa, jos käyttöjärjestelmää ei tueta. Seuraavaksi debian.pp
$nano debian.pp
class openssh::debian {
package { ’openssh-server’:
ensure => installed,
before => File[’/etc/ssh/sshd_config’],
}file { ’/etc/ssh/sshd_config’:
ensure => file,
owner => ’root’,
group => ’root’,
mode => ’0600’,
source => ’puppet:///modules/openssh/debian/sshd_config’,
}service { ’ssh’:
ensure => running,
enable => true,
subscribe => File[’/etc/ssh/sshd_config’],
}}
Manifesti näyttäisi asentavan openssh-palvelimen ennen config tiedostolla leikkimistä, file kohdassa moduuli muokkaa /etc/ssh/sshd_config tiedoston moduulin mukaiseksi. Viimeiseksi moduuli pitää huolta, että palvelu pysyy käynnissä ja uudelleen käynnistää palvelun config tiedoston muuttuessa. Seuraavaksi testataan toimiiko manifesti:
$ sudo puppet apply –modulepath modules/ -e ’include reidmv-openssh-0.0.2’
Could not parse for environment production: Syntax error at ’.’ at line 1 on node testikone.home
Moduulia ei voinnut ajaa näin, vaikka syntaksin pitäisi olla oikein, sillä muiden moduulien ajaminen onnistui. Päätin ajaa manifestin käsin:
/puppet/modules/reidmv-openssh-0.0.2/manifests
$ sudo puppet apply init.pp
notice: Finished catalog run in 0.02 seconds$sudo service ssh status
ssh start/running, process 739
Moduuli toimi näin ajettaessa. Tämä moduuli vaikuttaa hyvältä pohjalta laajemmalle moduulille. Vaikka ohjeita ei olekkaan, manifestit ovat sen verran yksinkertaisia, että niistä ymmärtää kunhan osaa perusteet.
Huom. voin vain testata onnistuko manifestin ajaminen, sillä teen nämä testit ssh-yhteyden yli, joten en voi poistaa palvelinta uudelleen asennettavaksi.
Muut ssh moduulit
Modulin mukana ei tullut mitään tarkkoja ohjeita, hieman ylimalkaista Sample Usage kohtaa README:ssä lukuunottamatta. README:n mukaan module on tarkoitettu ssh:n hallintaan. Manifesteja tutkimalla selvisi, että tällä moduulilla voi palvelun asentamisen ja config tiedostojen muuttamisen lisäksi hallita käyttäjiä ja niiden avaimia. Manifestien ajo onnistui ongelmitta, mutta en päässyt selville sen oikeaoppisesta käytöstä. Käyttöystävällisempänä moduuli olisi varmasti käytännöllinen.
kickstandproject/ssh
Tämä moduuli vaikutti jo huomattavasti monimutkaisemmalta reidmv:n moduuliin verrattuna. Manifesteja löytyy clientille, palvelimelle ja parametreille. Moduulilla pystyy asentamaan ssh clientin ja palvelimen, sekä muokkaamaan asetuksia. En täysin ymmärtänyt moduulin toimintaa ja sen ajaminenkin jäi minulle epäselväksi. Tässäkin moduulissa oli ongelmana ohjeiden puuttuminen.
Cookbook moduuli
Tein moduulin joka luo hakemistopuun uusia moduuleita varten. Lisäksi moduuli luo symlinkin tiedostosta toiseen.
#init.pp
class hakemistopuu{
file { [ ”/home/mursu/puppet/modules/moduuli”, ”/home/mursu/puppet/modules/moduuli/manifests”,
”/home/mursu/puppet/modules/moduuli/manifests/test”, ”/home/mursu/puppet/modules/moduuli/files” ]:
ensure => ”directory”,
mode => 644,
}file { ’/home/mursu/puppet/modules/hakemistopuu/manifests/testi’:
ensure => ’link’,
target => ’/home/mursu/puppet/modules/hakemistopuu/manifests/testi2’,
}}
ajetaan
$ sudo puppet apply –modulepath modules/ -e ’include hakemistopuu’
notice: /Stage[main]/Hakemistopuu/File[/home/mursu/puppet/modules/hakemistopuu/manifests/testi]/ensure: ensure changed ’file’ to ’link’
notice: /Stage[main]/Hakemistopuu/File[/home/mursu/puppet/modules/moduuli]/ensure: created
notice: /Stage[main]/Hakemistopuu/File[/home/mursu/puppet/modules/moduuli/files]/ensure: created
notice: /Stage[main]/Hakemistopuu/File[/home/mursu/puppet/modules/moduuli/manifests]/ensure: created
notice: /Stage[main]/Hakemistopuu/File[/home/mursu/puppet/modules/moduuli/manifests/test]/ensure: created
notice: Finished catalog run in 0.12 seconds
Testataan
$ls -l
rwxrwxrwx 1 root root 56 Nov 22 19:34 testi -> /home/mursu/puppet/modules/hakemistopuu/manifests/testi2
$ tree -A moduuli/
moduuli/
├── files
└── manifests
└── testi
Kaikki toimi.
Lähteet:
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet
Puppet – Templates, Parametrized Classes, Defined Types
Tässä julkaisussa tehdyt toimenpiteet suoritettiin SSH-yhteyden yli palvelinkoneella, jonka käyttöjärjestelmänä on Ubuntu 12.04.
Templates
Luodaan template tekstitiedostolle, jolla mainostetaan omaa sivustoa.
/home/mursu/puppet/modules/helloworld
$ tree -A
# -A = Print ANSI lines graphic indentation lines, kun viivat eivät näy
.
├── manifests
│ └── init.pp
└── templates
└── helloworld.erb
Luodaan manifesti
$cd manifests/
$nano init.pp
#init.pp
class helloworld{
$sisalto=”miroseppala.wordpress.com”
file {’helloworld’:
path => ’/tmp/helloworld’,
ensure => present,
content => template(’helloworld/helloworld.erb’),
}
}
Luodaan template
$ cd ..
$cd templates/
$nano helloworld.erb
templaten sisältö:
See you at:
<%= sisalto %>!
Ajetaan:
$ sudo puppet apply –modulepath /home/mursu/puppet/modules/ -e ’include helloworld’
notice: /Stage[main]/Helloworld/File[helloworld]/ensure: created
notice: Finished catalog run in 0.02 seconds
Tiedosto on nyt luotu ja sen sisältö näyttää tältä:
$cat /tmp/helloworld
See you at:
miroseppala.wordpress.com!
Parametrized Classes
Muutetaan ssh-clientin oletusporttia
.
│
├── manifests
│ └── init.pp
└── templates
└── ssh_config.erb
$nano init.pp
#init.pp
class ssh-client($sshclient_port=22) {package { ’openssh-client’:
ensure => present,
}file { ’/etc/ssh/ssh_config’:
ensure => file,
require => Package [’openssh-client’],
content => template(’ssh-client/ssh_config.erb’),
}service { ’ssh’:
require => Package [’openssh-client’],
ensure => running,
enable => true,
hasrestart => true,
hasstatus => true,
subscribe => File[’/etc/ssh/ssh_config’],
}
}
$nano ssh_config.erb (näkyvissä vain muutettu osa)
…
Port <%= sshclient_port %>
…
testataan
$sudo puppet apply –modulepath /home/mursu/puppet/modules/ -e ’class{”ssh-client”:sshclient_port=>5555}’
notice: /Stage[main]/Ssh-client/File[/etc/ssh/ssh_config]/content: content changed ’{md5}4f6af4bcca0d680838b8f0bcad640446’ to ’{md5}6d62d5bac62f22a444f9ea4ef2f168c7’
notice: /Stage[main]/Ssh-client/Service[ssh]: Triggered ’refresh’ from 1 events
notice: Finished catalog run in 0.42 seconds
$ssh localhost
ssh: connect to host localhost port 5555: Connection refused
Portti muuttui onnistuneesti.
Defined Types
$ tree -A
├── apache
│ ├── manifests
│ │ ├── init.pp
│ │ └── sites.pp
│ └── templates
│ └── vhost-default.conf.erb
init.pp
define apache::vhost(
$port,
$docroot,
$template = ’apache/vhost-default.conf.erb’,
$priority = ’25’,
$servername = ”,
$serveraliases = ”,
$options = ”Indexes FollowSymLinks MultiViews”,
$vhost_name = ’*’
) {include apache
if $servername == ” {
$srvname = $title
} else {
$srvname = $servername
}
case $operatingsystem {
’centos’, ’redhat’, ’fedora’: { $vdir = ’/etc/httpd/conf.d’
$logdir = ’/var/log/httpd’}
’ubuntu’, ’debian’: { $vdir = ’/etc/apache2/sites-enabled’
$logdir = ’/var/log/apache2’}
default: { $vdir = ’/etc/apache2/sites-enabled’
$logdir = ’/var/log/apache2’}
}
file {
”${vdir}/${priority}-${name}.conf”:
content => template($template),
owner => ’root’,
group => ’root’,
mode => ’755’,
require => Package[’httpd’],
notify => Service[’httpd’],
}
}
sites.pp
apache::vhost {’testhost’:
port => 8081,
docroot => ’/var/www-testhost’,
priority => 25,
servername => ’puppet’,
}
vhost-default.conf.erb
# /etc/puppetlabs/modules/apache/templates/vhost-default.conf.erb
# ************************************
# Default template in module puppetlabs-apache
# Managed by Puppet
# ************************************Listen <%= port %>
NameVirtualHost <%= vhost_name %>:<%= port %>
<VirtualHost <%= vhost_name %>:<%= port %>>
ServerName <%= srvname %>
<% if serveraliases.is_a? Array -%>
<% serveraliases.each do |name| -%><%= ” ServerAlias #{name}\n” %><% end -%>
<% elsif serveraliases != ” -%>
<%= ” ServerAlias #{serveraliases}” -%>
<% end -%>
DocumentRoot <%= docroot %>
<Directory <%= docroot %>>
Options <%= options %>
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog <%= logdir %>/<%= name %>_error.log
LogLevel warn
CustomLog <%= logdir %>/<%= name %>_access.log combined
ServerSignature Off
</VirtualHost>
testaus
$ sudo puppet apply –modulepath -e apache/manifests/sites.pp
$ curl http://puppet:8081
Lähteet:
http://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet
http://docs.puppetlabs.com/learning/templates.html
Linux projekti – Mumble-palvelin viikot 44, 45 ja 46
Viikko 44 – Ympäristön valmistelu
Käyttöjärjestelmänä palvelinkoneella on Ubuntu 12.04. Koneelle oli jo aiemmin asennettu LAMP-server, aiemman artikkelin mukaisesti. Muutin myös oman käyttäjäkohtaisen sivuni apachen oletussivuksi muokkaamalla /etc/apache2/sites-enabled/mursusivu kohdasta document rootin DocumentRoot /home/mursu/public_html .
Hankin ilmaisen domainin no-ip:ltä ja asensin No-IP Linux Dynamic Update Clientin näiden ohjeiden mukaisesti, sillä pakettia ei enää löytynyt varastosta. IP pitää päivittää säännööllisin väliajoin, koska staattista IP:tä ei ole saatavilla.
Domainia testatessa ilmeni kuitenkin ongelma. Reititin ei antanut yhdistää suoraan kotiverkossa olevaan palvelimeen, vaan se ohjasi reitittimen ylläpitosivustolle. Ratkaisin ongelman lisäämällä palvelinkoneen lähiverkon osoitteen DMZ listaan, jonka jälkeen lopputulos toimi http://mursu.no-ip.org/.
Viikko 45 – Palvelimen asennus ja ylläpitoratkaisut
Asensin mumble-serverin
$ sudo apt-get update
$ sudo apt-get install mumble-server
$ sudo dpkg-reconfigure mumble-server
Asennuksen asetukset valitsin seuraavasti:
Autostart Mumble-server on boot? Yes
Allow mumble-server to use higher priority? Yes (mumble-palvelin on ainoa palvelu toistaiseksi tarvitsee verkkokaistaa kunnolla)
Lopuksi annoin Mumble-palvelimen superuserille salasanan.
Tutustuin eri ylläpitoratkaisuihin ja vaihtoehdoista MAP – Mumb1e Admin Plugin vaikutti lupaavalta. Tutustuin myös sen vaatimuksiin, lähinnä Iceen.
Viikko 46 – Ylläpitoratkaisun asennus
Avasin aluksi mumble-server.ini
$ cd /etc/
$ sudo nano mumble-server.ini
josta pitää aluksi tarkistaa, että DBUS ei ole käytössä (oletus) ja Ice on enabloitu port 6502 localhostille.
#dbus=system
ice=”tcp -h 127.0.0.1 -p 6502″
Testataan…
netstat -apn | grep 6502
tcp 0 0 127.0.0.1:6502 0.0.0.0:* LISTEN
porttia kuunnellaan.
Asennetaan Ice
$ sudo apt-get update
$ sudo apt-get install php-zeroc-ice
php.ini pitää muuttaa lataamaan IcePHP lisäosa
$ sudo nano /etc/php5/apache2/php.ini
extension=IcePHP.so kohtaan dynamic extensions
$ sudo service apache2 restart
Testataan toimivuus
$ cd
$ cd public_html
$ nano phpinfo.php
<?php phpinfo(); ?>
selaimeen http://mursu.no-ip.org/phpinfo.php ja etsin kohtaa Ice version. Icestä ei kuitenkaan löytynyt mitään, eli IcePHP.so ei ollut latautunut. Etsin vastausta n. 30min ennen kuin mieleeni tuli pistää php.ini tiedostossa
extension=IcePHP.so
sijaan koko polku
extension=/usr/lib/php5/20090626+lfs/IcePHP.so
PHP ei todennäköisesti löytänyt IcePHP.so:ta default extension directorysta. Muutoksen jälkeen phpinfo.php näytti Ice version 3.4.2. Poistin phpinfo.php:n testin jälkeen tietoturvasyistä.
Seuraavaksi testataan kuunteleeko mumble-server Ice interfacea
$ sudo tail -n10 /var/log/mumble-server/mumble-server.log
<W>2012-11-13 09:31:30.245 MurmurIce: Endpoint ”tcp -h 127.0.0.1 -p 6502” running
Seuraavaksi asennetaan Mumb1e Admin Plugin. Latasin version 2.3.4, lataaminen vaati rekisteröitymistä. Purin tiedoston ja siirsin WinSCP:n avulla tiedostot palvelimelle. Asennus alotetaan avaamalla http://mursu.no-ip.org/map_v2.4.3_2011.12.23_build4209/install/install.php selaimessa. MAP vaatii tietyt käyttäjäoikeudet tiedostoille seuraavan kuvan mukaisesti, komento oli:
$ sudo chmod **** tiedosto
Seuraavaksi syötin käyttäjätietoni kysyttäessä ja siirryin viimeistelemään asennusta. Antamani tietokantatiedot eivät olleet kuitenkaan oikeassa, ja vaikka loin uudet tietokannat niin ongelma ei ratkennut. Perehdyn ongelmaan ensi viikolla. Itse mumble-palvelin kuitenkin toimii.
Lähteet:
http://mumble.sourceforge.net/Ice
Puppet – Resource ordering, modules and classes, user rights
Tässä julkaisussa tehdyt toimenpiteet suoritettiin SSH-yhteyden yli palvelinkoneella, jonka käyttöjärjestelmänä on Ubuntu 12.04.
Resource ordering
Puppet manifesteissa voi määritellä, missä järjestyksessä resource declarationsit suoritetaan. Järjestystä voidaan määritellä neljällä eri metaparametrillä, jotka ovat: before, require, notify ja subscribe.
Tämä manifesti luo testiviesti nimisen tiedoston ja antaa ilmoituksen ainoastaan, jos tiedosto on olemassa.
file {’/tmp/testiviesti’:
ensure => present,
content => ”Moi.123”,
}notify {’/tmp/testiviesti on uusittu’:
require => File[’/tmp/testiviesti’],
}
Subscriben avulla voidaan uudelleen käynnistää esimerkiksi ssh-client, kun sen konfiguraatio tiedostoa muokataan.
# restart openssh-client when conf is changed
package { ’openssh-client’:
ensure => present,
before => File[’/etc/ssh/ssh_config’],
}file { ’/etc/ssh/ssh_config’:
ensure => file,
mode => 0600,
source => ’/home/kayttaja/puppet/modules/ssh-client/ssh_config’,
}service { ’ssh’:
ensure => running,
enable => true,
hasrestart => true,
hasstatus => true,
subscribe => File[’/etc/ssh/ssh_config’],
}
Classes & modules
Luodaan Class.
#init.pp
class ssh-client {
package { ’openssh-client’:
ensure => present,
before => File[’/etc/ssh/ssh_config’],
}file { ’/etc/ssh/ssh_config’:
ensure => file,
source => ’puppet:///modules/ssh-client/ssh_config’,
}service { ’ssh’:
ensure => running,
subscribe => File[’/etc/ssh/ssh_config’],
}
}
Hakemistojen rakenne näyttää tältä:
$ tree
.
└── ssh-client
├── files
│ └── sshd_config
└── manifests
│ └──init.pp
Ajetaan moduuli
$ sudo puppet apply –modulepath /home/kayttaja/puppet/modules/ -e ’include ssh-client’
Moduuli muutti ssh-clientin default portin, testataan sitä.
$ ssh localhost
ssh: connect to localhost port 611: Connection refused
Moduuli muutti portin onnistuneesti.
Käyttäjäoikeudet manifestissa
#chmodtest.pp
file {’chmod’:
path => ’/tmp/chmodtest’,
ensure => present,
mode => 0660,
content => ”I’m a test file. Olen testitiedosto.”,
}
#mode 0640= read ja write omistajalle, read muille ryhmassa
#mode 0660= read ja write omistajalle ja muille ryhmassa
#mode 0740= read, write ja execute omistajalle, read muille ryhmassa
Testataan
$puppet apply chmodtest.pp
notice: Finished catalog run in 0.02 seconds
$ls -l /tmp/
-rw-rw—- 1 kayttaja kayttaja 36 Nov 9 10:15 chmodtest
Lähteet:
https://terokarvinen.com/2012/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-2-puppet
http://docs.puppetlabs.com/learning/ordering.html
http://docs.puppetlabs.com/learning/modules1.html
Last edited by Miro Seppälä on November 9, 2012
Puppet – Resources and RAL, Manifests
Tässä julkaisussa tehdyt toimenpiteet suoritettiin SSH-yhteyden yli palvelinkoneella, jonka käyttöjärjestelmänä on Ubuntu 12.04.
Asennus
Anna komentoriviin seuraavat komennot:
$ sudo apt-get update
$ sudo apt-get -y install puppet
Puppet resource
Tällä työkalulla voit muokata järjestelmää shellistä. Syntaksi on sama kuin manifesteja kirjottaessa, joten resourcella leikkimällä voi oppia hyvin perusteet manifestien kirjoittamiseen. Komennon tuloste on myös hyvä ottaa ylös työkalua käytettäessä, jotta voit tarvittaessa palauttaa esimerkiksi käyttäjän attribuutit alkuperäisiin asetuksiin. Esimerkissä otan esille oman käyttäjäni tiedot seuraavalla komennolla:
$ puppet resource user pesukarhu
user { ’pesukarhu’:
ensure => ’present’,
comment => ’pesukarhu,,,’,
gid => ’1000’,
groups => [’adm’, ’dialout’, ’cdrom’, ’plugdev’, ’lpadmin’, ’admin’, ’sambashare’],
home => ’/home/pesukarhu’,
shell => ’/bin/bash’,
uid => ’1000’,
}
Jos puppet resource komennon perään lisää attribuutteja ja arvot niille, voit muokata resourcea tai luoda esimerkiksi uuden käyttäjän.
$ puppet resource user myyra ensure=present comment=”testi myyra” shell=”/bin/zsh” home=”/home/myyra” managehome=true
err: /User[myyra]/ensure: change from absent to present failed: Could not create user myyra: Execution of ’/usr/sbin/useradd -c testi myyra -d /home/myyra -s /bin/zsh -m myyra’ returned 1: useradd: cannot lock /etc/passwd; try again later.
user { ’myyra’:
ensure => ’absent’,
}
Komento ei toiminut ja käyttäjää ei luotu, joten puppetin tuloste ilmoitti, ettei käyttäjää ole. Arvelin virheen johtuvan rajoitetuista oikeuksista, joten suoritin saman komennon uudestaan ja lisäsin komennon eteen sudo.
notice: /User[myyra]/ensure: created
user { ’myyra’:
ensure => ’present’,
comment => ’testi myyra’,
home => ’/home/myyra’,
shell => ’/bin/zsh’,
}
Käyttäjän luominen onnistui ongelmitta. Puppet resourcen käytössä Core Type Cheat Sheetistä on paljon apua.
Puppet manifests
Luodaan manifesti, joka tekee tiedoston:
$ mkdir puppet
$ cd puppet
$ mkdir manifests
$ nano manifests/testfile.pp
nanossa:
file {'testfile':
path => '/tmp/testfile',
ensure => present,
mode => 0640,
content => "I'm a test file. Olen testitiedosto.",
}
testataan…
$ puppet apply testfile.pp
notice: /Stage[main]//File[testfile]/ensure: created
notice: Finished catalog run in 0.02 seconds
$ cat /tmp/testfile
I’m a test file. Olen testitiedosto.
Manifesti toimi ja se loi testitiedoston.
Muutetaan seuraavaksi Ubuntun message of the day manifestin avulla:
$nano motd.pp
file {’motd’:
path => ’/etc/motd’,
ensure => present,
mode => 0644,
content => ”Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-24-generic x86$
* Documentation: https://help.ubuntu.com/
http://www.miroseppala.wordpress.com”,
}
Manifestin voi testata $ puppet apply motd.pp ja muutokset näkyvät $ nano /etc/motd.
Lähteet:
http://terokarvinen.com/2012/puppet-reading-list
Linux projekti – Mumble-palvelin ja sen ylläpito
Projektin aihe, rajaus ja tavoitteet
Projektin aiheena on Mumble-palvelimen ja sen hallinnointiin sekä ylläpitoon tarvittavan ratkaisun asentaminen.
Projektin aikana tutkin eri ylläpitoratkaisuja ja valitsen niistä sopivimman. Koska projektiin sisältyy tutkimista ja eri ratkaisut voivat vaatia enemmän tai vähemmän työtä, Mumble-palvelimen käyttäjien ja ryhmien konfigurointi jää pois, ellei ylimääräistä aikaa jää.
Projektin tavoitteena on toimiva Mumble-palvelin ja sen käytännöllisen ylläpidon aikaan saaminen.
Miksi Mumble-palvelin?
Mumblen avulla käyttäjät voivat puhua toisilleen samalla palvelimella. Kommunikaatio on salattu 256bit AES256-SHA salauksella. Mumblen äänenlaatu on korkea ja puheessa ei ole huomattavaa viivettä matalan latenssi ansiosta.
Kaiken lisäksi ohjelma ja sen käyttämä palvelin ovat ilmaisia. Lyhyesti sanottuna Mumble tarjoaa salatut, korkealaatuiset nettipuhelut ilmaiseksi.
Aikataulu
Viikko 44 Projektin suunnitelu, Mumble-palvelimen ympäristön asennus
Viikko 45 Mumble-palvelimen asennus ja ylläpitoratkaisujen tutkiminen
Viikko 46 Ylläpitoratkaisun valitseminen ja asentaminen
Viikko 47 Mumble-palvelimen käyttäjien, kanavien ja ryhmien konfigurointi
Viikko 48 Testaus ja mahdollisten ongelmien ratkaisu, loppuraportin laatiminen
Viikko 49 Esitelmän valmistelu
Viikko 50 Projektin esittely
Linkit: http://terokarvinen.com/2012/aikataulu-%E2%80%93-linux-projekti-ict4tn018-1
Ohjaaja: Tero Karvinen
Projektin jäsenet: Miro Seppälä