Erreur post-installation sur proxmox LXC "failed to set hostname"

Bonjour,
J’ai plusieurs instances yunohost sur un serveur proxmox 5.2
J’ai voulu installer une nouvelle machine a partir d’un ct LXC à base d’une Debian 9.

Lors de la post-installation tout s’arrête avec ce message :

30431 SUCCESS The domain has been created
55591 WARNING [‘sudo’, ‘hostnamectl’, ‘–static’, ‘set-hostname’, ‘xxxxxxxxx.com’]
55592 WARNING Could not set property: Failed to activate service ‘org.freedesktop.hostname1’: timed out

55592 DEBUG action [7150.1] executed in 39.836s
55592 DEBUG lock has been released
55592 ERROR Failed to set new hostname

J’ai re-tenté plusieurs fois en exécutant le script resetpostinstall et je ne sais pas pourquoi il veut absolument changer le hostname et pourquoi il n’y arrive pas…

Hello,

Ce problème est connus. Il est fixé pour le moment dans yunohost unstable (voir PR #508).

Temporairement dans les LXC qui pose problème tu peut “bypasser” le problème en éditant le fichier /usr/lib/moulinette/yunohost/tools.py ligne 236 tu ajoute return True (attention à correctement indenter).

Merci.

Peux-tu me dire où exactement ?

def _set_hostname(hostname, pretty_hostname=None):
“”"
Change the machine hostname using hostnamectl
“”"

if _is_inside_container():
    logger.warning("You are inside a container and hostname cannot easily b$
    return

if not pretty_hostname:
    pretty_hostname = "(YunoHost/%s)" % hostname

# First clear nsswitch cache for hosts to make sure hostname is resolved...
subprocess.call(['nscd', '-i', 'hosts'])

# Then call hostnamectl
commands = [
    "sudo hostnamectl --static    set-hostname".split() + [hostname],
    "sudo hostnamectl --transient set-hostname".split() + [hostname],
    "sudo hostnamectl --pretty    set-hostname".split() + [pretty_hostname]
]

for command in commands:
    p = subprocess.Popen(command,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)

    out, _ = p.communicate()

    if p.returncode != 0:
        logger.warning(command)
        logger.warning(out)
        raise MoulinetteError(errno.EIO, m18n.n('domain_hostname_failed'))
    else:
        logger.debug(out)

def _is_inside_container():

Check if we're inside a container (i.e. LXC)

Returns True or False


# See https://stackoverflow.com/a/37016302
p = subprocess.Popen("sudo cat /proc/1/sched".split(),
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)

out, _ = p.communicate()

return out.split()[1] != "(1,"

Par exemple

def _is_inside_container():
"""
Check if we're inside a container (i.e. LXC)

Returns True or False
"""
return True
# See https://stackoverflow.com/a/37016302
p = subprocess.Popen("sudo cat /proc/1/sched".split(),
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)

out, _ = p.communicate()

return out.split()[1] != "(1,"

Le but est juste que la methode _is_inside_container retourne True vu que l’on est dans un container.

Yessss

C’est ok.

Merci beaucoup