5. 라즈베리파이2 - 운영체제 설치 및 파일서버 만들기

2015. 5. 1. 02:07컴퓨터 IT 오디오/라즈베리파이 활용하기

라즈베리파이로 간단한 파일서버[file server] 만들어 봤습니다.

저도 전공이 컴퓨터쪽이긴 하지만  전문가라 할 수준도 아니고 리눅스 쪽은 일반인보다 아주 약간 나은 지식을 가지고 있는 수준이라 여기저기 웹서핑해서 습득한 지식으로 아는 수준에서만 설명해 봅니다.

정리되지 않은 것은 차츰 다듬을 것이고 오류가 있는 것도 조금씩 수정할 것입니다.

 

참고로 따옴표(" " ) 친 것은 프람프트 상에서 실행하는 명령어입니다. 설명은 Raspbian 기준으로 설명을 합니다.

 

 

기본 설명 및 참고사항

 

아래 설명들은 그냥 훅 읽어보셔도 좋고 뒤에서 서버 설치와 보안 설정 등을 본격적으로 설명하다가 모르는 용어나 명령어가 나오면 다시 찾아보셔도 됩니다. 저도 공부하는 마음으로 조금씩 정리한 것인데 초심자들에게 도움이 될 겁니다.

<기본 용어 설명>

- SSH(Secure Shell) : 보안상태로 원격의 기기를 컨트롤하기위한 암호화 프로토콜 쯤...   Putty같은 SSH 클라이언트가 있다.

- sudo (=super do =  substitute user do) : OS가 사용자로 하여금 슈퍼유저의 보안권한으로 프로그램을 실행할 수 있게 해주는 프로그램. super user일 뿐 administrator의 권한은 아님.

- nano : 리눅스에서 사용하는 편집기.. 예전 vi 에디터쯤 됨.

- Apt. : 유닉스에서 "Add and Remove Programs"..

- 페어링(Pairing) : 기기와 기기 연결..  예를 들면 블루투스 동글과 블루투스 키보드를 페어링..

- Raspbian : Debian을 기본으로하는 라즈베리파이 운영체제. (물론 유닉스, 리눅스가 그 뿌리임)

- MPD : music player daemon  (volumio 가 유명. rasbian같은 서버에 깔아 씀)

- MPC : a client for MPD. Program for controlling Music Player Daemon.

(데몬 : 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.

데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 0이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 출처 : 위키피디아)

 

<유용한 리눅스,라즈비안 명령어>

: 명령어 맨 앞에 sudo 가 붙은 건 무시하셔도 됩니다.. 앞에서 설명했듯이 사용자 권한상으로 붙고안붙고의 차이인데 정리하다보니 sudo를 미쳐 빼지 못한 것이 있습니다..  

- "startx" : 리눅스 그래픽 윈도우즈화면 진입.

-  "ll" : 디렉토리 및 파일 표시.

- "ls -lrt" : 디렉토리내 모든 파일 리스트.

- "df -h"   : show all mounts

- "dpkg –get-selections" : show all installed packages

- "dpkg –get-selections | grep <package name>" :  find a specific package:

- "sudo apt-get dist-upgrade" : check for distro upgrades for your RPi

- "sudo apt-get –purge remove <app name> && sudo apt-get autoremove –purge" : 응용프로그램 제거

- "sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoremove –purge" : update your system software and remove orphans

- "sudo -i " : super user로 스위치.. sudo를 타이핑 할 필요가 없어짐.

- "sudo dpkg-reconfigure tzdata" : synchronize the date and time of your RPi

- "sudo ifconfig" : 파이의 ip어드레스

- "sudo lsmod" : list all loaded drivers

- "sudo lsusb" : 연결된 usb 장치 리스트

- "sudo nano /boot/config.txt" : 파이의 부트 설정파일을 편집

- "sudo raspi-config" : 파이의 시스템 설정을 변경

- "sudo reboot" : 파이 재시작

- "sudo rpi-update" : 파이의 펌웨어 업데이(git가 인스톨 되어 있어야 함)

- "top" : list the most active system processes (quit by pressing ‘q’)

- "sudo shutdown –h" 파이 셧타운.. halt~.. 꺼도 됨.

- "sudo shutdown –h 11:15" : timed 셧다운... 11:15 처럼 셧다운 할 시간을 적거나, 10 이라고 적으면 10분후 셧다운.

