1/27/2020

systemd 로만 관리될 경우 정리

1. systemd 로 부팅


1.1 systemctl 사용법

systemd 에서는 기본 control은 systemctl 이지만 이외에도 사용되어지는 command들이 존재하며 이부분은 이전 내용참조

  • systemctl 와 이외 사용되어지는 명령어 사용법 
  1. systemctl  사용법 
  2. networkctl 사용법 
  3. timedatectl 사용법 

systemctl 및 이외 명령 관련내용 참조  (반드시 참고)
  https://ahyuo79.blogspot.com/2017/03/systemctl.html

systemctl Manual 
  https://www.freedesktop.org/software/systemd/man/systemctl.html#


2. systemd의 Unit 구성 및 종류


  • Unit의 종류 (11개의 종류이지만 필요한것만 사용)
  1. *.service units : 주로 daemon 과 일반 process로 구성
  2. *.socket units:  IPC or Socket 기반의 활동 (encapsulate동작)
  3. *.target units:  Unit들을 group 화 하고 boot 동기화를 할때 유용
  4. *.device units:  Kernel device를 사용할 경우 udev sys
  5. *.mount units:  filesystem 안에 mount point
  6. *.automount units:  filesystem의 automount
  7. *.timer units: 다른 unit의 timer기반의 trigger로 사용
  8. *.swap units:  mount unit 과 유사하며 memory sway 과 OS의 file (encapsulate동작)
  9. *.path units: path 기반으로 변경될 때 동작되는 구조
  10. *.slice units: group unit으로 scope와 service를 계층으로 관리가 가능
  11. *.scope units:  service unit과 거의 유사하지만 외부 process 관리목적

상위 이외에도 systemd.exec 및 systemd.kill 존재하는데, 중복이 되는 것을 알수 있으며,  각 실행파일이 있으므로, 
모든 Section의 Directives의 Index에서 세부파악하자 

모든 Section의 Directives(Option) Index (중요)

  • Unit의 역할이 이미 정해진 것들 반드시 확인
Unit의 종류와 다양한 기능이 존재하지만, 이미 역할이 거의 정해진 것이 많으므로 각각의 특징을 알아보며 세부역할을 알자 

systemd 기반의 Init 관련된 부분 (SysVinit 과 차이)
  https://www.freedesktop.org/software/systemd/man/init.html#

사용용도가 특별한용도로 정해진것 아래에서 확인필요 (반드시 확인)
  https://www.freedesktop.org/software/systemd/man/systemd.special.html#


2.1 Unit의 기본구성 및 문법 

Unit의 기본 문법구성은 SectionDirective(Option)으로 설정이 가능하며 관련 Manual을 찾아서 각 기능을 보자

systemd 의 기본문법 및 구조소개 
  https://www.freedesktop.org/software/systemd/man/systemd.syntax.html#

  • 기본으로 Service 부분 Simple 예
아래의 경우 3개의 Section [Unit] 와 [Service] 와 [Install]로 구성되며 각각의 Manual 참조
$ cat *.service or *.target 
## 주석 
[Unit]  ## Section 이라고함 
Description=Wait for Network to be Configured   ## Section의 Directive or Options 이라고함 
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no

[Service]  ## Section에 따라 Directive의 기능이 달라지므로 주의 
Type=oneshot


[Install]   ## 모든 Unit이 필요한것이 아니므로 주의 
WantedBy=multi-user.target

상위 Service의 기본 분석은 아래의 두개로 시작을 하면 될 것이다.

Unit Section 과 Unit의 Directives(Option) 기능확인
System Unit Search PATH부터 정확히 파악하고 각각의 설정을 파악 
  https://www.freedesktop.org/software/systemd/man/systemd.unit.html
  https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

Service Section 과 Service의 Directives(Option)기능확인
  https://www.freedesktop.org/software/systemd/man/systemd.service.html#


  • 세부분석을 위한 참조사항 
상위에서 설명했듯이 세부분석시 중요 

모든 Section의 Directives(Option) Index
  https://www.freedesktop.org/software/systemd/man/systemd.directives.html

systemd의 사용되어지는 File index
  https://www.freedesktop.org/software/systemd/man/index.html

  • Target Unit 
systemd의 Unit Target 에 내부 Wants 와 Requires 
  https://www.freedesktop.org/software/systemd/man/systemd.target.html#


