linux
Sa nešto slobodnog vremena ovih dana, uzeo sam da vidim šta se to dešava sa Btrfs fajl sistemom, kakvo je trenutno stanje i šta može da se uradi s njim.
Ne bih ovde komentarisao poznate činjenice, to se svakako može naći na Wikipedia stranici za Btrfs, već ću odmah preći na ono što mi se sviđa i gde vidim ovaj fajl sistem.
Pravljenje novog fajl sistema je jednostavno:
mkfs.btrfs /dev/sda1
Pravljenje RAID fajl sistema je takođe prilično jednostavno:
mkfs.btrfs /dev/sda1 /dev/sda2 /dev/sda3
Tako je, samo treba navesti sve particije i biće podrazumevano napravljen RAID0 (stripe) za podatke i RAID1 (mirror) za metapodatke. Btrfs podržava 0, 1 i 10 RAID matrice, što je za početak dovoljno. Pri sledećem mountovanju nije potrebno navoditi sve uređaje koji su u RAID-u, već samo jedan, što olakšava održavanje jer fstab unos ostaje isti kako naknadno menjamo diskove.
Takođe, promena veličine fajl sistema je veoma jednostavna i svodi se na:
btrfs filesystem resize /media/btrfs -20G
Ovo će smanjiti veličinu fajl sistema za 20 gigabajta. Takođe, Btrfs se sam defragmentiše, podržava kompresiju, a enkripcija je u planu (iako se to već može izvesti preko ecryptfs).
No, ono što je jako zgodno je opcija koja se zove subvolumes. O čemu se tu radi: na jednom disku možete imati neograničen broj podvolumena, koji se mogu odvojeno mountovati i koristiti. Prednost ovoga je što omogućava sledeći scenario: 3 hard diska od 250G su spojena u RAID0, napravljeni su podvolumeni root, home i var koji odgovaraju /, /home i /var particijama - sada nije nužno voditi računa o veličini pojedinih particija i da li ima dovoljno slobodnog mesta pošto svi podvolumeni dele zajednički prostor.
Ovako se pravi podvolumen:
btrfs subvolume create /media/btrfs/homevol
Nakon toga, može se odvojeno mountovati:
mount -t btrfs -o subvol=homevol /dev/sda1 /home
Btrfs ima još jednu zgodnu osobinu: snapshots. U pitanju je osobina veoma slična podvolumenima (snapshoti su nešto kao read-only podvolumeni) i mogu poslužiti za brzi bekap podataka. Takođe je moguće konvertovati Ext3/4 fajl sistem u Btrfs veoma lako, a postoji i posebna opcija za SSD diskove koja ubrzava ove ionako brze uređaje.
Prema mojim potpuno nenaučnim i subjektivnim merenjima brzine, Btrfs je veoma sličan Ext4 - možda čak malo i brži. Najbitnije je da se usporavanje ne primećuju, čak naprotiv. Drugi su vršili opsežnija merenja brzine te vredi pogledati tamo ako nekoga interesuje.
U međuvremenu, treba napraviti strategiju migracije podataka na Btrfs u nekoj bližoj budućnosti.
Bitno: novije verzije Virtualmina su rešile ovaj problem tako što podržavaju FCGI i u GPL kopiji, čineći ovo uputstvo bespotrebnim.
Napomena pre početka, ovako se radi u Debianu, veoma slično je i za ostale GNU/Linux distribucije.
Prvo, napraviti skel za nove hostove, kao root:
cd /etc/skel mkdir -p etc/php5 cp /etc/php5/apache2/php.ini /etc/skel/etc/php5/php.ini mkdir fcgi-bin vi fcgi-bin/php5.fcgi
U fajl php5.fcgi upišite ovo:
#!/bin/bash export PHPRC=$PWD/../etc/php5 umask 022 export SCRIPT_FILENAME=$PATH_TRANSLATED exec /usr/bin/php-cgi
Promenite dozvole ovom fajlu:
chmod 744 fcgi-bin/php5.fcgi
Dalje, ulogujte se u Virtualmin, pa idite na System Settings -> Server Templates -> Default Settings -> Apache website i u polje Directives and settings ubacite sledeće:
ServerName ${DOM}
ServerAlias www.${DOM}
DocumentRoot ${HOME}/public_html
ErrorLog /var/log/virtualmin/${DOM}_error_log
CustomLog /var/log/virtualmin/${DOM}_access_log combined
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory ${HOME}/public_html>
Options -Indexes IncludesNOEXEC FollowSymLinks ExecCGI
allow from all
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper ${HOME}/fcgi-bin/php5.fcgi .php
</Directory>
<Directory ${HOME}/cgi-bin>
AddHandler cgi-script cgi
allow from all
</Directory>Pa kliknite na Save.
I to je to. Sada će se PHP fajlovi izvršavati preko suEXEC što znači da fajlovi koje uplodujete preko PHP skripti unutar nekog CMS-a, recimo, moći biti promenjeni ili obrisani ukoliko se ulogujete preko FTP ili SSH.
Važno je samo zapamtiti da PHP fajlovi i wrapper skripta ne smeju biti world/grou writable. Ukoliko nešto ne bude u redu, pogledati u /var/log/apache2/suexec.log.
U subotu 13. marta je bio prvi Open Source Day skup predavanja na PMF-u Novom Sadu.
Skup je organizovala eKomuna, više o svemu možete saznati na sajtu eKomune. Jedan od predavača je bila i moja malenkost, a tema o kojoj sam pričao je opšta GNU/Linux priča koju su svi čuli već milion puta, plus specifičnosti što se tiče programiranja.
Ostala predavanja su držali Dejan Marić, poznatiji kao gosp. Maks, na temu Drupal CMS-a kao razvojnog okruženja, i Dejan Injac, čovek sa previše nadimaka, koji je načeo temu Joomla CMS-a. Tokom predavanja o Joomli moglo se čuti dosta interesantnih paralela između ova dva CMS-a, koji je bolji za koju svrhu, kao i pratkični primeri šta se gde može brže i lakše uraditi. Izvukao se zaključak da je Drupal bolji CMS za programere i za fleksibilno prilagođavanje i modifikaciju, dok Joomla caruje na većini korisničkih scenarija.
Kao što napomenuh gore, ja sam započeo opštom GNU/Linux pričom, pošto je ovo moje prvo predavanje na Open Source Danima zamišljeno kao prvo u seriji sve specifičnijih i interesantnijih predavanja na temu programiranja u GNU/Linux operativnom sistemu.
Prezentacija koja je išla u pozadini nalazi se zakačena za ovaj post, nema šta mnogo da se vidi, ali ipak je u duhu otvorenosti stavljam ovde. Nažalost, nisam snimao sve što sam kucao na računaru, te ne mogu i to da postavim.
Takođe, nekoliko slika sa OS Dana 0.1 možete videti u mojoj galeriji.
Nadam se da neće proći mnogo vremena pre nego što organizujemo verziju 0.2 predavanja pošto već imam nekoliko dobrih ideja za teme koje treba obraditi. I obećavam, sledeći put će biti mnogo više primera, a mnogo manje pričanja.
Brzo i jednostavno enkriptovanje fajlova (ukoliko pri ruci nije GPG ili nešto slično) se može postići pomoću OpenSSL paketa koji je instaliran podrazumevano na skoro svim mogućim računarima sa GNU/Linuxom.
Enkriptovanje fajla fajl.txt se vrši na sledeći način:
openssl enc -aes-256-cbc -salt -in fajl.txt -out fajl.enc
Fajl kasnije možete vratiti u normalno stanje sledećom komandom:
openssl enc -d -aes-256-cbc -in fajl.enc
U ovim gore primerima smo koristili AES algoritam za enkripciju, ukoliko želite neki drugi pomoću sledeće komande možete videti koje OpenSSL podržava:
openssl -h
I to je to.
Ovo je jedan od onih programa koje morate da probate da biste se uverili koliko je koristan. Na prvo čitanje, možda ne zvuči da je u pitanju nešto revolucionarno, Earcandy prati koje aplikacije puštaju zvuk na vašem računaru, i odlučuje kojoj će da da prioritet u glasnoći.
Ali, instalirajte ovaj program i koristite ga nekoliko dana, shvatićete da je pun pogodak i nikada ga nećete propustiti kroz apt-get remove :)
Da vidimo o čemu se radi... Slušate muziku, i u Firefoxu otvorite on-line video da pogledate, Earcandy to odmah primeti i muziku utiša sve dok se video ne završi, i odmah nakon toga je ponovo pojača. Aha... Ili, dok gledate film, zazvoni vam VoIP telefon! Nema potrebe za pauziranjem, traženjem dugmeta za utišavanje jerbo Earcandy odmah utiša sve pošto ste postavili VoIP kao najprioritetniju aplikaciju. Ukratko, ukoliko ste vizuelan tip, pogledajte video fajl snimka Earcandy u akciji.
Sve ovo je moguće zato što se Earcandy oslanja na zvučni sistem pod imenom Pulse Audio (o kome pisah prošle godine). A ja jedva čekam da vidim šta će nam još pokloniti mogućnost kontrole koju PA pruža.
Okej, sada kada vam zvuči primamljivo, evo copy-paste uputstva kako da ga instlirate u vaš Ubuntu GNU/Linux sistem.
Prvo ćemo da dodamo javni ključ Launchpad PPA repozitorije:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6E73CA45
Onda, na kraj fajla /etc/apt/sources.list dodati gde se paketići nalaze:
deb http://ppa.launchpad.net/flimm/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/flimm/ppa/ubuntu jaunty main
Earcandy je dostupan i za starije verzije Ubuntu-a. I sada, na kraju, instalirajte program:
sudo apt-get update sudo apt-get install earcandy
To je to. Pritisnite Alt i F2, pokrenite ear_candy i neka čarolija uradi svoje...
PHP-GTK je ekstenzija za PHP programski jezik koja implementira GTK toolkit. Ukratko, služi da u PHP-u pravimo samostalne grafičke aplikacije.
Ovde je opisana instalacije PHP-GTK 2.0.1 na Ubuntu 9.04 operativni sistem. Paket se ne nalazi u repozitoriji koja bi omogućila brzo i jednostavno instaliranje, već se mora kompajlirati iz izvornog koda.
Prvo instalirajte sve pakete potrebne za kompajliranje:
sudo apt-get install m4 gawk build-essential
PHP-GTK se može skinuti ovde, zatim raspakujte skinutu arhivu:
tar xzf php-gtk-2.0.1.tar.gz
PHP paket trenutno ima bag, te se pre kompajliranja mora napraviti ovaj trik:
cd /usr/share/aclocal cp libtool.m4 libtool-orig.m4 cat lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 >> libtool.m4
Dalje ste spremni za kompajliranje po uputstvu sa PHP-GTK sajta. Ukratko:
./buildconf ./configure make sudo make install
I ne zaboravite da dodate sledeću liniju u /etc/php5/cli/php.ini:
extension=php_gtk2.so
To je to.
Evo ga, Volkswagen Amarok:

