Synology NAS 에 발급 받은 인증서를 라즈베리파이 nginx 에 적용하기

 

Synology NAS 도 가지고 있고 라즈베리파이도 가지고 있는 상태에서

 

라즈베리파이의 nginx 세팅에 인증서를 적용하고 싶다면 다음과 같은 방법으로 사용

 

1. Synology NAS 에서 인증서 내보내기

제어판 -> 보안 -> 인증서

해당 인증서 선택 후 마우스 우클릭 -> 인증서 내보내기

 

인증서 내보내기를 하면 압축파일을 다운로드 할 수 있다.

2. 라즈베리파이 접속 (nginx 가 설치 되어 있는 상태)

mkdir -p /home/pi/cert

/home/pi/cert 경로에 다운로드 받은 인증서 압축 파일 업로드

unzip _archive.zip

unzip 명령으로 압축 파일 해제

3. pem 파일 합치기

압축을 해제 하면 cert.pem, chain.pem, privkey.pem 파일이 보이는데

이 중 cert.pem 과 chain.pem 파일을 합쳐야 한다.

다음 명령으로 파일을 합치자.

cat cert.pem > fullchain.pem && echo -e "\n" >> fullchain.pem && cat chain.pem >> fullchain.pem

4. nginx 설정 변경하기

sudo vi /etc/nginx/sites-enabled/default

server 설정 부분 중 빨간 색 부분 확인

server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#


listen 443 ssl default_server;
listen [::]:443 ssl default_server;


# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php  to the list if you are using PHP

index index.html index.htm index.nginx-debian.html index.php;

server_name pi.acidpop.kr;

ssl_certificate /home/pi/cert/fullchain.pem
ssl_certificate_key /home/pi/cert/privkey.pem

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

 

5. 빨간색으로 표시 된 부분을 추가/수정 한 다음 설정을 다시 로딩하기

 

sudo /etc/init.d/nginx reload

 

 

하드웨어 : 라즈베리파이 3+

OS : Raspbian 10 (buster)

 

1. 의존성 라이브러리 설치

sudo apt-get update

sudo apt install -y libffi-dev libbz2-dev liblzma-dev \
    libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev \
    libreadline-dev libssl-dev tk-dev build-essential \
    libncursesw5-dev libc6-dev openssl git

2. python 3.8 설치

cd /home/pi

mkdir pkg_install

cd pkg_install

mkdir pkg_python

cd pkg_python

wget "https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz"

tar xvfz ./Python-3.8.0.tgz

cd Python-3.8.0

./configure

make -j 6

sudo make install

 

3. Python 3.8 pip 설치

cd /home/pi/pkg_install/pkg_python

wget https://bootstrap.pypa.io/get-pip.py

sudo python3 ./get-pip.py



4. Chromium Driver 설치

cd /home/pi/pkg_install

mkdir pkg_chromium

cd pkg_chromium

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg-extra_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-chromedriver_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

 

sudo dpkg -i ./chromium-codecs-ffmpeg_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i ./chromium-codecs-ffmpeg-extra_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i ./chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i chromium-chromedriver_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

 

 

위 명령 중 sudo dpkg 수행시 다음과 같은 오류가 발생 한다면?

sudo dpkg -i ./chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb 
(Reading database ... 45515 files and directories currently installed.)
Preparing to unpack .../chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb ...
Unpacking chromium-browser (75.0.3770.90-0ubuntu0.18.10.1) over (75.0.3770.90-0ubuntu0.18.10.1) ...
dpkg: dependency problems prevent configuration of chromium-browser:
 chromium-browser depends on libatk-bridge2.0-0 (>= 2.5.3); however:
  Package libatk-bridge2.0-0 is not installed.
 chromium-browser depends on libatk1.0-0 (>= 2.2.0); however:
  Package libatk1.0-0 is not installed.
 chromium-browser depends on libatspi2.0-0 (>= 2.9.90); however:
  Package libatspi2.0-0 is not installed.
 chromium-browser depends on libcairo2 (>= 1.6.0); however:
  Package libcairo2 is not installed.
 chromium-browser depends on libcups2 (>= 1.4.0); however:
  Package libcups2 is not installed.
 chromium-browser depends on libgdk-pixbuf2.0-0 (>= 2.22.0); however:
  Package libgdk-pixbuf2.0-0 is not installed.
 chromium-browser depends on libgtk-3-0 (>= 3.9.10); however:
  Package libgtk-3-0 is not installed.
 chromium-browser depends on libnspr4 (>= 2:4.9-2~); however:
  Package libnspr4 is not installed.
 chromium-browser depends on libnss3 (>= 2:3.22); however:
  Package libnss3 is not installed.
 chromium-browser depends on libpango-1.0-0 (>= 1.14.0); however:
  Package libpango-1.0-0 is not installed.
 chromium-browser depends on libxcursor1 (>> 1.1.2); however:
  Package libxcursor1 is not installed.
 chromium-browser depends on xdg-utils; however:
  Package xdg-utils is not installed.

