Вопрос Проблемы с U1DB с помощью apparmor


У меня проблемы с u1db и apparmor. Приложение прекрасно работает, но когда оно упаковано, apparmor не позволяет приложению сохранять данные в $ HOME / .local / share / .., поэтому я не могу фактически сохранить настройки между различными исполнениями. Это то, что я могу прочитать в моем журнале ...

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

Файл apparmor json:

{
"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 <flscogna@gmail.com>",
"name": "com.ubuntu.developer.flscogna.ubuntu-netwalk",
"title": "Ubuntu Netwalk",
"version": "0.9"
}

И U1DB внутри приложения:

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));
    }
}

Если у кого-то есть идея, почему это не работает, это будет действительно очень оценено ... спасибо заранее: D


2
2018-01-06 13:13


происхождения




ответы:


Убедитесь, что ваше имя приложения указано в программе как «com.ubuntu.developer.flscogna.ubuntu-netwalk», как и в файле манифеста. В приложении QML установите applicationName атрибут MainView к этому значению. В приложении C ++ вызовите

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

Когда он запускается, программа использует это значение, чтобы выяснить, какая директория доступна для записи, но apparmor использует значение в файле манифеста, чтобы решить, где разрешить доступ к файловой системе. Если это не то же самое, у вас возникают проблемы. (Почему программа не может получить свое имя приложения непосредственно из файла манифеста, я не знаю).


2
2018-01-22 02:05



Да! Вы определенно поняли это правильно ... Я думал, что имени в манифесте было достаточно, но я ошибся ... Спасибо вам большое. Вы сделали мой день! - Swordfish90