Bug 48091 - apt_rpm не обновляет пакеты
Summary: apt_rpm не обновляет пакеты
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: ansible (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Andrey Cherepanov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-10-20 14:23 MSK by Anton Shevtsov
Modified: 2023-12-11 15:46 MSK (History)
5 users (show)

See Also:


Attachments
fakepkg 1.0 (1.61 KB, application/x-rpm)
2023-10-20 14:23 MSK, Anton Shevtsov
no flags Details
fakepkg 2.0 (1.61 KB, application/x-rpm)
2023-10-20 14:24 MSK, Anton Shevtsov
no flags Details
spec (405 bytes, text/x-rpm-spec)
2023-10-20 14:25 MSK, Anton Shevtsov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Shevtsov 2023-10-20 14:23:33 MSK
В системе стоит пакет foo версии 1.0, в репозитории есть пакет foo версии 2.0.
При попытке его установить = выводится Nothing to install

Алгоритм воспроизведения

1. Создадим пакет-пустышку (fakepkg) с версией 1.0 и с версией 2.0 (см. аттачи)
2. Создадим локальный репо и положим туда наши файлы
# mkdir -p /opt/rpm/x86_64/RPMS.fake/
# cp fakepkg*.rpm /opt/rpm/x86_64/RPMS.fake/

3. Создадим описание этого репо
# echo 'rpm-dir file:/opt/rpm x86_64 fake' >> /etc/apt/sources.list

4. Проверим
# apt-repo  | grep fake
rpm-dir file:/opt/rpm x86_64 fake

5. установим версию 1.0 нашего пакет
# apt-get install fakepkg=1.0

6. проверим
# rpm -q fakepkg
fakepkg-1.0-alt1.x86_64

7. Установим ansible, и создадим простой плейбук с содержанием 
# cat /tmp/apt_rpm.yml
---

- name: Playbook
  connection: local
  gather_facts: false
  hosts: localhost
  tasks:


  - name: Ensure fakepkg rpm present
    apt_rpm:
      pkg: fakepkg
      update_cache: true
      state: present

8. Попробуем применить
# ansible-playbook -v -c local /tmp/apt_rpm.yml
Using /etc/ansible/ansible.cfg as config file
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [Playbook] ***********************************

TASK [Ensure fakepkg rpm present] *****************************************
ok: [localhost] => {"changed": false, "msg": "Nothing to install"}

PLAY RECAP ************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


Можно поиграть с детализацией ansible-playbook -vvvv -c local /tmp/apt_rpm.yml
Но суть та же.

apt-get install fakepkg=2.0 , равно как и dist-upgrade
устанавливает без проблем
Comment 1 Anton Shevtsov 2023-10-20 14:23:50 MSK
Created attachment 14832 [details]
fakepkg 1.0
Comment 2 Anton Shevtsov 2023-10-20 14:24:09 MSK
Created attachment 14833 [details]
fakepkg 2.0
Comment 3 Anton Shevtsov 2023-10-20 14:25:12 MSK
Created attachment 14834 [details]
spec
Comment 4 Anton Shevtsov 2023-10-20 14:25:52 MSK
Воспроизводится в p10, c10f1
Comment 5 Anton Shevtsov 2023-10-20 14:44:10 MSK
https://github.com/ansible-collections/community.general/issues/7414
продублировал в апстрим
Comment 6 Anton Shevtsov 2023-10-23 10:50:42 MSK
Неправильно заполняется строка packages из массива package, проверяется только имя, но не версия. Как грязный хак, на первое время можно убрать проверку вообще

--- /usr/lib/python3/site-packages/ansible/modules/packaging/os/apt_rpm.py      2023-03-03 12:26:05.000000000 +0500
+++ /root/apt_rpm.py    2023-10-23 12:47:54.503459007 +0500
@@ -189,8 +189,8 @@
 
     packages = ""
     for package in pkgspec:
-        if not query_package_provides(module, package):
-            packages += "'%s' " % package
+        #if not query_package_provides(module, package):
+        packages += "'%s' " % package
 
     if len(packages) != 0:
Comment 7 Alexander Makeenkov 2023-11-07 17:51:04 MSK
Воспроизводится как с ansible, так и с ansible-core.

(Ответ для Anton Shevtsov на комментарий #0)
> В системе стоит пакет foo версии 1.0, в репозитории есть пакет foo версии
> 2.0.
> При попытке его установить = выводится Nothing to install
> 
> Алгоритм воспроизведения
> 
> 1. Создадим пакет-пустышку (fakepkg) с версией 1.0 и с версией 2.0 (см.
> аттачи)
> 2. Создадим локальный репо и положим туда наши файлы
> # mkdir -p /opt/rpm/x86_64/RPMS.fake/
> # cp fakepkg*.rpm /opt/rpm/x86_64/RPMS.fake/
> 
> 3. Создадим описание этого репо
> # echo 'rpm-dir file:/opt/rpm x86_64 fake' >> /etc/apt/sources.list

Можно проще, например, добавить задание с новой версией какого-либо пакета, и он тоже не обновится.
Comment 9 Repository Robot 2023-12-11 15:46:14 MSK
ansible-core-2.16.1-alt1 -> sisyphus:

 Mon Dec 11 2023 Andrey Cherepanov <cas@altlinux> 2.16.1-alt1
 - New version.
 - Update apt_repo and apt_rpm from community.general 8.1.0 (ALT #48091).
 Fri Dec 01 2023 Andrey Cherepanov <cas@altlinux> 2.16.0-alt2
 - Excluded python3 library to python3-module-ansible.
 - Fixed build with ansible from python3-module-ansible-collections.