от the_real_maniac(3-08-2004)

рейтинг (-8)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

КАКДА относно KDE, QT и (малко за) Х

    Съдържание.:
    0.Увод
    1."Какво Ви трябва?"
    2.Прединсталационни дилеми
    3.Компилиране:
    3.1.Компилиране на QT
    3.2.Компилиране на KDE


    3.3.Компилиране на KDE с distcc && / || ccache.
    4.Слединсталационно конфигуриране.
    5.Възможни проблеми. / ~ FAQ
    6.Финални думи - "Пролог".

( *! Мисля , че таг-а table трябва да е позволен (в статиите , които се пубкликуват на сайт-а) и моля автора на doc_embed да напише поне документация с възможните параметри/аргументи/опции на тага doc. )


0.Увод:

Здравейте.! Откъде да започна , толкова неща имам да Ви казвам по темата (пиша) , че подреждането на съдържанието на тази статия кое - къде ми се явява голяма задача. Няма да крия радостта си от това , че ще публикувам статия. А тя ще е още по-голяма , ако и (1)хората я разберат, (2) помогне в реална ситуация, (3) намери одобрението на Линукс общността в България. Ще гледам да бъда кратък в увода, но все пак това е увод. Едно от двете места , където автора може да си позволи дълго лиречско отклонение :). Всичко почна от появилият се мой голям ентусиязъм да компилирам KDE от сорс код и то да си направя deb пакети. След това си викам защо да не взема и да напиша едно HOWTO. По време на процеса на борба с KDE & QT реших да изпробвам и приложа в реални условия distcc & ccache ... и се почна. Важно е да уточним, че преди това нито бях ползвал distcc , нито ccache , камоли компилирал нещо ГОЛЯМО от сорс (код) -> т.е не бях компилирал досега KDE и QT. Но преди да започна искам да Ви предупредя , че статията е писана в един вид свободен стил и също така да Ви предупредя СЪВСЕМ СЕРИОЗНО (!!!):


Автора на тази статия не носи (или поема) никаква отговорност за нанесени щети ( били те физически - загуба на информация, данни; или духовни - психически травми вследствие компилиране на KDE и/или QT; ), използването на примерите показани (описани) в статият е изцяло на Ваша отговорност .!

Забележка: Вие виждате линк от сорта linux-bg.org с текст и си мислите , че това ще ви заведе на http://www.linux-bg.org .? Грешите ! Аз упоменавам къде ще намерите информацията , а линк-а води директно там , където ще получите необходимата информация ;) От горния линк може да свалите някоя от хоставаните на linux-bg.org дистрибуции.




1."Какво Ви трябва ?"

Какво Ви трябва ? -> ами зависи какво искате да направите. Тук ще Ви кажа какво Ви трябва , къде да го намерите и как да го вземете. А също така ще поговорим и защо нещата са така , както са ;)

Сорс кода на QT можете да вземете от trolltech.com, както и от огледалата по света, А също така може да намерете и на d.linux-bg.org. Съмнявам се просто ей така да тръгнете да сменяте QT , всмисъл KDE има строги изискваня каква да е версията на QT, но може да сте разработчик и тогава Вие не се интересувата толкова много от това , коя версия Ви е KDE. Може да имате повече от 1 версия на QT без проблем стига да сте оказали правилно пътищата. Както знаете - предполагам; KDE е базирана на QT библиотеките, изграждането на прозорците се управлява от мениджера на прозорци ,но когато се изгражда KDE приложение , то то използва не стандартните Xlib библиотеки , ами QT библиотеките. Те осигуряват така наречените "прозоречни функции". Ето защо трябва да се спазват изискванята на KDE версия Х за версията (Y) на QT, защото иначе не се знае как ще работи KDE, ако въобще се стартира. (Макар и в по-новите версии на QT да се очаква подръжка на по-старите може да се е променило нещо в реализацията или извикването на дадена функция .! Затова обръщайте внимание на страницата (на КДЕ) за зависимостите на КДЕ версията, която Ви интересува.)

Цитат + мой превод от XFree86 HOWTO

"Това, което вдействителност Вие виждата на екрана е резултат от различни компоненти - всички работещи заедно: Операционна Система , Х , Менъджер на Прозорци и (може би/незъдължително) допълнително Десктоп Среда като Гном или КДЕ. Тези всички неща са "plug and paly" компоненти, което означава , че Вие можете да сменята индивидуални компоненти без да пипате / променяте другите компоненти."

Или леко текстово - графично обяснение :D

Предполагам сега може да си представите и сами ситуацията при Гном (на мястото на KDE приложение имаме Gnome приложение и на мястото на QTlib имаме GTK(+) :) ). Сега да продължим нататък.

