Portál AbcLinuxu, 6. května 2025 02:50

Dotaz: Problém se systemd kexec.target

27.11.2020 11:07 xxl | skóre: 26
Problém se systemd kexec.target
Přečteno: 453×
Odpovědět | Admin
Zdravím vespolek.

Naveden článkem na root.cz zkouším reboot pomocí kexec. Postupuji podle návodu pro Arch Linux, mám ale Debian. Nechodí to. Ale ne, že by se to nedalo pomocí kexec restartovat, toho dosáhnu. Nefungují závislosti v systemd nebo tak něco.

Očekávám, že příkazem systemctl start kexec.target dojde ke korektnímu ukončení služeb a k restartu systému pomocí kexec.

Mám podle návodu vytvořen kexec-load@.service
 # cat kexec-load@.service
[Unit]
Description=************************************ load %i kernel into the current kernel ***************************************
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/kexec --load /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline --reset-vga --console-vga --append='root=UUID=c6666e43-97e9-43c8-8635-64e83a65af33 ro'

[Install]
WantedBy=kexec.target
A mám ho enabled. 4.19.0-11-amd64 je můj stávající, běžící, fungující kernel.
 # systemctl enable kexec-load@4.19.0-11-amd64.service
Created symlink /etc/systemd/system/kexec.target.wants/kexec-load@4.19.0-11-amd64.service → /etc/systemd/system/kexec-load@.service.
Restart pomocí kexec nefunguje, protože se můj unit kexec-load@4.19.0-11-amd64.service nespustí. Restartuje se to normálním způsobem.

Takže jsem vytvořil druhý unit, až na detaily úplně stejný, jako ten předchozí, který ovšem nepoužívá service template.
 # cat kexec-load-kernel.service
[Unit]
Description=........................... load %v kernel into the current kernel ........................................
Documentation=man:kexec(8)
DefaultDependencies=no
Before=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/kexec --load /boot/vmlinuz-%v --initrd=/boot/initrd.img-%v --reuse-cmdline --reset-vga --console-vga --append='root=UUID=c6666e43-97e9-43c8-8635-64e83a65af33 ro'

[Install]
WantedBy=kexec.target
Service je enabled.
 # systemctl enable kexec-load-kernel.service 
Created symlink /etc/systemd/system/kexec.target.wants/kexec-load-kernel.service → /etc/systemd/system/kexec-load-kernel.service.
Nyní by se při restartu systému pomocí výše uvedeného příkazu měly spustit oba dva unity, které by udělaly úplně totéž.
 # systemctl list-dependencies kexec.target 
kexec.target
● ├─kexec-load-kernel.service
● ├─kexec-load@4.19.0-11-amd64.service
● └─systemd-kexec.service
Jenže při rebootu (který ve výsledku poběhne korektně pomocí kexec) se spustí pouze jeden - kexec-load-kernel.service. To znamená, že to takhle jde, ale něco je špatně. Změna pořadí pomocí úpravy Before|After nemá vliv, pořád se spustí jen ten jeden.

Takže otázka zní, co je tam špatně? Proč nefunguje unit template? Templatovaný service unit se prostě vůbec nespustí, ačkoliv má úplně stejné závislosti, jako ten druhý.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.11.2020 11:38 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Odpovědět | | Sbalit | Link | Blokovat | Admin
Skusil som uspesne kexec na debiane. O 13:00 budes mat o tom blog.
debian.plus@protonmail.com
27.11.2020 13:29 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
debian.plus@protonmail.com
27.11.2020 13:41 xxl | skóre: 26
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
No to si tedy dost fandíš. To možná funguje na systému s EFI. Ale ne na legacy boot.

Kromě toho jsem se ptal na to, proč v kexec.target nefungují závislosti mezi unity.
27.11.2020 13:51 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Naveden článkem na root.cz zkouším reboot pomocí kexec. Postupuji podle návodu pro Arch Linux, mám ale Debian. Nechodí to.
Oznacil, lebo odpoved riesi tento problem.

Skusal som to na legacy boot. UEFI mam primarne na Win, a na select Android.
Očekávám, že příkazem systemctl start kexec.target dojde ke korektnímu ukončení služeb a k restartu systému pomocí kexec.
Neviem, ako u Tebe, ale systemctl start kexec.target robi u mna tak ako ocakavas, ze by malo.

Otazka, riesis nieco specialne, alebo co chces dosiahunut? Chces spustat vypnutie cez service, a nie cez systemctl start kexec.target?
debian.plus@protonmail.com
27.11.2020 13:58 xxl | skóre: 26
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Nejsi náhodou politik? Ptejte se mě na co chcete, odpovím vám na co chci já? A ještě si to pochválím.

Mně se systém také pomocí systemctl start kexec.target rebootuje. Korektně. Ale není to pomocí kexec, protože se předtím nenatáhne nové jádro. Stačí si přečíst log.

A to, že to rebootovat zvládnu, to jsem dost podrobně popsal.

Jde mi o to, proč se mi v kexec.target jeden unit spustí a druhý se nespustí. Ačkoliv jsou oba téměř stejné. Ty unity mi totiž to jádro natáhnou. Resp. pouze jeden..
27.11.2020 14:33 debian+
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Co chces? Ja sa nepytam ako (to riesis) (pohlad z dola), ale pohlad z hora (z celku)? Chces custom kernel pre kexec (nie ten dafaulny)? Tak?
27.11.2020 14:57 xxl | skóre: 26
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Tak ještě jednou.

V kexec.target mám defaultní unit systemd-kexec.service. O ten se nestarám. A pak tam mám dva service unity svoje (kexec-load-kernel.service a kexec-load@4.19.0-11-amd64.service), které mají natáhnout jádro před rebootem. Ten první kexec-load-kernel.service to taky korektně provede a systém se následně pomocí systemd-kexec.service korektně rebootuje pomocí příkazu 'kexec --exec --force'. Jenže já chtěl, aby mi to jádro natáhnul ten service unit kexec-load@4.19.0-11-amd64.service. A ten to se za boha nechce v kexec.target spustit. Kdyby se spouštěl, tak jsem nemusel nic dalšího řešit, ani psát sem do diskuse.

Systemd kexec.target prostě nespouští service unity, které jsou napsané jako template. A protože je to v targetu, který ukončuje všechny služby, odpojuje síť a já nevím co všechno a nakonec provádí reboot, tak se v tom špatně hledá chyba.
27.11.2020 18:16 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Aha.

Ak ti ten prvy ide, preco don nedat podmienku, ze podla akt. spusteneho jadra spusti A alebo B jadro?
debian.plus@protonmail.com
27.11.2020 17:17 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Prekrásny blok, chalan.
27.11.2020 14:46 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ak chces vlasny nie-aktualny kexec kernel pre reboot, preco needitujes /etc/default/kexec? Nebola by to lahsia cesta?
debian.plus@protonmail.com
27.11.2020 15:01 xxl | skóre: 26
Rozbalit Rozbalit vše Re: Problém se systemd kexec.target
Systemd se o obsah /etc/default/kexec nestará.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.