VW je neko vreme davao imena automobilima po vetrovima (jetta, corrado, santana...), a sada su se bacili na GNU/Linux audio plejere :) Baš me interesuje kako će izgledati VW Rhythmbox...
Ukoliko želite da na lak način delite fajlove između GNU/Linux i Windows računara Samba nudi pravo rešenje za to. Ovde ću opisati instaliranje i podešavanje Samba servera na Ubuntu operativnom sistemu.
Prvo ćemo instalirati Sambu:
sudo apt-get install samba smbfs
Sada kada je Samba instalirana podesićemo konfiguracioni fajl. Postoje programi pomoću kojih možete podešavati Sambu unutar grafičkog okruženja, ali najbrže je to uraditi direktno u konfiguracionom fajlu:
sudo gedit /etc/samba/smb.conf
U konfiguracionom fajlu pronaći deo za autentifikaciju koji izgleda ovako:
####### Authentication ####### # "security = user" is always a good idea. This will require a Unix account # in this server for every user accessing the server. See # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html # in the samba-doc package for details. ; security = user
Odkomentarisati liniju "security = user" i dodati još jednu linuju da na kraju taj deo fajla izgleda ovako:
####### Authentication ####### # "security = user" is always a good idea. This will require a Unix account # in this server for every user accessing the server. See # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html # in the samba-doc package for details. security = user username map = /etc/samba/smbusers
Odlično! Kad smo već u konfiguracionom fajlu, podesićemo da home direktorijum bude vidljiv na mreži. Pronađite, pri kraju fajla, deo koji izgleda ovako:
#======================= Share Definitions ======================= # Un-comment the following (and tweak the other settings below to suit) # to enable the default home directory shares. This will share each # user's home directory as \\server\username
I onda, napravite da početak tog dela ([home] odeljak) izgleda ovako:
[homes] comment = Home Directories browseable = yes read only = yes create mask = 0700 directory mask = 0700
Izbacio sam komentare (sve linije koje počinju sa # ili ;) kako bih izvukao najbitnije. Sada kada je sve podešeno vreme je da dodamo korisnike. Jedna napomena pre dodavanja korisnika: možete da dodajete samo korisnike koji već postoje u sistemu. Tako da ukoliko neko korisničko ime ne postoji, prvo ga dodajte na klasičan način (sudo adduser ImeKorisnika). Dakle, dodajmo jednog korisnika:
sudo smbpasswd -a <ime korisnika>
Ukucajte lozinku dva puta i to je to. Zatim dodajte korisnika u fajl za koji smo Sambi rekli da mapira korisnike:
sudo gedit /etc/samba/smbusers
Format za mapiranje korisnika je vrlo jednostavan: (ubuntu korisničko ime) = "(samba korisničko ime)". Imena ne moraju biti ista, ali pojednostavljuje stvari ako ih držimo istim. Dakle u ovaj fajl stavite:
<korisnik> = "<samba korisnik>"
I to je to. Ostalo je samo da restartujemo Sambu:
/etc/init.d/samba restart
Gotovo. Sada ćete moći pristupiti svojim fajlovima na GNU/Linux računaru iz Windowsa.
Aha! Suočen s velikim direktorijumom sa velikim brojem malih fajlova, odlučio sam ga iskopirati na drugi mašinu. Prvo što mi je palo na pamet je da iskopiram pomoću OpenSSH alata za kopiranje: scp. I to je super, ali ogroman broj fajlova znači da bi se dosta vremena i bandwidtha potrošilo bez potrebe. Treba to nekako streamovati, a kao rešenje se nametnuo tar. Evo komande:
tar -cf - /neki/direktorijum | ssh udaljeni.host tar -xf - -C /odredišni/direktorijum
Način funkcionisanja ove linije je prilično jednostavan. Parametrom -c kažemo taru da počne praviti arhivu (bez bespotrebne kompresije), a -f - govori da arhivu izbacuje na stdout (standardni izlaz). S druge strane, na udaljenom računaru, isto pokrećem tar ali sa obrnutim parametrima: -x znači raspakuj arhivu, a -f - govori taru da je čeka na stdin. I ide. Nažalost, nema nikakvog statusa ili predviđenog vremena za završetak, i rsync bi ovaj posao mnogo lepše odradio, pogotovo ukoliko se isto stablo nalazi i sa druge strane, ali ovaj način je brz, jednostavan i radi posao.
Mplayer, video i audio plejer koji podržava ogroman broj formata, se vrlo lako može iskoristiti za konverziju audio fajlova. Na primer, našao sam m4r audio fajl (iPhone ringtone) koji mi se jako sviđa, ali moj telefon ne podržava vlasnički AAC format, te sam morao da fajl prebacim u MP3. Prvo sam uz pomoć Mplayera napravio WAV fajl:
mplayer -ao pcm Muppets.m4r -ao pcm:file="Muppets.wav"
Nakon toga, MP3:
lame --preset standard Muppets.wav Muppets.mp3
Divno.