- "sudo shutdown –r now : 즉시 재시작

- "sudo passwd root" : root 계정의 암호 변경

- "sudo passwd username" : 기본 계정의 암호 변경

- "sudo nano /etc/sudoers" : 기본 계정에 sudo 권한 추가

(맨마지막 줄에 추가..  pi ALL=(ALL) NOPASSWD: ALL... 을 그대로 카피&패이스트해서... pi 이름만 바꿀것. )

- "wget " : 외부 웹서버로부터 파일을 다운받는 명령어. 기본적으로 url과 몇 가지 옵션이 들어감.

- "rm" 또는 "rmdir" : 파일 또는 디렉토리 삭제

- "chroot" : 특정 디렉토리를 최상위 디렉토리로 보이게 하는 명령어

 

아래는 라즈베리파이 관련 하드웨어 정보확인 명령어.. (아마도 Raspbian에서만(?) 사용되는 명령어인 듯.. )

-  "cat /proc/hardwarename"  : 하드웨어 정보를 보여준다.

ex) "cat /proc/cpuinfo"  : cpu정보 ..

"cat /proc/meminfo"  : 메모리 정보

"cat /proc/partitions"  : 파티션 정보 (sd카드나 hdd  등의)

"cat /proc/version"  : 파이버전 정보  (또는 "/opt/vc/bin/vcgencmd version" )

- "cat /sys/class/net/eht0/address" : 맥 어드레스 얻기

- "vcgencmd systemname" : 기타 시스템 정보

ex) "vcgencmd measure_temp : cpu 온도

- cpu 클럭주파수 정보 : 오버클럭일 경우 유용

"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"
"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"
: 결과는 kHz 임.

- “vcgencmd measure_clock CLOCKNAME” : 클럭주파수 확인  (h264, isp, v3d, uart, pwm, emmc, pixel, vec, hdmi, dpi, arm)

: 결과는 Hz.

쉘스크립트의 경우(shell script.. 도스에서의 배치파일이랑 비슷하다고 보면 됨)

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

 

- “vcgencmd measure_volts VOLTNAME”  : 전압확인 (core, sdram_c, sdram_i, sdram_p)

쉘스크립트의 경우

for id in core sdram_c sdram_i sdram_p ; do \
echo -e "$id:\t$(vcgencmd measure_volts $id)" ; \
done

-  “vcgencmd codec_enabled CODECNAME”  : 사용중인 코덱확인 ( H264, MPG2, WVC1, MPG4, MJPG, WMV9)

쉘 스크립의 경우

for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do \
echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; \
done

 

- "/opt/vc/bin/vcgencmd get_config arm_freq"   : cpu 클럭 얻기

 

<Shell Script 만들기>

- "sudo mkdir /home/pi/Code" : 디렉토리 생성

- "sudo nano /home/pi/Code/updatePI.sh" : 나노(nano)를 가지고 쉘스크립트 생성

예) 쉘스크립트 내용

#!/bin/bash
date
 echo UPDATING SYSTEM SOFTWARE – UPDATE
sudo apt-get update
 echo UPDATING SYSTEM SOFTWARE – UPGRADE
sudo apt-get upgrade
 echo UPDATING SYSTEM SOFTWARE – DISTRIBUTION
sudo apt-get dist-upgrade
 echo REMOVING APPLICATION ORPHANS
sudo apt-get autoremove –purge
 echo UPDATING FIRMWARE
sudo rpi-update

: 라즈베리파이를 업데이트한다.

- "sudo chmod +x /home/pi/Code/updatePI.sh" : 쉘스크립트를 실행가능하게 모드 변경

- "sudo /home/pi/Code/updatePI.sh" : 쉘스크립트 실행

- "sudo ./updatePI.sh" : 쉘스크립트 실행(현제 디렉토리에 있을때)

 

 

 

라즈베리파이2 운영체제 설치

 

운영체제 설치는 여러 블로그 등에서 설명하고 있으므로 간단히 설명합니다.

 

1. 라즈베리파이 홈페이지에서 운영체제를 다운받는다. (운영체제는 여럿 있는데 일부 제외하고는 Linux 기반입니다. )

https://www.raspberrypi.org/downloads/

 

2. 대표적인 라즈베리파이 운영체제인 라즈비안을 설치하는 경우에~

