В системе стоит пакет 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 устанавливает без проблем
Created attachment 14832 [details] fakepkg 1.0
Created attachment 14833 [details] fakepkg 2.0
Created attachment 14834 [details] spec
Воспроизводится в p10, c10f1
https://github.com/ansible-collections/community.general/issues/7414 продублировал в апстрим
Неправильно заполняется строка 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:
Воспроизводится как с 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 Можно проще, например, добавить задание с новой версией какого-либо пакета, и он тоже не обновится.
пофиксено - https://github.com/ansible-collections/community.general/issues/7414 https://github.com/ansible-collections/community.general/pull/7577
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.