2020년 3월 29일 일요일

라즈베리파이 병렬 컴퓨터 - 구성 및 설치

1. 하드웨어 구성
구성도 <그림.1>
구성품

  • 라즈베리 파이 4EA
  • 케이스 및 쿨러 4EA
  • 전원 케이블 4EA
  • USB 허브 유전원 
  • MicroSD CARD 4EA

2. 기본 설정(라즈베리파이는 설치가 완료 된 상태) - $ sudo raspi-config

  • hostname 변경
hostname 변경 <그림.2>

hostname 변경 <그림.3>

hostname 변경 <그림.4>
  • wifi
wifi 설정 <그림.5>

wifi 설정 <그림.6>
  • locale 설정

locale 설정 <그림.7>

locale 설정 <그림.8>

locale 설정 <그림.9>

locale 설정 <그림.10>

locale 설정 <그림.11>
  • ssh 설정
ssh 설정 <그림.12>

ssh 설정 <그림.13>

ssh 설정 <그림.13>

3. 소프트웨어 설치
  • /etc/apt/source.list 변경
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
to 
deb http://ftp.kaist.ac.kr/raspbian/raspbian/ buster main contrib non-free rpi
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install python3-numpy python3-scipy python3-matplotlib python3-ipython python3-sklearn python3-pandas python3-mpi4py nmap
여기까지 진행 한 후에 win32diskimager를 이용해서 img 생성. 나머지 sdcard에는 만들어 놓은 img로 쓰기작업.

4. 테스트

  • 각 장비별로 hostsname 변경(그림2 ~ 3 참고)
  • ssh-keygetn 키 교환 (https://webdir.tistory.com/200 참고)
  • 이후 부터는 01번 호스트에 접속해서 실행
$ sudo nmap -sn 1929.168.0.*
  • nmap 결과로 mpihosts 파일 생성

$ cat mpihosts
192.168.0.20
192.168.0.23
192.168.0.24
192.168.0.19

  • mpi 테스트

$ mpirun -hostfile mpihosts -np -4 hostname
mpi01
mpi03
mpi02
mpi04

hostname 말고 다른 명령어도 가능

2020년 3월 11일 수요일

Mongodb - 1. 설치

ubuntu 18.04 기준으로 설명

$ cat /etc/issue.net
Ubuntu 18.04.4 LTS

1. gpk 등록

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 4B7C549A058F8B6B

Executing: /tmp/apt-key-gpghome.qUP0BHP71y/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 4B7C549A058F8B6B
gpg: key 4B7C549A058F8B6B: public key "MongoDB 4.2 Release Signing Key " imported
gpg: Total number processed: 1
gpg:               imported: 1

# source list 추가

$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb.list

2. 설치

$ sudo apt update
$ sudo apt install mongodb-org

# 4.2.1 버전 설치 방법
sudo apt install mongodb-org=4.2.1 mongodb-org-server=4.2.1 mongodb-org-shell=4.2.1 mongodb-org-mongos=4.2.1 mongodb-org-tools=4.2.1


3. mongodb service  관리

# 부팅시 실행(disable - 삭제)

$ sudo systemctl enable mongod
$ sudo systemctl start mongod
$ sudo systemctl stop mongod
$ sudo systemctl restart mongod
$ sudo systemctl status mongod
 ● mongod.service - MongoDB Database Server  
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)  
   Active: failed (Result: exit-code) since Mon 2020-03-09 21:40:37 KST; 30s ago    
    Docs: https://docs.mongodb.org/manual
Process: 12286 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=62)  Main PID: 12286 (code=exited, status=62)

 # status 확인 시 에러가 발생했다. 원인은 mongodb-org를 설치한게 아니고 mongodb-server 패키지를 설치했다가 삭제 했는데 이전 mongodb 데이터가 남아있어서 에러가 발생

$ sudo mv /var/lib/mongodb/ /var/lib/mongodb_bak/
$ sudo mkdir /var/lib/mongodb
$ sudo chmod 700 /var/lib/mongodb
$ sudo chown mongodb.daemon /var/lib/mongodb
$ sudo systemctl restart mongod
$ sudo systemctl status mongod
● mongod.service - MongoDB Database Server
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-03-09 21:52:24 KST; 4s ago
     Docs: https://docs.mongodb.org/manual
 Main PID: 12693 (mongod)
   CGroup: /system.slice/mongod.service
           └─12693 /usr/bin/mongod --config /etc/mongod.conf

$ mongod --version
db version v4.2.3
git version: 6874650b362138df74be53d366bbefc321ea32d4
OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1804
    distarch: x86_64
    target_arch: x86_64

2020년 3월 9일 월요일

Rc Car - 1

이전부터 진행하고 싶었던 라즈베리파이 Rc Car를 만들어 보았다.

1. 부품
  • 라즈베리파이3, 휴대용 배터리, L298N, RC 자동차 키트, 카메라
  • 휴대용 배터리는 출력이 2A는 재부팅이 되어서 DC 5V/3A 용량 구매
  • RC 자동차 키트, L298N 및 기타
2. RcCar 구성



RcCar 모형 <그림.1>



안드로이드 휴대폰 <그림.2>
3. 기본구성
  • 라즈베리파이 : python twisted socket server, gpio(서보, DC모터 제어), motion streaming
  • 안드로이드 : xamarin, 자이로(서보 모터), socket client
  • wifi를 이용한 socket 통신
4. 회로도
  • 라즈베리 파이 - gpio BCM 0 : ENA, 5 : IN1, 6 : ENB 연결
  • 라즈베리 파이 - gpio Physical 2, 6, 12 : +, -, 서보모터 신호 연결
