From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 To: devel@lists.altlinux.org References: <20200131083654.55647-1-darktemplar@altlinux.org> From: Aleksei Nikiforov Message-ID: Date: Fri, 31 Jan 2020 18:48:58 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=koi8-r; format=flowed Content-Language: ru Content-Transfer-Encoding: 8bit Subject: Re: [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jan 2020 15:49:05 -0000 Archived-At: List-Archive: List-Post: 31.01.2020 17:53, Ivan Zakharyaschev пишет: > Hello! > > Спасибо! А есть примеры пакетов, с которыми можно проверить? > Да. google-chrome, rpm с официального сайта. Если не поставить google-chrome-preinstall, то при его установке пакет может попытаться через "rpm --import" импортировать ключи, и в зависимости от условий, которые я пока что не выяснял, либо будет сообщение об ошибке о том, что /var/lib/rpm/.rpm.lock занят, либо при импорте двух таких ключей в системе создадутся два пакета с именем gpg-pubkey. В принципе, для воспроизведения проблемы не обязательно даже скачивать и ставить google-chrome. Достаточно сгенерировать 2 разных gpg ключа (или взять существующие), экспортировать их публичные части через 'gpg --export -a $KEYID' в файл и импортировать полученные файлы в rpm через 'rpm --import $filename' от рута. После этого apt начнёт ругаться на дублированные пакеты gpg-pubkey, содержащие импортированные ключи, а при попытке их удалить - будет падать. Данный патч исправляет падение в таком случае. Второй патч, который я прислал чуть позже, исправляет другую проблему, связанную с данной ситуацией. Я добавил конфигурацию в файл /etc/apt/apt.conf.d/chrome.conf следующего вида: RPM { Allow-Duplicated { "^gpg-pubkey"; }; }; После применения этого патча apt не падает при удалении пакетов gpg-pubkey, а указанный конфиг убирает предупреждение об их дублировании. Однако, команда apt-get remove gpg-pubkey выдаёт сообщение, что в системе нет пакетов с именем gpg-pubkey, хотя rpm -q gpg-pubkey говорит о наличии нескольких таких пакетов. Второй патч соответственно исправляет эту ситуацию, приводя работу с такими пакетами к такому же виду, в каком apt обрабатывает другие дублированные пакеты из репозитория, например, kernel-image-un-def, т.е. apt выдаёт все имеющиеся версии и предлагает пользователю указать нужные. > On Fri, 31 Jan 2020, Aleksei Nikiforov wrote: > >> --- >> apt/apt-pkg/rpm/rpmpm.cc | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/apt/apt-pkg/rpm/rpmpm.cc b/apt/apt-pkg/rpm/rpmpm.cc >> index e00630f..4bca9f4 100644 >> --- a/apt/apt-pkg/rpm/rpmpm.cc >> +++ b/apt/apt-pkg/rpm/rpmpm.cc >> @@ -81,7 +81,12 @@ std::string rpm_name_conversion(const pkgCache::PkgIterator &Pkg) >> #if RPM_VERSION >= 0x040202 >> // This is needed for removal to work on multilib packages, but old >> // rpm versions don't support name.arch in RPMDBI_LABEL, oh well... >> - Name = Name + "." + Pkg.CurrentVer().Arch(); >> + // Note: some 3rd-party packages may still miss arch, so only use it >> + // when it's present >> + if (Pkg.CurrentVer().Arch() != nullptr) >> + { >> + Name = Name + "." + Pkg.CurrentVer().Arch(); >> + } >> #endif >> >> return Name; >> -- >> 2.24.1 > > > > _______________________________________________ > Devel mailing list > Devel@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel >