Jeśli ktoś będzie kompilować Postfixa na OpenSolarisie nowszym niż b130, otrzyma następujący błąd:
"dict_nisplus.c", line 123: undefined symbol: nis_result
"dict_nisplus.c", line 123: undefined symbol: reply
"dict_nisplus.c", line 182: warning: implicit function declaration: nis_list
"dict_nisplus.c", line 182: undefined symbol: FOLLOW_LINKS
"dict_nisplus.c", line 182: undefined symbol: FOLLOW_PATH
"dict_nisplus.c", line 188: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 188: undefined symbol: NIS_SUCCESS
"dict_nisplus.c", line 189: undefined struct/union member: objects
"dict_nisplus.c", line 189: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 189: undefined struct/union member: objects_len
"dict_nisplus.c", line 189: warning: left operand of "." must be struct/union object
"dict_nisplus.c", line 193: warning: implicit function declaration: nis_freeresult
"dict_nisplus.c", line 196: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 196: undefined struct/union member: objects_val
"dict_nisplus.c", line 196: warning: left operand of "." must be struct/union object
"dict_nisplus.c", line 196: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 203: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 203: warning: left operand of "." must be struct/union object
"dict_nisplus.c", line 203: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 220: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 220: undefined symbol: NIS_NOTFOUND
"dict_nisplus.c", line 221: left operand of "->" must be pointer to struct/union
"dict_nisplus.c", line 221: undefined symbol: NIS_PARTIAL
"dict_nisplus.c", line 224: warning: implicit function declaration: nis_sperrno
"dict_nisplus.c", line 224: left operand of "->" must be pointer to struct/union
cc: acomp failed for dict_nisplus.c
make: *** [dict_nisplus.o] Error 1
make: *** [update] Error 1
Dzieje się tak dlatego, iż Postfix zakłada, że mamy biblioteki podsystemu NIS+, jednak ten system nazewniczy został usunięty w b131: Heads-Up: Removed NIS+ as Naming Service from Solaris Installer
Najlepszym rozwiązaniem problemu jest zdefiniowanie system OpenSolaris w src/util/sys_defs.h jako osobna platforma systemowa.
Prostszą i szybszą metodą jest usunięcie wpisu dotyczącą NIS+ ("#define HAS_NISPLUS") z pliku "src/util/sys_defs.h" w źródłach Postfixa.
Różnice w plikach wersji 2.7.0:
$ diff -u src/util/sys_defs.h_orig src/util/sys_defs.h
--- src/util/sys_defs.h_orig 2010-03-07 21:09:19.889612089 +0100
+++ src/util/sys_defs.h 2010-03-07 21:39:07.102353914 +0100
@@ -401,7 +401,6 @@
#define DEF_DB_TYPE "dbm"
#define ALIAS_DB_MAP "dbm:/etc/mail/aliases"
#define HAS_NIS
-#define HAS_NISPLUS
#define USE_SYS_SOCKIO_H /* Solaris 2.5, changed sys/ioctl.h */
#define GETTIMEOFDAY(t) gettimeofday(t)
#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb"
Następnie kompilujemy Postfixa. W najprostszej postaci:
$ make makefiles
$ make
Jeśli potrzebujemy kompilator GCC lub Sun Studio, można je zainstalować z repozytorium:
# pkg install -v gcc-dev
lub dla Sun Studio:
# pkg install -v sunstudio12u1
# ln -s /opt/sunstudio12.1 /opt/SUNWspro
Jeśli chcemy skompilować Postfixa za pomocą Sun Studio:
$ make makefiles CC=/opt/SUNWspro/bin/cc
$ make
poniedziałek, 8 marca 2010
sobota, 6 marca 2010
migracja ONNV do IPS
OpenSolaris b136 to przełomowy build, ponieważ od changesetu 11838 konsolidacja ONNV jest w stanie budować paczki IPS natywnie.
Dotychczasowy system aktualizacji systemu przez BFU/ACR zostanie wycofany w ciągu kilku najbliższych buildów.
Dla developerów systemu jest to spore uproszczenie ponieważ najnowszy build systemu będzie można zainstalować poprzez 'pkg image-update' lub przez wrapper 'onu'.
Na zdjęciu widać jak wygląda proces aktualizacji:
Dotychczasowy system aktualizacji systemu przez BFU/ACR zostanie wycofany w ciągu kilku najbliższych buildów.
Dla developerów systemu jest to spore uproszczenie ponieważ najnowszy build systemu będzie można zainstalować poprzez 'pkg image-update' lub przez wrapper 'onu'.
Na zdjęciu widać jak wygląda proces aktualizacji:
wtorek, 2 marca 2010
IPS - search
Taka mała ciekawostka.
Za pomocą 'pkg' można wyszukiwać pliki za pomocą ich hashy sha1.
W prostym przykładzie wyszukam /usr/bin/bash za pomocą jego hasha:
$ digest -a sha1 /usr/bin/bash
5e047055254cee181900f99553fe82af0e15e54f
$ pkg search 5e047055254cee181900f99553fe82af0e15e54f
INDEX ACTION VALUE PACKAGE
5e047055254cee181900f99553fe82af0e15e54f file usr/bin/bash pkg:/SUNWbash@3.2.50-0.122
5e047055254cee181900f99553fe82af0e15e54f file usr/bin/bash pkg:/SUNWbash@3.2.50-0.123
Za pomocą 'pkg' można wyszukiwać pliki za pomocą ich hashy sha1.
W prostym przykładzie wyszukam /usr/bin/bash za pomocą jego hasha:
$ digest -a sha1 /usr/bin/bash
5e047055254cee181900f99553fe82af0e15e54f
$ pkg search 5e047055254cee181900f99553fe82af0e15e54f
INDEX ACTION VALUE PACKAGE
5e047055254cee181900f99553fe82af0e15e54f file usr/bin/bash pkg:/SUNWbash@3.2.50-0.122
5e047055254cee181900f99553fe82af0e15e54f file usr/bin/bash pkg:/SUNWbash@3.2.50-0.123
sobota, 9 stycznia 2010
Solaris jako domowy serwer
Robiąc kopie laptopa za pomocą 'rsync' na domowy komputer, zaciekawił mnie w pewnym momencie postęp kopiowania plików jaki pokazuje rsync, a w zasadzie, to jego brak..
Komputer pełniący rolę serwera pracuje pod kontrolą systemu OpenSolaris.
Logując się na serwer zauważyłem, że bardzo mało danych jest wysyłanych przez sieć, natomiast dysk jest używany w 100%:

