sobota, 11 grudnia 2010

Kompilacja KDE ze źródeł dla niewtajemniczonych

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.

    4 komentarze:

    Anonimowy pisze...

    Mam komputer, który nie ma dostępu do internetu, chciałem poszukać gotowych i skompilowanych paczek .deb, by zaktualizować KDE do wersji 4.6.1 na Kubuntu 10.04. Takowych nie znalazłem. Pomyślałem o kompilacji, lecz po lekturze tego poradnika porzuciłem wszelką nadzieję, pomimo tego że napisany jest bardzo zrozumiale. Trzeba znaleźć zbyt dużo potrzebnych pakietów. To ponad moje możliwości. Będę znów miał internet to apt-get z repo pociągnie mi nowe KDE. Szkoda że nie ma możliwości instalacji "full-automatic" z jednego pliku, tylko zabawa przez cały dzień i pobieranie masy danych.

    dareczek

    Rafał Petryniak pisze...

    No, to jest problem. Pewnie da się go jakoś rozwiązać, ale każdy sposób to będzie niepotrzebne kombinowanie i nie wiadomo czy ostateczny rezultat będzie taki jak powinien. Osobiście polecam wziąć komputer pod pachę i zapukać do znajomego, który ma Internet. Całość zajmie 2 godziny. Koledze można zabrać piwo. Sobie zresztą też, bo instalacja chwilę trwa ;-)

    Anonimowy pisze...

    Wycieczka do kolegi też odpada, taszczyć blaszka to trochę skomplikowane, bo nie mam samochodu, a mieszkam na wsi. Tak to już jest po studiach(nieskończonych z resztą), muszę robótkę w jakimś miastku znaleźć i przeprowadzkę zrobić.
    Z mojego doświadczenia wynika że największym problemem w przypadku Linuksa jest brak internetu, oraz dzielenie instalek na drobne pakiety oraz brak dostępności gotowych pakietów. Nawet kompilacja jest trudna bo w systemie nie ma podstawowych potrzebnych plików a zbyt często potrzebne są kolejne zależności.
    Podejrzewam, że dopiero wtedy gdy te problemy zostaną rozwiązane Linux zacznie zyskiwać na popularności. Przydało by się też jakieś repozytorium dostępne z przeglądarki, bo tam gdzie apt-get sięga Opera, czy Firefox już nie da rady.

    dareczek

    Rafał Petryniak pisze...

    Chyba wiem co powinno rozwiązać twój problem. Dzisiaj na Debian User Gang.pl czytałem o narzędziu apt-offline, które służy do przeprowadzania aktualizacji na komputerze bez dostępu do Internetu. Dokładnie nie wiem na czym to polega, ale na pewno znajdziesz jakieś opisy w sieci. Wiadomość, o której mowa jest tutaj: http://dug.net.pl/news/258/.

    Prześlij komentarz