Strona główna / Społeczność / Blog

Dawno tego nie robiłem, więc już zapomniałem co począć ze świeżo zaistalowanym serwerem PostgreSQL'a. To to pokolei:

  • inicjuję bazę

    /etc/init.d/postgresql initdb
    
  • podłączam się do bazy

    su - postgres -c psql template1
    

    taka konstrukacja to dla tego, że użytkownik root nie ma dostępu do bazy

  • zakładam użytkowninka

    CREATE USER firstuser;
    
  • ustawiam mu hasło

    ALTER USER firstuser PASSWORD 'jegohaslo';
    
  • zakładam bazę

    CREATE DATABASE firstdb WITH OWNER firstuser \
                                TEMPLATE template0 \
                                LC_COLLATE 'pl_PL.UTF-8' \
                                LC_CTYPE 'pl_PL.UTF-8';

Zamiast tworzyć użytkowników i bazy z poziomu użytkownika postgres można zmienić w pliku /var/lib/pgsql/data/pg_hba.conf metodę autoryzacji z ident na trust w wierszu

host    all         all         127.0.0.1/32          ident

,ale to rozwiązanie nie jest bezpieczne, bo autoryzuje każdego użytkownika podłączającego się lokalnie. Docelowo można zmienić metodę autoryzacji na md5.

Żeby wymusić połączenie po IP a nie po gniazdach (ang. socket) można dodać parametr -h localhost.

Jeżeli chcemy zapewnić użytkownikom w miarę łatwy sposób na wymianę dużych plików a nie chcemy zwiększać limitów rozmiaru załączników w poczcie to można skorzystać z jednego z gotowych narzędzi:

  • Event Horizon - niestety projekt już od 2010r. nie rozwijany
  • F*EX - ten testowałem

Co można powiedzieć: działa i się sprawdza.

Na stronie wildfiregames można pobrać grę 0 A.D. Jest dostępna za darmo i są gotowe pliki dla większości popularnych dystrybucji.

Jeszcze w nią nie grałem, chociaż przypomina mi się o niej od kilku lat, może na emeryturze ... ;-)

OpenOffice ma wbudowany mechanizm do porównywania plików. Dostęp jest przez menu Edycja / Porównaj dokumenty (Edit / Compare Document).

Działa bardzo przyjemnie - ostatnio testowałem na dokumentach tekstowych (Writer) z wielopoziomowym numerowaniem i tabelkami (prostymi). Pokazuje zmiany i pozwala na zaakceptowanie bądź odrzucenie znalezionych zmian. Przy czym jest na tyle inteligentny, że pól automatycznych (nr wersji, nr strony, data itp.) nie uwzględnia.

Oczywiście zawsze można dwa dokumenty (stary i nowy) zapisać jako pliki tekstowe i użyć diff'a, ale ...

Czasem jest potrzeba monitorowania kto i kiedy (czy aby nie za często) zagląda do określonych plików. O ile dostęp dla zwykłych użytkowników możemy ograniczyć, chociażby przez ACL'e lub mechanizmy SE Linux, to z administratorami (słynny root) jest większy problem. Jest to szczególnie ważne w środowiskach gdzie jest kilku administratorów z uprawnieniami do korzystania z polecenia su lub/i sudo.

Linuks ma gotowe rozwiązanie każdego problemu (w końcu wykonuje pętlę nieskończona w 5 sekund) - w tym przypadku jest to auditd.

Aby monitorować kto zagląda do katalogu /shares/dokumety trzeba dopisać w pliku /etc/audit/audit.rules (na końcu):

-a exit,always -S all -F dir=/shares/dokumenty

i uruchomić ponownie auditd. Teraz każde odczytanie katalogu (polecenie ls to właśnie odczytanie katalogu) czy pliku w ścieżce /shares/dokumenty (łącznie z podkatalogami) będzie monitorowane.

Oczywiście tego może być dużo, a po drugie dla kogoś te dokumenty są, dlatego można dodać ogranicznik (na końcu lini)

-F gid!=555

jeżeli użytkownicy należący do grupy o numerze 555 mają mieć dostęp. Ponadto jeżeli interesuje nas tylko otwarcie pliku to można zamiast -S all dać -S open -S truncate. W całości taka reguła będzie wyglądała tak:

