У нас есть метапакет, подобный рабочему столу человечности, который требует, чтобы набор зависимостей выполнил некоторый внутренний, еще упакованный код. В настоящее время мы обновляем метапакет так, чтобы он потребовал> = текущая версия каждый раз, когда мы повторно упаковываем его так, чтобы его зависимости были обновлены, когда он будет установлен. Однако, если бы был способ обновить пакет и все его зависимости, не обновляя все пакеты затем, то это было бы намного более просто. Это возможно?
Не напрямую, насколько я знаю. Вы можете использовать небольшой фрагмент оболочки, чтобы сгенерировать список зависимостей пакета и обновить их (если вас не интересуют рекурсивные зависимости):
apt-get install our-metapackage $(dpkg-query -Wf '${Depends}' our-metapackage | sed 's/ *\(([^()]*)\)\? *[,|] */\n/g')
Альтернативным подходом будет поставка ваших пакетов через репозиторий с уникальным происхождением. Запишите файл предпочтений APT, который определяет только ваш репозиторий как имеющий обычный приоритет, а всё остальное - как имеющее слишком низкий приоритет для автоматической установки. (См. APT pinning в руководстве по APT для пояснений.) Я не буду вдаваться в подробности создания репозитория (это будет материал для отдельного вопроса, который вполне может уже существовать). Чтобы указать, что пакеты из вашего репозитория обновляются, а другие нет, запишите следующий файл как /etc/apt/preferences.nnutter
:
Package: *
Pin: release o=nnutter
Pin-Priority: 500
Package: *
Pin-Prority: 100
500 - обычный приоритет. 100 приводит к тому, что пакеты не обновляются, хотя пакет будет установлен, если этого потребуют зависимости. Запустите apt-get upgrade
или apt-get dist-upgrade
с этим файлом предпочтений APT, когда вам нужно обновить пакеты только из репозитория nnutter:
apt-get -o Dir::Etc::Preferences=/etc/apt/preferences.nnutter -o Dir::Etc::PreferencesParts=/etc/apt/preferences.nnutter.d upgrade
Вы можете использовать команду wajig, которая может использоваться для приостановки некоторых пакетов при обновлении
просто введите :
sudo wajig hold SomePackage
sudo wajig unhold
для получения более подробной информации