Використання APT. Команди apt та apt-get. Apt-Get. Управління пакетами в Ubuntu

APT (скорочення від Advanced Packaging Tool) – це набір утиліт для встановлення, видалення, оновлення, пошуку пакетів у Linux, а також для керування репозиторіями. APT ще називають пакетним менеджером.

APT використовує репозиторії пакетів. Список репозиторіїв для APT зберігається у файлі /etc/apt/sources.list, а також у директорії /etc/apt/sources.list.d/.

APT використовується в дистрибутивах, заснованих на Dedian та Ubuntu.

Для керування APT існують різні утиліти, Але найпопулярніші їх це утиліти командного рядка apt-get і apt.

У цій статті ми розглянемо, як користуватися командою apt, а також дізнаємося чим відрізняється від apt від apt-get.

Чим відрізняються apt та apt-get

Коротко відповімо на дуже популярне питання, а в чому різниця між командами apt та apt-get?

apt це утиліта, яка з'явилася як альтернатива apt-get. Вона виконує практично ті самі функції, що й apt-get, але з нею простіше і зрозуміліше працювати.

Наприклад, усі команди apt мають простий синтаксис: apt назва_команди. А у apt-get є додаткові команди, наприклад, apt-cache. Таким чином, при використанні apt, користувач не повинен запам'ятовувати додаткові набори команд.

Крім спрощення роботи з командами, apt наочно виводить інформацію, начебто дрібниці, але працювати зручніше. Наприклад, apt вміє показувати прогрес бар, а під час виконання apt updateможна побачити, скільки пакетів можна оновити.

Утиліта apt-get більш функціональна, ніж apt. Але для рядового користувача apt буде більш ніж достатньо.

Команда apt

Синтаксис команди apt наступний:

Sudo apt

Оновити список пакетів

sudo apt update

APT має список репозиторіїв, з яких відбувається встановлення пакетів. Список зберігається у текстовому файлі /etc/apt/sources.list, а також у директорії /etc/apt/sources.list.d/. За виконання команди apt update, APT проходить за списком репозиторіїв і з кожного репозиторію у списку отримує інформацію про пакети, що у репозиторії. Вся ця інформація зберігається у системі.

Якщо виходить нова версія якогось пакета, то APT не дізнається про це, доки не буде виконана команда apt update. Тому, якщо встановити даний пакет(не виконавши попередньо apt update), буде встановлена ​​та версія пакета, інформація про яку зберігається в системі в даний момент.

Чи потрібно виконувати apt update перед встановленням кожного пакета?

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

Оновити встановлені пакети

Для оновлення пакетів, встановлених у системі, використовується команда:

Sudo apt upgrade

Ця команда лише оновлює пакети до нових версій, але ніколи не видаляє та не встановлює інші пакети.

Є ще одна команда для оновлення пакетів:

Sudo apt full-upgrade

Ця команда виконує оновлення пакетів, а також видаляє або встановлює нові пакети, якщо це потрібно для вирішення залежностей.

Встановити пакет

Щоб встановити пакет, використовується команда:

Sudo apt install

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

Для встановлення декількох пакетів їх імена записуються через пропуск:

Sudo apt install

Встановити певну версію пакету

Щоб встановити певну версію пакета, потрібно після назви пакета, через знак рівності, вказати необхідну версію:

Sudo apt install =

Видалити пакет

Для видалення встановленого пакета використовується команда:

Sudo apt remove

Видалити пакет та його конфігураційні файли

sudo apt purge

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

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

Якщо ви видалили пакет командою apt remove, то ви можете виконати apt purgeдля цього вже віддаленого пакета, щоб "додалити" його конфігураційні файли.

Видалити пакети, що не використовуються.

sudo apt autoremove

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

Список пакетів

Команда apt list використовується для виведення списку пакетів за якимось критерієм.

Вивести список встановлених у системі пакетів:

Apt list --installed

Вивести список пакетів, що потребують оновлення (у яких вийшла нова версія):

Apt list --upgradable

Вивести список усіх пакетів доступних для вашої системи:

Apt list --all-versions

Пошук пакетів

apt search

Ця команда виконує пошук зазначеного словау назві пакетів та в описі пакетів. Підтримуються регулярні вирази.

Можна шукати лише за назвами пакетів для цього використовується опція --names-only :

Apt search --names-only

Пошук пакету з використанням регулярних виразів:

Apt search --names-only "^python"

Інформація про пакет

apt show

Виводить інформацію про пакет. Відображається версія, розмір, опис, залежність та інша інформація.

Редагування списку репозиторіїв

sudo apt edit-sources

Відкриває файл /etc/apt/sources.listу текстовому редакторі для редагування, після збереження змін та закриття редактора, виконує перевірку файлу щодо помилок. У разі наявності помилок виводить пропозицію на повторне редагування файлу, щоб виправити помилки.

Таблиця аналогів команд apt та apt-get

Команда
apt
Аналог команди
apt-get
Опис
apt installapt-get installВстановити пакет
apt removeapt-get removeВидалити пакет
apt purgeapt-get purgeВидалити пакет та конфігураційні файли
apt autoremoveapt-get autoremoveВидалити пакети, що не використовуються.
apt updateapt-get updateОновити список пакетів
apt upgradeapt-get upgradeОновити пакети
apt full-upgradeapt-get dist-upgradeОновити пакети (видалити та встановити нові, якщо потрібно)
apt listЗразковий аналог:
dpkg-query --list
Список пакетів
apt searchapt-cache searchПошук пакету
apt showapt-cache showІнформація про пакет

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

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

Найпростіший спосіб видалити пакет Ubuntu, це скористаються однією з графічних утиліт, що поставляються спеціально для цього, наприклад, Synaptic або Центр додатків Ubuntu. Насправді це робиться в пару кліків. Спочатку розглянемо порядок дій у Центрі програм Ubuntu.

Запустити центр додатків ви можете із панелі значків Unity:

Список усіх встановлених пакетів знаходиться на вкладці Встановлено,тут програми розсортовані за категоріями:

Щоб видалити пакет Ubuntu, достатньо натиснути на нього лівою кнопкою миші, і коли з'являтися доступні дії натиснути кнопку видалити:

Для завершення видалення потрібно буде ввести пароль.

Пакет видалено, але не зовсім так, як нам хотілося б. Але про це згодом.

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

sudo apt install synaptic

Запустити програму можна через термінал, виконавши команду:

Переглянути встановлені пакети ви можете вибравши вкладку стан, а потім вибравши Встановлені:

Видалити deb ubuntu ви можете просто натиснувши правою кнопкоюмиші та в контекстному меню на потрібному пакеті та вибравши відзначити для видаленняабо відзначити для повного видалення:

