Репозиторії, пакети, менеджери пакетів і залежності в Linux





Вітаю, дорогі друзі, знайомі та інші особистості.

Як Ви напевно знаєте і пам’ятаєте, я обіцяв потихеньку (по ваших прохань) охоплювати цикл Linux, знайомлячи Вас з різними основами і дуже поступово перетікаючи з теорії в практику.

Репозиторії, пакети, менеджери пакетів і залежності в Linux

Сьогодні ми поки що продовжимо тему знайомства з теорією і основами, а тому поговоримо про таку штуку, як репозиторії і про все, що з ними пов’язано, тобто розберемося як же виглядає зсередини софт в Linux, як це все зберігається і все таке інше.

Як і у випадку зі статтею «Графічні оболонки в Linux [основи основ, робота в KDE]«, все, в общем-то, просто, але необхідно по ходу читання кілька напружити мозок, щоб не заплутатися в хитросплетінні термінів і кілька зім’ятому оповіданні. Загалом, стежте за думкою Репозиторії, пакети, менеджери пакетів і залежності в Linux При необхідності прочитайте статтю двічі Репозиторії, пакети, менеджери пакетів і залежності в Linux

Поехалі.Все програми в дистрибутивах Linux це окремі проекти, які розвиваються самі по собі. Ви повинні уявити собі якусь ланцюжок: є окремі пакети (програмне забезпечення), є залежності (нижче ми більш детально розглянемо ці поняття). Мета ж всього цього — зібрати всі ці програми, з їх залежними один від одного бібліотеками разом, та не просто зібрати, а зробити так, щоб все це працювало в комплексі.

У кожного дистрибутива є свої розробники (майнтейнер). Ці люди займаються тестуванням різних пакетів на їх нормальне функціонування, взаємну сумісність, а також часто додають власні удосконалення або не встигли увійти в офіційну збірку і, зрештою, відповідають за включення пакета в дистрибутив патчі. Тобто розробники беруть програми з відкритих вихідних кодів і починають підганяти їх один до одного, упаковуючи в пакети і дотримуючи всі залежності, тестуючи і видаляючи помилки з цих самих програм. Уявили? Тоді, думаю, Ви розумієте, що це непросте заняття. Так от, всі ці підігнані один до одного програми, бібліотеки та ненудні шпалери, упаковані в пакети з усіма залежностями, — це і є репозиторій Вашого дистрибутива, звідки програми і встановлюються на Ваш комп’ютер.

Про репозиторіях в Linux. Що це і навіщо потрібно

Тобто ще раз і трохи інакше: репозиторій в Лінуксе- це всі файли пакетів, що належать одному дистрибутива (наприклад, Fedora), однієї його версії (наприклад, 16), чи то пак це є величезне сховище пакетів, яке знаходиться в мережі Інтернет і яким Ви можете спокійно скористатися (причому безкоштовно). Ті самі ISO-файли образів для записування на болванку і подальшої установки містять якраз репозиторії пакетів з усіма залежностями і менеджером пакетів плюс установчу програму, яка розмітить жорсткий диск, все поставить і приготує Вам робочий стіл (або сервер, або що попросите).

Репозиторії, пакети, менеджери пакетів і залежності в Linux

Для чого створюються репозиторії? Відповідь проста — для централізованого управління оновленням пакетів. Уявімо на секунду, що у нас немає репозиторіїв, і Ви встановили Linux з диска з певними (стандартними) програмами. Однак час не стоїть на місці, всі програми оновлюються і все таке інше. Як же тоді дізнатися — чи є оновлення для Вашої програми чи ні? Природно, доведеться відвідувати сайт розробників програми, щоб з’ясувати це, що, погодьтеся, не зовсім зручно, особливо, якщо програм у Вас встановлено дуже багато. Ну і понеслося, Ви раз перевірили, два перевірили наявність оновлень, втретє забули, а потім і взагалі набридло щоразу дивитися, вийшло там оновлення чи ні. І тут раз ..

Згадуємо, для чого у нас існують оновлення? А для того, щоб не просто мати новий (і покращений старий) функціонал в оних програмах, але ще й латає діри, які нерідко призводять до різних неприємностей, починаючи від глюків програми / системи і закінчуючи проблемами з безпекою (я, наприклад, дуже НЕ люблю «втрачати» пароль, скажімо, від пошти з вини дірок в софті). Тому-то розробники Linux і створили репозиторії, за допомогою яких можна швидко і зручно відстежувати поновлення тих чи інших пакетів (та й взагалі оновлення всієї системи в цілому), встановлювати нові та оновлені і все таке інше. До речі, чому для Windows оним ще не спантеличені, рішуче незрозуміло (хоча там частково рятують програми для оновлення програм, нехай це і не зовсім те).

