为什么 KDE 4.6.0 上的 Akonadi 拒绝启动?

为什么 KDE 4.6.0 上的 Akonadi 拒绝启动?

Akonadi 拒绝在我全新安装的 KDE 4.6.0 上启动kubuntu-backportsUbuntu 10.10 Maverick Meerkat 上的 PPA 阻止我使用 KMail。以下是完整的错误输出:

patches@pleistocene:~/.local/share$ akonadictl start
正在启动 Akonadi 服务器...
   完毕。
patches@pleistocene:~/.local/share$ 连接到已弃用的信号 QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
搜索路径:(“/ home / patches / bin”,“/ usr / local / sbin”,“/ usr / local / bin”,“/ usr / sbin”,“/ usr / bin”,“/ sbin”,“/ bin”,“/ usr / games”,“/ usr / sbin”,“/ usr / local / sbin”,“/ usr / local / libexec”,“/ usr / libexec”,“/ opt / mysql / libexec”,“/ opt / local / lib / mysql5 / bin”,“/ opt / mysql / sbin”)
找到 mysql_install_db:“/usr/bin/mysql_install_db”
找到 mysqlcheck:“/usr/bin/mysqlcheck”
初始连接期间数据库进程意外退出!
可执行文件:“/usr/sbin/mysqld-akonadi”
参数:(“ --defaults-file = /home/patches/.local/share/akonadi//mysql.conf”,“ --datadir = /home/patches/.local/share/akonadi/db_data/”,“ --socket = /home/patches/.local/share/akonadi/socket-pleistocene/mysql.socket”)
标准输出:“”
stderr:“无法打开所需的默认文件:/home/patches/.local/share/akonadi//mysql.conf
默认处理中出现致命错误。程序已中止
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [注意] 插件‘FEDERATED’已被禁用。
/usr/sbin/mysqld-akonadi:找不到文件:“./mysql/plugin.frm”(errno:13)
110209 16:41:12 [错误] 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。
110209 16:41:12 InnoDB: 文件操作中出现操作系统错误编号 13。
InnoDB:错误意味着mysqld没有访问权限
InnoDB:目录。
InnoDB:文件名 ./ibdata1
InnoDB:文件操作调用:‘创建’。
InnoDB:无法继续操作。
退出代码:1
进程错误:“未知错误”
“[
0:akonadiserver(_Z11akBacktracev + 0x35)[0x8086055]
1:akonadiserver()[0x8086516]
2:[0xb772e400]
3:[0xb772e416]
4:/lib/libc.so.6(gsignal+0x51)[0xb6e9f941]
5:/lib/libc.so.6(中止+0x182)[0xb6ea2e42]
6:/usr/lib/libQtCore.so.4(_Z17qt_message_output9QtMsgTypePKc+0x8c)[0xb74d62dc]
7:akonadiserver(_ZN15FileDebugStream9writeDataEPKcx + 0xc4)[0x8087574]
8:/usr/lib/libQtCore.so.4(_ZN9QIODevice5writeEPKcx+0x8e)[0xb757168e]
9:/usr/lib/libQtCore.so.4(+0x103425) [0xb7581425]
10:/usr/lib/libQtCore.so.4(_ZN11QTextStreamD1Ev+0x3d)[0xb758295d]
11:akonadiserver(_ZN6QDebugD1Ev + 0x43)[0x8081b73]
12:akonadi服务器(_ZN13DbConfigMysql19startInternalServerEv+0x1c27)[0x810c177]
13:akonadiserver(_ZN7Akonadi13AkonadiServer20startDatabaseProcessEv + 0xe3)[0x8087a23]
14:akonadi服务器(_ZN7Akonadi13AkonadiServerC1EP7QObject+0xca)[0x8088b6a]
15:akonadi服务器(_ZN7Akonadi13AkonadiServer8instanceEv+0x48)[0x808a1d8]
16:akonadi服务器(主+0x364)[0x8080fb4]
17:/lib/libc.so.6(__libc_start_main + 0xe7)[0xb6e8bce7]
18:akonadiserver()[0x8080b81]
]
ProcessControl:应用程序“akonadiserver”返回退出代码 255(未知错误)
搜索路径:(“/ home / patches / bin”,“/ usr / local / sbin”,“/ usr / local / bin”,“/ usr / sbin”,“/ usr / bin”,“/ sbin”,“/ bin”,“/ usr / games”,“/ usr / sbin”,“/ usr / local / sbin”,“/ usr / local / libexec”,“/ usr / libexec”,“/ opt / mysql / libexec”,“/ opt / local / lib / mysql5 / bin”,“/ opt / mysql / sbin”)
找到 mysql_install_db:“/usr/bin/mysql_install_db”
找到 mysqlcheck:“/usr/bin/mysqlcheck”
初始连接期间数据库进程意外退出!
可执行文件:“/usr/sbin/mysqld-akonadi”
参数:(“ --defaults-file = /home/patches/.local/share/akonadi//mysql.conf”,“ --datadir = /home/patches/.local/share/akonadi/db_data/”,“ --socket = /home/patches/.local/share/akonadi/socket-pleistocene/mysql.socket”)
标准输出:“”
stderr:“无法打开所需的默认文件:/home/patches/.local/share/akonadi//mysql.conf
默认处理中出现致命错误。程序已中止
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [注意] 插件‘FEDERATED’已被禁用。
/usr/sbin/mysqld-akonadi:找不到文件:“./mysql/plugin.frm”(errno:13)
110209 16:41:12 [错误] 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。
110209 16:41:12 InnoDB: 文件操作中出现操作系统错误编号 13。
InnoDB:错误意味着mysqld没有访问权限
InnoDB:目录。
InnoDB:文件名 ./ibdata1
InnoDB:文件操作调用:‘创建’。
InnoDB:无法继续操作。
退出代码:1
进程错误:“未知错误”
“[
0:akonadiserver(_Z11akBacktracev + 0x35)[0x8086055]
1:akonadiserver()[0x8086516]
2:[0xb77ae400]
3:[0xb77ae416]
4:/lib/libc.so.6(gsignal+0x51)[0xb6f1f941]
5:/lib/libc.so.6(中止+0x182)[0xb6f22e42]
6:/usr/lib/libQtCore.so.4(_Z17qt_message_output9QtMsgTypePKc+0x8c)[0xb75562dc]
7:akonadiserver(_ZN15FileDebugStream9writeDataEPKcx + 0xc4)[0x8087574]
8:/usr/lib/libQtCore.so.4(_ZN9QIODevice5writeEPKcx+0x8e)[0xb75f168e]
9:/usr/lib/libQtCore.so.4(+0x103425) [0xb7601425]
10:/usr/lib/libQtCore.so.4(_ZN11QTextStreamD1Ev+0x3d)[0xb760295d]
11:akonadiserver(_ZN6QDebugD1Ev + 0x43)[0x8081b73]
12:akonadi服务器(_ZN13DbConfigMysql19startInternalServerEv+0x1c27)[0x810c177]
13:akonadiserver(_ZN7Akonadi13AkonadiServer20startDatabaseProcessEv + 0xe3)[0x8087a23]
14:akonadi服务器(_ZN7Akonadi13AkonadiServerC1EP7QObject+0xca)[0x8088b6a]
15:akonadi服务器(_ZN7Akonadi13AkonadiServer8instanceEv+0x48)[0x808a1d8]
16:akonadi服务器(主+0x364)[0x8080fb4]
17:/lib/libc.so.6(__libc_start_main + 0xe7)[0xb6f0bce7]
18:akonadiserver()[0x8080b81]
]
ProcessControl:应用程序“akonadiserver”返回退出代码 255(未知错误)
搜索路径:(“/ home / patches / bin”,“/ usr / local / sbin”,“/ usr / local / bin”,“/ usr / sbin”,“/ usr / bin”,“/ sbin”,“/ bin”,“/ usr / games”,“/ usr / sbin”,“/ usr / local / sbin”,“/ usr / local / libexec”,“/ usr / libexec”,“/ opt / mysql / libexec”,“/ opt / local / lib / mysql5 / bin”,“/ opt / mysql / sbin”)
找到 mysql_install_db:“/usr/bin/mysql_install_db”
找到 mysqlcheck:“/usr/bin/mysqlcheck”
初始连接期间数据库进程意外退出!
可执行文件:“/usr/sbin/mysqld-akonadi”
参数:(“ --defaults-file = /home/patches/.local/share/akonadi//mysql.conf”,“ --datadir = /home/patches/.local/share/akonadi/db_data/”,“ --socket = /home/patches/.local/share/akonadi/socket-pleistocene/mysql.socket”)
标准输出:“”
stderr:“无法打开所需的默认文件:/home/patches/.local/share/akonadi//mysql.conf
默认处理中出现致命错误。程序已中止
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [注意] 插件‘FEDERATED’已被禁用。
/usr/sbin/mysqld-akonadi:找不到文件:“./mysql/plugin.frm”(errno:13)
110209 16:41:12 [错误] 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。
110209 16:41:12 InnoDB: 文件操作中出现操作系统错误编号 13。
InnoDB:错误意味着mysqld没有访问权限
InnoDB:目录。
InnoDB:文件名 ./ibdata1
InnoDB:文件操作调用:‘创建’。
InnoDB:无法继续操作。
退出代码:1
进程错误:“未知错误”
“[
0:akonadiserver(_Z11akBacktracev + 0x35)[0x8086055]
1:akonadiserver()[0x8086516]
2:[0xb778b400]
3:[0xb778b416]
4:/lib/libc.so.6(gsignal+0x51)[0xb6efc941]
5:/lib/libc.so.6(中止+0x182)[0xb6effe42]
6:/usr/lib/libQtCore.so.4(_Z17qt_message_output9QtMsgTypePKc+0x8c)[0xb75332dc]
7:akonadiserver(_ZN15FileDebugStream9writeDataEPKcx + 0xc4)[0x8087574]
8:/usr/lib/libQtCore.so.4(_ZN9QIODevice5writeEPKcx+0x8e)[0xb75ce68e]
9:/usr/lib/libQtCore.so.4(+0x103425) [0xb75de425]
10:/usr/lib/libQtCore.so.4(_ZN11QTextStreamD1Ev+0x3d)[0xb75df95d]
11:akonadiserver(_ZN6QDebugD1Ev + 0x43)[0x8081b73]
12:akonadi服务器(_ZN13DbConfigMysql19startInternalServerEv+0x1c27)[0x810c177]
13:akonadiserver(_ZN7Akonadi13AkonadiServer20startDatabaseProcessEv + 0xe3)[0x8087a23]
14:akonadi服务器(_ZN7Akonadi13AkonadiServerC1EP7QObject+0xca)[0x8088b6a]
15:akonadi服务器(_ZN7Akonadi13AkonadiServer8instanceEv+0x48)[0x808a1d8]
16:akonadi服务器(主+0x364)[0x8080fb4]
17:/lib/libc.so.6(__libc_start_main + 0xe7)[0xb6ee8ce7]
18:akonadiserver()[0x8080b81]
]
ProcessControl:应用程序“akonadiserver”返回退出代码 255(未知错误)
搜索路径:(“/ home / patches / bin”,“/ usr / local / sbin”,“/ usr / local / bin”,“/ usr / sbin”,“/ usr / bin”,“/ sbin”,“/ bin”,“/ usr / games”,“/ usr / sbin”,“/ usr / local / sbin”,“/ usr / local / libexec”,“/ usr / libexec”,“/ opt / mysql / libexec”,“/ opt / local / lib / mysql5 / bin”,“/ opt / mysql / sbin”)
找到 mysql_install_db:“/usr/bin/mysql_install_db”
找到 mysqlcheck:“/usr/bin/mysqlcheck”
初始连接期间数据库进程意外退出!
可执行文件:“/usr/sbin/mysqld-akonadi”
参数:(“ --defaults-file = /home/patches/.local/share/akonadi//mysql.conf”,“ --datadir = /home/patches/.local/share/akonadi/db_data/”,“ --socket = /home/patches/.local/share/akonadi/socket-pleistocene/mysql.socket”)
标准输出:“”
stderr:“无法打开所需的默认文件:/home/patches/.local/share/akonadi//mysql.conf
默认处理中出现致命错误。程序已中止
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [警告] 无法创建测试文件 /home/patches/.local/share/akonadi/db_data/pleistocene.lower-test
110209 16:41:12 [注意] 插件‘FEDERATED’已被禁用。
/usr/sbin/mysqld-akonadi:找不到文件:“./mysql/plugin.frm”(errno:13)
110209 16:41:12 [错误] 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。
110209 16:41:12 InnoDB: 文件操作中出现操作系统错误编号 13。
InnoDB:错误意味着mysqld没有访问权限
InnoDB:目录。
InnoDB:文件名 ./ibdata1
InnoDB:文件操作调用:‘创建’。
InnoDB:无法继续操作。
退出代码:1
进程错误:“未知错误”
“[
0:akonadiserver(_Z11akBacktracev + 0x35)[0x8086055]
1:akonadiserver()[0x8086516]
2:[0xb784e400]
3:[0xb784e416]
4:/lib/libc.so.6(gsignal+0x51)[0xb6fbf941]
5:/lib/libc.so.6(中止+0x182)[0xb6fc2e42]
6:/usr/lib/libQtCore.so.4(_Z17qt_message_output9QtMsgTypePKc+0x8c)[0xb75f62dc]
7:akonadiserver(_ZN15FileDebugStream9writeDataEPKcx + 0xc4)[0x8087574]
8:/usr/lib/libQtCore.so.4(_ZN9QIODevice5writeEPKcx+0x8e)[0xb769168e]
9:/usr/lib/libQtCore.so.4(+0x103425) [0xb76a1425]
10:/usr/lib/libQtCore.so.4(_ZN11QTextStreamD1Ev+0x3d)[0xb76a295d]
11:akonadiserver(_ZN6QDebugD1Ev + 0x43)[0x8081b73]
12:akonadi服务器(_ZN13DbConfigMysql19startInternalServerEv+0x1c27)[0x810c177]
13:akonadiserver(_ZN7Akonadi13AkonadiServer20startDatabaseProcessEv + 0xe3)[0x8087a23]
14:akonadi服务器(_ZN7Akonadi13AkonadiServerC1EP7QObject+0xca)[0x8088b6a]
15:akonadi服务器(_ZN7Akonadi13AkonadiServer8instanceEv+0x48)[0x808a1d8]
16:akonadi服务器(主+0x364)[0x8080fb4]
17:/lib/libc.so.6(__libc_start_main + 0xe7)[0xb6fabce7]
18:akonadiserver()[0x8080b81]
]
ProcessControl:应用程序“akonadiserver”返回退出代码 255(未知错误)
“akonadiserver” 崩溃过于频繁,并且无法重新启动!

我尝试移动 ~/.local/share/akonadi 文件夹并重新运行它,我也尝试以全新用户身份启动 Akonadi,但都无济于事。

@djeikyb 请求:

补丁@pleistocene:~$ ls -ld ~/.local
drwxrwx--- 3 个补丁 补丁 4096 2011-02-07 03:15 /home/patches/.local


patch@pleistocene:~$ mysql_upgrade
查找“mysql”为:mysql
正在查找“mysqlcheck”为:mysqlcheck
使用连接参数运行“mysqlcheck”:“--port=3306”、“--socket=/var/run/mysqld/mysqld.sock”
mysqlcheck:尝试连接时出现错误:2002:无法通过套接字“/var/run/mysqld/mysqld.sock”(2)连接到本地 MySQL 服务器
严重错误:升级失败

补丁@pleistocene:~$ mysql_upgrade -S ~/.local/share/akonadi/socket-pleistocene/
查找“mysql”为:mysql
正在查找“mysqlcheck”为:mysqlcheck
使用连接参数运行“mysqlcheck”:“--port=3306”、“--socket=/var/run/mysqld/mysqld.sock”、“--socket=/home/patches/.local/share/akonadi/socket-pleistocene/”
mysqlcheck:尝试连接时出现错误:2002:无法通过套接字“/home/patches/.local/share/akonadi/socket-pleistocene/”(111)连接到本地 MySQL 服务器
严重错误:升级失败

答案1

这似乎是我每次安装时都会遇到的一个问题,我忘记了。上面的解决方案解决了这个问题,但我想知道是否还有其他方法。目前,Ubuntu 11.10 Oneiric,你所需要的只是

sudo aa-complain usr.sbin.mysqld-akonadi

让 Aknoadi 运行起来。但是让我们分析一下这个问题。

Apparmor 是一个管理安全实用程序,用于对程序进行限制。在配置 Ubuntu 时,apparmor 管理实用程序会在 /usr/sbin/mysqld-akonadi 上强制执行安全配置文件。此配置文件位于 /etc/apparmor.d/usr.sbin.mysqld-akonadi”,其中包含以下规范,我在此将其缩写以适应特定情况:

profile /usr/sbin/mysqld  {
    ## [stuff snipped]
    @{HOME}/.local/share/akonadi/** rwk,
}

我不确定,但我相信“r”表示“读取”,“w”表示“写入”,“k”表示“mknod”。这表示允许 mysqld 在用户的 aknoadi 目录下的任何位置创建文件和目录。

根据 /var/log/kern.log,/usr/sbin/mysqld-akonadi 失败的原因如下:

Apr 11 14:14:42 adiron kernel: [572346.502653] type=1400 audit(1334168082.226:675): apparmor="ALLOWED" operation="mknod" parent=31088 profile="/usr/sbin/mysqld-akonadi///usr/sbin/mysqld" name="/home/xxxxxx/.local/share/akonadi/db_data/adiron.lower-test" pid=31090 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000

它说它恰好在“mknod”调用时失败。很奇怪,因为我认为它已为此配置。

然而,“man apparmor”包含以下几行:

“受限进程无法调用 mknod(2) 来创建字符或块设备。”

无论特定配置文件中的规范如何,此限制似乎都存在。“受限”进程是处于“强制”模式的进程。发出上述“aa-complain”命令可“取消限制”该进程,然后允许它创建套接字,只会抱怨它,以及允许它执行的其他所有操作,从而增加您的日志。

目前尚不清楚是否可以在 akonadi 端配置使用“mknod”创建 mysql 套接字的这种看似无法规避的限制。无论如何,这些似乎只是 Akonadi 日志中的“警告”,而真正的错误似乎来自以下方面:

Apr 11 13:00:10 adiron kernel: [567875.200843] type=1400 audit(1334163610.926:57): apparmor="DENIED" operation="open" parent=15318 profile="/usr/sbin/mysqld-akonadi///usr/sbin/mysqld" name="/home/xxxxx/.local/share/akonadi/db_data/ibdata1" pid=15320 comm="mysqld" requested_mask="rw" denied_mask="rw" fsuid=1000 ouid=1000
Apr 11 13:00:11 adiron kernel: [567875.355533] type=1400 audit(1334163611.078:58): apparmor="DENIED" operation="open" parent=15327 profile="/usr/sbin/mysqld-akonadi///usr/sbin/mysqld" name="//home/xxxxx/.local/share/akonadi/mysql.conf" pid=15329 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=1000 ouid=1000

Apparmor 似乎配置为允许。我对此感到困惑。但是,将安全性关闭并切换到投诉模式可以使其工作。我想您可以从 /etc/apparmor.d/ 中删除 usr.sbin.mysql-akonadi,这样同样有效。

答案2

就我而言,这与安装的 mysql-server 和 mysql-server-5.1 软件包有关。如果我卸载它们,akonadi 就会重新开始工作。太糟糕了,我的笔记本上也需要 mysql-server...

好像 http://brahmalok.wordpress.com/2010/02/13/akonadi-error-solved/ 包含答案:

sudo aa-投诉mysqld
sudo /etc/init.d/apparmor 重新加载
sudo aa-投诉mysqld-akonadi
sudo /etc/init.d/apparmor 重新加载
akonadictl 启动

答案3

我在从 natty 安装升级的 kubuntu oneiric 上以及在另一台装有 kubuntu natty 的机器上也遇到了这个问题。

在两台机器上,aa-complain 魔法都有帮助。

在 natty 上,我还必须删除该~/.local/share/akonadi目录(在 oneiric 上我也多次这样做过)

还不确定安装是否mysql-server起到了作用(我还不敢在两台机器上卸载它)

不过,Akonadi 似乎可以在 OpenSuSE 11.4.(KDE 4.6.0)盒子上开箱即用。

答案4

据我所知,问题出在 akonadi 服务器配置中:升级之前,mysql 服务器在用户设置中设置为 /usr/sbin/mysqld(不是系统,因此未升级)升级后,apparmor 配置文件用于'/usr/sbin/mysqld-akonadi',将 mysql 服务器更改为此可解决所有问题...至少对我来说是这样。

相关内容