위 홈페이지에서 NOOBS (또는 lite버전)이나 Raspbian 둘 중 하나를 받으면 됨.

NOOBS는 압축내용을 그냥 sd카드에 복사하고, Raspbian 바로 설치할 경우에는 Win32 Disk Imager 등을 사용한다.

- Win32 Disk Imager 다운로드

http://sourceforge.net/projects/win32diskimager/?source=typ_redirect

: 설치후 다운받은 라즈비안 이미지파일을 읽어 들인후 Write 해주면 됨. (자세한 설명 생략)

 

3. 라즈베리파이의 SD카드에 넣고 전원 넣어주면 부팅후 $까지 오면 일단 라즈비안은 제대로 깔린 것임.

 

 

라즈베리파이 초기설정

 

간단히 기본 설정하는 법 설명해 봅니다.

 

1. "sudo raspi-config"    : 부팅후 GUI(starx)가 자동 실행되는 버전인 경우 터미널에서 "sudo rasp-config"로 들어갈 수 있음..

1) Change the Pi Password : 비밀번호 변경

2) Boot to Desktop : disable로 변경. 성능 등 기타 이유로..

3) locale setting : 위치설정

4) hostname 설정(advanced-> hostname 에서) : pi 자체의 이름

5) Memory Split (advance-> memory split 에서)  : gpu와 cpu의 메모리 공유. gpu 사용하지 않으므로 그냥 놔둬도 된다.

6) ensure ssh (advanced -> ssh) : enable로 설정. ssh(secure shell)은 원격지에서 pi에 접근할 때 쓰는 암호방식 쯤.

7) "sudo reboot" : 저장후 재부팅

 

2. login user 생성

: 기본적으로 pi란 이름의 계정이 있는데 이건 왠만하면 지우고 새로 만든다.

- root로 로긴할 수 있다는 것은 강력한 힘이지만 실수로 서버를 망가뜨릴 수 있다는 말이기도 하다. 따라서 자신은 물론 다른 사람도 user를 생성해서 제한된 권한만 사용하는게 좋다.

1) "groups"

: 아래와 비슷한 메시지가 뜹니다.

pi adm dialout cdrom sudo audio video plugdev games users netdev input

 

2) "sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input USERNAME"

: USERNAME 부분에 생성할 사용자 ID를 적어넣으면 된다.

 

<참고>

"sudo su"  : root로~

"adduser USERNAME" : 유저 생성

"usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,indiecity USERNAME"  : pi와 같은 권한의 계정 생성

"sudo visudo":  user를 super doer 리스트에 등록하기 위해.

마지막에 USERNAME ALL=(ALL) NOPASSWD: ALL 을 삽입하면 패쓰워드 안 물어봄.. 보안에는 않좋겠죠~

 

 

3) "sudo passwd USERNAME"

: 사용자 패스워드를 넣는다

 

4) sudo shutdown -h now

: 파이 재시작~

 

5) 전원을 끄고, 이제 네트웍을 연결한 후 전원을 다시 넣으면 프람프트와 함께 로그인 화면이 뜬다. 암호도 당연히 물어봄.

 

6) root 계정 패쓰워드 설정 및 로그인

- "sudo passwd root" : root 계정 패쓰워드 설정

- "su - root" : root로 로그인

 

3. "sudo deluser --remove-all-files pi"

: 'pi' 유저를 제거합니다. 기본적으로 pi 라는 이름의 id가 들어가 있으므로 이 놈을 제거한다. 보안에도 조금이라도 유리함.

위 명령어 라인을 실행후 done이 되면 pi는 제거된 것임.

(지우는데 시간이 약간 걸릴 수 있음... Looking for~ 메시지가 나오면서 대기..)

 

4. OS와 응용프로그램 업데이트

: 우선 root계정으로 로그인할 것. 그래야 제대로 업데이트됨.

1) "sudo apt-get update"  

2) "sudo apt-get upgrade" 

 

5. 내부 IP 주소 고정하기

: 파이 또는 라우터(공유기)를 재시작 할때마다 ip주소가 바뀔때 발생할 수 있는 네트워크 문제를 해소하기 위해 고정ip주소를 쓴다.

라우터 자체에서 고정ip를 할당하는게 최선의 방법이다.

1) 파이의 Mac Address를 찾아낸다.

"ifconfig"

2) 라우터에서 그 어드레스를 가진 장치가 항상 고정 IP를 갖도록 할당한다.

 

