Pokazywanie postów oznaczonych etykietą linux. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą linux. Pokaż wszystkie posty

sobota, 11 grudnia 2010

Kompilacja KDE ze źródeł dla niewtajemniczonych

4 komentarze
Kilka dni temu postanowiłem zmierzyć się z wyzwaniem samodzielnej kompilacji KDE ze źródeł. To co po pierwszych próbach wydawało mi się niemal niemożliwe, ostatecznie okazało się nie tak skomplikowane jak sądziłem. Podstawowy błąd jaki robiłem na początku był taki, że kompilację uruchamiałem na starszym wydaniu Kubuntu 10.04. Jest to wersja o dłuższym okresie serwisowania (tzw. LTS - Long Term Support), więc byłem przekonany, że programiści KDE będą ją również wspierać w procesie kompilacji. Tak poza tym, to właśnie tą wersję miałem zainstalowaną na komputerze stacjonarnym i to był główny powód, dlaczego z niej skorzystałem. O problemach jakie wtedy napotkałem nie będę pisał, bo nie występowały one już w Kubuntu 10.10. Tutaj jedynym problemem było zainstalowanie wszystkich wymaganych zależności na potrzeby kompilacji.

Poniższy opis/poradnik powstał przy znacznym wykorzystaniu następujących materiałów dostępnych w Internecie:
Warto do nich zajrzeć w razie pojawienia się innych niż opisane w tym tekście problemów, lub jeśli będzie potrzeba bardziej dokładnego doczytania się co skąd się bierze, bo ja nie zawsze dokładnie to przedstawiam.
    Aktualizacja oprogramowania

    Kubuntu w podstawowej konfiguracji zawiera jedynie wpisy do przetestowanych repozytoriów, co do których w miarę jest pewność, że pakiety tam zawarte będą działać stabilnie. Nie ma dodanych tych, które zawierają rozwojowe i testowe wersje pakietów. One właśnie są potrzebne w momencie kompilacji KDE. Dodajemy zatem te repozytoria i instalujemy aktualizacje:
    sudo add-apt-repository ppa:kubuntu-ppa/backports
    sudo add-apt-repository ppa:kubuntu-ppa/beta
    sudo apt-get update
    sudo apt-get upgrade

    Nie wiem dlaczego, ale po wykonaniu tych kroków narzędzie do aktualizacji z Kubuntu poinformowało mnie (trzeba sprawdzić odpowiednią ikonkę w zasobniku systemowym koło zegara), że jeszcze nie wszystkie zostały zainstalowane. Instalujemy wszystkie aktualizacje, które zostały zaproponowane.

    Instalujemy dodatkowe pakiety

    Tak jak wspomniałem na początku tego wpisu, na potrzeby kompilacji wymagane jest zainstalowanie wielu dodatkowych pakietów. Poniższa lista została opracowana na podstawie oficjalnej dokumentacji kompilacji KDE pod Debiana i Ubuntu/Kubuntu: http://techbase.kde.org/Getting_Started/Build/KDE4/Kubuntu_and_Debian oraz na podstawie własnych doświadczeń zebranych podczas kilku prób kompilacji KDE.

    sudo apt-get install subversion git-core gcc g++
    
    sudo apt-get install build-essential xorg-dev cdbs debhelper cmake kdesdk-scripts subversion ssh xserver-xephyr doxygen dbus-x11 libxml2-dev libxslt1-dev shared-mime-info libical-dev libgif-dev libssl-dev libboost-dev libboost-program-options-dev libboost-graph-dev libgpgme11-dev libxine-dev libqimageblitz-dev libbz2-dev libdbus-1-dev libpam0g-dev libpcre3-dev libkrb5-dev libsm-dev libclucene0ldbl libclucene-dev libjpeg62-dev libxtst-dev xsltproc libxrender-dev libfontconfig1-dev automoc librdf0-dev libdbusmenu-qt-dev docbook-xsl docbook-xml libattica-dev libqt4-webkit-dev shared-desktop-ontologies libphonon-dev
    
    sudo apt-get install graphviz libqt4-dev libstreamanalyzer-dev libstrigiqtdbusclient-dev libxml2-utils libopenexr-dev libjasper-dev libenchant-dev libavahi-common-dev libaspell-dev libasound2-dev libldap2-dev libsasl2-dev libsmbclient-dev libxkbfile-dev libxcb1-dev libxklavier-dev libxdamage-dev libxcomposite-dev libbluetooth-dev libusb-dev network-manager-dev libsmbclient-dev libsensors-dev libnm-util-dev libusb-dev libcfitsio3-dev libnova-dev libeigen2-dev libopenbabel-dev libfacile-ocaml-dev libboost-python-dev libsvn-dev libsvncpp-dev libqt4-dev libqca2-dev libstreamanalyzer-dev libstrigiqtdbusclient-dev libcommoncpp2-dev libidn11 libidn11-dev libpci-dev libxss-dev libxft-dev libpoppler-qt4-dev libpolkit-agent-1-dev libpolkit-backend-1-dev libpolkit-qt-1-dev libspectre-dev
    
    sudo apt-get install kdesdk kdelibs5-dev kdebase-workspace-dev libakonadi-dev libsoprano-dev libkonq5-dev libv4l-dev
    
    sudo apt-get install flex bison libacl1-dev hspell

    Utworzenie nowego użytkownika

    Przed przystąpieniem do właściwego procesu kompilacji KDE, warto zadać sobie pytanie: w jaki sposób chcemy mieć dostęp zarówno do nowego środowiska pracy jak również do wersji stabilnej, której używaliśmy do tej pory? W Internecie można znaleźć wiele odpowiedzi na to pytanie, m.in.: skorzystanie z środowiska wirtualnego (np. VirtualBox) lub przełączanie głównej gałęzi struktury plików przy użyciu chroot. W tym poradniku zostanie opisane jeszcze inne podejście, które jest zalecane w oficjalnej dokumentacji KDE. Zostanie utworzony nowy użytkownik, na koncie którego zostanie przeprowadzona kompilacja i lokalna instalacja KDE. "Lokalna" w tym wypadku oznacza, że tylko ten użytkownik będzie mógł korzystać z tej wersji KDE.

    Tworzymy nowego użytkownika i dodajemy go do grup. Jeśli chcemy, aby użytkownik miał dostęp do trybu poleceń administratora (sudo) zamiast do grupy users dodajemy go do grupy admin.

    sudo useradd -m -G users,audio,video,cdrom,plugdev -s /bin/bash kde-devel
    sudo passwd kde-devel

    Logujemy się na konto właśnie utworzonego użytkownika:

    su - kde-devel

    Konfiguracja skryptów startowych

    Oficjalna dokumentacja zaleca, aby zaraz po zalogowaniu skonfigurować skrypty startowe w celu usprawnienia procesu kompilacji. Można to zrobić wykonując następujące czynności:
    • Robimy kopię zapasową oryginalnego pliku .bashrc:
      cp .bashrc .bashrc_backup
    • Ze strony http://techbase.kde.org/Getting_Started/Increased_Productivity_in_KDE4_with_Scripts/.bashrc kopiujemy zawartość przykładowego pliku .bashrc i wklejamy go do pliku .bashrc_KDE:
      nano .bashrc_KDE
    • Dodajemy do oryginalnego pliku .bashrc ładowanie pliku .bashrc_KDE:
      echo "source ~/.bashrc_KDE" >> ~/.bashrc
    • Wczytujemy ponownie zawartość pliku .bashrc, aby jego zawartość była widoczna również dla bieżącej sesji:
      source ~/.bashrc
    Konfiguracja narzędzia ''kdesrc-build''

    Na potrzeby kompilacji KDE najłatwiej skorzystać ze skryptu kdesrc-build, który można pobrać ze strony: http://kdesvn-build.kde.org/. Skrypt ten automatyzuje wiele zadań, takich jak pobieranie źródeł, przygotowanie i uruchamianie procesu kompilacji.

    Pobranie i konfigurację skryptu kdesrc-build wykonujemy za pomocą poniższych poleceń (na stronie projektu warto najpierw sprawdzić, czy nie ma nowszej wersji tego narzędzia):

    mkdir -p ~/kdesrc/kdesrc-build
    wget http://kdesvn-build.kde.org/releases/kdesrc-build-1.12.tar.bz2
    tar xjvf kdesrc-build-1.12.tar.bz2 -C ~/kdesrc/kdesrc-build/
    rm kdesrc-build-1.12.tar.bz2
    cp ~/kdesrc/kdesrc-build/kdesrc-build-1.12/kdesrc-buildrc-sample ~/.kdesrc-buildrc

    Uruchomienie procesu kompilacji:

    ~/kdesrc/kdesrc-build/kdesrc-build-1.12/kdesrc-build

    Domyślnie proces kompilacji jest uruchamiany w trybie zrównoleglonym (opcja -j programu make) w 2 procesach. Warto jednak pamiętać, że:
    • jeśli mamy 1 jeden rdzeń obliczeniowy to nie przyniesie to żadnego efektu;
    • w przypadku większej liczby rdzeni warto z nich skorzystać i uruchomić proces kompilacji z odpowiednio ustawionym parametrem make-options skryptu kdesrc-build. Przykład dla 4 procesorów:
    ~/kdesrc/kdesrc-build/kdesrc-build-1.12/kdesrc-build --make-options=-j4

    Problemy

    Podczas kompilacji pojawił mi się następujący komunikat o błędzie:

    Building phonon-git (3/15)
      Waiting for source code update.
      Source update complete for phonon-git: 0 files affected.
      Compiling...
      Build succeeded after 1 second.
      Installing phonon-git.
      Unable to install phonon-git!
      Overall time for phonon-git was 1 second.

    Warto podejrzeć co znajduje się w logach. U mnie odpowiedni plik znajdował się w następującej lokalizacji:
    cat ~/kdesvn/log/2010-12-05-03/phonon-git/install.log

    CMake Error at cmake_install.cmake:40 (FILE):
      file INSTALL cannot copy file
      "/home/kde-devel/kdesvn/phonon-git/qt_phonon.pri" to
      "/usr/share/qt4/mkspecs/modules/qt_phonon.pri".

    Wynika z niego, że pomimo przyjętych założeń o lokalnej instalacji KDE na koncie użytkownika kde-devel, instalator Photona próbuje umieścić coś w głównej strukturze plików. Można to wyłączyć edytując następujący plik:

    nano kdesvn/phonon-git/CMakeLists.txt

    i umieszczając w komentarzu tą linię (znajduje się ona na końcu pliku):

    #install(FILES qt_phonon.pri DESTINATION  ${QT_MKSPECS_DIR}/modules)

    Uwaga: Oczywiście nie mam pewności, czy to jest najlepsze z możliwych rozwiązań i czy później nie wpłynie to na błędy podczas używania nowego KDE. Najważniejsze jest jednak to, że kompilacja idzie dalej :-)

    Kompilujemy dodatkowe programy

    Skrypt kdesrc-build poza domyślnym zestawem modułów, które mogliśmy zobaczyć podczas jego działania, obsługuje jeszcze kilka, które domyślnie są wyłączone. Aby je włączyć do procesu kompilacji, należy wedytować poniższej wskazany plik i odkomentować potrzebne nam moduły:

    nano ~/.kdesrc-buildrc

    Zauważyłem jednak, że pewne moduły, które są tutaj umieszczone nie działają. Przykładem jest zestaw narzędzi developerskich KDE: kdevplatform, kdevelop, quanta. Problem z ich kompilacją wynika stąd, że ich kod nie jest dłużej dostępny w repozytorium subversion i został przeniesiony do repozytorium git. Mi osobiście zależało na tym, aby mieć te moduły skompilowane, dlatego poniżej znajduje się opis, jak można to zrobić samodzielnie.

    Zakładamy katalog, w którym będziemy umieszczać dodatkowe programy KDE, które będziemy samodzielnie kompilować:

    mkdir kdesoftware
    cd kdesoftware

    Pobieramy źródła programów związanych z KDevelopem:

    git clone git://gitorious.org/kdevelop/kdevplatform.git
    git clone git://gitorious.org/kdevelop/kdevelop.git
    git clone git://gitorious.org/kdevelop/quanta.git

    Tworzymy katalogi budowania:

    mkdir -p build/{kdevplatform,kdevelop,quanta}

    Uruchamiamy procedurę kompilacji i instalacji:

    cd ~/kdesoftware/build/kdevplatform/
    cmake -DCMAKE_INSTALL_PREFIX=~/kde/ ../../kdevplatform/
    make && make install
    
    cd ~/kdesoftware/build/kdevelop/
    cmake -DCMAKE_INSTALL_PREFIX=~/kde/ ../../kdevelop/
    make && make install
    
    cd ~/kdesoftware/build/quanta/
    cmake -DCMAKE_INSTALL_PREFIX=~/kde/ ../../quanta/
    make && make install

    Testowanie nowego KDE
    • Jeśli chcemy przetestować pojedynczy program z właśnie skompilowanego KDE, a zarazem nie chcemy uruchamiać całego środowiska, najlepiej skorzystać z narzędzia sux:
      sudo apt-get install sux
      sux - kde-devel
      dolphin
    • Aby przetestować działanie pełnego środowiska KDE wystarczy zalogować się na użytkownika kde-devel wybierając jako typ sesji na „Bezpieczne logowanie” i uruchomić program:
      ~/kde/bin/startkde
    •  Jeśli chcielibyśmy to zrobić „bardziej elegancko” najlepszym rozwiązaniem wydaje się przygotowanie nowego typu sesji, którą będziemy mogli wybrać podczas logowania. Należy w tym celu wykonać następujące operacje (jako użytkownik z prawami administracyjnymi):

      cd /usr/share/kde4/apps/kdm/sessions/
      sudo cp kde-plasma.desktop kde-plasma-trunk.desktop
      sudo nano kde-plasma-trunk.desktop

      Do pliku kde-plasma-trunk.desktop wklejamy poniższą zawartość:

      [Desktop Entry]
      Encoding=UTF-8
      Type=XSession
      Exec=/home/kde-devel/kde/bin/startkde
      TryExec=/home/kde-devel/kde/bin/startkde
      Name=KDE Trunk           
      Comment=The desktop made by KDE

      Teraz już podczas logowania zamiast tradycyjnej sesji KDE, wybieramy z listy sesję KDE Trunk.

    Podsumowanie
    Powyższy opis tak jak tytuł wskazuje, został przygotowany dla użytkowników początkujących lub średnio obeznanych z administracją i programowaniem w Linuksie. Domyślam się, że zaawansowani użytkownicy KDE znaleźli by tu kilka błędów, lub przedstawili bardziej zoptymalizowany proces kompilacji. Dla mnie najważniejszym jednak jest to, że kompilację udało mi się nie tylko rozpocząć, ale również zakończyć :-), co pozwala mi się czuć bardziej wtajemniczonym w obsługę tego systemu, aniżeli jeszcze kilkanaście dni temu.

    Zachęcam do zadawania pytań lub do wpisywania komentarzy, co można poprawić w powyższym poradniku. W razie problemów poszukiwanie odpowiedzi najlepiej zacząć od oficjalnej dokumentacji na stronie: http://techbase.kde.org/Getting_Started/Build/KDE4/Troubleshooting. Zostały tam opisane najczęstsze problemy i ich rozwiązania.

    czwartek, 18 listopada 2010

    Wygodna integracja Windows7 z Ubuntu za pomocą VirtualBoxa

    6 komentarze
    Pisałem ostatnio o konfiguracji lokalnego repozytorium pakietów na potrzeby sal dydaktycznych, którymi się opiekuję na Politechnice Krakowskiej. Na salach tych, o których mowa nie będzie zainstalowany jedynie Ubuntu, ale również Windows7. Aby ułatwić sobie dalszą pracę w zarządzaniu tym systemem, postanowiłem zainstalować go w maszynie wirtualnej stosując VirtualBoxa. Jest wiele innych narzędzi do wirtualizacji, jednakże po lekturze różnych porównań w Internecie przekonałem się właśnie do wyboru narzędzia firmowanego logo Oracle. Oczywiście poza moją wygodą w administracji obu systemami na raz, najważniejsza jest wygoda i prostota obsługi przez potencjalnych użytkowników, którymi są studenci różnych kierunków Wydziału Mechanicznego. Ilość osób, które przewija się przez te sale w 2 tygodniowym toku zajęć (tygodnie parzyste i nieparzyste) zdecydowanie przewyższa pół tysiąca osób. Fakt ten wymaga, aby na sali wszystko działało bez zarzutu.

    W tym poradniku chciałem przedstawić poszczególne kroki konfiguracji wirtualnej maszyny z Windows7 na potrzeby zajęć dydaktycznych. Na ile to będzie możliwe poszczególne czynności będą wykonywane za pomocą poleceń w konsoli, a nie za pomocą narzędzi graficznych.Takie podejście pozwala na pisanie skryptów, które potrafią znacznie ułatwić pracę w przypadku kiedy te same czynności należy wykonać kilka/kilkanaście razy.

    Jedną z najbardziej przydatnych, a niestety mało znanych funkcji VirtualBoxa, która zostanie omówiona jest możliwość zmiany trybu pracy dysku i przełączenie go w stan resetu danych po każdym wyłączeniu maszyny wirtualnej.

    Mam nadzieje, że przedstawione porady okażą się również przydatne dla typowego użytkownika komputera, a nie tylko dla osoby przygotowującej sale na zajęcia lub szkolenia.

    Czynności wstępne

    Na początek gorąco polecam zapoznać się z oficjalną dokumentacją narzędzia VBoxManage, które pozwala na wykonanie tych samych (a nawet więcej) czynności co ogólnie znany interfejs graficzny VirtualBoxa (strona dokumentacji tego narzędzia). Większość kroków w tym poradniku wykonanych jest za jego pomocą. Nie piszę jednak szczegółowych opisów dla poszczególnych poleceń, dlatego właśnie odsyłam do dokumentacji.

    Pierwszą czynnością administracyjną, którą polecam na początek jest przygotowanie dodatkowego użytkownika, którego możemy nazwać np. "windows". Docelowo dla tego użytkownika zostanie ustawione, aby zaraz po zalogowaniu do systemu startowała wirtualna maszyna z Windows7. Można oczywiście ten krok pominąć i skonfigurować sobie VirtualBoxa do pracy na obecnie używanym koncie użytkownika.

    Dodać nowego uzytkownika w Ubuntu możemy wybierając odpowiednio w menu:  
    System → Administracja → Użytkownicy i grupy → Dodaj.

    Instalacja VirtualBox
    Instalację VirtualBoxa najlepiej przeprowadzać zgodnie z oficjalnym opisem zamieszczonym na stronie: http://www.virtualbox.org/wiki/Linux_Downloads. W Ubuntu sprowadza się to do dodania odpowiedniego repozytorium, pobrania i dodania kluczy uwierzytelniających oraz instalacji następujących pakietów:
    sudo apt-get install virtualbox-3.2 dkms

    Utworzenie wzorcowej maszyny wirtualnej
    Przed stworzeniem pierwszej maszyny wirtualnej, która może być wzorcem do tworzenia kolejnych maszyn trzeba zalogować się na konto "windows" i tam uruchomić VirtualBoxa. Zaraz po zaakceptowaniu licencji można wyłączyć program.

    W tym momencie można jeszcze utworzyć katalog, który będzie współdzielony pomiędzy Ubuntu, a Windowsem:
    mkdir /home/windows/share

    Tworzenie maszyny wirtualnej można wykonać w prosty sposób w konsoli. Takie podejście zostanie tutaj omówione. Osobom, które nie chcą szczegółowo wgłębiać się w poszczególne parametry i czytać dokumentację VBoxManage, polecam jednak interfejs graficzny. Tam wygodny kreator poprowadzi nas za rękę i znaczną część pracy zrobi za nas w tle. Później dla przećwiczenia polecam przygotowanie odpowiednich poleceń konsoli, które zrobią dokładnie to samo, co wcześniej ustawiliśmy w narzędziu graficznym.

    Tworzenie wirtualnej maszyny dla Windows7 może składać się z następujących kroków:
    1. Utworzenie i automatyczne zarejestrowanie wirtualnej maszyny dla 32-bitowego Windows7:
      VBoxManage createvm --name Windows7_01 --ostype Windows7 --register
    2. Szczegółowa konfiguracja parametrów wirtualnej maszyny (szczegóły można doczytać w dokumentacji polecenia modifyvm):
      VBoxManage modifyvm Windows7_01 --memory 1780 --vram 40 --accelerate3d on --accelerate2dvideo on --boot1 dvd --boot2 disk --boot3 none --cpus 2 --pae on --hwvirtex on --largepages on --ioapic on --clipboard bidirectional --usb on --usbehci on
    3. Udostępnianie lokalnego katalogu dla zwirtualizowanego systemu:
      VBoxManage sharedfolder add Windows7_01 --name "share" --hostpath "/home/windows/share"
    4. Utworzenie kontrolerów IDE i SATA dla nośników danych:
      VBoxManage storagectl Windows7_01 --name "Kontroler SATA" --add sata --hostiocache on --controller IntelAhci
      VBoxManage storagectl Windows7_01 --name "Kontroler IDE" --add ide --hostiocache on --controller PIIX4
    5. Utworzenie i podpięcie dysku twardego (dysk rozszerzalny o maksymalnym rozmiarze 60GB):
      VBoxManage createhd --filename /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi --size 60000
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi
    6. Podłączenie napędu CD/DVD z włączoną funkcją zapisu (oczywiście ma to sens jeśli mamy nagrywarkę):
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler IDE" --port 1 --device 1 --type dvddrive --medium host:/dev/sr0 --passthrough on
    Tak przygotowana maszyna powinna być już widoczna i gotowa do uruchomienia z poziomu okienkowego interfejsu VirtualBoxa.

    Zarządzanie VirtuaBoxem z poziomu konsoli
    Do innych czynności, które możemy wykonać w konsoli można zaliczyć:
    • Uruchamianie maszyny wirtualnej. Maszynę możemy uruchamiać na dwa sposoby:
      VBoxManage startvm Windows7_01
      VirtualBox -startvm Windows7_01
      Generalnie skutek wykonania obu poleceń będzie ten sam. Jedyną różnicą jaką ja zauważyłem jest uruchomienie zadania w tle przez pierwsze polecenie, w odróżnieniu od drugiego polecenia, gdzie wiersz polecenia oczekuje na zamkniecie programu VirtualBox. To drugie polecenie przyda się właśnie na etapie konfiguracji GDM (opis w dalszej części poradnika).
    • Rejestrowanie maszyny wirtualnej. Przydaje się szczególnie jeśli przekopiujemy maszynę na inny komputer i chcemy z niej korzystać.
      VBoxManage registervm /home/windows/.VirtualBox/Machines/Windows7_01/Windows7_01.xml
    • Wyrejestrowywanie. Jeśli maszyna nie będzie dłużej wykorzystywana na bierzącym komputerze, bo np. została przeniesiona na inny, warto ją usunąć z wewnętrznego rejestru maszyn wirtualnych VirtualBoxa.
      VBoxManage unregistervm Windows7_01
    Tworzenie kopii maszyny wirtualnej
    Kiedy mamy już przygotowaną wzorcową maszynę wirtualną z Windows7 i chcielibyśmy ją powielić na inne komputery, warto najpierw zmniejszyć rozmiar wirtualnego dysku. W tym celu należy wykonać dwie czynności:
    • Zerowanie pustych bloków na dysku w Windows7 (uwaga: dysk musi być w trybie normal, a nie immutable - tryby te opisane są w dalszej części poradnika). Pomocne w tej czynności będzie małe narzędzie sdelete, które można pobrać ze strony Technet Microsoft (link do narzędzia). W wierszu poleceń w systemie Windows wpisujemy:
      sdelete -c
    • Kompaktowanie dysku w VirtualBox. Stosujemy polecenie:
      VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi --compact
    Zabiegi te w moim wypadku pozwoliły na odchudzenie dysku wirtualnego z 9.4GB na 8.3GB. Ten 1GB potrafi zrobić różnicę podczas klonowania wielu dysków wirtualnych i ich późniejszego kopiowania na inne komputery.

    Kolejnym krokiem jest tzw. proces klonowania dysku. Jest to nic innego jak jego kopiowanie z nadaniem mu unikalnego identyfikatora.  
    VBoxManage clonehd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi /home/windows/.VirtualBox/HardDisks/Windows7_02.vdi --format VDI

    Na sam koniec, kiedy przekopiujemy katalog z ustawieniami maszyny wirtualnej oraz dysk wirtualny na inny komputer warto się upewnić, że są ustawione odpowiednie prawa dostępu dla użytkownika windows:
    sudo chown windows -R /home/windows/.VirtualBox
    sudo chgrp windows -R /home/windows/.VirtualBox

    Blokada dysków do zapisu
    Dyski w VirtualBoxie mogą pracować w różnych trybach zapisu (po szczegóły odsyłam do oficjalnej dokumentacji). Co ciekawe przełaczać się między tymi trybami można jedynie za pomocą narzędzia VBoxManage - okienkowa wersja tego nie umożliwia. Mnie osobiście poza standardowym trybem normal, zainteresował szczególnie tryb immutable, który nie zezwala na zapisywanie trwałych zmian na wirtualnym dysku. Dzięki temu po każdych zajęciach ze studentami, system Windows jest przywracany do pierwotnego, wzorcowego stanu.

    Technicznie działa to w ten sposób, że wszystkie zmiany jakie wprowadzi użytkownik podczas pracy w systemie zapisywane są na tak zwanym dysku różnicowym. Stan tego dysku jest resetowany po każdym wyłączeniu maszyny. W przypadku restartu maszyny stan nie jest kasowany, co ma zabezpieczać naszą tymczasową pracę na wypadek zawieszenia się systemu goszczącego (w tym wypadku Windows7).

    Do przełączania między tymi dwoma stanami najwygodniej będzie przygotować osobne skrypty:
    • Przejście z trybu normal do immutable:
      #!/bin/bash
      
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium none
      VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi settype immutable
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi
      
      echo `date`" : convert normal to immutable" >> vm_log.txt
    • Przejście z trybu immutable do normal:
      #!/bin/bash
      
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium none
      VBoxManage modifyhd /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi settype normal
      
      for file in `ls /home/windows/.VirtualBox/Machines/Windows7_01/Snapshots/*.vdi`
      do
        VBoxManage closemedium disk $file --delete
      done
      
      VBoxManage storageattach Windows7_01 --storagectl "Kontroler SATA" --port 0 --device 0 --type hdd --medium /home/windows/.VirtualBox/HardDisks/Windows7_01.vdi
      
      echo `date`" : convert immutable to normal" >> vm_log.txt
    W obu skryptach pierwszą i ostatnia czynnością jest odpowiednio odłączenie i podłączenie dysku do wirtualnego kontrolera SATA. W drugim skrypcie mamy dodatkowo odłączenie i skasowanie dysków różnicowych. Czynność ta zapewnia poprawną pracę w trybie normal i umożliwia wprowadzania dalszych zmian na wzorcowych dyskach wirtualnych (np. doinstalowanie kolejnych programów niezbędnych do zajęć).

    Konfiguracja GDM
    Do tej pory opisywane kroki należały raczej do standardowych czynności administracyjnych dotyczących zarządzania wirtualna maszyną VirtualBox. Jakiejś szczególnej wygody, o której jest mowa w tytule nie widać. Trzeba się zwyczajnie zalogować do systemu, uruchomić VirtualBoxa i wystartować maszynę z Windows7. Może nie jest to jakość szczególnie skomplikowane, ale każdorazowo wymaga wykonania kilku tych samych czynności. Aby to zmienić i nieco usprawnić uruchamianie Windowsa można przygotować specjalną sesja dla menadżera logowania GDM. Dzięki temu już podczas logowania użytkownik będzie mógł wybrać sesję z VirtualBoxem i automatycznym startem maszyny wirtualnej.

    Na początek tworzymy i edytujemy skrypt vm_start.bsh do uruchamiania maszyny wirtualnej:
    #!/bin/bash
    VirtualBox -startvm Windows7_01

    Później tworzymy nowy plik z ustawieniami dla sesji GDM:
    sudo touch /usr/share/xsessions/windows7.desktop
    sudo nano /usr/share/xsessions/windows7.desktop
    do którego wpisujemy takie ustawienia:
    [Desktop Entry]
    Encoding=UTF-8
    Name=Windows7
    Comment=Sesja skonfigurowana dla użytkownika "windows". Dla pozostałych nie działa.
    Exec=/home/windows/.VirtualBox/vm_start.bsh
    TryExec=/home/windows/.VirtualBox/vm_tools/vm_start.bsh
    Icon=
    Type=Application
    Teraz wystarczy się już wylogować i zalogować ponownie wybierając z listy sesję "Windows7". Powininna wystartować sama maszyna wirtualna bez startu sesji środowiska Gnome. Po wyłączeniu Windows w maszynie wirtualnej zamknie nam się również VirtualBox i zostaniemy automatycznie wylogowani z systemu.

    Logowanie bez podawania hasła
    Aby jeszcze bardziej ułatwić dostęp do Windowsa można wyłączyć konieczność podawania hasła przez użytkownika "windows". W tym celu logujemy się na konto z uprawnieniami roota i zmieniamy ustawienia użytkownika "windows" ustawiając opcję "Bez pytania o hasło przy logowaniu". Dzięki temu przy kolejnym logowaniu nie będzie trzeba podawać hasła i od razu wystartuje maszyna wirtualna. Warto również zwrócić uwagę, że dla użytkownika "windows" nie będzie już możliwości zmiany sesji na inną (nie pojawi się okienko wyboru sesji, tylko użytkownik od razu zostanie zalogowany).  Jeśli zależało by nam jednak na tym, aby znowu z poziomu użytkownika "windows" dostać do Gnome, w celu zmiany jakichś ustawień, to na powrót ustawiamy konieczość podawania hasła przez tego użytkownika. Można to również zrobić z linii komend poleceniem:
    • Logowanie bez podawania hasła:
      sudo usermod -a -G nopasswdlogin windows
    • Konieczność podawania hasła:
      sudo gpasswd -d windows nopasswdlogin 

    Problemy i rozwiązania
    Jedynym problemem jaki do tej pory spotkałem w korzystaniu z VirtualBoxa, było okresowe blokowanie się klawiatury w maszynie goszczącej. Zauważyłem, że dzieje się to zawsze po dłuższym czasie braku aktywności na komputerze, kiedy włączy się wygaszać ekranu w Ubuntu. Rozwiązanie oczywiście jest banalne - wystarczy wyłączyć wygaszać dla użytkownika "windows". W menu otwieramy kolejno: System → Preferencje → Wygaszacz ekranu i dla pewności ustawiamy:
    • Przejęcie w stan bezczynności po: 2 godzinach
    • Uruchomienie wygaszacza ekranu gdy komputer jest w stanie bezczynności: wyłączyć
    • Blokowanie ekranu, gdy wygaszacz jest aktywny: wyłączyć


    Podsumowanie
    Przedstawiony poradnik oczywiście nie wyczerpuje tematu konfiguracji VirtualBoxa w Linuksie. Nie jest to prawdopodobnie również jedyne rozwiązanie postawionych problemów, a pewne rzeczy może dało by się zrobić lepiej. Co sądzicie? Czekam na komentarze i spostrzeżenia z używania tego poradnika. Tylko proszę nie pisać do mnie per Pan, bo przecież nie jesteśmy na zajęciach, tylko na blogu :)

    piątek, 12 listopada 2010

    Konfiguracja lokalnego serwera pakietów Apt-Cacher NG

    1 komentarze
    W ostatnim czasie stanąłem naprzeciwko wyzwania szybkiej wymiany komputerów i oprogramowania na salach dydaktycznych, którymi się opiekuję na Politechnice Krakowskiej. Całościowy poradnik z przebiegu tej pracy przygotuję niebawem, jednakże już dzisiaj chciałem się podzielić doświadczeniami z konfiguracji lokalnego serwera pakietów Apt-Cacher NG.

    Jednym z systemów, który miał zostać zainstalowany na każdym z 20 nowych komputerów miał być Ubuntu 10.04.1 LTS w wersji 64 bitowej. Najpierw postanowiłem przeprowadzić próbną instalację na jednej z maszyn, a dopiero później na pozostałych. Nie wiem z jakich powodów, ale po instalacji systemu, instalacja dodatkowych pakietów, a raczej ich pobieranie z Internetu trwało ok. 3 godziny! Na to nie mogłem sobie pozwolić podczas właściwej instalacji, ponieważ na montaż sprzętu i instalację systemu przed pierwszymi zajęciami miałem niewiele więcej czasu. Dodam jeszcze, że instalator zakomunikował mi pobranie z Internetu ok. 350MB danych do aktualizacji.

    Sytuację udało się opanować dzięki skonfigurowaniu jednego komputera jako lokalnego systemu pakietów. Jego rolą miało być buforowanie (w slangu polsko-angielskim można by powiedzieć keszowanie ;-) ) pakietów pobranych z Internetu i udostępnienie ich innym maszynom w sieci lokalnej. W tym momencie w Ubuntu najłatwiej to osiągnąć stosując narzędzie Apt-Cacher NG (strona projektu). Poniższy poradnik udało mi się przygotować na podstawie kilku materiałów z Internetu, do których odsyłam w razie problemów:

    Konfiguracja lokalnego serwera pakietów

    Uaktualniamy lokalną bazę repozytoriów i pobieramy najnowsze aktualizacje:

    sudo apt-get update
    sudo apt-get upgrade

    Instalacja narzędzia apt-cacher-ng z repozytorium:

    sudo apt-get install apt-cacher-ng

    Konfiguracja serwera i klientów

    Uwaga: Należy pamiętać o właściwym ustawieniu adresu IP lokalnego serwera pakietów. Ja używam IP: 192.168.120.102. Należy go oczywiście zmienić na własny.
    • Konfigurujemy system pakietów apt (aplikacje apt-get, aptitude i inne), aby używał apt-cacher-ng:

      sudo echo 'Acquire::http { Proxy "http://192.168.120.102:3142"; };' | sudo tee /etc/apt/apt.conf.d/01apt-cacher-ng-proxy

      Możemy to oczywiście wyłączyć poleceniem:

      sudo rm /etc/apt/apt.conf.d/01apt-cacher-ng-proxy

    • Konfiguracja Synaptic z konsoli:

      Uwaga: Jeśli pracujemy na nowym komputerze zaraz po instalacji, należy najpierw uruchomić na nim Synaptica i odświeżyć listę pakietów. Można to zrobic również przez ssh łącząc się z opcją -X.

      sudo grep --color -i 'proxy' /root/.synaptic/synaptic.conf || sudo nano /root/.synaptic/synaptic.conf

      zamieniamy ostatnią linijkę, czyli znaki: ”};” na:

      useProxy "1";
        httpProxy "192.168.120.102";
        httpProxyPort "3142";
        ftpProxy "192.168.120.102";
        ftpProxyPort "3142";
        noProxy "";
      };

      Sprawdzamy jeszcze raz, czy wprowadzone zmiany znajdują się w pliku:

      sudo grep --color -i 'proxy' /root/.synaptic/synaptic.conf

    • Wczytujemy ponownie listę pakietów:

      sudo apt-get update

    Import lokalnych plików instalacyjnych

    Uwaga: Poniższe czynności wykonujemy tylko na serwerze!

    W tym kroku zostaną zaimportowane lokalne pliki *.deb do repozytorium apt-cacher-ng. Dzięki temu narzędzie apt-cacher-ng nie będzie pobierać ponownie już raz pobranych plików.

    test -x /var/cache/apt-cacher-ng/_import || sudo mkdir -p -m 2755 /var/cache/apt-cacher-ng/_import
    sudo mv -uf /var/cache/apt/archives/*.deb /var/cache/apt-cacher-ng/_import/

    Rozpoczynamy importowanie uruchamiając skrypt znajdujący się w dostarczonym panelu kontrolnym: http://localhost:3142/acng-report.html?doImport=Start+Import#bottom

    Panel kontrolny i dostęp do dokumentacji

    Twórcy narzędzia Apt-Cacher NG przygotowali bardzo prosty panel kontrolny (Dashboard), w którym użytkownik może zobaczyć statystyki z jego działania. Jest on dostępny pod adresem: http://localhost:3142/acng-report.html.

    Warto również zajrzeć do oficjalnej dokumentacji, która po instalacji pakietu będzie znajdować się w poniższej lokalizacji (można kliknąć link i otworzyć w przeglądarce): file:///usr/share/doc/apt-cacher-ng/html/index.html.

    Własne spostrzeżenia

    Już teraz, po pierwszych próbach muszę przyznać, że narzędzie to oszczędziło mi sporo czasu i oczywiście sporo nerwów (oczekiwanie na zakończenie aktualizacji, lub też na instalację dodatkowych programów niezbędnych do zajęć, potrafi być stresujące, jeśli te zajęcia rozpoczynają się za kilka minut). Dla przykładu pobranie aktualizacji na 20 maszynach z Ubuntu, nie trwało tak jak wcześniej wspominałem 3 godziny, a zaledwie 2 minuty. Taką różnicę naprawdę się czuje :-)

    Poza aktualizacjami zainstalowałem też kilkanaście dodatkowych pakietów. Nie wiem ile to było MB dla jednego komputera, ale wiem ile to było w sumie dla wszystkich. Poniżej załączam zrzut ekranu z Panelu kontrolnego, prezentujące statystyki pobrań pakietów z lokalnego serwera pakietów:



    Jak widać ok. 16 GB! danych zostało pobranych z lokalnego serwera pakietów. Jestem przekonany, że fakt ten tak samo cieszy (a może bardziej) administratorów naszej uczelnianej sieci i oczywiście administratorów głównych serwerów pakietów dla Ubuntu.

    Pozostałe uwagi i spostrzeżenia przedstawiam już w skróconej formie:
    • Idea działania Apt-Cacher NG jest taka, że po instalacji danego pakietu z dowolnego komputera w sieci lokalnej, pakiet ten powinien być już dostępny dla innych maszyn na serwerze. Ja jednak dla pewności przyjąłem taką strategię, że dany pakiet najpierw instaluje na serwerze, a później na wszystkich klientach na raz.
    • Wydawać by się mogło, że importowanie pakietów trzeba wykonać tylko raz. Jednak zdarzyło mi się już kilka razy, że niektóre pakiety pomimo pierwszej instalacji z głównego serwera, znowu były z niego pobierane jeśli instalowałem go ponownie na innej maszynie. Po zauważeniu takiego faktu, warto ponownie zaimportować pakiety.
    • Wyliczanie statystyk transferu przez panel kontrolny potrafi zawiesić Apt-Cacher NG. Ostatnio 2-krotnie po uruchomieniu ich zliczania Apt-Cacher NG przestawał odpowiadać na zapytania maszyn klienckich. Możliwe, że po prostu nie radził sobie z analizą logów i gdzieś się zawieszał. 
    Moim zdaniem Apt-Cacher NG jest narzędziem jak najbardziej godnym polecenia.

      poniedziałek, 21 grudnia 2009

      Instalacja bazy danych Oracle 11g w Ubuntu 9.04

      24 komentarze
      Postanowiłem rozszerzyć tematykę bloga o inne zainteresowania nie związane przetwarzaniem i wizualizacją obrazów medycznych. W niedługim czasie pojawi się więcej wpisów dotyczących baz danych, programowania oraz obliczeń równoległych. Mam nadzieje, że dzięki temu blog stanie się ciekawszy dla szerszego grona odbiorców.

      Na początek opiszę proces instalacji pełnej wersji bazy danych Oracle 11g Release 2 w systemie Ubuntu Linux 9.04 32-bit. Instalacja nie jest bardzo złożona, ale pewne fragmenty mogą być problematyczne dla osób, które nie miały nigdy do czynienia z tą bazą danych.

      Proces instalacji został zaplanowany tak, aby poznać jak najwięcej narzędzi konfiguracyjnych i dokładnie prześledzić co się dzieje w systemie.

      Uwaga:
      Użytkowników, którzy nie chcą instalować pełnej wersji bazy Oracle może zainteresować jej okrojona wersja: Oracle Database 10g Express Edition. Nie dość, że istnieje dedykowany instalator dla Debiana/Ubuntu, to dodatkowo może być ona używana do zastosowań komercyjnych.

      Podczas przygotowania tego wpisu szczególnie przydatne okazały się następujące strony:


      Przygotowanie systemu do instalacji bazy



      Instalator Oracle niestety nie jest przystosowany dla Ubuntu, dlatego niektóre kroki będą miały na celu upodobnienie tego systemu do RedHata.

      Poniższe kroki wykonujemy na koncie administratora.
      • Instalacja niezbędnych pakietów:
        Instalator może wymagać dodatkowych pakietów do zainstalowania:
        apt-get update && sudo apt-get dist-upgrade
        apt-get install gcc make binutils lesstif2 rpm libmotif3 libaio1 gawk alien ksh
      • Utworzenie linków symbolicznych:
        Instalator Oracle używa pełnych ścieżek niektórych programów systemowych, dlatego należy upewnić się, że znajdują się one w odpowiednim miejscu:
        ln -s /usr/bin/awk /bin/awk
        ln -s /usr/bin/rpm /bin/rpm
        ln -s /usr/bin/basename /bin/basename

        mkdir /etc/rc.d
        for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
      • Ustawienie powłoki skryptowej:
        Instalator Oracle zdecydowanie bardziej preferuje bash'a aniżeli dash'a:
        cd /bin
        ls -l /bin/sh

        lrwxrwxrwx 1 root root 4 2009-04-23 14:05 /bin/sh -> dash

        ln -sf /bin/bash /bin/sh
        ls -l /bin/sh

        lrwxrwxrwx 1 root root 9 2009-12-15 19:12 /bin/sh -> /bin/bash
      • Utworzenie odpowiednich użytkowników i grup:
        Aby Ubuntu z punktu widzenia instalatora przypominał RedHata dodajemy odpowiednie grupy i użytkownika oracle:
        addgroup oinstall
        addgroup dba
        addgroup nobody
        usermod -g nobody nobody
        useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle

        mkdir /home/oracle
        chown -R oracle:dba /home/oracle
      • Przygotowanie katalogów:
        mkdir -p /u01/app/oracle
        chown -R oracle:dba /u01
      • Modyfikujemy ustawienia /etc/security/limits.conf:
        cd /etc/security/
        cp limits.conf limits.conf.original
        nano limits.conf

        Dodajemy poniższe linie na końcu pliku:
        oracle soft nproc 2047
        oracle hard nproc 16383
        oracle soft nofile 1023
        oracle hard nofile 65535

      • Modyfikujemy ustawienia /etc/sysctl.conf
        cd /etc
        cp sysctl.conf sysctl.conf.original
        nano sysctl.conf

        Dodajemy poniższe linie na końcu pliku:
        fs.file-max = 65535
        kernel.shmall = 2097152
        kernel.shmmax = 2147483648
        kernel.shmmni = 4096
        kernel.sem = 250 32000 100 128
        net.ipv4.ip_local_port_range = 1024 65535
        net.core.rmem_default = 4194304
        net.core.rmem_max = 4194304
        net.core.wmem_default = 262144
        net.core.wmem_max = 262144

        Przeładowanie pliku konfiguracyjnego:
        sysctl -p
      • Restart komputera
        Aby mieć pewność, że wszystkie ustawienia zostały poprawnie zatwierdzone w systemie restartujemy komputer (tak przynajmniej zalecały wszystkie poradniki instalacji, z których korzystałem).


      Pobranie i instalacja oprogramowania



      Pobranie i rozpakowanie instalatora
      Te czynności możemy wykonywać jako zwyczajny użytkownik, na którym pracujemy na co dzień

      Uruchomienie instalatora
      • Instalację należy przeprowadzić jako użytkownik oracle z prawami administratora:
        xhost +
        sudo -s
        su - oracle

      • Będzie nam potrzebny tryb graficzny:
        DISPLAY=:0.0; export DISPLAY
        xhost local:oracle

      • Przejście do katalogu z rozpakowanym instalatorem:
        cd /sciezka/do/instalatora/database/

      • Uruchomienie instalatora:

        ./runInstaller

        Starting Oracle Universal Installer...

        Checking Temp space: must be greater than 80 MB. Actual 11002 MB Passed
        Checking swap space: must be greater than 150 MB. Actual 4024 MB Passed
        Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
        Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-12-15_12-36-28PM. Please wait ...



      Opcje instalacji

      Poniżej zostały wyróżnione niestandardowe opcje, które polecam zaznaczyć. Pozostałe opcje należy zostawić tak jak zaproponuje instalator.
      • step2: Install database software only
      • step5: Enterprise Edition (3,95BG)
      • step8: Zaznaczamy opcję „Ignore All”

      Czynności po instalacji

      W ostatnim etapie instalacji jesteśmy proszeni o wykonanie podanego skryptu jako użytkownik root:
      /u01/app/oracle/product/11.2.0/dbhome_1/root.sh


      Powinniśmy dostać mniej więcej taki komunikat:
      Running Oracle 11g root.sh script...

      The following environment variables are set as:
      ORACLE_OWNER= oracle
      ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_1

      Enter the full pathname of the local bin directory: [/usr/local/bin]:
      Copying dbhome to /usr/local/bin ...
      Copying oraenv to /usr/local/bin ...
      Copying coraenv to /usr/local/bin ...


      Creating /etc/oratab file...
      Entries will be added to the /etc/oratab file as needed by
      Database Configuration Assistant when a database is created
      Finished running generic part of root.sh script.
      Now product-specific root actions will be performed.
      Finished product-specific root actions.


      Instalacja listenera


      Poniższe czynności wykonujemy jako użytkownik oracle.
      • Ustawiamy zmienne systemowe:
        export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
        export PATH=$PATH:$ORACLE_HOME/bin

      • Uruchamiamy program:
        netca

      Dalej postępujemy według zaleceń instalatora - nie zmieniamy żadnych opcji.


      Instalacja bazy danych



      Uruchamiamy program:
      dbca

      i na poszczególnych etapach instalacji wybieramy następujące opcje:
      • step4: Odznaczamy „Configure Enterprise Manager”
      • step4: Odznaczamy „Enable automatic maintenance tasks”
      • step5: Zaznaczamy „Use the Same Administrative Password for All Accounts”
      • step7: Wyłączamy „Specify Flash Recovery Area”
      • step8: „Sample schemas”
      • step9 - Memory: Pamięć ustawiamy na 250MB, Wyłączamy opcję „Use Automatic Memory Management”
      • step9 - Sizing: Processes: 30
      • step9 - Character Sets: „Use Unicode”

      Komentarz: Powyższe opcje to tylko propozycja - można zostawić domyślne lub wybrać własne. Te opcje zostały ustawione według zaleceń na stronie: Installing Oracle 11gR1 on Ubuntu 9.04 Jaunty Jackalope | The Pythian Blog.

      Manualny start bazy danych



      Po zrestartowaniu komputera wszelkie próby połączenia się z bazą okażą się daremne - baza nie jest uruchomiona. Aby ją włączyć wykonujemy następujące czynności:

      • Logujemy się jako sysdba:
        sqlplus '/as sysdba'

        SQL*Plus: Release 11.2.0.1.0 Production on Tue Dec 22 20:41:21 2009

        Copyright (c) 1982, 2009, Oracle. All rights reserved.

        Connected to an idle instance.

      • Uruchamiamy instancję bez montowania bazy:
        startup nomount;

        ORACLE instance started.

        Total System Global Area 196681728 bytes
        Fixed Size 1335444 bytes
        Variable Size 71307116 bytes
        Database Buffers 117440512 bytes
        Redo Buffers 6598656 bytes

        Sprawdzamy stan:
        select status from v$instance;

        STATUS
        ------------
        STARTED

      • Montujemy bazę:
        alter database mount;

        Baza danych zostala zmieniona.

        Sprawdzamy stan:
        select status from v$instance;

        STATUS
        ------------
        MOUNTED

      • Otwieramy bazę:
        alter database open;

        Baza danych zostala zmieniona.

        Sprawdzamy stan:
        select status from v$instance;

        STATUS
        ------------
        OPEN


      Aby wyłączyć instancję wraz z bazą danych wpisujemy:
      shutdown immediate;

      Baza danych zostala zamknieta.
      Baza danych zostala zdemontowana.
      Instancja ORACLE zostala zamknieta.



      Automatyczny start bazy danych przy starcie systemu



      Wygodniejszym od każdorazowego ręcznego włączania bazy może być takie jej skonfigurowanie, aby startowała razem z systemem. W tym celu
      • Logujemy się na konto administratora:
        sudo -s

      • Edytujemy ostatnią linijkę w pliku /etc/oratab, zamieniając literkę N na Y:
        nano /etc/oratab

        ORCL:/u01/app/oracle/product/11.2.0/dbhome_1:Y

      • Tworzymy następujący plik i zapisujemy do niego poniższą zawartość:
        nano /etc/init.d/oracledb

        #!/bin/bash
        #
        # /etc/init.d/oracledb
        #
        # Run-level Startup script for the Oracle Listener and Instances
        # It relies on the information on /etc/oratab

        # these are the paths for our base installation
        export ORACLE_BASE=/u01/app/oracle
        export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
        export ORACLE_OWNR=oracle
        export PATH=$PATH:$ORACLE_HOME/bin

        if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
        then
        echo "Oracle startup: cannot start"
        exit 1
        fi

        case "$1" in
        start)
        # Oracle listener and instance startup
        echo -n "Starting Oracle: "
        su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"
        su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
        touch /var/lock/oracle
        echo "OK"
        ;;
        stop)
        # Oracle listener and instance shutdown
        echo -n "Shutdown Oracle: "
        su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
        su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
        rm -f /var/lock/oracle
        echo "OK"
        ;;
        reload|restart)
        $0 stop
        $0 start
        ;;
        *)
        echo "Usage: `basename $0` start|stop|restart|reload"
        exit 1
        esac

        exit 0

      • Przydzielamy prawa do wykonywania dla tego pliku:
        chmod a+x /etc/init.d/oracledb

      • Uaktualniamy skrypty startowe:
        update-rc.d oracledb defaults

      • Restartujemy komputer. Baza powinna uruchomić się automatycznie.


      Testy


      Wszystkie czynności przeprowadzamy na własnym koncie.

      Testujemy połączenie z bazą danych
      Dodajemy użytkownika, na którym pracujemy do grupy dba:
      sudo usermod -G dba -a rafal


      Ustawiamy niezbędne zmienne środowiskowe:
      export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
      export PATH=$PATH:$ORACLE_HOME/bin
      export ORACLE_SID=ORCL

      Łączymy się z bazą:
      sqlplus '/as sysdba'

      i wydajemy polecenie:
      SELECT INSTANCE_NAME, VERSION, STATUS FROM V$INSTANCE;

      INSTANCE_NAME    VERSION           STATUS
      ---------------- ----------------- ------------
      ORCL 11.2.0.1.0 OPEN


      Odblokowujemy użytkownika Scott
      Warto odblokować przykładowego użytkownika Scott i na nim wykonać kilka testów:
      sqlplus '/as sysdba'

      ALTER USER scott ACCOUNT UNLOCK;

      sqlplus scott/tiger

      select * from emp;


      Enterprise Manager


      Enterprise Manager jest narzędziem służącym do diagnozowania i administracji bazą danych Oracle. Można go skonfigurować na dwa sposoby: 1) w kreatorze instalacji bazy danych lub 2) manualnie.

      Manualna konfiguracja:
      Ustawiamy zmienne systemowe ORACLE_SID i ORACLE_HOME, a następnie uruchamiamy polecenie tworzące repozytorium EM:
      cd $ORACLE_HOME/bin
      emca -config dbcontrol db -repos create
      Jeśli wszystko przebiegnie bez problemów możemy przejść na stronę: https://[host]:1158/em/ (np. https://laptop:1158/em/). Ja niestety dostałem błąd:

      INFO: Creating the EM repository (this may take a while) ...
      2009-12-17 16:55:07 oracle.sysman.emcp.EMReposConfig invoke
      SEVERE: Error creating the repository

      Jak sobie poradzić z błędami? Ja musiałem wykonać kilka czynności:
      • Najpierw należało odblokować użytkowników DBSNMP i SYSMAN:
        sqlplus '/as sysdba'

        ALTER USER DBSNMP ACCOUNT UNLOCK;
        ALTER USER SYSMAN ACCOUNT UNLOCK;

      • Usunąć użytkownika MGMT_VIEW:
        drop user MGMT_VIEW;

      • Zwiększyć liczbę procesów dla Oracle:
        show parameter processes
        alter system set processes=100 scope=spfile;

        Po tej operacji niezbędny jest restart bazy danych:
        shutdown immediate
        startup

      • Oraz ponownie utworzyć repozytorium:
        emca -config dbcontrol db -repos recreate


      Po tych czynnościach konfiguracja zakończyła się poprawnie. Problemy prawdopodobnie wynikały z przyjętych ustawień w trakcie tworzenia bazy danych (zablokowani użytkownicy, za mała liczba procesów).

      Uruchomienie Managera:
      Po restarcie komputera Enterprise Manager jest wyłączony. Aby go uruchomić logujemy się na konto oracle ustawiamy zmienne środowiskowe jak powyżej i wydajemy polecenie:
      emctl start dbconsole


      Manualnie Managera wyłączamy poleceniem:
      emctl stop dbconsole


      Komentarz:
      • Z niewiadomych mi powodów Enterprise Manager nie chce u mnie działać w Firefoksie - wyświetlana jest biała strona.
      • Działa za to bez problemu w Google Chrome.


      Oracle SQL Develpoer



      Do codziennej pracy warto również zainstalować edytor SQL. Do najbardziej zalecanych dla Ubuntu można zaliczyć TOra (niestety miałem problemy z instalacją) oraz Oracle SQL Develpoer, którego instalacja zostanie opisana.
      • Pobieramy wersję instalacyjną ze strony: http://www.oracle.com/technology/products/database/sql_developer/index.html.
      • Jest to wersja RPM dlatego będziemy musieli przekonwertować ją do formatu DEB zrozumiałego dla Ubuntu. Instalujemy w tym celu narzędzie alien:
        sudo apt-get install alien

      • Konwertujemy pakiet RPM na DEB:
        sudo alien -k --scripts sqldeveloper*.rpm

      • i instalujemy go w systemie:
        sudo dpkg -i sqldeveloper*.deb

      • Jeśli dostaniemy komunikat:
        Oracle SQL Developer
        Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved.

        Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk

      • Wykonujemy następujące polecenia:
        mkdir -p ~/.sqldeveloper
        touch ~/.sqldeveloper/jdk
        echo "/usr/lib/jvm/java-6-sun" >> ~/.sqldeveloper/jdk

      czwartek, 4 czerwca 2009

      Detekcja ruchu w KDE

      0 komentarze
      Ostatnio, zupełnie przypadkiem trafiłem na dwie wiadomości dotyczące wsparcia biblioteki OpenCV w KDE. Oczywiście celem prowadzonych prac ma być wykorzystanie detekcji ruchu przy interakcji użytkownika z systemem. We wpisie zamieszczonym na blogu DrIDk's dev autor proponuje wprowadzenie modnego ostatnio w konsolach sterowania za pomocą ruchu również do gier dostępnych w KDE. Druga wiadomość jest równie obiecująca i dotyczy interakcji z pulpitem. Na poniższym filmiku widać już pierwsze efekty:



      Biorąc pod uwagę rosnącą ilość urządzeń korzystających z ekranów dotykowych (szczególnie w telefonach komórkowych) i coraz częściej montowane kamerki w laptopach, można się spodziewać, że w niedalekiej przyszłości klawiatura, a nawet myszka przestaną być wogóle używane.

      sobota, 24 stycznia 2009

      VolView w końcu na Linuksa

      0 komentarze
      VolView, jedno z najlepszych narzędzi do wizualizacji danych medycznych w końcu doczekał się wersji pod Linuksa. Trzecia już wersja programu, która pojawiła się w połowie stycznia na razie jest w wersji beta i pod moim Ubuntu 8.04.1 nie chciała się uruchomić. Zainstalowałem ją jednak w Windowsie i muszę przyznać, że jestem pozytywnie zaskoczony. Odświeżony interfejs jest teraz bardziej intuicyjny. Niektóre narzędzia posiadają zestawy predefiniowanych parametrów, co znacznie przyspiesza wstępny etap obróbki wizualizacji.

      Poniżej załączam kilka zrzutów ekranu z najnowszej wersji VolView. Podczas ich generowania skorzystałem z danych OsiriX-Manix, o których pisałem we wczorajszym poście.





      niedziela, 4 stycznia 2009

      DocBook w Ubuntu - jak zacząć

      3 komentarze
      Dłuższy czas temu przygotowałem dla studentów instrukcję jak używać DocBooka do pisania dokumentacji technicznej. Opis dotyczył systemu Windows. Jako, że sam korzystam teraz głównie z Linuksa i wielu studentów również preferuje ten system, czas na mały starter właśnie dla Linuksa.
      Poniższy opis powstał w dużej mierze na podstawie dokumentacji dla Ubuntu. Aby nie powtarzać tych samych informacji polecam na początek zapoznać się z nią i dopiero wtedy wrócić na tą stronę. Nie jest to jednak konieczne ponieważ część informacji zostanie powtórzona. Zostaną również przedstawione dodatkowe przykłady nie zawarte w dokumentacji Ubuntu.

      Instalacja
      Instalujemy następujące pakiety: xsltproc, docbook-xsl, docbook-defguide
      sudo apt-get install xsltproc docbook-xsl docbook-defguide

      Przykład 1
      Pierwszy przykład pokazuje podstawową strukturę dokumentu DocBooka. Tutaj konkretnie mamy artykuł (article). Do innych typów dokumentów jakie możemy utworzyć można zaliczyć: książkę (book), część (part), rozdział (chapter),sekcję (section), dodatek (appendix), odwołanie (refentry), wykaz haseł (glosary). Każdy z tych typów ma oczywiście inną formę, dlatego warto zapoznać się wcześniej z oficjalną dokumentacją.

      Plik article1.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
      "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
      <article>
      <articleinfo>
      <title>Artykuł</title>
      <author>
      <firstname>Rafał</firstname>
      <surname>Petryniak</surname>
      <affiliation>
      <orgname></orgname>
      </affiliation>
      </author>
      <pubdate>2009.01.03</pubdate>
      </articleinfo>

      <section>
      <title>Sekcja pierwsza</title>
      <para>treść</para>
      </section>
      </article>

      Transformacją naszego dokumentu zajmie się zainstalowany przez nas xsltproc. Na wejście podajemy mu nazwę pliku do przetworzenia (article1.xml), nazwę pliku wynikowego (output.html) oraz plik styli xsl (warto zajrzeć do katalogu /usr/share/xml/docbook/stylesheet/nwalsh/, aby zobaczyć jakie inne formaty wyjściowe mamy jeszcze dostępne).

      xsltproc -o output.html /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl article1.xml

      Przykład 2
      Kiedy już utworzymy kilka plików DocBooka, niewygodnym może się okazać generowanie wyjścia dla każdego z osobna. W takim przypadku najwygodniej przygotować sobie plik Makefile, który zrobi to za nas.

      Plik Makefile

      TARGETS = article1.html article1-copy.html

      XSLTPROC = /usr/bin/xsltproc
      XSL = /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl

      %.html: %.xml $(XSL)
      @$(XSLTPROC) -o $@ $(XSL) $<

      all: $(TARGETS)

      clean:
      @rm -f *.html

      Teraz wystarczy już wpisać make w konsoli i po chwili zobaczymy pliki wyjściowe.

      Przykład 3
      Kolejne dwa przykłady pokazują jak sobie poradzić, kiedy mamy do napisania dużą dokumentację i chcielibyśmy rozbić ją na kilka plików.

      W pierwszym sposobie skorzystamy z encji zewnętrznych. Dzięki nim możemy do wybranych przez nas zmiennych przypisać zawartość plików podrzędnych, a później wstawić ją w dowolnym miejscu dokumentu. Po przeanalizowaniu poniższych plików wszystko powinno się wyjaśnić.

      Plik article3.xml
      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
      "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
      <!ENTITY sekcja1 SYSTEM "article3a.xml">
      <!ENTITY sekcja2 SYSTEM "article3b.xml">
      ]>

      <article>
      <articleinfo>
      <title>Artykuł</title>
      <author>
      <firstname>Rafał</firstname>
      <surname>Petryniak</surname>
      <affiliation>
      <orgname>Politechnika Krakowska</orgname>
      </affiliation>
      </author>
      <pubdate>2009.01.03</pubdate>
      </articleinfo>

      &sekcja1;
      &sekcja2;

      </article>
      Plik article3a.xml
      <section>
      <title>Sekcja pierwsza</title>
      <para>treść</para>
      </section>
      Plik article3b.xml
      <section>
      <title>Sekcja druga</title>
      <para>treść</para>
      </section>

      Całość kompilujemy podobnie jak w przykładzie pierwszym, wydając polecenie:
      xsltproc -o output.html /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl article3.xml

      Przykład 4
      Ostatni już przykład również pozwala na łączenie dokumentów, tylko tym razem z wykorzystaniem XML Inclusions. Główną zaletą tego podejścia jest możliwość definiowania zagnieżdzeń bardziej złożonych, aniżeli dokument główny - dokumenty podrzędne (przykład 3).

      Plik article4.xml
      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
      "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">

      <article xmlns:xi="http://www.w3.org/2001/XInclude">
      <articleinfo>
      <title>Artykuł</title>
      <author>
      <firstname>Rafał</firstname>
      <surname>Petryniak</surname>
      <affiliation>
      <orgname>Politechnika Krakowska</orgname>
      </affiliation>
      </author>
      <pubdate>2009.01.03</pubdate>
      </articleinfo>

      <xi:include href="article3a.xml" parse="xml" encoding="utf-8" />
      <xi:include href="article3b.xml" parse="xml" encoding="utf-8" />

      </article>

      Aby skompilowac ten przykład będziemy musieli dodać kolejny parametr dla polecenia xsltproc, a mianowicie --xinclude. Całość wygląda tak:

      xsltproc --xinclude -o test.html /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl article4.xml

      Edytory
      Listę dostępnych edytorów DocBooka również można znaleźć w dokumentacji Ubuntu. Ja ze swej strony do bardziej zaawansowanych dokumentów polecam XML Mind Editor, a do zupełnie podstawowych wystarczy edytor tekstowy kolorujący składnię.

      niedziela, 19 października 2008

      Jeden za wszystkich: Multixterm

      2 komentarze
      Zarządzanie systemem linuksowym, z którego korzysta bardzo wielu użytkowników może być wymagające. Dodatkowo gdy uwzględnimy fakt, że takich systemów mamy kilkadziesiąt, to bez wprowadzenia dodatkowych narzędzi, zarządzanie tym wszystkim może być uciążliwe.

      Jako przykład weźmy pod uwagę sale komputerowe na Uczelni. Zakładając, że mamy jedno konto, z którego korzystają wszyscy studenci, wystarczy przed każdymi zajęciami skasować i ponownie utworzyć konto student. Możemy to zrobić za pomocą poleceń:

      sudo deluser studentsudo adduser student

      Bardzo pomocne w tym celu może okazać się połączenie przez SSH, które pozwoli nam na wykonanie tych operacji z jednego komputera, po kolei na wszystkich maszynach. Wcześniej jednak musimy zainstalować serwer SSH, na każdym komputerze z osobna, co niestety będzie wymagało zalogowania się na konto z uprawnieniami administratora i wpisania następującego polecenia w okienku terminala:

      sudo apt-get install ssh openssh-server

      Pomimo tego, że mamy już skonfigurowany SSH i możemy podłączyć się do każdego komputera nie ruszając się z miejsca, to problem ciągle istnieje. Musimy powtórzyć te same operacje, dla każdej maszyny osobno.

      Rozwiązaniem tego problemu może być skrypt Multixterm, będący częścią pakietu Expect. Instalację przeprowadzamy wpisując w terminalu:

      sudo apt-get install expect expect-dev expectk

      Następnie przygotowujemy skrypt Multixterm, który po domyślnej instalacji w Ubuntu 8.04 z niewiadomych przyczyn znajduje się w archiwum (w Ubuntu 6.10 było wszystko OK).

      sudo gunzip /usr/share/doc/expect-dev/examples/multixterm.gz
      sudo chmod +x /usr/share/doc/expect-dev/examples/multixterm
      sudo ln -s /usr/share/doc/expect-dev/examples/multixterm /bin/multixterm

      W tym momencie możemy przetestować jego działanie wpisując następujące polecenie:

      multixterm -xc "ssh administrator@%n" adres_ip_1 adres_ip_2 adres_ip_n

      Użytkownika administrator zmieniamy na innego, który ma możliwość zarządzania komputerem.

      Polecenie to otwiera otwiera nam tyle okenek terminala ile podaliśmy adresów IP. Dodatkowo pojawia się jedno okienko główne do wpisywania poleceń.


      Jest już całkiem nieźle. Mamy to o co nam chodziło od samego początku - zarządzamy wszystkimi komputerami tak, jakbyśmy pracowali na jednym. Jest jeszcze jeden mały problem. Podczas zakładania użytkownika, program adduser odpytuje nas o informacje o użytkowniku, takie jak login, hasło, i inne. Najlepiej jakby udało się to w jakiś sposób ominąć i wpisać wszystko w linii komend. Takie możliwości ma inny skrypt do zakładania użytkowników: useradd. Jego użycie znacznie ułatwi nam przygotowanie automatycznego skryptu do czyszczenia konta studenta. Gotowy skrypt może wyglądać np. tak:

      #!/bin/bash

      echo "Kasowanie uzytkownika student"
      sudo rm -r /home/student/
      sudo deluser student
      sudo delgroup student

      echo "Dodawanie uzytkownika student"
      sudo useradd -m -d /home/student -s /bin/bash -c "student" student
      (echo "student:haslo")|sudo chpasswd
      sudo rm /home/student/Desktop/*
      sudo rm /home/student/Pulpit/*

      Taki skrypt możemy zapisać na każdym komputerze w katalogu domowym użytkownika z uprawnieniami administratora i po zalogowaniu za pomocą Multixterm wystarczy go uruchomić.

      Na koniec warto skonfigurować połączenie SSH w taki sposób, aby łączyć się z poszczególnymi komputerami bez podawania hasła. Więcej można o tym przeczytać na polskim forum Ubuntu w howto "ssh tips".

      Prawdopodobnie cały ten proces da się jeszcze bardziej usprawnić. Jeśli macie jakieś pomysły to proszę o podpowiedź w komentarzu.

      czwartek, 9 października 2008

      CMake w Ubuntu Hardy

      3 komentarze
      Instalacja CMake z domyślnych repozytoriów w Ubuntu 8.04 nie daje satysfakcjonujących efektów - brakuje nam dwóch aplikacji: ccmake i cmake-gui. Pierwsza z nich to interfejs konsolowy (biblioteka: ncurses), natomiast druga to interfejs okienkowy (biblioteka: Qt).

      Lepiej już sytuacja wygląda gdy sami skompilujemy wersję źródłową. Pojawia się ccmake, ale ciągle nie ma cmake-gui.

      Dlatego najlepszym rozwiązaniem wydaje się skorzystanie z przygotowanej wersji binarnej, którą możemy pobrać ze strony projektu. Po pobraniu rozpakowujemy archiwum i przechodzimy do katalogu:

      tar -xzvf cmake-2.6.2-Linux-i386.tar.gz
      cd cmake-2.6.2-Linux-i386/

      W następnym kroku kopiujemy poszczególne katalogi w odpowiednie miejsca w naszej strukturze plików:

      sudo cp bin/* /usr/bin/
      sudo cp -R doc/cmake-2.6/ /usr/share/doc/
      sudo cp -R man/man1/ /usr/share/man/
      sudo cp -R share/* /usr/share/

      Teraz już powinno wszystko działać bez zarzutów. Warto sprawdzić czy programy cmake, ccmake, cmake-gui są dostępne z linii komend i czy w Aplikacjach, w dziale Programowanie widnieje skrót do cmake.

      środa, 8 października 2008

      Why Linux is Better?

      0 komentarze
      Jeśli korzystanie z Linuksa stało się dla Ciebie zupełnie naturalne i dawno nie miałeś do czynienia z alternatywnymi systemami operacyjnymi (Windows, Mac OS) to możesz nie czuć różnicy. W dodatku kiedy znajomi pytają Cię dlaczego właśnie Linuks i czy ten system może być odpowiedni również dla nich, sporą listę argumentów znajdziesz na stronie: www.whylinuxisbetter.net (dostępna polska wersja językowa).

      poniedziałek, 6 października 2008

      Czas na zmiany - KDE 4

      0 komentarze
      Po zainstalowaniu ostatniej wersji Ubuntu (8.04.1) na domowym komputerze, nadszedł również czas na zmiany na laptopie, którego używam na co dzień. Jak dotąd korzystałem na nim z niewspieranej od jakiegoś czasu wersji 6.10 oraz Windowsa XP, od którego nie zdążyłem się jeszcze zupełnie odzwyczaić. Skoro i tak postanowiłem już zmienić swoje środowisko pracy, to dlaczego nie pójść na całość i nie wybrać czegoś zupełnie świeżego? KDE w wersji 4.1 - bo to właśnie o nim mowa - jest już na tyle stabilnym środowiskiem graficznym, że nadaje się do codziennego użytku, chociaż do stabilności Gnome jeszcze trochę mu brakuje.

      Początek oczywiście nie był łatwy: myszka odruchowo wędrowała do lewego górnego rogu ekranu w poszukiwaniu menu programów, zegara również szukałem na górze, a szaro-czarny motyw okien z niebieską tapetą to nie było to do czego się przyzwyczaiłem w Gnome. Moje oczy latały w kółko nie mogąc przyzwyczaić się do nowego wyglądu.

      Kiedy już minął pierwszy etap asymilacji, przyszedł czas na bliższe poznanie systemu i jego możliwości, szczególnie w kontekście czynności, które wykonuję na co dzień.

      Internet:

      Już na początku zaskoczył mnie nie najlepszy wygląd Firefoxa, który w Linuksie korzysta z kontrolek GTK. Wystarczyło jednak skonfigurować gtk-qt-engine-kde4 oraz zainstalować motyw graficzny kde-firefox, aby otrzymać w miarę natywny wygląd.

      Praca zdalna:

      Bardzo miłą niespodzianką była dla mnie znakomita obsługa serwerów FTP oraz SSH w menadżerze plików Dolphin, który czyni pracę ze zdalnymi katalogami prawie tak naturalną jak z katalogami lokalnymi. Najlepszym tego przykładem może być możliwość edycji plików na serwerze FTP bez ich kopiowania tam i z powrotem. Kolejną nowością jest dla mnie możliwość oglądania filmów wprost z serwera, z czym całkiem nieźle radzi sobie JuK.

      Konsola:

      Długo nie musiałem szukać zamiennika dla interaktywnej konsoli Tilda, do której przyzwyczaiłem się w Gnome. Yakuake w KDE świetnie się spisuje.
      Edytor tekstu:

      W Gnomie zawsze brakowało mi naprawdę dobrego edytora tekstu. Ratunkiem okazał się JEdit, który pomimo tego, że miał wszystko czego potrzebowałem, w wielu zastosowaniach po prostu okazywał się za ciężki. Kate w końcu wypełniła tą lukę. Jakby nie okresowe zawieszenia przy obsłudze sesji, byłbym w pełni usatysfakcjonowany.

      Po dwóch tygodniach korzystania z KDE jestem z niego naprawdę zadowolony i polecam wszystkim, którzy z jednej strony potrzebują wydajnego systemu do codziennej pracy, a z drugiej strony nie boją się eksperymentować. W tym czasie tylko kilka razy zdarzyło mi się przełączyć na Gnome i ani razu na Windowsa.

      Na koniec zamieszczam jeszcze screen z Dolphina, z włączoną opcją podglądu dla aktualnie zaznaczonego pliku. Co ciekawe nie widzimy kodu html, tylko już wyrenderowaną stronę z uwzględnieniem styli i naniesionymi obrazkami.