태그 보관물: 포고플러그

Pogoplug를 NAS로 – 라디오 녹음하기

원래는 하드 디스크도 설정하고, FTP도 설치하고 설정하고 하며 차근차근 포스팅을 할 예정이었는데 중간에 쓰다 보니 몇 번이나 한 거 기억해서 쓰기도 힘들고 해서 지금 하고 있는 거 먼저 올린다. 이제부터의 글들은 포고플러그에만 제한되는 내용은 아니다. 대부분의 리눅스에서 쓸 수 있다.
먼저 하드 디스크가 마운트 된 상태라고 가정한다. 녹음 파일은 여기에 저장될 것이다. 이 글은 MMS 프로토콜을 통한 녹음만 해당 된다. 다른 프로토콜은 아래의 구문들을 조금씩 고치거나 다른 프로토콜에 대한 플레이어를 쓰거나 추가적으로 프로그램을 설치해 쓰면 될 것이다.

원래 라디오 녹음에 대해서는 얘기만 듣다가 흥미가 생겨 어제부터 계속 이것저것 해보았다. 처음에는 Mplayer를 사용해 녹음을 해보려 했으나 WAV로 밖에 녹음이 안 돼 용량 때문에 변환 작업이 꼭 필요했다. WAV인 만큼 한 시간이나 두 시간을 녹음하면 용량도 기가바이트 단위가 돼버리고, 한 시간 녹음을 하면 다시 그 이상의 변환 시간이 필요했다. 안 그래도 포고플러그는 여타 다른 NAS에 비해서는 성능이 좋지 않기에 많은 프로세스를 차지하는 프로그램은 지양하는 것이 좋다. 또 종료 시간을 따로 지정하는 옵션이 없어 sleep으로 종료 시간을 지정해야 하는데 sleep을 실행하는 순간 계속 Mplayer도 같이 멈춰버려서 다른 게 없나 찾아 보니 VLC라는 프로그램이 있었다. MP3로 바로 압축해서 저장이 되고, 녹음 종료 시간도 지정해놓을 수 있어서 VLC를 선택했다.
먼저 VLC가 없다면 설치한다.

pacman -S vlc

용량도 좀 있고 파일이 많아 시간이 좀 많이 걸린다. Root 사용자가 아닌 다른 계정으로 모든 작업을 하고 있다면 상관 없지만 만약 Root 사용자로 모든 작업을 한다면, 일단 설치하고 프롬프트에 vlc를 실행시켜 보면 Root 사용자는 보안의 문제로 사용할 수 없다고 하며 종료한다. 일단 Root 사용자로 실행이 되게 수정하자. 설정을 수정하는 게 아니라 프로그램을 수정한다. 여기서는 sed라는 프로그램을 사용한다. 여러 파일들의 특정 열이나 문자를 조건에 맞게 일괄적으로 바꾸는 프로그램이다. 없다면 받아 설치한다.

pacman -S sed

설치하고 아래와 같이 입력한다.

sed -i 's/geteuid/getppid/g' `which vlc`

이러면 수정이 된다. vlc를 다시 입력해 Root 권한에서도 작동이 되는지 확인한다.
이제 몇 가지 밑작업을 한다. 현재 나는 /data에 하드 디스크가 마운트 되어 있고, /data/radio, /data/tmp라는 폴더를 만들고 권한을 모두 777을 줬다. tmp 폴더를 따로 만들어 먼저 이 폴더에서 녹음 파일을 만들고 녹음이 끝나면 radio 폴더로 옮긴다. 이는 녹음 도중에 radio 폴더에 접속했을 때 불완전한 파일을 듣는 걸 방지하기 위함이다.
다음은 적당한 곳에 실행 스크립트 파일을 만든다. 나는 /radio라는 폴더를 만들었다

mkdir /radio

/radio/(라디오 방송국).sh와 같은 방식으로 실행 파일을 만들었다. 실행 파일 하나는 하나의 방송국을 녹음하는 데에 쓰일 것이다.
예로 MBC FM4U의 녹음 스크립트 파일을 만들어 보겠다.