Вие искате последното (възможно за достъпване) КДЕ или да си сложите по-нова версия на КДЕ чрез компилиране на сорс код(а на КДЕ). Имате няколко варианта за достъпване на КДЕ:

  1. Последния код на КДЕ може да достъпите от / чрез CVS и впоследствие може да ъпдейтвате този код - т.е не се налага да теглите на ново целия CVS , ами се записват само промените ;). Засъжеление не съм запознат (от гледна точка на това, че ) - нямам опит, затова ще Ви препратя към kde.org. Там хората са написали как да изтеглите и в послествие да си обновявате вашето CVS директория на КДЕ.

  2. Другия вариант - сорс код-а на KDE Stable/Ustable в TARBALLS вариант (file.tar.bz2). Това е и предпочитания от мен вариант. 'Защо ?' Ами защото този вариант Ви предлага: основните компоненти, модули в добре спретнати архиви (tar.bz2 - аз лично свалям по-възможност винаги в този вариатн), така да го кажем stable сорс кода на unstable release :) и още няколко неща , но това са по-важните ... KDE3.3 Beta1 (3.2.91) може да намерите на този link -> ftp://download.kde.org или от linux-bg.org тук.

  3. Последния вариант е бинарния вариант - това е вече компилиран сорс код на КДЕ - предимно опитмизиран или за i386 , i586 или 686. Тези , които почти веднага могат да се намерят след излизането на KDE beta/unstable са бинарни файлове за Suse. Споменавам го за информация и изчерпателност , иначе мисля Ви е ясно няма как да компилирате бинарен файл :wacko: .

    За потребители на Suse: Има бинарни пакети за Suse , но те могат да се изтеглят от kde.org или от някой друг mirror (но не и от българските мрежи , доколкото знам). Харесвате си версия на КДЕ и вътре ще намерите директория Suse -> влизате в нея, после теглите. Примерен линк за KDE3.3 Beta1.

    За потребители на Debian: 1.QT3.3.2 binary ще намерите в experimental часта от проекта на Дебиан. 2.Аз до една седмица се надявам да съм качил и бинаритата на KDE3.3 Beta1 оптимизирани за i586 - само следните модули (първите 3 не са модули , те са задължителни , но затова по-надолу) arts, kdelibs, kdebase, kdemultimedia, kdegraphics, kdenetwork, kdeartwork + kde-i18n-bg. Още не са готови , а трябва и да ги изтествам като станат, така че този вариант е още в разработка , но да знаете , че са в разработка :) Иначе поддържам връзка с човек / потребтел на / от пощенския списък на debian.org , който вече би трябвало да е качил свойте unofficial binaries of KDE CVS (head) и за повече информация просто потърсете в kde-devel mailing list, но мисля Ви е ясно ,че те ще бъдат извън Българските мрежи (BG PEERING).

    Добавете следния ред във вашия /etc/apt/sources.list за experimental:

    deb http://debian.ludost.net/debian ../project/experimental/ main

    За потребителите на Slackware & Gentoo: ами , ако Вие ползвате една от тези две (по-известни) дистибуции ориентирани към изграждането на система изцяло by hand / from source , то ще се зарадвате на качения source на KDE3.3 Beta1 (TARBALLS -> tar.bz2 format). А и сигурно вече сте компилирали ..., така че ми остава да Ви кажа само - ще се радвам, ако аз Ви кажа нещо ново и приятно компилиране :)

Тъй като повечето , включително и аз сме с модемна връзка към чужбина или казано по-правилно това нещо наречено Интернет , а не Интранета, който ни продават( но за под 50-60лв е така :| ); аз споделям с вас моето сваляне (с 4кбайта/с за около 12 часа - не съм сигурен повече или по-малко; ) на целия KDE 3.3 beta1 (3.2.91) source в TARBALL(S) вариант. Също така той нямаше да е достъпен за вас, ако не бяха linux-bg.org (marla.ludost.net (ludost.net)), които предоставиха дисково пространство , а и също така исках да е на linux-bg.org , а не на някой BG free file server, поради ????? войни м/у Bulgarians ISPs -> no comment.

Връзка: ТУК в TARBALLS формат (tar.bz2)

Сорс кода на kde3.2.3 отново в TARBALL(S) вариант намерих на data.bg (, която почнах отново да "виждам" от няколко дена насам :? ).

Забележка: От локализациите съм качил само kde-i18n-bg only (!), защото целия i18n е 170мб и все пак няма смисъл да го качвам , ако някой иска да си дръпне другите локализации , то може да го направи от kde.org - по около 3МБ са. Като трябва да си изтеглите локализация за версията на КДЕ , която ще си инсталирате/компилирате/.


2.Прединсталационни дилеми.

Сега пред вас стoят два въпроса: Ще ползвате само новото КДЕ или искате да имате две версии на КДЕ и последващ от решението Ви още един въпрос.

И така ... Реши ли сте да си слагате ново КДЕ. Това добре ,но искате ли да запазите и старото си и да избирате кое KDE да ползвате или искате само една версия на КДЕ. Преди да ми(си) отговорите трябва да Ви предупредя , че ако новата версия на КДЕ, която искате да си сложите е beta/unstable по-добре да си оставите и старото KDE ! Но все пак това е Ваш избор. Ако искате да имате само едно KDE следващите редове не са за Вас - продължете към Секция 3.
Вие сте решили да имате две версии на KDE. Ами възможно е, но е малко играчка да се направи. Най-важното сега е да разберете , че има риск новото КДЕ (макар и рядко !) да не разчита правилно конфигурационните файлове създадени от старото Ви КДЕ и когато си пускате новата версия на КДЕ ще стане малко (по количество) боза (каша). (Аз лично необичам боза , от което и хич не обичам работи като боза (, от които става боза)). Поради това и от KDE , и аз Ви съветвам (защото го изпитах),когато компилирате сорс кода на KDE от CVS или компилирате unstable версия на KDE да си създадете отделен user , с който ще компилирате и ползвате новото KDE (unstable / from CVS) .! Разбира се това е Линукс ( вслучея КДЕ, но :) ) и винаги има и още един вариант , както беше казал някой. Този втори вариант е да укажете системната променлива KDEHOME,когато ще ползвате новото си КДЕ; различно от .kde (по подрабиране KDE записва свойте конфигурационни файлове в ~/.kde). Ако предпочитате този - 2-рият; вариант трябва , когато искате да ползвате новото си КДЕ да зададете тази променлива, но затова по-подробно в Секция 4-та.
Как да направите варианта с отделен потребител ще Ви обясня сега ..., НО (!!!) с това не приключва въпроса по конфигуриране на това действие и избягване на такава/тази ситуация.!

  1. Създаване на нов потребител. От KDE предпочитат kdevuser , аз лично user-tester. И примерно , ако потребителя се казва foo , създаваме потребител foo-tester като ще кажем той да е в групата на foo (по подразбиране отново foo (username)), така че да можете с вашият тестващ акаунт да използвате вашата home директория и файлове в нея - на вашият оригинален акаунт :) ( Какво да Ви кажа - multiuser based OS :P ) .:

    $su root
     password: //въвеждате вашата парола
     #adduser --ingroup foo foo-tester
     
     // пропуснете т.2 и т.3 ;)
  2. или ако вече имате друг потребител , който си ползвате за опити и т.н:

    #moduser -G foo user-for-tests // НЕ МАЛКО G - g ! Има разлика .!
  3. оправяме правта на home dir. на вашият тестов потребител:

    #chown user-for-tests:foo -R /home/user-for-tests 
     // КАТО ВНИМАВАЙТЕ КАК ПОЛЗВАТЕ -R в комбинация с '*' .!

  • за да може и да пишете в/у вашата original home directory от вашият тестов акaунт

    #chown 770 -R /home/foo

