已更新 - 这是在 Ubuntu Mate 15.10 上运行的。

已更新 - 这是在 Ubuntu Mate 15.10 上运行的。

前几天我更新到了 Ubuntu Vivid,现在遇到了问题。我无法启动 dnscrypt-proxy(以及其他程序)。我猜这与 systemd 开关有关。当我尝试启动 dnscrypt-proxy 时,发生了以下情况:

$ sudo service dnscrypt-proxy start 
[sudo] password for anon:
Failed to start dnscrypt-proxy.service: Unit
dnscrypt-proxy.service failed to load: No such file or directory.

我的初始化脚本或安装没有任何问题,我尝试重新安装然后重新启动...没有成功。

我确信我忽略了这个问题的一个简单答案。如果有人能帮助我理解与 systemd 的主要区别以及我需要做什么才能启动服务,我将不胜感激。

答案1

首先,我要感谢以上所有评论的人。

已更新 - 这是在 Ubuntu Mate 15.10 上运行的。

下载下面链接的西蒙·克劳森的剧本。

https://github.com/simonclausen/dnscrypt-autoinstall

Ubuntu 15:10 破坏了 Simon Clausen 的脚本,因此它只能在重新启动之前工作。这是因为 Ubuntu 15.10 有一个从 /run/resolvconf/resolv.conf 到 /etc/resolv.conf 的符号链接。Simon 尝试使用 chattr +i /etc/resolv.conf 锁定 /etc/resolv.conf,但失败了。要解决此问题,请在运行他的脚本之前执行以下操作。

sudo rm /etc/resolv.conf

sudo cp /run/resolvconfig/resolv.conf /etc/resolv.conf

注意:Simons 脚本下载的 dnscrypt 新版本考虑了 systemd,无需修改。

脚本运行并测试后,我执行以下操作。

我使用了上面的 systemd 文件,但毕竟需要将解析器添加到最后一行。

[Unit]
Description=DNSCrypt client proxy
Requires=dnscrypt-proxy.socket

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

[Service]
Type=simple
NonBlocking=true
ExecStart=/usr/local/sbin/dnscrypt-proxy -R dnscrypt.eu-nl

根据以上文本创建一个文本文件并命名

dnscrypt-proxy.service

然后将新的 dnscrypt-proxy.service 文件放入

/etc/systemd/系统/

我们不会覆盖 /lib/systemd 默认服务定义,否则在更新软件包时会遇到麻烦。Systemd 会先检查 /etc/systemd/system,然后再检查 /lib,因此您可以放心地将自定义服务定义放在 /etc/systemd 中。

完成后,完整路径为

/etc/systemd/system/dnscrypt-proxy.service

同样的事情 - 使用 /etc/

接下来根据下面的示例创建 dnscrypt-proxy.socket 文件。

[Unit]
Description=dnscrypt-proxy listening socket
After=network.target

[Socket]
ListenStream=127.0.0.2:53
ListenDatagram=127.0.0.2:53

[Install]
WantedBy=sockets.target

它也进入

/etc/systemd/系统/

完整路径是

/etc/systemd/system/dnscrypt-proxy.socket

激活脚本(在正确的文件夹中创建符号链接)

sudo systemctl enable /etc/systemd/system/dnscrypt-proxy.socket

sudo systemctl enable /etc/systemd/system/dnscrypt-proxy.service

停止服务以便 systemd 可以正确启动它。

sudo /etc/init.d/dnscrypt-proxy stop

您应该将 /init.d/dnscrypt 中的所有设置移至 /etc/systemd/system/dnscrypt-proxy.service — 否则 systemd 将采用 etc/init.d 中的脚本并创建临时服务定义,您可以在 /run/systemd/generator/XYZ.service 中找到该定义。如果 /etc/ 中的服务与 init.d 中的脚本同名,则该脚本将被忽略,而使用服务定义

启动服务时你不应该看到任何错误。

sudo systemctl start dnscrypt-proxy.service

sudo service dnscrypt-proxy start

对于我来说,在 Ubuntu 15.10 上重启后,此方法仍然有效。

我根本不是 Linux 的高级用户。我才刚刚开始。感谢 Chev_603 和所有他提到的人,不是我。希望您觉得这篇文章对您有帮助。任何关于改进脚本的评论都将不胜感激。如果有辅助 DNS 服务器就好了。有人知道怎么做吗?

答案2

