사용기

라스베리파이 4

andang72 2024. 12. 5. 22:35

2019년 11월 라스베리파이 4에 대한 소문을 듣고 특별한 이유없이 알리에서 충동 구매를 했다.  

  • Raspberry Pi 4 Model B kit Basic Starter Kit in stock with power switch line type-c interface EU/US Charger Adapter and heatsink - $12.18
  • Ultra-thin CNC Aluminum Case Box For Raspberry Pi 4 Model B Metal Shell Black Silver Color for Raspberry Pi 3 Model B+ - $64.14

구매 후 사용하지 않았던 SD 카드에 여러 지원 OS 을 설치하여 사용해보았지만 설치하고 화면을 모니터를 통하여 출력하는 것 이상은 흥미를 갖지 못했다. 

Retropie 시작화면
Playstation 1 Tekken 3 이미지 실행화면

 

한참 후에 웹서버를 설치해보는 것은 어떻까 하는 생각에 실행을 해보기로 했다. 

 

◼︎ 작업환경

  • Model : MacBook Pro (16-inch, 2019)
  • CPU : 2.3 GHz 8코어 Intel Core i9
  • GPU : AMD Radeon Pro 5500M 4 GB
  • MENORY : 16GB
  • DISK : 1TB SSD
  • OS : macOS Monterey 12.2.1
◼︎ Raspberry 4
  • DEVICE : Raspberry Pi 4 (4G RAM)
  • DISK : 128GB SD Card 
  • 모니터 암에 고정하여 사용

1. Ubuntu Server 설치하기

설치는 ① 직접 OS 이미지를 다운로드하고 balenaEtcher 같은 이미지 복사 프로그램을 사용하여 설치하거나  ② Rispberry Pi Imager 를 사용한다. 과거에는 맥용 ② 프로그램이 지원되지 않았지만 현재는 지원하고 있기 때문에 보다 간편한 ② 방법을 사용하여 설치를 진행한다.
 
먼저 Rispberry Pi Imager  를 다운로드하여 실행한다.   ❶ 설치할 OS 를 선택하기 위하여  CHOOSE OS 버튼을 클릭한다. 
❷ Operating System 목록에서 Other general-purpose OS > Ubuntu 를 선택하고 
❸ 64bit Server 버전을 선택한다. 가장 최신 버전이 아닌 2025년 까지 지원되는 20.04.4 LTS (Long Term Support ) 버전을 선택했다.
 CHOOSE  STORAGE  버튼을 클릭하여 OS 가 설치된 SD 카드를 선택한다.  ❺ 톱니바퀴 모양 아이콘을 클릭하여 네트워크, 계정 등의 옵션을 지정한다. 

 

마지막으로 WRITE 버튼을 클릭하여 쓰기를 실행한다.
 
이제 Ubunto Server 가 설치된 SD 카드를 라스베리파이 파이 기기에 삽입하고 전원을 연결한다. 로그인은앞서 설정에 사용한 계정정보를 사용하면 된다. (추가 설정 없이 바로 사용가능한 점이 아주 편리했다.)
 

2. Raspbarry Pi 연결하기

원격 PC에서 라스베리파이 파이(Raspbarry Pi) 기기에 연결을 위해서 먼저 라스베리파이 IP 를 확인해야 한다. 무선의 경우 최초 연결이 잘되지 않아 라스베리 파이 전원을 여러번 ON/OFF 해야 할 수 도 있다. IP 가 확인 되었으면 소프트웨어 관리 도구인 APT 의 패키지 인텍스를 업데이트 하고 업그레이드가 가능한 것들이 있으면 업그레이드 진행 한다.
sudo apt update
sudo apt upgrade
 

3. Tomcat 설치하기

3.1 JAVA 설치하기

Tomcat 설치에 앞서 최신 자바를 설치한다. (작업 당시에 자바버전은 11.013 이었다.)
sudo apt update
sudo apt install default-jdk
 

3.2 Tomcat 계정 생성하기

서비스 형태로 실행하기위하여 tomcat 계정을 생성한다. 이렇게 Tomcat 서비스 실행을 위한 계정을 생성하여 사용하니 pi 계정으로 프로그램을 배포하고 다시 권한을 변경해주어야 하는 절차가 약간 불편했다. 이러한 불편함을 해소하기 위하여 임의의 developers 그룹을 추가하고 tomcat 과 pi 계정에 해당 그룹을 추가하여 사용했다.
  sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

 

3.3 Tomcat 설치하기

wget 명령을 사용하여 원하는 아파치 톰켓 버전을 다운로드 한다. Apache Tomcat 홈페이지를 방문하여 원하는 버전의 다운로드 경로를 확인한다. (작성 당시 10.0.17 버전을 다운로드 하였다.)
 
  wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.17/bin/apache-tomcat-10.0.17.zip
 
zip 압축을 풀기위해서 unzip 을 설치하고 다운로드한 zip 파일을 /opt/tomcat 경로에 푼다.

 

sudo apt install unzip 
sudo unzip apache-tomcat-10.0.17.zip -d /opt/tomcat
편의성을 위하여 심볼릭 링크를 생성하고 tomcat 계정으로 소유권을 변경한다. 마직막으로 sh 파일들에 대한 실행 권한을 부여한다.
  sudo ln -s apache-tomcat-10.0.17 latest
  sudo chown -RH tomcat: /opt/tomcat/latest
  sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'

 