Tова е ... за сега , след инсталацията на КДЕ трябва да се направят още 2-3 настройки, но те зависят отново от вашия избор, но неможе да ги направим сега, защото не са за / в / този етап на инсталиране на новото Ви КДЕ ;). Ще продължим тази тема в Секция 4-та.


3.Компилиране.:

Тук - логично; ще Ви обясня как да извършите самото компилиране на QT и / или KDE. Първо подред е компилирането на QT , тъй като KDE както вече обясних е свързано с QT библиотеките. След това ще говоря и за компилиране на софтуер , използвайки повече от една машини и най-вече ще наблегна на това как да компилирате КДЕ на повече от една машини (, които са свързани в мрежа - независимо каква :) ).


3.1.Компилиране на QT.

Компилирането на QT не е голяма философия, но изисква малко повече внимание. Като препоръка за инсталиране на QT е следното: взимате сорс код-а на QT , разаривирате го там , където искате да бъдат инсталирани QT библиотеките и следвате процедурата: ./configure ; make , и това е. Т.е там където Ви е сорс кода на QT , там Ви е и реалната инсталация. Това се препоръчва от QT. Аз лично , обаче реших да си инсталирам qt в /usr/local/qt-version, където version е съответнтата версия. Как може да направите това ? Лесно , но преди това. В повечето случеи при инсталиране на софтуер от сорс код пускате или просто:
./configure
или
./configure --плюс-някой-път=/към/някоя/библиотека .
Обаче конфигурирането на QT е маааалко по-сложничко. КДЕ има нужда от някои възможности на QT библиотеките като такива и ако Вие не сте ги компилирали в необходимата форма - с необходимите свойста/възможности (звучи малко като урок по Химия, но ) КДЕ няма да работи както трябва , с пълни възможности или няма да работи въобще. Затова , ако не сте запознат (и разбирате) ./configure --help по-добре се придържайте към следната конфигурация (защото QT наистина има възможност за конфигуриране на голям брои опции).

  1. Какво предлагат KDE:

    ./configure -system-zlib -qt-gif -system-libpng \
     -system-libjpeg -plugin-imgfmt-mng -thread -no-stl \
     -no-xinerama -no-g++-exceptions
  2. Какъв е минимума:

    ./configure -qt-gif -thread -no-exceptions
  3. Как да инсталирате QT в различна директория от тази , в която Ви е сорс кода:

    ./configure someoptions --prefix=/usr/local/qt-3.3.2

    След, което вече имате на разположение и make install , което ще създаде посочената директория , вслучея /usr/local/qt-3.3.2 и ще копира там вече компилираните QT библиотеки. Замислих се , че някой може да се обърка , затова е следващия пример - минимално конфигуриране за работещо КДЕ + инсталиране на QT в определена (друга) директория.

    ./configure -qt-gif -thread -no-exceptions --prefix=/user/local/qt-3.3.2
  4. Една интересна опция е '-fast'. Вижте ./configure --help на QT. ;)

  5. Ако искате да промените нещо - т.е да преконфигурарирате QT се съветва да изпозлватре 'make distclean' (което би трябвало да върне сорс кода в равнище като току що разархивиран) , но може да изпозлвате и стандартното 'make clean'. Ако ще правите бинарен пакет или нещо важно със сорс кода ВИНАГИ използвайте 'make distclean'.!

Ако само искахте да си обновите QT библиотеките продължете към Секция 4-та , точка 1 отнасяща се до QT, ако обаче искате и да компилирате КДЕ след това се върнете тук и продължете нататък.


3.2. Компилиране на KDE.

Това сякаш е лесната и забавна част. Единственото може би неприятно е , че ще Ви се наложи (най-вероятно) да инсталирате доста библиотеки във вариант за 'разработване' - на хедърни файлове или така наречението dev libs. Най-честно имената им са от сорта: nameofthelibrary-dev. Примерно KDE изисква libname библиотеката и ако Вие досега не сте компилирали софтуер нуждаещ сте от тази библиотека или сте ползвали КДЕ от бинарни пакети , то Вие имате тази библиотека , защото тя е необходима на КДЕ , но във бинарен вариант - shared library - споделена / шерната библиотека. А не във вариант за разработване (компилиране , модифициране и т.н) - т.н. dev вариант. За ваша радост ./configure скрипта на KDE е много добре направен и Ви казва какво Ви липства , къда да го намерите и за какво Ви е , можете ли без него , ако да какво ще загубите от възможностите на КДЕ :). Честно казано configure скриптовете на КДЕ3.3 Бета1 ми спестиха много време , защото наведнъж ми изписаха какво нямам и т.н, докато configure на КДЕ3.2.3 на час по лъжичка: "./configure - нямаш това , ./configure - нямаш това , ..." и така докато не набавих всичко необходимо , докато KDE3.3: "./configure - нямаш това , това и това."

;)
Предполагам това ще са библиотеките , които няма да имате,
 ако не сте инсталирали dev библиотеки, но може да има и още 
 (най-вероятно) - най-добре е да пуснете ./configure и да видите ;) .:
 
 libcupsys2-dev
 libart-2.0-dev
 libxslt-dev
 libssl-dev
 libbz2-dev
 libaspell-dev
 libart-dev
 libpcre3-dev
 lesstif2-dev
 libsmbclient-dev
 libpng12-dev
 libpng3-dev
 
 //имената тук са на Дебиан пакети , но те почти не се различават
 //с действителните имена на библиотеките ;)
 //
 //Всмисъл libpn12-dev....deb при rpm ще бъде разлино
 //libpng-version-RELEASE-arch (libpng-1.2-1-i386.rpm)
 //
 //Идеята е , че искам да Ви дам ориентир ;) поне за тези,
 //които със сигурност няма да имате , ако не сте
 //качвали dev libraries...

Същинското комплиране иначе е лесно - след configure следва make и ако сте задали --prefix=/dir/where/tobe/kde -> make install. Всъщност вслучея е задължително да определлите --prefix , като за всички КДЕ части той трябва да е един и същ ! Пример:

$$cd /home/kdevuser/KDE-3.3-beta1/build/
 // предполага се , че вече имате разархивирани съответните основните КДЕ части - arts,kdelibs,kdebase
 $cd arts* // почвам от arts
 $./configure --prefix /opt/kde-3.3-beta1
 // + (естествено ако имате) вашии опции 
 $make
 $su root -c make install
 //въвеждате паролата на root ((the) superuser)
 // готово - сега вече имате arts , оставят kdelibs и kdebase

!!! междувпрочем забравих да Ви кажа , че във всяка една директория от КДЕ частите има два файла README & INSTALL. Метнете им по един бърз поглед. Може да намерите много полезна информация - като например в README файла ще намерите програмите/нещата , които съдържа дадената кде част (или модул). ;) !!!

ПРЕДИ ДА ЗАПОЧНЕТЕ ! Трябва да знаете следните 3 неща: Всички части на КДЕ , освен arts, kdelibs и kdebase са допълнителни модули, като kdeaddons и i18n са по-специални модули. За да имате минимално работеща КДЕ десктоп система е необходимо да компилирате "най-малко" (и препоръчително в този РЕД !): arts, kdelibs, kdebase .! i18n е модула съдържащ локализациите за КДЕ. Т.е КДЕ да Ви е на родния език - вслучея Български. kdeaddons е специален модул , защото за функциоирането на приложенията в него е необходимо присъствието на всички други модули - той се инсталира последен. Макар че е възможно и да компилирате само определени части / приложения от даден модул. Влизате в директорията на дадения модул. Пускате ./configure със съответните опции и --prefix=/kdedir , след това влизате в директорията на определеното приложение и изпълнявате make , make install. Както виждате нищо трудно :) Но все пак ще Ви дам пример:

$cd /home/kdevuser/KDE-3.3-beta1/build/
 // предполага се , че вече имате разархивирани съответните КДЕ модули , които искате да инсталирате
 $cd kdeutils*
 $./configure --prefix /opt/kde-3.3-beta1 // + (естествено ако имате) вашии опции 
 $cd kcalc
 $make
 $su root -c make install
 //въвеждате паролата на root ((the) superuser)
 // готово сега си имате KDE calculater без другите неща от kdetuils :))

Сега Ви остава да си компилирате същинското КДЕ и да преминете към Секция 4-та , НО ако сте объркан от какво точно трябва да направите , какви команди и в каква последователност да изпълните погледнете Въпрос 1 във Секция-5-та FAQ.


За *BSD потребители.:

Ами засъжеление не съм ползвал още такъв тип операционна система. Лично за мен - макар и малкото ми познания за *BSD; BSD ми се вижда като един друг път имащ свойте + и - , но за да минеш по-този път преди това трябва да минеш по пътя на Линукс и да се запознаеш с основите на Unix. (В интерес на истината :D скоро мисля да пробвам FreeBSD - просто ми е направила най-голямо впечатление от всички *BSD). Та да си дойда на думата - немога да Ви дам Практически съвети и обяснения, но разучих в основни части въпроса с компилирането на KDE под FreeBSD и ... според така, както аз виждам нещата:

Следвайки мойте указания ,които не се различават много от тези в ръковдоството на KDE за компилиране на КДЕ, просто защото метода е един - да компилирате kde - configure, make, ...; би трябвало успешно да компилирате КДЕ на вашата *BSD система и то да върви (на всичкото отгоре :D). Трябват Ви C/C++ компилатор - 99.9% имате такъв, необходимите библиотеки - в това число и QT , и накрая GNU make - make "в" BSD е ... как е по-правилно да се каже , съвместим , почти еднакъв с GNU make - така че нямате проблем с компилирането на КДЕ, но някъде се упоменава (не говоря за КДЕ в момента) изрично , че трябва да имате(ползвате при компилирането) GNU make ;). Макар че сигурно различните *BSD ползват и различни версии make (като разработчици - т.е може някоe *BSDда ползва и точно GNU make). Предварително извинете за неточности. Ако някой иска да ме поправи някъде - да напише коментар към статията, да прати е-мейл, да пише във форума -> с радост ще оправя грешките, ще вмъкна правилната част и предварително му / Ви изказвам благодарности. ;)

Ако искате да го направите по FreeBSD-ски (май така трябва да стане думата с окончание / или приставка е по-правилно / на -ски ) -> просто погледнете FreeBSD Handbook , направи ми впечатление простотата на компилиране. Бинарно -> инсталира се пакет , а иначе сорс код-а се издърпва чрез Ports( трябва човек да се запознае с (Ports системата на (Free))*BSD ), след това просто make install clean и се компилира (+ необходимите зависимости) :) Сигурно само изглежда лесно на пръв поглед, но ето Ви няколко полезни линк-а - кратки са , прочетете ги , дори и да нямате много време (!).:
http://freebsd.kde.org/instructions.php
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/x11-wm.html
Надявам се да съм Ви помогнал поне малко ;) btw: Кажете дали съм прав относно стандартния метод за компилиране на КДЕ в/у BSD система - би трябвало всичко да е ОК , следвайки логиката и според това, което аз знам :) Успех !


3.3 Компилиране на KDE с distcc && / || ccache.

simple XOR
if( distcc && ccahce || (distcc || ccache) ) printf("Now I/We will make it faster :) .!\n");
Coool :D *знам че cool се пише с две О-та ;) и това горе , май се нарича (направих) XOR (ако не се бъркам разбира се)

