

	    Podkatalog 'etc' w katalogu domowym uytkownika 
			    
					    implementacja
					    
    

  1.	~/etc
  1.1	  Ja chc ~/.etc
  2.	Co powinno si znale w ~/etc/ ?
  3.	Wyjtki.
  4.	Zgodno.
  4.1     cieki w plikach konfiguracyjnych.
  4.2	  Programy niezalene od rodowiska uytkownika.
  5.	Algorytm uzyskiwania HOME_ETC w atkach dla programw.
  6.	Inne konfigurowalne katalogi.
  7.	Prawa.
  8.	Przykadowy kod.
  9.	Biblioteka wspdzielona.
  10.	Kontakt.
  11.	Autorzy.

1. ~/etc/

    Katalog ~/etc/ zaczyna by coraz bardziej potrzebny. W miar jak powiksza
    si ilo zorientowanych na uytkownika aplikacji, w tym przede wszystkim
    aplikacji graficznych, narzdzi DTP i zorientowanych profilowo menederw
    okien, powiksza si ilo informacji konfiguracyjnych, ktre trzeba gdzie
    przechowywa. W katalogach domowych uytkownikw zaczyna w niebezpiecznym 
    tempie narasta ilo plikw z kropk! Katalog domowy osoby uywajcej 
    wielu rnorodnych aplikacji wyglda zaczyna jak skra czowieka, ktry 
    dosta wysypki. Biedny katalog domowy...
    
    Ale na tym nie koniec. Niektre aplikacje, jak np. 'qmail-local' z pakietu
    'qmail', pozwalaj aby ich zachowanie byo kontrolowane przez atrybuty
    katalogu zawierajcego pliki konfiguracyjne uytkownika (czyli de facto jego 
    katalogu domowego). Co stanie si, jeli dwa takie programy bd w danej
    chwili wymagay zmiany tych samych atrybutw katalogu domowego??

1.1 Ja chc ~/.etc

    Niektrzy woleliby trzyma pliki konfiguracyjne w ~/.etc ; jeszcze inni
    w ~/conf... Rad na to jest takie przystosowanie programw, aby korzystay
    ze zmiennej rodowiskowej $HOME_ETC mwicej o lokalizacji ww. plikw.
    Dla uproszczenia w dalszej czci dokumentu bd nazywa ten katalog
    po prostu ~/etc, naley jednak mie na uwadze, e chodzi tu o katalog
    z plikami konfiguracyjnymi, ktrego nazwa przechowywana jest wanie w
    tej zmiennej rodowiskowej.
    
    $HOME_ETC ma posta acucha bdcego nazw katalogu, w ktrym przechowywane s
    pliki konfiguracyne. Umieszczenie w tej zmiennej czego ponad to ma
    prawo powodowa nieprzewidziane zachowanie programu. W $HOME_ETC jest dopuszczalne
    stosowanie tylko BEZWZGLDNEJ NAZWY CIEKOWEJ KATALOGU.

    Przykad:

     HOME_ETC=/mojeetc
     
     co oznacza, e pliki konfiguracyjne maj by przechowywane w /mojeetc/

     HOME_ETC=/home/users/mojlogin/etc     
    
     co oznacza, e pliki konfiguracyjne maj by przechowywane
     w /home/users/mojlogin/etc     
    
    $HOME_ETC powinna by zdefiniowana w globalnym pliku konfiguracyjnym
    danej powoki lub w szablonie plikw konfiguracyjnych powoki (np. w
    ktrym z plikw z katalogu /etc/skel/).
    
2. Co powinno si znale w ~/etc/ ?

    W katalogu ~/etc/ powinny znale si wszystkie pliki konfiguracyjne
    aplikacji, ktre tworz je dla poszczeglnych uytkownikw, a ktre
    wczeniej przechowywane byy w ~/.nazwapliku
    
    Aplikacje, ktre wymagaj istnienia wicej ni jednego pliku 
    konfiguracyjnego powinny posiada swoje wasne podkatalogi wewntrz HOME_ETC
    Nazwy plikw powinny zaczyna si kropk.
    
    PRZYKADY:
    
    ~/etc/pinerc
    ~/etc/ssh/
    ~/etc/qmail/
    ~/etc/qmail/qmail-default
    ~/etc/pinforc
    
3. Wyjtki.

    W ~/etc/ nie musz (nie powinny) by umieszczone nastpujce pliki:
    
    .profile
    .login
    .logout
    .bashrc
    .bash_profile
    .bash_history
    .bash_login
    .bash_logout
    .inputrc
    .etc-dir
    
    i inne pliki konfiguracyjne powok.
    
4. Zgodno.

    Programy, ktre chc wprowadza proponowane udogodnienie powinny zachowa
    zgodno w d. To znaczy, e jeli nie uda si ustali alternetywnej
    lokalizacji pliku to korzystamy z lokalizacji domylnie wymaganej przez
    aplikacj.
    
4.1. cieki w plikach konfiguracyjnych.

    Ta sprawa wymaga dyskusji. Na pierwszy rzut oka wydaje si naturalnym
    traktowa ./ wystpujce w pliku umieszczonym w ~/etc/ jak zwyczajn
    ciek wzgldn do katalogu biecego procesu. Lecz o wiele atwiej byoby
    wprowadza zmiany, gdybymy zaoyli, e ./ wystpujce gdzie w ~/etc/plik
    zawsze odnosi si do katalogu domowego.
    
    Przykadem moe by tu znw 'qmail-local', dla ktrego kropka na pocztku
    nazwy miejsca, do ktrego ma dotrze przesyka jest informacj, e 
    wiadomo naley zapisa do pliku (katalogu) umiejscowionego wzgldem
    katalogu domowego. Owszem, mona to omin podajc np.: ../../Mailbox
    ale wymaga to zwikszonego nakadu pracy na modyfikacj rde programw,
    ktre zachowuj si w podobny sposb, wprowadza take rnice w zawartoci
    plikw umiejscowionych bezporednio w ~ a tych z ~/etc/[dir/]. Dlatego
    moj propozycj jest by traktowa ./ wystpujce w ~/etc/[dir/] jako
    katalog domowy. Pozwoli to zautomatyzowa proces wprowadzania w ycie
    nowego sposobu rozmieszczania plikw konfiguracyjnych.