好吧,我终于想出了如何让它工作。我清除了当前安装并删除了 ppa,因为正如 solsTiCe 提到的,该包已损坏。然后我抓住了这个自动安装脚本来自 github。我编译了该软件包,但是 configure 脚本有一个错误,它无法正确检测 systemd 是否存在(即使您使用 --with-systemd 标志)。为了解决这个问题,我打开脚本configure并将变量设置HAVE_SYSTEMDTRUE手动。然后我重新运行 configure,然后 make,最后 sudo make install。

接下来,我创建了一个目录,/etc/systemd/system/dnscrypt-proxy.service并将这两个脚本放在该目录中:

更新:这个解决方案在我重启之前一直有效,但之后服务没有启动。我最终使用了这个脚本现在运行完美。Simclausen 是我心目中的英雄,因为他写了这篇文章。感谢 zenester 告诉我正确的语法:

/etc/systemd/system/dnscrypt-proxy.service/dnscrypt-proxy.service

[Unit]
Description=DNSCrypt client proxy
Requires=dnscrypt-proxy.socket

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

[Service]
Type=simple
NonBlocking=true
ExecStart=/usr/local/sbin/dnscrypt-proxy \

-R dnscrypt.eu-nl

显然这是没有必要的:

并且 /etc/systemd/dnscrypt-proxy.service/dnscrypt-proxy.socket

[Unit]
Description=dnscrypt-proxy listening socket
After=network.target

[Socket]
ListenStream=127.0.0.2:53
ListenDatagram=127.0.0.2:53

[Install]
WantedBy=sockets.target

最后,我运行 /usr/local/sbin/dnscrypt-proxy start -R dnscrypt.eu-nl --local-address 127.0.0.2:53

程序成功启动。为了确认这一点,我运行了以下命令:

dig @127.0.0.2 debug.opendns.com txt

一切看上去都很好!

; <<>> DiG 9.9.5-9-Ubuntu <<>> @127.0.0.2 debug.opendns.com txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45692
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;debug.opendns.com.     IN  TXT
;; ANSWER SECTION:
debug.opendns.com.  0   IN  TXT "server 3.otp"
debug.opendns.com.  0   IN  TXT "flags 20 0 70 5950800000000000000"
debug.opendns.com.  0   IN  TXT "originid 0"
debug.opendns.com.  0   IN  TXT "actype 0"
debug.opendns.com.  0   IN  TXT "source xxxxxxxxxx:35164"
debug.opendns.com.  0   IN  TXT "dnscrypt enabled (xxxxxxxxxxxxxx)"
;; Query time: 154 msec
;; SERVER: 127.0.0.2#53(127.0.0.2)
;; WHEN: Fri May 22 17:24:32 EDT 2015
;; MSG SIZE  rcvd: 248

或者正确地将其注册为服务:

sudo systemctl enable dnscrypt-proxy.service

然后称呼它,sudo service dnscrypt-proxy start 我希望这对某些人有帮助。

答案3

你是如何安装的dnscrypt-代理?vivid中没有此包。

您的包裹已损坏,因为其中应该包含systemd 。服务文件来运行它。

尝试此文件并命名它/etc/systemd/system/multi-user.target.wants/dnscrypt-proxy.service

[Unit]
Description=DNSCrypt client proxy
Requires=dnscrypt-proxy.socket

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

[Service]
Type=simple
NonBlocking=true
ExecStart=/usr/sbin/dnscrypt-proxy -R dnscrypt.eu-nl

和这个/etc/systemd/system/sockets.target.wants/dnscrypt-proxy.socket

[Unit]
Description=dnscrypt-proxy listening socket
After=network.target

[Socket]
ListenStream=127.0.0.1:53
ListenDatagram=127.0.0.1:53

[Install]
WantedBy=sockets.target

答案4

我是 dnscrypt-proxy 的 PPA Anton+ 的所有者。我在度假期间了解到,在之前的版本中,仅使用 systemd 或 upstart(或两者)的 Ubuntu 系统存在问题。

我今天刚刚为 Vivid 15.04 构建了 dnscrypt-proxy。它使用了 systemd。

但是我的系统中没有安装 Vivid 15.04。目前我仍然使用 Trusty 14.04。

你能在你的系统上测试这个新版本吗?它仍然是 1.5.0 版本。如果测试成功,我将提供更新的版本 1.6.0。

https://launchpad.net/~anton+/+archive/ubuntu/dnscrypt

新的测试版本是:dnscrypt-proxy 1.5.0-1pmo1.8~vivid

它应该提供来自 dnscrypt.eu 的 2 个 DNS

通过 Launchpad 联系我。

谢谢。

相关内容