在引导时启动用户级系统单元
设置系统D单元
在本例中,我们将为用户启动一个系统服务 sleeper
。首先,让我们创建一个用户:
variant: fcos
version: 1.4.0
passwd:
users:
- name: sleeper
这还将为 sleeper
用户。然后,我们可以添加system d单位:
variant: fcos
version: 1.4.0
storage:
files:
- path: /home/sleeper/.config/systemd/user/linger-example.service
mode: 0644
contents:
inline: |
[Unit]
Description=A systemd user unit demo
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/sleep infinity
user:
name: sleeper
group:
name: sleeper
可以在Butane配置中直接启用系统服务,但目前必须手动启用用户级服务:
variant: fcos
version: 1.4.0
storage:
directories:
- path: /home/sleeper/.config/systemd/user/default.target.wants
mode: 0755
user:
name: sleeper
group:
name: sleeper
links:
- path: /home/sleeper/.config/systemd/user/default.target.wants/linger-example.service
user:
name: sleeper
group:
name: sleeper
target: /home/sleeper/.config/systemd/user/linger-example.service
hard: false
最后,我们为system d用户级实例设置了Lending,这样它就可以在引导时直接启动并保持运行:
variant: fcos
version: 1.4.0
storage:
files:
- path: /var/lib/systemd/linger/sleeper
mode: 0644
写入Butane配置并转换为Ignition
最终的Butane配置,存储在 user.bu
,将是:
variant: fcos
version: 1.4.0
passwd:
users:
- name: core
ssh_authorized_keys:
- ssh-rsa ...
- name: sleeper
storage:
directories:
- path: /home/sleeper/.config/systemd/user/default.target.wants
mode: 0744
user:
name: sleeper
group:
name: sleeper
files:
- path: /var/lib/systemd/linger/sleeper
mode: 0644
- path: /home/sleeper/.config/systemd/user/linger-example.service
mode: 0755
contents:
inline: |
[Unit]
Description=A systemd user unit demo
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/sleep infinity
user:
name: sleeper
group:
name: sleeper
links:
- path: /home/sleeper/.config/systemd/user/default.target.wants/linger-example.service
user:
name: sleeper
group:
name: sleeper
target: /home/sleeper/.config/systemd/user/linger-example.service
hard: false
此配置可以转换为Ignition:
butane --pretty --strict user.bu --output user.ign
测试
与前面一样,我们将使用以下命令来引导实例:
# Setup the correct SELinux label to allow access to the config
chcon --verbose --type svirt_home_t user.ign
# Start a Fedora CoreOS virtual machine
virt-install --name=fcos --vcpus=2 --ram=2048 --os-variant=fedora-coreos-stable \
--import --network=bridge=virbr0 --graphics=none \
--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/user.ign" \
--disk=size=20,backing_store=${PWD}/fedora-coreos.qcow2
然后,我们可以验证该单元是否已在休眠系统d用户实例下启动:
$ ssh core@192.168.x.y
[core@localhost ~]$ sudo machinectl shell sleeper@
[sleeper@localhost ~]$ systemctl --user status
● localhost
State: running
Jobs: 0 queued
Failed: 0 units
Since: Sat 2021-02-20 11:11:53 UTC; 57s ago
CGroup: /user.slice/user-1001.slice/user@1001.service
├─init.scope
│ ├─2110 /usr/lib/systemd/systemd --user
│ └─2112 (sd-pam)
└─linger-example.service
└─2119 /usr/bin/sleep infinity
[sleeper@localhost ~]$ systemctl --user status linger-example.service
● linger-example.service - A systemd user unit demo
Loaded: loaded (/var/home/sleeper/.config/systemd/user/linger-example.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-02-20 11:11:53 UTC; 1min 5s ago
Main PID: 2119 (sleep)
CGroup: /user.slice/user-1001.slice/user@1001.service/linger-example.service
└─2119 /usr/bin/sleep infinity
Feb 20 11:11:53 localhost systemd[2110]: Started A systemd user unit demo.