3/30/2017

systemctl 사용법 과 networkctl/timedatectl 설정 및 그외설정

1. systemctl 의 기본사용법

systemctl은 기본적으로 root권한이 필요하기 때문에 아래와 같이 실행하며, systemd의 상태를 확인 및 제어가 가능하며
이 command를 이용하여, 각각의 service를 비롯하여 다양한 분석도 가능하다.


  • 기본실행방법

$ sudo -s 
$ exit
or 
$ sudo systemctl     


systemctl - manual
  https://www.freedesktop.org/software/systemd/man/systemctl.html


  • systemd의 동작을 트리형태로 파악 
일반적으로 시스템의 서비스가 트리형태로 보여주며, 관련사항 정보를 나열해준다.

$ systemctl status // systemd 의 전체 서비스의 실행되는 구조를 쉽게 파악 
● raspberrypi
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Thu 1970-01-01 09:00:01 KST; 49 years 1 months ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   ├─session-c3.scope
           │   │ ├─ 833 sshd: pi [priv]
           │   │ ├─ 848 sshd: pi@pts/0
           │   │ ├─ 851 -bash
           │   │ ├─1090 systemctl status
           │   │ └─1091 pager


상위에 적용되어지는 Option확인
  https://www.freedesktop.org/software/systemd/man/systemctl.html#Options

  • 개별 unit status 확인

$ systemctl status avahi-daemon.service   //설정화면으로 들어감 
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
   Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sun 2019-02-17 01:44:46 KST; 2min 23s ago
  Process: 1169 ExecStart=/usr/sbin/avahi-daemon -s (code=exited, status=0/SUCCESS)
 Main PID: 1169 (code=exited, status=0/SUCCESS)
   Status: "avahi-daemon 0.6.32 starting up."
     ......

$ systemctl is-enabled avahi-daemon.service
enabled


  • units 의 종속성 확인 
각 Units의 종속성을 확인가능하며, 이 부분은 종속성만 확인

$ systemctl list-dependencies   //default가 default.target
default.target
● ├─acct.service
● ├─bootchart-done.service
● ├─bootchart.service
● ├─dphys-swapfile.service
● ├─lightdm.service
● ├─raspi-config.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
●   ├─acct.service
●   ├─avahi-daemon.service
●   ├─bluealsa.service
●   ├─bootchart-done.service
....

$ systemctl list-dependencies --all  //모든 종속성을 확인가능 

$ systemctl list-dependencies --after  //default.target 기준으르 After (Unit 설정부분참조)

$ systemctl list-dependencies --before  //default.target 기준으르 Before

$ systemctl list-dependencies raspi-config.service  // 본인보고싶은 unit의 종속성확인 
 


1.1 systemd의 unit의 제어 

systemd의 command는 file(아래참조) 기반 과 systemd에서 생성된 unit(즉,실행되어 memory 존재),file 기반은 아래의 1,2번에 있는 unit들을 말한다.
더불어 systemd는 아래의 순서대로 찾지만 우선순위는 /etc가 높으므로, 최종제어는 /etc에서 한다
  1. /lib/systemd/system
  2. /etc/systemd/system
**/run/systemd 는 생략 (실행중인 정보들 )

  • unit 에 enable/disable 추가/제거 (file 기반)
file기반의 unit을 enable을 하므로써, 링크를 생성하여 load가 되며, 이후에는 start/stop/restart 명령진행가능

$ systemctl enable avahi-daemon.service  // /etc에 각 symbolic link 생성  
Created symlink /etc/systemd/system/dbus-org.freedesktop.Avahi.service → /lib/systemd/system/avahi-daemon.service.
Created symlink /etc/systemd/system/multi-user.target.wants/avahi-daemon.service → /lib/systemd/system/avahi-daemon.service.
Created symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket → /lib/systemd/system/avahi-daemon.socket.

$ systemctl disable avahi-daemon.service  // /etc에 각 symbolic link 제거  
Removed /etc/systemd/system/dbus-org.freedesktop.Avahi.service.
Removed /etc/systemd/system/multi-user.target.wants/avahi-daemon.service.
Removed /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.

$ systemctl is-enabled avahi-daemon.service  // 확인 
enabled

