ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SYSTEMD OVERVIEW
    IoT 과정 2017. 7. 18. 10:26
    반응형

    파워 넣고 OS가 켜지기 까지 어떤 프로세스가 발생하는지 알 수 있다.

    SYSTEMD OVERVIEW

    introduction

    # systemd 파일은 PID가 1번이다. PID가 0번인 파일은 kernel 이다.

    [root@station16 ~]# ps -ef | grep systemd
    root         1     0  0 09:54 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root       524     1  0 09:54 ?        00:00:00 /usr/lib/systemd/systemd-journald

    # 여러 파일을 확인해보았다. crond :스케쥴 파일, libvirtd : kvm에 필요한 파일. 이 두 파일의 부모 프로세스는 systemd 이다. 작은 예들만 보았지만, 즉 모든 프로세스가 시작하기위해선 부모프로세스(데몬) systemd가 필요하다.

    [root@station16 ~]# ps -ef |grep crond
    root      1061     1  0 09:54 ?        00:00:00 /usr/sbin/crond -n
    root      3172  2163  0 10:23 pts/0    00:00:00 grep --color=auto crond
    [root@station16 ~]# ps -ef | grep libvirtd
    root      1042     1  0 09:54 ?        00:00:00 /usr/sbin/libvirtd
    root      3199  2163  0 10:24 pts/0    00:00:00 grep --color=auto libvirtd


    # System Boot Method Overview / 시스템 부트 메서드에는 3가지가 있다. 시대 순이다.

    # Runlevel-driven - AT&T System V init
    # Event-driven - Upstart
    # Dependency-driven - Systemd

    # 아래는 제일 먼저 사용된 sysV의 run level에 관한 내용이다. 현재도 쓰인다.

    # run level(실행 수준) #runlevel 또는 # who -r 로 run level을 확인할 수있다. 아래는 런레벨 수준 정보이다.
    # 0 : 시스템 정지상태. {s, S, Single} : init's single-user mode (장애처리를 위한 안전모드, 네트워크 안됨)
    # 1 : run level 준비단계인 싱글유저모드 2: full multi-user, without networking
    # 3 : Full multi-user mode with textmode login 4: Custom or local system
    # 5 : Full multi-user mode with graphical X11 login 6: reboot

    # sysV init booting 순서
    /* power on -> POST(power on self test, 메모리 안 꽂았을 때 비프음 내는 등의 역할) -> BIOS (부팅장치 결정, bootrom에 존재) -> MBR(boot disk에 존재) -> grub2 호출 -> kernel 과 ramdisk를 메모리에 로드 실습환경의 리눅스인 경우 /boot/vmlinuz-3.10 를 메모리에 올린다. 이 수행은 boot(kernel) loader가 수행한다. -> init 실행 */

    # init이 포함하고 있는 내용들
    # 1) /etc/inittab : default runrevel을 설정
    # 2) /etc/rc.d/rc.sysinit : 시스템 초기화 작업 실행
    # 3) /etc/rc.d/rc : /etc/rc#.d/S... or /K ... #은 run level의 수준이 들어간다. 수준이 5라면 /etc/rc5.d/S. 의 스크립트 들이 수행된다
    # 4) /etc/rc.local 사용자가 부팅시 임의의 서비스를 등록할 수있다. default runlevel까지 스크립트가 수행된 후에 사용자 임의로 자동으로 수행할 스크립트들을 등록. 서버에서 시간 정보 들고와 업데이트 하는 서비스 ntp가 예로 있다.

    # target은 runlevel 개념의 대체로 사용되기도 한다. target은 systemd에서부터 사용됨
    # 0 : poweroff.target, 1 : rescue.target, 2,3,4 : multi-user.target, 5: graphical.target
    # 6 : reboot.target, 아래는 systemctl 명령으를 통해 현재 target 정보를 확인해보았다.

    [root@station16 ~]# systemctl get-default
    graphical.target

    # systemd system은 어떻게 다른가?

    # systemd의 pid가 1이다. systemd는 sysV에서 일렬로 세운 프로세스 부팅 메서드에서 부팅 메서드를 병렬처리로 바꾼 것이다. 그러나 어느정도의 디펜던시가 필요하므로 , 수행 시킬 순서를 정의하는 변수 Requires Wants After 등이 필요하다.

    [root@station16 ~]# ls -l /etc/systemd/system/default.target
    lrwxrwxrwx. 1 root root 36 Jul 15 04:12 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
    [root@station16 multi-user.target.wants]# cat /lib/systemd/system/graphical.target
    #  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=Graphical Interface
    Documentation=man:systemd.special(7)
    Requires=multi-user.target            //수행 되기 위해 필요한것들
    Wants=display-manager.service     // 그 이후에 수행 되어야할 것
    Conflicts=rescue.service rescue.target
    After=multi-user.target rescue.service rescue.target display-manager.service
    AllowIsolate=yes    // 수행 되기 이전에 수행 된 것들


    [root@station16 ~]# ls -l /lib/systemd/system/graphical.target.wants
    total 0
    lrwxrwxrwx. 1 root root 39 Jul 15 03:58 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service


    # systemd targets은 sysV runlevel concept를 대체되어 사용된다.
    # 파일의 이름 끝이 .target으로 끝난다. unit_name.wants/ 디렉토리를 이용한다.
    # 현재 타겟변경하기
    [root@station16 ~]# systemctl isolate multiuser.target  // 이것은 이전 버전의 "init #" 명령어와 같다.

    # 디폴트 타겟 변경하기 (디폴트 런레벨 수준)
    [root@station16 ~]# systemctl get-default
    graphical.target
    [root@station16 ~]# system set-default multi-user.target

    # systemd 이용하는법  /언제 사용하는지는 잘 모르겠으나, 부팅시에 서비스 결정할 때 사용하는 또는 시스템 온일 때 사용 또는 정지

    # systemctl start "unit_name.service" { stop, restart }
    # systemctl status "unit_name.service" 상태확인
    # systemctl disabled "unit_name.service" 부팅하는 타겟파일에서 심볼릭 링크를 지우기 {enable}
    # systemctl mask "unit ..."  링크를 /dev/null 로 한다. 사용자들의 사용을 제한하기위함
    # systemctl unmask "unit..." mask 해제하기


    # system에 있는 service들을 확해보았다. state는 enabled, static, disabled가 있다. enable, disable은 부팅시에 사용할지를 말하고, static은 부팅후 사용자에 의해 쓰이는 서비스를 뜻한다고한다

    [root@station16 ~]# systemctl list-unit-files -t service
    UNIT FILE                                     STATE  
    abrt-ccpp.service                             enabled
    abrt-oops.service                             enabled
    abrt-pstoreoops.service                       disabled
    abrt-vmcore.service                           enabled
    abrt-xorg.service                             enabled
    abrtd.service                                 enabled
    accounts-daemon.service                       enabled
    acpid.service                                 enabled
    arp-ethers.service                            disabled
    atd.service                                   enabled
    auditd.service                                enabled
    auth-rpcgss-module.service                    static 
    autofs.service                                disabled

    반응형

    'IoT 과정' 카테고리의 다른 글

    SOFTWARE MAINTENANCE  (0) 2017.07.18
    GRUB 관련  (0) 2017.07.18
    SYSTEMD OVERVIEW  (0) 2017.07.18
    커널 옵션 적응하기, 드라이버 편집하기 등 task  (0) 2017.07.17
    LINUX KERNEL & DEVICES  (0) 2017.07.17
    Enterprise Linux System - Adnministration 시작  (0) 2017.07.17

    댓글 0

Designed by Tistory.