6. USB 장치 세팅

: 이 설정은 파이가 SD카드를 이용하므로 USB장치 세팅이 꼭 필요한 것은 아니나 추가적으로 USB 저장장치를 부착할 경우에 필요하다.

OS는 SD카드에, 기타 자료들은 USB 저장장치에 두는 방식이다. 저용량이라면 USB 플래시 드라이브를, 고용량이라면 USB HDD를 사용할 수 있으나 이 경우에 자제 전원을 가진 지원하지 않으면 파이 자체 전원이 부족할 수 있다. 충분한 전원을 제공하는 USB 허브 등이 따로 필요할 수 있다.

1) 장치 부착후 :

"sudo fdisk -1"   장치 리스트를 볼 수 있다.

/dev/mmcblko , /dev/sda1 등...

2) USB 장치를 포맷한다. 파이 시스템에 맞게 새로 포맷을 해준다.

"sudo mkfs.ext4 /dev/sda1"   :  자신의 USB 장치에 따라 약간 다르게 옵션을 줄 것.

3) 마운트 하기

"sudo mkdir /dirname"  : 마운트 포인트 생성. dirname에 원하는 드렉토리명을 쓴다.

"sudo mount /dev/sda1 /dirname"  : 마운트 포인트에 드라이브를 실제로 마운트한다. 이제 해당 드라이브를 root 유저가 이용할 수 있다.

"sudo chgrp -R users /dirname" 억세스 허가 설정)... users 그룹에 허가.

"sudo chgrp -R g+w /dirname"  쓰기 허가 설정.

"sudo nano /etc/fstab"    자동마운트 기능.   바로 위 설정까지만 하면 파이 부팅후 위의 마운트 과정이 초기화되기 때문에 부팅후 자동으로 마운트되는 설정을 해 주어야 한다.

"/dev/sda1 [tab] /websites [tab] ext4 [tab] defaults [tab] 0 [tab] 2 "    [tab]은 탭 키를 누를 것. Ctrl+X를 누른후 Y 를 눌러 저장.

 

 

 

파일서버 구축

 


 : 각 운영체제마다 파일 시스템이 다르기 때문에 CIFS(Common Internet File System) 프로토콜이 필요. 삼바(Samba)가 라즈베리파이를 CIFS 파일 서버로 작동할 수 있다. 윈도우즈 PC에서 라즈베리파이 폴더로 파일을 복사,삭제, 읽고 쓰기 작업등을 할 수 있다.

- 우선 root 계정으로 로그인후, "sudo apt-get update"  &  "sudo apt-get upgrade" 실행. 

- 삼바(Server Message Block (SMB))를 깐다. : 오랜 방법이고 라즈베리파이에서 제일 간단한 방법이라고 합니다.

"sudo apt-get install samba samba-common-bin"

 

<삼바가 제대로 설치, 실행이 되지 않을 때>

"failed to fetch~" 에러가 나오면 samba가 제대로 깔린게 아니고 다음 진행도 않될 때 다음과 같이 해보시길...

다음 방법은 해외사이트에서 Ubuntu(리눅스 일종) 사용자가 해결한 방법인데, 라즈비안과는 친족관계 운영체제이다보니 따라하다보니 문제가 해결되더군요..

 

1. 인터넷이 제대로 접속되어 있는지 확인 (당연히 확인하셨겠죠.. 혹시 모르니 "ping google.com" 볼 것)

2. 다음 방법은 제가 해봤던 방법을 순서대로 해본것이고 결국 성공했습니다..

: 편의상 root 계정으로 로긴해주시고.. 우선 /etc/apt/sources.list 는 아래와 같이 변경했습니다.. (이게 성공과 관련이 있는지는 모르지만 혹시 모르니 바꿔 보시길)

"nano /etc/apt/sources.list"

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
# deb-src http://mirror.ox.ac.uk/sites/archive.raspbian.org/archive/raspbian/ wheezy main contrib non-free rpi
#deb http://archive.raspbian.org/raspbian wheezy main contrib non-free
#deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free
deb http://distribution-us.hexxeh.net/raspbian/archive/raspbian/ wheezy main contrib non-free rpi

 

-> #은 주석입니다.. 아시는 분은 아시겠지만 리눅스가 C언어로 만들어져서 주석은 #이고, #가 붙은 라인은 실행과 관련없습니다.

 

