问题:
我有一个服务,seafile.service
它在启动后自动启动 Seafile 服务器。但是,此服务无法在我的 Ubuntu 服务器上启动,因为该服务器具有加密分区/home
。该服务需要访问/home/sfadmin/seafile/seafile-server-latest/seafile.sh
本指南。
即使手动解密分区后,服务也无法自动启动 Seafile 服务器/home
。当我通过执行 手动启动服务时sudo systemctl start seafile.service
,它可以正常工作,但是,即使分区已经解密并挂载,系统仍要求我输入/home
分区的解密密码。即使我输入了错误的密码,服务也会顺利启动。
背景:
- 我正在运行带有加密分区的 Ubuntu 16.04.4 LTS 服务器
/home
。该/home
分区使用 DMCrypt (cryptsetup) 加密。我使用了本指南加密我的/home
分区。 - 我的分区
/etc/fstab
配置了如下nofail
指令:/home
/dev/mapper/data-home /home ext4 defaults,nofail 0 2
- 我的
/etc/crypttab
配置如下:data UUID=myuuidhere none luks,discard,noearly,nofail
- 我的
/home
分区解密是手动完成的。每次启动后,我都会/home
使用 SSH 命令远程解密分区sudo cryptsetup luksOpen /dev/sda3 data
。 - 解密后,Ubuntu会自动挂载该
/home
分区。
尝试的解决方案
由于 Seafile 服务 ( /etc/systemd/system/seafile.service
) 需要访问/home
分区,因此我使用以下指令进行服务配置:ConditionPathExists
、Requires
和After
。以下是我的确切服务定义。
[Unit]
Description=Seafile
ConditionPathExists=/home/sfadmin
Requires=home.mount
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target mysql.service home.mount
[Service]
Type=forking
ExecStart=/home/sfadmin/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/sfadmin/seafile/seafile-server-latest/seafile.sh stop
User=sfadmin
Group=sfadmin
[Install]
WantedBy=multi-user.target
问题:
Ubuntu 服务器重启后,我使用 SSH 远程登录并手动解密分区/home
。我确认/home
分区已自动挂载,但seafile.service
由于依赖关系,仍然无法启动。
当我尝试使用命令手动启动 seafile.service 时sudo systemctl start seafile.service
,系统会提示我输入密码来解密/home
分区,尽管它已经解密。当要求输入密码时,我将其留空并按回车键,没有收到其他提示。当我检查的状态时seafile.service
,它现在已启动并处于活动状态。
seafile.service
我认为无法启动的可能原因可能与系统要求输入密码来解密/home
分区有关,即使分区已经解密。
当分区已经解密时,为什么系统在seafile.service
手动启动时要求输入密码?/home
请参阅以下步骤:
$ sudo cryptsetup luksOpen /dev/sda3 data
Enter passphrase for /dev/sda3:
$ sudo systemctl status seafile.service
● seafile.service - Seafile
Loaded: loaded (/etc/systemd/system/seafile.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Mar 10 04:14:02 VM-SERVER systemd[1]: Dependency failed for Seafile.
Mar 10 04:14:02 VM-SERVER systemd[1]: seafile.service: Job seafile.service/start failed with result 'dependency'.
$ sudo systemctl start seafile.service
Please enter passphrase for disk data!
$ sudo systemctl status seafile.service
● seafile.service - Seafile
Loaded: loaded (/etc/systemd/system/seafile.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-03-10 04:36:46 EST; 11s ago
Process: 1589 ExecStart=/home/sfadmin/seafile/seafile-server-latest/seafile.sh start (code=exited, status=0/SUCCESS)
Tasks: 15
Memory: 21.2M
CPU: 528ms
CGroup: /system.slice/seafile.service
├─1614 /home/sfadmin/seafile/seafile-server-6.2.5/seafile/bin/seafile-controller -c /home/sfadmin/seafile/ccnet -d /home/sfadmin/seafile/seafile-data -F /home/sfadmin/seafile/conf
├─1616 ccnet-server -F /home/sfadmin/seafile/conf -c /home/sfadmin/seafile/ccnet -f /home/sfadmin/seafile/logs/ccnet.log -d -P /home/sfadmin/seafile/pids/ccnet.pid
└─1618 seaf-server -F /home/sfadmin/seafile/conf -c /home/sfadmin/seafile/ccnet -d /home/sfadmin/seafile/seafile-data -l /home/sfadmin/seafile/logs/seafile.log -P /home/sfadmin/seafile/pids/seaf-server.pid
Mar 10 04:36:42 VM-SERVER systemd[1]: Starting Seafile...
Mar 10 04:36:43 VM-SERVER seafile.sh[1589]: [03/10/18 04:36:43] ../common/session.c(132): using config file /home/sfadmin/seafile/conf/ccnet.conf
Mar 10 04:36:43 VM-SERVER seafile.sh[1589]: Starting seafile server, please wait ...
Mar 10 04:36:46 VM-SERVER systemd[1]: Started Seafile.