Univention Bugzilla – Bug 46099
AttributeError: 'module' object has no attribute 'policies'
Last modified: 2021-09-16 00:47:25 CEST
ladda update from UCS-3.2-8:amd64 to currently 4.1-5 (on to 4.2-3): Starting univention-upgrade. Current UCS version is 4.1-5 errata494 Checking for local repository: none Checking for package updates: none Checking for app updates: Traceback in univention-upgrade: Traceback (most recent call last): File "/usr/sbin/univention-upgrade", line 434, in do_update update_available = performUpdate(options, checkForUpdates=options.check, silent=False) File "/usr/sbin/univention-upgrade", line 138, in performUpdate if func(options, checkForUpdates, silent): File "/usr/sbin/univention-upgrade", line 240, in do_app_updates from univention.appcenter.actions import get_action, Abort File "/usr/lib/pymodules/python2.7/univention/appcenter/__init__.py", line 35, in <module> from univention.appcenter.actions import get_action, all_actions File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/__init__.py", line 276, in <module> __import__('univention.appcenter.actions.%s' % pymodule_name) File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/docker_install.py", line 39, in <module> from univention.appcenter.actions.install import Install File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/install.py", line 37, in <module> from univention.appcenter.actions.install_base import InstallRemoveUpgrade File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/install_base.py", line 45, in <module> from univention.appcenter.actions.register import Register File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/register.py", line 46, in <module> from univention.appcenter.udm import create_object_if_not_exists, get_app_ldap_object, remove_object_if_exists, create_recursive_container File "/usr/lib/pymodules/python2.7/univention/appcenter/udm.py", line 49, in <module> udm_modules.update() File "/usr/lib/pymodules/python2.7/univention/admin/modules.py", line 94, in update os.path.walk(dir, _walk, p) File "/usr/lib/python2.7/posixpath.py", line 246, in walk walk(name, func, arg) File "/usr/lib/python2.7/posixpath.py", line 238, in walk func(arg, top, names) File "/usr/lib/pymodules/python2.7/univention/admin/modules.py", line 79, in _walk m = __import__(mod, globals(), locals(), name) File "/usr/lib/pymodules/python2.7/univention/admin/handlers/policies/policy.py", line 53, in <module> for pol in univention.admin.handlers.policies.policies: AttributeError: 'module' object has no attribute 'policies'
Problem: /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py is an empty file instead of a symlink to the exiting file. Fix: rm /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py ln -s /usr/share/pyshared/univention/admin/handlers/policies/__init__.py /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py
root@dimma:/usr/lib/pymodules/python2.7/univention/admin/handlers# find -name __init__.py -type f ./policies/__init__.py ./settings/__init__.py ./container/__init__.py
cd /usr/lib/pymodules/python2.7 && find univention/admin/handlers -type f -name __init__.py -exec ln -snf /usr/share/pyshared/{} {} \; after EACH patchlevel updater; Something is seriously broken on dimma and ladda.
Running the following command breaks it each time: update-python-modules -v /usr/share/python-support/python-univention-directory-manager.public ... remove /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py remove /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.pyc remove /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.py remove /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.pyc Generation of /usr/lib/pymodules/python2.7/.path... create namespace /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.py create namespace /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py ... cd /usr/lib/pymodules/python2.7 && find univention/admin/handlers -type f -name __init__.py univention/admin/handlers/policies/__init__.py univention/admin/handlers/container/__init__.py
# grep -h __init__.py /usr/share/python-support/*.public|sort|uniq -d/usr/share/pyshared/univention/admin/handlers/appcenter/__init__.py /usr/share/pyshared/univention/admin/handlers/container/__init__.py /usr/share/pyshared/univention/admin/handlers/oxmail/__init__.py /usr/share/pyshared/univention/admin/handlers/policies/__init__.py /usr/share/pyshared/univention/admin/handlers/settings/__init__.py Coincidence? # grep -h __init__.py /usr/share/python-support/*.public|sort|uniq -d|grep -Ff - /usr/share/python-support/*.public|sed 's,/usr/share/,,g' python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/container/__init__.py python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/policies/__init__.py python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/settings/__init__.py python-support/univention-management-console-module-appcenter.public:pyshared/univention/admin/handlers/appcenter/__init__.py python-support/univentionUDMModule_appcenter_app.public:pyshared/univention/admin/handlers/appcenter/__init__.py python-support/univentionUDMModule_container_msgpo.public:pyshared/univention/admin/handlers/container/__init__.py python-support/univentionUDMModule_oxmail_oxcontext.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxdomain.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxfetchmailmulti.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxfetchmailsingle.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxfolder.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxlists.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_oxmail_oxmail.public:pyshared/univention/admin/handlers/oxmail/__init__.py python-support/univentionUDMModule_policies_mailquota.public:pyshared/univention/admin/handlers/policies/__init__.py python-support/univentionUDMModule_settings_msprintconnectionpolicy.public:pyshared/univention/admin/handlers/settings/__init__.py python-support/univentionUDMModule_settings_mswmifilter.public:pyshared/univention/admin/handlers/settings/__init__.py
(In reply to Philipp Hahn from comment #3) > Something is seriously broken on dimma and ladda. omar as well, as it seems.
Occured again on omar two days ago (just noticed it today).
Occured again on omar.
And again on omar.
# grep -l pyversions=2.6 /usr/share/python-support/univentionUDM*.public /usr/share/python-support/univentionUDMHook_univention-openvpn.public /usr/share/python-support/univentionUDMModule_container_msgpo.public /usr/share/python-support/univentionUDMModule_policies_mailquota.public /usr/share/python-support/univentionUDMModule_settings_msprintconnectionpolicy.public /usr/share/python-support/univentionUDMModule_settings_mswmifilter.public /usr/share/python-support/univentionUDMSyntax_univention-openvpn-schema.public /usr/sbin/update-python-modules iterates over all files in /usr/lib/pymodules/python2.7/ and looks for their corresponding source packages. The 3 __init__.py are contained in multiple packages and their *.public files list them as Python2.6 *only*, the they get removed from 2.7! # grep -l pyversions=2.6 /usr/share/python-support/univentionUDM*.public | xargs grep __init__ /usr/share/python-support/univentionUDMModule_container_msgpo.public: /usr/share/pyshared/univention/admin/handlers/container/__init__.py /usr/share/python-support/univentionUDMModule_policies_mailquota.public: /usr/share/pyshared/univention/admin/handlers/policies/__init__.py /usr/share/python-support/univentionUDMModule_settings_msprintconnectionpolicy.public:/usr/share/pyshared/univention/admin/handlers/settings/__init__.py /usr/share/python-support/univentionUDMModule_settings_mswmifilter.public: /usr/share/pyshared/univention/admin/handlers/settings/__init__.py # udm settings/udm_module list | sed -ne 's/^DN: //p' cn=policies/mailquota,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de cn=settings/msprintconnectionpolicy,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de cn=settings/mswmifilter,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de The *.public files are created by management/univention-directory-manager-modules/listener/udm_extension.py, which uses the "default_python_version" (from `/usr/bin/pyversions`) of the system *at* *the* *time* *the* *extension* *is* *registered* - it never gets updates later on when it changes. dimma, ladda, omar where all python2.6 back then, so only 2.6 is listed.
After deleting those duplicate __init__.py entries from the /usr/share/python-support/*.public files generated by the broken udm_modules extension mechanism I was finally able to update dimma/omar/ladda to UCS-4.3-0 without Python getting broken again.
This issue has been filled against UCS 4.1. The maintenance with bug and security fixes for UCS 4.1 has ended on 5st of April 2018. Customers still on UCS 4.1 are encouraged to update to UCS 4.3. Please contact your partner or Univention for any questions. If this issue still occurs in newer UCS versions, please use "Clone this bug" or simply reopen the issue. In this case please provide detailed information on how this issue is affecting you.
Since we migrated to dh-python instead of python-support this should not occur anymore.