poniedziałek, 2 listopada 2009

ZFS Deduplication w snv128

Deduplikacja ZFS najprawdopodobniej pojawi się w snv128.
Już teraz jest włączona do źródeł:

$ hg log | head
changeset: 10923:df470fd79c3c
tag: tip
user: Evan Yan
date: Mon Nov 02 15:58:28 2009 +0800
summary: PSARC/2008/181 Solaris Hotplug Framework

changeset: 10922:e2081f502306
user: Jeff Bonwick
date: Sun Nov 01 14:14:46 2009 -0800
summary: PSARC 2009/571 ZFS Deduplication Properties


Update: Deduplikacja pojawi się w buildzie 128, zamiast 127 ;)

piątek, 2 października 2009

opensolaris tlen plugin

Dla tych, co potrzebują plugin komunikatora Tlen.pl na OpenSolaris'owym Pidginie ;)

Pobieramy kompilator i odpowiednie zależności z repozytorium OpenSolaris:
# pkg install -v SUNWgnome-common-devel SUNWxwinc SUNWgnome-base-libs gcc-dev SUNWgtar

Potrzebne są również źródła samego plugina:
$ wget -c http://nic.com.pl/~alek/pidgin-tlen/pidgin-tlen-20090811.tar.gz

Po rozpakowaniu paczki, należy delikatnie wyedytować plik Makefile:
$ gtar xvzf pidgin-tlen-20090811.tar.gz
pidgin-tlen-20090811
pidgin-tlen-20090811/README
pidgin-tlen-20090811/Makefile
pidgin-tlen-20090811/tlen_48.png
pidgin-tlen-20090811/tlen_22.png
pidgin-tlen-20090811/tlen_16.png
pidgin-tlen-20090811/tlen.h
pidgin-tlen-20090811/tlen.c
pidgin-tlen-20090811/auth.c
pidgin-tlen-20090811/wb.h
pidgin-tlen-20090811/wb.c
pidgin-tlen-20090811/chat.h
pidgin-tlen-20090811/chat.c
pidgin-tlen-20090811/avatar.h
pidgin-tlen-20090811/avatar.c
pidgin-tlen-20090811/Makefile.mingw



$ diff -u Makefile ../../pidgin-tlen-20090811/Makefile
--- Makefile 2009-08-24 13:23:53.000000000 +0200
+++ ../../pidgin-tlen-20090811/Makefile 2009-10-02 00:35:39.145438858 +0200
@@ -1,5 +1,5 @@
CC?= gcc
-LOCALBASE?= /usr/local
+LOCALBASE?= /usr
DESTDIR?=

CFLAGS+=`PKG_CONFIG_PATH=${LOCALBASE}/lib/pkgconfig pkg-config pidgin --cflags` \
@@ -25,11 +25,11 @@
ectags -Ra /usr/obj/ports/pidgin-2.5.5/pidgin-2.5.5/

install:
- install -d -o root -g wheel ${DESTDIR}${LOCALBASE}/lib/purple-2/
- install -o root -g wheel libtlen.so ${DESTDIR}${LOCALBASE}/lib/purple-2/
+ ginstall -d -o root -g sys ${DESTDIR}${LOCALBASE}/lib/purple-2/
+ ginstall -o root -g sys libtlen.so ${DESTDIR}${LOCALBASE}/lib/purple-2/
for i in 16 22 48; do \
- install -d -o root -g wheel ${DESTDIR}${LOCALBASE}/share/pixmaps/pidgin/protocols/$$i/; \
- install -o root -g wheel tlen_$$i.png \
+ ginstall -d -o root -g sys ${DESTDIR}${LOCALBASE}/share/pixmaps/pidgin/protocols/$$i/; \
+ ginstall -o root -g sys tlen_$$i.png \
${DESTDIR}${LOCALBASE}/share/pixmaps/pidgin/protocols/$$i/tlen.png; \
done



Dla ułatwienia, tak powinien wyglądać plik Makefile po zmianach:
$ cat Makefile
CC?= gcc
LOCALBASE?= /usr
DESTDIR?=

CFLAGS+=`PKG_CONFIG_PATH=${LOCALBASE}/lib/pkgconfig pkg-config pidgin --cflags` \
-I${LOCALBASE}/include \
-fPIC \
-Wall
DATE= `grep TLEN_VERSION tlen.h | awk '{print $$3}' | sed -e 's/"//g'`

