Як я можу встановити новіші версії програмного забезпечення, ніж те, що надає Debian?


26

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

Випадки, які слід врахувати:

  1. Для цієї версії ОС доступні офіційні / офіційні джерела додаткових пакетів. Наприклад, backports.org для Debian або PPA для Ubuntu.
  2. Немає останніх версій пакета, доступних для цієї версії ОС, але є новіші версії, доступні для більш пізніх версій ОС. Це стандартний випадок для резервування портів.
  3. Немає в наявності упакованих версій останніх версій програмного забезпечення. Доступні варіанти - упаковка новітньої версії.

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


Це дуже специфічно для розподілу. Краще зробіть це по одному питанню на розподіл.
Жил 'ТАК - перестань бути злим'

2
@Gilles Питання не залежить від розподілу. Я думаю, що було б краще мати одне запитання з відповідями на різні розподіли.
Faheem Mitha

Один приклад того, що робилося, а що не працювало: Для Debian 8 я хотів MySQL 5.6. (Зазвичай MySQL 5.5 встановлюється лише для Debian 8. Мені потрібно 5,6 для порівняння з іншими речами, які я робив.) Я спробував встановити 5,6 резервний порт, але він був зламаний. Якийсь дублюючий файл завантажується повідомлення про помилку. Я повідомив про це, але тоді що робити? Рішення: я виявив, що ви можете завантажити MySQL 5.6 спеціально для Debian 8 безпосередньо з сайту MySQL. Це спрацювало, Але ... обов'язково прочитайте коментар WORKAROUND
Еліптичний вигляд

Відповіді:


33

(Якщо у вас є питання / коментарі щодо цієї відповіді, будь ласка, додайте коментар. Або, якщо у вас є достатня кількість представників, ви можете надіслати мені повідомлення в чаті.)

Безпосередня установка двійкових пакетів з нової версії Debian - не відповідь.

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

Розглянемо для прикладу випадок, коли намагається встановити двійковий пакет із тестування / нестабільності безпосередньо на стабільний. Це, швидше за все, не піде добре, якщо тільки тестування / нестабільність в цей момент не буде дуже близьким до стабільного. Причина пов'язана з природою бінарного дистрибутиву на базі Linux, як Debian. Такі операційні системи значною мірою залежать від спільних бібліотек, і ці залежності часто дуже щільно залежать від версій; часто набагато більше, ніж потрібно. На даний момент Debian не має хорошого способу зробити «жорсткі» залежності від версій - скорочений спосіб сказати, що залежність версій є рівною мірою, наскільки це необхідно.

Що це означає для користувача? Припустимо, наприклад, що ви намагаєтесь встановити скажіння slrnз Debian нестабільно в стабільний Debian. Як би це виглядало?

# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.

Незважаючи на помилку, видану компанією apt, тут немає зламаних пакетів. Отже, що пішло не так? Проблема полягає в тому, що версія для libc6цього нестабільної slrnкомпіляції відрізняється (і має більший номер версії), ніж версія, доступна в стабільній Debian. ( libc6це бібліотека GNU C. Бібліотека C є центральною для будь-якої операційної системи, схожої на Unix, а бібліотека GNU C - версія, якою зазвичай користуються операційні системи на базі Linux.)

Тому для нестабільної slrnпотрібна версія з більшим числом, libc6ніж доступна для стабільної. Зауважте, що оскільки пакет складено проти вищої версії бібліотеки, не обов'язково потрібна більш висока версія цієї бібліотеки, але це часто буває так.

Синтаксис

apt-get install slrn/unstable

означає: використовуйте нестабільні, slrnале для всіх інших пакетів використовуйте лише версії зі стабільних. Якщо бути більш точним, він використовує номери пріоритету. Детальніше man apt_preferencesдив.

Можна також зробити

apt-get install -t unstable slrn

Це набагато частіше спрацює, але ти, як правило, не хочеш цього робити. Чому?

Це означає: тимчасово обробляти всі пакунки нестабільно на рівних умовах з пакетами в стайні. Тому це призведе до нестабільних slrnзалежностей від нестабільних, якщо вони мають більший номер версії, і вони, як правило, будуть. Це, як правило, включає бібліотеку GNU C з причин, які вже були пояснені. Тепер цей підхід, як правило, "досягне успіху", оскільки залежності будуть задоволені за визначенням (у нестабільних slrnє залежності, які задовольняються нестабільними), але ви закінчите суміш пакетів, які раптом змушені працювати з версіями бібліотек відрізняється від того, для чого вони були побудовані. Напевно, це не закінчиться добре.

Відповідь ... РЕКЛАМИ!

