leejhstory

Introduce to Systemd 본문

운영체제 및 네트워크/리눅스

Introduce to Systemd

LeeJHstory 2017. 2. 24. 17:44

introduce to systemd

-전통적인 시스템은 init 프로세스 사용
- 전통적인 ini은 한계에 봉착
- 새로운 ipd 1 -> systemd
- systemd 사용시 장점
    
    -병렬처리를 통한 시스템의 부팅속도 향상
    - 의존적인 서비스의 시작 없이 요청 시 데몬 즉시 시작
    - 자동화된 서비스 관리
        예) 네트워크 불가시 네트워크 서비스 시작
    - Linus control groups을 이용한 관련 프로세스의 트랙킹

       /etc/system 기반이 아닌 일부 래거시 서비스는 여전히 쉘 스크립트로 제공
       /etc/sysconfig


사용가능한 systemd 유닛 종류
# systemctl -t help
service : 시스템 서비스
target : systemd 유닛 그룹
automount : 파일 시스템의 자동 마운트 지점
device : 커널에 의해 재인식된 장치 파일
mount : 파일 시스템의 마운트 지점
path : 파일 시스템 내의 파일 또는 디렉토리
scope : 외부에서 만들어진 프로세스
slice : 시스템 프로세스 관리를 위한 계층적으로 조직화된 유닛들의 그룹
snapshot : systemd 매니저의 보존 상태
socket  : 프로세스 간 통신 소켓
swap : 스왑 장치 또는 스왑 파일
timer : systemd 타이머


systemd unit 파일 목록
모든 유닛 상태 점검
# systemctl

서비스 유닛 상태만 확인
# systemctl --type=service

서비스 상태가 filed, maintenance 인 유닛만 출력 ( -l : full output)
# systemctl status avahi-daemon.service -l

서비스 활성화 확인
# systemctl is-active sshd

# systemctl is-enavled sshd

모든 로그된 유닛 목록 출력( --all : inactive unit 도 함께 출력)
# systemctl list-unit --type=service
# systemctl list-unit --type=service -all

모든 유닛의 활성화/비활성화 상태 출력
systemctl list-unit-files
systemctl list-unit-files --type=service

실패한 서비스 확인
systemctl --failted --type=service

런레벨의 이해 및 변경
- systemd는 기존의 init을 통한 런레벨을 더 이상 제공하지 않음
- 각 런레벨에 대한 설정 셋을 통해 런레벨과 동일한 환경 제공

Single User Mode ( 기존 런레벨 기준 :1 )
# systemctl rescue

Multi User Mode ( 기존 런레벨 기준 : 3 )
# systemct isolate multi-user.target
# systemct isolate runlevel3.target

+ 초기에 graphical.target 에서 다른 레벨로 이동하는 경우 multi-user.target으로 이동해도graphical.target로 이동 됨.

Multi User Mode ( 기존 런레벨 기준 : 5 )
# systemct isolate graphical.target
# systemct isolate runlevel5.target

Systemd target vs. SysV Runlevels


런레벨대상 유닛설명
0runlevel0.target . poweroff.target시스템을 종료하고 전원을 끔 
1runlevel1.target . rescue.target구조 쉘을 설정
2runlevel2.target . multi-user.target다중 사용자 시스템을 설정(non-graphical)
3runlevel3.target  . multi-user.target다중 사용자 시스템을 설정(non-graphical)
4runlevel4.target  . multi-user.target다중 사용자 시스템을 설정 (non-graphical)
5runlevel5.target . graphical.target그래픽 다중 사용자 시스템을 설정
6runlevel6.target . reboot.target시스템을 종료하고 다시 시작


시스템 전원 관리 명령
이전 명령새로운 명령설명
haltsystemctl halt시스템 중지
poweroffsystemctl poweroff시스템 전원 끔
rebootsystemctl reboot시스템 재시작
pm-suspendsystemctl suspend일시 중단
pm-hibernatesystemctl hibernate최대 절전 모드
pmsuspend-hybridsystemctl hybrid-sleep정지 상태로 일시 중단

부팅 프로세스 (System V Boot Process)
BIOS/UEFI -> GRUB/LILO -> KERNEL
-> intt -> Read inittab -> rc.sysint -> Runlevel1~6

Systemd 분석 및 추적
* systemd-analyze
- 시스템과 부팅 성능 통게와 상태 결정
- 시스템과 서비스 관리자로 부터 정보 추적
- 옵션 없이 사용시 time 이 암시적으로 적용
* system-analyze time
- 사용자 영역에 도달하기 전에 커널에서 소요된 시간
- 일반 시스템에서는 사용자 영역에 도달하기 전에 초기 RAM(initrd)디스크에서 소요(일반적인 시스템에서는 이를 사용자 영역 초기화라고 명명)
- 지점까지의 모든 시스템 서비스가 만들어진(spawnde) 경우 측정치는 단순히 통과된 지점까지 전달된 시간을 측정
- 이것이 디스크가 유휴하거나, 초기화가 완전히 끝날때 까지 필요한 것은 아님.