Програма покаже, які пакети будуть видалені, це ті пакети, які залежать від нашого пакета:

Тепер, щоб завершити видалення, залишилося натиснути кнопку Застосувати:

Тепер програма покаже, які пакети будуть видалені. І піде процес видалення:

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

Як видалити пакет Ubuntu у терміналі

У нових версіях Ubuntuдля керування пакетами, а також видалення можна використовувати новий менеджерпакетів – apt. Команда видалення виглядає так:

sudo apt remove имя_пакета

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

Якщо ви хочете використовувати apt-get, щоб видалити deb ubuntu, то порядок дій трохи інший. Для звичайного видаленняпакету виконайте:

sudo apt-get remove имя_пакета

Щоб видалити пакет разом з конфігураційними файлами, виконайте:

sudo apt-get purge имя_пакета

А щоб також видалити залежності, встановлені разом з пакетом, потрібно після однієї з попередніх команд виконати:

sudo apt-get autoremove

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

Ну з основами розібралися, тепер перейдемо до складніших ситуацій. Що якщо ви встановлювали програму з файлу deb і тепер не знаєте точно, як називається її пакет, щоб видалити?

Це дуже просто дізнатися, наприклад по виконуваному файлу, допустимо виконуваний файлпрограми TimeShift знаходиться за адресою /usr/bin/timeshift, тепер дізнаємося про її пакет:

sudo dpkg -S /usr/bin/timeshift

timeshift: /usr/bin/timeshift

Як бачите, пакет так і називається - timeshift. Тепер можна видалити програму Ubuntuодним з вище описаних способів.

Дуже часто ми встановлюємо недостатнє нам програмне забезпечення з PPA, але не всі ці пакети потрібні нам протягом тривалого часу, а при оновленні системи можуть навіть викликати помилки. То як же видалити всі пакети встановлені з PPA? Для цього є спеціальна утиліта: ppa-purge.

Якщо її ще не встановлено, встановлюємо командою:

sudo apt install ppa-purge

Тепер, щоб видалити всі пакети встановлені з певного ppa, використовуйте:

sudo ppa-purge -i ppa:ppaowner/ppaname

ppa:ppaowner/ppaname - зазвичай у такому форматі записуються всі PPA. Протокол:власник/ім'я.

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

Такою командою можна одним махом видалити пакети ubuntu, встановлені з ppa:

find /etc/apt/sources.list.d -type f-name "*.list" -print0 | \
while read -d $"\0" file; do awk -F/ "/deb / && /ppa\.launchpad\.net/ (print "sudo ppa-purge ppa:"$4"/"$5)" "$file"; done

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

Але все-таки метод є, як правило, розробники у файлі сценаріїв makefile, крім мети install реалізують мету uninstall, яка дозволяє виконати зворотне дію.

Google, неясно, як я знаходжу нові програми для встановлення (з Інтернету) за допомогою apt-get (що напрочуд потужне і просте з іншого дистрибутива Linux).

Я використовую Ubuntu Server 8.04 LTS (успадкована система, яка використовується для деякої випадкової роботи), тому немає графічного інтерфейсу.

У когось є швидка порадатут?

Я завжди використовую package.ubuntu.com

Також ви можете використовувати apt-cache search для apt-cache search у командному рядку. Або ви можете використовувати диспетчер пакетів GUI (Ubuntu Software Center/Synaptic) для пошуку програмного забезпечення.

Якщо ви шукаєте налаштування nvidia.

Apt-cache search nvidia settings

Nvidia-settings - Werkzeug für die Konfiguration des NVIDIA-Grafiktreibers nvidia-settings-updates - Tool of configuring the NVIDIA graphics driver

Ви бачите 2 пакети nvidia-settings та nvidia-settings-updates .

Щоб знайти пов'язаний двійковий файл із пакетом nvidia-settings .

Dpkg-L nvidia-settings | grep bin

/usr/bin /usr/lib/nvidia-settings/bin /usr/lib/nvidia-settings/bin/nvidia-settings

nvidia-settings – це двійкове ім'я для запуску програми.

З двійковими файлами, зокрема, є програма, яка автоматично запускається, якщо ви запустите команду, яка не встановлена. Наприклад,

$ bonnie++ The program "bonnie++" є currently no installed. Ви можете налаштувати цей тип: sudo apt-get install bonnie++

Крім цього, існують пошукові запити: пошук apt-cache search або aptitude search який може бути кращим, якщо ви хочете дійсно використовувати фільтри.

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

просто введіть dpkg -L У термінал він відобразить всі файли, встановлені цим пакетом, тоді ви зможете розпізнати імена двійкових програм, подивившись їх місцезнаходження. Зазвичай програми встановлюються в каталозі /usr/bin чи /sbin.

Давайте подивимося приклад:

Anwar@edubuntu-lenovo:~$dpkg -L gnome-screenshot /. /usr /usr/bin /usr/bin/gnome-screenshot /usr/share /usr/share/GConf /usr/share/GConf/gsettings /usr/share/GConf/gsettings/gnome-screenshot.convert /usr/share /applications /usr/share/applications/gnome-screenshot.desktop /usr/share/man /usr/share/man/man1 /usr/share/man/man1/gnome-screenshot.1.gz /usr/share/gnome -screenshot /usr/share/gnome-screenshot/gnome-screenshot.ui /usr/share/glib-2.0 /usr/share/glib-2.0/schemas /usr/share/glib-2.0/schemas/org.gnome.gnome -screenshot.gschema.xml /usr/share/doc /usr/share/doc/gnome-screenshot /usr/share/doc/gnome-screenshot/copyright /usr/share/doc/gnome-screenshot/NEWS.gz /usr /share/doc/gnome-screenshot/changelog.Debian.gz

Зверніть увагу, що ім'я gnome-screenshot package – gnome-screenshot .

Ти питав

Чи є стандартний спосіб дізнатися Для бажаної програми?

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

Наприклад, якщо я gnome-documents, коли такий пакет не встановлений, термінал скаже наступне:

Anwar@edubuntu-lenovo:~$ gnome-documents У програмі "gnome-documents" не вказано. Ви можете install it by typing: sudo apt-get install gnome-documents

Але в цьому випадку я маю хоча б знати назву програми

Ви можете спробувати програму «aptitude» з командного рядка. Це графічний менеджер пакетів. Не забудьте додати sudo до програми для будь-яких реальних установок. "sudo aptitude". Ви також можете використовувати aptitude так само, як apt-get; "sudo aptitude install". Я віддаю перевагу apt-get для одиночних пакетів, для яких знаю імена.

Крім того, ви просто на командному рядку? Якщо у вас є робочий стіл, ви можете використовувати System -> Preferences - Synaptic або Ubuntu Software Center. Вони працюють майже однаково, але вони мають більш простий пакетний пошук.

