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

<p>допустим, у вас запущен сервер, и вы не хотите переходить на testing (squeeze) из stable (lenny), чтобы просто установить необходимый пакет или два.</p><p>каков наилучший способ установки только определенных пакетов из testing?</p>

<p><strong> apt\_preferences </strong></p><p>определите уровень по умолчанию, до которого система должна "безопасно обновиться", в файле/etc/apt/preferences:<br> <a href="http://linux.die.net/man/5/apt\_preferences">man apt\_preferences</a> </p><p>с apt\_preferences можно многое сделать, но ради простоты ...</p><p>мне нужно было установить один пакет (automysqlbackup), который был доступен только в тестировании. решением было добавить следующее в/etc/apt/предпочтения:</p><pre><code>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 </code></pre><p>если в /etc/apt/sources.list добавлено несколько репозиториев, aptitude теперь будет обновляться только до указанного вами релиза, даже если перечислены репозитории более поздних выпусков (в данном случае "стабильный").</p><pre><code>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 </code></pre><p>итак, чтобы установить этот пакет, все, что вам нужно сделать, это:</p><pre><code>$ aptitude install -t testing packagename </code></pre>

<p>многие люди, похоже, боятся смешивать стабильное с тестированием, но, честно говоря, тестирование само по себе довольно стабильно, и с правильными настройками и проверкой решений вы можете избежать "дрейфа стабильности", который ставит ваши основные пакеты на нестабильный путь.</p><p><em> "тестирование довольно стабильное ??" </em>, спросите вы. да. для того чтобы пакет мог перейти от нестабильного к тестируемому, он должен иметь ноль открытых ошибок в течение 10 дней подряд. скорее всего, что, особенно для более популярных пакетов, кто-то собирается представить отчет об ошибке для нестабильной версии, если что-то не так.</p><p>даже если вы не хотите смешивать окружения, все равно приятно иметь такую возможность на случай, если вы столкнетесь с чем-то, что требует более новой версии, чем в стабильной.</p><p><strong>вот что я рекомендую для настройки:</strong></p><p>сначала создайте следующие файлы в <code>/etc/apt/preferences.d</code>:</p><p><strong><code>stable.pref</code></strong>:</p><pre><code># 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 </code></pre><p><strong><code>testing.pref</code></strong>:</p><pre><code># 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 </code></pre><p><strong><code>unstable.pref</code></strong>:</p><pre><code># 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 </code></pre><p><strong><code>experimental.pref</code></strong>:</p><pre><code># 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 </code></pre><p>(не бойтесь нестабильных/экспериментальных вещей здесь. приоритеты достаточно низки, чтобы никогда не устанавливать автоматические компоненты. даже ветвь тестирования будет вести себя так, как будет только устанавливать пакеты, которые вы хотите быть в тестировании.)</p><p>теперь создаем соответствующий набор для <code>/etc/apt/sources.list.d</code>:</p><p><strong><code>stable.list</code></strong>: копировать из оригинала <code>/etc/apt/sources.list</code>. переименуйте старый файл во что-то вроде <code>sources.list.orig</code>.</p><p><strong><code>testing.list</code></strong>: то же, что <code>stable.list</code>, за исключением <code>testing</code>.</p><p><strong><code>unstable.list</code></strong>: то же, что <code>stable.list</code>, кроме <code>unstable</code>, и удалите списки безопасности.</p><p><strong><code>experimental.list</code></strong>: то же, что <code>unstable.list</code>, за исключением <code>experimental</code>.</p><p>вы также можете добавить <code>oldstable</code> в <code>sources.lists.d</code> а также <code>preferences.d</code> (используйте приоритет 1), хотя этот моникер будет иметь тенденцию истекать и исчезать до следующего стабильного цикла. в таких случаях вы можете использовать <code>http://archive.debian.org/debian/</code> и "hardcode" версии debian (etch, lenny и т. д.).</p><p>чтобы установить тестовую версию пакета, просто используйте <code>aptitude install lib-foobar-package/testing</code>, или просто перейдите в графический интерфейс aptitude и выберите версию внутри сведений о пакете (нажмите enter в пакете, который вы просматриваете).</p><p>если вы получаете жалобы на конфликты пакетов, сначала посмотрите на решения. в большинстве случаев первым будет "не устанавливать эту версию". научитесь использовать варианты разрешения и разрешения для каждого пакета. например, если вы устанавливаете foobar-package/testing, а первое решение - "не устанавливать foobar-package/testing", то пометьте этот выбор как отклоненный, и другие решения больше никогда не повернут по этому пути. в таких случаях вам, вероятно, придется установить несколько других пакетов тестирования.</p><p>если он становится слишком проблематичным (например, пытается обновить libc, ядро или какую-то другую огромную базовую систему), вы можете либо отклонить эти пути обновления, либо просто полностью отказаться от первоначального обновления. помните, что обновление будет происходить только до тестирования/нестабильности, если вы разрешите это.</p><p>правка: исправлены некоторые приоритетные булавки и обновлен список.</p>

