| Summary: | apt_rpm не обновляет пакеты | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Anton Shevtsov <shevtsov.anton> | ||||||||
| Component: | ansible | Assignee: | Andrey Cherepanov <cas> | ||||||||
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||
| Severity: | normal | ||||||||||
| Priority: | P5 | CC: | amakeenk, cas, evg, iv, shevtsov.anton | ||||||||
| Version: | unstable | ||||||||||
| Hardware: | x86_64 | ||||||||||
| OS: | Linux | ||||||||||
| Attachments: |
|
||||||||||
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. |
В системе стоит пакет 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 устанавливает без проблем