Ero sivun ”Systemd” versioiden välillä

Siirry navigaatioon Siirry hakuun
4 327 merkkiä lisätty ,  4. kesäkuuta 2019
p
Ei muokkausyhteenvetoa
(8 välissä olevaa versiota 5 käyttäjän tekeminä ei näytetä)
Rivi 7: Rivi 7:
* Käyttää Linuxin [[control group]] -toimintoa prosessien seuraamiseen
* Käyttää Linuxin [[control group]] -toimintoa prosessien seuraamiseen
* Yhteensopiva [[System V init]] -komentosarjojen kanssa
* Yhteensopiva [[System V init]] -komentosarjojen kanssa
* Tarvittaesa viivästää palveluiden aktivointia siihen asti että joku yrittää niitä käyttää
* Tarvittaessa viivästää palveluiden aktivointia siihen asti että joku yrittää niitä käyttää


== Yksiköt ==
== Yksiköt ==
Rivi 125: Rivi 125:
== Omat yksikkötiedostot ==
== Omat yksikkötiedostot ==
Suurin osa käyttäjistä tulee toimeen ohjelmien mukana tulevilla yksikkötiedostoilla, mutta toisinaan on tarvetta joko muokata olemassaolevia yksiköitä tai luoda kokonaan uusia. Kumpikin on suhteellisen helppoa, sillä yksikkötiedostot ovat yksinkertaisehkoja tekstitiedostoja. Tiedostoformaatti on dokumentoitu <tt>systemd.unit</tt>-nimisessä [[man]]-sivussa.
Suurin osa käyttäjistä tulee toimeen ohjelmien mukana tulevilla yksikkötiedostoilla, mutta toisinaan on tarvetta joko muokata olemassaolevia yksiköitä tai luoda kokonaan uusia. Kumpikin on suhteellisen helppoa, sillä yksikkötiedostot ovat yksinkertaisehkoja tekstitiedostoja. Tiedostoformaatti on dokumentoitu <tt>systemd.unit</tt>-nimisessä [[man]]-sivussa.
Systemd-yksiköitä voivat tehdä myös muut kuin ylläpitäjäkäyttäjät. Lisäämällä hakemistoon <tt>~/.config/systemd/user/</tt> yksikkötiedostoja, käyttäjä voi asettaa omia prosesseja käynnistettäväksi esimerkiksi järjestelmän käynnistyksen yhteydessä tai ajastimella. Käyttäjän omien systemd-yksiköiden ohjaamiseen käytetään komentojen nimissä aina <tt>--user</tt>-parametria:
  systemctl --user start oma-palvelu.service
  journalctl --user


=== Järjestelmän yksikkötiedostojen muokkaaminen ===
=== Järjestelmän yksikkötiedostojen muokkaaminen ===
Rivi 143: Rivi 147:
Yksikkötiedostoformaatissa erilaisia direktiivejä on kymmeniä, mutta jossain tapauksissa ihan muutama niistä riittää. Usein kannattaa katsoa mallia järjestelmän mukana toimituista yksiköistä <tt>/lib/systemd/system/</tt> -hakemistosta ja systemd:n dokumentaatiosta.
Yksikkötiedostoformaatissa erilaisia direktiivejä on kymmeniä, mutta jossain tapauksissa ihan muutama niistä riittää. Usein kannattaa katsoa mallia järjestelmän mukana toimituista yksiköistä <tt>/lib/systemd/system/</tt> -hakemistosta ja systemd:n dokumentaatiosta.


