Назад | Перейти на главную страницу

Как я могу запустить стабильную версию Debian, но установить некоторые пакеты из тестирования?

Предположим, у вас есть сервер, и вы не хотите обновляться до Testing (Squeeze) со Stable (Lenny), чтобы просто установить один или два необходимых пакета.

Как лучше всего устанавливать только определенные пакеты из Testing?

Многие люди, кажется, боятся смешивать стабильное с тестированием, но, честно говоря, тестирование довольно стабильно само по себе, и с правильными настройками и проверкой решения вы можете избежать «дрейфа стабильности», который ставит ваши основные пакеты на нестабильный путь.

"Тестирование достаточно стабильное ??", ты спрашиваешь. Да. Чтобы пакет перешел из нестабильного режима в тестируемый, в нем не должно быть открытых ошибок в течение 10 дней подряд. Скорее всего, особенно для наиболее популярных пакетов, кто-то отправит отчет об ошибке для нестабильной версии, если что-то не так.

Даже если вы не хотите смешивать среды, все равно хорошо иметь возможность там, на случай, если вы столкнетесь с чем-то, для чего требуется более новая версия, чем та, которая находится в стабильной версии.

Вот что я рекомендую для настройки:

Сначала создайте следующие файлы в /etc/apt/preferences.d:

stable.pref:

# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent

Package: *
Pin: release a=stable
Pin-Priority: 900

testing.pref:

# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent

Package: *
Pin: release a=testing
Pin-Priority: 400

unstable.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

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

experimental.pref:

# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package

Package: *
Pin: release a=experimental
Pin-Priority: 1

(Не бойтесь нестабильного / экспериментального материала. Приоритеты достаточно низкие, чтобы он никогда не установил ничего из этого автоматически. Даже тестовая ветка будет вести себя, так как будет устанавливать только те пакеты, которыми вы хотите быть. в тестировании.)

Теперь создадим соответствующий набор для /etc/apt/sources.list.d:

stable.list: Копия с оригинала /etc/apt/sources.list. Переименуйте старый файл во что-то вроде sources.list.orig.

testing.list: Такой же как stable.list, кроме testing.

unstable.list: Такой же как stable.list, кроме unstable, и удалите списки безопасности.

experimental.list: Такой же как unstable.list, кроме experimental.

Вы также можете добавить oldstable в sources.lists.d и preferences.d (используйте приоритет 1), хотя это прозвище будет иметь тенденцию истекать и исчезать до следующего стабильного цикла. В таких случаях вы можете использовать http://archive.debian.org/debian/ и «жестко запрограммировать» версию Debian (etch, lenny и т. д.).

Чтобы установить тестовую версию пакета, просто используйте aptitude install lib-foobar-package/testingили просто перейдите в графический интерфейс aptitude и выберите версию в деталях пакета (нажмите Enter на пакете, который вы смотрите).

Если вы получаете жалобы на конфликты пакетов, сначала посмотрите решения. В большинстве случаев первым будет «не устанавливать эту версию». Научитесь использовать выбор решателя принятия / отклонения для каждого пакета. Например, если вы устанавливаете foobar-package / testing, и первое решение - «не устанавливать foobar-package / testing», отметьте этот вариант как отклоненный, и другие решения никогда больше не повернут на этот путь. В подобных случаях вам, вероятно, придется установить еще несколько пакетов тестирования.

Если он становится слишком сложным (например, пытается обновить libc, ядро ​​или какую-то другую огромную базовую систему), вы можете либо отклонить эти пути обновления, либо просто отказаться от первоначального обновления. Помните, что он обновит все до тестируемого / нестабильного, только если вы позволите.

РЕДАКТИРОВАТЬ: исправлены некоторые приоритетные контакты и обновлен список.

В /etc/apt/apt.conf.d добавьте следующий файл

99defaultrelease:

APT::Default-Release "stable";

в /etc/apt/sources.list.d - добавить url-адреса для тестирования / нестабильных источников

stable.list:

deb     http://ftp.de.debian.org/debian/    stable main contrib non-free
deb-src http://ftp.de.debian.org/debian/    stable main contrib non-free

deb     http://security.debian.org/         stable/updates  main contrib non-free

testing.list:

deb     http://ftp.de.debian.org/debian/    testing main contrib non-free
deb-src http://ftp.de.debian.org/debian/    testing main contrib non-free

deb     http://security.debian.org/         testing/updates  main contrib non-free

бегать

apt-get update

а затем установите то, что вам нужно, с

apt-get -t testing install something

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

Вы также можете попытать счастья в резервные копии или подобный репозиторий.

apt_preferences

Определите уровень по умолчанию, до которого система должна «безопасно обновиться», в файле / etc / apt / preferences:
мужчина apt_preferences

Вы можете многое сделать с помощью apt_preferences, но для простоты ...