Ви можете отримати (довгий) список пакетів, набравши apt-get install, а потім двічі натиснувши TAB (для автозаповнення). Це обмежено, тому що воно не говорить вам, що роблять пакети (Synaptic або Software Center було б краще для цього), але це може бути корисним, коли ви не можете згадати точне ім'я пакета. Ви також можете ввести першу частину імені пакета (наприклад, OpenOffice), щоб отримати більш короткий список більш релевантних пакетів.

Використовуйте інструмент командного рядка, якщо ви знаєте потрібне ім'япакет. Я не використовую програмний центр. Ви можете отримати ім'я пакета через програмний центр і використовувати його в терміналі, якщо вам дійсно потрібно використовувати інструмент apt-get із командного рядка. І зазвичай ім'я пакета збігається з ім'ям програми.

ви можете запустити (бажано ~ ~ / .bashrc)

. /etc/bash_completion

при введенні:

Sudo apt-get in

він запропонує встановлення, а потім почне вводити частину імені – наприклад, nvidia

і ви побачите доступні варіантипочинаючи з nvidia

У зв'язку з тим, що деякі товариші не розуміють що таке apt і dpkg. Вирішив створити ще один запис про ці утиліти.

APT та все, все, все. Вивчаємо можливості менеджера пакетів APT та супутніх програм

Debian вніс у світ Linux масу позитивних нововведень, багато з яких було прийнято й іншими дистрибутивами. Найзначнішим удосконаленням Debian стала система управління пакетами APT, після її випуску всі інші дистрибутиви перетворилися на застарілий мотлох. Сьогодні APT складна, розумна, гнучка і приховує від необізнаного лінуксоїда безліч секретів.

Просунута система керування пакетами

Сама собою APT (Advanced Packaging Tool) перестав бути системою управління пакетами у сенсі цього терміну. Всі дії з розпакування, реєстрації в системі та баченню бази пакетів виконують утиліти пакету dpkg, у той час як утиліти APT є обгорткою, за допомогою якої здійснюється пошук пакетів, звірка контрольних сум, викачування з репозиторію, дозвіл залежностей, а також ряд інших дій. .

APT включає наступний набір утиліт:

Утиліти пакету apt

apt-cache - маніпулює кешем доступних пакетів, що зазвичай використовується
для пошуку пакета та/або отримання інформації про нього

apt-cdrom - дозволяє додати CD/DVD-диск як джерело пакетів (репозиторія)

apt-config - читає значення опцій, заданих у конфігураційному
файл /etc/apt/apt.conf, використовується іншими APT-утилітами

apt-extracttemplates - витягує конфігураційні файли DebConf
з пакетів, використовується іншими APT-утилітами

apt-ftparchive - створює індексні файли

apt-get – встановлює, видаляє, оновлює список пакетів
та самі пакети, центральна APT-утиліта

apt-key - керує ключами автентифікації, що використовуються для перевірки
автентичності джерел пакетів

apt-secure - перевіряє автентичності цифровий підписпакетів apt, що входять
до складу дистрибутива та репозиторіїв

apt-sortpkgs - сортує індексні файли

Утиліти спираються на такі конфігураційні файли:

Конфігураційні файли APT

/etc/apt/sources.list – список джерел пакетів (репозиторіїв)
/etc/apt/apt.conf - основний файл конфігурації APT
/etc/apt/preferences - файл уподобань, керує тим, яка версія пакета буде
встановлена ​​у разі наявності в репозиторії відразу кількох версій

APT проста і зрозуміла у використанні, середньостатистичного користувача зазвичай достатньо всього шести нижченаведених команд:

Основні команди APT

apt-cache search маска - пошук пакету
apt-cache show пакет - перегляд інформації про пакет
apt-get install пакет - встановлення пакету
apt-get remove пакет - видалення пакету
apt-get update – оновлення кешу доступних пакетів
apt-get upgrade – оновлення всіх пакетів

Останні дві команди зазвичай виконуються одна за одною, в результаті чого встановлюються всі пакети, для яких в репозиторії доступні нові версії. Якщо ж необхідно оновити лише вказаний пакет, то після apt-get update слід виконати команду apt-get install пакет.

Дистрибутив Ubuntu робить процес "спілкування" з APT-утилітами ще більш простим і зводить його до клацання по галочках графічного інтерфейсу. У ньому є власний, гранично простий, менеджер пакетів (так і називається "Package Manager"), що запускається по cron"у менеджер оновлень Update Manager, графічний установник вручну завантажених deb-пакетів GDebi і потужніша графічна надбудова над APT-утилітами Synaptic.

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

Сторонні джерела пакетів

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

Щоб навчити APT працювати зі сторонніми репозиторіями, достатньо виконати чотири прості дії:

Поле uri - це адреса репозиторію, яка у більшості випадків є HTTP-адресою, але може бути посиланням на локальний репозиторій (file:/root/repository), адресою репозиторію на FTP або SSH-сервері. У полі дистрибутив вказується ім'я дистрибутива, для якого зібрані пакети. Для Debian ім'я може бути одним із stable, oldstable, unstable, testing, у той час як у випадку Ubuntu слід вказувати лише конкретне найменування дистрибутива (наприклад, jaunty), а також різні позначенняна його основі (наприклад, jaunty-updates, jaunty-backports, jaunty-security). Треба сказати, що APT зовсім не проти того, щоб змішувати пакети різних дистрибутивівна одній системі, але за наслідки в цьому випадку відповідатимеш тільки ти. Компонент зазвичай має ім'я main, contrib або non-free для Debian і main, universe, multiverse, partner і restricted для Ubuntu. Усе це імена різних репозиторіїв пакетів, які відокремлені лише у тому, щоб розділити пакети з урахуванням будь-яких критеріїв. Наприклад main - це пакети, що збираються групою розробників Ubuntu/Debian, на якість ПЗ, що міститься в них, є певні гарантії, включаючи своєчасні оновлення та багфікси, в той час як contrib і universe - це стороннє ПЗ, яке ти встановлюєш на свій страх і ризик.

2. Додати в apt keyring публічний ключ репозиторію, що використовується для засвідчення його автентичності та надійності. Ключ можна отримати у будь-який спосіб і додати, виконавши команду «apt-key add ключ», але такий спосіб рідко практикується через незручність. У переважній більшості випадків ти матимеш справу з командою

