Cachování souborů přenášených přes HTTP

Tento článek popisuje nastavení HTTP cacheování, které je primárně určeno ke snížení zátěže databázových serverů snížením požadavků z origin serverů, tedy strojů s HTTP daemonem, zachycením cacheovatelných objektů na web cache serverech, které stojí mezi orginy a klienty (klient->web cache->origin->db)

Web cache servery(Varnish,Squid,Apache Traffic Server) respektují HTTP protokol a tudíž své cacheování řídí HTTP hlavičkamy, které dostanou od aplikace(na origin serveru).

Poznatky o “správnosti HTTP hlaviček” :

  • Pragma: no-cache – poměrně pofidérní hlavička, která není plně podporována, ale pro HTTP/1.0 je to nejspíš jediná možnost
  • Expires – hlavička podporovaná “téměř všemi HTTP klienty” – velmi použitelná a neměla by být(dle RFC) nastavena na datum větší než rok v budoucnosti. Obsah hlavičky je GMT čas
  • Cache-Control – Cache-Control rozšiřuje možnosti hlavičky expires a má tyto možnosti :

Zastaven vývoj kwick.sysu

Včerejším dnem jsem zastavil vývoj mého CMS – kwick.sys

Stalo se tak, protože jsem se dostal k práci v jiném, leč ne příliš vzdáleném oboru.

Stop vývoje neznamená, že jsem smazal repositář, všechnu dokumentaci a spálil všechny mosty. Pouze jsem potřeboval tento projekt “vyjmout z mé hlavy a odložit na později”. Projekt si tedy bude hledat čas, kdy se rozhodnu jak jej nejlépe využít. PHP pro mě není zatím úplně uzavřená kapitola, tudíž kwick možná časem využiji opět k tomu, k čemu sloužil nejlépe – k výuce PHP světa, možná také ne.

Instalace keychain v Arch Linuxu

Na co je keychain?

Pokud často “přepínáte” mezi více stroji, přesněji se přihlašujete z jednoho na druhý pomocí SSH, určitě jste slyšeli o možnosti použít pro zjednodušení tohoto procesu RSA(či jiný) klíč.
Zjednodušeně řečeno, na stroji, u kterého sedíte máte privátní klíč a na stroji, na který se připojujete máte kopii vašeho veřejného klíče.

Zde přichází na řadu otázka bezpečnosti. Pokud máte klíč neěifrovaný, je vše bezpečné do doby, než se k vašemu (privátnímu) klíči někdo dostane.
Pokud máte klíč šifrovaný, je vše v pořádku, jenže k použití klíče musíte vždy zadávat heslo. Což není žádný problém do té doby, kdy chcete, aby stroj mohl vykonávat automatizované připojení na jiný stroj a použít k němu tento šifrovaný privátní RSA klíč.

Řešením tohoto problému je právě program keychain. Keychain vás vyzve k zadání hesla ke klíči, odemče jej a uloží jej do paměti.

Instalace keychainu

Samotná instalace keychain je v Arch Linuxu velmi jednoduchá, balíček je v oficiálním repositáři extra. Stačí tedy klasický příkaz pro instalaci :

# pacman -S keychain

Dále musíme nastavit “spuštění” keychainu. Toho docílíme upravením souborů načítaných při spuštení shellu – přidáme tedy do souboru ~/.bashrc toto :

eval `keychain --eval --agents ssh id_rsa`

Nyní stačí otevřít nový shell a jsme tázání na heslo pro náš certifikát.
Odteď je vždy potřeba, v prvním otevřeném terminálu, předat keychainu heslo.

Ksshaskpass

Pokud ovšem používáme grafické prostředí KDE, je tu možnost instalace programu ksshaskpass, který nejen, že nám poskytne grafický dialog, ale umí si také uložit heslo do KDE wallet, nemusíme ho tedy vždy zadávat, jen si odemčeme wallet a bude použito heslo z ní. Ksshaskpass je dostupný v Arch Linuxu v repositáři community, takže jej nainstalujeme jednoduše takto :

# pacman -S ksshaskpass

Po restartu počítače a otevření nového terminálu jsme vyzváni k vložení hesla pro daný certifikát a případné uložení hesla do KDEwallet.

Nyní je náš certifikát bezpečně šifrován heslem, které zadáváme pouze jednou – po spuštění počítače. Nebo, v případě že používáme KDE ani jednou, jelikož wallet otevíráme při každém spuštění počítače, např. pro IM v Kopete

Gentoo a mpd

Jelikož na gentoo-wiki.com není žádný článek o instalaci mpd, tak jsem se rozhodl si napsat článek,, který bude pokrývat moje potřeby :

  • budu přehrávat mp3 a “do zálohy” si pořídím i podporu ogg
  • líbí se mi možnost z ostatních počítačů v síti přijímat stream skrz PulseAudio
  • jak bonus si nastavím streamování po internetu pomocí Icecast-umpd má vlastní HTTP output, který, když se nastaví na lame encoder funguje kvalitně

Nejdříve si nastavíme požadované USE-flagy pro mpd a emergnem ho :

