Відновлення дерева Portage

Дерево Portage розміщується в /usr/portage і містить величезну бібліотеку інструкцій для встановлення (так званих скриптів ebuild) різних пакетів. Воно також містить profile і package.mask - інформацію, життєво необхідну для відновлення вашої системи. Дуже важливо підтримувати дерево в належному виді, бажано обновляти його. Для поновлення дерева Portage використовуйте наступну команду:

Лістинг 3.1

emerge rsync

Цей спосіб використання emerge для відновлення пакетів змінює локальне дерево системи Portage. Для більшої інформації дивитеся розділ SYNC налаштування в Portage у главі Налаштування Portage.

Встановлення пакетів

Процес компіляції й встановлення пакета в ?Portage називається приєднанням (merge). Portage компілює пакети і тимчасово встановлює їх у каталог "образа" (звичайно ${PORTAGE_TMPDIR}/portage/${PF}/image) де робить запис файлів, що будуть встановлені. Після чого ці файли і переносяться з "образа" на реальну файлову систему.

Команда emerge - це зовнішній інтерфейс системи Portage. Саме через цю команду, шляхом її запуску з різними ключами здійсняться встановлення і видалення пакетів.

Для встановки свіжої, незамаскованої, версії якого-небудь пакета просто вкажіть його назву, наприклад так:

Лістинг 3.2

emerge galeon

Команда скомпілює й встановить будь-які необхідні залежності (приймаючи в увагу параметри налаштувань USE), а також скомпілює й встановить нову, незамасковану версію galeon. Galeon також може бути заданий повним ім'ям з використанням назви категорії: net-www/galeon.

Команда emerge також приймає посилання на самі ?ebuild-файли. Це дозволяє користувачам встановлювати більш старі чи пакети пакети сторонніх розробників. Простий приклад:

Лістинг 3.3

emerge /usr/portage/net-www/galeon/galeon-1.2.0-r3.ebuild

На додаток до назви чи пакета ebuild-файлу, що буде встановлений, emerge підтримує трохи дуже корисних параметрів командного рядка. З усіх цих параметрів -pretend, напевно, найбільш корисний. При використанні цього параметра встановлення виконуватися не буде. Замість цього Portage просто відобразить список пакетів, що повинні бути встановлені чи обновлені при виконанні цієї команди. У наступному прикладі показано, що повинно бути встановлене чи обновлене на прикладі інсталяції останньої версії пакета kdevelop:

Лістинг 3.4

root@kodiak blocke # emerge --pretend kdevelop 
These are the packages that I would merge, in order.
Calculating dependencies ...done!
[ebuild N ] kde-base/kdelibs-2.2.2-r4 to /
[ebuild N ] dev-util/kdbg-1.2.2 to /
[ebuild U ] app-text/psutils-1.17 to /
[ebuild U ] app-text/a2ps-4.13b-r3 to /
[ebuild U ] app-text/jadetex-2.20 to /
[ebuild N ] app-text/sgmltools-lite-3.0.3-r2 to /
[ebuild N ] kde-base/kdoc-2.2.2-r1 to /
[ebuild N ] net-www/htdig-3.1.5-r2 to /
[ebuild N ] app-text/enscript-1.6.3-r1 to /
[ebuild N ] kde-base/kdebase-2.2.2-r2 to /
[ebuild N ] app-doc/qt-docs-2.3.1 to /
[ebuild N ] dev-util/kdevelop-2.0.2 to /

У вищезгаданій роздруківці пакети, відзначені N - це ті, що ще не були встановлені і будуть встановлені при виконанні даної команди. Буква U свідчить про те, що більш стара версія цього пакети була встановлена і буде обновлена до нової.

Інші аргументи командного рядка:

-fetchonly : Просто завантажить пакет і всі необхідні залежності для компіляції й установки.

-іemptytree : Дана опція змусить Portage прикинутись ніби жодна з залежностей пакета чи пакетів не встановлена. Це корисно використовувати з -іpretend, що відобразить закінчене дерево залежностей для будь-якого обраного пакета. Усі залежності, за винятком glibc, будуть відображені.

-nodeps : Portage встановить тільки зазначені пакети, ігноруючи їхні залежності. Якщо у вас не встановлені відповідні залежності, компіляція може потерпіти крах.

-onlydeps : Встановить тільки залежності для зазначеного пакета. Сам пакет не буде встановлений.

-noreplace : Пропустить встанвлення зазначених пакетів, якщо вони вже встановлені.

-usepkg : Замість компіляції зазначених пакетів Portage спробує використовувати бінарні tbz2 пакети з зазначеного місця розташування. Місце розташування можна вказати змінною середовища оболонки PKGDIR.

-debug : Включає висновок повідомлень налагодження, що корисно для розроблювачів, котрі намагаються простежити помилки в bash синтаксисі ebuild-файлів.

-autoclean : Змушує emerge видаляти визначені пакетні тимчасові каталоги перед компіляцією нової програми. Portage робить це за замовчуванням, так що опція корисна тільки для розроблювачів, що змінили налаштування за замовчуванням.

-verbose : Дозволяє запустити emerge в інформаційному режимі. У даний час відображаються тільки помилки GNU info, що можуть безпечно ігноруватися користувачами.

Видалення пакетів

Процес "видалення" знищить з файлової системи всі зв'язані файли встановленого пакета. Програмне забезпечення пакета буде неможливо використовувати, поки він заново не буде встановлений.

Назва пакета, що видаляється, слідує після аргументу unmerge команди emerge. Наступний приклад видалить всі встановлені версії пакета ltrace:

Лістинг 3.5

emerge unmerge ltrace

чи

emerge unmerge dev-util/ltrace

Portage також дозволяє вказати визначені версії пакетів для видалення. Список визначень наступний, = (точна версія), < (більш старша версія), > (більш нова версія), <= (більш старша, або поточна), і >= (більш нова, або поточна). Наступний приклад видалить програму ltrace, версії 0.3.15 і старше:

Лістинг 3.6

emerge unmerge \<=dev-utils/ltrace-0.3.15

При вказівці пакета важливо заекранувати символи > і <, так, щоб ваша оболонка їх не інтерпретувала. Також потрібно вказати категорію пакета, як це показано в прикладі. За іншими прикладами звертайтеся до emerge -іhelp.

Увага: Видалення пакетів небезпечне. Якщо ви видалите який-небудь важливий пакет ваша система, скоріше всього, перестане функціонувати, а видалення бібліотек може невдало вплинути на роботу програмного забезпечення. Portage не попередить вас якщо ви видалите системний чи пакет яку-небудь залежність для інших пакетів.

Якщо пакет, що видаляється, встановлений, emerge покаже яка саме його версія підлягає видаленню і скільки часу до цього залишилося. У плині даного періоду користувач може скасувати видалення натиснувши комбінацію клавіш Control-C.

Як тільки почнеться процес видалення ви побачите довгий список імен файлів приналежних вилученому пакету. У деяких їхніх цих рядків ліворуч від імені файлу доданий прапорець. Прапорці !mtime, !empty і cfgpro визначають причини по який дані файли не були фізично вилучені при видаленні пакета. Файли зі списку не мають прапорців, успішно вилучені з файлової системи.

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

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

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

Системне поновлення

?Portage дозволяє обновляти встановлені пакети всього однією командою. Важлива особливість для успішного функціонування системи, це процес оновлення "основних" системних пакетів до версії, що рекомендується розробниками дистрибутиву Gentoo. Системне оновлення не торкається рядових пакетів, воно працює тільки з тими пакетами, що визначені в конфігураційному файлі Portage як необхідні для функціонування і підтримки системи в робочому виді.

Для запуску системного оновлення, вкажіть:

Лістинг 3.7

emerge --update system

Portage скомпілює й встановить оновлення в залежності від того які версії пакетів у Вас вже встановлені, а так само від поточної конфігурації Portage. Користувачі можуть використовувати аргумент -pretend у прикладі вище для одержання списку пакетів, що будуть встановлені або оновлені даною командою.

Примітка: Ви повинні були звернули увагу, що один з перших кроків - це запуск emerge system для установки базових (чи "основних") пакетів. emerge -update system оновить основні пакети до версій, що рекомендуються.

Глобальне поновлення

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