Компилирането на КДЕ отнема доста време , дори и на една бърза машина , дори и само на основните части на КДЕ (arts, kdelibs, kdebase). А и повечето от вас ползват бинарни пакети и системата Ви не е оптимизирана за вашата система, освен ядрото (може би), така че няма да е лошо да впрегнете повече машини. Не говоря за процесори , ами за машини (компютри). Дори и тези машини (компютри) да са (от) различни архитектури .! Как може да постигнете това - с помоща на distcc. Освен това може и да улесните доста вашата машина (а и (ако има) другите), да си спестите доста време при рекомпилиране и да видите още от възможностите на open & free software , в частност Linux :D . Говоря за програма наречена ccache. Тази програма има за цел да кешира компилиран код и при прекомпилиране на дадена програма/ същия този сорс код/ се използва създадения кеш (ако е използвана ccache), вместо отново да бъде компилиран същия (този) сорс код :). Хитро , нали (?) - макар и простичко , но гениялните неща са най-често простите** неща. Преди да продължите надолу Ви моля да прочетете тази - макар и кратка, НО много съдържателна (!); статия -> linux-bg.org/статии/съвети/трикове :) .

** - не в смисъл на глупави ! Мисля , че нямаше нужда от това утoчнение , но все пак, за да няма двусмислия и т.н. ... ;)

Трябва да отбележа , че инсталирането и конфигурирането , и на distcc, и на ccache е много лесно. А вършат огромна работа. И както самия създател на distcc казва - перефразирам: "distcc си показва силата , когато компилирате голям проект". Такъв е КДЕ и при компилиране с помоща на distcc никакъв проблем ! Но ако искаме да използваме и distcc , и ccache (една жестока комбинация :)) ) при компилиране на КДЕ - по-точно на kdebase, и още по-точно проблема е свързан с libtool; ще се сблъскате с един проблем ... На какво се дължи този проблем ?. Отне ми доста време , докато открия този добър отговор (междудругото), защото във FAQ-то на distcc е обърнато внимание на проблема, но е казно че при съвместа употреба и на distcc, и на ccache трябва да маскира и ccache, ама/но как - никой не казва. И объркването идва от там , че няма почти нищо общо с метода , по-който се маскира (само) distcc.Оригиналното обяснение distcc mailing list. На български обяснението на проблема звучи така:

>>"Би трябвало да можете просто да свържете distcc и ccache чрез CC='ccache distcc gcc'"
 > "Да , но когато правя така при компилиране с libtool имам проблеми, защото libtool преобразува това в:
 >
 > --mode=compile ccache distcc gcc -DHAVE_CONFIG_H ...
 > 
 > вместо в
 > 
 > --mode=gcc -DHAVE_CONFIG_H
 >
 >..."
 
 
 // тук има едни кратък отговор на Мартин Пул (създателя на distcc),
 // но по-подробно описание за решение на проблема има в друг e-mail ;)
 // вижте по-долу ...

Oще един e-mail от distcc mailing list , освен него вижте и следващия към същата тема (topic, subject) .!

Решението:
 
 Вместо маскиране на distcc посредством
 символична връзка ...
 
 пример за gcc:
 
 #mkdir -p /usr/lib/distcc/bin
 #cd /usr/lib/distcc/bin
 #ln -s ../../../bin/distcc gcc
 #echo "export PATH=/usr/lib/distcc/bin:$PATH" >> /etc/profile
 
 и когато се вика gcc дефакто ще се вика distcc ;)
 // дефакто аз нужда за това невиждам , защото CC=distcc
 // съдържа точно един стригн/низ/дума , макар че при нужда
 // от маскиране само на distcc това е по-лесното решение 
 // вместо аналог на долното , но само за distcc.
 
 създавате едни простичък скрипт :)
 
 #echo "#!/bin/bash" > gcc
 #echo "exec /usr/bin/ccache /usr/bin/distcc /usr/bin/gcc $@" >> gcc
 
 и получавате ccache , distcc + gcc с безпроблемно компилиране на КДЕ :))
 Направо красота ;)
 
 За другите компилатори правите същото ... 
 Например
 
 #echo "#!/bin/bash" > g++
 #echo "exec /usr/bin/ccache /usr/bin/distcc /usr/bin/g++ $@" >> g++

На Вас сега сигурно Ви изглежда елементарно , но аз бая време си бих главата и се лутах из Google и майлинг листата на distcc ... Половината от времето по моя вина, но то винаги като разбереш какъв е бил проблема всичко ти изглежда толкова лесно, че се чудиш защо не си се оправил за няколко минути. ;)
Други няколко съвета да Ви дам и малко пояснения , които аз разбрах докато се борех с distcc :)

  1. DISTCC_HOSTS="hostname/number-of-jobs ...", т.е localhost с 5 работи е mypc/5 , а не mypc/4 , както някои хора са се заблудили (т.е не се брои от 0 нагоре :D).

  2. distcc(d) сървъра и компилирането започнато се влиае единствено и само от DISTCC_HOSTS указано на него. Не е задължително , за да участват и други компютри , и на тях да указвате същата DISTCC_HOSTS променлива. Тя влиае само , ако дадената машина ще работи като distcc(d) съръвр ;)

  3. Ако искате да участва и машината , от която дефакто ще започне компилирането / която ще е "сървъра distcc(d)" / непременно я описвайте като localhost в DISTCC_HOSTS="..." .! Защото - поне при мен; като пробвах да я опиша с 'hostname-a' й не получих очакваните резултати ... Примерно: DISTCC="mypc/3 otherpc/2" не работи коректно.

  4. определено прочетете man distcc , ccache , distccd :D

  5. Проверявайте дали distccd сървъра работи и е пуснат правилно ;) Аз лично намирам за напълно приемливо за постоянна употреба примера на Peio от неговата статия: " distcc --daemon --user nobody --allow 192.168.1.0/24 " .!

  6. При проблем с компилиране на известен или голям проект непременно погледнете в distcc FAQ - там са описани 99% от всичките често срещаните проблеми (убедих се), каквато е и ролята на едно FAQ , но това определено си изпълнява целите , само няма как отново да не спомена съвсем краткото описване на проблема с libtool(KDE) & distcc + ccache.


Приятно , леко и бързо компилиране .! Сега остава само да довършим конфигурирането на инсталацията на КДЕ , за да може (то) да работи.


4. Слединсталационно конфигуриране.

Какво трябва да укажеме в/на системата след като компилираме QT и / или KDE , за да можете да си ползвате новото KDE или новото QT. (опитайте сами да интерпретирате тази логическа мистерия - хахаха -> QT и / или KDE).
~/ = /home/user -> т.е за потребител foo , ~/ = /home/foo !