.c.o:
$(CC) -c $< $(CFLAGS) OBJS= tlen.o auth.o chat.o wb.o avatar.o all: ${OBJS} $(CC) -shared -fPIC -o libtlen.so ${OBJS} clean: rm -f ${OBJS} libtlen.so *.core tags: *.c *.h rm -f tags ectags . ectags -Ra /usr/obj/ports/pidgin-2.5.5/pidgin-2.5.5/ install: ginstall -d -o root -g sys ${DESTDIR}${LOCALBASE}/lib/purple-2/ ginstall -o root -g sys libtlen.so ${DESTDIR}${LOCALBASE}/lib/purple-2/ for i in 16 22 48; do \ ginstall -d -o root -g sys ${DESTDIR}${LOCALBASE}/share/pixmaps/pidgin/protocols/$$i/; \ ginstall -o root -g sys tlen_$$i.png \ ${DESTDIR}${LOCALBASE}/share/pixmaps/pidgin/protocols/$$i/tlen.png; \ done dist: clean rm -f pidgin-tlen-${DATE}.tar.gz rm -rf pidgin-tlen-${DATE} mkdir pidgin-tlen-${DATE} cp README* avatar.[ch] chat.[ch] wb.[ch] auth.c tlen.[ch] tlen_*.png Makefile* pidgin-tlen-${DATE} tar zcvf pidgin-tlen-${DATE}.tar.gz pidgin-tlen-${DATE} rm -rf pidgin-tlen-${DATE} .PHONY: tags




Przed kompilacją pluginu należy zmodyfikować zmienną PATH, aby narzędzia GNU były wyszukiwane jako pierwsze:

# export PATH=/usr/gnu/bin:${PATH}

Czyścimy pliki z poprzednich kompilacji:
# gmake clean
rm -f tlen.o auth.o chat.o wb.o avatar.o libtlen.so *.core


Plugin jest mały, tak więc kompilacja trwa moment:
# gmake
cc -c tlen.c `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config pidgin --cflags` -I/usr/local/include -fPIC -Wall
cc -c auth.c `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config pidgin --cflags` -I/usr/local/include -fPIC -Wall
cc -c chat.c `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config pidgin --cflags` -I/usr/local/include -fPIC -Wall
cc -c wb.c `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config pidgin --cflags` -I/usr/local/include -fPIC -Wall
cc -c avatar.c `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config pidgin --cflags` -I/usr/local/include -fPIC -Wall
cc -shared -fPIC -o libtlen.so tlen.o auth.o chat.o wb.o avatar.o



Po kompilacji instalujemy plugin w systemie:
# gmake install
ginstall -d -o root -g sys /usr/lib/purple-2/
ginstall -o root -g sys libtlen.so /usr/lib/purple-2/
for i in 16 22 48; do \
ginstall -d -o root -g sys /usr/share/pixmaps/pidgin/protocols/$i/; \
ginstall -o root -g sys tlen_$i.png \
/usr/share/pixmaps/pidgin/protocols/$i/tlen.png; \
done

niedziela, 23 sierpnia 2009

OpenSolaris: encrypt i decrypt

Solaris oferuje bardzo proste w użyciu narzędzie do szyfrowania plików: 'encrypt'. Poniżej przykład.

Tworzymy plik z tekstem:

> echo "To jest tajny tekst" > plik.txt

Tworzymy zaszyfrowany plik:

> encrypt -v -a aes -i plik.txt -o plik-zaszyfrowany
Enter passphrase:
Re-enter passphrase:
[..................|...................|...................|..................]
Done.


> file plik.txt plik-zaszyfrowany
plik.txt: ascii text
plik-zaszyfrowany: data

Usuwamy oryginalny plik:

> rm plik.txt

Pozostaje nam tylko zaszyfrowana wersja pliku.

Aby odczytać zawartość zaszyfrowanego pliku wpisujemy:

> decrypt -v -a aes -i plik-zaszyfrowany
Enter passphrase:
[..................|...................|...................|..................]
Done.
To jest tajny tekst

sobota, 22 sierpnia 2009

IPS tips

OpenSolaris podczas instalacji systemu tworzy tzw. obraz (pkg image-create) w katalogu głównym i przypisuje do niego publishera (pkg publisher), dlatego jak robimy update systemu używamy komendy 'pkg image-update'.