nano /radio/mbc_fm4u.sh

아래의 스크립트를 복사해서 붙여넣는다. VLC에 관한 스크립트를 제외하고는 간단한 구문이라 입맛에 맞게 고치면 된다. VLC 구문의 옵션은 너무 많아서 나도 대충 이렇게 저렇게 붙여서 만들었다. 여기서는 라디오 프로그램 이름, 녹음 시간, 최종 저장 폴더를 변수로 놓았다. ID3 태그도 대한 부분도 있는데 처음에 mimms와 Mplayer 가지고 끙끙댈 때 거기서는 기능을 지원해서 넣어놨는데 VLC에서는 어떻게 적용하는지도 모르겠고 일단 그냥 남겨 놓은 것이다. 필수적인 건 아니니 저 부분은 지워도 된다. 공백 처리를 하려고 하니 이것저것 할 게 생겨서 그냥 언더바(_)로 대체했다.

또한 아래의 라디오 스트리밍 주소는 청주MBC의 라디오 주소로 MBC 라디오 본사에서는 스트리밍 주소를 현재 제공하지 않는다. 지금은 대부분이 공개하지 않고 앱이나 웹의 프로그램으로만 들을 수 있으며, 주소를 그대로 공개하는 건 지방의 MBC들이다. 지방의 MBC는 지방에 있는 사람은 알듯 몇몇 라디오 프로그램은 그 지방의 방송을 송출한다. 인기 프로그램들은 대부분 본사의 라디오 방송을 그대로 보내주니 감안하고 사용하도록 한다. 이도 사정에 따라 계속 없어지거나 주소가 변하니 처음에는 녹음이 됐는데 나중에 안 된다면 주소를 적절히 수정해 사용한다.

#!/bin/bash
RADIO_ADDR="mms://211.181.136.136/livefm"
RADIO_NAME="MBC FM4U"

PROGRAM_NAME=$1
RECORD_MINS=$2
DEST_DIR=$3

REC_DATE=`date +%m%d`
MP3_FILE_NAME=$PROGRAM_NAME"_"$REC_DATE.mp3

ID3_TITLE=$REC_DATE" - "$PROGRAM_NAME
ID3_ARTIST=$RADIO_NAME
ID3_ALBUM=$PROGRAM_NAME
ID3_YEAR=`date +%Y`

cd /data/tmp
cvlc -q "$RADIO_ADDR" ":sout=#transcode{acodec=mp3,ab=128}:std{access=file,mux=dummy,dst="$MP3_FILE_NAME"}" --run-time=$RECORD_MINS vlc://quit

mkdir -p $DEST_DIR
mv $MP3_FILE_NAME $DEST_DIR

다음 만든 스크립트 파일에 실행 권한을 준다.

chmod a+x mbc_fm4u.sh

이제 실행 스크립트에 변수를 넣어 실행하면 녹음이 시작될 것이다. 테스트를 해보자. 다음과 같이 넣어봤다.

/radio/mbc_fm4u.sh Temp 10 /data/radio/mbc_fm4u

Temp라는 라디오 프로그램 이름, 그리고 10초간 녹음을 하고 끝나면 /data/radio/mbc_fm4u 폴더로 파일을 가져다 놓는다. 안 된다면 위의 구문상 오류가 있거나 파일이 이동을 했는데 파일을 실행시켜도 소리가 안 나면 녹음에 문제가 있는 것이다. 오류가 날 여지는 다양하니 처음부터 뭐가 잘못 됐는지 살펴보거나 조금씩 수정하길 바란다.

이제 스크립트만 제대로 짜졌다면 정해진 시간에 녹음을 시작하게 스케줄을 설정하기만 하면 된다. crontab을 이용해보자. crontab은 정해진 시간이나 날짜에 지정한 작업을 수행하는 리눅스 내장 서비스이다. 기본적으로 crontab은 내장된 vi를 사용하기 때문에 이걸 nano로 바꿔서 하는 게 편하다. 시스템 기본 에디터를 nano, 혹은 사용하는 에디터로 바꾼다.

export EDITOR=nano

