반응형

 


작성한 날: 2024년 8월 7일
테스트했던 Pi 모델: Pi 4, Pi 5

 

터미널을 열어서 아래 명령(CLI)를 입력한다.

$ sudo  apt install -y fonts-unfonts-core

 

 

Raspbian Desktop 시작 메뉴에서 [ Raspberry Pi Configuration ] 창을 연다.

메뉴를 찾아가는 순서는 아래와 같다.

  [ 시작 메뉴 ]  ->  [ 기본 설정 ]  ->  [ Raspberry Pi Configuration ]  ->  [ Localisation ]

 

[ Locale ] 설정 항목에서 아래와 같이 설정한다.

 - Language : ko (Korean)

 - Character Set : UTF-8

 

[ Raspberry Pi Configuration ] 창을 닫는다.

 

아래와 같이 명령을 실행하여 한글 패키지를 설치한다.

 

$ sudo  apt install -y fcitx fcitx-hangul
... 출력 화면 생략 ...


$ vim  /etc/default/im-config
... 중간 생략 ...
IM_CONFIG_DEFAULT_MODE=fcitx     # <-- "auto" 값을 "fcitx" 값으로 수정 
... 중간 생략 ...


$ reboot

 

 

 

Raspberry Pi를 Reboot하고 나면, [한/영] 전환하는 키 조합을 설정한다. 메뉴를 찾아가는 순서는 아래와 같다.

 [ 시작 메뉴 ]  ->  [ 기본 설정 ]  ->  [ Fcitx 구성 ]  ->  [ 전역 설정 ] 탭 

 

[ 전역 설정 ] 탭에서 [ 트리거 입력기 ]를 설정한다.

나는 [ Shift + Space ] 키 조합과 [ Right Alt ] 키를 설정했다.  (아래아한글 프로그램의 한영 전환 키처럼 설정)

 

 


 

 

 

##
## 채용 관련 글
##
제가 일하고 있는 기업 부설연구소에서 저와 같이 연구/개발할 동료를 찾고 있습니다.
(이곳은 개인 블로그라서 기업 이름은 기재하지 않겠습니다. E-mail로 문의주시면 자세한 정보를 공유하겠습니다.)

근무지 위치:
  서울시 서초구 서초동, 3호선 남부터미널역 근처 (전철역 출구에서 회사 입구까지 도보로 328m)
필요한 지식 (아래 내용 중에서 70% 정도를 미리 알고 있다면 빠르게 협업할 수 있음):
  - 운영체제 (학부 3~4학년 때, 컴퓨터공학 운영체제 과목에서 배운 지식 수준):
    예를 들어, Processor, Process 생성(Fork)/종료, Memory, 동시성, 병렬처리, OS kernel driver  
  - Linux OS에서 IPC 구현이 가능
    예를 들어, MSGQ, SHM, Named PIPE 등 활용하여 Process간 Comm.하는 기능 구현이 가능하면 됨. 
  - Algorithm(C언어, C++ 언어로 구현 가능해야 함)
    예를 들어, Hashtable, B-Tree, Qsort 정도를 C 또는 C++로 구현할 수 있을 정도 
  - Network 패킷 처리 지식(Layer 2 ~ 4, Layer 7)
    예를 들어, DHCP Server/Client의 주요 Feature를 구현할 정도의 능력이 있으면 됨.
  - Netfilter, eBPF 등 (IP packet hooking, ethernet packet 처리, UDP/TCP packet 처리)
  - IETF RFC 문서를 잘 읽고 이해하는 능력 ^^
  # 위에 열거한 내용 외에도 제가 여기 블로그에 적은 내용들이 대부분 업무하면서 관련이 있는 주제를 기록한 것이라서
  # 이 블로그에 있는 내용들을 잘 알고 있다면, 저희 연구소에 와서 연구/개발 업무를 수행함에 있어서 어려움이 없을 겁니다.
회사에서 사용하는 프로그래밍 언어:
  - 프로그래밍 언어: C, C++, Go
    (참고: 아직 연구소 동료들이 Rust를 사용하진 않습니다만, 새 언어로써 Rust를 사용하는 것을 고려하는 중)
근무 시간:
  - 출근: 8~10시 사이에서 자유롭게 선택
  - 퇴근: 8시간 근무 후 퇴근 (오후 5시 ~ 7시 사이)
  - 야근 여부: 거의 없음 (내 경우, 올해 상반기 6개월간 7시 이후에 퇴근한 경우가 2회 있었음)
  - 회식 여부: 자유 (1년에 2회 정도 회식하는데, 본인이 집에 가고 싶으면 회식에 안 감. 왜 참석 안 하는지 묻지도 않음)
