Problem: Installing An App Fails

Problem

Trying to install an app through UMC stalls at 100% but the installation fails.

Environment

Looking at /var/log/univention/appcenter.log you will see a message like this:

  8279 actions.install                  20-03-05 16:23:22 [   ERROR]: Type or value exists: univentionAppInstalledOnServer: value #3 provided more than once
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/__init__.py", line 226, in call_with_namespace
    result = self.main(namespace)
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/install.py", line 84, in main
    return self.do_it(args)
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/install_base.py", line 119, in do_it
    self._do_it(app, args)
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/docker_install.py", line 71, in _do_it
    ret = super(Install, self)._do_it(app, args)
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/install.py", line 104, in _do_it
    self._register_app(app, args)
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/actions/register.py", line 438, in _register_app
    ldap_object.add_localhost()
  File "/usr/lib/python2.7/dist-packages/univention/appcenter/udm.py", line 245, in add_localhost
    self._udm_obj.modify()
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 651, in modify
    dn = self._modify(modify_childs, ignore_license=ignore_license, response=response)
  File "/usr/lib/python2.7/dist-packages/univention/admin/handlers/__init__.py", line 1328, in _modify
    self.dn = self.lo.modify(self.dn, ml, ignore_license=ignore_license, serverctrls=serverctrls, response=response)
  File "/usr/lib/python2.7/dist-packages/univention/admin/uldap.py", line 902, in modify
    raise univention.admin.uexceptions.ldapError(_err2str(msg), original_exception=msg)
ldapError: Type or value exists: univentionAppInstalledOnServer: value #3 provided more than once
 10436 actions.upgrade-search           20-03-05 17:11:09 [   DEBUG]: Calling upgrade-search
 10436 actions.upgrade-search.progress  20-03-05 17:11:09 [   DEBUG]: 0
 10436 actions.update                   20-03-05 17:11:09 [   DEBUG]: Calling update

Solution

The attribute of univentionAppInstalledOnServer is already set to a value. It might be an issue with the the capitalization of the entry. However, delete the attribute value and restart the installation.

Step 1

Identify the object with univention-ldapsearch and use for the next steps the object for the app in question (here samba4, note take care to use the correct version):

univention-ldapsearch "univentionAppInstalledOnServer" dn
root@master:~# univention-ldapsearch "univentionAppInstalledOnServer=*" dn
# extended LDIF
#
# LDAPv3
# base <dc=multi,dc=ucs> (default) with scope subtree
# filter: univentionAppInstalledOnServer=*
# requesting: dn 
#

# nagios_4.3, nagios, apps, univention, multi.ucs
dn: univentionAppID=nagios_4.3,cn=nagios,cn=apps,cn=univention,dc=multi,dc=ucs

# samba4_4.7, samba4, apps, univention, multi.ucs
dn: univentionAppID=samba4_4.7,cn=samba4,cn=apps,cn=univention,dc=multi,dc=ucs

# samba4_4.10, samba4, apps, univention, multi.ucs
dn: univentionAppID=samba4_4.10,cn=samba4,cn=apps,cn=univention,dc=multi,dc=ucs


# search result
search: 3
result: 0 Success

Step 2

Get the attribute values of the object:

univention-ldapsearch "univentionAppID=samba4_4.10"
[...]
univentionAppID: samba4_4.10
univentionAppVersion: 4.10
univentionAppWebsiteMaintainer: [en] http://www.univention.com
univentionObjectType: appcenter/app
univentionAppServerRole: domaincontroller_master
univentionAppServerRole: domaincontroller_slave
univentionAppServerRole: domaincontroller_backup
univentionAppInstalledOnServer: master.multi.ucs
univentionAppInstalledOnServer: backup.multi.ucs
univentionAppInstalledOnServer: Slave.multi.ucs

Step 3

Modify the object by deleting the entry of the host with the issue:

root@master:~# ldapmodify -D "$( ucr get ldap/hostdn )" -y /etc/machine.secret <<EOR
dn: univentionAppID=samba4_4.10,cn=samba4,cn=apps,cn=univention,dc=multi,dc=ucs
changetype: modify
delete: univentionAppInstalledOnServer
univentionAppInstalledOnServer: Slave.multi.ucs
EOR

Step 4

Retry the installation on the server now:
univention-app install samba4