1. Настройка на инсталацията на QT: след компилирането - make; или , ако сте указали --prefix=someqtdir - make install, Вие трябва да посочите пътищата за/към QT библиотеките. Местата са две.

Първото място е /etc/profile за глобално указване на пътищата при ползване на bash обвивката - т.е за всеки потребител не ползващ специфични някоя специфична обвивка. Ако ще ползвате новото КДЕ само с определен потребител въведете следните редове във файла ~/.profile (!), ако ли не - т.е всички потребители да ползват новото КДЕ, то ги въведете във /etc/profile (!). Кои са основните пътища , които трябва да определите/посочите.:
// отваряте съответния файл profile (!)
 // и за --prefix=/usr/local/qt-3.3.2
 // пишете следното
 
 QTDIR=/usr/local/qt-3.3.2
 PATH=$QTDIR/bin:&PATH
 MANPATH=$QTDIR/doc/man:$MANPATH
 LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
 
 export QTDIR
 export PATH
 export MANPATH
 export LD_LIBRARY_PATH

Второто място е файла /etc/ld.so.conf. В този файл се указват списъка с директориите , където системата Ви може да намери споделените библиотеки. В интерес на истината немога да Ви кажа на 100% добавете QTDIR/lib тук. Защо ? Ами защото едни казват 'Да', други казват 'Не' ... Някои потребителите казват 'трябва', други 'нетрябва'. Аз си пробвах и така , и иначе ... Отговора е неочудващ - все тая е :DD Поне за моя Debian ;) Но поглеждайки фактите нищо няма да навреди да я опшите и там , освен ако обаче не се опитавате да имате две версии на КДЕ - тогава не пипайте този файл ! ;)


2. Настройки на инсталацията на KDE: след компилирането - make install (задължително трябваше да определите --prefix при конфигурирането на различните KDE части .!) Вие трябва да укажете пътищата за/към КДЕ. Ако ще ползвате новото КДЕ само с определен потребител въведете следните редове във файла ~/.profile (!), ако ли не - т.е всички потребители да ползват новото КДЕ, то ги въведете във /etc/profile (!).
//отваряте съответния файл profile (!)
 // и за --prefix=/opt/kde-3.3-beta1
 // пишете следнто
 
 KDEDIR=/opt/kde-3.3-beta1
 KDEDIRS=$KDEDIR
 PATH=$KDEDIR/bin:$PATH
 LD_LIBRARY_PATH=$KDEDIR/lib:$LD_LIBRARY_PATH
 
 #долния ред , само ако искате всяко КДЕ
 #да си има отделна директория за настройките си !
 #иначе не го пишете .!
 KDEHOME=.kde-3.3-beta1
 
 export KDEDIR
 export KDEDIRS
 export PATH
 export LD_LIBRARY_PATH
 export KDEHOME


Искате да стартирате , обаче старото КДЕ, но с вашия потребител , а не с определеният потребител. Просто трябва да възстановите пътищата - заменете старите стойности , ако е имало такива или просто оставете празни.:
// направете си файл например old-kde.sh
 // със следното съдържание
 // (има и по-интелигенто решение, но важното е че:
 // 1 - това работи - "Работи ли ? -> Не го пипай ! :D
 // 2 - най-простичкото и механизам/начин на действие)
 
 #!/bin/sh
 
 export KDEDIR=
 export KDEDIRS=
 export QTDIR=
 export PATH=(вземете стойността от /etc/profile , ако има такава)
 export LD_LIBRARY_PATH=(вземете стойността от /etc/profile , ако има такава)
 export MANPATH=(вземете стойността от /etc/profile , ако има такава)
 export KDEHOME=(старата стоност, ако е имало такава или празно)
 
 startx

Ако пък искате да ползвате старото КДЕ по подразбиране,а новото когато искате , нещата предназначени в по-горния пример за съответния файл profile ги въведете във файл new-kde.sh и просто изпълнете sh new-kde.sh, когато искате да стартирате новото си КДЕ.

Лично за мен - или всички ползват новото КДЕ , или само определен потребител ползва новото КДЕ. Също така ако сте си компилирали и QT и КДЕ => имате да указвате пътища и за QT, и за KDE може да обедините пътищата на КДЕ, и QT за една променлива , вместо да ги пишете едно след друго ;) Вижте Секция 5-та точка 1 за повече информация ;). (всъщност просто продължете да четете :D )


5. Възможни проблеми.

Нещо като FAQ - аз предполагам , че ще изчерпам почти всички / да не каже всички / възможни проблеми, които може да имате ( известни на мен ), докато компилирате QT и / или KDE, но все пак сигурно ще има и какво още да Ви предупредя.

  • 0.Въпрос: Къде мога да намеря помощ , ако Google.com и (търсачката на) linux-bg.org форума не можаха да ми помогнат. :( ?

Отговор: Ами на много места :)
irc: Връзвате се (примерно) към irc.debian.org и след това: join #kde, #kde-devel, #qt, също така почти всички по-известни дистрибуции си имат собствен канал за kde ;)
e-mail: Отделно майлинг листите на kde.
FAQ & HOWTO (s): и също многото документация, която се "предлага" на kde.org - абсолютно всичко (99.99999%) е описано там (очудващо как google не ги е намерил :D ).

  • 1.Въпрос: Обърках се ... Какво точно трябва да изпълня (като команди) , за да компилирам и имам KDE компилирано от сорс код ?