외근 여부:
  - 신규 프로젝트 멤버 -> 외근 전혀 하지 않음 (나는 신규 프로젝트만 참여해서 지난 1년 동안 한번도 외근 없었음)
  - 상용 프로젝트 멤버 -> 1년에 5회 미만 정도로 외근
팀 워크샵 여부:
  - 팀 워크샵 자체를 진행하지 않음. (워크샵 참석하는 거 싫어하는 개발자 환영 ^^)
연락처:
  - "sejong.jeonjo@gmail.com"  # 궁금한 점은 이 연락처로 문의주세요.
  - 블로그 비밀 댓글 (제가 하루에 한번씩 댓글 확인하고 있음)
원하는 인재상:
  - 우리 부설연구소는 "긴 호흡으로 프로젝트를 진행"하기 때문에 최소 2년간 한 가지 주제를 꾸준하게 연구/개발할 수 있는 개발자를 원함.
  - 우리 부설연구소는 자주적으로 연구 주제를 찾아서 업무를 하기 때문에 능동적으로 생각하고 행동하는 동료를 원함.
  - 차분하게 연구 주제에 몰입하고, 해법을 찾는 것을 즐기는 사람.
내가 느끼는 우리 연구소의 장점:
  - 갑/을 관계가 없음. (제가 근무하고 있는 연구소는 SI업종이 아니라서 갑/을 회사 개념이 없음)
  - 연구소 자체적으로 연구 주제를 발굴하고 시스템을 개발하기 때문에 개발 일정에 대한 스트레스가 적음
  - 빌딩 전체를 우리 회사가 사용하므로 분위기가 산만하지 않음.
  - 근처에 예술의전당, 우면산 둘레길이 있어서 점심 시간에 산책하기 좋음 ^^
  - 연구소 동료들 매너가 Good (2년간 일하면서 한번도 감정에 스크레치 생기거나 얼굴 붉히며 싸운 적 없음 ^^)

 

반응형

테스트 날짜, 작성일 : 2023년 12월 22일
테스트한 OS 버전: Raspbian 12 (bookworm)

 

 

Raspberry Pi 4, Pi 5를 사용하면서 Pi 3와 다른 점이 몇 가지 있는데, VNC가 다른 것 중에 하나이다.

 

VNC Server 설치, 설정

Pi 4, Pi 5에서 VNC Server는 기본으로 설치되어 있기 때문에 아래와 같이

[ 라즈베리 파이 환경설정 ] 화면에서 [ VNC ] 항목을 활성화시키는 작업만 하면 된다.

 

 

VNC Client(Viewer) 설치

이것저것 VNC Client를 다 테스트해봤는데, RealVNC Viewer만 정상 동작하고 나머지 VNC Client 들은 몇 가지 기능들이 오동작하는 이슈가 있었다.

따라서 RealVNC Viewer를 설치해서 사용하길 추천한다.

RealVNC Viewer 설치, 설정 절차는 너무 간단해서 설명을 생략~

 


 

반응형

 


 

테스트 날짜, 작성일 : 2023년 12월 20일
테스트한 OS 버전: Raspbian 12 (bookworm), Debian GNU/Linux 12

 

대부분 인터넷에서 검색된 설명을 따라서 설정해보면, 마우스 스크롤 방향이 macOS처럼 바뀌지 않았다.

아마 Raspbian OS 버전 11 이전까지는 잘 동작했으나, 버전 12(bookworm)부터는 기존의 설정 방법으로는 마우스 스크롤 방향을 바꿀 수 없는 것 같다.

 

그래서 이것저것 해보고 알아낸 방법이 이것이다.

 

라즈베리 파이의 마우스 스크롤 방향을 macOS의 마우스처럼 바꾸고 싶다면, 아래와 같이 설정 파일에 한 줄만 추가하면 된다.

 $ cat ~/.config/wayfire.ini
... 중간 생략 ...
[input]
xkb_options=
xkb_model=pc105
xkb_layout=us
xkb_variant=
left_handed_mode=true
natural_scroll=true           # <-- 이 내용을 추가한다.

$

 

위와 같이 설정 파일을 편집하고, Raspbian OS를 reboot 하고 마우스의 스크롤 방향이 바뀌었는지 확인한다.