2.2 Unit 의 기본분석 

Systemd의 Unit는 다양하므로 본인이 원하는 기능을 볼때 동작 여부와 종속성을 확인하여 정확하게 어떻게 동작하는지 파악하자.

systemctl 및 이외 명령 관련내용 참조  (반드시 참고)
  https://ahyuo79.blogspot.com/2017/03/systemctl.html

  • 각 Unit Linux 분석 (target)
현재 Target Unit의 동작여부를 ACTIVE에서 확인가능.

$ systemctl list-units --type target    // target을 분석 (화살표키로 움직임가능) 
UNIT                LOAD   ACTIVE SUB    DESCRIPTION
basic.target        loaded active active Basic System
getty.target        loaded active active Login Prompts
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target     loaded active active Local File Systems
machines.target     loaded active active Containers
multi-user.target   loaded active active Multi-User System
network.target      loaded active active Network
nss-lookup.target   loaded active active Host and Network Name Lookups
paths.target        loaded active active Paths
remote-fs.target    loaded active active Remote File Systems
slices.target       loaded active active Slices
sockets.target      loaded active active Sockets
swap.target         loaded active active Swap
sysinit.target      loaded active active System Initialization
time-sync.target    loaded active active System Time Synchronized
timers.target       loaded active active Timers
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

  • 각 Unit 의 종류 및 동작상태 확인 
$ systemctl list-units --type target | grep target    // target을 분석 (나열식) 
상위와 동일 

$ systemctl list-units --type target --state active   // 보통 Service를 Target중심으로 하면 Active되었는지 확인 
or
$ systemctl list-units --type target --state active | grep target 

$ systemctl list-units --all --full | grep ".device"  // device을 세부분석 (나열식으로 전체를 볼수있음)  
  dev-disk-by\x2did-mmc\x2d00000_0x0cf64c62.device                                                                    loaded    active   plugged   /dev/disk/by-id/mmc-00000_0x0cf64c62
  dev-disk-by\x2did-mmc\x2d00000_0x0cf64c62\x2dpart1.device                                                           loaded    active   plugged   /dev/disk/by-id/mmc-00000_0x0cf64c62-part1
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793.device                                                                   loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart1.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part1
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart2.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part2
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart3.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part3
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart4.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part4
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart5.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part5
  dev-disk-by\x2did-mmc\x2dS0J57X_0x184f6793\x2dpart6.device                                                          loaded    active   plugged   /dev/disk/by-id/mmc-S0J57X_0x184f6793-part6
  dev-disk-by\x2dlabel-boot.device                                                                                    loaded    active   plugged   /dev/disk/by-label/boot
.....


  • Target Unit의 종속성확인

$ systemctl status  // 현재 systemd의 실행상태확인 가능하며, 종속성 확인 (주의: 실행한 후 종료된 것은 제외됨) 
........

$ systemctl list-dependencies --all  // 전체 종속관계 확인  
.....

$ systemctl list-dependencies multi-user.target  // 전체구조파악 하며, 이 안에서 다시 세부 Target 분석  
.....

$ systemctl list-dependencies sockets.target // sockets.target 분석하며, 일반적인 Server Bind 분석  
.....

$ systemctl list-dependencies network-online.target // network-online.target 종속부분확인 
network-online.target
● └─systemd-networkd-wait-online.service


  • 상위 Target 종속성을 확인 후 관련 서비스 확인 
$ cat /lib/systemd/system/systemd-networkd-wait-online.service // network-online.target에 관련된 service분석 
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Wait for Network to be Configured
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
Requires=systemd-networkd.service
After=systemd-networkd.service
Before=network-online.target shutdown.target