dpkg: error processing package chromium-browser (--install):
 dependency problems - leaving unconfigured
Processing triggers for mime-support (3.62) ...
Processing triggers for man-db (2.8.5-2) ...
Errors were encountered while processing:
 chromium-browser

sudo apt-get -f install

위 명령으로 의존성 오류난 라이브러리를 모두 설치 하기

 





Pi Hole 암호 변경 방법.



sudo pihole -a -p




 

 

1. 라이브러리 설치

 

sudo apt install -y libffi-dev libbz2-dev liblzma-dev \
    libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev \
    libreadline-dev libssl-dev tk-dev build-essential \
    libncursesw5-dev libc6-dev openssl git

 

2. Python 소스 다운로드

 

cd /home/pi

mkdir python_src

cd python_src

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

tar xvf Python-3.7.0.tgz

cd Python-3.7.0

 

3. Python 소스 컴파일

 

./configure

make -j 4   (이 값은 cpu core 갯수만큼 사용, core 가 2개라면 make -j 2)

sudo make install

 

 

4. pip 설치

 

cd /home/pi/python_src

 

wget https://bootstrap.pypa.io/get-pip.py

 

sudo python3.7 ./get-pip.py 

 

 

 

 


Raspberry PI FFMpeg 설치 방법.



 

1. 빌드 패키지 설치.

 

sudo apt install git build-essential

 

2. h.264 코덱 설치

 

git clone git://git.videolan.org/x264 

cd x264 

./configure --host=arm-unknown-linux-gnueabi --enable-static --disable-opencl 

make

sudo make install

 

3. mp3lame 코덱 설치 (이 코덱을 설치 하는 이유는 ffmpeg 을 이용해서 영상을 mp3 로 인코딩 하고자 할때 사용하기 위함이다.)

 

sudo apt-get install libmp3lame-dev

 

4. FFMpeg 설치

 

git clone https://github.com/FFmpeg/FFmpeg.git

cd FFmpeg 

./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --enable-libmp3lame 

make

sudo make install

 

 

 

 

 

참고 : https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

 

 

  1. 2017.08.21 22:02

    비밀댓글입니다

  2. 그래서요? 2017.08.21 22:03

    설치 이유를 맨 위에 적어주심이 어떨까 합니다만?

라즈베리파이(송신) ---> 아두이노 프로 미니로(수신) RF 통신을 이용하여 LED 를 켜보자


1. 준비물


  - 라즈베리파이( 2 또는 3) 1개


  - 아두이노 프로 미니 1개

  - Usb to TTL(아두이노 프로 미니에 프로그램 업로드 하기 위해 사용) 1개

    https://goo.gl/TJTMGo  (Usb To TTL + 아두이노 프로 미니 묶음 판매)


  - RF 433 Emmiter 1개

  - RF 433 Receiver 1개

    https://goo.gl/4KMIdi    (5쌍 묶음 판매)


  - LED 1개




2. 회로 구성 하기.


  2.1 라즈베리파이 회로 구성








RF 송신모듈에 각각 위와 같이 연결합니다.


 Raspberry pi

 RF Emitter

5V

Vcc 

GPIO 21

Data 

GND

GND 




  2.2 아두이노 프로 미니 회로 구성하기







Arduino Pro Mini

 RF Receiver

