* [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing @ 2020-01-31 8:36 Aleksei Nikiforov 2020-01-31 14:53 ` Ivan Zakharyaschev 0 siblings, 1 reply; 3+ messages in thread From: Aleksei Nikiforov @ 2020-01-31 8:36 UTC (permalink / raw) To: devel; +Cc: Aleksei Nikiforov --- 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing 2020-01-31 8:36 [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing Aleksei Nikiforov @ 2020-01-31 14:53 ` Ivan Zakharyaschev 2020-01-31 15:48 ` Aleksei Nikiforov 0 siblings, 1 reply; 3+ messages in thread From: Ivan Zakharyaschev @ 2020-01-31 14:53 UTC (permalink / raw) To: ALT Linux Team development discussions; +Cc: Aleksei Nikiforov [-- Attachment #1: Type: text/plain, Size: 988 bytes --] Hello! Спасибо! А есть примеры пакетов, с которыми можно проверить? 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 -- Best regards, Ivan ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing 2020-01-31 14:53 ` Ivan Zakharyaschev @ 2020-01-31 15:48 ` Aleksei Nikiforov 0 siblings, 0 replies; 3+ messages in thread From: Aleksei Nikiforov @ 2020-01-31 15:48 UTC (permalink / raw) To: devel 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 > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-01-31 15:48 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-01-31 8:36 [devel] [PATCH for apt] Fix crash when removing 3rd-party packages with some tags missing Aleksei Nikiforov 2020-01-31 14:53 ` Ivan Zakharyaschev 2020-01-31 15:48 ` Aleksei Nikiforov
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git