При глобальному оновленні, Portage перевіряє package.mask на наявність блокованих пакетів, залежностей (включаючи діапазон версій) а також глобальний профіль на пакети конче необхідні при поновленні. Пакет поновиться тільки при наявності нової версії, запису в глобальному профілі чи записі залежності всі в тім глобальному профілі. До того ж пакет чи його визначена версія не повинні бути блоковані в конфігураційному файлі package.mask.

При розгляді пакетів для оновлення Portage намагається оновити до самої останньої доступної версії всі пакети зазначені в глобальному конфігураційному файлі. Portage також розгляне залежності кожного пакета відзначеного в глобальній конфігурації і спробує оновити їх до нові версії, якщо, звичайно, ці версії доступні і не блоковані в package.mask. І, звичайно, будуть розглянуті СЛОТИ, мова про які йшла в попередньому розділі.

Користувачі знайомі з іншими дистрибутивами та пакетними менеджерами крім Portage, можуть бути здивовані тим, чому Portage просто не обновляє пакети, ґрунтуючись винятково на номерах версій (як це було колись у Gentoo 1.0). Багато з пакетів, включених до репозитарію Gentoo, мають багато доступних версій. Стара чи більш нова версія пакета може бути несумісна з програмним забезпеченням, що разом з нею працює. Наосліп відновлення бібліотек і інструментальних засобів без обліку потреб інших пакетів може швидко привести до серйозних проблем. Portage намагається уникнути цього і розглядає залежності всіх пакетів, ґрунтуючись на індивідуальних ?ebuild скриптах.

Основа глобального відновлення Portage - це конфігураційний файл world. У відмінності від системного конфігураційного файлу який редагується тільки розроблювачами і як правило ніколи не зачіпається звичайними користувачами, глобальний конфігураційний файл генерується через якийсь час, завдяки установкам програмного забезпечення виробленим користувачем. Глобальний конфігураційний файл дуже схожий на "список обраного". Усі пакети встановлені користувачем вручну за допомогою використання програми emerge записуються у файл world, розташованому /var/cache/edb/world. Portage припускає, що раз ви установили який-небудь пакет то вам так само необхідно його обновляти.

Глобальний файл world, що складається з категорії й імені файлу в один рядок, являє собою наступне:

Лістинг 3.8

net-im/gaim
net-www/skipstone
net-www/galeon
app-editors/vim
app-text/ispell
net-mail/evolution
dev-util/ltrace
sys-apps/xfsprogs
=net-www/mozilla-0.9.8-r3
sys-apps/attr
sys-apps/dmapi
sys-kernel/linux-sources
sys-apps/acl
app-office/gnucash
app-cdr/xcdroast

Майже всі рядки в прикладі були додані автоматично при установці пакетів користувачем. Рядки ці будуть оновлені при наявності більш нових версій.

Примітка: Щоб заощадити час і бути впевненим у тім, що потрібні вам пакети завжди будуть обновлятися, відредагуйте world файл вручну додавши дані про пакети, що вам будуть потрібні. У недавно встановленого Gentoo з Portage уже є глобальний конфігураційний файл створений у процесі інсталяції.

Ви напевно звернули увагу на рядок пакета mozilla (=net-www/mozilla-0.9.8-r3). До назви файлу був доданий вручну знак "=", що визначає точну версію. Списки визначень (які вже були розглянуті в главі Видалення пакетів даного керівництва) можуть використовуватися, щоб змусити Portage розглядати тільки задані діапазони версій при відновленні пакетів. У даному рядку знак "=" поставлений для того, щоб Portage розглядав mozilla-0.9.8-r3 єдиною доступною версією і ніколи не торкався її при глобальному відновленні пакетів.

Глобальне відновлення здійснюється командою:

Лістинг 3.9

emerge --update world

Після чого Portage спробує обновити всі пакети згадані в конфігураційному файлі world і якщо необхідно, обновить будь-які залежності. Залежності обновляються до самої останньої версії, ґрунтуючись на потребі обновлюваного пакета. Пакети не перераховані в конфігураційному файлі world і не є залежностями інших пакетів не будуть поновлені.

Увага: Portage не буде переписувати файли в директоріях позначених захистом конфігураційних файлів. Ви повинні будите вручну виправити розходження між вашими поточними файлами конфігурації і нових версій спеціально збереженими для вас Portage. Якщо ви не обновите ваші робочі конфігураціонні файли, то не виключене, що деяке встановлене програмне забезпечення може перестати функціонувати. Для більшої інформації дивитеся Захист конфігураційних файлів у розділі Настроювання Portage чи скористайтеся командою