// /lib 와 /etc wants 중심으로 기능확인 
$ ls /lib/systemd/system/*wants
.....
/lib/systemd/system/multi-user.target.wants:
dbus.service                          systemd-logind.service
getty.target                          systemd-update-utmp-runlevel.service
systemd-ask-password-wall.path
....
/lib/systemd/system/sockets.target.wants:
dbus.socket                      systemd-journald.socket
systemd-initctl.socket           systemd-udevd-control.socket
systemd-journald-audit.socket    systemd-udevd-kernel.socket
systemd-journald-dev-log.socket
......

$ ls /etc/systemd/system/*wants
.....
/etc/systemd/system/multi-user.target.wants:
avahi-daemon.service      machines.target           rngd.service
busybox-klogd.service     ofono.service             systemd-networkd.service
busybox-syslog.service    power-setup.service       systemd-resolved.service
....
/etc/systemd/system/sockets.target.wants:
avahi-daemon.socket      sshd.socket
...

  • unit mask/unmask 제외 (file 기반)
mask는 disalbe 보다 더 강력한 명령으로 unit 제외 해버리겠다는 의미으로 enable 해도 소용이 없으며
만약 list-unit-files에는 검색은 되지만, enable이 제대로되지 않는다면, 이부분을 보자.

$ systemctl mask avahi-daemon.service  // /lib 에 이미 존재하지만, /etc에서 막음 
Created symlink /etc/systemd/system/avahi-daemon.service → /dev/null.

$ systemctl unmask avahi-daemon.service // /etc에서 막은 것을 제거 (etc가 우선순위가 높음) 
Removed /etc/systemd/system/avahi-daemon.service

$ systemctl list-unit-files | grep masked  // mask 상태 확인 가능 


  • 개별 unit start/stop/restart/reload 동작제어 (memory 기반)
enable이 된 상태의 avahi를 예를들면 아래와 같이 각각의 unit 명령을 실행가능하다.

$ systemctl start avahi-daemon.service

$ systemctl stop avahi-daemon.service

$ systemctl restart avahi-daemon.service



  • service enable /disable  한 후 동작확인 예 (timesyncd)

 // service stop 한 후 disable 하여 다음 부팅시에도 미동작  
$ systemctl stop systemd-timesyncd
$ systemctl disable systemd-timesyncd

// service enable 한 후 start   
$ systemctl enable systemd-timesyncd
$ systemctl start  systemd-timesyncd
$ systemctl restart  systemd-timesyncd  //문제시 다시 restart 

//이 service 의 active or disable 확인
$ systemctl is-active  systemd-timesyncd
$ systemctl is-enabled systemd-timesyncd
$ systemctl list-units --type service   


1.2 Systemd 의 전체 Units 정보확인 

일반적인 systemd의 unit 확인방법은 Memory에 있는 Unit(실행된 Unit)과 File에 존재하는 Unit로 검색이 가능하며,
세부옵션을 설정하여 다양하게 검색이 가능하다. .

  • 세부옵션 
  1. -t -type: Unit의 종류 (e.g service, target, timer, mount ...) 
  2. -a -all: 모든 Unit의 정보를 보여준다. 
  3. --state: Unit의 상태 입력 (e.g active, inactive, failed ... )
상위에 적용되어지는 Option확인
  https://www.freedesktop.org/software/systemd/man/systemctl.html#Options

  • list-units로 (in memory)
list-units의 경우 memory에 있는 unit를 기준으로 찾아주며, default로 활성화된 상태인 systemd의 unit을 확인가능하며, 이외의 옵션을 주어
다양하게 검색이 가능하다

$ systemctl list-units or systemctl // default가 활성화된 Unit를 검색 및 device 분석 
UNIT                                                                                         LOAD   ACTIVE SUB       DESCRIPTION                
proc-sys-fs-binfmt_misc.automount                                                            loaded active waiting   Arbitrary Executable File F
sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0-hci0.device                             loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0.device                                  loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f202000.mmc-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0-mmcblk0p1.device loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f202000.mmc-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0-mmcblk0p2.device loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f202000.mmc-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0.device           loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f300000.mmc-mmc_host-mmc1-mmc1:0001-mmc1:0001:1-net-wlan0.device   loaded active plugged   /sys/devices/platform/soc/3
sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1:1.0-net-eth0.device      loaded active plugged   SMSC9512/9514 Fast Ethernet
sys-devices-platform-soc-soc:audio-bcm2835_alsa-sound-card0.device                           loaded active plugged   /sys/devices/platform/soc/s
sys-devices-virtual-block-ram0.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram1.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram10.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram11.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram12.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram13.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram14.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram15.device                                                       loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram2.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram3.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram4.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram5.device                                                        loaded active plugged   /sys/devices/virtual/block/
sys-devices-virtual-block-ram6.device                                                        loaded active plugged   /sys/devices/virtual/block/
....

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 의 device들을 보면, 실제위치는 DESCRIPTION에 /sys filesystem 기반으로 구성되며, sys-devices 는 /sys/devices 이런식변경
// 최종 /sys의 device directory에서 uevent 확인  
// 최종 /sys의 device directory에서 of_node/ 에서 각 속성확인  


$ systemctl list-units | grep mount // mount 부분분석 
  -.mount                                                                                                          loaded active mounted   Root Mount                                         
  home-root.mount                                                                                                  loaded active mounted   /home/root                                         
  sys-fs-fuse-connections.mount                                                                                    loaded active mounted   FUSE Control File System                           
  sys-kernel-config.mount                                                                                          loaded active mounted   Kernel Configuration File System                   
  sys-kernel-debug.mount                                                                                           loaded active mounted   Kernel Debug File System                           
  tmp.mount                                                                                                        loaded active mounted   Temporary Directory (/tmp)                         
  var-log.mount                                                                                                    loaded active mounted   /var/log                                           
  var-volatile.mount                                                                                               loaded active mounted   /var/volatile                                      
  systemd-remount-fs.service                                                                                       loaded active exited    Remount Root and Kernel File Systems                  
....

$ find /etc/systemd/  -name *mount* // file mount 아무것도 없음
$ find /lib/systemd/  -name *mount* // file mount 부분분석   
/lib/systemd/system/sys-fs-fuse-connections.mount
/lib/systemd/system/sys-kernel-config.mount
/lib/systemd/system/systemd-remount-fs.service
/lib/systemd/system/machines.target.wants/var-lib-machines.mount
/lib/systemd/system/sysinit.target.wants/sys-fs-fuse-connections.mount
/lib/systemd/system/sysinit.target.wants/sys-kernel-config.mount
/lib/systemd/system/sysinit.target.wants/dev-hugepages.mount
/lib/systemd/system/sysinit.target.wants/dev-mqueue.mount
/lib/systemd/system/sysinit.target.wants/sys-kernel-debug.mount
/lib/systemd/system/dev-hugepages.mount
/lib/systemd/system/umount.target
/lib/systemd/system/var-lib-machines.mount
/lib/systemd/system/remote-fs.target.wants/var-lib-machines.mount
/lib/systemd/system/dev-mqueue.mount
/lib/systemd/system/local-fs.target.wants/systemd-remount-fs.service
/lib/systemd/system/local-fs.target.wants/tmp.mount
/lib/systemd/system/tmp.mount
/lib/systemd/system/sys-kernel-debug.mount
/lib/systemd/systemd-remount-fs        // binary 파일  

// -.mount , home-root.mount , var-log.mount var-volatile.mount 는 상위에 존재하지 않음
// /lib/systemd/systemd-remount-fs 이 /etc/fstab 참조하여, 생성된 unit 이며, 이후 fsck로 filesystem 체크  

$ cat /lib/systemd/system/systemd-remount-fs.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=Remount Root and Kernel File Systems
Documentation=man:systemd-remount-fs.service(8)
Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-fsck-root.service
Before=local-fs-pre.target local-fs.target shutdown.target
Wants=local-fs-pre.target
ConditionPathExists=/etc/fstab

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/systemd/systemd-remount-fs

$ fdisk -l   // 각 partition 확인
or
$ systemd-mount --list 
  https://www.freedesktop.org/software/systemd/man/systemd.html#


  • 이외 세부검색방법

$ systemctl list-units -all  // 모든 Unit 검색 (비활성화부분포함)
or
$ systemctl list-units -a   // 모든 Unit 검색 (비활성화부분포함)


$ systemctl list-units -t service // 활성화된 service unit만 검색 
or
$ systemctl  list-units -type service // 활성화된 service unit만 검색 


$ systemctl list-units -t target   // 활성화된 target unit만 검색 (Unit 11개 종류가 있으므로 각각설정)

$ systemctl list-units -t timer   // 활성화된 timer unit만 검색 (Unit 11개 종류가 있으므로 각각설정)


$ systemctl list-units -t service  --state=inactive  // 비활성화된 Unit의 Serivce만 검색 


$ systemctl list-units --state=failed    // Failed Unit 검색
or 
$ systemctl --failed   // Failed Unit 검색



  • list-sockets (in memory)
socket unit는 Network관련된 것이므로, 동작 중인 socket unit의 세부정보인 Network 정보확인가능, 즉 Server의 존재 및 동작확인가능

$ systemctl list-sockets   // SOCKET의 LISTEN (Server)를 표시 (동작확인) (NETWORK 정보확인)

$ systemctl list-units -t socket  // 상위와 같이 UNIT의 status 만 확인 

  • list-timers (in memory)
timer unit는 기존의 cron과 유사하며, 동작 중인 timer의 상태와 세부정보를 별도로 볼 수 있다.

$ systemctl list-timers   // NEXT(다음동작)  LEFT (남은시간)  LAST (마지막실행) 동작확인   

$ systemctl list-units -t timer  // 상위와 같이 UNIT의 status 만 확인 

  • list-unit-files (in file)
/lib/systemd/system or /etc/systemd/system 에 설치된 files 확인검색하며, 각 상태를 확인가능하다.

$ systemctl list-unit-files
UNIT FILE                              STATE    
proc-sys-fs-binfmt_misc.automount      static   
-.mount                                generated
boot.mount                             generated
dev-hugepages.mount                    static   
dev-mqueue.mount                       static   
proc-fs-nfsd.mount                     static   
proc-sys-fs-binfmt_misc.mount          static   
run-rpc_pipefs.mount                   static   
sys-fs-fuse-connections.mount          static   
sys-kernel-config.mount                static   
sys-kernel-debug.mount                 static   
systemd-ask-password-console.path      static   
systemd-ask-password-plymouth.path     static   
systemd-ask-password-wall.path         static   
session-c1.scope                       transient
session-c2.scope                       transient
session-c3.scope                       transient
acct.service                           generated
alsa-restore.service                   static   
alsa-state.service                     static   
alsa-utils.service                     masked   
apply_noobs_os_config.service          disabled 
apt-daily-upgrade.service              static   
apt-daily.service                      static   
auth-rpcgss-module.service             static   
autologin@.service                     enabled  
autovt@.service                        disabled 
.....



  • service unit의 설정보기 

$ systemctl show avahi-daemon.service
Type=dbus
Restart=no
NotifyAccess=main
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
RuntimeMaxUSec=infinity
WatchdogUSec=0
WatchdogTimestampMonotonic=0
FailureAction=none
PermissionsStartOnly=no
RootDirectoryStartOnly=no
RemainAfterExit=no
GuessMainPID=yes
MainPID=0
ControlPID=0
BusName=org.freedesktop.Avahi
FileDescriptorStoreMax=0
NFileDescriptorStore=0
StatusText=avahi-daemon 0.6.32 starting up.
StatusErrno=0
Result=success
UID=4294967295
GID=4294967295
...



  https://wiki.archlinux.org/index.php/systemd
  https://websetnet.com/ko/manage-systemd-services-and-units/
  https://www.conory.com/note_linux/42241
  https://www.freedesktop.org/wiki/Software/systemd/
  http://linux.systemv.pe.kr/centos-7-systemd-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/


2. systemctl 이외의 설정 


2.1 networkctl 설정 

ifconfig 처럼 각각의 network의 정보를 확인 가능한 명령

  • 물리적인 network 확인  

$ networkctl --help
networkctl [OPTIONS...]

Query and control the networking subsystem.

  -h --help             Show this help
     --version          Show package version
     --no-pager         Do not pipe output into a pager
     --no-legend        Do not show the headers and footers
  -a --all              Show status for all links

Commands:
  list [LINK...]        List links
  status [LINK...]      Show link status
  lldp [LINK...]        Show LLDP neighbors
  label                 Show current address label entries in the kernel


$ networkctl list // ifconfig 처럼 물리적인 network 연결상태확인 

$ networkctl status -a  // ifconfig 처럼 network IP 및 정보학인 

networkctl (systemd-networkd)
  https://www.freedesktop.org/software/systemd/man/networkctl.html#
  https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html#


2.2 timedatectl 설정 

시간에 관련된 설정으로 NTP를 비롯하여, Hardware 적인 시간인 RTC와 System Clock 와 지역 설정까지 가능하다.

  • timedatectl 사용법
$ timedatectl --help
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode
     --monitor             Monitor status of systemd-timesyncd
  -p --property=NAME       Show only properties by this name
  -a --all                 Show all properties, including empty ones
     --value               When showing properties, only print the value

Commands:
  status                   Show current time settings
  show                     Show properties of systemd-timedated
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Enable or disable network time synchronization

systemd-timesyncd Commands:
  timesync-status          Show status of systemd-timesyncd
  show-timesync            Show properties of systemd-timesyncd



  • timedatectl 기본상태확인
$ timedatectl   // Time에 관련된 일반적인 상태확인 
or  
$ timedatectl status                                  
               Local time: Tue 2017-04-14 01:48:24 UTC       // UTC Time +9이지만 현재 /etc/localtime을 사용하여 제대로 동작안됨
           Universal time: Tue 2017-04-14 01:48:24 UTC       // UTC Time 
                 RTC time: Tue 2017-04-14 01:48:23           // RTC기반으로 동작 
                Time zone: n/a (UTC, +0000)                  // UTC Time에 Time zone은 /etc/localtime으로 설정되어있음 (Seoul +9)
System clock synchronized: no                                // 시간을 Sytem clock 과 동기화기능 
              NTP service: active                            // NTP Client로 timesyncd 이용
          RTC in local TZ: no                                // RTC의 Timezon 사용여부 (timedatectl set-local-rtc  0) 


  • timezone 기능확인 
$ timedatectl list-timezones   //  timezones list를 보여줌 
//만약 동작하지 않는다면, timezone의 directory 확인 (/etc/localtime -> /usr/share/zoneinfo/Asia/Seoul)

$ timedatectl set-timezone “Asia/Seoul” // 상위 /etc/localtime 링크변경 


  • timedatectl 날짜시간설정
$ timedatectl set-ntp 0
//변경시 주의사항.1 NTP설정(timedatectl set-ntp true)이면, set-time부분에서 에러발생
//변경시 주의사항.2 RTC에도 적용되므로 반드시 같이 확인
$ timedatectl set-time 2015-11-20              //날짜만 변경 
$ timedatectl set-time 15:58:30              //시간만 변경  
$ timedatectl set-time "2012-10-3018:17:16"  //날짜시간동시변경  


  • Last login 정보지우기 (NTP/RTC 미사용시 이시간사용)
// 주의: Last Login Time 정보 Linux가 시스템 Time 설정가능

// 아래 파일은 binary가 있으므로 존재여부만 확인
$ cat /var/log/lastlog        // Last Login 정보이지만, Binary이므로 깨짐 
$ cat /var/log/utmp           // last -f /var/log/utmp (picture of users logins at which terminals, logouts,) 
$ cat /var/log/wtmp           // last -f /var/log/wtmp (utmp의 history)   
$ cat /var/log/btmp           // last -f /var/log/btmp (records only failed login attempts.)

// lastlogin 정보확인
$ who                                // 명령어로 본인 및 Last Login Time 확인 
$ lastlog                            // last login 정보확인 (/var/log/lastlog 기반) 

// NTP Client Service Stop and Disable
$ systemctl stop systemd-timesyncd
$ systemctl disable systemd-timesyncd
$ systemctl status systemd-timesyncd

// 원하는 시간으로 변경
$ timedatectl set-time "2012-10-3018:17:16"

// 주의: NTP 미사용 과 RTC 미사용한 후 시간설정이 되면 외부의 Device(GPS or 외부 RTC) 혹은 Build Time 에서 설정될 가능성이 높음
// lastlogin 정보삭제
$ lastlog -u root -C               // last login user:root -C clear (lastlog가 /var/log/lastlog 기반)
$ rm /var/log/lastlog
$ rm /var/log/*tmp
$ sync
// HW Reset or Power On/Off

lastlog 정보
  https://unixserveradmin.wordpress.com/2014/08/10/how-to-read-or-view-utmp-wtmp-and-btmp-files-in-linux/

  • RTC 와 NTP 상태확인 
// 상위설정상태 확인 가능, 아래 Timezone도 나와야함 
$ timedatectl show 
LocalRTC=no                                // RTC on /off (timedatectl set-ntp 1 or 0)
CanNTP=yes                                 // NTP Client Service 존재여부 
NTP=yes                                    // NTP Service on / off (timedatectl set-ntp 1 or 0) 
NTPSynchronized=yes                        // NTP Server에 접속후 Sync 여부  
TimeUSec=Tue 2017-07-02 10:38:38 KST       // System 의 실제동작 시간 (date)
RTCTimeUSec=Tue 2017-07-02 10:38:39 KST    // RTC Time Sec (/proc/driver/rtc or /dev/rtc) 


  • NTP Server 연결상태확인
//확인시 주의사항 NTP설정(timedatectl set-ntp true)일 경우에만 확인
//NTP Server 동작확인  및 systemd-timesyncd service 설정확인 
$ timedatectl timesync-status    // NTP Packet 확인 (Network 문제로 접속못함)
       Server: (null) (time3.google.com)
Poll interval: 0 (min: 32s; max 34min 8s)
 Packet count: 0

$ timedatectl timesync-status    // NTP Packet 확인 (Network 문제로 접속한 후 주기적으로 Sync)
       Server: 216.239.35.0 (time1.google.com)
Poll interval: 32s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 1
    Reference: GOOG
    Precision: 1us (-20)
Root distance: 167us (max: 5s)
       Offset: -886.603ms
        Delay: 70.981ms
       Jitter: 0
 Packet count: 1
    Frequency: +0.000ppm
$ timedatectl show-timesync    // NTP 설정부분 확인 (systemd-timesyncd 설정확인필요) 
......


  • NTP Service 사용여부결정
//NTP 설정 부분 상위 
$ timedatectl set-ntp true
$ timedatectl set-ntp false


  • RTC 사용여부 결정
//RTC의 Local Time 적용여부 설정 
$ timedatectl set-local-rtc  1  // /dev/rtc 사용하며, Local Time 적용여부 on (timedatectl status 확인) 
//이것으로 사용
$ timedatectl set-local-rtc  0  // /dev/rtc 사용하며, Local Time 적용여부 off


  https://www.tecmint.com/set-time-timezone-and-synchronize-time-using-timedatectl-command/
  https://www.freedesktop.org/software/systemd/man/timedatectl.html#
  https://www.freedesktop.org/software/systemd/man/systemd-firstboot.html#
  http://man7.org/linux/man-pages/man1/timedatectl.1.html
  http://man7.org/linux/man-pages/man1/systemd-firstboot.1.html

  • RTC 동작확인 
$ ls  /dev/rtc*  // rtc->rtc0 link 
/dev/rtc   /dev/rtc0  

$ cat /proc/driver/rtc
rtc_time        : 16:31:36
rtc_date        : 2017-03-13
alrm_time       : 00:00:00
alrm_date       : 1970-01-01
alarm_IRQ       : no
alrm_pending    : no
update IRQ enabled      : no
periodic IRQ enabled    : no
periodic IRQ frequency  : 1
max user IRQ frequency  : 64
24hr            : yes

  • RTC 와 Linux System 시간 동기화  
timedatectl이 제대로 동작안되면 busybox의 hwclock으로 강제설정

$ hwclock -r          // RTC Time 확인 

$ hwclock -w          // system 시간 ->  /dev/rtc 시간저장

$ hwclock -s          // /dev/rtc    ->  system 시간 

AP의 경우 PMIC와 같이 사용할 경우, RTC를 PMIC와 함께 사용하는 경우가 있으므로, 반드시 관련 Kernel config와 관련 Datasheet 참조

  http://man7.org/linux/man-pages/man8/hwclock.8.html
  https://www.digi.com/resources/documentation/digidocs/90001546/reference/bsp/cc6/r_real_time_clock.htm


2.3 systemd에서 사용되어지는 ctrl 설정 

그외에도 사용되어지는 ctrl command들이 존재하지만 경우에따라 다 지원하지는 않는것 같다.

사용한다면 아래의 Manual에서 확인하자

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

hostnamectl

$ hostnamectl --help
hostnamectl [OPTIONS...] COMMAND ...

Query or change system hostname.

  -h --help              Show this help
     --version           Show package version
     --no-ask-password   Do not prompt for password
  -H --host=[USER@]HOST  Operate on remote host
  -M --machine=CONTAINER Operate on local container
     --transient         Only set transient hostname
     --static            Only set static hostname
     --pretty            Only set pretty hostname

Commands:
  status                 Show current hostname settings
  set-hostname NAME      Set system hostname
  set-icon-name NAME     Set icon name for host
  set-chassis NAME       Set chassis type for host
  set-deployment NAME    Set deployment environment for host
  set-location NAME      Set location for host
  https://www.freedesktop.org/software/systemd/man/hostnamectl.html#

loginctl

$ loginctl --help
loginctl [OPTIONS...] {COMMAND} ...

Send control commands to or query the login manager.

  -h --help                Show this help
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-legend           Do not show the headers and footers
     --no-ask-password     Don't prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
  -p --property=NAME       Show only properties by this name
  -a --all                 Show all properties, including empty ones
     --value               When showing properties, only print the value
  -l --full                Do not ellipsize output
     --kill-who=WHO        Who to send signal to
  -s --signal=SIGNAL       Which signal to send
  -n --lines=INTEGER       Number of journal entries to show
  -o --output=STRING       Change journal output mode (short, short-precise,
                             short-iso, short-iso-precise, short-full,
                             short-monotonic, short-unix, verbose, export,
                             json, json-pretty, json-sse, cat)
Session Commands:
  list-sessions            List sessions
  session-status [ID...]   Show session status
  show-session [ID...]     Show properties of sessions or the manager
  activate [ID]            Activate a session
  lock-session [ID...]     Screen lock one or more sessions
  unlock-session [ID...]   Screen unlock one or more sessions
  lock-sessions            Screen lock all current sessions
  unlock-sessions          Screen unlock all current sessions
  terminate-session ID...  Terminate one or more sessions
  kill-session ID...       Send signal to processes of a session

User Commands:
  list-users               List users
  user-status [USER...]    Show user status
  show-user [USER...]      Show properties of users or the manager
  enable-linger [USER...]  Enable linger state of one or more users
  disable-linger [USER...] Disable linger state of one or more users
  terminate-user USER...   Terminate all sessions of one or more users
  kill-user USER...        Send signal to processes of a user

Seat Commands:
  list-seats               List seats
  seat-status [NAME...]    Show seat status
  show-seat [NAME...]      Show properties of seats or the manager
  attach NAME DEVICE...    Attach one or more devices to a seat
  flush-devices            Flush all device associations
  terminate-seat NAME...   Terminate all sessions on one or more seats
  https://www.freedesktop.org/software/systemd/man/loginctl.html#

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

  https://www.freedesktop.org/software/systemd/man/index.html

3/26/2017

bootchart

1. bootchart의 기능 

systemd에서 제공되는 boot에 관련된 시간을 측정을 해주는 프로그램이며, 현재 bootchart2까지의 기능을 제공을 해주고 있다.
물론 Kernel에서 printk의 옵션을 넣어 Serial에 Log로 각각의 시간을 볼수가 있지만, 이것은 어디까지나 printk 기반으로 하기 때문에,
bootchart는 init script 이후분석이라고 봐야할 것이다.(물론 Kernel의 모듈도 포함)


Bootchart 사이트
  http://www.bootchart.org/index.html
  http://www.bootchart.org/samples.html
  http://www.bootchart.org/images/bootchart.svgz


kernel의 cmdline에 init 부분을 설정
  https://elinux.org/Bootchart


상위의 정보를 보면 BusyBox에  Bootchart는 포함이 되어있으며, 설정을 하면 bootchard가 사용가능하다.


1.1 Raspberry Pi에서 bootchart 실행  


$ ls /sbin/boot*  // bootchartd 설치 확인 busybox로 설치가능 

$ sudo apt-get install bootchart bootchart-view

$ ls /sbin/boot*  //bootchartd 설치 확인 
/sbin/bootchartd

$cat /proc/cmdline   // Kernel Command line 확인 
8250.nr_uarts=0 cma=256M bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=PARTUUID=0c830106-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

$ cat /boot/cmdline.txt  // init 부분 미설정 확인 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=0c830106-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

$ sudo vi /boot/cmdline.txt  // Raspberry Pi cmdline 수정가능 
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=0c830106-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait init=/sbin/bootchartd

$ sudo reboot

$ cat /proc/cmdline
8250.nr_uarts=0 cma=256M bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=PARTUUID=0c830106-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait init=/sbin/bootchartd

$ ls /var/log/bootchart.tgz  // /sbin/bootchartd 로 bootchart.tgz 생성확인  
/var/log/bootchart.tgz

$ bootchart  //png 파일 생성 
Parsing /var/log/bootchart.tgz
Wrote image: ./bootchart.png

$ scp ./bootchart.png jhlee@192.168.1.101:/home/jhlee/


막상 사용해보니, 나에게는 거의 도움이 되지 않는 것 같으며, 추후 사용할 일 있다면 그때 사용하자.

raspberry pi 3 bootcmd 수정
  https://www.raspberrypi.org/documentation/configuration/cmdline-txt.md

Raspberry Pi는 쉽게 cmdline을 filesystem에서 수정이 가능하지만, 다른 Board일 경우는 Busybox와 uboot에서 적용해야겠다.



1.2 bootchart2 사용법 

bootchart2를 사용하면, 쉽게 python으로 /var/log/bootchart.tgz 정보를 쉽게 볼 수 있다.

$ sudo apt-get install bootchart2

$ pybootchartgui -i 

systemctl 사용법
  https://ahyuo.blogspot.com/2017/03/systemctl.html

Android 관련 Boot Time 소개 (bootchart 포함)
  http://www.slideshare.net/kanru/android-boot-time-optimization

전체 BootTime에 관련된 정보
  https://elinux.org/Boot_Time

나에게는 그다지 큰 도움이 되지 않는 것 같으며, 오히려, systemd 분석도구 가 더 좋은 것 같다.

3/01/2017

OpenMAX 기본 개념과 사용

1. OpenMAX 개념 

크로노스그룹(Khronos) 에서 만든 Media Library 이식을 위한 표준이라고 한다.
한마디로, 표준 API를 정해놓고, 사용하게 만든 것이며 Application 과 Hardware간에 이식성을 높이기 위해서 사용이 되어진다.
약자로 omx로 말하며 많은 embedded soc에서 많이 사용이 되어지고 있다.

OpenMax의 구현은 다음과 같이 3 단계의 Layer로 구성이 된다고 한다.
  1. OpenMAX AL (Application Layer) 
  2. OpenMAX IL (Intergration Layer)
  3. OpenMAX DL (Development Layer)






  https://en.wikipedia.org/wiki/OpenMAX


1.1 OpenMAX AL (Application Layer) 

Application과 Multimedia middleware사이에 표준 interface를 제공한다고 한다.
한마디로 Application이 이 API를 사용하면 이식성이 높아지는 것이다.
하지만, 이부분은 거의 보지를 못했다.

1.2 OpenMAX IL (Intergration Layer)

현재 가장 많이 사용되어지는 Layer로 IL Interface와 Soft 통합하여 주로 사용을 하는 것 같다.
현재 많이 보는 곳이 Gstreamer와 Android의 StageFright가 되는 것 같다.

솔직히 IL을 이용하여 Porting을 해본 경험이 있으면 좋겠지만, 아직 경험이 없으며,
이 부분은 Chip 업체마다 상당히 상이 한 것 같다.

  1. Linux에서는 Gstreamer 와 FFmpeg or Libav   
  2. Android에서는 StageFright or MediaCodec API
  3. Window에서는  DirectShow

  • Android의 StageFright의 구성 


  https://source.android.com/devices/media/


  • Gstreamer 와 OpenMax
Gstreamer도 OpenMax 대신에 soft codec인 FFmpeg을 사용해도 되지만, 성능을 위해서
많이 이렇게 사용을 한다. 

  http://elinux.org/images/e/e0/Gst-openmax.pdf
  https://www.freedesktop.org/wiki/GstOpenMAX/

  • Bellagio 
  STMicroelectronics의 관리되어지 Project 로 OpenMAX IL을 제공해주고 있다.
  http://omxil.sourceforge.net/

  • Lim OpenMax
  AL과 IL을 둘 다 구현을 하였다고 하는데 Open Source로 관리되는 것 같다.
  http://limoa.sourceforge.net/


1.3 OpenMAX DL (Development Layer)

CPU or DSP , GPU로 Hardware적으로 Media Engine을 만들어 제공을 하고 있으며, 이는 IL과 통합을 해야 제 기능을 할 수 있다.


2. OpenMax IL/AL 관련 Spec 
아래의 사이트에 가서 각각 Layer에 대한 Spec을 확인을 해보자.

  https://www.khronos.org/openmax/