[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes

[Install]
WantedBy=network-online.target


$ readelf -a /lib/systemd/systemd-networkd-wait-online // 말그대로 network가 online이 될때까지 기다리는 실행파일  

  • systemd-analyze 분석 (중요)
systemd-analyze를 이용하여 booting 속도 및 각 Unit 연관성을 세부적으로 분석가능하므로 반드시 알아야함

systemd-analyze 부분 아래 참조 
  https://ahyuo79.blogspot.com/2017/04/systemd-analyze.html
  https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd-analyze.1

  • network.target 및 관련내용 
  https://unix.stackexchange.com/questions/209832/debian-systemd-network-online-target-not-working
  https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
  https://www.freedesktop.org/software/systemd/man/systemd-networkd-wait-online.service.html


2.3 기본 Service Unit 문법 


$ vi *.service
[Unit]
Description=Mx Encrypted Folder
Requires=local-fs.target
After=local-fs.target

## Requires 와 After 설정 중요하며, 종속(dependency)이 아니라면 Requreis 제거 
## After 의 local-fs.target Local File System Mount 된 시점
## After 의 network.target (network.target 진입 후 )
## After 의 network-online.target (network 가 연결될 경우)

[Service]
Type=oneshot
ExecStart=/usr/bin/mxmountencrypted
RemainAfterExit=true
ExecStop=/usr/bin/mxunmountencrypted

## ExecStart 이 서비스가 시작시 
## ExecStop 이 서비스를 systemctl stop으로 중지가능 
## RemainAfterExit yes or no로 Exit되어도 유지하는지 설정 (아래 Directives Index 참조)
## StandardOutput=journal  (systemd-journal log로 사용)


[Install]
WantedBy=multi-user.target

## WantedBy or RequiredBy= [Install] Section에서 주로 사용된다 
## 더불어 각각 *.wants 와 .requres directory에 심볼링크를 생성한다 
## 이 대표적인 예가 systemctl enable/disable 설정이 될 것 같다. 


기본 Service Example 
  https://stackoverflow.com/questions/47293195/running-systemd-unit-directly-after-local-fs-target-and-before-basic-target
  https://www.freedesktop.org/software/systemd/man/systemd.service.html

각 Section 과 Directive 한글설명 
  https://fmd1225.tistory.com/93


  • 내가 만든 service 기본서비스
Network가 물리적으로 online되면, 즉 After 와 Wants를 확인

$ vi *.service  //systemd 가 network를 물리적으로 online 된 경우 실행 
## Unit Section 
[Unit]
Description=Setup and Start my Service
After=network-online.target
Wants=network-online.target

## After network-online.target 후 동작가능 (HW Network가 동작가능)
## Wants 충분조건이라고 함 Requires가 필요조건

[Service]
Type=simple
ExecStart=/usr/bin/setup.sh
Restart=on-failure

## ExecStart 상위 조건을 만족하면 실행 
## Restart=on-failure 비정상 종료면 다시 실행
or 
## Restart=always , 상위는 비정상 종료일 경우만 실행이지만, 이는 항상 무조건 실행
## RestartSec=1     매번 Restart시 1s Delay 
 

[Install]
WantedBy=multi-user.target

 https://wiki.archlinux.org/index.php/systemd
 https://wiki.archlinux.org/index.php/systemd#Targets
 https://www.freedesktop.org/wiki/Software/systemd/
 https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/


2.4 NTP Client 설정 

systemd의 NTP Client 설정은 아래와 같이 기본으로 timesyncd에서 담당한다.

  • NTP Client 관련기본설정 
systemd의 NTP Service

$ cat /etc/systemd/timesyncd.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=time1.google.com time2.google.com time3.google.com time4.google.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

상위 timedatectl 명령어 참조 

$ timedatectl show-timesync --all //명령어로 확인 

// 이곳에 설정하면 NTP와 DNS를 같이 설정가능
// 이 설정이 상위 NTP에도 적용가능 
// 이 설정이 /etc/resolv.conf에 적용가능 

systemd의 NTP (timesyncd)
  https://stackframe.tistory.com/16
  https://www.freedesktop.org/software/systemd/man/timesyncd.conf.html
  https://wiki.archlinux.org/index.php/systemd-timesyncd

timedatectl (상위 링크참조)
  https://ahyuo79.blogspot.com/2017/03/systemctl.html

timedatectl (manual and example)
  http://man7.org/linux/man-pages/man1/timedatectl.1.html
  http://man7.org/linux/man-pages/man1/systemd-firstboot.1.html
  https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/


2.5 SSH Server 설정 및 동작

  • SSH Server 설정변경 

$ cat /etc/ssh/sshd_config              //sftp 지원을 위해 수정 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# 이곳에서 Port는 설정하지 말자 
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords yes

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
Compression no
ClientAliveInterval 15
ClientAliveCountMax 4
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Jeonghun
# changed options for SFTP 
# override default of no subsystems
#Subsystem      sftp    /usr/libexec/sftp-server
Subsystem       sftp    internal-sftp

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

  • SSH Server Port 설정 변경 및 확인 

//sshd.service는 별도로 없으며, sshd.socket만 존재하므로 관련부분 검색 
$ find /lib -name sshd.socket
/lib/systemd/system/sshd.socket

$ find /etc -name sshd.socket                               //sshd.service는 별도로 없으며, sshd.socket만 존재 
/etc/systemd/system/sockets.target.wants/sshd.socket

$ find /etc -name sshd*                                     //상위로도 못찾을 경우 
$ find /lib -name sshd*      


// systemd 는 /lib -> /etc 찾아실행되므로 최종은 etc 이며, 보통 이럴 경우 link임 
$ cat /etc/systemd/system/sockets.target.wants/sshd.socket   // sshd.socket에서 직접 port 변경 
[Unit]
Conflicts=sshd.service

[Socket]
ExecStartPre=/bin/mkdir -p /var/run/sshd
#ListenStream=22
ListenStream=3333
Accept=yes

## 아래의 WantedBy 부분참조하면, 
## systemctl enable/disable 할 경우 sockets.target.wants directory에 심볼 link 생성/삭제됨 
## /lib/systemd/system/sshd.socket 기반으로 link 생성/삭제 
[Install]
WantedBy=sockets.target 

  • SSH Server Port 적용 및 상태확인 

$ systemctl status sshd.socket        // sshd.socket 동작상태 확인 
or
$ systemctl status sshd               // sshd.service 동작상태 확인 (현재 없음) 


$ systemctl daemon-reload
$ systemctl restart sshd.socket.      //sshd.socket  만 있을 경우 sshd 재시작 
or 
$ systemctl restart sshd              //sshd.service 가 있을 경우 


  • SSH or SFTP 동작안될 경우 재확인 

$ netstat -a | grep 3333    // 우선적으로 SSH or SFTP 변경된 Port 동작 검색  
tcp        0      0 :::3333                 :::*                    LISTEN

$ systemctl status sshd.socket // sshd.socket 상태확인  

// 방화벽으로 인한부분 확인
$ iptables -S               // Iptables 설정확인  
-P INPUT DROP               // Iptables INPUT이 DROP이므로 별도 추가 하거나 Policy 변경  
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 123 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT

$ iptables -A INPUT  -p tcp --dport 3333  -j ACCEPT // Iptables INPUT 새로변경된 Port 추가        
$ iptables -A OUTPUT -p tcp --dport 3333  -j ACCEPT 


  • SSH or SFTP TEST 진행 
$ ssh -p 3333 root@192.168.1.60
$ sftp -P 3333 root@192.168.1.60    //만약 server의 key 정보가 다르다면 ssh-keygen 한 후 재연결 (ssh-keygen -f "/home/jhlee/.ssh/known_hosts" -R 192.168.1.60) 
sftp> pwd                           // remote path 확인
sftp> help                          // 기본 명령어 확인 
sftp> get test                      // remote path의 test file 가져옴 
$ sftp -P 3333 root@192.168.1.60:test1     // sftp로 바로 get test1 


2.6 SysV 기반의 Network 설정 (Systemd 같이사용)

SysV Script 기반으로는 /etc/network/interfaces 에 Network Interface를 추가하여, service로 각각의 관리를 진행을 했다.
이 부분은 systemd 와 SysV Script를 혼합해서 사용할 경우 알아두도록 하자 

  • 일반적인 /etc/network/interface 예제 (SysV Script)
SysV Script 기반으로 구성되며, Main은 ifup/ifdown이 전체 Control 하고 각각의 Shell Script 같이 분석해야함 

$ cat /etc/network/interfaces  //systemd로만 구성할 경우 사용안함 
source-directory /etc/network/interfaces.d

# The loopback network interface
auto lo
iface lo inet loopback

## DHCPC Client 예제
auto eth0
iface eth0 inet dhcp
## Static IP 예제
auto eth1
iface eth1 inet static
	address 192.168.1.11 
	netmask 255.255.255.0
	gateway 192.168.1.1
## USB hotplug
allow-hotplug usb0
iface usb0 inet static
	address 192.168.3.7
	netmask 255.255.255.0
    
$ ls /etc/network/     //각 Shell Script 과 Interface 확인 
if-down.d  if-post-down.d  if-pre-up.d  if-up.d  interfaces  interfaces.d

$ ls /etc/network/if-up.d/  //각각의 Shell script 혹은 Symbol Link  내부에서 $IFACE로 Interface 구분 
000resolvconf  avahi-daemon  ethtool  wpasupplicant

$ service --status-all    //network 관련서비스 name 확인 (SysV Script 사용할 경우 service이용) 
...
$ sudo service networking restart //network 관련서비스 재실행 
or
$ systemctl restart networking.service

  • ifup/ifdown  (상위 설정 및 Shell Script 연결)
$ cat /lib/systemd/system/networking.service //ifup ifdown 이 /etc/network/interfaces 사용
.......
[Install]
WantedBy=multi-user.target
WantedBy=network-online.target

[Service]
Type=oneshot
EnvironmentFile=-/etc/default/networking
ExecStart=/sbin/ifup -a --read-environment
ExecStop=/sbin/ifdown -a --read-environment --exclude=lo
RemainAfterExit=true
TimeoutStartSec=5min

/etc/network/interfaces 관련 좋은예제

/sbin/ifup and ifdown 관련사항


2.7 Systemd 의 Network 설정

처음에 NTP 및 DNS / DHCP 관련부분 설정을 다른 곳에서 설정하려고 했으나 아래와 같이 한곳에서 설정하면 다 적용이 되는 부분을 찾았다.

  • systemd 로만 network 설정할 경우 
systemd의 network interface 설정은 기존과 다른게 systemd-networkd에서 담당한다

만약 systemd로만 구성할 경우 /etc/network/interface의 설정은 불필요한 것으로 보이는데,여기서 설정하지 못하는 것은 
추가로 상위와 같이 보완용 ifup/ifdown 기반으로 넣을 수도 있을 것 같다. 

systemd로만 network를 구성할 경우  /etc/systemd/network/xxx.network 로 network interface를 추가하고 설정하는 구조이다

일반 MII기반의 ethernet은 ethx.network  , USB-CDC 기반의 network는 usbx.network
이외의 network의 이름일 경우 상위와 동일하게 각 interface name으로 설정.
** 주의 우선순위가 될 것이며, /etc 가 가장 높으므로, 이 위주로 설정진행  
** 주의 wvdial의 ppp의 경우 이곳에서 설정하지 않음 
  • eth0 Interface기반 Network DHCP 설정
$ cat /etc/systemd/network/eth0.network  
[Match]
Name=eth0

[Network]
DHCP=yes
NTP=1.kr.pool.ntp.org
DNS=8.8.8.8
DefaultRouteOnDevice=yes

  • eth0 Interface기반 Network Static IP설정
$ cat /etc/systemd/network/eth0.network  
[Match]
Name=eth0

[Network]
##Static IP로 직접설정  192.168.1.67/24  24는 NetMask의 bits수 Netmask 255.255.255.0 
Address=192.168.1.67/24
Gateway=192.168.1.1
NTP=1.kr.pool.ntp.org
DNS=8.8.8.8
DefaultRouteOnDevice=yes

DefaultRouteOnDevice를 해야지 route table에 default로 등록가능

/etc/systemd/network/eth0.network  설정사항
  https://www.freedesktop.org/software/systemd/man/systemd.network.html

/etc/systemd/network/99-default.link (현재 /dev/null 로 link됨)

  • Route Table 설정확인 및 분석
$ route  
or
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth0

$ ls /etc/network/
if-down.d       if-post-down.d  if-pre-up.d


  • DNS Server 설정확인
/var/run/resolv.conf
/etc/resolve.conf


  • RTC 관련사항
/dev/rtc 기능으로  i.MX SNVS
PMIC의 별도의 Battery Generator 와 i.MX의 RTC기능이며, 배터리로 RTC가 유지가 되어진다.

세부사항은 timedatectl 설정에서 확인가능
  https://www.digi.com/resources/documentation/digidocs/90001546/reference/bsp/cc6/r_real_time_clock.htm
  https://developer.toradex.com/knowledge-base/how-to-use-the-real-time-clock-in-linux