그런 다음 crontab에 스케줄을 추가한다. 그냥 한 줄 죽 써주고 저장하면 된다. 아래는 위의 스크립트로 만든 예이다.

0 22 * * * /radio/mbc_fm4u.sh Music_City 7320 /data/radio/mbc_fm4u/musiccity

각 항목은 공백으로 구분한다. 맨 앞부터 분, 시, 일, 달, 주, 실행할 스크립트이다. 분과 시는 최소 시작 단위니 꼭 써줘야 하고 * 혹은 ,를 사용해 격일이나 휴일을 두는 둥 조건을 좀 더 다양하게 줄 수 있다. 자세한 것은 cron – ArchWiki를 참조한다.
이 명령을 해석해 보자. MBC FM4U, 성시경의 음악도시를 녹음하는 스크립트다. 매일 매달 매주 22시 0분에 실행하는데 서버 시간과 포고플러그의 시간이 몇 초 정도 차이가 날 수 있다. 구조상 인터넷 라디오가 항상 좀 더 느리다. 많은 차이가 나지는 않으니 여분의 시간 없이 그냥 이렇게 설정했다.

이제 잘 되는지 안 되는지 기다리는 일만 남았다. 그리고 녹음 중에는 포고플러그의 CPU 리소스를 대부분 다 차지하니 그 시간대에는 무리한 명령을 주지 않도록 하자.

Pogoplug를 NAS로 – Samba 설치 및 설정

클라이언트에서 서버의 파일이나 프린터를 사용할 수 있게 하려면 Samba를 설치한다. 대부분이 Windows를 사용하는데 Samba를 사용하면 Windows에서 네트워크 드라이브로 바로 연결해 쓸 수가 있다. 서버 파일의 수정, 삭제 등 FTP보다 더 편하게 쓸 수 있는 장점이 있다. 포고플러그에 USB 어댑터가 있는 프린터를 물려 쓸 수도 있으나 여기서는 파일에 관해서만 다룬다.
일단 Samba를 설치한다.

pacman -S samba

여기서 pacman은 패키지 관리자로 Package Manager의 준말이다. 옵션에 관해서는 pacman – ArchWiki에서 좀 더 자세히 알 수 있다.

cp /etc/samba/smb.conf.default /etc/samba/smb.conf
nano /etc/samba/smb.conf

다음 샘플 설정 파일을 복사한 후 편집기로 연다.

여기서 nano는 텍스트 편집기로 간편하고 쓰기 깔끔하다. 일단 Ctrl + X : 종료, Ctrl + W : 검색, Ctrl + V : Page Down, Ctrl + Y : Page Up 정도만 알면 충분하다. 나머지는 nano의 아래 메뉴를 보면 알 수 있다. 아직도 vi를 더 즐겨 쓰는 사람도 있기는 하다고 한다. 파일이 없으면 옵션에 적은 디렉토리와 파일명으로 새롭게 만든다.

설정은 주석을 잘 읽어보면서 수정한다. 그 중 우선적으로 볼 것은 접속을 혀용할 호스트와 공유 경로, 그리고 작업 그룹이다. 아래의 코드를 참조해 앞의 세미콜론이 있는 부분은 제거해준다.

[global]
	workgroup = MYGROUP
	hosts allow = 192.168.1. 192.168.2 127.
	printcap name = /etc/printcap
	load printers = yes
	printing = bsd
	security = user

[homes]
	browable = no
	writable = yes

[share]
	path = /data/
	writable = yes

Windows에서는 작업 그룹이 같아야 네트워크에 표시가 되니 workgroup은 같은 공유기 아래에 있는 PC의 작업 그룹과 이름이 일치되게 설정한다. 접속을 허용할 호스트인 hosts allow 같은 경우, 192.168.1.192.168.1이 들어가는 모든 IP를 의미한다. 따라서 공유기에 접속된 모든 기기에 접속을 허용한다는 뜻이다. 여러 IP를 허용하고 싶다면 스페이스바로 구별해 추가한다. 위의 192.168.1.은 자신의 공유기의 사설 IP 정책에 맞게 설정한다.

