Raspberry Pi Raspbian - 윈디하나의 솔라나라
|
Raspberry Pi OS(32bit)를 기준으로 작성했다. 이외에도 라즈베리 파이에는 Ubuntu, Windows 10 IoT Core, OpenWRT, CentOS등을 설치할 수 있다.
라즈베리 파이 2 모델 B(Raspberry Pi 2 Model B)이며, 운영체제 버전은
버스터(Debian Buster)다. 이를 사용해 워드프레스 기반 웹 서비스, Wireless AP, NAS, 홈 씨어터 서버를 구축하는 방법에 대해 설명한다.
위키피디아의 블록 다이어그램을 Raspberry Pi 3 Model B
에 맞춰 수정했다. CPU/GPU 역할을 하는 SoC에 메모리가 연결되어있고 SoC의 I/O 포트에 GPIO 핀헤더와 무선 장치와 USB 장치가 있고, USB장치를 다시 USB 허브 및 이더넷 장치가 붙어있는 구조다.
Model B
라는 명칭은 라즈베리 파이 중에서도 성능과 기능이 향상된 모델을 칭한다. 2016년 6월 현재 출시된 모델을 기준으로 간단히 비교해 보았다.
구분 | Raspberry Pi 4 |
Raspberry Pi 3 Model B+ |
Raspberry Pi 3 Model B |
Raspberry Pi 2 Model B |
Raspberry Pi Model B+ |
제품 | |||||
출시일 | 2019.07.24 | 2018.03.14 | 2016.02.29 | 2015.02.02 2016.3/4분기 3) |
2014.07.14 |
Family | - | BCM2710 | BCM2710 | BCM2709 BCM2710 3) |
BCM2708 |
SoC | BCM2711 B0 | BCM2837 B0 | BCM2837 | BCM2836 BCM2837 3) |
BCM2835 |
CPU | Cortex A72 @ 1.5GHz, Quad-core | Cortex A53 @ 1.4GHz, Quad-core | Cortex A53 @ 1.2GHz, Quad-core | Cortex A7 @ 900MHz, Quad-core Cortex A53 @ 900MHz, Quad-core 3) |
ARM1176JZF-S @ 700MHz, Single-core |
아키텍처 | ARMv8-A (64bit) | ARMv8-A (64bit) | ARMv8-A (64bit) | ARMv7-A (32bit) ARMv8-A (64bit) 3) |
ARMv6 (32bit) |
GPU | VideoCore VI 500MHz, 32 GFLOPS, 2160p60 | VideoCore IV 300MHz1), 28.8 GFLOPS, 1080p60 | VideoCore IV 300MHz1), 28.8 GFLOPS, 1080p60 | VideoCore IV 250MHz, 24 GFLOPS, 1080p30 | VideoCore IV 250MHz, 24 GFLOPS, 1080p30 |
L2 Cache | 1MB | 512KB | 512KB | 256KB 512KB 3) |
128KB |
RAM | 1GB (Samsung K4F8E304HB-MGCJ) or 2GB (Micron D9WHZ) or 4GB (Micron D9WHV) or 8GB (Micron D9ZCL) LPDDR4-3733 5) | 1GB LPDDR2 SDRAM 900MHz (Elpida EDB8132B4PB-8D-F) | 1GB LPDDR2 SDRAM 900MHz (Elpida EDB8132B4PB-8D-F) | 1GB LPDDR2 SDRAM 900MHz (Elpida EDB8132B4PB-8D-F) | 512MB LPDDR 400MHz (Samsung K4P4G324EQ) |
LAN/USB | 10/100/1000 (BCM54213PE), 2 x USB 2.0, 2 x USB 3.0 (VL805) | 10/100/1000, 4 x USB 2.0 (LAN7515) | 10/100, 4 x USB 2.0 (LAN9514-JZX) | 10/100, 4 x USB 2.0 (LAN9514-JZX) | 10/100, 4 x USB 2.0 (LAN9514-JZX) |
WLAN | 802.11a/b/g/n/ac, Bluetooth 5, BLE (CYW43455) | 802.11a/b/g/n/ac, Bluetooth 4.2, BLE (CYW43455) | 802.11b/g/n, Bluetooth 4.1, BLE (BCM43438) | - | - |
HDMI | 2 x micro HDMI 2.0 | HDMI 1.3 | HDMI 1.3 | HDMI 1.3 | HDMI 1.3 |
GPIO | 40 + 4(PoE) | 40 + 4(PoE) | 40 | 40 | 40 |
PWR 2) | 3.0W | 2.5W | 2.0W | 1.7W | 1.6W |
권장 PWR4) | 15.0W | 12.5W | 12.5W | 9.0W | 9.0W |
Raspberry Pi 2 Model B V1.2가 발매되었다. 이 버전의 라즈베리파이는 2016.09.23 이후에 배포된 Raspbian 을 사용해야 한다. (그 이전 버전은 오작동한다) 리비전 코드는
a22042으로
cat /proc/cpuinfo
명령어로 확인해볼 수 있다.Download Raspbian for Raspberry Pi에서 라즈비안을 다운로드한다. 윈디하나의 솔라나라: 다운로드에서도 전체 버전을 받을 수 있다.
다운로드 받은 이미지(.img)를 16GB 이상 되는 SD카드에 이미지 라이터
를 사용해 설치
한다. (파일을 복사
하면 안된다)
윈도에서 이미지를 SD카드에 설치하는 방법은 Installing Operating System Images using Windows을 참조하자.
아래는 디스크 이미지 유틸리티를 사용해 윈도에서 라즈비안 이미지를 SD카드로 설치하는 화면이다.
만약 SD카드에 이미 다른 운영체제가 설치되어있다면 SD카드를 초기화(=파티션 삭제)해 설치할 것을 권장한다. (반드시 초기화해야하는건 아니다) 윈도의 diskpart 명령을 사용해 SD카드의 파티션을 삭제할 수 있다. (diskpart 는 관리자 권한으로 실행해야 한다)
C:\Windows\system32>diskpart Microsoft DiskPart 버전 6.1.7601 Copyright (C) 1999-2008 Microsoft Corporation. 컴퓨터: PC DISKPART> list disk 디스크 ### 상태 크기 사용 가능 Dyn Gpt ---------- ------------- ------- ------------ --- --- 디스크 0 온라인 298 GB 0 B 디스크 1 온라인 14 GB 3072 KB DISKPART> select disk 1 1 디스크가 선택한 디스크입니다. DISKPART> list part 파티션 ### 종류 크기 오프셋 ---------- ---------------- ------- ------- 파티션 1 주 60 MB 4096 KB 파티션 0 주 14 GB 64 MB DISKPART> select part 1 1 파티션이 선택한 파티션입니다. DISKPART> delete part DiskPart에서 선택한 파티션을 삭제했습니다. DISKPART> list part 파티션 ### 종류 크기 오프셋 ---------- ---------------- ------- ------- 파티션 1 주 14 GB 64 MB DISKPART> select part 1 1 파티션이 선택한 파티션입니다. DISKPART> delete part DiskPart에서 선택한 파티션을 삭제했습니다. DISKPART> list part 이 디스크에 표시할 파티션이 없습니다. DISKPART> create part pri DiskPart에서 지정한 파티션을 만들었습니다. DISKPART> list part 파티션 ### 종류 크기 오프셋 ---------- ---------------- ------- ------- * 파티션 1 주 14 GB 1024 KB DISKPART> exit DiskPart 마치는 중... C:\Windows\system32>
이제 라즈베리 파이에 전원을 연결해 부팅할 차례다. 부팅 절차에 관한 더 자세한 사항은 Setting up your Raspberry Pi를 읽어보자.
SD 카드를 사용한 부팅 외에도, USB 부트, 대용량 저장소 부트, 네트워크 부트가 지원된다. Raspberry Pi boot modes를 읽어보자.
부팅에 사용되는 /boot
디렉토리는 아래와 같은 파일로 이루어져 있다.
/boot/config.txt
에 start_file=start_x.elf
와 fixup_file=fixup_x.elf
를 넣고 재시작한다. (Updated GPU firmware) bootcode.bin, start*.elf, fixup*.dat 파일은 소스가 공개되지 않은 바이너리 파일이다. 이 파일들을 사용해 아래와 같은 순서로 파일을 읽어들이며 부팅된다.
pi@raspberrypi:~ $ sudo vi /etc/apt/sources.list deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi pi@raspberrypi:~ $ sudo vi /etc/apt/sources.list.d/raspi.list deb http://archive.raspberrypi.org/debian jessie main ui pi@raspberrypi:~ $ sudo mkdir /home/pi/.config/autostart pi@raspberrypi:~ $ sudo apt-get update pi@raspberrypi:~ $ sudo apt-get dist-upgrade Coffee Break! pi@raspberrypi:~ $ sudo reboot
라즈비안으로 부팅이 완료되면 아래와 유사한 화면이 보인다. pi
계정으로 로그인이 되어있는 상태다.
왼쪽 위에 윈도의 시작버튼 역할을 하는 라즈베리파이 버튼이 있고, 오른쪽 상단에 네트워크 설정을 위한 버튼이 보인다. 한글 입력이 가능하도록 IME를 변경한 후의 캡처 화면이다. (IME 변경 방법은 하단에 나와있다)
pi / raspberry
이다.라즈비안이 부팅 된 이후 가장 먼저해야할 설정은 네트워크 설정이다.
NIC에 할당된 IP를 고정으로 변경하려면 /etc/network/interfaces
에서 인터페이스를 설정을 manual 로 변경하고, /etc/dhcpcd.conf
에 IP를 적어준다.
아래 예시는 eth0
라는 NIC를 고정 IP(192.168.0.2)로 변경했다.
pi@raspberrypi:~ $ sudo vi /etc/network/interfaces iface eth0 inet manual pi@raspberrypi:~ $ sudo vi /etc/dhcpcd.conf ... interface eth0 static ip_address=192.168.0.2/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1
Wifi 어댑터도 위와 같은 방법을 사용해 고정된 IP를 할당할 수 있다.
이 챕터에서는 CLI를 사용해 Wifi 를 설정하는 방법을 다룬다. Setting WiFi up via the command line - Raspberry Pi Documentation을 참고하자. GUI를 사용한 방법은 WiFi - Raspberry Pi Documentation를 읽어보자.
라즈비안을 Wifi 에 접속하도록 설정하려면, AP 접속 정보를 라즈비안에 설정해야 한다. 우선 /etc/network/interfaces
에 Wifi 설정 파일 위치(/etc/wpa_supplicant/wpa_supplicant.conf
)을 적어주고 /etc/wpa_supplicant/wpa_supplicant.conf
에 Wifi AP 연결 정보를 저장해 놓는다. 이 작업을 마치면 AP에 연결될 것이며, 라즈비안에 기본 설치된 DHCP 클라이언트가 DHCP서버로부터 IP를 받아올 것이다. Wifi 기기에도 고정된 IP를 사용하려면 고정 IP 설정
를 참조하자.
아래에 SOLANARA
라는 SID를 가진 Wifi AP 에, WPA-PSK
방식으로 PASSWORD12345
패스워드를 사용해 접속하는 예를 보였다.
pi@raspberrypi:~ $ sudo vi /etc/network/interfaces iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf pi@raspberrypi:~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="SOLANARA" 1) psk="PASSWORD12345" 1) key_mgmt=WPA-PSK 2) }1) 따옴표(")를 반드시 사용해야 한다.
proto=RSN
을 추가해준다.
다른 설정 방법은 인터넷을 찾아보자.
pi@raspberrypi:~ $ iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID:"SOLANARA" Nickname:"<WIFI@REALTEK>" Mode:Master Frequency:2.472 GHz Access Point: 00:00:00:00:00:00 Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=2/100 Signal level=2/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 pi@raspberrypi:~ $ iw list ... pi@raspberrypi:~ $ iw wlan0 info ...
패키지 업그레이드는 아래와 같이 한다. update
와 upgrade
를 모두 실행해야 한다.
pi@raspberrypi:~ $ sudo apt-get update pi@raspberrypi:~ $ sudo apt-get upgrade
배포판 업그레이드가 필요한 경우 아래와 같이 배포판을 업그레이드 하자. 보통 라즈베리 파이의 다운로드 페이지에서 배포하는 이미지가 변경된 경우에 배포판 업그레이드가 필요할 것이다.
pi@raspberrypi:~ $ sudo apt-get dist-upgrade pi@raspberrypi:~ $ sudo apt-get autoremove
커널 및 펌웨어 업그레이드는 아래와 같이 한다. 최신 커널은 Kernel source tree for Raspberry Pi Foundation-provided kernel builds에서 확인해볼 수 있다.
pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l GNU/Linux pi@raspberrypi:~ $ sudo rpi-update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom This update bumps to rpi-4.4.y linux tree Be aware there could be compatibility issues with some drivers Discussion here: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087 ############################################################## *** Downloading specific firmware revision (this will take a few minutes) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 168 0 168 0 0 157 0 --:--:-- 0:00:01 --:--:-- 157 100 52.2M 100 52.2M 0 0 654k 0 0:01:21 0:01:21 --:--:-- 543k *** Updating firmware *** Updating kernel modules *** depmod 4.4.46+ *** depmod 4.4.46-v7+ *** Updating VideoCore libraries *** Using HardFP libraries *** Updating SDK *** Running ldconfig *** Storing current firmware revision *** Deleting downloaded files *** Syncing changes to disk *** If no errors appeared, your firmware was successfully updated to 975ebd8aba11b767e33a178e453c978601f53f1e *** A reboot is needed to activate the new firmware pi@raspberrypi:~ $ sudo reboot
재시작 해보면 커널및 펌웨어가 업데이트 된 것을 알 수 있다.
pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.4.46-v7+ #959 SMP Fri Feb 3 17:24:25 GMT 2017 armv7l GNU/Linux
raspi-config 는 라즈베리 파이를 설정할 수 있는 도구다. TUI 형태로 제공되기 때문에 원격에서 접속해서도 사용할 수 있다. 최소한 아래에 나와있는 설정은 필요할 것으로 생각한다.
pi@raspberrypi:~ $ sudo raspi-config
3 Boot Options
B3 Splash Screen
YES
4 Localisation Options
I1 Change Locale
[*] ko_KR.UTF-8 UTF-8
ko_KR.UTF-8 UTF-8
I2 Change Timezone
Asia
Seoul
I3 Change Keyboard Layout
Generic 105 key (Intl) PC
Other
Korean
Korean - Korean (101/104 key compatibale)
The default for the keyboard layout
No compose key
No
I4 Change Wi-fi Country
KR Korea (South)
5 Interfacing Options
P2 SSH
YES
6 Overclock
High 1000MHz ARM, 500MHz core, 500MHz SDRAM, 2 overvolt 1)
7 Advanced Options
A1 Expand Filesystem
A2 Overscan
No
A3 Memory Split
128
A4 Audio
2 Force HDMI
1) 오버클럭이 필요 없는 경우 기본값인 None 900MHz ARM, 250MHz core, 450MHz SDRAM, 0 overvolt으로 설정하자.
한글 입력기와 폰트를 설치한다.
pi@raspberrypi:~ $ sudo apt-get install ibus ibus-hangul ttf-unfonts-core fonts-nanum
재시작 이후에 오른쪽 상단에있는 키보드 입력기(En 아이콘)를 클릭해 한글(태극 문양)로 변경하자.
외부에서 SSH를 사용해 root 계정으로 직접 접속 가능하도록 설정하려면 아래와 같이 한다.
pi@raspberrypi:~ $ sudo passwd pi@raspberrypi:~ $ sudo vi /etc/ssh/sshd_config PermitRootLogin yes pi@raspberrypi:~ $ sudo service sshd restart
pi@raspberrypi:~ $ vi ~/Desktop/LeafPad.desktop [Desktop Entry] Type=Application Encoding=UTF-8 Name=LeafPad Comment=GTK+ 기반 텍스트 에디터 Icon=/usr/share/pixmaps/leafpad.png Exec=/usr/bin/leafpad Terminal=false StartupNotify=false Categories=Utility파일을 저장하면 바로 바탕화면에 아이콘이 떠 있을 것이다.
~/.local/share/applications
에 .desktop 파일을 생성하면 된다. 시스템 전역 메뉴(모든 사용자의 메뉴)에 단축 아이콘을 생성하려면 /usr/share/applications
또는 /usr/local/share/applications
(추천) 디렉토리에 .desktop 파일을 생성하면 된다. 생성한 후 lxpanelctl restart
명령을 실행해 패널을 재시작하면 된다.-e
옵션을 사용하면 된다./usr/share/icons
나 /usr/share/pixmaps
에 있는 이미지를 참조해서 넣어주면 된다. Exec대신
URL을 사용하면 기본 브라우저를 사용해 지정한 URL을 열도록 할 수 있다.
pi@raspberrypi:~ $ sudo apt-get install iceweasel pi@raspberrypi:~ $ firefox -v Mozilla Firefox 45.2.0콘솔 뿐만 아니라
Menu - 인터넷 - Iceweasel을 선택해 Iceweasel 을 실행할 수도 있다.
omxplayer(1)는 라즈베리 파이의 GPU를 활용해 개발한 비디오/오디오 플레이어다. omx를 사용해 개발했기 때문에 성능도 좋다.
omxplayer(1)를 사용하기 전에 나타날 수 있는 문제를 방지하기 위해 raspi-config
를 사용해 설정을 변경하자. Memory Split
설정은 필수로 변경해야 한다. 다른 설정은 문제가 발생했을 때 변경해도 된다.
pi@raspberrypi:~ $ sudo raspi-config 7 Advanced Options A2 Overscan No A3 Memory Split 128 A4 Audio 2 Force HDMI
omxplayer
의 기본적인 사용 방법은 아래와 같다.
pi@raspberrypi:~ $ omxplayer \ -b \ -o hdmi \ --passthrough \ --subtitles MOVIE.srt \ --font /usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf \ MOVIE.mkv
소리가 들리지 않거나 소리에 문제가 있으면 --passthrough
을 삭제하고 실행해보자.
omxplayer
에서 사용할 수 있는 옵션은 아래와 같다.
-h --help 도움말 출력 -v --version 버전 정보 출력 -k --keys 키 할당 정보 출력 -n --aidx index 오디오 스트림 인덱스 예) 1 -o --adev device 오디오 출력 장치 예) hdmi/local/both -i --info 스트림 포맷 덤프 및 종료 -I --with-info 플레이하기 전에 스트림 포맷 덤프 -s --stats Pts and buffer stats -p --passthrough 오디오 패스스루(Pass Through) -d --deinterlace 강제 인터레이싱 제거(deinterlacing) --nodeinterlace 강제 인터레이싱 (no deinterlacing) --nativedeinterlace let display handle interlace --anaglyph type convert 3d to anaglyph --advanced HD비디오에 대해 고급 인터레이스 제거 허용 -w --hw 하드웨어 오디오 디코딩 사용 -3 --3d mode TV를 3D 모드로 변경 예) SBS/TB -M --allow-mvc Allow decoding of both views of MVC stereo stream -y --hdmiclocksync Display refresh rate to match video (default) -z --nohdmiclocksync Do not adjust display refresh rate to match video -t --sid index Show subtitle with index -r --refresh Adjust framerate/resolution to video -g --genlog 로그파일 생성 -l --pos n 시작 위치 (hh:mm:ss 형식) -b --blank 배경색을 검은색으로 설정 --loop 루프 파일. 파일이 탐색 불가능한 경우 무시됨 --no-boost-on-downmix 다운믹싱시 볼륨 부스트 하지 않음 --vol n set initial volume in millibels (기본값 0) --amp n set initial amplification in millibels (기본값 0) --no-osd Do not display status information on screen --no-keys 키보드 입력 비활성화 (prevents hangs for certain TTYs) --subtitles path UTF-8 .srt 형식 외부 자막 경로 --font path 폰트 경로. 기본값: /usr/share/fonts/truetype/freefont/FreeSans.ttf --italic-font path 이탤릭 폰트 경오. 기본값: /usr/share/fonts/truetype/freefont/FreeSansOblique.ttf --font-size size 폰트크기 (스크린 높이 1/1000 의 배수, 기본값: 55) --align left/center 자막 위치 (기본값: left) --no-ghost-box 자막 뒤에 반투명 박스 표시 안함 --lines n 자막 버퍼의 라인 수 (기본값: 3) --win 'x1 y1 x2 y2' 비디오 윈도우 위치 지정 --win x1,y1,x2,y2 비디오 윈도우 위치 지정 --crop 'x1 y1 x2 y2' 입력 비디오의 크롭 영역 지정 --crop x1,y1,x2,y2 입력 비디오의 크롭 영역 지정 --aspect-mode type letterbox, fill, stretch 중 하나. win 이 정의된 경우 stretch, 그 외의 경우 letterbox --audio_fifo n 오디오 출력 FIFO 크기 (초) --video_fifo n 비디오 출력 FIFO 크기 (MB) --audio_queue n 오디오 입력 큐 크기 (MB) --video_queue n 비디오 입력 큐 크기 (MB) --threshold n Amount of buffered data required to finish buffering [s] --timeout n Timeout for stalled file/network operations (default 10s) --orientation n 비디오 방향 지정 (0, 90, 180, 270) --fps n Set fps of video where timestamps are not present --live Set for live tv or vod type stream --layout 출력 스피커 레이아웃 (예 5.1) --dbus_name name 기본값: org.mpris.MediaPlayer2.omxplayer --key-config <file> Uses key bindings in <file> instead of the default --alpha 비디오 투명화 정도 (0 ~ 255) --layer n Set video render layer number (higher numbers are on top) --display n Set display to output to --cookie 'cookie' HTTP 요청시 보낼 쿠키 값 --user-agent 'ua' HTTP 요청시 보낼 User-Agent 값
1 재생 속도 낮추기 2 재생 속도 높이기 < 뒤로 > 빠르게 앞으로 z 정보 보기 j 이전 오디오 스트림 k 다음 오디오 스트림 i 이전 챕터 o 다음 챕터 n 이전 자막 스트림 m 다음 자막 스트림 s 자막 켜고 끄기 w 자막 보이기 x 자막 감추기 d 자막 지연 축소 (- 250 ms) f 자막 지연 증가 (+ 250 ms) q 플레이어 종료 p / space 일시정지/재개 - 볼륨 낮추기 + / = 볼륨 높이기 left arrow -30 초로 이동 right arrow +30 초로 이동 down arrow -600 초 이동 up arrow +600 초 이동
.srt
형식만 지원한다. 우리나라에서 많이 사용하는 .smi
형식을 지원하지 않는다. 자막 파일 컨버터 프로그램을 사용해 변환해서 사용하자.raspi-config
나 amixer
설정의 영향을 받지 않는다. 라즈비안의 오디오 설정은 Audio configuration - Raspberry Pi Documentation을 읽어보자.sudo apt-get install mediainfo -y
명령을 사용해 설치할 수 있다.
pi@raspberrypi:~ $ sudo apt-get install apache2 -y
pi@raspberrypi:~ $ sudo apt-get install php5 libapache2-mod-php5 -y
pi@raspberrypi:~ $ sudo apt-get install mysql-server php5-mysql -y 1)
1) MySQL 의 패스워드를 묻는 화면이 나오는데 패스워드를 입력해주자.
/etc/apache2
, /etc/php5
, /etc/mysql
디렉토리에 설정 파일이 있다. 소스 설치와는 디렉토리 위치가 다르긴 하지만, 이미 설정이 라즈비안에 최적화되어있기 때문에 변경할 것이 없다.pi@raspberrypi:~ $ sudo service apache2 restart pi@raspberrypi:~ $ sudo service mysql restart
/var/www/html
가 아파치의 문서루트다. 여기에 워드프레스를 다운로드해 압축을 푼다.
pi@raspberrypi:~ $ mkdir src pi@raspberrypi:~ $ cd src pi@raspberrypi:~/src $ wget https://ko.wordpress.org/wordpress-4.7.4-ko_KR.tar.gz pi@raspberrypi:~/src $ cd /var/www/html pi@raspberrypi:/var/www/html $ sudo rm index.html pi@raspberrypi:/var/www/html $ sudo tar xvzf ~/src/wordpress-4.7.4-ko_KR.tar.gz pi@raspberrypi:/var/www/html $ sudo chown -R www-data:www-data wordpress
pi@raspberrypi:~ $ mysql -u root -p Enter password: 패스워드 mysql> create database wordpress; Query OK, 1 row affected (0.00 sec) mysql> exit
http://RASPBIAN_IP/wordpress
을 열면 워드프레스 관리자에 접속할 수 있다. 나머지 설치 절차를 진행한다.
Let's Go!를 클릭한다.
전송을 클릭한다.
/var/www/html/wordpress
에 .htaccess
파일과 wp-config.php
파일이 생성되어있을 것이다. 설치 실행하기를 클릭한다.
워드프레스 설치하기를 클릭한다.
로그인을 클릭한다.
로그인을 클릭한다.
인터넷 공유에 대해 설명하는 것이 아니다. Wifi 장치를 AP로 만드는것에 중점을 둔다. 인터넷 공유를 하려면 별도의 설정이 더 필요하다.
NIC 인터페이스를 브릿지 모드로 변경하면 성능상의 이점이 있다. 브릿지 모드로 변경하려면 아래와 같이 작업하자.
pi@raspberrypi:~ $ sudo apt-get install bridge-utils pi@raspberrypi:~ $ sudo vi /etc/network/interfaces ... iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf 1) auto br0 iface br0 inet manual bridge_ports eth0 wlan0 pi@raspberrypi:~ $ sudo vi /etc/dhcpcd.conf interface br0 static ip_address=192.168.0.8/24 static routers=192.168.0.2 static domain_name_servers=192.168.0.2 # wlan0, eth0 설정은 반드시 주석처리 1) pi@raspberrypi:~ $ sudo systemctl daemon-reload pi@raspberrypi:~ $ sudo service networking restart1) wlan0, eth0 에 IP가 할당되거나 AP에 접속해서는 안된다.
설정이 잘 되었다면 아래와 같이 나올 것이다.
pi@raspberrypi:~ $ ip link 1) 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000 link/ether b8:27:eb:00:00:00 brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 1000 link/ether 90:9f:33:00:00:00 brd ff:ff:ff:ff:ff:ff 4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether 90:9f:33:00:00:00 brd ff:ff:ff:ff:ff:ff pi@raspberrypi:~ $ brctl show bridge name bridge id STP enabled interfaces br0 8000.909f33000000 no eth0 wlan0 pi@raspberrypi:~ $ bridge link 1) 2: eth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 19 3: wlan0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 1001) 이 화면은 하단의 hostapd 를 설정한 후의 화면이다. wlan0은 하단의 hostapd 를 설정하기 전까지는 브릿지가 설정되지 않는다. DISABLE되어있기 때문이다.
pi@raspberrypi:~ $ sudo apt-get install isc-dhcp-server pi@raspberrypi:~ $ sudo vi /etc/dhcp/dhcpd.conf 1) #authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.101 192.168.0.110; option broadcast-address 192.168.0.255; option routers 192.168.0.1; default-lease-time 600; max-lease-time 7200; # option domain-name "solanara.net"; option domain-name-servers 8.8.8.8; } pi@raspberrypi:~ $ sudo vi /etc/default/isc-dhcp-server 2) INTERFACES="br0" pi@raspberrypi:~ $ sudo service isc-dhcp-server start1) routers 에는 기본 라우터 주소를 적어준다. 만약 IP Masquerade를 사용한다면, 라우터 주소가 라즈비안의 IP가 된다.
br0인터페이스로 표시했다. 브릿지 인터페이스를 사용하지 않는다면 wlan0 와 같이 NIC드라이버를 명시해야 한다.
DNS 서버가 내부에 있으면 인터넷 접속 속도가 더 빨라진다.
pi@raspberrypi:~ $ sudo apt-get install dnsutils bind9 -y패키지가 설치 되었으면 이미 로컬 DNS 조회 설정은 되어있기 때문에, DNS 서버에 라즈비안의 IP를 지정해 사용하면 된다. nslookup(1)을 사용해 로컬 DNS 서버를 테스트해보자.
pi@raspberrypi:~ $ nslookup - 127.0.0.1
> www.solanara.net
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
www.solanara.net canonical name = maid.solanara.net.
Name: maid.solanara.net
Address: 211.204.126.106
> exit
DHCP 설정에서 도메인 서버를 라즈비안의 도메인 서버를 사용하도록 세팅한다. 다른 어플에서도 도메인 서버에 라즈비안의 IP를 설정해서 사용할 수 있다.
pi@raspberrypi:~ $ sudo vi /etc/dhcp/dhcpd.conf ... option domain-name-servers 서버IP; ...BIND 에 대한 더 자세한 설정은 윈디하나의 솔라나라: DNS, BIND (작성중)를 읽어보자.
DNSMASQ는 DNS서버와 DHCP 를 하나로 합쳐놓은 서버로 생각하면 된다. 세세한 설정은 불가능하지만 반대로 간편하게 설정해 사용할 수 있다.
DHCP, DNS 전문가가 아닌 이상 DNSMASQ 서버만으로도 사용하는데에는 문제 없을 것이다.
pi@raspberrypi:~ $ sudo apt-get install dnsmasq pi@raspberrypi:~ $ sudo vi /etc/dnsmasq.conf interface=wlan0 bind-interfaces server=8.8.8.8 domain-needed bogus-priv dhcp-range=192.168.0.101,192.168.0.110,2h pi@raspberrypi:~ $ sudo service dnsmasq start
pi@raspberrypi:~ $ sudo apt-get install \ libnl-3-dev libnl-route-3-dev libnl-genl-3-dev openssl libssl-dev sqlite libsqlite3-dev pi@raspberrypi:~ $ lsusb ... Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter ...
hostapd 번들을 먼저 설치한다.
pi@raspberrypi:~ $ sudo apt-get install hostapd iw
이제 hostapd를 설정할 차례다. RTL8188CUS 칩셋을 사용한 Wifi Adapter 을 사용하고 있다면 아래 설정에서 채널과 SSID, 패스워드만 변경해서 사용하면 된다. hostapd.conf 설정 항목은 hostapd configuration file을 참조하자.
pi@raspberrypi:~ $ sudo cp /usr/share/doc/hostapd/examples/hostapd.conf.gz /etc/hostapd pi@raspberrypi:~ $ sudo gunzip /etc/hostapd/hostapd.conf.gz pi@raspberrypi:~ $ sudo vi /etc/hostapd/hostapd.conf 1) bridge=br0 driver=nl80211 ssid=SOLANARA country_code=KR ieee80211d=1 ieee80211h=1 channel=1 preamble=1 ieee80211n=1 ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][MAX-AMSDU-7935][40-INTOLERANT][SMPS-STATIC] wpa=2 wpa_passphrase=solanara12345 wpa_key_mgmt=WPA-PSK WPA-EAP wpa_pairwise=TKIP CCMP rsn_pairwise=CCMP pi@raspberrypi:~ $ sudo vi /etc/default/hostapd DAEMON_CONF="/etc/hostapd/hostapd.conf" pi@raspberrypi:~ $ sudo hostapd -dd /etc/hostapd/hostapd.conf 2) ... wlan0: AP-ENABLED wlan0: Setup of interface done. ... Ctrl+C pi@raspberrypi:~ $ sudo service hostapd restart pi@raspberrypi:~ $ iw wlan0 info Interface wlan0 ifindex 3 wdev 0x1 addr 00:00:00:00:00:00 ssid SOLANARA type AP wiphy 01) 기본값에서 변경된 사항만 표시했다. 특히
ht_capab
항목은 디바이스에 의존적인 기능을 설정하는 항목이기 때문에, 디바이스마다 다르게 넣어주어야 한다. 현재 설정은 RTL8188CUS 칩 기준이다.AP-ENABLED라는 단어가 보이면 성공한것이다.
만약 NAT를 사용해 IP를 공유하려 한다면 아래와 같이 작업한다.
pi@raspberrypi:~ $ sudo vi /etc/sysctl.conf net.ipv4.ip_forward=1 pi@raspberrypi:~ $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE pi@raspberrypi:~ $ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state \ --state RELATED,ESTABLISHED -j ACCEPT pi@raspberrypi:~ $ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT pi@raspberrypi:~ $ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" pi@raspberrypi:~ $ sudo vi /etc/network/interfaces pre-up iptables-restore < /etc/iptables.ipv4.nat
위에서 설명한 DHCP 세팅도 변경해야 한다.
설정을 마친 후 시스템을 재시작해 제대로 동작하는지 반드시 확인해보자.
max_usb_current
설정을 한 경우)라즈비안에서 USB에 연결된 장치의 최대 전력은 아래와 같이 확인해볼 수 있다.
pi@raspberrypi:~ $ sudo lsusb -v | grep -e MaxPower -e ^Bus Bus 001 Device 006: ID 413c:2003 Dell Computer Corp. Keyboard MaxPower 70mA Bus 001 Device 005: ID 045e:00f6 Microsoft Corp. Comfort Optical Mouse 1000 MaxPower 100mA Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter MaxPower 500mA Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter MaxPower 2mA Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. MaxPower 2mA Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub MaxPower 0mA
max_usb_current
값을 설정하지 않은 경우 최대 5V, 600mA 까지 공급하지만, 설정하면 최대 5V, 1.2A까지 공급한다. 1.2A라는 수치는 라즈베리 파이에 달려있는 4개의 USB포트에 각각 공급되는 전류량이 아닌, 4개의 USB포트 및 Etherent 장치에 공급하는 전류의 총량이다.
pi@raspberrypi:~ $ sudo vi /boot/config.txt max_usb_current=1 pi@raspberrypi:~ $ sudo reboot
pi@raspberrypi:~ $ df -h
...
pi@raspberrypi:~ $ sudo apt-get install ntfs-3g exfat-fuse
pi@raspberrypi:~ $ sudo umount /dev/sda
pi@raspberrypi:~ $ sudo mkfs -t exfat /dev/sda 1)
pi@raspberrypi:~ $ sudo mkdir /data
pi@raspberrypi:~ $ sudo mount -t exfat /dev/sda /data
pi@raspberrypi:~ $ df -h
...
1) mkfs(8)은 포맷하는 명령어다. NTFS를 사용하려면 exfat대신
ntfs를 입력한다.
라즈비안 재시작 후에도 자동 마운트 되도록 설정한다.
pi@raspberrypi:~ $ sudo vi /etc/fstab ... /dev/sda /data exfat defaults 0 0 pi@raspberrypi:~ $ sudo reboot재 시작한 후 마운트가 되어있는지 확인해본다.
외장 저장장치를 사용하는 전용 사용자인 nas 를 추가한다.
pi@raspberrypi:~ $ sudo mkdir /data/nas pi@raspberrypi:~ $ sudo useradd -d /data/nas nas pi@raspberrypi:~ $ sudo passwd nas pi@raspberrypi:~ $ sudo chown nas /data/nas
pi@raspberrypi:~ $ sudo apt-get install vsftpd pi@raspberrypi:~ $ sudo vi /etc/vsftpd.conf listen=YES write_enable=YES ascii_upload_enable=YES ascii_download_enable=YES chroot_local_user=YES #listen_port=21 pi@raspberrypi:~ $ sudo service vsftpd restart
192.168.0.0/24
에서 /data
디렉토리에 대해, NFS로 접근해 읽고 쓸 수 있는 권한을 부여했다. NFS 에 대한 설명은 윈디하나의 솔라나라: NFS를 읽어보자.
pi@raspberrypi:~ $ sudo apt-get install nfs-kernel-server portmap nfs-common pi@raspberrypi:~ $ sudo vi /etc/exports /data 192.168.0.0/24(rw,async) pi@raspberrypi:~ $ sudo service rpcbind start pi@raspberrypi:~ $ sudo service nfs-kernel-server restart라즈비안의 NFS 공유 옵션에 대해서는 exports(5)을 읽어보자.
samba(1) 를 사용해 CIFS에 기반한 파일 공유를 사용할 수 있다. CIFS는 SMB라고도 불리며 쉽게 말하자면 윈도 운영체제의 파일 공유에 사용하는 프로토콜이다. samba(1) 에 대한 설명은 윈디하나의 솔라나라: Samba, SMB, CIFS를 읽어보자.
라즈베리파이의 /data
디렉토리를 공유하려면 아래와 같이 한다. 윈도에서 \\라즈베리파이IP\data
경로로 접근할 수 있다.
pi@raspberrypi:~ $ sudo apt-get install samba samba-common-bin pi@raspberrypi:~ $ sudo smbpasswd -a nas pi@raspberrypi:~ $ sudo vi /etc/samba/smb.conf [global] workgroup=WORKGROUP dos charset = CP949 display charset = UTF8 unix charset = UTF8 [profiles] comment = User profiles valid users = [sambaname] path = /data guest ok = no writable = yes browseable = yes create mask = 0777 directory mask = 0777 pi@raspberrypi:~ $ sudo service samba restart
오픈 소스 BitTorrent 클라이언트인 Transmission을 설치해 BitTorrent 를 사용할 수 있다.
pi@raspberrypi:~ $ sudo apt-get install transmission-daemon pi@raspberrypi:~ $ sudo service transmission-daemon stop 1) pi@raspberrypi:~ $ sudo vi /etc/transmission-daemon/settings.json 2) ... "download-dir": "/data/nas/torrent", "incomplete-dir": "/data/nas/torrent", "rpc-password": "PASSWORD", "rpc-port": 9001, "rpc-username": "USERNAME", "rpc-whitelist": "192.168.0.*", "rpc-whitelist-enabled": true, "watch-dir": "/data/nas/torrent/torrentfile", "watch-dir-enabled": true ... pi@raspberrypi:~ $ sudo service transmission-daemon start 3)1) 설정파일을 수정하기 전에 먼저 데몬을 종료한다.
rpc-password항목이 해시값으로 변경되어 저장된다.
위와 같이 설정한 후 http://RASPBIAN_IP:9001
로 접속하면 아래와 같은 화면이 나온다. rpc-username, rpc-password 에 명시한 패스워드로 로그인해 사용할 수 있다.
pi@raspberrypi:~ $ sudo apt-get install kodi시작할 때 자동으로 실행되도록 하려면 아래와 같이 한다.
pi@raspberrypi:~ $ sudo vi /etc/default/kodi ENABLED=1
system - settings - Appearance - skin - fonts = Arial based - International - language = korean
Kore, Official Remote for Kodi를 설치하면 Kodi 리모콘으로 이용할 수 있다. Kodi 에서는 원격제어를 허용해야 한다.
시스템 - 설정 - 서비스 - 웹 서버 - 포트 = 8080 - 비밀번호 = 패스워드입력 - 원격 제어 허용 = 체크
라즈베리 파이는 펌웨어가 SD카드에 저장된다. 바꿔말하면 라즈베리 파이 보드에 PC의 BIOS 역할을 해주는 장치가 없다는 의미다. 라즈비안에서는 /boot
에 펌웨어를 저장하며 부팅시 이 파일들을 읽어들인다. /boot
는 FAT32 파일 시스템으로 포맷되어있으며, 윈도를 포함한 많은 운영체제에서 읽고 쓸 수 있다. SD카드를 윈도에 연결하고 탐색기를 사용해 파일을 보고 수정할 수 있다는 의미다.
/boot/config.txt
파일을 수정해 라즈베리 파이의 펌웨어 옵션을 조절할 수 있다. 조절할 수 있는 항목은 config.txt나 RPiconfig을 읽어보자.
현재 HDMI로 출력되는 해상도는 tvservice -s
명령으로 확인해볼 수 있다. HDMI로 연결된 영상 기기의 해상도를 정확하게 인식하지 못하면, 아래와 같은 절차를 따라 설정해보자.
config.txt
에 hdmi_group=1
, hdmi_mode=1
을 넣고 재시작한다.
pi@raspberrypi:~ $ sudo vi /boot/config.txt ... hdmi_group=1 hdmi_mode=1 pi@raspberrypi:~ $ sudo reboot
pi@raspberrypi:~ $ tvservice -m CEA Group CEA has 15 modes: (prefer) mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive mode 5: 1920x1080 @ 60Hz 16:9, clock:74MHz interlaced mode 7: 720x480 @ 60Hz 16:9, clock:27MHz x2 interlaced (native) mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive mode 19: 1280x720 @ 50Hz 16:9, clock:74MHz progressive mode 20: 1920x1080 @ 50Hz 16:9, clock:74MHz interlaced mode 22: 720x576 @ 50Hz 16:9, clock:27MHz x2 interlaced mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive mode 32: 1920x1080 @ 24Hz 16:9, clock:74MHz progressive mode 34: 1920x1080 @ 30Hz 16:9, clock:74MHz progressive pi@raspberrypi:~ $ tvservice -m DMT Group DMT has 16 modes: mode 4: 640x480 @ 60Hz 4:3, clock:25MHz progressive mode 6: 640x480 @ 75Hz 4:3, clock:31MHz progressive mode 9: 800x600 @ 60Hz 4:3, clock:40MHz progressive mode 11: 800x600 @ 75Hz 4:3, clock:49MHz progressive mode 16: 1024x768 @ 60Hz 4:3, clock:65MHz progressive mode 17: 1024x768 @ 70Hz 4:3, clock:75MHz progressive mode 18: 1024x768 @ 75Hz 4:3, clock:78MHz progressive mode 21: 1152x864 @ 75Hz 4:3, clock:108MHz progressive mode 28: 1280x800 @ 60Hz 16:10, clock:83MHz progressive mode 35: 1280x1024 @ 60Hz 5:4, clock:108MHz progressive mode 36: 1280x1024 @ 75Hz 5:4, clock:135MHz progressive mode 42: 1400x1050 @ 60Hz 4:3, clock:121MHz progressive mode 47: 1440x900 @ 60Hz 16:10, clock:106MHz progressive mode 58: 1680x1050 @ 60Hz 16:10, clock:146MHz progressive mode 83: 1600x900 @ 60Hz 16:9, clock:108MHz progressive mode 85: 1280x720 @ 60Hz 16:9, clock:74MHz progressive pi@raspberrypi:~ $CEA그룹과 DMT그룹별로 모드 번호에 해당되는 해상도와 수직 주파수가 다르다. CEA 모드를 쉽게 말하면 TV고, DMT 모드를 쉽게 말하면 모니터에 해당된다.
pi@raspberrypi:~ $ sudo vi /boot/config.txt hdmi_group=1 hdmi_mode=16 pi@raspberrypi:~ $ sudo reboot재시작하면 원하는 해상도로 변경되어있을 것이다.
pi@raspberrypi:~ $ tvservice -s state 0x12000a [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive
pi@raspberrypi:~ $ fbset mode "1920x1080" geometry 1920 1080 1920 1080 16 timings 0 0 0 0 0 0 0 rgba 5/11,6/5,5/0,0/16 endmode pi@raspberrypi:~ $ sudo vi /boot/config.txt hdmi_pixel_encoding=2 framebuffer_depth=32 framebuffer_ignore_alpha=1 pi@raspberrypi:~ $ sudo reboot재시작하면 원하는 프레임버퍼로 변경되어있을 것이다.
pi@raspberrypi:~ $ fbset mode "1920x1080" geometry 1920 1080 1920 1080 32 timings 0 0 0 0 0 0 0 rgba 8/16,8/8,8/0,8/24 endmode프레임버퍼의 깊이를 늘이면 화질은 개선되지만 그만큼 사용하는 메모리양도 늘어나고 그만큼 CPU도 더 소비한다.
작업 | Raspbian |
인덱스 업데이트 | apt-get update |
패키지 업데이트 | apt-get upgrade |
배포 패키지 업데이트 | apt-get dist-upgrade |
패키지 설치 | apt-get install |
패키지 재설치 | apt-get --reinstall install PACAKGENAME |
패키지 삭제 2) | sudo apt-get remove PACKAGENAME |
패키지 완전 삭제 2) | sudo apt-get --purge remove PACKAGENAME |
패키지 자동 삭제 2) | sudo apt-get autoremove |
패키지 검색 | apt-cache search PACKAGENAME |
패키지 정보 | apt-cache show PACKAGENAME |
패키지 단어 검색 | apt-cache search REGEX |
특정 파일을 포함한 패키지 검색 | apt-file find FILENAME 1) |
패키지 소스코드 다운로드 | sudo apt-get source PACKAGENAME |
패키지 소스코드 빌드 | sudo apt-get build-dep PACKAGENAME |
apt-get install apt-file
명령을 사용해 설치하자. 설치한 후에는 apt-file update
명령을 사용해 데이터베이스를 받아야 한다. apt-file 은 데이터베이스를 모두 찾기 때문에 조금 느리다. 이런 경우에는 dpkg -S FILEPATH
를 사용해보자.pi@raspberrypi:~ $ vcgencmd commands commands="vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, version, commands, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbiter, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, file, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get" pi@raspberrypi:~ $ vcgencmd measure_temp temp=38.5'C pi@raspberrypi:~ $ for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do \ echo -e "$src:\t$(vcgencmd measure_clock $src)" ; \ done arm: frequency(45)=900094000 core: frequency(1)=250000000 h264: frequency(28)=250000000 isp: frequency(42)=250000000 v3d: frequency(43)=250000000 uart: frequency(22)=3000000 pwm: frequency(25)=0 emmc: frequency(47)=250000000 pixel: frequency(29)=148500000 vec: frequency(10)=0 hdmi: frequency(9)=163683000 dpi: frequency(4)=0 pi@raspberrypi:~ $ for id in core sdram_c sdram_i sdram_p ; do \ echo -e "$id:\t$(vcgencmd measure_volts $id)" ; \ done core: volt=1.3125V sdram_c: volt=1.2000V 3) sdram_i: volt=1.2000V 3) sdram_p: volt=1.2250V 3) pi@raspberrypi:~ $ for codec in H263 H264 MPG2 WVC1 MPG4 MJPG VP6 VP8 THEO VORB; do \ echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; \ done H263: H263=enabled H264: H264=enabled MPG2: MPG2=disabled WVC1: WVC1=disabled MPG4: MPG4=enabled MJPG: MJPG=enabled VP6: VP6=enabled 1) VP8: VP8=enabled 1) THEO: THEO=disabled 2) VORB: VORB=enabled 1) pi@raspberrypi:~ $ vcgencmd version May 13 2016 15:49:49 Copyright (c) 2012 Broadcom version 280c320a06a8ee014c9ea8df8c1350daa2c50d25 (clean) (release) pi@raspberrypi:~ $ for getmem in arm gpu ; do \ echo -e "$getmem:\t$(vcgencmd get_mem $getmem)" ; \ done arm: arm=944M gpu: gpu=64M1) start_x.elf, fixup_x.dat 를 로드했을때 활성화된다. 윈디하나의 솔라나라: Raspberry Pi Raspbian - 부트 시퀀스를 읽어보자.
# CPU 정보
pi@raspberrypi:~ $ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
...
Hardware : BCM2709
Revision : a21041 1)
Serial : 0000000000000000
1) 보드 리비전 정보다. 라즈베리 파이 2 모델 B의 경우, a01041, a21041, a22042 이 있다. a01041 은 영국 Sony 가, a21041 및 a22042 의 경우 중국 Embest가 제조했다고 한다. 제조사 정보는
gpio -v
명령을 통해서도 알 수 있다. RPi HardwareHistory에 더 많은 정보를 알 수 있다.# 메모리 정보 pi@raspberrypi:~ $ cat /proc/meminfo pi@raspberrypi:~ $ free -o -h total used free shared buffers cached Mem: 925M 231M 693M 6.7M 14M 120M Swap: 99M 0B 99M # 온도 1) pi@raspberrypi:~ $ cat /sys/class/thermal/thermal_zone?/temp # CPU 동작 속도 2) pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu?/cpufreq/scaling_cur_freq pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu?/cpufreq/scaling_min_freq pi@raspberrypi:~ $ cat /sys/devices/system/cpu/cpu?/cpufreq/scaling_max_freq1) 단위는 1/1000 ℃ 이다.
pi@raspberrypi:~ $ sudo apt-get install sysstat -y pi@raspberrypi:~ $ sudo vi /etc/default/sysstat ENABLED="true" pi@raspberrypi:~ $ sudo service sysstat restart설치 이후에는 각종 정보가 sa1 에 의해 저장된다. 30분 정도 후에
sar -A
명령을 실행하면 정보가 표시될 것이다. sar(1) 에 대한 자세한 정보는 윈디하나의 솔라나라: SAR를 읽어보자. 항목에 대한 설명은 MAN 페이지를 읽어보자.
pi@raspberrypi:~ $ sar -A Linux 4.4.50-v7+ (raspberrypi) 2017년 XX월 XX일 _armv7l_ (4 CPU) 11시 58분 07초 LINUX RESTART (4 CPU) CPU %usr %nice %sys %iowait %steal %irq %soft %guest %gnice %idle all 0.04 0.00 0.03 0.00 0.00 0.00 0.00 0.00 0.00 99.92 0 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 99.97 1 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 99.99 2 0.00 0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.00 99.98 3 0.16 0.00 0.08 0.01 0.00 0.00 0.00 0.00 0.00 99.75 CPU %usr %nice %sys %iowait %steal %irq %soft %guest %gnice %idle all 2.27 0.00 1.90 0.69 0.00 0.00 0.00 0.00 0.00 95.14 0 2.94 0.00 1.47 0.94 0.00 0.00 0.01 0.00 0.00 94.65 1 2.03 0.00 1.91 0.39 0.00 0.00 0.00 0.00 0.00 95.67 2 0.91 0.00 3.33 1.06 0.00 0.00 0.00 0.00 0.00 94.70 3 3.21 0.00 0.87 0.38 0.00 0.00 0.00 0.00 0.00 95.54 Average: CPU %usr %nice %sys %iowait %steal %irq %soft %guest %gnice %idle Average: all 1.16 0.00 0.96 0.35 0.00 0.00 0.00 0.00 0.00 97.53 Average: 0 1.47 0.00 0.74 0.47 0.00 0.00 0.00 0.00 0.00 97.31 Average: 1 1.01 0.00 0.96 0.19 0.00 0.00 0.00 0.00 0.00 97.83 Average: 2 0.46 0.00 1.67 0.53 0.00 0.00 0.00 0.00 0.00 97.35 Average: 3 1.68 0.00 0.48 0.20 0.00 0.00 0.00 0.00 0.00 97.65 Average: proc/s cswch/s Average: 0.02 31.34 Average: 1.27 133.57 Average: 0.65 82.42 Average: pswpin/s pswpout/s Average: 0.00 0.00 Average: 0.00 0.00 Average: 0.00 0.00 Average: pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff Average: 0.47 0.29 3.32 0.00 3.70 0.00 0.00 0.00 0.00 Average: 1.82 94.80 4002.37 0.01 3902.76 0.00 0.00 0.00 0.00 Average: 1.15 47.51 2001.36 0.00 1951.79 0.00 0.00 0.00 0.00 Average: tps rtps wtps bread/s bwrtn/s Average: 0.16 0.12 0.04 0.95 0.57 Average: 1.13 0.12 1.01 3.64 189.82 Average: 0.65 0.12 0.53 2.29 95.12 Average: frmpg/s bufpg/s campg/s Average: 0.00 0.13 0.00 Average: -2.44 0.38 0.50 Average: -1.22 0.25 0.25 Average: kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty Average: 537528 345244 39.11 25012 211428 776820 78.85 199340 106292 0 Average: 531688 351084 39.77 25916 212632 784184 79.60 203672 106288 0 Average: 534608 348164 39.44 25464 212030 780502 79.23 201506 106290 0 Average: kbswpfree kbswpused %swpused kbswpcad %swpcad Average: 102396 0 0.00 0 0.00 Average: 102396 0 0.00 0 0.00 Average: 102396 0 0.00 0 0.00 Average: kbhugfree kbhugused %hugused Average: 0 0 0.00 Average: 0 0 0.00 Average: 0 0 0.00 Average: dentunusd file-nr inode-nr pty-nr Average: 12910 2432 17501 1 Average: 13268 2496 17614 2 Average: 13089 2464 17558 2 Average: runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked Average: 0 201 0.01 0.02 0.06 0 Average: 0 206 0.49 0.30 0.15 0 Average: 0 204 0.25 0.16 0.10 0 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev179-0 0.16 0.95 0.57 9.31 0.00 3.98 1.63 0.03 Average: dev179-0 1.13 3.64 189.82 171.24 0.45 394.74 25.75 2.91 Average: dev179-0 0.65 2.29 95.12 150.76 0.22 345.33 22.70 1.47 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.14 0.08 0.01 0.01 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.89 1.02 0.14 0.18 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.52 0.55 0.07 0.09 0.00 0.00 0.00 0.00 Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: call/s retrans/s read/s write/s access/s getatt/s Average: 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 Average: scall/s badcall/s packet/s udp/s tcp/s hit/s miss/s sread/s swrite/s saccess/s sgetatt/s Average: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: totsck tcpsck udpsck rawsck ip-frag tcp-tw Average: 303 2 6 0 0 0 Average: 309 3 6 0 0 0 Average: 306 2 6 0 0 0
pi@raspberrypi:~ $ sudo apt-get install iftop pi@raspberrypi:~ $ sudo iftop
최신버전의 라즈비안을 사용하면 HWRNG가 /dev/hwrng
경로에 설치되었을 것이다. 하드웨어 난수 발생기는 TRNG라고도 불리는데, 난수 발생 성능이 좋고, 디지털 이외의 정보를 사용해 난수를 발생하기 때문에 보안성이 더 좋다. 디지털 이외의 정보란 예를 들면, 광전 효과, 온도, 양자 효과, 이온화 효과, 공전 현상, 클록 편류 등에 의한 노이즈 정보를 말한다.
최신 라즈비안이 아닌 이전 버전을 사용하고 있다면, config_hw_random_bcm2835=y
을 /boot/config.txt
에 넣고 재시작하면 /dev/hwrng
이 보일 것이다.
HWRNG 를 사용하려면, 어플리케이션에서 /dev/hwrng
를 사용하도록 프로그래밍 하면 되지만, 어플리케이션 개발자들은 표준 장치인 /dev/random
를 사용하도록 프로그래밍하는 경우가 많기 때문에, /dev/random
에서 엔트로피(Entropy)를 더 많이 수집할 수 있도록 하기 위해 난수 발생기 도구를 설치하자.
pi@raspberrypi:~ $ sudo apt-get install rng-tools pi@raspberrypi:~ $ sudo systemctl status -l rng-tools ... 5월 xx 00:00:00 raspberrypi rngd[32011]: rngd 2-unofficial-mt.14 starting up... 5월 xx 00:00:00 raspberrypi rng-tools[32009]: Starting Hardware RNG entropy gatherer daemon: rngd. 5월 xx 00:00:00 raspberrypi rngd[32011]: entropy feed to the kernel ready pi@raspberrypi:~ $ cat /proc/sys/kernel/random/entropy_avail 1958rngtest(1)을 사용해 난수 발생기를 테스트해보자.
pi@raspberrypi:~ $ sudo cat /dev/hwrng | rngtest -c 1000 rngtest 2-unofficial-mt.14 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 1000 rngtest: FIPS 140-2 failures: 0 rngtest: FIPS 140-2(2001-10-10) Monobit: 0 rngtest: FIPS 140-2(2001-10-10) Poker: 0 rngtest: FIPS 140-2(2001-10-10) Runs: 0 rngtest: FIPS 140-2(2001-10-10) Long run: 0 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=15.134; avg=806.646; max=4882812.500)Kibits/s rngtest: FIPS tests speed: (min=1.588; avg=9.660; max=9.955)Mibits/s rngtest: Program run time: 27580615 microseconds솔라나라에서 배포하는
random.c
를 사용해서도 테스트해보자.
pi@raspberrypi:~ $ wget -O random.c http://www.solanara.net/contents/includes/random.c pi@raspberrypi:~ $ gcc -o random random.c pi@raspberrypi:~ $ ./random /dev/random 100000 counts. 10259929602ns /dev/urandom 100000 counts. 721166035ns /dev/hwrng 100000 counts. 45525179ns
라즈베리 파이에 리셋 버튼을 달 수 있는 헤더가 있다. P6 헤더 또는 RUN 헤더로 표시되어있다. 위치는 보드마다 다른데, 라즈베리 파이 2는 라즈베리 파이 로고 왼쪽 위에, 라즈베리 파이 3는 GPIO 헤더와 USB 단자 사이에 있다. 이 헤더에 핀을 끼우고 버튼을 연결해 버튼을 누르면 라즈베리 파이가 RUN 모드로 실행되며, 결과적으로 리셋되는 효과를 가진다.
라즈베리파이 콘솔에서 작업하다 보면 오른쪽 윗부분에 아이콘이 뜨는 경우를 흔히 볼 수 있다. 경고 아이콘으로 다음과 같은 의미를 가진다. Under-voltage warnings를 읽어보자.
전압 경고는 쉽게 발생하기 때문에, 특별한 이상만 없다면 어느정도는 무시해도 된다고 생각한다.
/boot/config.txt
에 avoid_warnings
키를 사용해 아이콘을 끄거나 켤 수 있다. avoid_warnings=1
은 모든 경고를 끄고, avoid_warnings=2
은 경고가 발생해도 터보 모드를 그대로 유지한다.
stress-ng(1)을 사용해서 스트레스를 주면 아이콘을 띄워볼 수 있다.
pi@raspberrypi:~ $ sudo apt-get install stress stress-ng pi@raspberrypi:~ $ stress-ng --cpu 4 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
라즈베리파이 전원 LED는 GPIO 35와 연결되어있기 때문에 이 값을 읽으면 현재 저전압 상태인지 알 수 있다.
pi@raspberrypi:~ $ while true; do gpio -g read 35; done
라즈베리파이의 SD 어댑터의 I/O 클럭는 50MHz 이며, 한 클럭당 4비트를 전송하기 때문에, SD 어댑터의 최대 전송속도는 25MB/s 이다. 오버헤드를 감안하면 22MB/s 근처가 한계다.
pi@raspberrypi:~ $ sudo cat /sys/kernel/debug/mmc0/ios clock: 50000000 Hz actual clock: 50000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 2 (sd high-speed) signal voltage: 0 (3.30 V) driver type: 0 (driver type B)
참고로 25MB/s
라는 속도는 SD카드에서 High Speed
를 지원하는 버스 인터페이스의 최대 속도다. (쉽게 말하면 라즈베리파이는 SDXC 카드에 지원되는 UHS버스를 지원하지 않는다는 의미다)
SD카드를 오버클럭하면 속도가 향상되는 경우가 있다. 아래와 같이 할 수 있다.
pi@raspberrypi:~ $ sudo vi /boot/config.txt dtparam=sd_overclock=100 pi@raspberrypi:~ $ sudo reboot
재시작하면 아래와 같이 높은 클럭을 가지는 것을 알 수 있다. 높인채로 사용하기 전에 반드시 장시간 안정성 테스트를 진행하자. (큰 파일을 쓰고 읽고 지우고를 수회 반복) 안정적이어야 사용 가능하다. 당연히 모든 SD카드에 대해 오버클럭 설정이 안정적인건 아니다.
pi@raspberrypi:~ $ sudo cat /sys/kernel/debug/mmc0/ios | grep clock clock: 50000000 Hz actual clock: 83333333 Hz
라즈베리 파이 2 모델 B를 사용해보면서 처음 느낀게 바로 생각보다 빠르다는 점이다. 서버로 운용하기에는 메모리 크기와 이더넷 속도가 문제가 될것 같긴 하지만, 홈 서버 정도라면 성능상 문제 없이 사용가능할 것으로 생각한다. RPi Performance를 한번 읽어보자.
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2024 Jo HoSeok. All rights reserved. |