<p>в <code>/etc/apt/apt.conf.d</code> добавить следующий файл</p><p><strong> <code>99defaultrelease</code> </strong>:</p><pre><code>apt::default-release "stable"; </code></pre><p>в <code>/etc/apt/sources.list.d</code> - добавить url для тестирования/нестабильных источников</p><p><strong> <code>stable.list</code> </strong>:</p><pre><code>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 </code></pre><p><strong> <code>testing.list</code> </strong>:</p><pre><code>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 </code></pre><p>запустить</p><pre><code>apt-get update </code></pre><p>а затем установите то, что вам нужно с</p><pre><code>apt-get -t testing install something </code></pre><p>будьте очень осторожны, если вы устанавливаете вещи, которые имеют много зависимостей. желательно не делать этого на производстве.</p><p>вы также можете попытать счастья в <a href="http://backports-master.debian.org/instructions/">backports</a> или аналогичном репозитории.</p>

<p>что бы это ни стоило, общий совет, который я всегда видел, это "не смешивайте стабильно ни с чем". большинство учебников по смешанным системам предназначены для смешанного тестирования и нестабильно.</p><p>кажется, что причина в том, что если вы смешиваете стабильное с тестированием, для самых базовых пакетов (таких как libc6) потребуются обновления (чтобы установить программное обеспечение из тестирования), и как только эти базовые пакеты перейдут к тестированию, вся система может дрейфовать таким образом.</p><p>вот две альтернативы:</p><ol> <li>используйте <a href="http://www.backports.org">backports</a> .</li> <li>установите исходную строку из тестирования и попробуйте <a href="http://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html">соберите более позднюю версию из исходного кода</a> .</li> </ol>

<p>документация по debian обширна в этом вопросе, и я настоятельно советую покопаться, так как она действительно раскроет всю прелесть системы debian.</p><p>взгляните на <a href="http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html#s-default-version">как сохранить смешанную систему</a> , она объяснит все, что вам нужно знать.</p>

<p>другой способ, который может помешать установке слишком большого количества зависимостей от testing или sid, заключается в следующем: вы указываете apt-get получить исходный пакет из testing или sid и создаете пакет для вашей системы с помощью инструментов debian (не нужно вручную тратить) с источниками).</p><p>цитирую отсюда:<br> <a href="https://wiki.debian.org/debianunstable#how\_do\_i\_backport\_a\_sid\_package\_to\_testing\_or\_stable.3f">https://wiki.debian.org/debianunstable#how\_do\_i\_backport\_a\_sid\_package\_to\_testing\_or\_stable.3f</a> </p><blockquote> <p><strong> как мне перенести пакет sid на тестирование или на стабильный? </strong></p> <p>установите исходный код debian (и инструменты разработки, особенно debhelper, devscripts и build-essential), а затем соберите пакет.</p> <p>шаг за шагом:</p> <pre><code>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 </code></pre> <p>полученные debs должны находиться в текущем каталоге и могут быть установлены с помощью dpkg -i the.deb.</p> </blockquote>