Raspbian(Debian Linux 12, Bookwork)에서 테스트해보았고, macOS의 마우스처럼 스크롤 방향이 변경되었다.

 


 

반응형

 


 

작성일: 2023년 12월 14일

 

 

오늘 Raspberry Pi 5를 구입하고, Raspbian OS(Bookworm)를 설치하고

1시간 정도 아무것도 하지 않고 방치했는데, 쿨링팬이 멈추지 않고 계속 돌고 있다.

상온에서 놀고 있는 장치가 열 받을 일이 뭐가 있다고 쿨링팬이 계속 돌까?

 

일단, CPU 온도를 확인해보까 이렇다.

$ echo $(( $(cat /sys/class/thermal/thermal_zone0/temp) / 1000 ))
49
$

 

 

그리고 이 상태에서 Cooling Fan의 회전 속도(RPM)를 확인해보니까 이렇다.

$   watch  'cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/fan1_input'
1874

 

 

위 명령을 스크립트로 합쳐 놓고, 5초 마다 돌려보자 !

$ vi monitor_fan.sh

#!/bin/bash

function my_monitor() {
    my_temp=$(cat /sys/class/thermal/thermal_zone0/temp)
    my_temp2=$(( $my_temp/1000 ))
    fan_speed=$(cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/fan1_input)
    echo "온도: $my_temp2    팬 속도: $fan_speed"
}

my_monitor


$ watch  -n 5  ./monitor_fan.sh

매 5.0초:   ./monitor_fan.sh                     raspberrypi: Thu Dec 14 17:53:49 2023

온도: 49    팬 속도: 1874

... 이하 생략 ...

 

 


TODO:  아직 Fan Speed를 제어하는 방법을 못 찾았다. 만약 제어 방법을 찾으면 추가로 작성할 계획이다.

 

 

 


 

반응형

Web Server를 운영하다보니, 해외에서 내 Web Server를 공격하는 시도가 많이 보인다.

그래서 이런 Web Server를 공격하는 Access를 몽땅 iptables 명령으로 drop(block)하는 스크립트를 만들었다.

아래와 같이 스크립트를 작성하고, 실행하면 이 시간 이후로 공격이 모두 차단된다.

 

##
## Block Some IP addresses
##

#!/bin/bash

LOG_FILE_NAME="/var/log/apache2/access.log"

BLACK_LIST=$(awk '{ printf "%s\n", $1 }' $LOG_FILE_NAME  | grep -v "192.168.0." | sort | uniq)

for BLOCKING_IP in $BLACK_LIST
do
  BLOCKING_CIDR="$BLOCKING_IP/16"
  echo "Blocking CIDR: $BLOCKING_CIDR"
  GEO_ADDRESS=$(whois $BLOCKING_IP | grep -i "address:")
  echo "$GEO_ADDRESS"
  echo ""
  iptables -A INPUT -s $BLOCKING_CIDR  -p tcp  --dport 80  -j DROP
done


iptables -L -n --line-numbers | grep "DROP" | awk '{ printf "%s\n", $5 }' | sort
# iptables -D INPUT 1
# iptables -D INPUT 2
# ...


##
## If you would like to save the iptables rules, then run the following command.
##
# service iptables save

 

만약, 위와 같이 수행했다가 다시 Rule을 지우고 싶다면, 아래와 같이 스크립트를 작성해서 실행한다.

 

##
## Remove rules of IP tables
##

#!/bin/bash

REMOVE_IP_LIST=$(iptables -L -n | grep "DROP" | awk '{ printf "%s\n", $4 }' | sort)

for REMOVE_IP in $REMOVE_IP_LIST
do
  echo "IP Address to be removed: $REMOVE_IP"
  iptables -D INPUT -s $REMOVE_IP -j DROP
done
반응형

스마트폰, 액션캠, 디지털카메라로 촬영한 동영상을 웹 페이지로 보려면, WEBM 형식으로 파일을 변환해야 한다.

변경 방식은 간단하다. 아래와 같은 명령을 수행하면 Web browser에서 바로 볼 수 있는 동영상 파일로 변환된다.

 

##
## 만약 MacOS를 사용한다면, 아래와 같이 ffmpeg을 먼저 설치한다.
##
$ brew install ffmpeg


