Menjalankan unit systemd tingkat pengguna saat boot
Complete all the steps described in the initial setup page before starting this tutorial. Make sure you have created the file ssh-key.pub following the instructions provided in the prerequisites for the tutorial. We will use this key in the Butane configuration file that we are about to write.
|
Dalam tutorial ini, kita akan menyiapkan unit systemd tingkat pengguna untuk pengguna tanpa hak istimewa. Ada kalanya bermanfaat untuk menjalankan unit systemd tingkat pengguna tanpa harus masuk terlebih dahulu. Misalnya, Anda mungkin ingin menjalankan kontainer yang menyediakan layanan jaringan atau menjalankan pekerjaan HPC. Untuk pengaturan ini, kita akan menambahkan hal berikut ke konfigurasi Butane:
-
Unit systemd tingkat pengguna:
/home/sleeper/.config/systemd/user/linger-example.service. -
Aktifkan unit tersebut sebagai layanan systemd tingkat pengguna.
Menyiapkan unit systemd
Dalam contoh ini, kita akan menjalankan layanan systemd untuk pengguna sleeper. Pertama, mari buat pengguna tersebut:
variant: fcos
version: 1.7.0
passwd:
users:
- name: sleeper
Ini juga akan membuat direktori home untuk pengguna sleeper. Kemudian kita dapat menambahkan unit systemd:
variant: fcos
version: 1.7.0
storage:
files:
- path: /home/sleeper/.config/systemd/user/linger-example.service
mode: 0644
contents:
inline: |
[Unit]
Description=Demo unit systemd tingkat pengguna
[Service]
ExecStart=/usr/bin/sleep infinity
user:
name: sleeper
group:
name: sleeper
Layanan sistem dapat langsung diaktifkan dalam konfigurasi Butane, tetapi layanan tingkat pengguna saat ini harus diaktifkan secara manual:
variant: fcos
version: 1.7.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
Kita mengatur “lingering” untuk instance systemd tingkat pengguna agar dapat dimulai langsung saat boot dan tetap berjalan:
variant: fcos
version: 1.7.0
storage:
files:
- path: /var/lib/systemd/linger/sleeper
mode: 0644
Karena direktori berikut belum ada, kita harus membuatnya agar Ignition dapat menetapkan kepemilikan dan izin yang benar:
variant: fcos
version: 1.7.0
storage:
directories:
- path: /home/sleeper/.config
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd/user
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd/user/default.target.wants
mode: 0755
user:
name: sleeper
group:
name: sleeper
Menulis konfig Butane dan mengonversi ke Ignition
Konfigurasi Butane akhir, yang disimpan dalam user.bu, akan seperti berikut:
variant: fcos
version: 1.7.0
passwd:
users:
- name: core
ssh_authorized_keys_local:
- ssh-key.pub
- name: sleeper
storage:
directories:
- path: /home/sleeper/.config
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd/user
mode: 0755
user:
name: sleeper
group:
name: sleeper
- path: /home/sleeper/.config/systemd/user/default.target.wants
mode: 0755
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: 0644
contents:
inline: |
[Unit]
Description=Demo unit systemd tingkat pengguna
[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
Konfigurasi ini dapat dikonversi menjadi Ignition:
butane --pretty --strict --files-dir=./ user.bu --output user.ign
Pengujian
Seperti sebelumnya, kita akan menggunakan perintah berikut untuk menjalankan instance:
# Atur label SELinux yang benar untuk mengizinkan akses ke konfigurasi
chcon --verbose --type svirt_home_t user.ign
# Jalankan mesin virtual Fedora CoreOS
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"
Selanjutnya kita dapat memverifikasi bahwa unit telah dijalankan di bawah instance systemd pengguna sleeper:
[core@localhost ~]$ sudo machinectl shell sleeper@
Terhubung ke host lokal. Tekan ^] tiga kali dalam 1 detik untuk keluar dari sesi.
[sleeper@localhost ~]$ systemctl --user status
● localhost.localdomain
State: running
Units: 157 loaded (termasuk alias yang dimuat)
Jobs: 0 queued
Failed: 0 units
Since: Kam 2023-08-03 18:31:27 UTC; 23 detik yang lalu
systemd: 253.4-1.fc38
CGroup: /user.slice/user-1001.slice/user@1001.service
├─app.slice
│ └─linger-example.service
│ └─1589 /usr/bin/sleep infinity
└─init.scope
├─1489 /usr/lib/systemd/systemd --user
└─1496 "(sd-pam)"
[sleeper@localhost ~]$ systemctl --user status linger-example.service
● linger-example.service - Demo unit systemd tingkat pengguna
Loaded: loaded (/var/home/sleeper/.config/systemd/user/linger-example.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/user/service.d
└─10-timeout-abort.conf
Active: active (running) sejak Kam 2023-08-03 18:31:27 UTC; 38 detik yang lalu
Main PID: 1589 (sleep)
Tasks: 1 (batas: 2238)
Memory: 224.0K
CPU: 1ms
CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/linger-example.service
└─1589 /usr/bin/sleep infinity
03 Agu 18:31:27 localhost.localdomain systemd: Memulai linger-example.service - Demo unit systemd tingkat pengguna.
Pembersihan
Anda kemudian dapat mematikan instance tersebut. Pertama, putuskan sambungan dari konsol serial dengan menekan CTRL + ], lalu hancurkan mesin tersebut:
virsh destroy fcos virsh undefine --remove-all-storage fcos
Sekarang Anda dapat melanjutkan ke tutorial berikutnya.
Want to help? Learn how to contribute to Fedora Docs ›