Отговор: Идеята ми беше да описвам какво трябва да направите и защо , явно обаче не съм обяснявал или структурирал добре това, което съм писал. Надявам се долните редове да Ви помогнат и изяснат нещата ;) : // Да предположим , че вашият потребител е foo:

  1. |
    login: foo
     password: // въвеждате парола си
     $su
     root password: // въвеждате паролата на root 
     #adduser --ingroup foo foo-tester
     #chown 770 -R /home/foo
     #exit
     $exit
  2. |
    login: foo-tester
     password: // въвеждате паролата "си"
     $mkdir kdesource
     $cd kdesource
     // сваляте QT 3.3.2 и KDE 3.3Beta1 сорс кода от
     //http://d.linux-bg.org/index.php?folder=apps"
     // 
     // файлове, които трябва задължително да свалите:
     // qt-x11-free-3.3.2.tar.bz2
     // arts-1.2.91.tar.bz2
     // kdebase-3.2.91.tar.bz2
     // kdelibs-3.2.91.tar.bz2
  3. |
    $cp -a kdesource ../kdebuild
     $cd ../kdebuild
     $bunzip2 *.bz2
     $tar xvf qt-x11-free*.tar
     $tar xvf arts*.tar
     $tar xvf kdelibs*.tar
     $tar xvf kdebase*.tar
  4. |
    $cd qt-x11-free*
     $./configure -system-zlib -qt-gif -system-libpng \
     -system-libjpeg -plugin-imgfmt-mng -thread -no-stl \
     -no-xinerama -no-g++-exceptions --prefix=/usr/local/qt-3.3.2
     // ако configure Ви "каже", че Ви липства
     // някоя библиотека или програма, а на Вас 
     // Ви трябват възможностите , които тя осигорява
     // на(/за) КДЕ, то инсталирайте я чрез вашата
     // пакетиращата система или последвайки линк-а,
     // който дава configure ;)
     // за Дебиан:
     // apt-cache search name-of-the-library | grep dev
     // apt-get install ...
     // това важи за всички ./configure , коит ще пуснете !
     $make
     $su root "make install"
     password: // въведете паролата на root
  5. |
    // редактирате /home/foo-tester/.profile
     // ако го няма , го създавате и вътре пишете:
     
     QTDIR=/usr/local/qt-3.3.2
     LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
     export QTDIR LD_LIBRARY_PATH
     
     // след това , за да влязат промените в сила:
     $exit
  6. |
    login: foo-tester
     password: //въвеждате паролата "си"
  7. |
    $cd arts*
     $./configure --prefix=/opt/kde-3.3-beta1
     // ако configure Ви "каже"... върни се малко назад ;)
     $make
     $su root "make install"
     password: // въведете паролата на root
  8. |
    $cd ../kdelibs*
     $./configure --prefix=/opt/kde-3.3-beta1
     // ако configure Ви "каже"... върни се малко назад ;)
     $make
     $su root "make install"
     password: // въведете паролата на root
  9. |
    $cd ../kdebase*
     $./configure --prefix=/opt/kde-3.3-beta1
     // ако configure Ви "каже"... върни се малко назад ;)
     $make
     $su root "make install"
     password: // въведете паролата на root
  10. |
    // ако сте изтеглили и допълнителни модули 
     // компилирайте ги по същия начин (може и по-късно)
     // примерно искам kdemultimedia ;)
     // В системата сме като foo-tester ! и ...
     $cd /home/foo-tester
     $cd kdebuild
     // предполагаме , че сте изтеглили дадения архив.
     $bunzip2 kdemultimedia*.bz2
     $tar xvf kdemultimedia*.tar
     $cd kdemultimedia*
     $./configure --prefix=/opt/kde-3.3-beta1
     // ако configure Ви "каже"... върни се малко назад ;)
     $make
     $su root "make install"
     password: // въведете паролата на root
     -----------------------------------------------------
  11. |
    // Не излизате от системата , т.е още сте foo-tester !
     // сега да конфигурираме foo-tester да може
     // да използва новото КДЕ.:
     // редактирате /home/foo-tester/.profile
     // и го променяте, така че да изглежда така:
     
     QTDIR=/usr/local/qt-3.3.2
     KDEDIR=/opt/kde-3.3-beta1
     KDEDIRS=$KDEDIR
     PATH=$QTDIR/bin:$KDEDIR/bin:$PATH
     LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib:$LD_LIBRARY_PATH
     
     #Долния ред като застраховка ;)
     KDEHOME=.kde-3.3-beta1
     
     export KDEDIR QTDIR KDEDIRS PATH LD_LIBRARY_PATH KDEHOME
     
     // записвате и затваряте файла. Последна настройка:
     $echo "startkde" > /home/foo-tester.xinitrc
     // предполагам и се надявам
     // вече всичко е изяснено :))
     // И сега е време да видим това KDE 3.3 Beta1 :-)
     $startx
     ...
    Е как е ?

  • 2.Въпрос: При компилиране на kdebase от КДЕ 3.3.0 Бета1 (в TARBALLS варианта) ми дава следната грешка:

kdebase error
//няма да слагам # за обвивка с привилегии на root , просто защото
 //doc_embed - тагът doc със type = code определя # като знак за коментар,
 //какъвто дефакто е , но и значи още неща ;)
 
 utils.h:164: error: `QCString KWinInternal::getStringProperty(long unsigned
 int, long unsigned int, char)' used but never defined
 make[3]: *** [client.lo] Error 1
 make[3]: Leaving directory `/home/foo-tester/kdebuild/kdebase-3.2.91/kwin'
 make[2]: *** [all-recursive] Error 1
 make[2]: Leaving directory `/home/foo-tester/kdebuild/kdebase-3.2.91/kwin'
 make[1]: *** [all-recursive] Error 1
 make[1]: Leaving directory `/home/foo-tester/kdebuild/kdebase-3.2.91'
 make: *** [all] Error 2

***Също така трябва да Ви ОТБЕЛЕЖА , че когато питате на какво се дължи дадена грешка по време на make, make install, etc ..., то не давайте целия LOG или последните 20 реда , ами давайте реда над първото make[x] *** или още по-... казано - реда над първите 3 звездички (***) :D.