Мне нужно было установить один пакет (autoMysqlBackup), который был доступен только в тестировании. Решением было добавить в / etc / apt / preferences следующее:

Explanation: Uninstall or do not install any Debian-originated
Explanation: package versions other than those in the stable distro
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10

При добавлении нескольких репозиториев в /etc/apt/sources.list aptitude теперь будет обновляться только до указанного вами выпуска, даже если в списке указаны репозитории более поздних выпусков (в данном случае «стабильный»).

deb http://mirror.aarnet.edu.au/debian/ lenny main
deb-src http://mirror.aarnet.edu.au/debian/ lenny main
deb http://mirror.aarnet.edu.au/debian/ squeeze main
deb-src http://mirror.aarnet.edu.au/debian/ squeeze main

Итак, чтобы установить этот пакет, все, что вам нужно сделать, это:

$ aptitude install -t testing packageName 

Как бы то ни было, общий совет, который я всегда видел, - «Не смешивайте стабильную версию ни с чем». Большинство руководств по смешанным системам предназначены для смешивания тестовых и нестабильных систем.

Причина, по-видимому, заключается в том, что если вы смешиваете стабильную работу с тестированием, очень простые пакеты (например, libc6) потребуют обновлений (для установки программного обеспечения из тестирования), и как только эти базовые пакеты перейдут к тестированию, вся система может так дрейфовать.

Вот две альтернативы:

  1. Использовать Backports.
  2. Установите исходную строку из тестирования и попробуйте построить более позднюю версию, которую вы хотите, из исходников.

Документация по debian обширна по этому вопросу, и я настоятельно рекомендую покопаться, так как она действительно раскроет красоту системы debian.

Посмотри на Как сохранить смешанную систему, он объяснит все, что вам нужно знать.

Другой способ, который может предотвратить установку слишком большого количества зависимостей из Testing или Sid, заключается в следующем: вы указываете apt-get получить исходный код пакета из Testing или Sid и создаете пакет для своей системы с помощью инструментов Debian (нет необходимости вручную возиться с источниками).

Цитата отсюда:
https://wiki.debian.org/DebianUnstable#How_do_I_backport_a_sid_package_to_testing_or_stable.3F

Как мне выполнить резервное копирование пакета sid для тестирования или стабильной версии?

Установите исходный код Debian (и инструменты разработки, особенно debhelper, devscripts и build-essential), а затем соберите пакет.

Шаг за шагом:

add a deb-src line for sid to your sources.list

apt-get update

apt-get build-dep PACKAGE_NAME

apt-get -b source PACKAGE_NAME 

Полученные файлы должны находиться в текущем каталоге и могут быть установлены с помощью dpkg -i the.deb.

Я делаю это в течение длительного периода времени, чтобы быть уверенным в том, что это достаточно безопасно и может быть сделано удобным. При приведенной ниже установке стабильная версия будет установлена ​​по умолчанию, однако Aptitude также позволит вам выбрать версию с резервным переносом или нестабильную версию, если это необходимо:

Есть четыре вещи, которые необходимо отредактировать: необходимо установить выпуск закрепления по умолчанию, источники нуждаются в добавлении резервных портов и нестабильных пакетов, снижение приоритета закрепления резервных портов / нестабильных пакетов, а также необходимо изменить настройки отображения aptitude для отображения закрепления.

  • Создать '/etc/apt/apt.conf.d/10defaultrelease' и сделайте его содержимое следующим образом:
Apt::default-Release "stable";
  • Отредактируйте свой '/etc/apt/sources.list' чтобы добавить нестабильные и резервные источники, чтобы это выглядело примерно так:
# deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official Multi-architecture amd64/i386 NETINST #1 20110205-14:45]/ squeeze main

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-update, previously know as 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# squeeze backports
# http://backports.debian.org/Instructions/
deb http://backports.debian.org/debian-backports squeeze-backports main

# unstable
# http://wiki.debian.org/AptPreferences
deb http://ftp.us.debian.org/debian/ unstable main
deb-src http://ftp.us.debian.org/debian/ unstable main

# non free ex. sun java
#deb http://ftp.us.debian.org/debian/ squeeze non-free
#deb-src http://ftp.us.debian.org/debian/ squeeze non-free
  • редактировать etc/apt/preferences закрепление файла - если файл не существует, создайте его.
# Package pinning priorities
# See http://wiki.debian.org/AptPreferences and http://manpages.debian.net/cgi-bin/man.cgi?query=apt_preferences
#
# In nut shell highest PIN gets installed
#
# Pining default are as follow which are in addition to our settings:
#   990 - for version that are not installed but DO belong to our `APT::Default-Relase "stable"` setting.
#   500 - for versions that are not installed and do not belong to the target release
#   100 - for packages that already installed, this also means other versions of same package
#     1 - for experimental packages; packages with "NotAutomatic: yes"
#
# Our Pinnings
#   400 - backports that can safely be installed without the need to update other packages
#    50 - unstable packages, install forced in the details screen, can result in conflicts