4.2 Programy niezalene od rodowiska uytkownika.
    
    Wprowadzajc ~/etc nie da si unikn sytuacji, w ktorych przerobi
    trzeba program nie majcy stycznoci ze zmiennymi rodowiskowymi 
    uytkownika. Program taki to np. lokalny dostarczyciel poczty,
    ktrego jedynym dziaaniem jest uruchomi si na prawach danego uytkownika
    i korzystajc z plikw konfiguracyjnch (np. ustawie filtracji czy
    lokalnego trasowania poczty) obsuy przesyk. Musi on w jaki sposb
    dowiedzie si o katalogu konfiguracyjnym. Wygodnym rozwizaniem wydaje si
    przekazanie informacji o zawartoci $HOME_ETC jako opcji podanej przy
    wywoaniu. Dlatego wanie, w przypadku niektrych aplikacji informacj 
    o miejscu na pliki konfiguracyjne musi wprowadzi administrator systemu, 
    a odpowiednio przystosowana aplikacja powinna da mu tak moliwo.

    W tym miejscu widzimy, e nigdy nie uda si uzyska penej elastycznoci
    w korzystaniu z katalogu zawierajcego pliki konfiguracyjne. :(  
    Moemy teraz stwierdzi, e $HOME_ETC atwiej uytkownikom narzuci,
    np. w globalnym profilu powoki.

5. Algorytm uzyskiwania HOME_ETC w atkach dla programw.

    1	Czy istnieje zmienna rodowiskowa $HOME_ETC ?
    
	TAK:  przejd do (3)
	NIE:  przejd do (2)
    
    2	Czy istnieje plik o nazwie .etc-dir i istnieje katalog o nazwie
        podanej w jego pierwszej linii tego pliku ?
    
	TAK:  ustaw HOME_ETC i przejd do (3)
	NIE:  uyj starej metody korzystania z plikw konfiguracyjnych
    
    3	Uywaj pliku konfiguracji z ~/$HOME_ETC/

6. Inne konfigurowalne katalogi.

    Poza plikami konfiguracyjnymi w katalogu domowym warto te 
    uporzdkowa spraw plikw i podkatalogw z danymi.
    Zmienna rodowiskowa okrelajca katalog to $DATA_DIR i
    podlega ona takim samym prawom jak $HOME_ETC.

7. Prawa.

    0700 dla ~/etc/ i 0700 dla plikw i katalogw wewntrz (chyba, e 
    wymagaj inaczej)

8. Przykadowy kod.

    Odpowiedni plik nagwkowy z tymi funkcjami znajdziesz w repozytorium CVS:
    
			/home-etc/src/home_etc.h
			
    Przykady uycia znajdziesz w:
    
			/home-etc/src/example*.c
			
    na cvs.pld-linux.org

9. Biblioteka wspdzielona.

    eby nie trzeba byo robi duych atek, ktre powielaj te same
    dziaania i w ktrych mona si pomyli napisaem krtk bibliotek
    wspdzielon, ktr odnale mona w CVS w module home-etc, a take
    w pakiecie RPM o nazwie home-etc. Biblioteka ma naprawd prosty
    interfejs programisty i jeli chcesz jej uy dodajc funkcjonalno
    mechanizmu HOME-ETC do dowolnej aplikacji to musisz tylko zainstalowa
    u siebie pakiet home-etc-devel, poczy program z bibliotek wspdzielon
    w momencie budowania, a w samym kodzie C dopisa #include <home_etc.h>

    Aby przejrze API biblioteki zainstaluj pakiet home-etc-devel, a potem
    zajrzyj do: /usr/include/home_etc.h

    Nie zapomnij o dodaniu BuildRequired: home-etc-devel oraz Requires: home-etc
    do speca pakietu, ktry modyfikujesz.

    ps:  Mam nadziej zrobi osobne HOWTO dla tworzcych poprawki, ktre
         dokadniej opisaoby wczanie tego w atki na konkretnych przykadach,
	 wic w razie czego szukajcie w pakiecie home-etc-devel w sekcji dokumentacji
	 (/usr/share/doc/home-etc-[wersja]).
    
10. Kontakt.

    Jeli chcesz wyrazi sw opini, czy wymieni pogldy dotyczce 
    powyszego tematu, wylij pust wiadomo na adres:
    
			pld-devel-pl@lists.pld-linux.org

    aby doczy do listy dyskusyjnej osb rozwijajcych PLD.

11. Autorzy.

Autorem tego dokumentu jest		Pawe Wilk <siefca@gnu.org>
Pomys na osobny katalog z danymi:	Tomasz Koczko <kloczek@rudy.mif.pg.gda.pl>
Pomys na zmienn rodowiskow:		Adam Ryba <pooh@gate.pl>
Pomys na makro w stylu gettext:	Przemek Borys <pborys@dione.ids.pl>
Poprawki/aktualizacja:			Tomasz Orzechowski <orzech@pld-linux.org>