sudo apt-key adv --keyserver сервер-сертифікації --recv-keys ID-ключа
яка запитує ключ безпосередньо у сервера сертифікації (для Ubuntu це keyserver.ubuntu.com). Саме так більшість сторонніх розробників поширюють своє ПЗ для дистрибутивів Debian/Ubuntu (при цьому інші просто викладають пакети та їх контрольні суми). Наприклад, зайшовши на сторінку проекту, що цікавить тебе, на хостингу launchpad.net і натиснувши на посилання "Technical details about this PPA", ти побачиш рядок, який необхідно додати в /etc/apt/sources.list, в "Signing key:" буде вказано ID ключа.

3. Оновити кеш доступних пакетів:

sudo apt-get update
4. Встановити пакет за допомогою команди «apt-get install пакет».

Багато девелоперів розміщують посилання на репозиторій і ID його ключа прямо в deb-пакет, тому після завантаження пакета, установки та виконання команди «apt-get update && apt-get upgrade» пакети будуть оновлені разом з їхніми побратимами, перерахованими в sources.list. Зокрема, так поширюються браузери opera та альфа-реліз google chrome.

Репозиторій на компакт-диску додати в sources.list набагато простіше. Для цього є спеціальна команда apt-cdrom. Ти просто вставляєш CD у привід і виконуєш команду:

sudo apt-cdrom add

Хитрості та нестандартні ситуації

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

1. За замовчуванням команда «apt-get remove» видаляє пакет повністю лише в тому випадку, якщо жоден з його файлів не був змінений після інсталяції, інакше змінені файли залишаються недоторканими. Звичайно, конфігураційні файли змінюються в більшості випадків, тому apt-get залишає після себе купу сміття, яку доводиться прибирати руками. Команда "apt-get purge", виконана замість "apt-get remove", вирішує цю проблему.

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