Про пакетах і менеджерах пакетів в Linux. Що це і навіщо потрібно

До слова, трохи вище я спеціально виділив три пункти, щоб, так би мовити, розбити зміст на кілька частин. Про рeпозіторіі пакетів ми поговорили і тепер переходимо до наступного шматку оповіді, а саме, поговоримо про те, що мається на увазі під поняттям пакети в Linux.

Під пакетами в Linux мається на увазі програмне забезпечення (ПЗ), яке Ви хочете встановити на комп’ютер. Скажімо, наприклад, в Windows софт встановлюється за допомогою майстра (програми) установки — setup.exe або install.exe. Ви запускаєте цей міфічний екзешний файл, і процес установки починається чи не миттєво після вибору шляху і дрібних побічних налаштувань.

Репозиторії, пакети, менеджери пакетів і залежності в Linux

Встановлення ж програм в Linux дещо відрізняється тим, що тут використовуються два основних способи інсталяції: за допомогою пакетів або з вихідних кодів (установка пакетів це окрема розмова, і зараз ми цього питання торкатися не будемо). Пакет містить зібрану програму, інформацію про те, які потрібно зробити дії для її встановлення, інформацію про залежності, а також, можливо, багато інших даних (залежно від виду пакета). Причому за установку (видалення, оновлення) відповідає така штука, як менеджер пакетів.

Зазвичай менеджер пакетів є серцем дистрибутива, забезпечуючи повний контроль цілісності і працездатності всієї системи, і він же забезпечує користувачеві інтерфейс для автоматизованого отримання пакету, його залежностей і його установку. Пакети, як уже говорилося, збираються в репозиторії, тобто все це можна скласти в один ланцюжок: користувач запитує установку пакета — менеджер пакетів відстежує залежності — він же отримує необхідні пакети з репозиторію (ів) — і він же встановлює залежності і необхідний пакет. Практично кожен дистрибутив Linux має свої репозиторії, часто несумісні з іншими збірками. Менеджер ж пакетів — консольна утиліта, проте зазвичай для неї існують численні графічні оболонки, які легко відшукати в кожному дистрибутиві, ввівши в пошук «Установка / видалення програм».

Пакетні менеджери бувають різні. Для управління пакетами в різних дистрибутивах використовуються різні програми. Загалом-то, їх не так вже й мало, а тому виділимо «основні», які «вміють» дозволяти залежності. Фраза «вміють вирішувати залежності» означає наступне — якщо при установці пакету буде виявлено, що для коректної його установки потрібні додаткові пакети, то менеджер пакетів встановить їх сам, тобто Вам не доведеться шукати додаткові пакети в репозиторіях. Ті менеджери пакетів, які не володіють такою функцією (умінням вирішувати залежності), ми розглядати не будемо, бо оні тільки повідомлять Вам, що пакет встановити неможливо і виведуть весь список файлів (саме файлів, а не пакетів), які потрібні для установки даного пакета . А вже який файл в якому пакеті знаходиться, Ви будете здогадуватися і шукати самостійно.

Ось невеликий список:

Yum (Yellow Dog Update Modified) — потужний менеджер пакетів, заснований на rpm (простий МП, не вміє вирішувати залежності), що працює в текстовому режимі і вміє вирішувати залежності, а також вміє підтримувати репозиторії (джерела пакетів). Використовується в RedHat Linux, а так само в Fedora, SuSe і деяких інших;

APT [Advanced Package Tool] створена для дистрибутивів Linux, заснованих на Debian, використовується в Ubuntu (і клонах), Аlt Linux та ін. Потужний менеджер пакетів, що працює в текстовому режимі. Вміє вирішувати залежності і підтримує репозиторії (джерела пакетів);

Portage package management system має багато різновидів, прикладом може служити дистрибутив Gentoo. Як варіант пакетного менеджера можна навести emerge.

До слова, пакетні менеджери не просто шукають бажані Вами програми з описів, але перш нам потрібно ввести ще один не раз вже згаданий термін і пояснити його.

Про залежностях в Linux. Що це і навіщо потрібно

Наприклад, Ви захотіли встановити програму і натиснули кнопку «Встановити», а вона питає Вас про якісь міфічні і незрозумілі залежності. Так давайте розберемося — а що ж це таке?

Часто компоненти, що використовуються різними програмами, виділяють в окремі пакети і позначають, що для роботи ПЗ, наданого пакетом A, необхідно встановити пакет Б. У такому випадку говорять, що пакет A залежить від пакета Б або що між пакетами A і Б існує залежність ( зазвичай в ролі залежностей виступають будь-які бібліотеки, без яких програма не запускатися, оскільки використовує функції цієї бібліотеки). От саме відстеженням залежностей між такими пакетами і займається вже неодноразово згаданий менеджер пакетів. Говорячи просто, пакетний менеджер це така програма, яка веде базу даних встановлених додатків і їх версій, і завжди знає, які файли куди встановлені, щоб можна було поставити нові програми, видалити старі або оновити всю систему цілком без перевстановлення та вичищення сміття залишилися файлів.