공유 경로인 path는 공유하고 싶은 경로로 열어주면 된다. 아래의 옵션은 적혀있는 설명을 참조해 설정한다. [share]는 예를 적어 놓은 것이다. [name]과 같이 이름을 바꿔주며 추가해 계속해서 다른 공유 설정을 만들 수 있다. 설정 파일의 마지막에 설명과 예가 있으니 참조한다.

프린터는 쓰지 않기로 했으니 다음과 같이 설정한다. 프린터를 쓴다면 ArchWiki에서 프린터 관련 설정을 찾아본다.

[global]
	printcap name = /dev/null
	load printers = no
	printing = bsd

이렇게 설정해놓고 아래에서 [printers] 항목을 찾아 [printers] 항목을 포함해 모두 줄 앞쪽에 세미콜론(;)을 붙여준다.

나머지는 설정 파일의 설명이나 Samba – ArchWiki를 참조해 변경한다.

설정이 끝나면 Samba 서비스를 실행한다.

systemctl start smbd nmbd

여기서는 smbd, nmbd를 동시에 실행 시켰는데 smbd는 Samba 서버 서비스이고, nmbd는 NetBIOS Name Server로 IP에 이름을 부여해주는 서비스인데 Windows에서 네트워크 항목에 바로 Samba 서비스를 검색할 수 있게 해준다.
포고플러그 메모리 사용량을 조금이라도 줄이고 싶다면 nmbd는 실행하지 않아도 된다. 어차피 Windows 탐색기에서 \\192.168.1.*와 같은 형태로도 접속이 가능하다. 나는 nmbd도 같이 실행시켜줬다.

다음에는 접속할 유저를 만든다. 여기서 유저는 새로 만드는 게 아니고 기존 리눅스 사용자에게 권한을 주는 형식이다. sweru는 해당 유저의 계정의 이름으로 한다.

pdbedit -a -u sweru

다음 비밀번호를 지정한다. 리눅스의 비밀번호와는 별개로 Samba의 비밀번호를 만들어주는 과정이다.

smbpasswd sweru

Windows 파일 공유 기능을 쓰는 도중 root 권한을 요구하며 쓰기가 되지 않을 때가 있다. root 계정으로 생성하지 않았을 경우 정말로 폴더에 쓰기 권한이 없는 것이니 퍼미션을 777로 하거나

chmod 777 /data/

폴더의 소유자를 해당 유저로 하면 된다.

chown -R sweru /data/

위 과정 중에 하나라도 진행이 안 되는 부분이 있다면 Samba – ArchWiki를 꼭 참고하고 거기에 우선적으로 따르도록 한다.

Pogoplug를 NAS로 – Arch Linux 설정

이번에는 Arch Linux의 자잘한 설정들을 변경한다. 다른 패키지에 관해서는 따로 글을 쓸 예정이다. 대부분은 현재 Arch Linux Wiki에 있는 내용이며, 내용은 업데이트 됨에 따라 얼마든지 바뀔 수 있으니 아래의 내용이 실행되지 않는다면 해당 위키를 참고하는 것이 좋다.
그리고 리눅스에 익숙한 분은 그냥 보지 않는 게 정신 건강에 더 좋을 수도 있습니다. 여기서는 커맨드 하나까지 모두 적는 것을 목표로 한다.

호스트 이름 변경

대기시에 프롬프트에 [root@alarm ~]라고 표시가 된다. 이는 Arch Linux ARM의 준말이며, 현재 내 포고플러그의 이름이다. 내 이름으로 바꾸자. 나는 Sweru-NAS로 변경했다. 나중에 여기저기 인식될 때 표시되는 이름이고, 패키지를 깔아 순정 서비스를 살렸을 때도 이 이름으로 인식 된다. 변경하지 않아도 상관 없다.

hostnamectl set-hostname Sweru-NAS

일시적으로만 호스트 이름을 변경하고 싶다면 이렇게 사용하자. 이는 리부팅시 원래의 호스트 이름으로 다시 돌아온다.

hostname Sweru-NAS

시간대 설정