Package: *
Pin: release n=squeeze-backports
Pin-Priority: 400

Package: *
Pin: release a=unstable
  • Создайте '/etc/apt/apt.conf.d/100guiconf' и настроить Aptitude так, чтобы он отображал информацию о закреплении.
Aptitude::UI::Package-Display-Format "%c%a%M %p %Z %v %V %i";

Если ваш выбор пакетов более сложен или установка будет повторяться на нескольких машинах, вы можете подумать о настройке частного репозитория, который отражает подмножество официальных репозиториев. Это требует небольшой работы по настройке репозитория, но вознаграждение легко поддерживать с минимальным набором настроек для каждого клиента и повторяемыми результатами при выполнении десятков установок. Я считаю это полезным, даже когда устанавливается только один или два пакета, и использую этот метод для автоматизации и поддержки облачных установок. Один сервер на дешевом VPS может обрабатывать десятки частных репозиториев.

Чтобы настроить частный сервер репозитория:

# Install aptly.
apt-get install aptly

# Create local mirror (choose a source mirror near you).
aptly mirror create -filter="mirror-contains-no-packages" stretch-roundcube http://httpredir.debian.org/debian stretch main

# Configure filters for local mirror.
aptly mirror edit -filter="Name (% roundcube*)" stretch-roundcube

# Update local mirror.
aptly mirror update stretch-roundcube

# Drop previously published repositories and mirrors, if running these commands in a script.
aptly publish drop stretch

# Drop snapshot, if running these commands in a script.
aptly snapshot drop stretch-roundcube

# Create new snapshot.
aptly snapshot create stretch-roundcube from mirror stretch-roundcube

# Publish snapshot.
aptly publish snapshot -architectures=i386,amd64 -distribution=stretch -component=roundcube -label="Your Name" -origin="Your Name" stretch-roundcube

Затем настройте предпочтительный веб-сервер для обслуживания файлов статического репозитория. Возможна защита репозитория сертификатом безопасности и базовой аутентификацией.

Чтобы автоматически поддерживать свой частный репозиторий и получать обновления из восходящего потока, поместите указанное выше в сценарий и запустите из задания cron.

Чтобы настроить клиентскую машину, на клиентской машине:

# Configure private repository without authentication.
echo 'deb http://private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list

# Configure private repository with authentication.
echo 'deb https://hostname:password@private.repository.example.com/ stretch roundcube' > /etc/apt/sources.list.d/private.repository.example.com.list
apt-get install apt-transport-https

# Update.
apt-get update

# Install package.
apt-get install roundcube

Чтобы поддерживать клиентский компьютер и получать все обновления личного репозитория на клиентском компьютере:

# Update.
apt-get update

# Upgrade.
apt-get upgrade

Другой вариант - загрузить вместо этого исходный пакет из тестирования. APT может автоматически собрать исходный пакет после его загрузки. Таким образом, тестовые обновления не повлияют на ваши стабильные пакеты. Единственный компромисс в том, что это займет больше времени, чем просто загрузка и установка двоичного пакета.

Чтобы настроить APT для загрузки исходных пакетов из тестирования, просто добавьте:

deb-src http://<your debian mirror here> testing main

Если вы просто хотите следить за текущим тестированием, а не за будущими, замените «testing» на текущее кодовое имя (на момент написания это «buster»)

Что я делаю, чтобы не смешивать стабильный / тестируемый / экспериментальный, - это устанавливать Debian Sid в каталог моей стабильной системы Debian с debootstrap, тогда я смогу использовать нужные мне инструменты. В этом примере мне нужен недавний xmllint инструмент (XML обработка).

Для этого я сделал вот что:

apt install debootstrap
mkdir /home/sid-chroot
debootstrap --arch amd64 sid /home/sid-chroot http://mirrors.ircam.fr/pub/debian/
chroot /home/sid-chroot
apt install libxml2-utils

Теперь я могу выйти из chroot и используйте lib, 'hacking' LD_LIBRARY_PATH для конкретных библиотек динамической загрузки.

В ~/.bashrc:

alias xmllint='LD_LIBRARY_PATH=/home/sid-chroot/usr /home/sid-chroot/usr/bin/xmllint'

Теперь, когда я бегу xmllint, У меня версия 2.9.10 libxml2-utils. (Версии 2019 и 2016 гг.).

Плюсы:

  • Я могу легко установить любой другой пакет
  • ни один котенок не убит, нет риска разбить мой рабочий стол, смешивая тестовые / экспериментальные вещи
  • Я постоянно обновляю свою стабильную систему Debian с помощью обновлений безопасности
  • Я сохраняю свою систему в основном используется многими людьми (в отличие sid), таким образом, случайные программы по-прежнему достаточно совместимы

Минусы:

  • в системе требуется 410 МБ (мне все равно)
  • это нужно сглаживание в .bashrc