Vcc

Vcc 

PIN 2

Data 

GND

GND 


3. 라즈베리 파이 RC-Switch 라이브러리 준비

 

cd /home/pi

git clone https://github.com/acidpop/433Utils

cd 433Utils

cd rc-switch

make



4. Source Coding

  4.1. 라즈베리파이

 

다음 경로로 이동

cd /home/pi/433Utils/RPi_utils 

 

codesend.cpp 파일을 열어

 

int PIN =0;

위 코드를

int PIN = 21;

로 변경

 

또는 아래와 같이 소스 작성 후 컴파일



rftest.cpp 


/* Code Send */

#include "RCSwitch.h"

#include 
#include 
 
int main(int argc, char *argv[]) {
 
    // This pin is not the first pin on the RPi GPIO header!
    // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
    // for more information.
    int PIN = 21;
 
    // Parse the firt parameter to this command as an integer
    int code = atoi(argv[1]);
 
    if (wiringPiSetup () == -1) return 1;
    printf("sending code[%i]\n", code);
    RCSwitch mySwitch = RCSwitch();
    mySwitch.enableTransmit(PIN);
 
    mySwitch.send(code, 24);
 
    return 0;
 
}


 

위 코드를 컴파일 시에는 다음과 같이 진행한다.

 

g++ rftest.cpp -DRPI ../rc-switch/RCSwitch.cpp rftest.cpp -lwiringPi

 


  4.2 아두이노 프로 미니

 

        RCSwitch 라이브러리를 포함시켜야 한다. 


#include "RCSwitch.h"
#include 
#include 
RCSwitch mySwitch = RCSwitch();
 
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
}
 
void loop() {
  if (mySwitch.available()) {
 
    int value = mySwitch.getReceivedValue();
 
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
 
     Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );

      switch(value):{
        case 1001:{
           digitalWrite(LED_BUILTIN, HIGH);
        }break;
        case 1002:{
           digitalWrite(LED_BUILTIN, LOW);
        }break;
      }
    }
 
    mySwitch.resetAvailable();
 
  }
}


 

 

 

 

아두이노에 프로그램을 컴파일 -> 업로드 하고

 

툴 -> 시리얼 모니터를 선택하여 시리얼 모니터 창이 보이도록 한다.

 

 

라즈베리파이에서 컴파일 해둔 rftest 를 시험해보자.

 

sudo rftest 12345

 

 

RF 송신기로 12345 라는 값을 보내면

 

아두이노의 시리얼 모니터로 12345 라는 값을 받았다는 메시지가 보이면 성공이다.

 

RF 송신기로 1001 을 보내면 아두이노에 연결된 LED 가 켜지고

 

1002 를 보내면 연결된 LED 가 꺼진다.

 

 

 

위 예제를 이용하면 라즈베리 파이 1대와

 

아주 값싼 아두이노 프로 미니를 원격으로 컨트롤 할 수 있다.

 

릴레이를 컨트롤 하면 원격으로 조정 할수 있는 멀티탭도 만들수 있다.

 

테스트 해본 결과 집 내부 가장 끝 방에서 끝방까지 (콘크리트 벽 2, 나무 방문 2개) RF 안테나 없이 송수신이 되는것을 확인 하였다.

 

 

  1. 김종현 2017.04.27 17:14

    너무 신기하네요. 이러면 올려주신 텔레그램강좌와 조합하면 텔레그램으로 아두이노도 어느정도 컨트롤 할 수 있게 되는건가요?

    • BlogIcon Acidpop acidpop 2017.04.28 09:33 신고

      가능합니다.
      라즈베리파이에 텔레그램 봇을 개발 하고
      메시지 수신 받으면 라즈베리파이에서 아두이노로 RF 통신을 보내는 방식으로 하면 컨트롤도 할수 있죠

  2. 2017.05.22 18:37

    비밀댓글입니다

    • BlogIcon Acidpop acidpop 2017.05.22 22:26 신고

      저같은 경우는
      센서와 rf 송신기를 아두이노 프로 미니 같은 작은 칩을 이용해서 사용합니다
      아두이노에서 주기적으로 센서값을 읽어와서 값을 rf 송신기로 보내는 역할을 하고
      라즈베리에서 rf 를 수신하여 데이터를 처리 하도록 하면 됩니다
      다만, 저 같은 경우는 라즈베리파이에서 rf 수신기가 작동을 안하더군요..

 

