Автор Тема: Не/съвместимост на пакетите при различните дистрибуции  (Прочетена 1078 пъти)

fury_omen

  • Участници
  • ***
  • Публикации: 3
    • Профил
Тъка, ето го и първият ми пост.... И тъй като съм начинаещ той ще е мета тъп. Интересномие след като всички дестрибуции имат за ядро линукс защо имa отделни пакети за различните дистригуции. Защо примерно програма за дебиан не работи на слак, нали и двете са линукс. Които и тъпо да ви се вижда надявам се да не ми се подигравате .... а някои да разсее мъглата


редакция от neter: Кръщавай темите си подобаващо и според съдържанието!
« Последна редакция: May 13, 2010, 21:10 от neter »
Активен

Ivshti

  • Напреднали
  • *****
  • Публикации: 322
  • Distribution: Linvo 2010.3
  • Window Manager: Gnome
    • Профил
    • WWW
Между пакетите има 3 основни разлики - формата  на пакета, структурата на директориите в пакета, и с кои споделени библиотеки е свързан.
Различните разработчици на дистрибуции взимат различни решения относно това кой пакетен мениджър да ползват, това сменя пакетния формат. Според това какви са версиите на пакетите, на които дадения пакет е зависим, тази програма се свързва с дадени споделени библиотеки, които може в една дистрибуция да са една версия, в друга дистрибуция - друга версия. И накрая, различните дистрибуции могат малко да се различават в това къде се инсталират различните файлове.
« Последна редакция: May 13, 2010, 21:12 от neter »
Активен

fury_omen

  • Участници
  • ***
  • Публикации: 3
    • Профил
В такъв случай, ако аз си компилирам всичко на моя комп от чистия му сорс код това означава ли, че ще работи ?
Активен

Acho

  • Напреднали
  • *****
  • Публикации: 5295
  • Distribution: Slackware, MikroTik - сървърно
  • Window Manager: console only
    • Профил
    • WWW
Активен

CPU - Intel Quad-Core Q8400, 2.66 GHz; Fan - Intel Box; MB - Intel G41M-T2; RAM - DDR2-800, Kingston HyperX, 2X2048 MB; VC - onboard, Intel G41 Express Chipset; HDD - Toshiba, 500 GB, SATAII; SB - Realtek HD Audio; DVD-RW - TSSTcorp DVD-RW; LAN - Realtek PCI-E GBE Controller; PSU - Fortron 350 Watt.

tyuio

  • Гост
Понеже идваш от света на уин най вероятно да питам и кажа нещо:
Когато инсталираш някакво ехе с некст некст. По подразбиране си е зададено къде и какво да инсталира на определено място което е най вероятно в собствена папка в програм файлс в С. Обаче ти самия може да зададеш и друго място по избор което няма да попречи на правилното функциониране на програмата ако искаш даже на D може да я сложиш.
При компилация ако всички нужни програми и библиотеки са удовлетворени и са на нужното място няма никаква причина да не работи. Ако е направено да работи за определено ядро на линукс е малка вероятността някой негови файлове да са на коренни различно място от обичайното в друго дистро.
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Понеже идваш от света на уин най вероятно да питам и кажа нещо:
Когато инсталираш някакво ехе с некст некст. По подразбиране си е зададено къде и какво да инсталира на определено място което е най вероятно в собствена папка в програм файлс в С. Обаче ти самия може да зададеш и друго място по избор което няма да попречи на правилното функциониране на програмата ако искаш даже на D може да я сложиш.
При компилация ако всички нужни програми и библиотеки са удовлетворени и са на нужното място няма никаква причина да не работи. Ако е направено да работи за определено ядро на линукс е малка вероятността някой негови файлове да са на коренни различно място от обичайното в друго дистро.
Това не е съвсем вярно, защото програмите на Windows или разчитат на системни библиотеки, които няма как да не присъстват и/или носят със себе си в инсталационния пакет това, от което имат нужда.
А за Линукс има една много полезна програма ldd, която дава списък с библиотеките от които има нужда както и тяхното наличие и помага да се спретнеш при нужда няколко софтлинка
Активен

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Това понякога е много лоша идея :)
Активен

"Knowledge is power" - France is Bacon

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Това понякога е много лоша идея :)
Да, но понякога спасява задните части при нестандартен софтуер (който не е прерогатив на Линукса)
Активен

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
В повечето случаи спасява :)
Активен

"Knowledge is power" - France is Bacon

fury_omen

  • Участници
  • ***
  • Публикации: 3
    • Профил
Пследно лоша ли е идеята или не?! Аз успях да разбера какво ми казва tyuio..... И искам да попитам : Тоест при лин. разчитам на савкупност от пакети, код на моята система които предоставят определи фукнции и когато славя ново парче код то използва вече наличните фукцкии (предоставени от исталираните пакети) за да функционира, т.е всичко прилича на пирамида. Ох ... тогава се появяват въпросите:
 - Ако някои пакет липсва, а функциите които има се използвани в дадения сорс на дадената програма, то аз трябва да го намеря, че да компилирам успешно, нали?