3.4 Tomcat 서비스 세팅 

Tomcat 을 서비스로 실행하려면 새로운 Unit 파일을 생성해야 한다. /etc/systemd/system 경로에 tomcat.service 파일을 생성한다.
sudo vi /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment="JAVA_HOME=/usr/lib/jvm/default-java"            
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_Home=/opt/tomcat/latest"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_OPTS=-Xms1024M -Xmx2048M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS.awt.headless=true -Djava.security.egd=file:/dev/v/urandom"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]

WantedBy=multi-user.target
 
톰켓을 시작하고 상태를 확인한다.
sudo systemctl start tomcat
sudo systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-03-09 15:26:02 KST; 3s ago
    Process: 19535 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 19543 (java)
      Tasks: 16 (limit: 4435)
     CGroup: /system.slice/tomcat.service
             └─19543 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties -Djava.util.loggi>
 
웹 브라우져에서 [라스베리파이 IP]:8080 주소로 접속하면 아래와 같은 웹 페이지가 보여진다.
 

 
 

4. Nginx 웹 서버 설치하기

웹 서버 Nginx 을 아래와 같이 설치할 수 있다. 
 
sudo apt install nginx
 
설치가 완료되면 서비스를 시작하고 상태를 확인한다.
sudo systemctl start nginx
 
sudo systemclt status nginx
 
웹 브라우져에서 [라스베리파이 IP] 주소로 접속하면 아래와 같은 웹 페이지가 보여진다.
 

5. OpenCV 설치

테스트를 목적으로 OpenCV 를 설치하였다.
 
먼저 컴파일을 위한 소프트웨어 패키지들을 설치한다. 
sudo apt install cmake build-essential
 
다음 패키지들은 반듯이 설치가 필요한 것은 아니다. 
sudo apt-get install pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
sudo apt-get install libv4l-dev v4l-utils
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
 
 
원하는 버전의 소스 파일을 다운로드 한다. 다운로드는 /home/pi 경로을 사용했다.
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip
 

 

unzip 명령을 사용하여 압축을 풀고 빌드를 위하여 build 폴더를 생성한다음 build 경로로 이동한다.
unzip opencv.zip
unzip opencv_contrib.zip 
mkdir build
cd build
 
이제 cmake 명령을 실행하여 컴파일을 위한 설정을 수행한다.
 
 
컴파일을 위한 설정 과정에서 JAVA 을 인식하지 못하는 문제가 발생되었다.  이부분을 해결하는 과정에 어려움이 있었는데 아래와 같은 방법으로 해결했다. 
 
최신 자바 버전이 설치되었지만 호환성을 고려하여 JDK 1.8 과 ant 를 설치한다. 이는 cmake 실행 옵션에 자바 버전을 명시한 경우 맥은 동작하였지만 CentOS는 효과가 없어 컴파일시에는 1.8 자바를 사용하고 이후에 높은 버전의 자바로 변경하여 사용하였다. 
sudo apt install ant openjdk-8-jdk
 
.profile 파일을 아래와 같이 수정하여 수동으로 홈 경로를 지정해준다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
export JRE_HOME=/usr/lib/jvm/java-8-openjdk-arm64/jre
export ANT_HOME=/usr/share/ant
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

다시 cmake를 실행한다. 이때 사용한 옵션은 아래와 같다.

 

 cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON  \
-D INSTALL_PYTHON_EXAMPLES=ON  \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_opencv_ximgproc=ON \
-D BUILD_SHARED_LIBS=OFF \
-D OPENCV_JAVA_TARGET_VERSION=1.8 \
-D BUILD_EXAMPLES=ON ../opencv-4.5.5

 

처음과는 다르게 JAVA 항목이 인식됨을 확인할 수 있다.
 

 
이제 빌드 및 설치를 진행한다. 컴파일 작업은 많은 시간이 소요되기 때문에 실행 후 다른 볼일을 보는 것이 좋을 것 같다. 프로세스 수를 2정도로 하고 실행을 했는데 nmon 도구를 사용하여 프로세스 사용량을 모니터링 해보면 옵션 값을 3 또는 4 을 적용해도 될 것 같다는 생각이 된다. 실재로 -j4 값을 주고 컴파일을 해보면 4개의 cc1plus 인스턴스가 96% 정도 CPU 자원을 사용하는 것으로 모니터링 된다.
make -j2
sudo make install
-j2 옵션을 사용한 경우
-j4 옵션을 사용한 경우
 

후기

14MB 정도 크기의 이미지를 업로드하고 얼굴을 인식하여 성별과 나이를 추정하는 코드를 실행해보았다. nmon 을 통하여 모니터링을 해보니 단일 이미지 처리 경우에도 많은 자원을 사용하지만 응답 시간이 지연되어 좋은 성능을 보여주지는 못했다. 
 
결국 앞전과 같이 설치해보고 테스트 하는 것 이상으로 활용하지 못했다. 결국 지금은 사용하지 않고 어딘가에 ...