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