-a exit,always -S open -S truncate -F dir=/shares/dokumenty -F gid!=555

o innych opcjach można sobie jeszcze poczytać:

man audit.rules
man auditctl

Jak już wspomniałem taki logów może być dużo, a przeglądanie surowego pliku /var/log/audit.log nie nalezy do najprzyjemniejszych. Na szczeście do przeglądania logów można użyć polecenia ausearch z przełącznikiem -i które ładniej wyświetli daty zamiast timestamp'u i użytkowników zamiast ich uid'ów.

Pojawiła się (w lipcu ;-) nowa wersja całkiem przyjemnego narzędzia do przeglądania drzewa LDAP - JXplorer.

Do rysowania grafów można użyć Dia ale to oznacza męki jeżeli później trzeba dodać dużo elementów gdzieś w środku lub ... napisać co ma być połączone z czym i go wygenerować programem Graphviz. Co prawda wtedy mamy inny problem - przy wstawianiu nowych elementów kolejne generowane grafy będą się różnić nie tylko ilością elementów, ale także ich rozmieszczeniem (tak Graphviz sam rozmieszcza elementy).

Najprostszym grafem jest oczywiście Hello world który wygląda tak:

digraph G {Hello->World}

Program zawiera GUI w którym można potrenować, a gotowy obrazek można wyprodukować np. tak:

cat hello.gv | dot -Tpng -o hello.png

jeżeli plik hello.gv zawiera treść jak w przykładzie powyżej to plik hello.png będzie zawierał taki obrazek:

Oczywiście ręczne generowanie plików może być uciążliwe, ale przecież nie o to chodzi. Program sprawdzi się najlepiej na danych które wygenerujemy z zewnętrznego źródła. Czasem jeden obraz wart jest tysiąca słów.

Znalazłem ciekawe narzędzie do wykonywania kopii zapasowych. Nazywa się ... rsync ;-) Dokładniej to znalazłem graficzne narzędzie gadmin-rsync które generuje gotowe skrypty do robienia kopii zapasowych które bazują na rsync.

Zestaw który przygotujemy można od razu uruchomić i zobaczyć postępy. Można też ustawić wykonywanie zgodnie z zadanym harmonogramem (cron).

Na laptopie wykorzystuję same skrypty które są tworzone w katalogu /etc/gadmin-rsync/scripts/.

Do wyszukiwania plików po atrybutach przygotowałem sobie pomocniczy skrypt havesvnproperty.bash:

#!/bin/bash

if [ $# -lt 1 ] ; then
    echo "Skrypt sprawdza, czy plik ma ustawioną etykietę \
                               we właściwości 'wlasne:etykiety'."
    echo " "
    echo "Za mało parametrów"
    echo " "
    echo "Przykładowe użycie:"
    echo "$0 sciezka/do/pliku szukana_etykieta"
    echo "find /home/repozytorium -path '*/.svn' -prune -o \
                                  -exec $0 \\{\\} etykieta \\;"
    exit 1
fi

filename=$1
propval=$2

tags=`svn propget wlasne:etykiety "$filename"`

ma=1
for x in $tags ; do
    if [ $x == $propval ] ; then
        ma=0
    fi
done

if [ $ma -eq 0 ] ; then
    echo "Plik $filename jest oznaczony jako $propval"
fi

exit $ma

potem wyszukiwać można za pomocą polecenia find, np. tak:

find /home/jaqb/myrepo -path '*/.svn' -prune -o \
                       -exec havesvnproperty.bash \{\} etykieta \;

Podczas przenoszenia strony trzeba wykonać następujące kroki:

  • przenieść pliki
  • przenieść bazę
  • zmodyfikować pliki settings/siteaccess/*/site.ini.append.php (trzeba wskazać nowe ustawienia bazy)
  • wyczyścić cache - ręcznie (lub nie przenosić plików tymczasowych)

Ostatni krok jest ważny - jak nie wyczyściłem pamięci to dostawałem tylko komunikat: "You do not have permission to access this area".

Ten kto umie pisze kod, ten kto nie umie pisze książki..., albo blog.

Pon Wt Śr Czw Pt So N
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30