sudo apt-get install --reinstall пакет
3. Більш низькорівневі утиліти керування deb-пакетами (такі, як dselect і dpkg) ведуть спеціальний список станів пакетів, який може використовуватися для керування тим, які пакети повинні бути встановлені або видалені в пакетному режимі (саме працює зв'язка dselect + dpkg). Його можна використовувати для багатьох інших цілей, наприклад, для перенесення конфігурації системи на іншу машину. Виконай таку команду:

dpkg --get-selections > file
Перенеси файл на іншу машину та виконай на ній дві команди:

cat file > dpkg --set-selections
apt-get dselect-upgrade

До системи будуть додані всі пакети системи-джерела. Щоб файл стану пакетів також містив інформацію про те, які пакети слід видалити із системи, додай символ "\*" після аргументу "--get-selections". Список станів не містить версії пакетів, це можна використовувати після встановлення більше нової версіїдистрибутива для приведення його до необхідного стану.

4. Ти вручну наклав латку на файл одного з системних пакетіві не хочеш, щоб цей пакет було оновлено (зі знищенням усіх твоїх змін) після виклику apt-get upgrade. У цьому випадку тобі допоможе знову прийде список станів. Пакет може бути "заморожений", внаслідок чого apt-get відмовиться його оновлювати та пропустить:

echo -e "coreutils hold" | dpkg --set-selections
Примусово оновити пакет можна за допомогою вказівки прапора "-u" під час виклику apt-get.

5. Як і будь-яка система, що має мережевий функціонал, APT дозволяє використовувати проксі для доступу до репозиторій. Щоб використати цю можливість, пропиши у файл /etc/apt/apt.conf наступний рядок:

Acquire::http::Proxy "http://xxx.xxx.xx:yyyy"

Де xxx.xxx.xx – ім'я твого проксі, yyyy – порт.

6. Зазвичай APT-утиліти запитують найновішу версію пакета з усіх, що знаходяться в його кеші, тому якщо ти додав у sources.list різні експериментальні та unstable-репозиторії, то після оновлення отримаєш дистрибутив, що складається виключно з експериментальних або unstable-пакетів, і купу проблем, спричинених таким станом справ. Однак ситуація легко розрулюється за допомогою приміщення в /etc/apt/apt.conf наступного рядка:

APT::Default-Release "реліз";

Де реліз - це oldstable, stable, unstable, testing або experimental для Debian або ім'я релізу для Ubuntu. Тепер, якщо необхідно встановити пакет із зазначеного дистрибутива, просто пропиши його ім'я після аргументу "-t" при викликі apt-get:

sudo apt-get -t unstable install пакет
7. Усі отримані apt-get deb-пакети зберігаються в каталозі /var/cache/apt/archives, а це означає, що в разі перевстановлення системи ти можеш скопіювати вміст каталогу на інший диск/розділ, а потім відновити його та заощадити час/ трафік на встановленні пакетів. Крім того, це по суті снапшот твоєї встановленої системи (тієї її частини, яку ти встановив сам), який можна віднести до друга (разом із описаним у третьому пункті списком станів) або, при непотрібності, видалити для звільнення місця.

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

sudo dpkg --get-selections | grep-v "deinstall" | \
awk "(print $1)" | xargs dpkg-repack

9. Крім бінарних пакетів, репозиторії Debian/Ubuntu містять пакети з вихідними текстами додатків, які можуть бути отримані та зібрані з використанням наступної команди:

sudo apt-get -b source ім'я пакету

Сторонні утиліти

Система APT пройшла дуже довгий шляхрозвитку, тому крім офіційних утиліт, включених у пакет apt, репозиторії Debian та Ubuntu рясніють масою сторонніх утиліт, які можуть бути використані для виконання деяких нестандартних завдань.
Найбільш корисна їх називається apt-file і необхідна, як неважко здогадатися з назви, визначення приналежності тієї чи іншої файлу певному пакету. Встановлюємо:

sudo apt-get install apt-file
Просимо apt-file створити кеш всіх файлів, встановлених у системі пакетів (за ним буде здійснюватися пошук):

apt-file search /usr/bin/apt-get
apt: /usr/bin/apt-get

Запитуємо список усіх файлів пакета:

apt-file list apt

Проста утиліта apt-show-versions покаже, які пакети можна оновити, із зазначенням версій та інших даних. Запусти її з прапором "-u", щоб отримати список тільки пакетів, що підлягають оновленню (замість списку всіх пакетів).

Якщо ти встановив велику кількість різних пакетів і тепер хочеш позбутися непотрібного мотлоху, то в цій справі допоможе утиліта deborphan, яка здійснює пошук пакетів, що не використовуються, і осиротілих залежностей. Просто запусти deborphan без аргументів, і ти побачиш список пакетів, який відразу можна передати на вхід команді «apt-get remove» або просто виконати таку команду:

sudo apt-get remove `deborphan`

За умовчанням deborphan обробляє лише пакети, що містять бібліотеки, але таку поведінку можна змінити, додавши прапор "-a" до виклику команди:

Не варто відразу кидатися видаляти показані утилітою пакети, тому що навіть найпотужніший евристичний алгоритм не здатний визначити твої особисті потреби. Так мені програма показала пакети google-chrome, inkscape і навіть xorg.

Утиліта apt-move дозволить створити локальний репозиторій. Встанови програму, відкрий файл /etc/apt-move.conf, вкажи в опції LOCALDIR шлях до каталогу, в якому повинен розташовуватись репозиторій, і запусти команду:

sudo apt-move update

В результаті всі викачані з Мережі за допомогою apt-get пакети (каталог /var/cache/apt/archives) будуть переміщені до вказаного в конфізі каталогу, для якого буде створено індексний файл. Це зручний спосіб створення внутрішньомережевого репозиторію для тих випадків, коли масу однакових пакетів необхідно встановити на безліч машин.

Для створення локального репозиторію також дуже зручно застосовувати сервер apt-proxy, що дозволяє кешувати deb-пакети, що скачуються з репозиторію, на стороні сервера. Для цього apt-proxy встановлюється на виділеній машині (можливо шлюзі), а sources.list клієнтів модифікується так, щоб як поле uri всіх репозиторіїв було вказано адресу цієї машини. Як результат, всі запити deb-пакетів перенаправляються до apt-proxy, який запитує пакет у головного репозиторію та зберігає його у своєму кеші, а відповідь на всі наступні запити цього пакета буде віддана з кешу.

Для початку встановлюємо apt-proxy на виділеній машині:

sudo apt-get install apt-proxy

Далі відкриваємо файл /etc/apt-proxy/apt-proxy-v2.conf, переходимо в секцію та замінюємо значення опції address на IP-адресу машини, а також описуємо використовувані apt-proxy джерела пакетів, наприклад:

sudo vi /etc/apt-proxy/apt-proxy-v2.conf


backends = http://ua.archive.ubuntu.com/ubuntu/
min_refresh_delay = 1d


backends = http://security.ubuntu.com/ubuntu/
min_refresh_delay = 1d

Зазвичай цих двох адрес достатньо для покриття всього спектру пакетів, що надається розробниками Ubuntu. Перезапускаємо apt-proxy:

sudo invoke-rc.d apt-proxy restart

Щоб перевести клієнтів на використання apt-proxy, беремо стандартний sources.list Ubuntu, замінюємо всі реальні поля uri на "http://IP-адреса-apt-proxy:9999/ubuntu/" та копіюємо цей файл на кожен клієнт.

Існує і безліч інших, менш цікавих утиліт, що працюють у зв'язці з APT. Наприклад, apt-dater дозволяє виконувати оновлення пакетів на великій кількості віддалених вузлів, використовуючи псевдографічний інтерфейс. Програма aptsh реалізує командний інтерфейс, Подібний sh, поверх команд пакету apt, aptfs - віртуальна файлова система для управління APT. Утиліта debdelta, що дозволяє оновлювати пакети за допомогою викачування з Мережі їх дельт, могла б стати темою для окремої статті, якби для неї існував хоча б один репозиторій, що своєчасно оновлюється.

Aptitude

Утиліта apt-get та її родичі - не єдина з доступних для реалізації APT. Ще більш потужна, зручна та універсальна альтернатива їм зветься aptitude і є концентрованим в одному місці функціонал apt-get, apt-cache і dselect.
Aptitude дозволяє встановлювати / видаляти, шукати, оновлювати та виробляти масу інших дій з пакетами, використовуючи два типи інтерфейсу: командний режим, Схожий з apt-get і apt-cache, і режим з псевдографічним інтерфейсом, що зовні нагадує інтерфейс dselect, але набагато більш зручний і функціональний.

У режимі командного рядка можна використовувати aptitude для виконання таких дій, як:

aptitude install - встановлення пакету

aptitude remove - видалення пакету та осиротілих залежностей

aptitude purge - видалення пакету, осиротілих залежностей
і конфігураційних файлів, що залишилися після них.

aptitude search - пошук пакету в кеші (список доступних пакетів)

aptitude update - оновлення кешу

aptitude safe-upgrade – оновлення пакетів

aptitude clean - видалення раніше завантажених пакетів

aptitude full-upgrade - оновлення пакетів,
навіть якщо ця дія вимагає видалення будь-яких пакетів

aptitude show - інформація про пакет

aptitude autoclean - видалення застарілих пакетів

aptitude hold - встановлення заборони оновлення пакета

Інтерактивний режим, доступний при запуску aptitude без аргументів, дозволяє виконати ті самі дії, використовуючи псевдографічний інтерфейс, побудований з урахуванням бібліотеки ncurses. Він працює в пакетному режимі (вибрав пакети - запустив процес установки), тому буде зручний у тих випадках, коли потрібно встановити велику кількість пакетів.

Великодні яйця

Розробники утиліт APT виявилися хлопцями з дещо збоченим почуттям гумору. Чого тільки вартий результат наступної команди:

sudo apt-get moo
Ще більш дико виглядає те, що вбудували у свою програму творці aptitude. Спробуй:

sudo aptitude moo
Таке собі пасхальне яйце без великоднього яйця. Ну добре:

sudo aptitude -v moo
sudo aptitude -vv moo
sudo aptitude -vvv moo
sudo aptitude -vvvv moo
sudo aptitude -vvvvv moo

І фінальний акорд:

sudo aptitude -vvvvvv moo

Корисні команди apt-cache

apt-cache show пакет - детальна інформація про пакет
apt-cache showpkg пакет - Загальна інформаціяпро пакет
apt-cache depends пакет - список залежностей пакету
apt-cache rdepends пакет - список зворотних залежностей (кому потрібен зазначений пакет)

Словник APT

Пакет - програма, бібліотека, вихідні файли або будь-які інші файли, а також їх метадані, упаковані в особливим чином сформований архів.

Репозиторій – місце зберігання deb-пакетів.

Кеш доступних пакетів (або просто кеш) - файл, в якому кешується інформація про всі пакети, доступні з джерел, перелічених у /etc/apt/sources.list. Кеш оновлюється під час кожного дзвінка команди «apt-get update».

Індексний файл - головний файл репозиторію, що містить назву, версію, розмір, короткий і повний описта залежності для кожного пакета. Носить ім'я Packages.gz у разі бінарного репозиторію та Sources.gz для репозиторію вихідних текстів. Створюється за допомогою утиліт pkg-scanpackages та dpkg-scansources.

Apt keyring (дослівно: зв'язка ключів apt) – сховище ключів, що засвідчують справжність джерел пакетів (репозиторіїв).

Що всередині?

Відмінною рисою пакетів формату Deb є їхня простота. Будь-який Deb-пакет - це три файли: data.tar.gz, control.tar.gz та debian-binary, запаковані архіватором ar. Файл data.tar.gz - це вміст пакету (бінарники, man"и, документація і т.д.), control.tar.gz - метадані, в найпростішому варіанті два файли: control, що містить опис пакета, залежності, розмір і т.д. .д., і md5sums - контрольні суми всіх файлів пакета.Файл debian-binary містить версію формату Deb-пакета (наприклад, 2.0).Для розпакування пакета можна використовувати команду:

ar -xv пакет.deb && tar -xzf data.tar.gz

Advanced Packaging Tool – високорівневий інструмент для роботи з пакетами.

Робота з пакетами з допомогою dpkg.

dpkg є основною програмою в системі для роботи з пакетами Debian. За наявності пакетів.deb саме dpkg дозволяє їх встановити або проаналізувати вміст. Однак ця програма має лише часткове уявлення про світ Debian: вона знає, що встановлено в системі, а також все, що передано їй у командному рядку, але вона нічого не знає про інші доступні пакети. Тому вона завершиться з помилкою, якщо виявить незадоволену залежність. Такі інструменти, як apt, навпаки, автоматично створять список залежностей, щоб встановити все по можливості автоматично.

dpkg чи apt?

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

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

dpkg - це, перш за все, інструмент для встановлення вже доступних пакетів Debian (бо він нічого не завантажує). Для встановлення пакету використовується опція -i або --install.

Встановлення пакету за допомогою dpkg

Dpkg -i man-db_2.7.0.2-5_amd64.deb




Налаштовується пакет man-db (2.7.0.2-5).

Ми можемо бачити кожен етап, що виконується dpkg, тому ми знаємо, де могла статися якась помилка. Установку можна виконати в два етапи: спочатку розпакування, потім конфігурація. Завдяки цьому apt-get робить менше звернень до dpkg (кожен такий запит є дорогою операцією через необхідність завантаження пам'яті бази даних, включаючи весь список вже встановлених файлів).

Роздільна розпакування та налаштування

Dpkg --unpack man-db_2.7.0.2-5_amd64.deb

(Читання бази даних … на даний момент встановлено 86425 файлів та каталогів.)
Підготовка до розпакування man-db_2.7.0.2-5_amd64.deb …
Розпаковується man-db (2.7.0.2-5) на заміну (2.7.0.2-5).
Обробляються тригери для mime-support (3.58).

Dpkg --configure man-db

Налаштовується пакет man-db (2.7.0.2-5).
Застосовуючи database of manual pages ...

Іноді dpkg з тієї чи іншої причини не може встановити пакунок і повертає помилку; якщо користувач дає вказівку проігнорувати цю помилку, буде видано лише попередження; Існують різні опції --force-*. Команда dpkg --force-help або документація цієї команди видасть повний список таких опцій. Самої частою помилкою, з якою вам доведеться рано чи пізно зіткнутися, є конфлікт файлів. Коли пакет містить файл, який вже інстальовано іншим пакетом, dpkg відмовиться встановлювати його, і ми отримаємо таке повідомлення:

Розпаковується пакет libgdm (з файлу.../libgdm_3.8.3-2_amd64.deb) …
dpkg: помилка при обробці параметра /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):
спроба перезаписати "/usr/bin/gdmflexiserver", який вже є в пакеті gdm3 3.4.1-9

У цьому випадку, якщо ви вважаєте, що заміна цього файлу не становить суттєвої небезпеки для стабільності вашої системи (часто це саме так), ви можете використовувати опцію --force-overwrite, яка повідомить dpkg про необхідність проігнорувати цю помилку та перезаписати файл.
Хоча є багато опцій --force-*, тільки --force-overwrite рекомендується для регулярного використання. Інші призначені тільки для виняткових випадків, і краще не чіпати їх, поки це можливо, щоб дотримуватись правил, закладених при створенні пакета. Не забувайте, що ці правила є гарантією цілісності та стабільності системи.

УВАГА! Ефективне використання--force-*

Якщо ви не обережні, використання опції --force-* може призвести до того, що команди APT перестануть працювати. Деякі з цих опцій дозволяють встановити пакет із незадоволеними залежностями або за наявності конфлікту. В результаті узгодженість системи з точки зору залежностей порушується, і команди APT відмовляться виконувати будь-які дії, крім тих, які повернуть систему в узгоджений стан (це зазвичай зводиться до встановлення відсутньої залежності або видалення проблемного пакета). Ось приклад повідомлення, що сигналізує про таку помилку, отримане після встановлення нової версії rdesktop з ігноруванням залежності від новітньої версії libc6:

apt full-upgrade

Можливо, для виправлення цих помилок ви захочете скористатися apt-get -f install.
Пакети, що мають незадоволені залежності:
rdesktop: Залежить від: libc6 (>= 2.5) але 2.3.6.ds1-13etch7 вже встановлено
E: Незадоволені залежності.

Спробуйте використати -f.
Безстрашні адміністратори, впевнені у правильності свого аналізу ситуації, можуть проігнорувати попередження про проблему залежностями чи конфлікт, використовуючи відповідну опцію --force-*. У цьому випадку, якщо потрібно продовжувати використовувати apt або aptitude, потрібно відредагувати /var/lib/dpkg/status та видалити/змінити залежність або конфлікт.
Редакування даного файлу - це брудний хак, і не варто вдаватися до нього, окрім самих крайніх випадках. Найчастіше найкращим рішеннямє перескладання пакета, що викликає проблему, вихідного коду») або використання нової версії (ймовірно виправленої) з такого репозиторію як stable-backports (див. Розділ 6.1.2.4, «Стабільне ПЗ зі зворотною сумісністю»).

Видалення пакету

Запуск dpkg з опцією -r або --remove, за якою слідує ім'я пакета, призведе до видалення цього пакета. Це видалення, однак, не повне: всі конфігураційні файли, сценарії супроводжуючого, файли журналів (системні журнали) та інші дані користувача, що використовуються цим пакетом, залишаться. Таким шляхом легко позбутися програми, деінсталював її, але при цьому зберігається можливість встановити її ще раз з тією ж конфігурацією. Для повного видалення всього пов'язаного з пакетом використовується опція -P або --purge, що супроводжується іменем пакета.

Повне видалення пакету debian-cd

Dpkg -r debian-cd

(Читання бази даних … на даний момент встановлено 97747 файлів та каталогів.)

Dpkg -P debian-cd

(Читання бази даних … на даний момент встановлено 97401 файл та каталог.)
Видаляється пакет debian-cd (3.1.17) …
Очищаються файли налаштування пакета debian-cd (3.1.17) …

Запити до бази даних dpkg та аналіз файлів.deb

Для більшості опцій існують "довгі" (одне або кілька слів, перед якими ставиться подвійний дефіс) і "короткі" варіанти (одна літера, часто перша літера "довгого" варіанта, після одного дефісу). Ця угода настільки поширена, що вже є стандартом POSIX.
Перш ніж завершити цей розділ, розглянемо опції dpkg для запитів до внутрішньої бази даних для отримання різної інформації. При цьому спочатку будуть вказуватися довгі, а потім відповідні короткі опції (які, зрозуміло, приймають самі аргументи). Так, --listfiles пакет (або -L) виводить список файлів, встановлених пакетом; --search файл (або -S) шукає пакет, до якого належить цей файл; --status пакет (or -s) виводить інформацію про той чи інший встановлений пакет; --list (або -l) показує список пакетів, відомих системі, та їх статус; --contents file.deb (або -c) показує список файлів у цьому пакеті; --info file.deb (або -I) показує інформацію про пакет Debian.

Отримання інформації за допомогою dpkg

Dpkg -L base-passwd

/.
/usr
/usr/sbin
/usr/sbin/update-passwd
/usr/share
/usr/share/man
/usr/share/man/uk
/usr/share/man/uk/man8
/usr/share/man/uk/man8/update-passwd.8.gz
/usr/share/man/pl
/usr/share/man/pl/man8
/usr/share/man/pl/man8/update-passwd.8.gz
/usr/share/man/man8
/usr/share/man/man8/update-passwd.8.gz
/usr/share/man/fr
/usr/share/man/fr/man8
/usr/share/man/fr/man8/update-passwd.8.gz
/usr/share/doc-base
/usr/share/doc-base/users-and-groups
/usr/share/base-passwd
/usr/share/base-passwd/passwd.master
/usr/share/base-passwd/group.master
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/base-passwd
/usr/share/doc
/usr/share/doc/base-passwd
/usr/share/doc/base-passwd/copyright
/usr/share/doc/base-passwd/users-and-groups.html
/usr/share/doc/base-passwd/changelog.gz
/usr/share/doc/base-passwd/users-and-groups.txt.gz
/usr/share/doc/base-passwd/README

Dpkg -S /bin/date

coreutils: /bin/date

Dpkg -s coreutils

Package: coreutils
Essential: yes
Status: install ok installed
Priority: required
Section: utils
Installed-Size: 13822
Maintainer: Michael Stone
Architecture: amd64
Multi-Arch: foreign
Version: 8.13-3.5
Replaces: mktemp, timeout
Depends: dpkg (>= 1.15.4) | install-info
Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.7), libselinux1 (>= 1.32)
Conflicts: timeout
Description: GNU core utilities
Цей пакет містить basic file, shell and text manipulation
utilities which є expected до exist on every operating system.
.
Спеціально, цей пакет включає:
arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
csplit cut date dd df dir dircolors dirname du echo env expand expr
factor false flock fmt fold groups head hostid id install join link ln
logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od
paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon
sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test
timeout touch tr true truncate tsort tty uname unexpand uniq unlink
users vdir wc who whoami yes
Homepage: http://gnu.org/software/coreutils

Dpkg -l "b*"

Бажаний=невідомо[u]/встановити[i]/видалити[r]/вичистити[p]/зафіксувати[h]
| Стан=не[n]/встановлений[i]/налаштований[c]/розпакований[U]/частково налаштований[F]/
частково встановлений[H]/trig-aWait/Trig-pend
|/ Помилка?=(ні)/потрібна переустановка[R] (верхній регістр
у полях стану та помилки вказує на ненормальну ситуацію)
||/ Ім'я Версія Архітектура Опис
+++-============-==============-==============-================================
un backupninja<нет>(опис недоступний)
un base<нет>(опис недоступний)
un base-config<нет>(опис недоступний)
ii base-files 7.1 amd64 Debian base system miscellaneous
ii base-passwd 3.5.26 amd64 Debian base system master passwo
[...]

Dpkg -c /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb

drwxr-xr-x root/root 0 2013-01-02 19:28 ./
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/
drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/
drwxr-xr-x root/root 2013-01-02 19:28 ./usr/share/doc/
drwxr-xr-x root/root 2013-01-02 19:28 ./usr/share/doc/gnupg/
-rw-r--r-- root/root 3258 2012-01-20 10:51 ./usr/share/doc/gnupg/TODO
-rw-r--r-- root/root 308 2011-12-02 18:34 ./usr/share/doc/gnupg/FAQ
-rw-r--r-- root/root 3543 2012-02-20 18:41 ./usr/share/doc/gnupg/Upgrading_From_PGP.txt
-rw-r--r-- root/root 690 2012-02-20 18:41 ./usr/share/doc/gnupg/README.Debian
-rw-r--r-- root/root 1418 2012-02-20 18:41 ./usr/share/doc/gnupg/TODO.Debian
[...]

Dpkg -I /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb

новий пакет Debian, версія 2.0.
розмір 1952176 байт (а): керуючий архів довжиною 3312 байт (а).
1449 байт(и), 30 рядків control
4521 байт(и), 65 рядків md5sums
479 байт(и), 13 рядків * postinst #!/bin/sh
473 байт(и), 13 рядків * preinst #!/bin/sh
Package: gnupg
Version: 1.4.12-7
Architecture: amd64
Maintainer: Debian GnuPG-Maintainers
Installed-Size: 4627
Depends: libbz2-1.0, libc6 (>= 2.4), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4), dpkg (>= 1.15.4) | install-info, gpgv
Recommends: libldap-2.4-2 (>= 2.4.7), gnupg-curl
Suggests: gnupg-doc, xloadimage | imagemagick | eog, libpcsclite1
Section: utils
Priority: important
Multi-Arch: foreign
Homepage: http://www.gnupg.org
Description: GNU privacy guard - безкоштовно PGP replacement
GnuPG is GNU's tool для надійної комунікації та data storage.
Вона може бути використана для відображення даних і створення цифрових signatures.
It includes an advanced key management facility and is compliant
with proposed OpenPGP Internet standard as described в RFC 4880.
[...]