<p>я делал это в течение длительного периода времени, чтобы быть уверенным в том, что это достаточно безопасно и может быть удобно. при нижеуказанной настройке стабильная версия будет установлена по умолчанию, однако aptitude также позволит вам выбрать резервную версию или нестабильную версию, если это необходимо:</p><p><img src="https://i.stack.imgur.com/foxyk.png" alt="enter image description here"></p><p>есть четыре вещи, которые нужно отредактировать, нужно установить релиз пиннинга по умолчанию, добавить источники обратного порта и нестабильно добавленные, понизив приоритет пиннинга пакетов backports/unstable, и настройки отображения aptitude необходимо изменить, чтобы отобразить пиннинг.</p><ul> <li>создайте <strong>'/ etc/apt/apt.conf.d/10defaultrelease'</strong> и создайте его содержимое следующим образом:</li> </ul><pre> apt :: default-release "stable"; </pre><ul> <li>отредактируйте ваш <strong>'/ etc/apt/sources.list'</strong> для добавления нестабильных и обратных источников, чтобы они выглядели примерно так:</li> </ul><pre> # deb cdrom: [debian gnu/linux 6.0.0 \_squeeze\_ - официальная мульти-архитектура 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 , ранее известный как '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 # несвободный ex , sun java # deb http://ftp.us.debian.org/debian/ squeeze non free # deb-src http://ftp.us.debian.org/debian/ сжать несвободно </pre><ul> <li>правка <strong><code>etc/apt/preferences</code></strong> закрепление файла - если файл не существует, создайте его.</li> </ul><pre> # приоритеты закрепления пакетов # см. http://wiki.debian.org/aptpreferences и http://manpages.debian.net/cgi-bin/man.cgi?query=apt\_preferences # # в гайке shell самый высокий pin устанавливается # # следующие настройки по умолчанию следующие, в дополнение к нашему настройки: # 990 - для версии, которая не установлена, но до принадлежит нашей настройке `apt :: default-relase" stable "`. # 500 - для версий, которые не установлены и работают не относится к целевой версии # 100 - для пакетов, которые уже установлены, это также означает, что другие версии того же пакета # 1 - для экспериментальных пакетов; пакеты с "notautomatic: yes" # # наши ссылки # 400 - бэкпорты, которые можно безопасно устанавливать без необходимости обновления других пакетов # 50 - нестабильные пакеты, принудительная установка на экране сведений, может привести к конфликтам пакет: * pin: release n = squeeze-backports pin-p rioity: 400 упаковка: * пин: выпуск a = нестабильный </pre><ul> <li>создать <strong>'/ etc/apt/apt.conf.d/100guiconf'</strong> и настроить aptitude таким образом, чтобы он отображал информацию закрепления.</li> </ul><pre> aptitude :: ui :: package-display-format "% c% a% m% p% z% v% v% i"; </pre>

<p>если ваш выбор пакетов более сложен или установка будет повторяться на нескольких машинах, вы можете рассмотреть возможность создания частного репозитория, который отражает подмножество официальных репозиториев. это требует небольшой работы по настройке репозитория, но вознаграждение легко поддерживать с минимальным количеством настроек на каждом клиенте и повторяемыми результатами при выполнении десятков установок. я считаю это полезным, даже когда устанавливаются только один или два пакета, и использую этот метод для автоматизации и поддержки облачных установок. один сервер на дешевом vps может обрабатывать десятки частных репозиториев.</p><p>чтобы настроить свой сервер частного репозитория:</p><pre><code># 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 </code></pre><p>затем настройте выбранный вами веб-сервер для обслуживания статических файлов репозитория. возможно защитить хранилище сертификатом безопасности и базовой аутентификацией.</p><p>чтобы автоматически поддерживать ваш личный репозиторий и получать обновления из апстрима, поместите вышеперечисленное в скрипт и запустите из задания cron.</p><p>чтобы настроить клиентский компьютер, на своем клиентском компьютере:</p><pre><code># 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 </code></pre><p>чтобы поддерживать клиентский компьютер и получать все обновления частного хранилища, на своем клиентском компьютере:</p><pre><code># update. apt-get update # upgrade. apt-get upgrade </code></pre>

<p>другой вариант - загрузить исходный пакет из тестирования. apt может автоматически собрать исходный пакет после его загрузки. таким образом, ваши стабильные пакеты не будут затронуты тестированием обновлений. единственный компромисс в том, что это займет больше времени, чем просто загрузка и установка бинарного пакета.</p><p>чтобы настроить apt для загрузки исходных пакетов из тестирования, просто добавьте:</p><pre><code>deb-src http://<your debian mirror here> testing main </code></pre><p>если вы просто хотите следовать текущему тестированию, а не будущему, замените "тестирование" текущим кодовым именем (на момент написания статьи это "бастер")</p>