ການເລີ່ມຕົ້ນສະຄຣິບ (script) ໃນການບູດ (boot) ຄັ້ງທຳອິດຜ່ານບໍລິການ systemd
| ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ເຮັດຕາມຂັ້ນຕອນທີ່ໄດ້ອະທິບາຍໄວ້ໃນ ໜ້າການຕັ້ງຄ່າເບື້ອງຕົ້ນ ກ່ອນທີ່ຈະເລີ່ມບົດຮຽນນີ້. |
ໃນບົດຮຽນນີ້, ພວກເຮົາຈະລັນ (run) ສະຄຣິບໃນການບູດຄັ້ງທຳອິດຜ່ານບໍລິການ systemd. ພວກເຮົາຈະເພີ່ມສິ່ງຕໍ່ໄປນີ້ເຂົ້າໃນການຕັ້ງຄ່າ Butane ຈາກສະຖານະການກ່ອນໜ້ານີ້:
-
ເພີ່ມສະຄຣິບໄວ້ທີ່
/usr/local/bin/public-ipv4.sh. -
ຕັ້ງຄ່າບໍລິການ systemd ເພື່ອລັນສະຄຣິບໃນການບູດຄັ້ງທຳອິດ.
ການຂຽນສະຄຣິບ
ມາຂຽນສະຄຣິບນ້ອຍໆທີ່ໃຊ້ icanhazip.com ເພື່ອສ້າງໄຟລ໌ issue ສຳລັບສະແດງເປັນຂໍ້ຄວາມກ່ອນເຂົ້າລະບົບ (prelogin) ໃນຄອນໂຊລ (console) ແລະ ເກັບມັນໄວ້ໃນ public-ipv4.sh.
| ນີ້ເປັນພຽງຕົວຢ່າງເພື່ອສະແດງວິທີການລັນບໍລິການຕອນບູດເທົ່ານັ້ນ. ຢ່າໃຊ້ສິ່ງນີ້ຖ້າທ່ານບໍ່ເຊື່ອຖືເຈົ້າຂອງເວັບໄຊ 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
ສິ່ງນີ້ອາດຈະເປັນປະໂຫຍດໃນສະພາບແວດລ້ອມຄລາວ (cloud) ບ່ອນທີ່ທ່ານອາດຈະມີທີ່ຢູ່ IP ສາທາລະນະ ແລະ ສ່ວນຕົວທີ່ແຕກຕ່າງກັນ.
ພວກເຮົາຈະເກັບສະຄຣິບນີ້ໄວ້ໃນ /usr/local/bin/public-ipv4.sh ເມື່ອພວກເຮົາເຮັດການ Provision ເຄື່ອງ.
ການຂຽນບໍລິການ systemd
ພວກເຮົາຈຳເປັນຕ້ອງຮຽກໃຊ້ສະຄຣິບຈາກພາກກ່ອນໜ້ານີ້ໂດຍການໃຊ້ systemd unit. ມາຂຽນ systemd unit ລົງໃນໄຟລ໌ issuegen-public-ipv4.service ທີ່ເຮັດວຽກຕາມທີ່ພວກເຮົາຕ້ອງການ, ເຊິ່ງກໍຄືການເຮັດວຽກໃນການບູດຄັ້ງທຳອິດ ແລະ ຈະບໍ່ເຮັດວຽກຊ້ຳອີກ:
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
ການຂຽນການຕັ້ງຄ່າ Butane ແລະ ການແປງເປັນ Ignition
ຕອນນີ້ພວກເຮົາສາມາດສ້າງການຕັ້ງຄ່າ Butane ທີ່ຈະລວມເອົາເນື້ອໃນຂອງສະຄຣິບ ແລະ ໄຟລ໌ systemd unit ໂດຍການດຶງເອົາໄຟລ໌ public-ipv4.sh ແລະ issuegen-public-ipv4.service ທີ່ຢູ່ໃນເຄື່ອງໂດຍການໃຊ້ການອ້າງອີງໄຟລ໌ພາຍໃນ (local file references). ການຕັ້ງຄ່າ Butane ສຸດທ້າຍທີ່ເກັບໄວ້ໃນ services.bu ຈະມີລັກສະນະດັ່ງນີ້:
variant: fcos
version: 1.7.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
| ກວດສອບ ຕົວຢ່າງ ແລະ ຂໍ້ກຳນົດການຕັ້ງຄ່າ ຂອງ Butane ສຳລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການລວມໄຟລ໌ພາຍໃນ (local file includes). |
ເມື່ອມີໄຟລ໌ public-ipv4.sh, issuegen-public-ipv4.service, ແລະ services.bu ຢູ່ໃນໂຟນເດີທີ່ກຳລັງເຮັດວຽກຢູ່ແລ້ວ, ຕອນນີ້ພວກເຮົາສາມາດແປງເປັນ Ignition ໄດ້:
butane --pretty --strict --files-dir=./ services.bu --output services.ign
ການທົດສອບ
ຄືກັນກັບກ່ອນໜ້ານີ້ ພວກເຮົາຈະໃຊ້ສິ່ງຕໍ່ໄປນີ້ເພື່ອບູດ (boot) instance:
# Setup the correct SELinux label to allow access to the config
chcon --verbose --type svirt_home_t services.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}/services.ign" \
--disk="size=20,backing_store=${PWD}/fedora-coreos.qcow2"
ແລະ ສັງເກດເບິ່ງໃນຄອນໂຊລວ່າ Detected Public IPv4 ຈະຖືກສະແດງຜົນອອກມາ ກ່ອນທີ່ທ່ານຈະເຂົ້າສູ່ໜ້າຈໍການເຂົ້າລະບົບ (login prompt):
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 ~]$
ແລະ ບໍລິການຈະສະແດງໃຫ້ເຫັນວ່າມັນຖືກເລີ່ມຕົ້ນຢ່າງສຳເລັດຜົນ:
[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.
ການລຶບລ້າງຂໍ້ມູນ
ຕອນນີ້ ມາຢຸດການເຮັດວຽກຂອງ instance ເພື່ອການທົດສອບຄັ້ງຕໍ່ໄປ. ກ່ອນອື່ນ, ຕັດການເຊື່ອມຕໍ່ຈາກ serial console ໂດຍການກົດ CTRL + ] ແລ້ວທຳລາຍ (destroy) ເຄື່ອງ virtual machine ນັ້ນ:
virsh destroy fcos virsh undefine --remove-all-storage fcos
ຕອນນີ້ທ່ານສາມາດໄປຫາ ບົດຮຽນຕໍ່ໄປ ໄດ້ເລີຍ.
Want to help? Learn how to contribute to Fedora Docs ›