Репозиторії, пакети, менеджери пакетів і залежності в Linux

Вся ця величезна купа пакетів з їх купою залежностей один від одного, керована пакетним менеджером, якраз і становить Ваш дистрибутив Linux. Але це не просто купа сміття, а впорядкована система, яка називається — та-дам! — Репозиторії пакетів програм. Коло замкнулося — ми повернулися до першого поняття — що таке репозиторій Репозиторії, пакети, менеджери пакетів і залежності в Linux

Кілька слів про нюанси

Наостанок все-таки хочеться сказати, що який би Linux не була стійкою, стабільною і неубіваемий, все ж користувач повинен дотримуватися певної обережності. Наприклад:

Не треба спокушати долю і ставити програми в Linux в обхід менеджера пакетів, простий компіляцією. Працювати вони будуть, але пакетний менеджер нічого про них не буде знати, через що при оновленні системи або програм Ви ризикуєте отримати більше проблем на свою голову, чим уявляєте. Встановлюйте програми лише у вигляді пакетів.

Не треба підключати ті репозиторії, про які маєте зовсім туманне уявлення. Наприклад, не треба підключати репозиторії зі словами testing, debug і тому подібними термінами, бо ці репозиторії в першу чергу призначені для самих розробників дистрибутивів і далеко не завжди стабільні.

Не приєднуйте поспіль всі доступні репозиторії, це теж може зіграти з Вами злий жарт. Підключайте тільки найнеобхідніші, не треба скупитися Репозиторії, пакети, менеджери пакетів і залежності в Linux

Наприклад, при установці операційної системи Fedora за замовчуванням відразу підключені два репозиторія:

Fedora (пакети, які підходять на будь-яку комбінацію з компакт-дисків або DVD-дисків)

Updates (оновлені пакети, новіше, ніж репозиторій (сховище) Fedora)

Для нормальної роботи потрібно підключити додатковий репозиторій rpmfusion (без нього Вам дійсно не обійтися), що дасть доступ до програм, які не могли бути включені в дистрибутив через ліцензійних обмежень (додатки, які потрібні для відтворення мультімедіафайлов, таких як mp3, dvd і т.д .; драйвера — до них відносяться пропрієтарні драйвера для ATI і NVIDIA; гри: Bub’s Brothers, Secret Maryo Chronicles, UFO: Alien Invasion, Worms of Prey, xrick, GLtron і багато, багато інших; емулятори: емулятор Commodore 64, а також Commodore 8 bit, емулятор Amiga, Nestopia, ZSNES і багато інших). Щоб підключити цей репозиторій, достатньо в командному рядку (терміналі) від суперкористувача (root) ввести команди:

$ Sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm

$ Sudo rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

Зверніть увагу, що репозиторій rpmfusion розділяється на дві частини: free і nonfree. Перший містить чисто вільні програми в розумінні FSF, поширювані під GPL і сумісними з нею ліцензіями. Вміст другого, всупереч назві, — також програми по перевазі вільні, але потрапляють під горезвісні патентні обмеження деяких держав (наприклад, аудіо- і видеокодеки).

Те ж саме стосується і менеджера пакетів в Fedora. Для нормальної та зручної роботи менеджера пакетів (yum) в Fedora рекомендується підключити додатковий плагін fastestmirror. Цей плагін дуже важливий: він визначає не просто найближчим дзеркало, як це роблять аналогічні утиліти з інших систем управління пакетами, а встановлює саме найшвидше дзеркало в даний момент — за часом відгуку.

$ Sudo yum install yum-plugin-fastestmirror

У двох словах якось так Репозиторії, пакети, менеджери пакетів і залежності в Linux

Післямова

Я розумію, що без практики сприйняти все це з нальоту досить складно, але робити нічого — це самі початкові і базові теоретичні відомості, з якими кожен користувач повинен бути знайомий хоча б якось, щоб мати уявлення, що до чого і чому, а не сліпо тикатися в кнопки і читати незнайомі терміни.

В наступних статтях ми розглянемо, що саме з себе представляє установка пакетів в Linux, як у цій операционке влаштована файлова система, що мається на увазі під користувачем (і хто такий надкористувач, він же root), а так само поговоримо про програми та кой про що інше . Залишайтеся з нами.

Як і завжди, якщо є якісь питання, доповнення і все таке інше, то буду радий бачити їх у коментарях до цього матеріалу.

P.S. За існування даної статті спасибі члену команди Pantera