apt: автоматическое обновление зависит от пакета при установке новой версии из пакета

Ситуация следующая:

У нас есть пакет B и A (зависит от B). В репозитории имеем следующую картинку:

A
  version table
    0.0.1 (depends B=0.1.1) 
    0.0.2 (depends B=0.1.2)
    0.0.3 (depends B=0.1.3)
B 
  version table
    0.1.1
    0.1.2
    0.1.3
    0.1.4

На сервере мы установили A=0.0.1. В следующий раз, когда мы захотим обновить пакет A на сервере, мы не хотим обновлять пакет B вручную (просто запустите apt-get install A=0.0.2). С текущей конфигурацией это кажется невозможным.

Мы попробовали следующую конфигурацию: вместо создания следующей версии B мы начали создавать новые пакеты для каждой версии, например B-1, B-2.

A
  version table
    0.0.1 (depends B-1) 
    0.0.2 (depends B-2)
    0.0.3 (depends B-3)
B-1 
B-2 (provides B-1)
B-3 (provides B-2)

Эта конфигурация не сработала.

Есть ли какая-либо конфигурация, которая будет работать для нас?

Спасибо


apt
person mshogin    schedule 27.11.2016    source источник


Ответы (1)


Необходимые поля пакетов

  • ./aa_0.0.1/дебиан/управление

    • Package: aa
    • Зависит: бб-1
  • ./aa_0.0.2/дебиан/управление

    • Package: aa
    • Зависит: бб-2
  • ./bb_0.1.1/дебиан/управление

    • Package: bb-1
  • ./bb_0.1.2/дебиан/управление

    • Package: bb-2
    • Конфликты: бб-1

Скрипт для сборки и тестирования пакетов с использованием локального репозитория.

#!/bin/bash

# Rebuild packages
d=`pwd`
repo_name=mydebs
mydebs=${d}/${repo_name}
list=/etc/apt/sources.list.d/${repo_name}.list

rm -rf {aa,bb}*.{build,deb,changes,dsc,tar.gz} $mydebs
for i in ${d}/{aa_0.0.1,aa_0.0.2,bb_0.1.1,bb_0.1.2}
do
  cd $i
  debuild -us -uc
  rm -rf debian/{aa,bb-*,aa.*,bb.*} debian/files
done
cd $d

# Rebuild the repository
type dpkg-scanpackages >/dev/null 2>&1 || sudo apt-get install dpkg-dev

mkdir -p $mydebs
cp *.deb ${mydebs}/
cd $mydebs
dpkg-scanpackages --multiversion . /dev/null | gzip -9c > Packages.gz

echo "deb file:${mydebs} ./" | sudo tee $list
sudo apt-get update

# Return
cd $d

Тестирование

~debian_packaging$ sudo apt-get install aa=0.0.1-1
The following extra packages will be installed:
  bb-1
The following NEW packages will be installed:
  aa bb-1
0 upgraded, 2 newly installed and 0 to remove.
Setting up bb-1 (0.1.1-1) ...
Setting up aa (0.0.1-1) ...
​
~debian_packaging$ sudo apt-get install aa=0.0.2-1
The following extra packages will be installed:
  bb-2
The following packages will be REMOVED:
  bb-1
The following NEW packages will be installed:
  bb-2
The following packages will be upgraded:
  aa
1 upgraded, 1 newly installed and 1 to remove.
Removing bb-1 (0.1.1-1) ...
Setting up bb-2 (0.1.2-1) ...
Setting up aa (0.0.2-1) ...
person Dmitry A. Kulakov    schedule 29.11.2016