ПОГЛУБЛЮЄМОСЯ: Порівняння версій

Оскільки dpkg є програмою для роботи з пакетами Debian, вона також містить еталонну реалізацію логіки порівняння номерів версій. Тому вона має опцію --compare-versions, використовувану зовнішніми програмами (переважно - сценаріями налаштування, запускаемыми самої dpkg). Для цієї опції потрібні три параметри: номер версії, оператор порівняння та другий номер версії. Допустимі оператори порівняння - lt (суворо менше), le (менше або дорівнює), eq (рівна), ne (не дорівнює), ge (більше або дорівнює), і gt (строго більше). Якщо порівняння вірне, dpkg повертає 0 (успіх), якщо ні, то ненульове значення (ознака помилки).

$ dpkg --compare-versions 1.2-3 gt 1.1-4
$echo$?
0
$ dpkg --compare-versions 1.2-3 lt 1.1-4
$echo$?
1
$ dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1
$echo$?
1

Зверніть увагу на несподіваний збійостаннього порівняння: для dpkg літери pre, що позначають, як правило, попередній випуск, не має ніякого особливого значення, і літерні символи порівнюються так само, як і числа (a< b < c ...), в алфавитном порядке. Именно поэтому dpkg считает, что «0pre3» больше, чем «0». При необходимости указать в номере версии, что она относится к предварительному выпуску, используется символ тильды «~»:

$ dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1
$echo$?
0

Файл журналу dpkg

dpkg зберігає журнал всіх своїх дій у /var/log/dpkg.log. Цей журнал є надзвичайно докладним: у ньому задокументовані всі етапи обробки пакетів dpkg. Цей журнал допомагає не тільки відстежити поведінку dpkg, але й зберегти історію змін у системі: можна знайти точний момент, коли кожен пакет було встановлено або оновлено, і ця інформація може бути надзвичайно корисною при з'ясуванні причин зміни поведінки системи в цілому. Крім того, ведеться запис інформації про всі версії, її легко звірити з changelog.Debian.gz з відповідного пакета або зі звітами про помилки онлайн.

Підтримка мультиархітектури

Усі пакети Debian мають поле Architecture у своїх метаданих. Це поле може містити або значення «all» (для пакетів, які не залежать від архітектури), або назва конкретної архітектури, для якої пакет призначений (наприклад, «amd64», «armhf», …). В останньому випадку dpkg за промовчанням допустить інсталяцію пакета лише в тому випадку, якщо його архітектура відповідає архітектурі системи, що повертається dpkg --print-architecture.
Це обмеження гарантує, що в системі не буде двійкових файлів, скомпілованих для неправильної архітектури. Все було б чудово, але на (деяких) комп'ютерах можна запускати двійкові файли для різних архітектур, нативно (наприклад, на системах «amd64» працюють двійкові файли для «i386») або через емулятори.