그다음.. 아래 부분은 제가 순서대로 시행착오를 겪었던 부분이니 따라해 보시기 바랍니다.. 않될수도 있으나 될수도 있겠죠? 될 겁니다..

 

1)"nano /etc/resolv.conf"

nameserver 8.8.8.8
nameserver 8.8.4.4

-> nameserver 부분을 위와같이 추가했습니다. 원래 있던건 지우지 말구요..

 

"apt-get update"  그리고 "apt-get install samba samba-common-bin"

위 두 실행문은 변경후 항상 해주신다고 보면 됩니다.

 

실패하면.. 2)번

 

2) "sudo rm -f /var/lib/apt/lists/*"
"sudo rm -f /var/lib/apt/lists/partial/*"
"sudo apt-get update"

위 세 문장은 설치한 응용프로그램을 지우고 다시 설치하는 과정입니다.

 

다시 "apt-get install samba samba-common-bin"

실패하면 위에서 -f 옵션대신 -r 옵션을 쓸 것.. partial 디렉토리도 자체도 지우고 (rm 명령) 해 볼 것..

실패하면 3)번 (아마 메시지에 약간의 변화가 있을 겁니다)


3) 아래와 같은 메시지가 뜨면 해결책에 가까워 지는 겁니다.
 samba : Depends: samba-common (= 2:3.6.6-3ubuntu4) but 2:3.6.6-3ubuntu5 is to be installed
         Depends: libwbclient0 (= 2:3.6.6-3ubuntu4) but 2:3.6.6-3ubuntu5 is to be installed
         Recommends: tdb-tools but it is not going to be installed

 

아래와 같이 타이핑 해봅니다.

"sudo apt-get install --fix-broken && sudo apt-get autoremove  && sudo apt-get update && sudo apt-get install samba"

실패하면 4번으로.. 점점 해결점에 가까와 옵니다..

 

4)아래와 같이 타이핑 해봅니다.

 "sudo apt-get remove samba-common libwbclient0 tdb-tools"

다시 .. "sudo apt-get update" 와 "apt-get install samba samba-common-bin"

 

제 경우 여기서 성공했습니다.

최종적으로 아래와 같은 메시지가 뜨며 성공~

 

 

 

삼바가 제대로 설치된 후 아래의 과정을 계속 진행하면 됩니다.

- 삼바 트윅 : 삼바 설정을 편집한다. (기본적으로 디렉토리는 읽기전용이다)

"sudo nano /etc/samba/smb.conf"

- 편집해야 할 부분.

a) # security = user  부분에서 # 를 삭제하고 security = user 로 고친다.

b) read only = yes 를 read only = no 로 바꾼다.

c) 저장후 재시작

"service samba restart" 또는 "/etc/init.d/samba reload"

 

d) CIFS(여기선 삼바)가 라즈베리파이 파일에 억세스하기 위해 패쓰워드가 설정되야 함.

"sudo smbpasswd –a piusername" : 삼바 유저 리스트에 파이사용자를 추가하게 된다. 이때 삼바암호를 입력하라는 메시지가 뜨면 입력할 것.

또는 "sudo smbpasswd -a root"

 

e) 윈도우즈에서... 네트워크 드라이브 연결 - \\raspberrypi\useraccout 를 탐색기에서 바로 쳐 넣든가 아래와 같이 네트워크 드라이브를 연결하든가 함.

또는 "\\라즈베리파이의 IP주소" 를 입력해도 됩니다.

 

로그인하고 패쓰워드 입력하면 이제 파이의 파일을 맘대로 억세스 할 수 있습니다.

 

<라즈베리파이 활용>

1. 라즈베리파이2 모델B 스펙 설명 및 개봉 - http://naturis.kr/2056

2. 라즈베리파이2-B에 pcm5122 붙이고 Volumio 작동 - http://naturis.kr/2078

3. 라즈베리파이2 - SD카드 복제(duplicate)하기 - http://naturis.kr/2084

4. 라즈베리파이2 - Putty를 통한 원격 컨트롤 (PC와 스마트폰에서) - http://naturis.kr/2086

5. 라즈베리파이2 - 운영체제 설치 및 파일서버 만들기 - http://naturis.kr/2063

6. 라즈베리파이2 - ftp서버 설치하기(Vsftpd, pure-ftp) - http://naturis.kr/2091