(Якщо у вас є питання / коментарі щодо цієї відповіді, будь ласка, додайте коментар. Або, якщо у вас є достатня кількість представників, ви можете надіслати мені повідомлення в чаті.)
Безпосередня установка двійкових пакетів з нової версії 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каталозі.
Однак детальне обговорення цих питань виходить за рамки цієї посади.