Mało znaną funkcjonalnością systemu pakietów OpenSolarisa IPS jest możliwość tworzenia wielu 'obrazów' w różnych katalogach. Dla przykładu, każdy użytkownik może sobie stworzyć takowy 'obraz' w swoim katalogu domowym i tam instalować paczki zamiast w katalogu głównym systemu jako root.

Ostatnio znalazłem dodatkowe repozytorium IPS z ciekawymi paczkami http://ips.homeunix.com:10906/ i zamiast dodawać kolejnego publishera do systemu i instalować jako root w globalnej strefie postanowiłem dodać nowe repozytorium jako zwykły użytkownik w katalogu domowym, dodatkowo w zonie TX..

> zonename
public

> plabel
PUBLIC

> prtdiag
prtdiag can only be run in the global zone

Będziemy instalować paczki w katalogu /home/estibi/media/

> mkdir -p /home/estibi/media/
> pkg image-create -p multimedia=http://ips.homeunix.com:10906/ /home/estibi/media/

Uwaga, musimy wejść do katalogu /home/estibi/media lub użyć parametru pkg -R, inaczej 'pkg' będzie używać publishera z katalogu "/".

> cd /
> pkg publisher
PUBLISHER TYPE STATUS URI
opensolaris.org (preferred) origin online http://pkg.opensolaris.org/dev/

> cd /home/estibi/media/
> pkg publisher
PUBLISHER TYPE STATUS URI
multimedia (preferred) origin online http://ips.homeunix.com:10906/

> pkg refresh --full

Instalujemy paczkę 'easytag':

> pkg install -v pkg:/MBLeasytag
Creating Plan - Before evaluation:
UNEVALUATED:
+pkg:/MBLeasytag@2.1,5.11:20090615T121154Z

After evaluation:
None -> pkg:/MBLeasytag@2.1,5.11:20090615T121154Z
None -> pkg:/MBLid3lib@3.8.3,5.11:20090615T121103Z
Actuators:

None
DOWNLOAD PKGS FILES XFER (MB)
Completed 2/2 44/44 1.82/1.82

PHASE ACTIONS
Install Phase 109/109
PHASE ITEMS
Reading Existing Index 8/8
Indexing Packages 2/2


Jeśli teraz uruchomimy zainstalowany program otrzymamy komunikat błędu, ponieważ program jest zlinkowany z bibliotekami, które powinny się znajdować w katalogu głównym:

> /home/estibi/media/usr/bin/easytag
ld.so.1: easytag: fatal: libid3-3.8.so.3: open failed: No such file or directory
Killed

Aby program się uruchomił, należy podać mu ścieżkę do bibliotek:

> LD_LIBRARY_PATH=/home/estibi/media/usr/lib /home/estibi/media/usr/bin/easytag

Można również wyeksportować zmienną:

> export LD_LIBRARY_PATH=/home/estibi/media/usr/lib:${LD_LIBRARY_PATH}
> /home/estibi/media/usr/bin/easytag

Paczka 'easytag' jest zainstalowana:

> pkg -R /home/estibi/media list
NAME (PUBLISHER) VERSION STATE UFIX
MBLeasytag 2.1 installed ----
MBLid3lib 3.8.3 installed ----

czwartek, 2 lipca 2009

snoop i bity pakietów

Solarisowy snoop ma podobną składnię co tcpdump, oto przykłady:

Aby wyłapać pakiety TCP z flagą SYN:
# snoop -V 'tcp and tcp[13]& 0x2 != 0'

Aby wyłapać pakiety TCP z flagą RST:
# snoop -V 'tcp and tcp[13]& 0x4 != 0'

wtorek, 23 czerwca 2009

PathScale Compiler Suite

Powstała inicjatywa aby 'uwolnić' pakiet kompilatorów PathScale.
Pomysł jest powiązany z projektem OSUNIX.
Więcej informacji: PathScale

środa, 17 czerwca 2009

The Zones Parallel Patching

Równoległe paczowanie stref jest już dostępne w Solarisie 10 w łatkach:
119255-66 na x86 oraz 119254-66 na sparc.

Więcej informacji na:
http://blogs.sun.com/patch/entry/zones_parallel_patching_feature_now