라즈베리파이 공식 7인치 터치 스크린

 

사용을 안하면 화면이 꺼지는데

 

화면을 터치 하거나, 마우스를 움직이거나, 키보드를 누르면 화면이 다시 보인다.

 

하지만 원격에서 SSH 로 접속해서 화면을 켜지게 하고 싶다면??

 

 

다음 방법으로 가능하다.

 

echo 0 >sudo /sys/class/graphics/fb0/blank

 

 


 

Raspbian 에서 apt-get 으로 설치 할 수 있는 python 버전은 3.4 이다.

 

현재(2016/10/11 일 기준) python 버전은 3.5.2 이다.

 

python 소스를 받아서 3.5 버전을 설치 하는 방법을 포스팅 한다.

 

1. raspbian 업데이트

 

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade   <-- 이 명령은 굳이 안해도 된다.

 

2. 컴파일에 필요한 라이브러리 설치.

 

 

sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl

 

 

3. Python 소스 다운로드 및 컴파일, 설치.

 

 

 

cd /home/pi/

mkdir temppython

cd temppython

wget "https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz"

tar xvf Python-3.5.2.tgz

cd Python-3.5.2

./configure

make

sudo make install

 

 

4. pip 설치.

 

 

wget https://bootstrap.pypa.io/get-pip.py

sudo python3.5 get-pip.py

pip3.5 --version

  1. 라즙이 2017.07.23 12:33

    이 방법으로 설치를 했는데 python3 -V를 해도 3.4.2로 나오네요. 기존 버전을 따로 처리하거나, 3.5.2로 컴파일 하기 위해선 다른 명령어를 써야 하는 건가요?

  2. 감사 2017.10.30 16:31

    감사합니다 덕분에 쉽게 설치했어요!!

  3. 라즈베리파이입문생 2017.11.20 23:03

    작성자님
    sudo python3.5 get-pip.py부분을 입력하면 오류가 뜨는데 이건 뭐가 잘못된 건가요??

  4. 라즈베리파이입문생 2017.11.20 23:38

    Could not find a version that satisfies the requirement pip (from versions:)
    No matching distribution found for pip 라고 뜹니다...

    • 라즈베리파이입문생 2017.11.20 23:41

      그 전에
      Could not fetch URL https://pypi.python.org/simple/pip/:
      There was a problem confirming the ssl certificate:
      Can't connect to HTTPS URL because the SSL module is not available. - skipping
      Could not fetch URL https://www.piwheels.hostedpi.com/simple/pip/:
      There was a problem confirming the ssl certificate:
      Can't connect to HTTPS URL because the SSL module is not available. - skipping
      Could not find a version that satisfies the requirement pip (from versions: )
      No matching distribution found for pip 라고뜹니다......

    • BlogIcon Acidpop acidpop 2017.11.21 10:15 신고

      sudo python3.5 get-pip.py --trusted-host pypi.python.org

      이렇게 뒤쪽에 옵션을 붙여줘보세요

  5. 라즈베리파이입문생 2017.11.21 10:55

    작성자님 sudo python3.5 get-pip.py --trusted-host pypi.python.org
    라고 입력하였는데 똑같은 오류가 발생하였습니다...

    • BlogIcon Acidpop acidpop 2017.11.21 11:06 신고

      흠.. 글쎄요.

      혹시 제가 터미널에 접속 해 볼수 있을까요?

      비밀 댓글로 남겨주실수 있으시면 확인 하고 댓글은 바로 삭제 하겠습니다.

  6. 2017.11.21 21:39

    비밀댓글입니다

    • BlogIcon Acidpop acidpop 2017.11.21 21:48 신고

      pip가 환경 변수경로에 등록이 안되어 있을수도 있습니다

      sudo find / -name “pip”

      위 명령으로 pip 가 실제로 있는지 확인 해보시고 있다면 전체 경로로 실행해보세요

+ Recent posts