==Kritiikkiä==
=== Ajastimet ===
Parannuksistaan huolimatta, systemd-järjestelmää kohtaan on myös lukuisia vasta-argumentteja, joista keskeisin, että systemd on [https://en.wikipedia.org/wiki/Unix_philosophy#Do_One_Thing_and_Do_It_Well unix-filosofian] ''( "tee yksi asia ja tee se hyvin" )''-vastainen tiivistää ongelman sillä systemd ei pelkästään hoida init-järjestelmän tehtäviä, vaan myös virranhallinta, laitteiston hallinta, [[Mount|liittäminen]], [[komentojen ajastaminen]], levyjen salaus, [[Pistoke|pistoke-rajapinta]], verkon asetukset, kirjautumisen / session-hallinta, readahead, GPT-osioinnin löytäminen, container registration, hostname/locale/time hallinta, mDNS/DNS-SD, Linux-konsoli ja monia muita toimintoja tiivistettynä yhteen.
Systemd tarjoaa perinteisen [[cron]]-palvelun tapaiset toiminnot komentojen ajastamiseen. Esimerkiksi edellisessä kohdassa tehty hello-palvelu voitaisiin ajastaa käynnistymään kymmenen minuutin välein luomalla tiedosto <tt>/etc/systemd/system/hello.timer</tt> tähän tapaan:
 
<source>
[Unit]
Description=Ajetaan hello-palvelu kymmenen minuutin välein
 
[Timer]
# Ensimmäinen ajo 10 minuuttia järjestelmän käynnistyksen jälkeen
OnBootSec=10min
# Ajetaan uudelleen 10 minuuttia edellisen ajon päätyttyä jälkeen
OnUnitInactiveSec=10min
Unit=hello.service
 
[Install]
WantedBy=default.target
</source>
 
Näin luodut uudet yksiköt on sitten tarpeellista kytkeä päälle ja käynnistää:
<source>
systemctl enable hello.service
systemctl enable hello.timer
systemctl start hello.timer
</source>
 
Ajastimet voidaan listata <code>systemctl list-timers</code> -komennolla. Esimerkkituloste:
 
<pre>
# systemctl list-timers
NEXT                          LEFT          LAST                          PASSED      UNIT                        ACTIVATES
Mon 2018-08-27 18:20:15 EEST  1h 23min left Mon 2018-08-27 12:16:49 EEST  4h 39min ago certbot.timer                certbot.service
Mon 2018-08-27 23:31:44 EEST  6h left      Sun 2018-08-26 23:31:44 EEST  17h ago      systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Tue 2018-08-28 00:00:00 EEST  7h left      Mon 2018-08-27 00:00:01 EEST  16h ago      logrotate.timer              logrotate.service
Tue 2018-08-28 00:00:00 EEST  7h left      Mon 2018-08-27 00:00:01 EEST  16h ago      man-db.timer                man-db.service
Tue 2018-08-28 00:00:00 EEST  7h left      Mon 2018-08-27 00:00:01 EEST  16h ago      shadow.timer                shadow.service
 
5 timers listed.
Pass --all to see loaded but inactive timers, too.
</pre>
 
== Verkon hallinta ==
 
* https://www.freedesktop.org/software/systemd/man/systemd.network.html
* https://www.freedesktop.org/software/systemd/man/systemd.netdev.html - virtuaaliset verkkoliitännät
* <code>networkctl</code>
* <code>systemctl status systemd-networkd</code>
* <code>systemctl status systemd-networkd-wait-online.service</code>
 
=== Kiinteä IP-osoite ===
 
<code>/etc/systemd/network/eth0.network</code>:
 
<pre>
[Match]
# Verkkokortin nimi
Name=eth0
 
[Network]
Description=eth0:n kiinteä verkko
DHCP=no
Address=192.168.1.11/24
# Gateway IP Address
Gateway=192.168.1.1
# DNS server address
DNS=192.168.1.1
#Domains=home.lan
</pre>
 
=== DHCP ===
 
<code>/etc/systemd/network/eth0.network</code>:
 
<pre>
[Match]
# Verkkokortin nimi
Name=eth0
 
[Network]
Description=eth0:n verkko DHCP:lla
# DHCP no|yes|ipv4|ipv6
DHCP=ipv4
# DNS server address
#DNS=192.168.101.1
#Domains=home.lan
</pre>
 
=== Verkkokortin nimen vaihtaminen (.link) ===
 
Verkkokorttien nimiä voidaan vaihtaa SystemD:n <code>.link</code>-tiedostoilla. Verkkokortin uudelleennimeäminen on hyödyksi silloin, kun esimerkiksi palomuurisääntöjä pitää voida helpommin siirtää järjestelmästä toiseen.
Tässä esimerkissä verkkokortti nimeltä <code>eno1</code> uudelleennimetään <code>phy0</code>-nimiseksi.
 
Listataan verkkokortit:
 
<pre>
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 74:d0:2b:2c:6e:d7 brd ff:ff:ff:ff:ff:ff
</pre>
 
Luodaan <code>/etc/systemd/network/10-phy0.link</code>:
 
<pre>
[Match]
# Käytetään MAC-osoitetta tunnistamaan verkkokortti
MACAddress=74:d0:2b:2c:6e:d7
 
[Link]
# Uusi nimi
Name=phy0
Description=USB-portin vasemmalla puolella oleva ylempi verkkokortti
MACAddressPolicy=persistent
# Käännä verkkokortin rautakiihdytettyjä ominaisuuksia pois päältä (offloading)
# ethtool-ohjelmalla näitä voidaan hallita vielä monipuolisimmin
#TCPSegmentationOffload=off
#TCP6SegmentationOffload=off
#GenericSegmentationOffload=off
#GenericReceiveOffload=off
#LargeReceiveOffload=off
</pre>
 
Lisätietoa: https://www.freedesktop.org/software/systemd/man/systemd.link.html
 
== Muita Init-järjestelmiä ==
Vaikka Systemd on aika laajasti käytössä, ei se silti ole ainoa init-järjestelmä. Esimerkiksi perinteinen [[Sysvinit]], uudempi [[OpenRC]] tai [https://cr.yp.to/daemontools.html daemontools] ovat tapoja hoitaa järjestelmän käynnistäminen. Helpointa on käyttää Linux-jakelua, josta kyseinen init-järjestelmä löytyy. Esimerkiksi [[Gentoo]] käyttää OpenRC:tä.


==Katso myös==
==Katso myös==
Rivi 151: Rivi 279:


[[Luokka: Järjestelmä]]
[[Luokka: Järjestelmä]]
{{Malline:Palvelin}}
76

muokkausta

Navigointivalikko