타임존의 기본값은 미국으로 되어 있다. 이를 해당하는 타임존으로 고친다.

timedatectl set-timezone Asia/Seoul

서울 시간대 말고 다른 시간대로 고치고 싶다면 밑줄 친 부분을 고쳐주면 된다. 리눅스에서 변경할 수 있는 타임존의 리스트를 보고 싶다면 아래의 명령을 사용한다. 사용할 수 있는 타임존의 리스트를 보여준다.

timedatectl list-timezones

리스트에서 빠져 나오고 싶으면 Ctrl + C를 사용하면 된다. 이 Ctrl + C 같은 경우 대부분의 경우에 빠져 나오는 단축키가 되므로 실행 시켜 놓고 다시 명령 프롬프트로 빠져 나가고 싶을 때 습관적으로 사용하는 것이 좋다. 예를 들어 find와 같이 시간이 많이 걸릴 수 있는 명령을 했을 때 중간에 빠져 나오는 것이 가능하다.

그리고 참고로 E02는 내장된 시계가 없다. 사실 다른 포고플러그 시리즈도 같은 지는 모르겠다. 여하튼 하드웨어 시계가 없어 리부팅 될 때마다 유닉스 타임 0, 즉 1970년 1월 1일로 돌아간다. 따라서 리눅스에서 리부팅 될 때마다 항상 타임 서버에서 시간을 받아 온다.

사용자 계정 만들기

root 계정을 그대로 쓴다면 권한이 정말 말 그대로 다 있는 거라 실수로 날려 먹기가 쉽다. 사용자 계정을 만들어 필요할 때 권한을 주어 쓰는 것이 이런 실수를 줄이는 데에 좋다. 나중에 명령어 몇 개 더 치는 등 조금은 번거로워질 수도 있으니 필요 없다면 그냥 써도 무방하다.

useradd -m -g users sweru

sweru라고 된 부분을 원하는 계정명으로 바꿔서 실행해주자.
사용자를 만든 후, 비밀번호를 지정해준다.

passwd sweru

생성된 사용자의 홈 디렉토리는 /home/sweru와 같은 형식이 된다.

pacman 설정하기

pacman은 패키지 관리자로 Package Manager의 준말이다. Arch Linux를 업데이트 하거나 프로그램을 설치, 업데이트, 삭제하는 관리 프로그램이다. 기본값은 GeoIP를 이용해서 위치 기반으로 다운로드 서버를 정하지만, 우리나라에서는 대부분 중국의 미러 서버가 잡힌다. 그런데 이 중국 서버가 느리고 불안하다는 것이 문제다. 그리 큰 문제는 없을 수 있으나 사용하다 보면 가끔 서버가 너무 느려서 패키지를 받지 못 하는 경우도 많다. 계속 시도하다 보면 언젠가 될 때도 있다만 다른 서버를 지정하는 것을 추천한다. 중국 서버가 아주 원활할 때도 미국의 켈리포니아 미러 서버가 더 빠르다.

nano /etc/pacman.d/mirrorlist

여기서 nano는 텍스트 편집기로 간편하고 쓰기 깔끔하다. 일단 Ctrl + X : 종료, Ctrl + W : 검색, Ctrl + V : Page Down, Ctrl + Y : Page Up 정도만 알면 충분하다. 나머지는 nano의 아래 메뉴를 보면 알 수 있다. 아직도 vi를 더 즐겨 쓰는 사람도 있기는 하다고 한다. 파일이 없으면 옵션에 적은 디렉토리와 파일명으로 새롭게 만든다.

설정 파일이 보기 쉽게 되어 있지만 좀 더 설명한다. 먼저 설정 파일 상단에 기본값인 Server = http://mirror.archlinuxarm.org/arm/$repo 앞에 #를 추가해 설정을 죽인 후 아래에 있는 California의 미러 서버를 찾아 앞의 #를 삭제해 살린다.

## California
Server = http://ca.us.mirror.archlinuxarm.org/arm/$repo

pacman을 실행할 때마다 이 설정 파일을 읽으니 리부팅 할 필요는 없다.