Отже, який правильний спосіб зробити це? Це відновити джерела Debian останніх версій у вашій системі, відомі як "backporting". Розглянемо наступні випадки:

Для цієї версії Debian є доступні офіційні / офіційні джерела додаткових пакетів.

Перше місце, яке потрібно подивитися, - це Debian Backports , який є офіційним сайтом для Debian Backports.

Для конкретного прикладу:

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

echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git

Це отримає останню стабільну версію git, яка має корисні новіші функції, ніж стабільна, включена з розтяжкою (наприклад, "включити", яка дозволяє комбінувати кілька конфігураційних файлів або змінити ваше ім'я для ~ / робота / проекти / проти ~ / персонального / проекти /).

Ще одне місце, на яке слід звернути увагу, - це різні PPA, які підтримують Ubuntu. Ви можете здійснити пошук за "ім'ям пакета PPA".

Немає останніх версій пакета, доступних для цієї версії ОС, але є більш новітні версії, доступні для більш пізніх версій / версій ОС. Це стандартний випадок для резервування портів.

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

Короткий підручник для початківців

Для конкретності я припускаю, що ви працюєте на поточній стабільній системі Debian, на даний момент хрипкій. Я буду використовувати пакет slrnяк приклад.

По-перше, зауважте, що всі файли упаковки Debian містяться у debian/підкаталозі вихідного каталогу.

Перший крок - перевірити, чи доступна більш нова версія. Це можна зробити за допомогою apt-cache policy.

apt-cache policy slrn

slrn:
  Installed: 1.0.0~pre18-1.3
  Candidate: 1.0.0~pre18-1.3
  Version table:
     1.0.1-10 0
         50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
         50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
 *** 1.0.0~pre18-1.3 0
        500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status
     1.0.0~pre18-1.1 0
        500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages

Ми хотіли б підтримати 1.0.1-10.

КРОК 1:

Примітка. Переконайтеся, що deb-srcрядки для вихідної версії, яку ви хочете завантажити, відображаються у вашій /etc/apt/sources.list. Наприклад, якщо ви хочете завантажити нестабільну версію slrn, вам потрібна deb-srcлінія для нестабільної, інакше вона не працюватиме. Зауважте, що вам не потрібні відповідні debрядки для завантаження джерел, хоча вони apt-cache policyвикористовують цю інформацію, тож якщо у вас немає відповідних debрядків, то apt-cache policyне відображатиметься відповідна версія. Якщо у вас є debрядки, не забудьте закріпити новіші версії, використовуючи запис /etc/apt/preferencesабо подібні. Запис в /etc/apt/preferencesяк це (для нестійкого) буде працювати, наприклад.

Package: *
Pin: release a=unstable
Pin-Priority: 50

Якщо ви додаєте рядки /etc/apt/sources.list, не забудьте працювати apt-get updateдалі.

Завантажте джерела для slrn. Гарне місце є /usr/local/src/slrn.

apt-get source slrn=1.0.1-10

КРОК 2:

Трохи змінити номер версії, щоб відрізнити ваш порт від попередньої версії. Виконати dch -i, що автоматично додасть запис у debian/changelogфайл. Потім змініть запис, щоб виглядати приблизно так, наприклад.

slrn (1.0.1-10.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sun, 02 Feb 2014 23:54:13 +0530

КРОК 3:

Спроба побудови джерел. Якщо пакети, необхідні для складання, недоступні, спроба не вдасться. Змініть каталог у вихідний каталог. Використовуйте debuildз devtoolsупаковки.

cd slrn-1.0.1/
debuild -uc -us

Якщо залежності збірки задовольняються, то джерела будуватимуть і вироблятимуть дебіли на рівні вище вихідного каталогу; в цьому випадку /usr/local/src/slrn.

КРОК 4:

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

NB: На жаль, нечасто для пакунків Debian потрібні версії побудови залежностей, які перевищують необхідні. У Debian немає автоматизованого способу перевірити це, і часто технічне обслуговування пакетів не хвилює, поки він працює у відповідній версії / релізі. Тому скептично ставтесь до версій залежності та використовуйте здоровий глузд. Наприклад, широко використовувані пакети, такі як Python та інструменти GNU, не залежатимуть від дуже конкретних версій їх залежностей, незалежно від списку пакувальників Debian.

У будь-якому випадку, ви можете спробувати встановити їх

apt-get build-dep slrn=1.0.1-10

Якщо це вдалося, спробуйте створити пакет ще раз (КРОК 2). Якщо це не вдасться, тоді потрібна подальша робота. Зверніть увагу, що debuildрозглядається залежність побудови у debian/controlфайлі, і ви можете змінити їх, якщо необхідно. Тож давайте поговоримо про це зараз. Ось збірки залежностей для slrn.

Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
 exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
 libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews

Альтернативою для використання apt-get build-depє встановлення їх вручну, виконуючи це

apt-get install debhelper libslang2-dev ...

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

Немає в наявності упакованих версій останніх версій програмного забезпечення. Доступні варіанти - упаковка новітньої версії.

У багатьох випадках упаковку можна використати з попередніх версій програмного забезпечення разом із новішими джерелами. Такий підхід може зіткнутися з проблемами, зокрема, патчі, застосовані до більш ранніх версій програмного забезпечення, можуть не застосовуватися тут, тому, можливо, доведеться повторно синхронізувати їх з джерелами. У вихідному форматі 3.0 (ковдру), який зараз стає стандартним, використовується ковдра, а виправлення розміщені в debian/patchesкаталозі.

Однак детальне обговорення цих питань виходить за рамки цієї посади.


Це насправді загальна дистрибуція (лише те, що сховища коду для нових матеріалів можна назвати по-різному, або вам доведеться діставати матеріали з спеціальних місць). Перевірте посібники вашого дистрибутива.
vonbrand

2

Один із способів, який завжди працює, не тільки в Debian, - це самостійно складати необхідне програмне забезпечення. (Я роблю це вже багато років на Debian, як тоді, коли мені потрібна була нова версія, яка була доступна, так і тоді, коли програмне забезпечення взагалі не було передбачено).

Я зберігаю локально складені пакети у /use/localвикористанні stow, що дозволяє мені зберігати всі файли, пов’язані з пакетом, у дереві підкаталогу, а потім робити посилання на це дерево. Це полегшує управління зібраними пакетами: встановлені файли не стикаються з наданими Debian файлами, і я можу видалити пакет за допомогою однієї команди.

Скажімо some_software, кроки зі збирання та встановлення пакету зазвичай є варіантом наступного:

  1. Завантажте .tarфайл тощо /usr/local/src/.

  2. Створіть файл, в /usr/local/packages/some_softwareякому описується, де я завантажив програмне забезпечення, що воно робить, яка його версія, і який містить примітки, що я повинен був зробити для компіляції (див. Нижче).

  3. Розпакуйте вміст .tarфайлу в /usr/local/tmp/some_software.

  4. Якщо ви збираєтесь із сховища, перегляньте сховище у відповідному підкаталозі (наприклад /usr/local/git/some_software) та компілюйте його,

  5. cdв цей каталог, дивитися на README, і INSTALLт.д.

  6. У більшості випадків configureв пакет є сценарій автоінструментів . Виклик за допомогою ./configure --prefix /usr/local/stow/some_software-versionцього файлів встановлюється в цьому підкаталозі. В іншому випадку прочитайте Makefileта з’ясуйте, як встановити шлях для встановлених файлів.

  7. Компілювати з make.

  8. Встановити за допомогою make install.

  9. cd /usr/local/stow, потім stow some_software-version

  10. Перевірте, чи працює.

Часто компіляція не працює з першої спроби: пакет може знадобитися бібліотекам і відповідним файлам, що містять відповідні файли, тому потрібно встановити правильні ...-devпакети з Debian. Або gccможна поскаржитися на речі, на які інша версія, про gccяку не використовує автор пакунку. Тому іноді доводиться читати код і виправляти їх, але це трапляється не так часто.


Намір цього питання, хоча, можливо, це було не зовсім зрозуміло, було описати, як встановлювати пакети програмного забезпечення для Debian. Можливо, я мушу зробити питання зрозумілішим. Чи stowстворює пакети Debian? З боку man це не схоже на це.
Faheem Mitha

@FaheemMitha Stow не знає про пакети Debian. Він управляє лише символічними посиланнями з набору окремих установочних каталогів на один каталог.
Kusalananda

@FaheemMitha: Якщо ви хочете перетворити самостійно складене програмне забезпечення в пакет Debian , тоді вам доведеться пакувати його самостійно, як і сервіс Debian. Але це занадто багато проблем, якщо ви будете єдиним користувачем, його встановлення /usr/localнабагато простіше і stowдопомагає керувати збереженими там файлами. Або інакше кажучи: для використання в Debian програмне забезпечення не повинно бути в пакеті Debian.
dirkt

Є одна велика перевага упаковки програмного забезпечення як пакета Debian, навіть для місцевого використання: якщо ви правильно описуєте залежності, встановлення пакета забезпечить встановлення залежностей ...
Stephen Kitt

@StephenKitt: Якщо програмне забезпечення для упаковки правильно розроблено як пакунок Debian - це найкраще рішення. Мінус у тому, що доведеться вкласти час, щоб упакувати його належним чином ...
dirkt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.