##
## 명령 예시
##  아래 명령에서 'input.avi'가 스마트폰으로 촬영한 동영상 원본 파일명이고, 
##  'output.webm'이 변환된 이후에 web server에 올릴 파일명이다. 
##
$ ffmpeg -y -i my_input_movie.avi -c:v libvpx-vp9 -c:a libopus my_output_movie.webm


## 원본 파일이 .mp4 파일이면, 아래와 같이 수행하면 된다.
$ ffmpeg -y -i my_input_movie.mp4 -c:v libvpx-vp9 -c:a libopus my_output_movie.webm

참고:
꼭 Web browser로 포기 위한 용도가 아니더라도 위와 같인 webm 파일로 변경하면 좋은 점이 하나 더 있다. 그것은 바로, 동영상의 사이즈가 1/10 수준으로 확 줄어든다. 신기하게도 90% 정도의 사이즈 압축이 있지만, 동영상 품질의 차이는 눈으로 느낄 수 없을 정도이다. 동영상 품질이 거의 원본과 동일하다.

반응형

 


 

작성일: 2023년 12월 15일
준비물: Raspberry Pi 5
   (Pi 3B, 4, 5 모두 테스트해봤는데, 설정 내용이 동일했다. 그러니까 아무 버전의 Raspberry Pi 다 된다는 뜻.)

 

 

 

Raspberry Pi 5를 아래와 같이 Wi-Fi AP로 구축한다면, 아래의 설명을 쭉~ 따라하면 잘 동작한다.

 

Raspberry Pi를 Wi-Fi Access Point로 사용하기 위한 구성도

 

 

아래의 명령만 복붙(Copy & Paste)하면 동작할 것이다.

(자세한 설명은 이 링크의 공식 문서를 참고)

 

 

 

DNSMasq, HostAPD를 설치

$ sudo apt install dnsmasq hostapd

## 참고: 설정 작업을 위해 임시로 서비스를 종료시킨다.
$ sudo systemctl stop dnsmasq
$ sudo systemctl stop hostapd

 

Raspberry Pi의 무선 Interface wlan0에 Static IP 설정

$ sudo vim /etc/dhcpcd.conf

... 중간 생략 ...

## 이 파일의 마지막 부분에 아래의 3줄을 추가한다.
interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant
    
$ sudo systemctl restart dhcpcd

 

DHCP Server 설정

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

$ sudo vim /etc/dnsmasq.conf
## 이 파일에 아래 2줄을 추가한다.
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h


$ sudo systemctl start dnsmasq

 

Access Point Host 프로그램 설정

$ sudo vim /etc/hostapd/hostapd.conf
country_code=KR
interface=wlan0
ssid=YOURSSID
hw_mode=g
channel=7
auth_algs=1
wpa=2
wpa_passphrase=YOURPWD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ignore_broadcast_ssid=0


$ sudo vim /etc/default/hostapd
... 중간 생략 ...
## 아래 설정 내용을 추가한다.
DAEMON_CONF="/etc/hostapd/hostapd.conf"
... 중간 생략 ...

 

 

위와 같이 따라하면, Wi-Fi 구간의 설정은 끝 !!!

 

아래는 Raspberry Pi의 Wi-Fi 인터페이스 wlan0 으로 들어온 IP 트래픽을 유선 인터페이스 eth0 방향으로 보내면서 Masquerading 하는 설정이다.  

이 설정이 잘 되어야 무선으로 접속한 PC 또는 스마트폰이 유선 방향(즉, 인터넷 방향)으로 트래픽이 잘 전달된다.

 

IP Routing 및 Masquerading 설정

$ sudo nano /etc/sysctl.conf
... 중간 생략 ...
## 아래의 1줄을 추가한다.
net.ipv4.ip_forward=1
... 중간 생략 ...

## 라즈베리 파이에서 외부로 나가는 트래픽을 eth0의 IP address로 변경하는 설정.
## (일반적인 Source NAT 설정과 동일함)
$ sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE

## 재기동 후, 위 IPTables의 NAT 설정이 유지되도록 아래와 같이 설정을 저장함.
$ sudo netfilter-persistent save

$ reboot

 

 

위 설정 작업이 끝나면, 라즈베리 파이는 무선 AP로 동작할 것이다.

스마트폰이나 노트북으로 라즈베리 파이의 Wi-Fi 접속해보면 인터넷이 잘 될 것이다.

 

 

참고하면 좋은 문서

https://raspberrypi-guide.github.io/networking/create-wireless-access-point


 

+ Recent posts