(Před instalací mám nastavené globální USE flagy alsa a mp3
# echo "media-sound/mpd flac mp3 ogg pulseaudio vorbis lame" >> /etc/portage/package.use # emerge -av mpd
Jako závislost bude instalováno pulseaudio, které je závislé na udev a jeho USE flagu extras, takže si nyní správně nastavíme udev… Dále je potřeba nastavit balíku flac USE flag ogg, oboje provedeme a znovu emergujem :
# echo "media-libs/flac ogg" >> /etc/portage/package.use # echo "sys-fs/udev extras" >> /etc/portage/package.use # emerge -av mpd

Nastavení mpd

Nyní k samotnému nastavení mpd. Upravíme soubor /etc/mpd.conf:
music_directory "/mnt/data/music/mp3" playlist_directory "/var/lib/mpd/playlists" db_file "/var/lib/mpd/mpd.db" log_file "/var/log/mpd/mpd.log" pid_file "/var/run/mpd/mpd.pid" state_file "/var/lib/mpd/state" user "mpd" group "audio" bind_to_address "localhost" #bind_to_address "/var/lib/mpd/socket" log_level "default" input { plugin "curl" } audio_output { type "alsa" type "alsa" name "My ALSA Device" device "hw:0,0" # nepovinne mixer_type "hardware" # nepovinne mixer_control "Master" # nepovinne } audio_output { type "httpd" name "mpd http stream" encoder "lame" # optional, vorbis or lame port "8000" bitrate "128" # do not define if quality is defined format "44100:24:1" } audio_output { type "pulse" name "My Pulse Output" } audio_output_format "44100:24:2" filesystem_charset "UTF-8"
POZOR : Zásadní je, aby group bylo nastaveno na audio, jinak nebudeme moci přistupovat na ALSA karty.

Nyní máme nastaveny tři výstupy :

  • ALSA – přímý výstup do zvukové karty
  • HTTP stream na portu 8000 – pro “vnější” přehrávání
  • Pulse – pro pozdější využití(buď další článek, nebo rozšíření tohoto – podle náročnosti)

Dále vytvoříme potřebné složky a soubory pro mpd a změníme jejich vlastnictí pro naše potřeby:
# mkdir -p /var/lib/mpd/playlists /var/run/mpd /var/log/mpd # touch /var/lib/mpd/{mpd.db,mpdstate} && touch /var/run/mpd/mpd.pid && touch /var/log/mpd/mpd.log # chown -R mpd:users /var/lib/mpd /var/run/mpd /var/log/mpd
Přidáme uživatele mpd do skupiny audio, aby mohl přistupovat ke kartě :
# gpasswd -a mpd audio

Nastavení ALSA

Následující kroky jsou nutné, pouze pokud na počítači ještě nebyla nastavena ALSA :

Spustíme daemona alsasound a přidáme ho do boot rc levelu :
# /etc/init.d/alsasound start # rc-update add alsasound boot
Nyní potřebujem zrušit mute, spustíme tedy alsamixer – zvýšíme hlasitost a stisknem M(Mute) pro panely, které dole mají MM(změní se na 00) a které potřebujeme(Master,PCM,Center) :
# alsamixer
Nyní, pokud vše funguje správně uslyšíme po spuštění tohoto příkazu sympatickým hlasem “Front Right” :
# aplay /usr/share/sounds/alsa/Front_Right.wav
Nyní už jen zapnout daemona a přidat ho do RC levelu :
# /etc/init.d/mpd start # rc-update add mpd default

Gentoo, Python a utržené sluchátko

Dnes mi Gentoo doporučilo, že bych měl spustit
# emerge --depclean
Ale bohužel portage moc chytrá nebyla, tak si odinstalovala i Python, ve kterém je sama napsaná. Takže mi pak příkazy jako
# emerge --sync
vůbec “nic nevracely”.

Musel jsem tedy ručně zkompilovat python :
# cd /tmp # tar xjf /usr/portage/distfiles/Python-2.6.6.tar.bz2 # cd Python-2.6.6 # ./configure --with-fpectl --infodir=/usr/share/info/ --mandir=/usr/share/man # make # make install prefix=/usr
No a když nám portage už funguje, tak si python ještě jednou “pěkně čistě” emergnem, aby jsme zohlednily use flagy a aby systém věděl, že python máme:
# emerge python
Portage očividně instaluje verzi 3.1.3, po instalaci tedy spustíme:
# eselect python 2
Třetí možnost je v mém případě python 2.7, protože Python3 ještě není doporučovaný. Dále necháme python si opravit “svoje” balíky :
# python-updater
A na závěr necháme ještě portage zkontrolovat, jestli se něc nepolámalo:
# revdep-rebuild

PulseAudio v Arch Linuxu x86_64

Nedávno do Arch Linuxu přišlo GNOME3 čili GNOME Shell, které je nyní závislé na Pulse Audio.

Říkal jsem si tedy, že GNOME3 stejně jako Pulse Audio vyzkouším. Ke GNOME3 řeknu jen ve zkratce, že mi proces gnome-shell vyběhl na 100% CPU zatížení a tím pro mě umřelo.

Co se týče Pulse Audio, měl jsem zajímavé doporučení od kamaráda, co ho používal, tak jsem si řekl, že bych ho mohl taky vyzkoušet. Po instalaci se Pulse Audio automaticky integrovalo do KDE, ale rychle jsem narazil na problém, kvůli kterému tento článek píšu…

Pulse Audio a Flash player

Pokud byl aktivní Flash player, nefungoval žádný jiný zdroj zvuku. Tento problém vypadá, že se týká pouze x86_64 a jeho řešení je podle Arch Linux wiki velmi jednoduché :

pacman -S lib32-alsa-plugins lib32-libcanberra-pulse
Z multilibu se nainstaluje sice více blíku než tyto dva, ale zvuk z flashe už funguje