* system-analyze critical-chain

- 시간이 많이 소요된 서비스에 대한 실행과 대기에 대하여 체인 형태로 출력
- 유닛이 활서오하 또는 시작된 후 시간은 @ 문자로, 유닛이 시작하는데 걸린 시간은 "+" 문자로 유닛의 실행은 병렬적으로 실행되기 때문에 하나의 서비스 초기화에는 소켓 활성화에 의존하는 경우가 있으므로 출력을 오해할 수 있음.

* systemd-analyze plot

- 시스템 서비스 정보를 상세하게 SVG 그래픽으로 출력.
- 서비스 시작 시간을 강조하고, 초기화에 소요된 시간을 하이라이팅.
# systemd-analyze plot > analyze.svg

* systemd-analyze dot

- GraphViz dot 도구를 이용하여 텍스트기반 그래프 출력
- 필요시 GrapViz 설치 (# yum -y install graphviz)
# systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg

Systemd 분석 및 추적
- systemd-analyze dot 를 이용하여 target unit에 의존하는 모든 서비스를 추적 및 시각화
# systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg

레거시 네트워크 구성
* 전통적인 시스템의 네트워크 구성
- ifconfig 와 route 명령들을 이용한 구성

네트워크 주소 확인(인터페이스)
ip확인
   # ip addr show eth0
네트워크 통계 정보 확인(ip명령)
   # ip -s link show eth0

추가 ip 주소 입력
   # ip addr add 10.0.2.50/13 dev eth0
ip주소 확인
   # ip addr

네트워크 주소(경로 관리)
# ip route [ add | del | change | append | replace ]  목적 주소
라우팅 확인 : # ip route
새로운 라우팅 경로 추가 : ip route add default via 192.168.1.1
기본 게이트웨이 추가 : # route add -net default gw 10.0.2.2 dev eth0

라우팅 테이블 확인 : # netstat -nr
main 테이블 확인 : # ip route show table main
시스템에 존재하는 모든 테이블 확인 : # route show table all

nmcli 를 이용한 네트워크 관리
모든 연결 목록 확인 ( --active : 활성화된 연결만 출력시)
# nmcli connection show

장치 상태 확인 : # nmcli dev status 
장치 상세 정보 확인 : # nmcli dev show eth0

nmcli 를 이용한 새로운 connection 생성
default 이름으로 새로운 연결 추가 (DHCP를 이용하여 자동연결)
# nmcli connection add con-name "default" type ethernet ifname eth0

static 이름으로 새로운 연결 추가 (정적 연결, 자동 연결 하지 않음)
# nmcli connection add con-name "static" ifname eth0 autoconnetc no type ethernet ip4 192.168.102.20 gw4 192.168.102.2

static 연결로 변경
# nmcli connection up "static"

DHCP 연결로 변경
# nmcli connection up "default"

    + nmcli dev disconnect DEVNAME 명령 사용시 관리적으로 해당 장치는 비활성화되며 사용 금지되고, 자동 연결도 금지됨.


NetworkManager-GUI(GUI모드로 에디터?)
# nm-connection-editor

NetworkManager-TUI

firewalld 의 필요성

* 기존 iptables 한계

* firewalld가 필요한 이유
    - KVM, openstack 과 같은 가상화, 클라우드 환경하에서의 필터링 정책 동적 추적 가능
    - DBUS API를 통한 정보 공유를 통해 정책 충돌 문제 해결
        + DBUS란? 어플리케이션간의 통신을 지원하는 인터페이스

핵심 개념
* DBUS 인터페이스
    - 어플리케이션간의 통신을 지원하는 인터페이스
* ZONE
    - 네트워크 및 방화벽 연결에 사용되는 인터페이스
# firewall-cmd --list-all-zones
# firewall-cmd --zone=dmz --list-all

firewall-cmd 사용 (구성)
사진찍었음 



오늘 시험

시스템에 존재하는 모든 파일중, 특정 퍼미션에 있는 파일만 출력되게?
Q) 모든 파일중 퍼미션 600 이상 파일들 
find / -perm -600
(+600이면 이하, 600이면 딱 600 퍼미션만 찾아준다.)

Q) rm -rf ./* 와 rm -rf /* 차이
rm -rf ./*는 현재 디렉토리 안을 모두 지움
rm -rf /* 다지움 (절대 해서는 안됨)

Q) fileA 파일에서 grep 명령어로 a~zolalis 중에
c~golalis 하고 yolalis 출력하기 
grep [c-g,y]olalis fileA  맞나?

Q) 파일 생성할때 디렉토리 -> 파일 한번에 생성하기 옵션
-p
사용법 찾아보기

Q)상대경로와 절대경로 이동방법
상대경로 : cd ../파일명
절대경로 : cd /파일명/파일명2

Q) 하드링크와 심볼릭링크 차이
하드링크는 원본파일을 삭제해도 실행이된다. 심볼릭은 안됨.

Q) /etc 에서 root 들어가는 것 찾기?
grep -l 'root' /etc/*


Comments