Syndicate content

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.

Nikola KoturU 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:

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.