2016/07/18 라즈베리파이 네트워크 관련 에러들 잡기

문제상황 : 파이썬 패키지를 받을때 (pip 명령어를 쓸 때 다음과 같은 에러메시지가 나올때)
나는 ryu 패키지를 설치하려고 할 때 이 에러가 났다.
 pip 말고 직접 git패키지를 이용해 다운로드 받은 다음  python install을 이용해도 마찬가지 였다. 아마 파이썬 패키지를 설치할 때 pypi(파이썬 패키지 서버)에 접속해서 뭔가 확인하는 것 같다.


원인 : SSL 에러.
원인조사 : date 명령어로 현재 시간 확인해보니 3달차이가 났다.
해결 :
   1. 간단하게는 핸드폰으로 시간 확인 한 뒤 수동으로 설정해주는 방법
date -s "-d -m -y hh:mm:ss" 입력하면 바뀐다.
hwclock은 라즈베리파이에 없기 때문에 접근이 안된다고 한다. 하드웨어 시계는 배터리가 있어서 전원이 꺼져도 시간을 저장하고 있다. 컴퓨터 재부팅해도 시간이 맞는 이유.

   2. ntp 활용해서 시간정보를 네트워크 서버와 동기화. 라즈베리 파이의 경우 시간유지 배터리가 없기 때문에 재부팅시 항상 할 수 있도록 설정

       -ntp 패키지는 sudo apt-get install ntp 로하면 받을 수 있다.
설정파일은 /etc/ntp.conf 파일이다. sudo nano /etc/ntp.conf에 들어 간 후 server0, 1,2,3 등에 기본적으로 devian.pool.ntp.org 로 설정되어있는 것을 볼 수 있다.


      -debian.pool.ntp.org 가 기본으로 되어있는데 이 서버에서 시간을 성공적으로 동기화 할 수 있는지 알 수 가 없다. /etc/init.d/ 는 데몬(daemon) 관리의 편의를 위해 실행파일들을 모아놓은 폴더다. 이 폴더에 보면 ntp 데몬도 있다.
sudo /etc/init.d/ntp 탭 누르면 실행 관련 명령들이 뜬다.
sudo /etc/init.d/ntp stop 후 sudo /etc/init.d/ntp start 해주면 된다.
      -나 같은 경우 시간이 바뀌지 않았다. 위에서 말했듯이 기본으로 되어있는 debian.pool.ntp.org에 접속한 후 동기화가 불가능 했기 때문인데 알아보는 방법은 다음과 같다.

pi@raspberrypi:/ $ sudo /usr/sbin/ntpdate pool.ntp.org                      
21 Jul 17:07:22 ntpdate[926]: no server suitable for synchronization found
이런 에러가 뜬다.

      -한국에서 시간서버 잡을 때는 time.bora.net 에하면 바로 된다. 위에서 처럼 sudo /usr/sbin/ntpdate time.bora.net 하면 시간이 바뀌어 있는걸 알 수 있다. 안 될 때도 있는데 2~3번 시도하니 되는거 같다.

      -

      -crontab으로 자동화하기<http://socl.tistory.com/2 에서 일부 펌. 정리 후 삭제할게요>

crontab을 이용해 5분 간격으로 서버의 시간을 동기화 하도록 하겠습니다. 
  설명 대상
  권한  root
  편집 대상  /etc/crontab
  등록 항목  */5 * * * * root /usr/sbin/ntpdate -b time.bora.net 
vi /etc/crontab
대략 다음과 같은 항목 (11번 라인) 이 추가 되면 됩니다. (매 5분마다 ntpdate 명령어 수행)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.33.2.1.8.1 2012/03/03 06:15:13 kensmith Exp $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour    mday    month   wday    who     command
#
*/5     *       *       *       *       root    /usr/libexec/atrun
*/5     *       *       *       *       root    /usr/sbin/ntpdate -b time.bora.net
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11    *       *       *       *       operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog
#
# Perform daily/weekly/monthly maintenance.
1       3       *       *       *       root    periodic daily
15      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time.  See adjkerntz(8) for details.
1,31    0-5     *       *       *       root    adjkerntz -a
crontab을 재시작 합니다. 이제는 매 5분마다 ntp서버에서 서버와의 시간을 주기적으로 동기화 시키게 됩니다.
?
1
# /usr/sbin/cron restart

      -시작 파일들에 대해 잘 설명된 글이 있어서 가져왔다.
