Bzip2 mini-KAKO David Fetter, david@fetter.org verzija 2.00, 22. kolovoza 1999. Ovaj dokument govori o koristenju bzip2, novog programa za sazimanje. Autorativni SGML nalazi se na . ______________________________________________________________________ Sadrzaj 1. Uvod 1.1 Popis promjena 2. Nabavljanje bzip2 2.1 Bzip2 mini-HOWTO na vasem jeziku 2.2 Nabavljanje vec kompajliranih izvrsnih datoteka bzip2 2.3 Nabavljanje izvornog koda bzip2 3. Kompajliranje bzip2 za vas stroj 4. Koristenje samog bzip2 5. Koristenje bzip2 uz tar 5.1 Najlaksi za namjestanje 5.2 Lak za namjestanje, relativno lak za koristenje, bez potrebe za root privilegijama 5.3 Isto tako lak za koristenje, ali zahtijeva root pristup 6. Koristenje bzip2 uz less 7. Koristenje bzip2 uz emacs 7.1 Mijenjanje emacsa za sve 7.2 Mijenjanje emacsa za jednu osobu 8. Koristenje bzip2 uz wu-ftpd 9. Koristenje bzip2 s grepom 10. Koristenje bzip2 uz Netscape pod X-om 11. Koristenje bzip2 za ponovno sazimanje drugih sazetih datoteka 12. Hrvatski prijevod ______________________________________________________________________ 11.. UUvvoodd bzip2 je zgodan novi algoritam za sazimanje podataka. Opcenito, datoteke cini 30-40% manjim od velicine njihovih gzip-anih pandana. Ovaj dokument vodi vas kroz nekoliko uobicajenih primjena bzip2-a. Buduce verzije dokumenta govorit ce o primjenama libbzip2, bzip2 C librarya kojeg je ljubazno napisao autor bzip2, Julian Seward, Julian_Seward@muraroa.demon.co.uk. Detaljne informacije o libraryu sadrzi bzip2 prirucnik dostupan na . Buduce verzije dokumenta mozda ce takoder sadrzavati sazetak rasprava o tome bi li (i kako bi) trebalo koristiti bzip2 u Linux kernelu. 11..11.. PPooppiiss pprroommjjeennaa VVeerrzziijjaa 22..0000 Promijenio poglavlje ``Koristenje bzip2 uz less'' tako da se .tar.bzip2 datoteke mogu citati. Hvala Nicoli Fabianu mc8644@mclink.it za ispravak. Osvjezio alat buzzit. Osvjezio informacije o taru. VVeerrzziijjaa 11..9922 Osvjezio poglavlje ``Nabavljanje vec kompajliranih izvrsnih datoteka bzip2'' i dodao S.u.S.E.-ove. VVeerrzziijjaa 11..9911 Ispravio pravopisnu gresku i razjasnio neke idiome ljuske u poglavlju ``Koristenje bzip2 uz tar''. Za to hvala Alessandru Rubiniju. Sredio buzzit alat tako da se ne zagrcne na postojecoj bzip2 arhivi. Dodao bgrep, zgrep-olik alat. VVeerrzziijjaa 11..99 Razjasnio gcc 2.7.* problem. Hvala Ulriku Dickowu sto me upozorio. Dodao elegantni nacin rada s tarom Leonarda Jean-Marca. Dodao svedski prijevod Linusa Ãkerlunda. Sredio wu-ftpd poglavlje prema prijedlogu Arnauda Launaya. Prijevode premjestio u zasebno poglavlje. VVeerrzziijjaa 11..88 buzzit i tar.diff u SGML-u stavio tamo gdje spadaju. Sredio interpunkcije i formatiranje. Hvala Arnaudu Launayu na pomoci u ispravljanju mog primjerka. :-) Za sada ispustio xv projekt zbog nedostatnog zanimanja citatelja. Dodao neodgovorena pitanja za buduce verzije dokumenta. VVeerrzziijjaa 11..77 Dodao alat buzzit. Sredio zakrpu za GNU tar. VVeerrzziijjaa 11..66 Dodao TenThumbsov program za Netscape. Promijenio i lesspipe.sh prema njegovom prijedlogu. Sad bi trebao raditi bolje. VVeerrzziijjaa 11..55 Dodao francuski prijevod Arnauda Launaya i njegovu datoteku za wu-ftpd. VVeerrzziijjaa 11..44 Dodao japanski prijevod Tetsua Isajia. VVeerrzziijjaa 11..33 Dodao .emacs Ulrika Dickowa za 19.30 i bolji. (Ispravio i jka-compr.el prema njegovu prijedlogu. Ups! bzip2 jos uvijek (?) nema opciju --append.) VVeerrzziijjaa 11..22 Promijenio zakrpu za emacs tako da automatski prepoznaje .bz2 datoteke. VVeerrzziijjaa 11..11 Dodao zakrpu za emacs. VVeerrzziijjaa 11..00 Prva runda. 22.. NNaabbaavvlljjaannjjee bbzziipp22 WWW stranica bzip2 nalazi se na . Mirror u SAD je . 22..11.. BBzziipp22 mmiinnii--HHOOWWTTOO nnaa vvaasseemm jjeezziikkuu Francuski citatelji mogu procitati francuski prijevod Arnauda Launaya. WWW verzija je na , a FTP-om ga mozete dobiti s . Arnauda mozete kontaktirati elektronskom postom na zoro@mygale.org. Japanski citatelji mogu procitati japanski prijevod Tetsua Isajia na . Do Isajia mozete doci preko njegove WWW stranice, . Svedski citatelji mogu procitati svedski prijevod Linusa Ãkerlunda na . Linusova e-mail adresa je uxm165t@tninet.se. 22..22.. NNaabbaavvlljjaannjjee vveecc kkoommppaajjlliirraanniihh iizzvvrrssnniihh ddaattootteekkaa bbzziipp22 Pogledajte WWW stranice bzip2. 22..33.. NNaabbaavvlljjaannjjee iizzvvoorrnnoogg kkooddaa bbzziipp22 Moze se naci na sluzbenim stranicama (pogledajte ``Nabavljanje bzip2''). 33.. KKoommppaajjlliirraannjjee bbzziipp22 zzaa vvaass ssttrroojj AAkkoo iimmaattee ggcccc 2.7.*, promijenite red CFLAGS = -O3 -fomit-frame-pointer -funroll-loops u CFLAGS = -O2 -fomit-frame-pointer To jest, -O3 zamijenite s -O2 i izostavite -funroll-loops. Takoder mozete dodati -m* prekidace (-m486, na primjer) koje koristite kod kompajliranja kernela. Najvaznije je izbjeci -funroll-loops jer ce zbog toga mnogi gcc-i verzije 2.7 generirati neispravan kod, a svi gcc-i 2.7 generirati sporiji i veci kod. Za druge kompajlere (lcc, egcs, gcc 2.8.x) CFLAGS nije potrebno mijenjati. Nakon toga samo make i instalirajte ga prema README-u. 44.. KKoorriisstteennjjee ssaammoogg bbzziipp22 RRTTFFMM (procitajte tu dobru man stranicu :). 55.. KKoorriisstteennjjee bbzziipp22 uuzz ttaarr Evo tri nacina koristenja bzip2 uz tar, to jest: 55..11.. NNaajjllaakkssii zzaa nnaammjjeessttaannjjee Ova metoda ne zahtijeva nikakvo petljanje. Za dearhiviranje bzip2-ane tar arhive foo.tar.bz2 u trenutnom direktoriju napisite: /staza/do/bzip2 -cd foo.tar.bz2 | tar xf - ili tar --use-compress-prog=bzip2 xf foo.tar.bz2 To radi, ali toliko tipkati cesto moze biti mucno. 55..22.. pprriivviilleeggiijjaammaa LLaakk zzaa nnaammjjeessttaannjjee,, rreellaattiivvnnoo llaakk zzaa kkoorriisstteennjjee,, bbeezz ppoottrreebbee zzaa rroooott Hvala Leonardu Jean-Marcu, leonard@sct1.is.belgacom.be, sto mi je ovo spomenuo. Takoder hvala Alessandru Rubiniju, rubini@morgana.systemy.it, za razlike izmedu basha i csha. U svoj .bashrc mozete staviti ovakav red: alias btar='tar --use-compress-program /usr/local/bin/bzip2 ' Odgovarajuci red za .tcshrc ili .cshrc izgleda ovako: alias btar 'tar --use-compress-program /usr/local/bin/bzip2' 55..33.. IIssttoo ttaakkoo llaakk zzaa kkoorriisstteennjjee,, aallii zzaahhttiijjeevvaa rroooott pprriissttuupp Nadogradite svoj tar na najnoviju GNU verziju, trenutno 1.13.10. Ona se moze naci na GNU-ovom FTP posluzitelju i svim mirrorima. 66.. KKoorriisstteennjjee bbzziipp22 uuzz lleessss Za dekompresiju bzip2-anih datoteka u hodu, odnosno mogucnost koristenja lessa bez bunzip2-avanja, mozete napraviti lesspipe.sh (pogledajte man less) poput ovog: #!/bin/sh # Ovo je preprocesor za less. Koristi se kada je postavljena varijabla # okruzja: LESSOPEN="|lesspipe.sh %s" case "$1" in *.tar) tar tvvf $1 2>/dev/null ;; # Prikaz sadrzaja raznih tar datoteka *.tgz) tar tzvvf $1 2>/dev/null ;; # Ovo ce raditi za nepromijenjenu verziju tara: *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;; # Ovo radi za zakrpanu verziju tara: # *.tar.bz2) tyvvf $1 2>/dev/null ;; *.tar.gz) tar tzvvf $1 2>/dev/null ;; *.tar.Z) tar tzvvf $1 2>/dev/null ;; *.tar.z) tar tzvvf $1 2>/dev/null ;; *.bz2) bzip2 -dc $1 2>/dev/null ;; # Ispravan pregled sazetih datoteka *.Z) gzip -dc $1 2>/dev/null ;; *.z) gzip -dc $1 2>/dev/null ;; *.gz) gzip -dc $1 2>/dev/null ;; *.zip) unzip -l $1 2>/dev/null ;; *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) DATOTEKA=`file -L $1` ; # u groffu DATOTEKA=`echo $DATOTEKA | cut -d ' ' -f 2` if [ "$DATOTEKA" = "troff" ]; then groff -s -p -t -e -Tascii -mandoc $1 fi ;; *) cat $1 2>/dev/null ;; # *) DATOTEKA=`file -L $1` ; # Provjeravamo je li je binarna -- pregled preko strings # DATOTEKA1=`echo $DATOTEKA | cut -d ' ' -f 2` # DATOTEKA2=`echo $DATOTEKA | cut -d ' ' -f 3` # if [ "$DATOTEKA1" = "Linux/i386" -o "$DATOTEKA2" = "Linux/i386" \ # -o "$DATOTEKA1" = "ELF" -o "$DATOTEKA2" = "ELF" ]; then # strings $1 # fi ;; esac 77.. KKoorriisstteennjjee bbzziipp22 uuzz eemmaaccss 77..11.. MMiijjeennjjaannjjee eemmaaccssaa zzaa ssvvee Napisao sam sljedecu zakrpu za jka-compr.el. Ona dodaje bzip2 u auto- compression-mode. NNaappoommeennaa:: Ovo sam testirao samo na emacsu 20.2, ali ne vidim razloga zasto slican pristup ne bi radio na drugim verzijama. Primijenite ju ovako: 1. Otidite u direktorij emacs-20.2/lisp s izvornim kodom (gdje god ste ga otpakirali). 2. Snimite ovu zakrpu u datoteku jka-compr.el.diff (u toj bi datoteci trebala biti samo ona ;). 3. Napisite: patch < jka-compr.el.diff 4. Pokrenite emacs i napisite M-x byte-compile-file jka-compr.el 5. Izadite iz emacsa. 6. Svoj izvorni jka-compr.elc maknite na sigurnije mjesto za slucaj greske. 7. Uzivajte! --- jka-compr.el Sat Jul 26 17:02:39 1997 +++ jka-compr.el.new Thu Feb 5 17:44:35 1998 @@ -44,7 +44,7 @@ ;; The variable, jka-compr-compression-info-list can be used to ;; customize jka-compr to work with other compression programs. ;; The default value of this variable allows jka-compr to work with -;; Unix compress and gzip. +;; Unix compress and gzip. David Fetter added bzip2 support :) ;; ;; If you are concerned about the stderr output of gzip and other ;; compression/decompression programs showing up in your buffers, you @@ -121,7 +121,9 @@ ;;; I have this defined so that .Z files are assumed to be in unix -;;; compress format; and .gz files, in gzip format. +;;; compress format; and .gz files, in gzip format, and .bz2 files, +;;; in the snappy new bzip2 format from http://www.muraroa.demon.co.uk. +;;; Keep up the good work, people! (defcustom jka-compr-compression-info-list ;;[regexp ;; compr-message compr-prog compr-args @@ -131,6 +133,10 @@ "compressing" "compress" ("-c") "uncompressing" "uncompress" ("-c") nil t] + ["\\.bz2\\'" + "bzip2ing" "bzip2" ("") + "bunzip2ing" "bzip2" ("-d") + nil t] ["\\.tgz\\'" "zipping" "gzip" ("-c" "-q") "unzipping" "gzip" ("-c" "-q" "-d") 77..22.. MMiijjeennjjaannjjee eemmaaccssaa zzaa jjeeddnnuu oossoobbuu Za ovo hvala Ulriku Dickowu, ukd@kampsax.dk, sistemskom programeru iz Kampsax Technology. Ako zelite automatski koristiti bzip2 kada niste root, samo dodajte ovo svojoj .emacs datoteci. ;; Automatska (de)kompresija kod ucitavanja/snimanja datoteka (gzip(1) i ;; slicno) ;; Pokrecemo ju u ugasenom stanju tako da se moze dodati podrska za ;; bzip2(1). Kod skupio Ulrik Dickow za ~/.emacs uz Emacs 19.34. Trebalo bi ;; raditi i s mnogim starijim i novijim Emacsima. Ipak, nema jamstva. ;; (if (fboundp 'auto-compression-mode) ; Emacs 19.30+ (auto-compression-mode 0) (require 'jka-compr) (toggle-auto-compression 0)) ;; Sad dodajmo bzip2 podrsku i ponovo ukljucimo automatsku kompresiju (add-to-list 'jka-compr-compression-info-list ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'" "zipping" "bzip2" () "unzipping" "bzip2" ("-d") nil t]) (toggle-auto-compression 1 t) 88.. KKoorriisstteennjjee bbzziipp22 uuzz wwuu--ffttppdd Hvala Arnaudu Launayu za ovo spasavanje bandwidtha. Sljedece treba staviti u /etc/ftpconversions za de/kompresiju u hodu pomocu bzip2. Provjerite jesu li staze (kao sto je /bin/compress) ispravne. :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP :.bz2: : :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2 : : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2 : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP : : :.tar.bz2:/bin/tar -c -I -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2 99.. KKoorriisstteennjjee bbzziipp22 ss ggrreeppoomm Ovaj alat, kojeg sam nazvao bgrep, je malcice izmijenjen zgrep koji dolazi s Linuxom. Mozete ga koristiti za grep kroz datoteke bez njihovog bunzip2-anja. #!/bin/sh # bgrep -- omotac oko programa grep koji po potrebi dekomprimira datoteke PATH="/usr/bin:$PATH"; export PATH prog=`echo $0 | sed 's|.*/||'` case "$prog" in *egrep) grep=${EGREP-egrep} ;; *fgrep) grep=${FGREP-fgrep} ;; *) grep=${GREP-grep} ;; esac pat="" while test $# -ne 0; do case "$1" in -e | -f) opt="$opt $1"; shift; pat="$1" if test "$grep" = grep; then # grep pati od gresaka s -e na SVR4 grep=egrep fi;; -*) opt="$opt $1";; *) if test -z "$pat"; then pat="$1" else break; fi;; esac shift done if test -z "$pat"; then echo "grep kroz bzip2 datoteke" echo "usage: $prog [grep_opcije] uzorak [datoteke]" exit 1 fi list=0 silent=0 op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` case "$op" in *l*) list=1 esac case "$op" in *h*) silent=1 esac if test $# -eq 0; then bzip2 -cd | $grep $opt "$pat" exit $? fi res=0 for i do if test $list -eq 1; then bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i r=$? elif test $# -eq 1 -o $silent -eq 1; then bzip2 -cd "$i" | $grep $opt "$pat" r=$? else bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|" r=$? fi test "$r" -ne 0 && res="$r" done exit $res 1100.. KKoorriisstteennjjee bbzziipp22 uuzz NNeettssccaappee ppoodd XX--oomm tenthumbs@cybernex.net kaze: Shvatio sam i kako natjerati Netscape za Linux da koristi bzip2 za Content-Encoding bas kao sto i koristi gzip. Dodajte ovo u $HOME/.Xdefaults ili $HOME/.Xresources: Koristim opciju -s samo zato sto vise volim sporiju dekompresiju nego manje RAM-a. Ako zelite, mozete ju izostaviti. Netscape*encodingFilters: \ x-compress : : .Z : uncompress -c \n\ compress : : .Z : uncompress -c \n\ x-gzip : : .z,.gz : gzip -cdq \n\ gzip : : .z,.gz : gzip -cdq \n\ x-bzip2 : : .bz2 : bzip2 -ds \n 1111.. KKoorriisstteennjjee bbzziipp22 zzaa ppoonnoovvnnoo ssaazziimmaannjjee ddrruuggiihh ssaazzeettiihh ddaattootteekkaa Ovaj perl program uzima datoteke sazete u drugim formatima (.tar.gz, .tgz, .tar.Z i .Z za ovu iteraciju) i ponovno ih sazima radi bolje kompresije. Izvorni kod ima dosta zgodne dokumentacije o tome sto radi i kako to radi. Ova, najnovija verzija ulazne datoteke prima preko naredbenog retka. Ako nema argumenata, pokusat ce prepakirati svaku datoteku u radnom direktoriju. #!/usr/bin/perl -w ####################################################### # # # Ovaj program uzima compress-ane i gzip-ane datoteke # # u trenutnom direktoriju i pretvara ih u bzip2 # # format. S nastavkom .tgz ponasa se razumno, # # stvarajuci .tar.bz2 datoteku. # # # ####################################################### $brojac = 0; $bajta_snimljeno = 0; $ukupno_datoteka = '/tmp/bzip2_ukupno_na_stroju'; $bzip2_ukupno_na_stroju = 0; @zadane = (defined @ARGV)?@ARGV:<*>; foreach(@zadane) { next if /^bzip/; next unless /\.(tgz|gz|Z)$/; push @datoteke, $_; } $ukupno = scalar(@datoteke); foreach (@datoteke) { if (/tgz$/) { ($novo=$_) =~ s/tgz$/tar.bz2/; } else { ($novo=$_) =~ s/\.g?z$/.bz2/i; } $izv_koliko = (stat $_)[7]; ++$brojac; print "Ponovo sazimam $_ ($brojac/$ukupno)...\n"; if ((system "gzip -cd $_ |bzip2 >$novo") == 0) { $novo_koliko = (stat $novo)[7]; $faktor = int(100*$novo_koliko/$izv_koliko+.5); $bajta_snimljeno += $izv_koliko-$novo_koliko; print "$novo zauzima oko $faktor% velicine $_. :",($faktor<100)?')':'(',"\n"; unlink $_; } else { print "Arrgg! Nesto se dogodilo s $_: $!\n"; } } print ($bajta_snimljeno>=0)?"Dobili ":"Izgubili " , "ste " , abs($bajta_snimljeno) , " bajta diskovnog prostora :" , ($bajta_snimljeno>=0)?")":"(" , "\n" ; unless (-e '/tmp/bzip2_ukupno_na_stroju') { system ('echo "0" >/tmp/bzip2_ukupno_na_stroju'); system ('chmod', '0666', '/tmp/bzip2_ukupno_na_stroju'); } chomp($bzip2_ukupno_na_stroju = `cat $ukupno_datoteka`); open UKUPNO, ">$ukupno_datoteka" or die "Ne mogu otvoriti datoteku s ukupnim rezultatem stroja: $!"; $bzip2_ukupno_na_stroju += $bajta_snimljeno; print UKUPNO $bzip2_ukupno_na_stroju; close UKUPNO; print "Ukupni rezultat cijelog stroja je ",`cat $ukupno_datoteka`," bajta.\n"; 1122.. HHrrvvaattsskkii pprriijjeevvoodd Najnovija verzija ovog prijevoda moze se naci na . Odrzava ga Matej Vela, mvela@public.srce.hr. Svi su prilozi, primjedbe i prijedlozi dobrodosli. .