- И възможно ли е при компилация по някъкъв начин да видя дали липсва нещо и да си го набавя, но това да става автоматично?
И моля "магиосниците", темата тук е за новаци, не спорете кое е по-добро или лощо защото аз и двете не ги знам, ако ви се спори моля отворете си ваща тема, за вашето ниво !
Активен

Ivshti

  • Напреднали
  • *****
  • Публикации: 322
  • Distribution: Linvo 2010.3
  • Window Manager: Gnome
    • Профил
    • WWW
Правилно си разбрал. И да, трябва да намериш библиотеката и да я компилираш. Като започнеш да компилираш, ще ти даде грешка ако нещо липсва.

Само дето не ти се налага да компилираш - всичко може да се инсталира с пакетния мениджър.
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Правилно си разбрал. И да, трябва да намериш библиотеката и да я компилираш. Като започнеш да компилираш, ще ти даде грешка ако нещо липсва.

Само дето не ти се налага да компилираш - всичко може да се инсталира с пакетния мениджър.
Правилната формулировка е "ще получиш индикации че нещо не е наред/липсва"
А всеки нормален мениджър на пакети поддържа зависимости. При опит да инсталираш софтуер, който за да работи има нужда от функционалност, която не е налична, информира за този факт. От тук нататък в зависимост от мениджъра може да се наложи сам да си изтеглиш/инсталираш нужните пакети или той сам да го направи
Активен

0x2B|~0x2B

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
О, не е само до пакетния мениджър и версиите на библиотеките. Снощи установих една педерастия на дебиан. Примерно сума ти пакети зависят от libc6 > някоя си версия, което не е лошо, защото се очаква по-високите версии да са обратно съвместими с по-ниските, все пак това е libc, основната C библиотека, там не могат да си позволяват да правят каквото си искат, има си стандарти и т.н.

Обаче от един момент нататък, дебианците са решили да спрат да ползват glibc, и минават на eglibc, поради някакви конфликти с разработчиците. Демек от libc6-2.10 нагоре, вече не се ползва GNU C библиотеката, а EGLIBC. И това се представя за пред пакетната система като по-висока версия на libc6.

Всичко това е много хубаво, само дето създава проблеми и снощи брах ядове. EGLIBC се опитва да следва изцяло POSIX стандарта и разни linux-specific функции, които бяха в glibc просто ги няма, защото не са по стандарта.

Такам...и точно това, което пиша ползва една такава linux-specific функция, наречена crypt_r(). Силно държа да я ползвам, понеже стандартната crypt() не може да се използва в многонишкови приложения, не е thread-safe. Значи в libc хедърите тази функция я има. Това става, защото аз имам по-стара версия на libc6-dev, където са хедърите.

Проблем 1: libc6 не зависи от libc6-dev - мога да ъпдейтна библиотеката, но хедърите са старите.
Проблем 2: уж по-нова версия на пакета инсталира съвсем различна библиотека с лекинко различна функционалност.

Същото важи и за man страниците които убедено твърдяха че имам такава функция :) Та стигам до положението където функцията е декларирана в хедърите, документирана в man страницата, но липсва в библиотеката и то липсва не за друго, а защото уж същата библиотека е всъщност съвсем различна, нищо че дебианците ми я представят като по-нова версия на същата.

Сега да вземем два случая:

1) Да речем ползвах по-стара версия на libc6 и си бях написал успешно програмата, бях я пакетирал, бях й сложил зависимост от libc6. При ъпдейт на libc6, моята програма спира да работи въпреки че всички зависимости са удовлетворени и всичко изглежда съвсем наред. Спира да работи просто защото дебианците са тъпанари.

2) Програмата ми зависи засега само от libc6. Да предположим, че убунтувците бяха пичове и не бяха тръгнали по акъла на дебианците (което за жалост не е така) и аз си разработвах програмата на убунту, не на дебиан. Понеже и в двете пакетни системи има libc6, убунтувския пакет би трябвало съвсем спокойно да се инсталира на дебиан. И ще се инсталира успешно де, само дето на дебиан няма да работи.


Та такива работи. Бас държа че има още сума ти подобни казуси, за които просто не знам, защото не съм навътре в нещата. Пакетният мениджър се оправя, всичко минава ОК, програмата се инсталира, дори може и да работи до един момент в който се настъпва някаква такава мотика и програмата гърми без да имаш никаква идея защо.

В такива случаи се замислям дали роковците дето компилират всичко, не им е по-лесно, поне от време на време :)
Активен

"Knowledge is power" - France is Bacon