Увімкнення мультиархітектури

Підтримка мультиархітектури dpkg дозволяє визначати «чужорідні архітектури», які можуть бути встановлені в системі. Це легко зробити за допомогою dpkg --add-architecture, як показано нижче. Існує і відповідна команда dpkg --remove-architecture для відключення підтримки чужорідної архітектури, але її можна використовувати тільки в тому випадку, коли в системі не залишилося жодного пакету цієї архітектури.

dpkg --print-architecture
amd64

dpkg: error processing archive gcc-4.9-base_4.9.1-19_armhf.deb (--install):
package architecture (armhf) does no match system (amd64)
Errors були відзначені при процесуванні:
gcc-4.9-base_4.9.1-19_armhf.deb

dpkg --add-architecture armhf
dpkg --add-architecture armel
dpkg --print-foreign-architectures
armhf
armel

Dpkg -i gcc-4.9-base_4.9.1-19_armhf.deb

Selecting спочатку невибраний пакет gcc-4.9-base:armhf.
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack gcc-4.9-base_4.9.1-19_armhf.deb ...
Unpacking gcc-4.9-base:armhf (4.9.1-19) ...
Setting up gcc-4.9-base:armhf (4.9.1-19) ...

Dpkg --remove-architecture armhf

dpkg: error: cannot remove architecture "armhf" currently in use by the database

Dpkg --remove-architecture armel
dpkg --print-foreign-architectures
Підтримка мультиархітектури в APT

APT автоматично визначить, якщо dpkg буде налаштований на підтримку чужорідних архітектур, і розпочне завантаження відповідних файлів Packages у процесі оновлення.
Чужорідні пакети можна встановити за допомогою apt install пакет:архітектура.

Використання власних двійкових файлів i386 у системах amd64

Є кілька випадків, коли може стати в нагоді мультиархітектура, але найпоширенішим з них є забезпечення можливості запуску 32-бітних файлів (i386) на 64-бітових системах (amd64), зокрема тому що деякі популярні власницькі програми (на зразок Skype) доступні тільки у вигляді 32-розрядні версії.

Зміни, пов'язані з мультиархітектурою

Щоб зробити мультиархітектурну підтримку по-справжньому корисною, бібліотеки потрібно було перепакувати, перемістивши їх у каталог, що відповідає архітектурі, щоб можна було встановити кілька копій (для різних архітектур) одночасно. Такі оновлені пакети містять заголовок "Multi-Arch: same", що вказує на систему управління пакетами, що різні архітектури пакетів можна встановлювати спільно (і що ці пакети можуть задовольняти залежності тільки пакетів тієї ж архітектури). Оскільки підтримка мультиархітектури була додана лише у Debian Wheezy, ще не всі бібліотеки перетворені.

Dpkg -s gcc-4.9-base

dpkg-query: помилка: --status вимагає коректне ім'япакета, але "gcc-4.9-base" таким не є: неоднозначне ім'я пакета "gcc-4.9-base" з більш ніж одним встановленим екземпляром

Використовуйте --help для виведення довідки за запитами пакетів.

Dpkg -s gcc-4.9-base:amd64 gcc-4.9-base:armhf | grep ^Multi

Multi-Arch: same
Multi-Arch: same

Dpkg -L libgcc1:amd64 | grep .so

/lib/x86_64-linux-gnu/libgcc_s.so.1

Dpkg -S /usr/share/doc/gcc-4.9-base/copyright

gcc-4.9-base:amd64, gcc-4.9-base:armhf: /usr/share/doc/gcc-4.9-base/copyright

Варто зазначити, що для пакетів із полем Multi-Arch: same слід вказувати імена з назвою архітектури, щоб їх можна було однозначно ідентифікувати. Вони також можуть мати спільні файлиз іншими екземплярами того самого пакета; dpkg у разі гарантує, що це пакети мають біт-в-біт ідентичні спільні файли. Усі екземпляри пакета повинні бути однієї і тієї ж версії, так що і оновлюватися вони повинні разом.
Підтримка мультиархітектури також привносить деякі цікаві особливості механізм обробки залежностей. Для задоволення залежності потрібно або пакет, позначений «Multi-Arch: foreign», або пакет з такою ж архітектурою (при вирішенні залежності архітектурно-незалежні пакети вважаються такими, що мають ту ж архітектуру, що і система). Залежність може також бути ослаблена, щоб дозволити пакету будь-якої архітектури задовольняти її, за допомогою синтаксису пакет: any, але чужорідні пакети можуть задовольняти таку залежність, тільки якщо вони позначені «Multi-Arch: allowed».

Використані матеріали.