U1DB problemas com apparmor

2

Estou tendo problemas com u1db e apparmor. O aplicativo funciona bem, mas quando é empacotado, o apparmor não permite que o aplicativo salve dados em $ HOME / .local / share / .. então não posso salvar minhas configurações entre diferentes execuções. Isto é o que eu posso ler no meu log ...

kern.log:Jan  5 23:45:38 swordfish-XPS12 kernel: [10599.303619] type=1400 audit(1388961938.954:112): apparmor="DENIED" operation="mknod" parent=8115 profile="com.ubuntu.developer.flscogna.ubuntu-netwalk_ubuntu-netwalk_0.9" name="/home/swordfish/.local/share/ubuntu-netwalk/ubuntu-netwalk-settings.db" pid=13381 comm="ubuntu-netwalk" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000

O arquivo apparmor json é o seguinte:

{
"policy_groups": ["networking"],
"policy_version": 1
}

Manifest.json:

{
"description": "Ubuntu NetWalk app",
"framework": "ubuntu-sdk-13.10",
"hooks": {
"ubuntu-netwalk": {
"apparmor": "ubuntu-netwalk.json",
"desktop": "ubuntu-netwalk.desktop"
}
},
"maintainer": "Filippo Scognamiglio <[email protected]>",
"name": "com.ubuntu.developer.flscogna.ubuntu-netwalk",
"title": "Ubuntu Netwalk",
"version": "0.9"
}

E o U1DB dentro do aplicativo:

U1db.Database {
    id: settingsDatabase
    path: "ubuntu-netwalk-settings.db"
}

U1db.Document {
    database: settingsDatabase
    docId: "settings"
    create: true
    defaults:{"glowing": "true",
              "difficulty" : "INSANE",
              "roration" : "false"}

    Component.onCompleted: {
        var tempContents = {};
        tempContents = contents;
        glowing = Boolean(tempContents["glowing"]);
        difficulty = tempContents["difficulty"];
        rotation = Boolean(tempContents["rotation"]);
        console.log(JSON.stringify(tempContents));
    }

    Component.onDestruction: {
        var tempContents = {};
        tempContents["glowing"] = String(glowing);
        tempContents["difficulty"] = String(difficulty);
        tempContents["rotation"] = String(rotation);
        contents = tempContents;
        console.log(JSON.stringify(tempContents));
    }
}

Se alguém tem alguma ideia de por que isso não está funcionando, seria realmente muito apreciado ... agradeço antecipadamente: D

    
por Swordfish90 06.01.2014 / 14:13

1 resposta

2

Certifique-se de que o nome do seu aplicativo esteja configurado no programa para "com.ubuntu.developer.flscogna.ubuntu-netwalk", como está no arquivo de manifesto. Em um aplicativo QML, defina o atributo applicationName do MainView para esse valor. Em um aplicativo C ++, chame

QCoreApplication::setOrganizationName("");
QCoreApplication::setApplicationName("com.ubuntu.developer.flscogna.ubuntu-netwalk");

Quando ele está em execução, o programa usa esse valor para descobrir qual diretório é gravável, mas o apparmor usa o valor no arquivo de manifesto para decidir onde permitir o acesso ao sistema de arquivos. Se estes não são os mesmos, você tem problemas. (Por que o programa não pode obter o nome do aplicativo diretamente do arquivo de manifesto, eu não sei.)

    
por Robert Schroll 22.01.2014 / 03:05