Widać, że dysk 'cmdk1' ma sporo operacji odczytu.
Za pomocą skryptu DTrace 'rwbytype', znajdującego się w pakiecie DTrace Toolkit (DTT) sprawdziłem jakie procesy używają I/O:
Widać, że najwięcej danych odczytuje rsync z PIDem 5981.
Kolejny skrypt z DTT 'pfilestat' pokaże statystyki otwartych plików danego procesu:
# /opt/DTT/Proc/pfilestat 5981

Widać, że proces odczytuje sporo z deskryptora pliku nr 0.
Aby dowiedzieć się więcej o tym pliku wystarczy użyć komendy 'pfiles' z numerem PID:
# pfiles 5981

Teraz już wiadomo dlaczego rsync 'zatrzymał' się na chwilę z kopiowaniem danych.
W tym przypadku porównuje sumy kontrolne źródłowego i docelowego pliku, ponieważ plik został zmodyfikowany od ostatniego kopiowania.
Porównywany plik jest obrazem dysku wirtualnej maszyny VirtualBox'a i zajmuje 13GB, dlatego też ta operacja zatrzymała 'progress' jaki pokazuje rsync.
Aby przyśpieszyć kopiowanie plików usunąłem ten plik z docelowego miejsca, jednocześnie mając jego kopię w snapshotach ZFS.
Komputer pełniący rolę serwera pracuje pod kontrolą systemu OpenSolaris.
Logując się na serwer zauważyłem, że bardzo mało danych jest wysyłanych przez sieć, natomiast dysk jest używany w 100%:

Widać, że dysk 'cmdk1' ma sporo operacji odczytu.
Za pomocą skryptu DTrace 'rwbytype', znajdującego się w pakiecie DTrace Toolkit (DTT) sprawdziłem jakie procesy używają I/O:
Widać, że najwięcej danych odczytuje rsync z PIDem 5981.Kolejny skrypt z DTT 'pfilestat' pokaże statystyki otwartych plików danego procesu:
# /opt/DTT/Proc/pfilestat 5981

Widać, że proces odczytuje sporo z deskryptora pliku nr 0.
Aby dowiedzieć się więcej o tym pliku wystarczy użyć komendy 'pfiles' z numerem PID:
# pfiles 5981

Teraz już wiadomo dlaczego rsync 'zatrzymał' się na chwilę z kopiowaniem danych.
W tym przypadku porównuje sumy kontrolne źródłowego i docelowego pliku, ponieważ plik został zmodyfikowany od ostatniego kopiowania.
Porównywany plik jest obrazem dysku wirtualnej maszyny VirtualBox'a i zajmuje 13GB, dlatego też ta operacja zatrzymała 'progress' jaki pokazuje rsync.
Aby przyśpieszyć kopiowanie plików usunąłem ten plik z docelowego miejsca, jednocześnie mając jego kopię w snapshotach ZFS.
piątek, 8 stycznia 2010
Własny profil RBAC - mini howto
Czasami pojawia się problem, gdzie użycie profilu RBAC wydaje się idealnym rozwiązaniem.
W Solarisie mamy kilkaset gotowych profili. Bardzo łatwo jednak utworzyć nowy profil, pod specyficzne rozwiązanie.
Podam bardzo prosty przykład jak to uczynić:
Dodajemy linijkę definiującą nazwę profilu w pliku /etc/security/prof_attr:
echo "My Profile::::" >> /etc/security/prof_attr
Dodajemy linijkę definiującą jaką aplikację z jakim UIDem możemy uruchamiać w pliku /etc/security/exec_attr:
echo "My Profile:solaris:cmd:::/usr/local/sbin/my_app:uid=345" >> /etc/security/exec_attr
W tym przykładzie użytkownik posiadający profil 'My Profile' będzie mógł uruchomić aplikację '/usr/local/sbin/my_app' jako UID=345.
Nadajemy profil 'My Profile' użytkownikowi 'user123':
usermod -P "My Profile" user123
UWAGA, 'usermod -P' zmienia uprawnienia profili, warto zauważyć jakie profile ma dany user, aby nie odebrać sobie przypadkowo uprawnień.
Oto przykład, jak działa nowy profil:
W Solarisie mamy kilkaset gotowych profili. Bardzo łatwo jednak utworzyć nowy profil, pod specyficzne rozwiązanie.
Podam bardzo prosty przykład jak to uczynić:
Dodajemy linijkę definiującą nazwę profilu w pliku /etc/security/prof_attr:
echo "My Profile::::" >> /etc/security/prof_attr
Dodajemy linijkę definiującą jaką aplikację z jakim UIDem możemy uruchamiać w pliku /etc/security/exec_attr:
echo "My Profile:solaris:cmd:::/usr/local/sbin/my_app:uid=345" >> /etc/security/exec_attr
W tym przykładzie użytkownik posiadający profil 'My Profile' będzie mógł uruchomić aplikację '/usr/local/sbin/my_app' jako UID=345.
Nadajemy profil 'My Profile' użytkownikowi 'user123':
usermod -P "My Profile" user123
UWAGA, 'usermod -P' zmienia uprawnienia profili, warto zauważyć jakie profile ma dany user, aby nie odebrać sobie przypadkowo uprawnień.
Oto przykład, jak działa nowy profil:
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 ;)
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
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
Subskrybuj:
Posty (Atom)