emerge --help config 

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

Примітка: Глобальне відновлення також автоматично виконує і системне відновлення. При цьому версії системних пакетів не можуть бути заморожені у файлі world, оскільки установки використовуваного profile мають більш високий пріоритет.

Зацікавлений побічний ефект глобального відновлення може бути використаний користувачами для перекомпіляції всього програмного забезпечення встановленого в системі. Тому що глобальне відновлення торкається всіх пакетів і їхніх залежностей згадані у файлі world, використання аргументу --emptytree дозволить примусово перекомпілювати пакети і їхні залежності крім glibc. Це може бути корисно для користувачів бажаючих змінити опції компілятора на все програмне забезпечення яке вони використовують без перекомпіляції кожного пакета вручну (глобальні налаштування USE для програмного забезпечення краще міняти з допомогою опції --newuse). Просто запишіть у файл world усі звичайно використовуване вами програмне забезпечення і запустіть:

Лістинг 3.10

emerge --update world --emptytree

До цієї команди ви можете додати аргумент --pretend, щоб одержати список пакетів, що були б перекомпільовані в результаті її виконання.

Чищення системи

?Portage дозволяє встановити кілька версій пакетів одна поруч з іншої. Чим успішно можна скористатися для ряду програмного забезпечення з дерева Portage (наприклад для зворотної сумісності, оскільки старші версії додатків можуть бути несумісні з більш новими версіями інших пакетів).

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

Щоб боротися з цим, Portage підтримує спосіб видалення всіх старих версій з користувальницької системи. Це можливо завдяки опції clean і використовується наступним чином:

Лістинг 3.11

emerge clean

Після чого emerge покаже список чи версій ревізій, що будуть вилучений список версій, що залишаться і дасть користувачу час для скасування процесу видалення натисканням Control-C. У нормальних умовах під час видалення на екран буде виводитися список файлів, що були знищені, або за якихось причин збережені.

За замовчуванням Portage розглядає опцію чищення на усіх встановлених пакетах (world. Ви можете звузити область чищення, використовуючи з опціями world, system, вказуючи назву пакетів і використовуючи діапазони версій які були розглянуті в розділі про видалення пакетів у даній главі.

Перед видаленням визначеної версій пакета, Portage ретельно перевіряє різні конфігураційні файли, залежності встановлених пакетів, і СЛОТИ. Одержавши потрібні дані Portage безпечно видалить стару версію пакета не порушивши систему і зберігши її функціональність.

Знищення пакетів

?Portage також має опцію prune. Знищення - це більш небезпечна форма чищення. Вона видаляє всі версії всіх пакетів, крім останньої встановленої. Вона так само не виконує багато з перевірок clean, у зв'язку з чим, у вашій системі можуть бути вилучені необхідні залежності. Користувачі цією опцією можуть легко порушити працездатність системи і тому використовувати її варто тільки в деяких особливих випадках.

Опція prune схожа з попередньою опцією і використовується майже таксамо:

Лістинг 3.12

emerge prune

Пошук у дереві Portage

Такі дерева, як ?Portage, що формує основу Gentoo Linux, найчастіше можуть бути дуже великими. Спеціально для цього в emerge є функція пошуку за взірцем, що є формальним виразом у виді рядка в лапках. Формальні вирази - річ досить складна, тому якщо ви зацікавилися цією темою, рекомендую знайти гарну книгу по ній.

Найпростіші випадки не вимагають знання формальних виразів. Наступна команда зробить пошук пакета, що містить "gcc" у своїй назві:

Лістинг 3.13

emerge search gcc

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

Одержання довідки

Для одержання більш докладної інформації з опцій і функцій emerge виконаєте команду:

Лістинг 3.14

emerge --help

Корисні утиліти

Для полегшення життя користувачам Gentoo, було створено кілька утиліт, що знаходяться в каталозі app-admin/gentoolkit дерева Portage.

?etc-update : сценарій оболонки для відновлення /etc файлів (може бути небезпечно при неправильному використанні)

?qpkg : утиліта для запитів до бази даних пакетів

epm : інша утиліта для запитів до бази даних пакетів, із синтаксисом RPM.