Предположим, у вас есть сервер, и вы не хотите обновляться до 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) потребуют обновлений (для установки программного обеспечения из тестирования), и как только эти базовые пакеты перейдут к тестированию, вся система может так дрейфовать.
Вот две альтернативы:
Документация по 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 для отображения закрепления.
Apt::default-Release "stable";
# 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
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 гг.).
sid
), таким образом, случайные программы по-прежнему достаточно совместимы.bashrc