<펌글 http://www.hostinglove.com/bbs/board.php?bo_table=Tip_Tech&wr_id=2 문제시 삭제>
2. /etc/rc.d/init.d/* 파일들의 이해
 
MS윈도우즈에서 프로그램을 설치하면 대부분 'C:\Program Files' 안에 설치된다.
물론, 다른 디렉토리에 설치해도 된다.
 
리눅스도 각각의 프로그램들(데몬들)을 원하는 디렉토리에 설치할 수 있다.
rpm으로 설치한다면, 특정 디렉토리가 지정되어 있겠지만...
소스로 설치할 때는 원하는 디렉토리에 설치한다.
apache를 소스설치할 때, --prefix 옵션으로 설치 디렉토리를 지정할 수 있는 것처럼 말이다.
물론, 관습적으로 대부분 /usr/local/ 밑에 설치하는 경향이 많다.
 
이렇게 각각의 디렉토리에 설치된 각각의 데몬들을 실행하거나, 중지하는 등의 관리를 할 때는 상당히 불편하다.
각 데몬이 어디에 설치되어 있는지 모두 알아야 하기 때문이다.
 
생각해보자.
어느누가 네임서버 데몬을 실행시키는데...
 
    # /usr/sbin/named
 
와 같이 데몬의 실행파일을 직접 실행시키겠는가..??
 
보통은...
 
    # /etc/rc.d/init.d/named start
 
와 같이 실행시킨다...
 
그렇다. 각 데몬의 실행파일들이 어디에 있는지와 상.관.없.이,
관리의 편의를 위하여....
각 데몬들을 실행할 수 있게 만든 쉘스크립트 파일을 모아놓고 관리를 한다.
그 디렉토리가 /etc/rc.d/init.d/ 디렉토리이며,
/etc/rc.d/init.d/ 밑의 모든 파일들은 vi 편집기로도 열리는, 쉘스크립트 파일들이다.
 
마치, 윈XP에서 각 프로그램들을 하드에 설치하고..
실행할 때는 '시작>프로그램>....' 에서 실행하는 것과 비슷하다.
 
 
3. 런레벨의 이해
 
기본적으로 다음 두 가지는 알고 있다고 가정하자.
 
① 런레벨 종류
    - 런레벨 1 : 싱글모드 부팅. MS윈도우즈의 안전모드와 비슷
    - 런레벨 3 : 콘솔모드로 부팅
    - 런레벨 5 : X 윈도우로 부팅
    - 런레벨 6 : 계속 재부팅만 한다.
 
② 런레벨 수정
    - /etc/inittab 파일에서 다음 항목의 숫자를 직접 수정함으로 변경 가능
      id:3:initdefault:
 
이제, 윈XP의 '시작>프로그램>시작프로그램' 을 생각해 보자.
시작프로그램에 특정 프로그램을(프로그램의 단축아이콘을) 등록해 놓으면,
컴퓨터를 켤 때 그 프로그램이 자동으로 실행된다.
 
리눅스도 시작할 때 자동으로 실행될 프로그램(=데몬)을 등록할 수 있다.
윈XP에서는 '시작프로그램'에 등록하지만, 리눅스는 디렉토리에 심볼릭링크를 만들어서 등록한다.
 
    - /etc/rc.d/init.d/rc3.d   : 런레벨 3으로 부팅될 때 자동실행할 데몬을 등록하는 곳
    - /etc/rc.d/init.d/rc5.d   : 런레벨 5로 부팅될 때 자동실행할 데몬을 등록하는 곳
 
필자는 런레벨 3으로 부팅하며, 다음과 같은 심볼릭링크 파일들을 볼 수 있다.
 
    # cd /etc/rc.d/rc3.d/    # ls -al    drwxr-xr-x    2 root     root         4096 12월 15 10:32 ./
    drwxrwxr-x   10 root     root         4096 12월 15 19:02 ../
    lrwxrwxrwx    1 root     root           13 12월 15 19:01 K15gpm -> ../init.d/gpm*    lrwxrwxrwx    1 root     root           20 12월 15 19:02 K44rawdevices -> ../init.d/rawdevices*    lrwxrwxrwx    1 root     root           18 12월 15 19:02 K45arpwatch -> ../init.d/arpwatch*    lrwxrwxrwx    1 root     root           15 12월 15 19:02 K75netfs -> ../init.d/netfs*    lrwxrwxrwx    1 root     root           15 12월 15 10:30 K95kudzu -> ../init.d/kudzu*    lrwxrwxrwx    1 root     root           17 12월 15 19:02 S10network -> ../init.d/network*    lrwxrwxrwx    1 root     root           16 12월 15 19:01 S12syslog -> ../init.d/syslog*    lrwxrwxrwx    1 root     root           18 12월 15 19:00 S17keytable -> ../init.d/keytable*    lrwxrwxrwx    1 root     root           16 12월 15 19:02 S20random -> ../init.d/random*
    lrwxrwxrwx    1 root     root           17 12월 15 19:02 S29sysstat -> ../init.d/sysstat*    lrwxrwxrwx    1 root     root           15 12월 15 10:32 S55named -> ../init.d/named*    lrwxrwxrwx    1 root     root           16 12월 15 19:02 S56xinetd -> ../init.d/xinetd*    lrwxrwxrwx    1 root     root           15 12월 15 19:02 S90crond -> ../init.d/crond*    lrwxrwxrwx    1 root     root           11 12월 15 19:02 S99local -> ../rc.local*    lrwxrwxrwx    1 root     root           23 12월 15 19:02 S99oops-firewall -> 
../init.d/oops-firewall*
 
디렉토리 안을 살펴보니, 모두 심볼릭링크 파일이라는 것을 알 수 있다.
심볼릭링크 파일은 제일 앞의 퍼미션을 나타내는 부분이 'l' 로 시작되며,
어떤 파일을 심볼릭링크했는지 화살표로 표시해 준다.
 
살펴보면, 모든 심볼릭링크의 원본파일들이 상위 디렉토리(../)의 init.d 디렉토리 내의 파일들,
/etc/rc.d/init.d/파일들 이라는 것을 볼 수 있다.
따라서, 각 데몬의 실행파일을 관리하는 스크립트 파일들을 심볼릭링크한 것이다.
 
/etc/rc.d/rc3.d/ 밑의 파일들의 파일명을 살펴보면 다음과 같은 형식이다.
 
  S[혹은 K]{숫자}{데몬파일명}
 
S 로 시작되는 링크파일은 부팅할 때 시작(Start)되는 스크립트파일이다.
K 로 시작되는 링크파일은 부팅할 때 시작되지 않는(Kill) 스크립트파일이다.
 
{숫자}는 실행되는 우선순위를 나타낸다.
crond 데몬보다, named 데몬이 중요하고 꼭 실행되어야 한다면... crond 링크보다 숫자를 낮은 숫자로 하면 된다.
예전에는 컴퓨터(서버)의 사양이 좋지 않아, '어떻해도 가장 중요한 데몬'을 실행시키기 위해서 있었지만..
지금은 별 의미가 없다..
실행되지 않을 정도의 하드웨어 사양을 찾기가 힘들다... ^^;
{숫자}는 같은 숫자로 중복해서 사용할 수도 있다.
 
ntsysv 명령어로 각 데몬을 체크하거나, 체크를 지우는 것도...
알고보면 S 를 K 로 바꾸거나, K 를 S 로 바꾸는 작업이다.
 
/etc/rc.d/rc3.d/ 디렉토리에서는 S로 시작해서 심볼릭링크가 되어 있고,
/etc/rc.d/rc5.d/ 디렉토리에서는 K로 시작해서 심볼릭링크가 되어 있다면...
같은 /etc/rc.d/init.d/ 밑의 같은 데몬스크립트 파일이라고 하더라도..
런레벨마다 실행되거나, 실행되지 않을 수 있다.

댓글