gpio <그림.3>
  • L298N - 배터리에서 +, - (라즈베리파이 Physical 39번과 같이 연결)
  • IN1, IN2는 모터에 연결



L298N <그림.4>
4. 프로그램 설명
  • <그림 2>의 휴대폰을 좌우로 움직이면 자이로 값을 받아 서보모터로 X, Y 축 신호 전송 
  • <그림 2>의 F, R, STOP 버튼은 전, 후, 정지 신호 전송
  • 소스 (https://github.com/daniel-isj/RcCar.git)
5. 기타
  • 부품 및 참조 : 메카솔루션
  • dc 모터 및 톱니바퀴 연결 부분이 부실함(보완 필요)
  • 추가 사항 : motion streaming 및 xamarin 소스 업로드

2020년 2월 28일 금요일

apache mod_proxy active standby 설정

OS : Centos 7
webserver : apache2
was : tomcat8

내가 원하는 서버 구성은 아래 그림과 같다.




apache 에서 mod_proxy 설정으로 tomcat server 2개로 연결해서 사용하고 있는데 was1이 active고

was1이 서비스 중단 되었을때 바로  was2로 연결해서 무중단(?) 서비스를 설정하려고 한다.


  • apache module 확인

      # httpd -M | grep proxy
      proxy_module (shared)
      proxy_ajp_module (shared)
      proxy_balancer_module (shared)
      proxy_connect_module (shared)
      proxy_express_module (shared)
      proxy_fcgi_module (shared)
      proxy_fdpass_module (shared)
      proxy_ftp_module (shared)
      proxy_http_module (shared)
      proxy_scgi_module (shared)
      proxy_wstunnel_module (shared)


  • tomcat8/conf/server.xml
      context에 sessionCookieName="test_JSESSIONID" 추가
  • conf.d/vhost.conf

     VirtualHost *:80
       ServerName test.com
       ProxyRequests Off
          
         
             Order deny,allow
             Allow from all
             # Balancer member 1
             BalancerMember http://localhost:8080 loadfactor=1 retry=2
             # Balancer member 2
             BalancerMember http://localhost:9090 status=+H retry=0
       

       ProxyPass / balancer://mycluster/ stickysession=test_JSESSIONID|jsessionid
       ProxyPassReverse /4  http://localhost::8080/
       ProxyPassReverse /4  http://localhost::9090/

       ProxyPreserveHost On
       ProxyStatus On
     VirtualHost

     # systemctl restart httpd

  • 에러 분석
      error_log에 proxy:error Permission denied 에러 발생

      # 분석
      # audit2why < /var/log/audit/audit.log

      # semanage port -l |grep http_port_t
      http_port_t                    tcp      28009, 18009, 80, 81, 443, 488, 8008, 8009, 8443, 9000
      pegasus_http_port_t            tcp      5988

  • 처리
      semanage 에 해당 포트가 없으면 등록을 해줘야 한다.

      # semanage port -a -p tcp -t http_port_t  8080
      # semanage port -a -p tcp -t http_port_t  9090

      이미 등록 되어있다는 에러가 나오면

      # semanage port -m -p tcp -t http_port_t  8080
      # semanage port -m -p tcp -t http_port_t  9090

  • 테스트 
      was1 shutdown  후 test.com 접속 후 was2 접속 로그 확인
      was1 startup 후 test.com 접속 후 was1 접속 로그 확인

  • 참고





2020년 2월 8일 토요일

ubuntu python 설정

python 3.6을 기본으로 사용하기

$ cat /etc/issue.net
Ubuntu 18.04.3 LTS

$ sudo update-alternatives --config python
update-alternatives: error: no alternatives for python

$ ls -lart /usr/bin/python*
-rwxr-xr-x 1 root root    1342 May  2  2016 /usr/bin/python3-jsonpointer
-rwxr-xr-x 1 root root    3661 Oct 29  2017 /usr/bin/python3-jsonpatch
-rwxr-xr-x 1 root root    1018 Oct 29  2017 /usr/bin/python3-jsondiff
-rwxr-xr-x 1 root root     398 Nov 16  2017 /usr/bin/python3-jsonschema
lrwxrwxrwx 1 root root       9 Apr 16  2018 /usr/bin/python2 -> python2.7
lrwxrwxrwx 1 root root      17 Oct 25  2018 /usr/bin/python3m-config -> python3.6m-config
lrwxrwxrwx 1 root root      10 Oct 25  2018 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root      16 Oct 25  2018 /usr/bin/python3-config -> python3.6-config
lrwxrwxrwx 1 root root       9 Oct 25  2018 /usr/bin/python3 -> python3.6
lrwxrwxrwx 1 root root      34 Oct  7 21:59 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 2 root root 4526456 Oct  7 21:59 /usr/bin/python3.6m
lrwxrwxrwx 1 root root      33 Oct  7 21:59 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4526456 Oct  7 21:59 /usr/bin/python3.6
-rwxr-xr-x 1 root root 3641704 Oct  8 02:39 /usr/bin/python2.7
lrwxrwxrwx 1 root root      24 Jan 31 00:08 /usr/bin/python -> /etc/alternatives/python

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
update-alternatives: using /usr/bin/python3.6 to provide /usr/bin/python (python) in auto mode

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode

$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python2.7   2         auto mode
  1            /usr/bin/python2.7   2         manual mode
  2            /usr/bin/python3.6   1         manual mode

Press to keep the current choice[*], or type selection number: 2

$ python -V
Python 3.6.8