Отговор: Срещайки този проблем първата ми работа беше да преровя Гоогъл (в моя случей върнатите резултати бяха приемливи по-малко от 100 (не си спомням точно колко , но по-малко). Още преглеждайки половината хванах някаква следа. Оказа се обаче грешна - не за моята ситуация. Питах в #kde (irc channel), поговорих с няколко участника и накрая получих отговора от участичнката annma (KDE Developer) На която искам ДА ИЗКАЖА ГОЛЕМИ БЛАГОДАРНОСТИ , защото тя ми помогна и за други мой проблеми свързани с КДЕ , а също така ми изясни и доста неща покрай него (макар и едва ли да разбере написаното тук - български :( ) ! Трябваха да се направят две поправки в сорс кода на kwin. Аз ги направих на patch. Долу ще го напиша , а Вие направете copy-paste и го запазете в някакъв файл , после преместете този файл в главната директория на вашата build директория, където сте разархивирали kde source code. Примерно: /home/foo-tester/kdebuild/. И изпълнете следната команда:
file е файла , съдържащ пач-а/кръпката
patch -p0 < file
Става бързо и безполезнено :)) След това продължете с make , няма нужда от преконфигуриране , make ще продължи от там , където е спрял.
Ако имате проблеми със самото компилиране (make): 1. Google , 2.Търсачката на Форума, 3.Форума или други източници. Точка 2 я написах така , защото предполагам , че след като посещавате linux-bg.org , сигурно посещавате и форума на linux-bg.org.

Самата кръпка
diff -Naur kdebase-3.2.91.old/kwin/kcmkwin/kwinrules/detectwidget.cpp \
 kdebase-3.2.91/kwin/kcmkwin/kwinrules/detectwidget.cpp
 --- kdebase-3.2.91.old/kwin/kcmkwin/kwinrules/detectwidget.cpp	2004-06-26 16:24:22.000000000 +0300
 +++ kdebase-3.2.91/kwin/kcmkwin/kwinrules/detectwidget.cpp	2004-07-31 21:56:48.000000000 +0300
 @@ -55,7 +55,7 @@
 readWindow( window );
 }
 
 -static QCString getStringProperty(WId w, Atom prop, char separator)
 +static QCString getStringProperty(WId w, Atom prop, char separator=0)
 {
 Atom type;
 int format, status;
 diff -Naur kdebase-3.2.91.old/kwin/utils.h kdebase-3.2.91/kwin/utils.h
 --- kdebase-3.2.91.old/kwin/utils.h	2004-06-26 16:24:03.000000000 +0300
 +++ kdebase-3.2.91/kwin/utils.h	2004-07-31 21:56:28.000000000 +0300
 @@ -161,7 +161,7 @@
 };
 
 
 -static QCString getStringProperty(WId w, Atom prop, char separator=0);
 +QCString getStringProperty(WId w, Atom prop, char separator=0);
 void updateXTime();
 void grabXServer();
 void ungrabXServer();
Да не Ви бърка това , че
diff -Naur kdebase-3.2.91.old/kwin/kcmkwin/kwinrules/detectwidget.cpp \
 kdebase-3.2.91/kwin/kcmkwin/kwinrules/detectwidget.cpp
 
 # е така .! Просто като е цялото (на един ред) и ширината на листа , на
 # който е статията става доста голям, и трябва да се движите със скрол - 
 # някакъв (на мишка, на самия броузър); на ляво, и на дясно , което лично
 # за мен е дискомфортно , освен ако не беше схема ;) Малко дългo обяснение
 # за такова дребно нещо , но по-добре безсолно , отколкото пресолено :DD :P
  • 3.Въпрос: Къде КДЕ държи свойте конфигурационни файлове и настройки ?

Отговор: KDE (би трябвало да) държи всички свой настройки в следните директории: ~/.kde (или KDEHOME, ако е указана тази променлива) , ~/.kderc, ~/.qt , /tmp/*username* ( за user foo => /tmp/*foo* ). Като всички тези са Директории и за да ги изтриете ползвайте rm -rf name-of-the-directory. За /tmp ще имате нужда от superuser (root).

6. "Пролог".

Финални думи. Няколко финални думи и не технически съвети , защото предполагам скоро ще се опитате да компилирате QT и / или KDE - Успех!

Много писане падна и в интерес на истината трябваше това да е готово преди седмица++ , но като включим , че сега съм в началото на почивката ми - голямо спане , малко или много мързел; мисля мога да се оправдая. Относно компилирането на КДЕ и ЮТ - при срещане на проблем: (1) Reed The Manual (RTM / RTFM) и (2) търсете в ГУГЪЛ (google.com)!И ... имах още май какво да напиша , но вече - накрая; не се сещам за нещо ,което може да Ви е от полза ... Бъдете СВОБОДНИ , ползвайте Линукс ... ;)


Важна Забележка (!)
ГОЛЕМИ БЛАГОДАРНОСТИ НА: участниците в #kde, #qt , #kde-devel .!! В интерес на истината мислех да спомена имената (прякорите) на хората , с които бях говорил , но всъщност помощта беше от целия irc канал , защото всеки , които можеше да помогне написваше по нещо , за да помогне и ...
... като цяло бях очуден от:
- в първия момент студеното посрещане. Докато не свикнете с правилата - а и аз като цяло не ползвам irc , та направо :)) , но се свиква с желание бързо , макар че също така аз вече си "изпатих" в #debian и доста от основните правила в такива irc канали за помощ или разработки/проекти вече ми бяха ясни, което ми напомня:

!! Не paste-вайте в irc канали като #kde , #debian, освен ако не Ви помолят изрично така да се каже ... идеята е да няма flood на irc канала .!!

- и второ - после; бях очуден , че всеки се опитва да ти помогне - споделя знания(теория), опит(практика), и макар да изглежда доста лесно да намериш отговор не е така , трябва да можеш да питаш - задаваш въпроси.
И най-вече е проблем не толкова проблема ти , а дали ще успееш да се разбираш с човека отсреща , да можеш да му говориш поне малко на неговия език (не говоря за английски език, френски или подобно , а за начин на разбиране на нещата на "човека с/у теб"), да можеш да си обясниш проблема , но в основи и по същество , така че да не загубиш идеята / същината на проблема / . Това е трудното. Макар че се случва и отговор в момента да няма , НО (!) има и други irc канали и също така нарочно казах "в момента" - в правиалта се казва - перефразирам: "Ако сега не получите отговор , не досаждайте , ами опитайте по-късно." -> и правилата имат право разбира се :D ;).


Бъдете Свободни , ползвайте Линукс ...


the_real_maniac ( dgt_it at abv dot bg ), 2004.07.26.



<< Опазвайте ОС от инсталацията | Инсталиране на SuSE Linux 9.1 [Част 2] >>