Menjalankan skrip saat boot pertama melalui layanan systemd
| Pastikan bahwa Anda telah menyelesaikan langkah-langkah yang diuraikan dalam halaman penyiapan awal sebelum memulai tutorial ini. |
Dalam tutorial ini, kita akan menjalankan skrip saat boot pertama melalui layanan systemd. Kita akan menambahkan hal-hal berikut ke konfigurasi Butane dari skenario sebelumnya:
-
Tambahkan skrip di
/usr/local/bin/public-ipv4.sh. -
Konfigurasikan layanan systemd untuk menjalankan skrip tersebut saat boot pertama.
Menulis skrip
Mari kita tulis skrip kecil yang menggunakan icanhazip.com untuk membuat berkas issue yang akan ditampilkan sebagai pesan sebelum login di konsol dan simpan ke public-ipv4.sh.
| Ini hanya contoh untuk menunjukkan cara menjalankan layanan saat boot. Jangan gunakan skrip ini jika Anda tidak mempercayai pengelola situs icanhazip.com. |
cat <<'EOF' > public-ipv4.sh
#!/bin/bash
echo "Detected Public IPv4: is $(curl https://ipv4.icanhazip.com)" > \
/etc/issue.d/50_public-ipv4.issue
EOF
Hal ini bisa berguna di lingkungan cloud di mana Anda mungkin memiliki alamat publik dan privat yang berbeda.
Kita akan menyimpan skrip ini ke /usr/local/bin/public-ipv4.sh saat kita melakukan penyediaan mesin.
Menulis layanan systemd
Kita perlu memanggil skrip dari bagian sebelumnya menggunakan unit systemd. Mari kita tulis unit systemd ke dalam berkas issuegen-public-ipv4.service yang menjalankan tugas ini hanya sekali saat boot pertama:
cat <<'EOF' > issuegen-public-ipv4.service
[Unit]
Before=systemd-user-sessions.service
Wants=network-online.target
After=network-online.target
ConditionPathExists=!/var/lib/issuegen-public-ipv4
[Service]
Type=oneshot
ExecStart=/usr/local/bin/public-ipv4.sh
ExecStartPost=/usr/bin/touch /var/lib/issuegen-public-ipv4
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
Menulis konfig Butane dan mengonversi ke Ignition
Sekarang kita dapat membuat konfigurasi Butane yang akan menyertakan skrip dan berkas unit systemd dengan mengambil isi berkas lokal public-ipv4.sh dan issuegen-public-ipv4.service. Konfigurasi Butane akhir, disimpan dalam services.bu, adalah sebagai berikut:
variant: fcos
version: 1.6.0
systemd:
units:
- name: serial-getty@ttyS0.service
dropins:
- name: autologin-core.conf
contents: |
[Service]
# Override Execstart in main unit
ExecStart=
# Add new Execstart with `-` prefix to ignore failure`
ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
- name: issuegen-public-ipv4.service
enabled: true
contents_local: issuegen-public-ipv4.service
storage:
files:
- path: /etc/hostname
mode: 0644
contents:
inline: |
tutorial
- path: /etc/profile.d/systemd-pager.sh
mode: 0644
contents:
inline: |
# Tell systemd to not use a pager when printing information
export SYSTEMD_PAGER=cat
- path: /usr/local/bin/public-ipv4.sh
mode: 0755
contents:
local: public-ipv4.sh
| Periksa contoh dan spesifikasi konfigurasi Butane untuk detail lebih lanjut tentang penyertaan berkas lokal. |
Dengan berkas public-ipv4.sh, issuegen-public-ipv4.service, dan services.bu berada di direktori kerja saat ini, kita dapat mengonversinya menjadi konfigurasi Ignition dengan menjalankan:
butane --pretty --strict --files-dir=./ services.bu --output services.ign
Pengujian
Seperti sebelumnya, kita akan menggunakan perintah berikut untuk menjalankan instance:
# Atur label SELinux yang benar agar dapat mengakses konfigurasi
chcon --verbose --type svirt_home_t services.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}/services.ign" \
--disk="size=20,backing_store=${PWD}/fedora-coreos.qcow2"
Dan lihat di konsol bahwa Detected Public IPv4 ditampilkan di output konsol tepat sebelum Anda masuk ke prompt login:
Fedora CoreOS 38.20230709.3.0 Kernel 6.3.11-200.fc38.x86_64 on an x86_64 (ttyS0) SSH host key: SHA256:tYHKk26+NZ/+ZytWLXClGz813PQJDGP/2+AiuZ8fiqk (ECDSA) SSH host key: SHA256:jJASZec/91zXd4or0uiFsvsfaLC6viLronfxIwQlNCs (ED25519) SSH host key: SHA256:2XlSZAehEu666fmXeM8d47lpIJd92MBOqgMazT4GsVw (RSA) enp1s0: 192.168.124.150 fe80::475a:7a10:2302:b670 Ignition: ran on 2023/08/03 16:40:45 UTC (this boot) Ignition: user-provided config was applied No SSH authorized keys provided by Ignition or Afterburn Detected Public IPv4: is 3.252.102.80 tutorial login: core (automatic login) Fedora CoreOS 38.20230709.3.0 [core@tutorial ~]$
Dan layanan menunjukkan bahwa ia berhasil dijalankan:
[core@tutorial ~]$ systemctl status --full issuegen-public-ipv4.service
● issuegen-public-ipv4.service
Loaded: loaded (/etc/systemd/system/issuegen-public-ipv4.service; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (exited) since Thu 2023-08-03 16:40:55 UTC; 1min 7s ago
Process: 1423 ExecStart=/usr/local/bin/public-ipv4.sh (code=exited, status=0/SUCCESS)
Process: 1460 ExecStartPost=/usr/bin/touch /var/lib/issuegen-public-ipv4 (code=exited, status=0/SUCCESS)
Main PID: 1423 (code=exited, status=0/SUCCESS)
CPU: 84ms
Aug 03 16:40:55 tutorial systemd[1]: Starting issuegen-public-ipv4.service...
Aug 03 16:40:55 tutorial public-ipv4.sh[1424]: % Total % Received % Xferd Average Speed Time Time Time Current
Aug 03 16:40:55 tutorial public-ipv4.sh[1424]: Dload Upload Total Spent Left Speed
Aug 03 16:40:55 tutorial public-ipv4.sh[1424]: [158B blob data]
Aug 03 16:40:55 tutorial systemd[1]: Finished issuegen-public-ipv4.service.
Pembersihan
Sekarang mari kita hentikan instance untuk pengujian berikutnya. Pertama, putuskan sambungan dari konsol serial dengan menekan CTRL + ], lalu hapus mesin tersebut:
virsh destroy fcos virsh undefine --remove-all-storage fcos
Anda sekarang dapat melanjutkan ke tutorial berikutnya.
Want to help? Learn how to contribute to Fedora Docs ›