와이프가 약속이 있어 오랜만에 아들과 단 둘이 저녁식사를 하게 되었습니다. 아들이 아빠한테 김치볶음밥을 만들어 먹자며, 자기가 할 수 있다고 자신만만하게 말하는군요. 초등학교 4학년 아들이 김치볶음밥을 혼자 다 만들기는 아직 버거울 것같아 아빠와 함께 만들기로 했습니다.

   아빠는 버터와 식용유를 프라이팬에 두르고 김치를 썰어 볶고, 아들은 런천미트 햄을 깍둑썰어 프라이팬에 보탰습니다. 얼추 김치가 익어갈때 쯤 새로 지은 밥을 얹어서 비비고 모짜렐라 치즈가루를 뿌린 뒤, 약 3분 뒤에 불을 끄고 아들이 조미김을 잘게 잘라 뿌렸습니다.

   서로 '맛있네' '정말 맛있다'를 반복하며 둘이 앉아 다 먹었네요. 평소에 세 식구가 먹던 양이었는데... 맛있게 먹었으니 됐지요.

Posted by truerain
l

라즈베리파이 팩스서버에서 Avantfax 웹애플리케이션 운용하기

 

 

   지난 포스팅에서 리눅스 운영체계가 설치된 라즈베이파이(혹은 유사 파이)에 USB 팩스모뎀을 연결하고, hylafax 서버를 설치하여 팩스머신으로 운용하는 방법에 대하여 기술한 바 있습니다. 이번에는 이 라즈베리파이 팩스머신을 보다 편리하게 운용하기 위하여 Avantfax라고 하는 웹애플리케이션을 설치하고 초기 설정을 진행해 보겠습니다.

   Avantfax를 설치하는 이유는, hylafax가 리눅스 커맨드기반 인터페이스(CLI) 환경에서 동작하기 때문에 운용이 쉽지 않고 직관적이지 않는데 기인합니다. 물론 hylafx의 서드파티 클라이언트를 통해서 일부 GUI로 관리할 수도 있습니다만, 통합적이고 직관적인 관리는 어렵지요. Avantfax의 더 큰 장점은, Avantfax를 통해 웹에서 관리하게 되면, 사무실 등 설치 장소 외에서도 인터넷이 되는 곳이라면 어디에서나 사무실 팩스서버 웹인터페이스에 접속하여 원격관리 및 팩스 수발신이 가능하다는 데에 있습니다.

   Avantfax는 리눅스 운영체제가 설치되고 웹서버와 MySQL 데이터베이스, 그리고 PHP에 의한 동적 웹서비스 환경하에 동작하는 웹애플리케이션입니다. 따라서 소위 LAMP(Linux + Apache/Nginx + MySQL/MariaDB + PHP) 환경이 설치되어 있는 장치라면, 일반 PC환경에서도 당연히 적용할 수 있는 것이지요. 그래도 24시간 수신대기를 위한 팩스머신이라면 저전력을 소모하고 소음이 없는 라즈베리파이 등의 파이류가 제격입니다.

   저는 그동안 위의 환경을 구축하기 위한 일련의 포스팅들을 진행해 왔습니다. 다만, 라즈베리파이나 다른 파이들에 리눅스 운영체제를 설치하는 과정에 대하여는 국내외 인터넷에 많은 자료들이 있으므로 그 자료들을 참조하면 되구요. 저는 Raspbian 등 데비안 계열 운영체제가 설치되어 있다는 것을 전제로 이 포스팅을 진행합니다. 운영체제 설치 이후 필요한 사항들에 대하여는 아래 링크를 참조하시어 반드시 각 단계를 거쳐야 합니다.

 

 

   우선 우리의 라즈베리파이에 ssh 접속하거나 데스크톱으로 사용하신다면 터미널을 열어서 아래와 같이 Avantfax 웹애플리케이션을 다운받습니다. 현재 작성일 기준 최신 3.3.5버젼을 다운로드 받을 경우 아래와 같습니다.

1
$ cd /usr/src
cs
1
$ sudo wget http://jaist.dl.sourceforge.net/project/avantfax/avantfax-3.3.5.tgz 
cs

 

   Avantfax의 최신 버젼을 확인하기 위해서는 웹브라우져에서 아래의 URL을 열어 확인하시면 됩니다.

   아래와 같이 tgz 압축을 풀어 줍니다.

1
$ sudo tar zvxf avantfax-3.3.5.tgz
cs

   압축을 풀어준 디렉토리에 있는 데비안용 설치 스크립트를 에디터로 열어 봅니다.

1
$ cd avantfax-3.3.5/
cs
1
$ sudo nano -w debian-install.sh 
cs

   이 스크립트의 내용을 보면 맨 처음에 필요한 패키지들을 설치하고, PHP의 pear모듈을 설치한 후 Avantfax를 타겟 폴더에 설치하고, smarty 설치, DB 생성 및 설정, hylafax 설정 등을 스크립트로 한방에 처리할 수 있도록 짜여진 프로그램임을 알 수 있습니다. 이 스크립트가 현재 우리의 환경과 정확히 일치한다면 별다른 고생없이 이 스크립트를 실행만 해 주면 되겠습니다만, 불행히도 그렇지 않지요. 그 이유는 다음과 같습니다.

  • 사전 설치 대상 필수패키지들이 현재 버전의 데비안과 맞지 않습니다. 따라서 기본 저장소에 없는 패키지의 설치를 요구하는 등 현실과 맞지 않습니다.

  • 이 스크립트는 Apache, Mysql을 자동으로 설치하도록 되어 있지만, 우리는 이미 설치한 Nginx와 MariaDB를 활용할 것입니다.

  • 피어 사이트에서 pear 모듈을 다운 받아 설치하는 과정에서는 에러가 나지 않지만, 동적 웹사이트가 작동하지 않고 error가 납니다. 이는 pear 모듈 저장소의 버전 불일치에 기인하는 것으로써 특정 pear 모듈들을 베타버젼으로 업데이트해 주어야 해결되는 문제입니다.

   위 세가지 사항이 반영되도록 스크립트를 수정한 후 스크립트를 실행해도 무방하지만, 혹시 발생할 수도 있는 에러를 방지하기 위하여 위 문제와 관련된 사항은 스크립트 실행 전에 미리 별도로 실행해 주는 것을 권장합니다. 아예 스크립트를 실행하지 않고, 참고만 하면서 터미널 배시쉘에서 모두 실행 및 설정해 주는 것도 가능합니다. 공부는 되겠지만 시간과 편의를 위해 우리는 적정한 선에서 스크립트를 사용할 것입니다. 일단, nano에디터에서 편집 없이 ctrl+X로 나옵니다.

   우선, 아래와 같이 필수패키지 먼저 설치하겠습니다.

1
sudo apt-get install imagemagick libtiff5-dev netpbm libnetpbm10-dev giflib-tools php-mail php-mail-mime php-file php-db psutils wdiff rsync 
cs

   다음으로, pear 모듈을 설치합니다.

1
2
3
$ sudo pear channel-update pear.php.net
$ sudo pear upgrade-all
$ sudo pear install --alldeps Mail Net_SMTP Mail_mime MDB2_driver_mysql
cs

 

   여기까지가 스크립트에 포함된 pear 설치 내용입니다만, 현재 pear의 버전으로는 에러가 납니다. MDB2의 Mysql드라이버가 버전이 낮아서 호환이 안되는 문제입니다. 아래와 같이 베타버전으로 업그레이드 해 주어야만 정상적으로 작동합니다.

1
$ sudo pear upgrade mdb2-beta mdb2_driver_mysqli-beta
cs

  이제 Apache와 Mysql 관련 부분이 남았습니다만, Apache는 설치하지 않을 것이므로 Nginx에서 웹페이지를 구성하는 것만 추후에 진행해 주면 되고, Mysql은 MariaDB가 100% 대체 (Drop-in Replacement)하므로 스크립트를 그대로 이용하면 됩니다. 이제 스크립트의 환경설정(Preference)인 debian-prefs.txt 파일을 편집해 봅시다.

1
$ sudo nano -w debian-prefs.txt 
cs

   아래와 같은 부분을 각자의 상황에 맞게 수정해 줍니다.

FAXDOMAIN=fax.mydomain.com

  예를 들어, 외부에서 접속할 수 있는 도메인 주소가 fax.example.org라면 위 내용을 아래와 같이 바꾸어 줍니다.

FAXDOMAIN=fax.example.org

   새로이 생성되는 avantfax를 위한 데이터베이스의 이름과 그 사용자명은 그대로 avantfax를 쓰는 것이 관리목적상 바람직하지만 그 비밀번호는 보안을 위해 주어진 값(3.3.5버전에서는 d58fe49)에서 반드시 변경하기 바랍니다.

PASS=새로이_변경된_비밀번호

   Mysql(MariaDB)의 루트 비밀번호는 저처럼 MariaDB 혹은 Mysql을 사전에 설치했다면, 설치시 설정한 비밀번호를 아래 자리에 입력하여야 에러가 나지 않습니다.

ROOTMYSQLPWD=Mysql_혹은_MariaDB_처음_설치시_설정한_root_비밀번호

   주의할 점은, 리눅스시스템의 root비밀번호가 아닌 MariaDB 혹은 Mysql의 root 비밀번호를 입력해야 한다는 점입니다.

   아래 그림을 참조하여 모든 변경이 완료 되었다면, Ctrl+X키를 누르고 y키로 저장을 해 주시면서 nano 에디터에서 나옵니다.

1
$ sudo chmod 600 debian-prefs.txt
cs

   debian-prefs.txt 파일은 민감한 비밀번호가 저장된 파일이므로 보안을 위하여 위와 같이 권한을 변경해 줍니다.

   다음은, 한번 내용만 들여다 보았던 debian-install.sh 파일을 편집합니다.

1
$ sudo nano -w debian-install.sh
cs

   우리가 이미 진행했던 사항들에는 줄 맨 앞에 #표시를 붙여 주석으로 만들어 주어 스크립트 실행 시 제외되도록 해 줍니다. 사전 필수 패키지 설치와 pear 모듈 설치 부분입니다. 아래 그림을 참조하시기 바랍니다.

   우리는 Apache 웹서버를 설치하지 않고 Nginx 웹서버를 설치하여 진행하고 있습니다. 아래 그림은 Apache 웹서버를 위한 가상호스트 설정과 웹서버 재시작 부분입니다. 역시 마찬가지로 그림처럼 모두 주석처리해 줍니다. 나중에 Nginx의 웹페이지 설정과 재시작을 수동으로 해 줄 것입니다.

   자, 이제 모든 편집이 끝났습니다. Ctrl+X를 누른 후 y를 눌러 저장 후 에디터에서 나옵니다. 스크립트를 실행할 차례입니다. 아래와 같이 실행해 줍니다.

1
$ sudo ./debian-install.sh
cs

   그러면, 아래 그림과 같이 실행이 될 것입니다. ln 명령 2건이 실패한 것을 제외하고는 특별한 문제는 없습니다. 소프트링크가 실패한 것은, 확인해 보니 그역방향으로 소프트링크가 이미 걸려 있어서 실패했네요. 현재로 봐서는 크게 문제될 것이 없어 보입니다.

   배시쉘에서 명령을 하나하나 입력해 가며 했으면, 꽤 오래 걸렸을 작업을 순식간에 해내는군요. 쉘스크립트의 힘입니다.

   다만, debian-prefs.txt 파일에서 설정해 준 avantfax의 비밀번호가 debian-install.sh 스크립트의 실행 과정에서 적용이 누락된 부분이 있습니다. 그 부분을 추가로 설정해 주어야 avantfax 웹사이트가 정상적으로 작동합니다. 아래와 같이 nano에디터를 실행해 줍니다.

1
$ sudo nano -/var/www/avantfax/includes/local_config.php
cs

   여기서 아래의 내용을 찾습니다.

define('AFDB_PASS',             'd58fe49');           // password

   바로 debian-prefs.txt에 있는 avantfax 데이터베이스 사용자의 초기 비밀번호가 그대로 있는 것을 확인할 수 있는데요. 이를 우리가 앞에서 변경해 준 것으로 바꾸어 줍니다.

define('AFDB_PASS',           '새로이_변경된_비밀번호');           // password

   이제 미뤄왔던 Nginx 웹사이트 설정에 들어가야 합니다.

1
2
3
$ cd /etc/nginx/sites-available/
$ sudo cp default avantfax
$ sudo nano -w avantfax
cs

   아래 내용을 찾습니다.

        listen 80 default_server;
        listen [::]:80 default_server;

   이것을 아래와 같이 바꿔 줍니다.

        listen 80 ;
        listen [::]:80 ;

   아래 내용을 찾습니다.

root /var/www/html;

   이것을 아래와 같이 바꿔 줍니다.

root /var/www/avantfax;

   또, 아래 내용을 찾습니다.

server_name _;

   이것을 아래와 같이 바꿔 줍니다. 단, fax.example.org는 여러분이 실제로 외부에서 접속할 수 있는 도메인명으로 바꾸어 입력하여야 합니다.

server_name fax.example.org;

   아래 그림을 참조하시면서 확인 후 Ctrl+x 키와 y키를 눌러 저장 후 nano에디터를 종료합니다.

   배시쉘로 돌아오면 아래 명령을 입력하여 Nginx를 재시작해 줍니다.

1
2
$ sudo ln -s ../sites-available/avantfax avantfax
$ sudo systemctl restart nginx.service
cs

   여기까지 특별한 에러가 없다면, 웹브라우져를 열어 주소창에 fax.exampl e.org를 입력하여 아래의 그림과 같은 화면이 나오는지 확인합니다. 물론 fax.example.org는 여러분의 실제 도메인명으로 입력해야 합니다.

   avantfax의 관리자 아이디와 초기 비밀번호는 아래와 같습니다.

 I.D : admin

Password : password 

   이것을 입력하고 최초 로그인을 하면 비밀번호를 바꾸는 페이지로 전환됩니다. 반드시 관리자의 비밀번호를 각자의 것으로 바꾸어 주시기 바랍니다.

   관리자 비밀번호를 바꾼 후에는 아래 사진과 같은 화면이 열립니다.

   설치 후 첫 로그인이기 때문에, 보낸 팩스, 받은 팩스가 없지요. 우측 상단에 분홍색 테두리로 표시한 작은 아이콘을 누르면 관리자모드로 들어갈 수 있습니다. 혹은 주소창에 아래와 같이 입력하여도 동일한 결과가 됩니다.

   아래 그림과 같이 상단 menu 창을 누르고 modems를 선택해 줍니다.

   그럼 모뎀을 설정하는 화면이 나오는데 아래 화면과 같이 각자의 환경에 맞도록 입력해 줍니다. Device 란에는 ls -la /dev/tty*에서 확인되는 팩스모뎀의 장치 이름을 기재해 줍니다. 제 경우는 ttyACM0이었지만, 각각 설치한 기종에 따라 다를 수 있습니다. Alias 란에는 해당 팩스모뎀 기기의 설치 장소 등 특징적인 사항을 구문의 형태로 작성해 줍니다. '~의 집 팩스기기' 같은 형태도 좋겠지요. 여기까지가 필수 입력 사항이고 아래 Contact에는 이메일 주소를 기재해 주면 수신되는 팩스를 입력된 이 주소로 자동으로 메일을 보내 줍니다. 단, postfix 발송 SMTP가 이미 설정되어 있는 경우에 한합니다. 우리의 경우 이미 해 주었기 때문에 가능하다고 보면 됩니다. 그 아래 Printer 항목은 수신 팩스를 지정한 CUPS/lpr 프린터에 인쇄해 줍니다. 저는 이 설정을 하지 않는 것을 권장합니다. 메일로 고지되면 충분합니다. 정 인쇄가 필요하면 메일에 첨부되는 PDF파일을 인쇄하면 됩니다. 광고성 스팸 팩스가 범람하기 때문이지요.

   모두 입력 되었으면 Save 버튼을 눌러 주어 팩스설정을 저장해 줍니다.

   이상과 같이 기나긴 Avantfax의 설치와 설정을 모두 마쳤습니다. 가정용의 경우 지금까지의 설정으로도 충분하지만, 여러 사람이 사용하는 기업의 경우는 admin 계정 말고도, 각 사용자별 계정을 만들어 주어서 각 사용자별 권한을 따로 설정해 주고, 팩스 서비스에 개별 접근할 수 있도록 설정해 주시기 바랍니다. 모두 우리가 조금 전에 접속한 웹 환경에서 가능하므로 큰 어려움은 없으리라 생각합니다.

   Avantfax가 참 좋은 웹애플리케이션이지만, 아직 공식적인 한글 로컬라이제이션 파일이 존재하지 않습니다. 일부 선구적으로 이 앱을 사용하신 분들이 의욕적으로 한글 로컬 파일을 만드신 것으로 알고 있는데 공개도 잘 안하시고, avantfax 측에 제공도 안하셔서, 아직 한글 번역 파일이 배포되고 있지 않는 것이지요. 언젠가 제가 한글화를 하게 되면, avantfax 측에 제출하여 향후 공식 배포본에 포함될 수 있도록 해 볼 생각입니다. 이상으로 마칩니다.

 

 

 


Posted by truerain
l

[음악과 명상(冥想)사이] 제2편

들리는가 민중(民衆)의 노래 소리가?

(Les Misérables Cast 「Do You Hear The People Sing?」)

 

   프랑스의 대 문호 빅토르 위고(Victor-Marie Hugo,1802~1885)는 프랑스의 시인, 소설가, 극작가 겸 정치인이었습니다. 영화 혹은 뮤지컬로도 널리 알려져 있는 소설 「노틀담의 꼽추(Notre-Dame de Paris)」도 그의 작품이지요. 그가 남긴 또 하나의 전 세계적 걸작인 소설 「레 미제라블(Les Misérables)」도 뮤지컬, 뮤지컬영화 등으로 제작되어 전 세계인의 많은 사랑을 받고 있습니다.

뮤지컬 「레 미제라블(Les Misérables)」포스터 로고 이미지.

   저는 휴 잭맨, 러셀 크로 등이 열연한 뮤지컬 영화도 보고, 우리 나라 뮤지컬 배우들에 의해 우리 말로 공연된 뮤지컬 작품으로도 감상했습니다. 뮤지컬 배우들이야 워낙 노래 실력들이 출중하겠지만, 휴 잭맨이나 앤 해서웨이 등 헐리우드 스타들도 생각보다 꽤 잘하더군요. 그래도 원래 가수출신인 서맨사 바크스 (에포닌 역)의 「On My Own」같은 곡은 감정처리, 성량 등에서 다른 영화배우 출신들이 부른 곡들의 추종을 불허하죠. 개인적인 생각입니다만, 「노틀담의 꼽추(Notre-Dame de Paris)」의 「대성당들의 시대(Le Temps Des Cathedrales)」처럼 노래로도 길이 남을 명곡인 것 같습니다.

영화 「레 미제라블(Les Misérables)」(2012) 포스터.

   뮤지컬 혹은 영화 「레 미제라블(Les Misérables)」하면, 떠 오르는 또 하나의 명곡이 있지요. 바로 「Do You Hear The People Sing?」이라는 곡입니다. 프랑스대혁명(1789년~1794년) 이후에도 굶주림 속에 인간 이하의 삶을 살아야 했던 프랑스 민중들, 그런 와중에 혼란을 틈타 구체제인 왕정으로 복귀하는 지배계층... 그 지배계층과 결탁하여 민중의 고혈을 짜내 부를 축적하는 신흥 브루조아지... 프랑스 민중은 민중의 지지를 받던 라마르크 의원의 장례식을 계기로 왕정 지배계층과 브루조아지에 항거하는 봉기를 일으킵니다. 이를 프랑스 역사는 '6월폭동(1832년)'으로 기록하고 있습니다. '폭동'이라는 이름에서 알 수 있듯, 이 민중 봉기는 많은 바리케이트를 쌓으며 끝까지 저항했지만, 총을 앞세운 프랑스 정부의 강경한 진압으로 인해 궤멸되고 맙니다. (성공했다면 '혁명'이라는 이름이 붙었겠지요.)

영화 「레 미제라블(Les Misérables)」(2012) 민중 봉기 씬(Scene)의 한 장면.

   이 민중 봉기의 시기... 봉기의 지도부로 묘사되는 마리우스의 동지들이 한 명씩 따라 부르기 시작하고 뮤지컬 캐스트들의 합창으로 이어지는 대곡(大曲) 「Do You Hear The People Sing?」이 봉기의 캠패인송 격으로 자리잡고 있습니다. 사실 이 곡의 특성상 캐스팅 숫자가 많으면 많을 수록, 합창자의 수가 많으면 많을 수록 그 감동이 더 크겠지요. 사실 뮤지컬이야 무대의 한계때문에라도 압도적인 군중의 숫자를 표현한다는 것이 어려울 것입니다. 그래도 뮤지컬을 영화화한 2012년의 작품은 생각보다는 봉기의 참여한 사람들의 숫자가 적어 보여서 조금은 아쉬운 측면이 개인적으로는 있었습니다.

   이 곡의 가사를 음미해 보면서, '역사는 반복된다'는 말의 의미를 다시 생각하게 됩니다. 프랑스대혁명 이후 반복되는 구체제(앙시앙 레짐, Ancien Régime)의 복귀와 거듭되는 민중의 봉기... 피로 쟁취한 것들이 하루 아침에 물거품이 되어 있는 현실과 반복되는 민중들의 피폐함... 이것들이 비단 1800년대의 프랑스에서만 볼 수 있는 현상은 아닐 것입니다. 그래도 분명한 것은, 프랑스 대혁명 이후 거의 1백년 동안 반복되었던 이러한 기나긴 과정의 끝에 프랑스 민중들이 왕정 세력과 귀족들을 모두 몰아내고, 공화정을 정착시키고, 브루주아 자본주의와 노동자들의 삶의 질의 균형점을 찾아내어, 오늘날의 선진국 프랑스를 만들어 왔다는 것입니다. 순간 순간의 역사에서 좌절과 패배와 허무한 구체제의 복귀가 자리하고 있지만, 긴 호흡으로 보면 인류 사회가 발전과 진보의 방향으로 가고 있다는 것, 바로 노무현 대통령께서 국회의원 낙선 후, 지지자들과 선거운동본부 봉사자들에게 위로하며 건냈던 말들과 그 궤를 같이 하고 있다는 것을 새삼 깨닫게 됩니다.

   최순실의 국정농단과 박근혜 대통령의 헌정유린으로 인해 오늘날 우리 국민들이 좌절하고 있는 것들, 우리 사회가 쌓아 왔던 것들이 한 번에 무너진 느낌... 이것들도 긴 호흡에서 보면, 짧게는 1987년 이후, 길게는 100년에 가까운 기나긴 노력 끝에 달성한 성과들의 일시적인 퇴보일뿐일 것입니다. 우리 안에 다시 자리잡은 이 앙시앙 레짐도 끝내는 사라지리라는 것은 역사가 말해 주고 있습니다. 당장 내일이 아니더라도요. 프랑스의 왕정이 끝내는 그랬던 것처럼...

 

 

Do You Hear The People Sing?[각주:1]

 

Do you hear the people sing?
너는 듣고 있는가

Singing a song of angry men?
분노한 민중의 노래

It is the music of a people
Who will not be slaves again!
다시는 노예처럼 살 수 없다 외치는 소리

When the beating of your heart
심장박동 요동쳐

Echoes the beating of the drums
북소리 되어 울릴 때

There is a life about to start
When tomorrow comes!
내일이 열려 밝은 아침이 오리라

Will you join in our crusade?
모두 함께 싸우자

Who will be strong and stand with me?
누가 나와 함께 하나

Beyond the barricade
저 너머 장벽 지나서

Is there a world you long to see?
오래 누릴 세상

Then join in the fight
자, 우리와 싸우자


That will give you the right to be free!
자유가 기다린다

Do you hear the people sing?
너는 듣고 있는가

Singing a song of angry men?
분노한 민중의 노래

It is the music of a people
Who will not be slaves again!
다시는 노예처럼 살 수 없다 외치는 소리

When the beating of your heart
심장박동 요동쳐

Echoes the beating of the drums
북소리 되어 울릴 때

There is a life about to start
When tomorrow comes!
내일이 열려 밝은 아침이 오리라



Will you give all you can give
너의 생명 바쳐서

So that our banner may advance
깃발 세워 전진하라

Some will fall and some will live
살아도 죽어서도

Will you stand up and take your chance?
앞을 향해 전진하라

The blood of the martyrs
저 순교의 피로서

Will water the meadows of France!
조국을 물들이리라


Do you hear the people sing?
너는 듣고 있는가

Singing a song of angry men?
분노한 민중의 노래

It is the music of a people
Who will not be slaves again!
다시는 노예처럼 살 수 없다 외치는 소리

When the beating of your heart
심장박동 요동쳐

Echoes the beating of the drums
북소리 되어 울릴 때

There is a life about to start
When tomorrow comes!
내일이 열려 밝은 아침이 오리라

 

출처 : wilsonbaksa 님 블로그

 

 

 

 

  1. wilsonbaksa님에 의하면 가사의 한글부분은 영어 가사의 번역이 아닌 한국어판 뮤지컬의 가사라고 합니다. [본문으로]
Posted by truerain
l

라즈베리파이에 팩스서버 설치하기

 

들어가는 글

 

    라즈베리 파이는 기본적으로 Faxmodem 칩을 가지고 있지는 않습니다. 하지만, USB 포트들이 있으므로, 리눅스 운영체제에서 지원하는 USB 팩스모뎀을 구해서 연결만 해 주면 훌륭한 팩스기기로 변신합니다. 저렴하게는 5만원 안쪽에서 팩스시스템을 구축할 수 있는 것이지요. 오늘은 USB 팩스모뎀을 라즈베리 파이에 설치하고 팩스서버 어플리케이션을 설치 및 설정하여 팩스 서비스를 실행하는 것에 관하여 포스팅합니다.

     ※준비물

  • 리눅스 운영체제가 설치된 라즈베리파이 (이 글에서는 Raspbian 가정)

  • USB 팩스모뎀 (리눅스 호환 칩을 가진 모델일 것)

  • 개통 완료된 전화 1회선 (전화기는 필요 없습니다.)

    라즈베리파이는 네트워크 접속만 할 수 있고, USB 슬롯이 있는 모델이라면 어떠한 것도 상관 없습니다. 마찬가지로 Orangepi 및 각종 Pi류 다 괜찮습니다. 당연한 이야기지만 PC도 됩니다. 운영체제도 리눅스 운영체제라면 Arch linux, Ubuntu 계열도 모두 괜찮습니다. 다만, 리눅스 커널은 USB 팩스모뎀이 인식되도록 범용으로 컴파일된 것이어야 합니다.

    USB팩스모뎀은 시중에 4~5만원대 제품도 있고, 10만 원이 넘어가는 고급 제품도 있는 것으로 알고 있지만, eBay나 aliexpress에서 무료 배송에 우리 돈으로 1만 원 가량하는 제품도 괜찮습니다. 물론 도를 닦는 심정으로 한 달 이상을 기다려야... 단, 상품상세 설명에 지원하는 운영체제로 Linux가 반드시 기재 되어 있어야 합니다.

USB 팩스모뎀제가 파이 팩스서버를 구축하기 위해 Aliexpress에서 구입한 중국산 팩스모뎀제품입니다. 당시 (2016년 1월) 구입가는 USD8.56이었습니다.

 

USB팩스모뎀의 설치 및 확인

 

    전화선의 경우 팩스 전용의 회선이 따로 있다면 자동수신으로 설정해 놓고 사용할 수 있습니다. 그렇지 않고 전화용 회선에서 끌어다가 팩스를 쓴다면, 수동수신으로 설정해서 사용하는 것이 좋겠지요. 아무튼, 전화선을 국선 라인에 연결해 주고 USB 커넥터도 라즈베리파이의 USB 슬롯에 연결해 줍니다.

    이제 라즈베리 파이에 ssh로 접속하여(혹은 데스크톱환경에 접속 후 터미널을 열어) 아래와 같이 입력해 줍니다.[각주:1]

1
$ lsusb 
cs

    위 명령의 결과, 아래와 같이 faxmodem 장치가 잡혀 있다면 라즈베리파이 리눅스에 하드웨어가 잘 장착된 것입니다[각주:2]. 당연히 Bus와 Device 번호, ID는 다를 수 있겠지요.

    하드웨어 디바이스의 폴더도 아래와 같이 살펴 봅니다.[각주:3]

1
$ ls -la /dev/ttyA* 
cs

    아래와 같이 장치가 잡혀 있으면 됩니다. 이때, tty로 시작하는 장치의 이름을 대소문자 및 숫자 구분하여 반드시 기억하거나 메모해 둡니다.

 

 

애플리케이션의 설치

 

    우리의 라즈베리파이에 메일 서버가 설치되어 있지 않은 경우, 수신 메일을 메일로 포워딩하는 기능을 활용하기 위해 MTA(Mail Transfer Agent)를 설치할 필요가 있습니다. hylafax-server를 설치하면 mailutils까지 함께 설치되고 이렇게 되면 기본 MTA프로그램인 Exim이 설치되기 때문에, MTA로 Exim이 아닌 postfix를 설치하여 간단하게 gmail의 SMTP를 통한 relay가 가능하도록 설정해 줄 필요가 있습니다. 이 과정은 아래의 링크로 대신합니다.

<Gmail SMTP Server를 사용하여 발송전용 Postfix 메일 서비스 구축하기> 바로가기

    이제 팩스서버 어플리케이션을 설치합니다. 리눅스에서는 팩스서버-클라이언트 패키지인 hylafax를 많이 씁니다. 서버를 설치하면 클라이언트도 함께 설치됩니다.

1
$ sudo apt-get install hylafax-server 
cs

 

 

hylafax 팩스모뎀 설정

 

    애플리케이션 설치가 완료되면 아래와 같이 팩스모뎀에 대한 설정에 들어 갑니다.

1
$ sudo faxsetup 
cs

    hylafax의 설정 스크립트가 시작되어 특별한 에러가 없으면 아래와 같은 부분에서 사용자 입력을 대기하게 됩니다.

        HylaFAX configuration parameters are:

        [1] Init script starts faxq:            yes
        [2] Init script starts hfaxd            yes
        [3] Start old protocol:                 no
  Are these ok [yes]? 엔터

Can I terminate this faxq process (3804) [yes]? 엔터
Should I restart the HylaFAX server processes [yes]? 엔터

 

Do you want to run faxaddmodem to configure a modem [yes]?엔터
Serial port that modem is connected to [ttyS0]? ttyACM0

 

※ 위에서 암기하거나 메모해 둔 팩스모뎀의 디바이스명을 정확히 입력해 줍니다.

    [ ] 안의 기본값 yes를 그대로 적용한다는 의미로 엔터를 입력하면 계속해서 사용자의 설정값을 받도록 대화모드가 이어집니다. 아래에 기술한 항목에 대하여는 각자의 환경에 맞는 값을 입력해 주어야 하며, 특별히 언급이 없는 항목에 대하여는 기본값대로 엔터를 입력하며 넘어가 줍니다.

Country code [1]? 82
Area code [415]? 2 <- 지역번호에 0을 빼고 입력합니다. ex 서울 2, 경기 31, 인천 32
Phone number of fax modem [+1.999.555.1212]? +82.2.1234.5678  <-실제 전화번호입력
Local identification string (for TSI/CIG) ["NothingSetup"]? Truerain's Home Fax <-각자 변경
Protection mode for received facsimile [0600]? 644
Protection mode for session logs [0600]? 644
Protection mode for ttyACM0 [0600]? 666
Rings to wait before answering [1]? 1   <- 발신 전용일 경우 0 입력
Modem speaker volume [off]? 엔터    <- 기본값 외에 QUIET LOW MEDIUM HIGH 가능 Max consecutive bad lines to accept during copy quality checking [5]? 3  <-줄여도 무방
Max number of pages to accept in a received facsimile [25]? 엔터    <- 늘려도 무방

Are these ok [yes]? 엔터  

   이제 스크립트는 모뎀 속도를 체크한 뒤, 가능한 모뎀 Class를 확인한 후 어떤 클래스를 사용할 것인지 물어 옵니다. 이때 구형 팩스를 포함한 모든 팩스기기와 호환되기 위해서 반드시 1을 입력해야 합니다.

This modem looks to have support for Class 1.0, 1 and 2.
How should it be configured [1.0]? 1

     아래의 문구가 나올 때 까지 몇 번 더 기본 값을 승인하는 엔터를 입력한 후 아래의 문구대로 다른 팩스모뎀을 더 설정할 것이 없다면(팩스모뎀 단 하나를 설치한 우리도) no를 입력하고 엔터를 입력합니다.

Do you want to run faxaddmodem to configure another modem [yes]? no

    마지막으로 아래 물음에 엔터로 승인하면 팩스모뎀 설정이 완료됩니다.

Should I run faxmodem for each configured modem [yes]?  엔터

    이제 스크립트가 알아서 지금까지의 모든 설정을 저장하며 Bash쉘로 돌아옵니다. 새로이 저장된 설정을 반영하기 위해 아래와 같이 hylafax 서비스를 재시작 해 줍니다.[각주:4]

1
$ sudo systemctl restart hylafax.service 
cs

    팩스서비스가 설정대로 잘 재시작되었는지 상태를 점검하기 위해 아래 명령으로 확인합니다.

1
$ sudo faxstat -s
cs

    그 결과가 아래 그림과 같이 나오면 잘 설정되어 실행중에 있으며 대기상태에 있음을 알 수 있습니다.

 

나오는 글

    지금까지 데비안 Jessie 계열 운영체제가 설치된 라즈베리파이에 USB팩스모뎀을 설치하고 hylafax 애플리케이션을 설치하여 팩스서버로 작동하도록 구성하는 절차를 진행하였습니다. 지금까지 설정한 것 이외에도 별도의 클라이언트 프로그램을 설치하여 내부네트워크의 다른 단말기에서도 팩스를 수신 및 발신 할 수 있도록 추가 설정이 가능합니다. 하지만, 이보다는 avantfax 웹애플리케이션을 웹서버에 설치하여 hylafax와 연동하도록 구성하고 인터넷으로 접속하여 라즈베리파이 팩스서버를 관리하는 것이 훨신 효율적이고 편리하므로, hylafax 서버의 설정은 이 정도 선에서 마무리하도록 하겠습니다.

 

 

 

 

  1. 기본적으로 제가 구입한 conexant 제품은 Plug & Play를 지원하기 때문에 재부팅이 필요 없었습니다. 구매한 팩스모뎀 제품에 따라 재부팅을 필요로하거나 수동 설정을 필요로하는 경우가 있을 수 있습니다. 이 경우 제품 메뉴얼을 참조하시기 바랍니다. [본문으로]
  2. 제가 Aliexpress에서 구입한 제품은 벌크제품으로서 Conexant Systems (Rockwell), Inc.의 모뎀 칩을 사용하는 TRENDnet TFM-561U이거나 그 카피 제품으로 보입니다. 해당 모델은 리눅스와 호환성이 매우 좋은 것으로 알려져 있습니다. [본문으로]
  3. 제 경우와 달리, USB팩스모뎀의 종류에 따라 ttySL0 등의 이름으로 잡히는 모델이 있으므로 ls -la /dev/tty* 라는 명령으로 살펴볼 필요가 있습니다. [본문으로]
  4. 만약, Debian(Raspbian) Jessie 이전 배포판을 사용하고 있다면 sudo service hylafax restart 라는 명령을 통해 재시작하여야 합니다. [본문으로]
Posted by truerain
l

   <알림 : 이 글에는 영화 내용에 대한 스포일링이 일부 포함될 수 있습니다.>

   영화 「무현 - 두 도시 이야기」를 보았습니다. 오늘이 아니고 정확히 일주일 전에... 한 주간의 사색을 거쳐 키보드 앞에 앉았습니다. 대통령이 대통령답지 않은, 아니 대통령이 아닌 것 같은 이 어수선한 세상에, 개봉관 조차 몇 확보하지 못하고 선을 보였던 이 한 전직 대통령이 대통령에 당선되기 전, 국회의원 선거에 조차 떨어지던 시기를 그린 다큐멘터리 영화는, 그 사이에 시간이 흐를 수록 찾는 이들이 더 늘어 박스오피스 역주행 중이라는 기사를 얼마 전에 보았습니다.

   제게 있어서 이 영화는, 2000년 총선이 있은 지 얼마 후에 KBS의 한 리얼리티 프로그램[각주:1]에서 당시 노무현 낙선자를 밀착취재해서 방영했던 것을 유심히 보았던 그 오랜 기억을 끄집어 내 준 점에서 의의가 있었습니다. (많은 분들이 알고 계시겠지만, 그 프로그램으로 '바보 노무현'은 더 유명해지고, 전국적인 노사모열풍이 시작되는 계기가 되었지요.) 한편으로는, 평행이론적 관점에서 2016년 여수의 '무현'이라는 한 축을 이루는 故 백무현 화백의 이야기는 제가 몰랐던 부분이라 관심을 가지고 봤습니다.

   제가 노무현 대통령에 대하여 도저히 이해하지 못하다가 이 영화를 통해 비로소 이해하게 된 것이 하나 있습니다. 영화가 다루지 않는 내용인데, 2002년 12월 대통령 당선 후의 일성(一聲)으로 당시 노무현 당선인이 "나를 지지한 50%를 위한 정책을 하는 대통령이 아닌 나를 지지하지 않은 50%를 위한 정책도 함께 하는 대통령이 되겠다."고 한 적이 있었습니다. 저는 개인적으로 그때부터 '아니, 그럴려면 우리가 왜 당신을 지지했는가? 당선인이라면 그 지지자를 위하여 지지자가 원하는 정책을 임기내에 관철해야 하는 것 아닌가?'라는 의문을 가지고 있었지요.

   그 답이 이 영화에 있더군요. 이 영화의 2000년 선거운동 화면 중에 이런 부분이 나옵니다. 아무도 본인의 선거운동에 관심을 가져주지 않는 부산 어떤 시장 부근에서의 고된 일정을 잠시 멈추고 쉬러 들어갔던 다방에서 당시 노무현 후보가 다방 종업원에게 묻습니다. '이렇게 저(노무현 후보)에게 관심도 안 갖는 지역에서 제가 유세를 해야 할까요?' 그 다방 종업원은 대답하죠. '해야 합니다. 당신을 지지하지 않는 유권자라도, 그들에게 유세하고 그들의 의견을 들어야 합니다.' 왠만한 정치인들은 스쳐 듣거나, 깨닫는 게 있어도 그 결심이 오래 가지 않을 수도 있을 텐데, 노무현은 이 다방 종업원과의 대화에서 크게 깨달음을 얻고 이를 신념화하여 정치인으로서 행보에 끝까지 반영합니다.

   제가 이해할 수 없었던 부분이 여기서 풀렸습니다. '아, 이때 깨닫고 신념화한 내용이 그때의 그 나머지 50% 언급을 낳았구나...' 재임 중 '대북송금 특검' 수용 등의 소위 진보진영을 당혹케 했던 정책으로 인해 진보진영에서도, 보수진영에서도 공격받는 결과를 낳았던 것도, 집권 후기 노무현 대통령의 '대연정', '개헌' 제안이 나오게 된 배경도 이 신념에서 비롯된 것임을 깨닫게 되었습니다. 물론, 당시 야당(한나라당)과 여당(열린우리당) 그리고 각 유력 대선후보들까지 노 대통령의 이 제안들을 정치공학적으로 받아들이고 반대했었죠. 심지어는 노대통령 지지자들까지 이해하기 힘들어 했으니까요... 개인적으로는 14년 전부터 가져 오던 의문이 이제와서 풀린 겁니다.

   제 개인적인 생각과는 별개로, 분명히 이 영화가 '박스오피스 역주행'을 하는 데는 그 객관적인 이유 혹은 시사적인 배경이 있겠지요. 강한 신념과 주관을 가지고서 그것이 정치인이라면 당연히 중시해야할 '당선' 가능성과 배치된다고 하여도, 또 실제로 낙선했다고 하여도, 유권자(국민)를 탓하지 않고 기꺼이 감내한 2000년 부산에서의 노무현과 2016년 여수에서의 백무현을 대비시켜, 신념없이 이미지만으로 성공가도를 달려오다 사실은 누군가의 '꼭두각시'였음이 드러난 요즘의 어떤 유력 정치인을 떠오르게 합니다. 또, 정치인 본인의 생각과 철학을 연설문에 정확히 반영하면서도 쉽고 간결하게 유권자에게 전달하기 위해 노력하며 연설문 담당 보좌관들과 고민하는 노무현 대통령의 모습에서, 중요한 연설문을 사사로이 외부 비선 실세를 통해 수정하여 엉뚱한 오류와 황당한 비문을 낳았던 요즘의 그 어떤 유력 정치인을 비교하게 합니다. 이러한 사실만으로도 이 다큐멘터리 영화는 2000년의 노무현을 기억하지 못하는 젊은 세대에게 요즘의 그 유력 정치인이 얼마나 엉터리인지를 잘 보여주는 영화라 할 수 있습니다.

   하지만, 저는 이 영화의 내용보다는 내용 외적인 부분에 신경이 많이 쓰였던 게 사실입니다. 물론, 저예산 독립 다큐멘터리 영화라고 할지라도, 그래도 관객이 있는 엄연한 개봉 영화인데, 같은 내용이라도 관객들이 영화에 조금 더 공감하게 하는 구성을 갖출 수는 없었는지 하는 아쉬움이죠. 안타깝게도 영화 속에 선술집에서, 작업실 회의탁자 등에서 등장하며 토론 내지는 자기 생각을 말씀하시는 분들이 이야기 할 때, 노무현을 떠올리면 먹먹해 지고 감정이 복받쳐 말을 잇기 어려워 하시는 모습들을 컷트 없이 롱테이크로 잡는데, 노무현 대통령에 대한 사전지식이 충분하지 못한 관객이라면 영화 내용의 전개만으로 그 눈물에 공감하고 함께 눈물 흘리기가 쉽지 않았을 것 같습니다. 최근에 인간 관계의 중요성을 이야기할 때 '공감능력'이라는 부분을 많이 이야기하지 않습니까? 개인의 '공감하는(해 주는) 능력'을 의미할 텐데... 대중매체라면, 같은 내용이라도 좀 더 짜임새 있게 구성하여 '사람들을 공감시킬 수 있는 능력'이 발휘되었다면 더 좋았겠지요. 이러한 측면에서 이 영화는 조금 아쉽지 않았나 합니다.

   또 하나 든 생각은, 좀 생뚱맞지만, 앞으로 점점 더 노무현을 알지 못하는 요즘 젊은 사람들과 다음 세대에게 노무현의 생애, 정치적 이상과 한계, 집권시의 업적과 과오 등을 종합적이고 체계적으로 알려 줄 수 있는 매체가 필요하다는 생각이 들었습니다. 1998년 2월부터 2008년 2월까지, 국민의 정부가 IMF위기를 수습하고 민주정치의 기초를 닦아, 참여정부에서 찬란하게 꽃을 피운 우리 사회가 그 이후 시나브로 퇴보하다가, 어느 샌가 모르게 붕괴되어 있었다는 것을 깨달은 요즈음, 10여년 전 그 시절은 단지 소주 한 잔 걸치며 눈물짓고 그리워만 할 대상이 아닌, 우리가 회복해야할 가치와 국가 시스템의 기준과 목표가 되어야 하기 때문입니다. 또한 그 목표를 향해, 혹은 그 목표를 뛰어 넘는 비젼을 향해 우리 다음 세대를 이끌어 줄 새 시대의 지도자를 보는 안목을 우리 다음 세대 유권자들이 가질 수 있도록 해 주어야 하기 때문이기도 합니다.

 

 

  1. KBS1TV 「피플 세상속으로」2000년 5월 30일 방영 「끝과 시작 - 낙선정치인 노무현」편. [본문으로]
Posted by truerain
l

Gmail SMTP Server를 사용하여 발송전용 Postfix 메일 서비스 구축하기

 

들어가는 글

   웹서비스 전용, 또는 데이터베이스 서비스 전용 리눅스 서버를 구축할 때, 시스템의 상황을 자동으로 메일로 전달받고 싶은 상황이 생깁니다. 또는 팩스 서비스만을 설치한 디바이스에서 받은 팩스를 자동으로 메일로 전달받고 싶을때, 또는 보낸 메일의 성공 여부를 자동으로 메일로 받고 싶을 때도 있을 것입니다. 이런 서버나 디바이스 마다 Exim 이나 sendmail을 설치하고 imap서비스를 설치하여 제대로 메일서버를 구축한다는 것이 여간 번거로운 일이 아닙니다. 

   Postfix는 Exim, Sendmail과 같은 MTA (Mail Transfer Agent) 프로그램입니다. Postfix에는 relay 옵션이 있는데요. 이를 통해 외부 SMTP 사용 기능을 제공하여 Gmail 등이 허용하는 smtp 릴레이 기능을 활용해 번잡한 메일 서버 구축 없이 위에 언급한 메일 발송을 가능하게 합니다. 오늘은 데비안 리눅스에서 이를 설치하고 Gmail SMTP가 이를 relay하도록 설정하는 방법을 이야기해 봅니다.

 

Postfix의 설치

   Ubuntu에서는 mailutils 패키지를 설치하면 postfix를 비롯한 대부분의 필요한 파일들이 설치되지만, Debian의 기본 MTA는 Exim입니다. Exim은 매우 강력한 MTA임에는 틀림 없지만, 단지 필요한 메일만 발송할 간단한 서비스를 위해서는 사치스러운 앱입니다. Exim이 설치되지 않도록 mailutils에 앞서 postfix를 별도로 설치해 줄 필요가 있습니다.

1
$ sudo apt-get install postfix libsasl2-modules ca-certificates
cs

   Postfix를 설정하는 과정에서 아래 그림과 같은 대화창이 열리면서 두 가지 정도를 물어봅니다. 설치 중인 기기가 외부와 연결되는 인터넷 사이트라면, 아래 그림대로 설정된 기본 상태에서 Tab키만 눌러 <OK>로 건너가서 엔터로 넘어가 줍니다.

   그 다음 화면에서는 이 기기의 인터넷 풀네임 즉, Fully Qualified Domail Name (FQDN)을 넣어 줍니다. 입력된 주소 example.org는 하나의 예입니다.

   이제 mailutils를 설치해 줍니다.

1
$ sudo apt-get install mailutils 
cs
 

 

Postfix의 설정

   설치가 끝나면 아래와 같이 postfix의 메인 설정 파일을 편집기로 엽니다.

1
$ sudo nano -w /etc/postfix/main.cf 
cs

   Nano 편집기가 열리면 

myhostname =

   이 부분을 찾아 아래와 같이 바꾸어 줍니다.

myhostname = example.org

   위 'example.org'는 하나의 예이며, 실제 여러분의 기기 Domain Name을 적어 줍니다.

   다시, 동일한 설정파일에서 아래와 같은 부분을 찾습니다.

relayhost =

   이를 아래와 같이 gmail smtp 주소를 relay하도록 바꾸어 줍니다.

relayhost = [smtp.gmail.com]:587

   이제 이 설정파일의 맨 아래 부분에 커서를 이동시키고 아래의 내용을 복사하여 붙여 넣습니다.

### add Gmail SMTP configuration

# enable SASL authentication
smtp_sasl_auth_enable = yes
# disallow methods that allow anonymous authentication.
smtp_sasl_security_options = noanonymous
# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Enable STARTTLS encryption
smtp_use_tls = yes
# where to find CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

   설정파일의 편집을 모두 마쳤으므로 Control+X키를 누른 후 y로 저장해 준 후 nano 편집기를 빠져 나옵니다.

 

Gmail 로그인 인증을 위한 Credential 파일 등록

   아래외 같이 새 파일을 편집기로 열어 줍니다.

1
$ sudo nano -w /etc/postfix/sasl_passwd 
cs

   새 파일이 열리면 아래 내용과 같이 작성해 줍니다.

[smtp.gmail.com]:587 USERNAME@gmail.com:PASSWORD

   USERNAME@gmail.com 부분에는 여러분이 relay에 사용할 실제 gmail 계정을 입력하고 PASSWORD부분에도 해당 계정의 실제 비밀번호를 입력합니다. 이때 비밀번호에 #, $과 같은 특수문자가 있어도 그냥 입력해 주면됩니다.

   이제 Control+X 를 누른 뒤 y키로 저장 후 종료해 준 뒤 아래와 같이 postmap 명령을 이용해 해시 db 파일을 생성해 줍니다.

1
$ sudo postmap /etc/postfix/sasl_passwd 
cs

   그리고 로그인 계정과 비밀번호가 저장된 파일은 보안을 위해 아래와 같이 권한설정을 바꾸어 줍니다.

1
$ sudo chmod 600 /etc/postfix/sasl_passwd 
cs

 

Postfix 서비스 재시작 및 테스트 메일 발송

   이제 모든 설치 및 설정이 끝났습니다.  재부팅 없이 새 설정이 반영되도록 아래와 같이 postfix 서비스를 재시작 해 줍니다.[각주:1]

1
$ sudo systemctl restart postfix.service 
cs

   특별히 에러 메시지 없이 재시작되면, 아래외 같이 테스트메일을 보내 봅시다.

1
$ sudo echo "body of your email" | sudo mail -s "This is a Subject" -a "From: you@example.org" your-real@email.org 
cs

   이때  맨 끝의 your-real@email.org 는 반드시 테스트용 메일을 받아 볼 실제 이메일 계정이어야 합니다. 위에서 릴레이용으로 지정한 Gmail계정도 좋습니다.

   우리가 발송한 이메일이 잘 도착했다면, 성공적으로 설정을 마친 것입니다.

 

나오는 글

   이상과 같이 데비안 리눅스에서 Exim이 아닌 postfix를 MTA로 설치하고 외부 서비스인 Gmail의 SMTP 서비스를 이용하여 간단하게 시스템 메일을 받아 볼 수 있도록 발신전용 서비스를 구축해 보았습니다. 데비안 계열 운영체제가 많이 이식된 arm 프로세서를 사용하는 라즈베리파이 등 여러 개발 보드에서도 활용하기에 괜찮은 팁이라고 생각됩니다. [끝.]

 

 

P.S. 이 글은 Santiago Ti님의 「Configure Postfix to Send Mail Using an External SMTP Server」를 참조하여 작성하였습니다. 원 글은 Debian 7버전에 대한 가이드 문서지만, Debian 8 (Jessie)에서 실전 적용을 하며 검증하였으므로 문제 없이 작동할 것입니다.

  1. 만약 Debian Jessie 이전 버전을 사용하고 있다면 sudo service postfix restart 의 명령어로 재시작하여야 합니다. [본문으로]
Posted by truerain
l

[음악과 명상(冥想)사이]

제 1편 : 인생의 긴 여정을 노래로 되돌아 보다.

(프랭크 시나트라의 「My Way」와

미소라 히바리의 「川の流れのように」)

   사람은 누구나 인생의 종착역에 다다르면 자신의 일생을 되돌아 보고, 기쁨과 슬픔, 사랑과 미움, 좋든 싫든 의미를 가졌던 사람들을 떠올리며 자신의 삶이 한 편의 영화처럼 머릿 속을 지나가는 듯 느낄 것 같습니다. 이렇게 불확실하게 '할 것 같다'는 식으로 이야기하는 것은 제가 아직 그러한 경험을 해 보지 못하였기 때문입니다. 하지만, 우리는 일대기를 다룬 서사적 소설이나, 일생을 다룬 영화 등 예술 작품속에서 인생의 여정을 마치는 순간이 다가오고 있음을 느끼는 주인공들의 삶에 감정이입되는, 그런 방식의 간접적인 경험을 누구나 한 번쯤은 해 보지 않았을까 합니다.

   여기 그러한 인생의 황혼기에 자신의 삶을 돌아보며 가슴 벅차지만 잔잔하게, 스스로의 인생을 한 곡의 노래로 정리해 표현해 낸 것같은 동·서양의 두 명곡이 있습니다. 하나는 미국 스탠다드 팝 & 재즈 계열의 거봉, 프랭크 시나트라(Frank Sinatra)의 명곡 「My Way」, 그리고 나머지 하나는 일본 쇼와시대를 대표하는 가수 미소라 히바리(美空 ひばり)의 명곡 「川の流れのように(카와노나가레노요-니 : 흐르는 강물처럼)」입니다.

   프랑스 원곡[각주:1]에 유명한 팝가수이기도 한 폴 앵카(Paul Anka)가 작사한 가사를 붙여 프랭크 시나트라가 1968년 말에 녹음하고 1969년 초에 발표한 「My Way」는 폴 앵카가 작사했지만 마치 프랭크 시나트라가 자신이 걸어온 길을 덤덤하게 노래하고 있는 듯한 느낌을 받습니다. 오랜 세월 미국인들과 세계인들의 사랑을 받으며 음악생활을 해 온 한 거장의 퇴장을 암시하는 이 곡은 바로 그런 상황의 시나트라가 불렀기에 더 많은 감동을 우리에게 선사하는 것이 아닐까 생각합니다.

   그런 점에 있어서 미소라 히바리도 마찬가지라고 할 수 있습니다. 엔카 가수로 알려져 있지만, 스탠다드 팝 & 재즈 계열의 노래도 즐겨 부르던 미소라 히바리는 공연때에 이 「My Way」를 즐겨 불렀다고 합니다. 그녀도 이런 노래를 갖고 싶었을까요? 굴곡진 삶의 여정으로 보자면, 프랭크 시나트라에 비해 몇 곱절 이상이었을 미소라 히바리... 시나트라의 「My Way」가 탄생한 지 꼬박 20년 만인 1988년 말, 아키모토 야스시(秋元 康)가 작사한 「川の流れのように」를 취입하게 됩니다. 이 역시 인생을 구비구비 흐르는 강물에 비유하여 노래한 스탠다드 팝 계열의 명곡으로 미소라 히바리 사후 1990년대에 일본인이 사랑하는 명곡 1위에 오르기도 했다고 합니다.

   우리 나라에도 한국의 미소라 히바리라고 불리우는 이미자 선생이 작곡가 박춘석 선생의 곡을 받아 「노래는 나의 인생」이라는 곡을 1990년대 초에 발표한 바 있습니다. 하지만, 앞서 소개한 두 노래에 비해 그 임팩트는 많이 떨어진 것이 사실이지요. 패티김 선생도 이미 은퇴했고... 저는 이제 음악 인생의 황혼을 건 명곡을 발표할 수 있는 기회를 가진 국내 가수는 조용필만 남았다고 생각합니다.  물론 여전히 정열적인 음악 활동을 하고 계시니 먼 미래 이야기지요.

    아무튼, 아홉살 꼬마때 부터 반세기 동안의 히트곡을 집대성한 50여 곡의 베스트 음반을 모두 들은 후, 마지막 곡 「川の流れのように」를 들으며 그녀의 인생사[각주:2]를 다시 생각하며, 이유를 알 수 없는 눈물이 났던 미소라 히바리처럼, 조용필도 그 언젠가에는 그런 명곡을 남겨주기를... 그래서 언젠가는 그의 평생 동안의 베스트 음반을 들으며, 그의 인생사를 떠올리며 「My Way」,「川の流れのように」같은 감동의 눈물을 흘릴 수 있기를 기원해 봅니다.

 

My Way

 

And now, the end is near.
이제 끝이 다가오는군
And so I face the final curtain.
그리고 마지막 커튼도 내 앞에 있어
My friend, I'll say it clear.
내 친구여, 확실히 말해두지
I'll state my case of which I'm certain.
나는 나만이 알고 있는 나의 얘기를 할거야
I've lived a life that's full.
나는 바쁘게 살아왔지
I've traveled each and every highway,
모든 고속도로를 다 달리면서
And more, much more than this,
그리고 더 중요한건
I did it my way.
난 내 방식으로 이걸 해왔다는 거야.

Regrets, I've had a few;
후회, 하기야 했었어
But then again, too few to mention.
하지만, 말할거리가 있을 만큼 후회한 건 없어
I did what I had to do
나는 할일만을 했고
And saw it through without exemption.
그리고 있는 그대로만을 지켜봐왔어
I planned each charted course.
나는 정석만을 따랐고
Each careful step along the byway,
한걸음 한걸음 조심해서 걸어왔고
And more, much more than this,
그리고 그리고 그것보다 더 중요한건
I did it my way.
난 그걸 내 방식대로 해왔다는 거야

Yes, there were times, I'm sure you knew
그리고 그런 때도 있었지. 아마 너도 알겠지.
When I bit off more than I could chew.
그렇다고 걱정할 만큼 많은 것도 아니야
But through it all, when there was doubt,
하지만 그동안 남은 후회들은
I ate it up and spit it out.
다 씹어버리고 뱉어내었어
I faced it all and I stood tall
그 모든 걸 대면하고 그 앞에 꿋꿋히 섰어
And did it my way!
그리고 그 모든걸 내 방식으로 해왔지

I've loved, I've laughed and cried.
사랑했고, 웃었고, 울었지
I've had my fill my share of losing.
고생도 했고, 쉬엄쉬엄한 적도 있었지
And now, as tears subside,
이제 눈물이 말라가면서
I find it all so amusing.
난 그 모든게 재밌어 보이는 거야
To think I did all that;
그 모든 것을 내가 다 거쳐왔다는 것이
And may I say, not in a shy way,
그리고, 이렇게 말해도 될까,
"Oh no, oh no, not me,
난 안 그랬다고.. 난 당당하게
I did it my way"
내 방식대로 해왔어

For what is a man, what has he got?
남자로서, 그가 가진 것으로서
If not himself, then he has naught.
그 자신이 아니라면,
To say the things he truly feels
그는 그가 진짜 느낀 것들을 말해서는 안 되지
And not the words of one who kneels.
무릎꿇는 자의 목소리로 들려서는 안 돼.
The record shows I took the blows,
세상이 내가 당당하게 살아왔다는 것을 알고 있어
And did it my way!
그리고 내 방식으로 해왔다는 것을.
Yes, it was my way...

소스 : gasazip님 블로그

 

川の流れのように
흐르는 강물처럼


知らず知らず 歩いてきた 細く長い この道
그저 모르는채 걸어왔네, 좁고도 긴 이 길을
振り返れば 遥か遠く故郷が見える
뒤돌아보니 저 멀리 고향이 보이네
でこぼこ道や 曲がりくねった道
울퉁불퉁한 길이나 구불구불 굽어진 길
地図さえない それもまた人生
지도 조차도 없는 그것 또한 인생이지
ああ 川の流れのように ゆるやかに
아, 흐르는 강물처럼 느긋하게
いくつも 時代は過ぎて
몇 세대의 시대가 흘러
ああ 川の流れのように とめどなく
아, 흐르는 강물처럼 하염없이
空が黄昏に 染まるだけ
하늘은 황혼에 물들어 갈 뿐이지

生きることは 旅すること 終わりのない この道
산다는 것은 길을 떠나는 것, 끝이 없는 이 길을
愛する人 そばに連れて 夢 探しながら
사랑하는 사람을 곁에 데리고 꿈을 찾아가면서
雨に降られて ぬかるんだ道でも
비에 맞아 질퍽거리는 길이라도
いつかは また 晴れる日が来るから
언젠가는 다시 맑은 날이 올테니까
ああ 川の流れのように おだやかに
아, 흐르는 강물처럼 잔잔하게
この身を まかせていたい
이 몸을 맡기고 싶어
ああ 川の流れのように 移り行く
아, 흐르는 강물처럼 변해가는
季節 雪どけを待ちながら
계절 눈이 녹는 것을 기다리면서

ああ 川の流れのように おだやかに
아, 흐르는 강물처럼 잔잔하게
この身を まかせていたい
이 몸을 맡기고 싶어
ああ 川の流れのように いつまでも
아, 흐르는 강물처럼 언제까지라도
青いせせらぎを 聞きながら
푸르게 흘러가는 소리를 들으면서

 

소스 : amongthespirits님 블로그

  1. 원곡은 1967년 프랑스의 팝인, Claude François의「Comme d'habitude」 (평소처럼)이라는 곡이라고 합니다. [본문으로]
  2. 미소라 히바리의 부친이 김해 출신의 재일한국인이라는 설이 있습니다. 유력한 지인의 증언에도 불구하고, 미소라 히바리 본인은 이를 공개적으로 시인한 적이 없습니다. 아무튼 가수의 재능을 보이던 어린 시절, 부모의 이혼을 겪어야 했고, 본인도 짧은 결혼생활 후 오랜 독신의 외로움을 겪었으며, 1980년대에는 절친한 친구, 남동생, 어머니와 사별하는 아픔을 겪습니다. [본문으로]
Posted by truerain
l

    저는 이른 바 파워블로거들이 시제품을 띡 받아서 대충 외관 위주로 보고 성의 없이 쓰는 리뷰를 아주 싫어 합니다. 제가 그런 리뷰를 보고 물건을 구매하여 느낀 단점들... '정말 몇 번 사용해 봤다면, 느끼지 못할 수가 없어 보이는 단점들을 그 리뷰들은 왜 지적하지 못한 걸까'하는 생각에 그 광고홍보성 블로그 리뷰들을 원망하기도 합니다.

    저는 파워 블로거도 아니려니와 그런 식의 리뷰들을 돈 받고 쓸 생각도 전혀 없습니다. 물론, 저같은 영향력이 제로에 가까운 블로거(가 아닌 블로거가 되려고 발버둥치는 문외한)에게 그런 의뢰를 할 광고주도 없다는 걸 잘 압니다. 다만, 저는 제가 필요해서 충동구매로 사게 되어 제게로 온 IT 장비들에 대한 철저한 사용자 입장에서의 리뷰들을 써 나가려고 합니다.

    당연히 제가 사는 물건들에 대한 리뷰이므로, 대중적으로 인기가 좋다거나, 이슈가 되는 IT기기가 아닌 정말로 거의 사는 사람이 저밖에 없는 물건도 포함될 수 있을 것입니다. 그래도 거기엔 실사용자인 제 구매 목적과의 일치 여부에 따라 장단점에 대한 가감없는 설명을 포함할 것입니다. 혹시 실사용을 위해 제 글을 보시게 될 분들에게 실질적인 도움이 된다면 더 바랄 나위 없이 좋겠습니다.

[직접 사서 쓰는 IT기기 리뷰]

제2편 Cenovo mini PC 2 운영체제 설치기

    지난 10월 3일, 저는 큰 맘먹고 USD115.07짜리 중국산 미니컴퓨터를 aliexpress.com을 통해 구입하였습니다. 지난 번에 Cenovo mini PC 2를 Aliexpress에서 구매하여 20여 일만에 도착한 것과 개봉기, 그리고 초기 불량에 대한 이야기를 했었지요.

'[직접 사서 쓰는 IT기기 리뷰] 제1편 Cenovo mini PC 2 개봉기 및 초기 사용기' 보러 가기

    지난 번에 이야기한 대로 (1) 운영체제가 불법 카피본이다. (2) UEFI 펌웨어모드 진입 시 화면이 끊임 없이 불규칙하게 깜박거린다. 이 두가지 사항으로 Aliexpress에 80불 부분환불을 요구하는 dispute를 걸었습니다. 셀러가 dispute를 풀어 달라고 몇 번을 재촉했지만, Aliexpress에서 중재를 들어올 때까지 버텼지요. 결국 Aliexpress의 중재로 69.04불을 환불받게 되었습니다.[각주:1] 115.07불에 사서 69.04불을 환불받아 46.03불을 지불하고 64Gb eMMC, 4Gb RAM을 갖춘 체리트레일 쿼드코어 미니PC를 각종 파이 가격에 얻은 셈이지요. 가격 대비 괜찮은 딜이었을까요? 결론은 OS 설치, 드라이버 확보, 내구성... 이 세가지에 달려 있겠지요.

Aliexpress에서 Seller와 Buyer가 직접 교섭에 실패한 후 Ali Dispute 팀에서 개입하여 중재안을 내 놓은 상황의 화면입니다. Seller는 이미 중재안을 받아 들였네요.

    물론, 다른 정품 OS를 설치하여 모든 드라이버들이 정상적으로 동작한다는 보장은 없었습니다. 또 인텔 그래픽스 드라이버가 설치되지 않은 상태에서는 지속적으로 깜박이는 현상이 있기 때문에 '(전액 환불을 안 한) 내가 잘 한건가?'하는 의구심이 들기도 했지요.[각주:2] 그래서 얼른 운영체제를 설치해 보기로 했습니다.

    이 기기가 갖는 데스크톱으로서의 중요한 단점은 Video Output Interface가 HDMI 단 하나라는 것입니다. 즉, USB 그래픽카드를 쓰지 않으면, 듀얼 모니터를 쓸 수 없다는 이야기지요. 물론 TV Box를 표방한 제품이라 듀얼모니터에 대한 고려는 없었겠지만... 하지만 최대 장점은 저전력 무소음 시스템이라는 겁니다. 이 장단점을 활용할 수 있는 쓰임새는 가정용 서버라는 판단이 들었습니다. 마침 Windows Server 2016이 얼마 전에 출시된 상태였고, 정품도 가지고 있어서 이 녀석을 설치해 보기로 하였습니다. 해외 커뮤니티에 의하면 여기에 Debian을 깔아 본 사람이 일부 드라이버가 없다는 포스팅을 했던 것이 기억이 나서 리눅스 계열은 배제했고, 당초에 깔려 있던 윈도우 10용 드라이버를 백업받았다가 Server 2016을 설치한 후 드라이버 복원을 시도하면 성공할 확률이 높다 싶었지요.

    기존에 깔려 있던 불법복제 Windows 10에서 드라이버들을 추출한 과정은 아래와 같습니다. 별도의 앱을 깔지 않고도 Powershell을 이용한 방법 등이 있는데, 저는 그냥 cmd에서 할 수 있는 간단한 명령어를 사용했습니다.

    시작-(프로그램)-윈도우즈 시스템에 있는 '명령 프롬프트'에 대고 오른쪽 클릭을 한 후 (자세히 아래의) '관리자 권한으로 실행'을 클릭합니다. '명령 프롬프트'가 열리면 아래의 명령을 입력해 줍니다.

1
C:\WINDOWS\system32> dism /online /export-driver /destination:d:drivers
cs

    /destination:d:\drivers는 제 경우에 t-flash 슬롯이 있어서 여기에 삽입한 t-flash카드가 d:로 잡혀서 가능했습니다. 경우에 따라 d:가 불가능할 수 있습니다. 그리고, 나중에 안 사실이지만, Windows Server 2016을 설치하면 이 cenovo mini PC 2의 t-flash 슬롯 드라이버를 기본적으로 잡아내지 못하더군요. 그래서 부랴부랴 USB 젠더에 넣고 드라이버들을 설치하였습니다. (SD카드 드라이버 설치 후에는 잘 작동하고 있습니다.)

    Windows Server 2016운영체제는 ISO 이미지 형태로 가지고 있고 미니 PC 2에는 ODD가 없으니 USB메모리에 운영체제 파일들을 옮겨서 부팅하여 설치하는 방법을 써야 했습니다. 게다가 구형 Bios 방식 부팅은 불가능하고 오로지 UEFI 방식의 부팅만 가능한 것으로 보였습니다. 갈수록 태산이라는....

    USB에 UEFI 방식으로 부팅 가능한 설치 이미지를 옮기는 방법에서 중요한 것은 USB 메모리를 MBR방식이 아닌 GPT 방식의 디스크로 설정하고, 파일시스템은 NTFS 방식이 아닌 FAT32 방식으로 포멧해야 한다는 것이죠. 여기서 파생하는 문제는 FAT32 파일시스템이 4Gb를 넘는 단일파일을 읽지 못해서, 4Gb를 넘는 install.wim이라는 설치이미지 속의 대형파일이 USB메모리로 옮겨지지 않는다는 것이었습니다. 갈수록 태산을 넘어 에베레스트로...

    '외장 ODD를 걍 질러버려...' 하는 지름신의 외침을 억누르며 8Gb 이상의 USB 메모리를 꽃고 관리자 모드 명령프롬프트를 열어서 아래와 같이 실행해 줍니다.

1
C:\WINDOWS\system32> diskpart 
cs

    이제 프롬프트가 도스 쉘 프롬프트에서 diskpart 프롬프트로 바뀝니다.

    아래의 명령을 입력해 줍니다.

1
DISKPART> list disk 
cs

    그러면 설치된 디스크의 목록이 출력되는데요. 일반적으로 설치된 하드디스크나 SSD가 하나면 DISK 0, 둘이면 DISK 0과 DISK 1로 표시됩니다. ODD가 있고 슬롯이 비어 있으면 디스크 Size가 0으로 표시될 것입니다. 우리가 삽입한 USB 메모리는 하드디스크나 SSD의 갯수에 따라 다르지만 보통 DISK 1이나 2, 혹은 3으로 표시될 텐데요. 표시되는 Size를 확인하고 USB가 몇번째 디스크인지를 확인해야 합니다. 보통 16Gb 짜리는 Size가 15 GB로, 32Gb 짜리는 29 GB로 표시됩니다.

1
DISKPART> select disk 3 
cs

    제 경우는 DISK 3이 USB 메모리여서 위와 같이 선택해 주었습니다.

    주의 아래 명령은 선택된 디스크를 초기화(로우포맷)해 주는 과정입니다. 따라서, 본인이 선택한 디스크가 운영체제 설치 이미지를 심으려고 하는 그 USB 디스크임을 확신할 수 있을 때에만 실행하여야 합니다. 이 명령으로 선택된 해당 디스크의 모든 데이터가 삭제되기 때문입니다.

1
DISKPART> clean 
cs

    이제 아래 명령으로 디스크 유형을 GPT로 바꿔 줍니다.

 

1
DISKPART> convert gpt 
cs

    이 디스크에 아래와 같이 파티션을 만들어 줍니다. 운영체제 설치용으로 만드는 것이므로 프라이머리 파티션 하나면 됩니다. 16Gb 짜리까지는 아래 명령으로 족하고, 16Gb를 초과하는 USB로 작업하고 있다면, 아래 명령 끝에 'size=16000' 옵션을 추가해서 실행시켜 줍니다.

1
DISKPART> create partition primary 
cs

    생성된 파티션을 아래와 같이 FAT32 파일시스템으로 빠른 (하이)포맷해 줍니다.

1
DISKPART> format fs=fat32 quick 
cs

    Windows 탐색기를 열어서 우리가 작업하는 USB 메모리에 드라이브문자 (예를 들면 G:)가 할당이 되어 있지 않다면 아래 명령을 추가로 해 줍니다.

 

1
DISKPART> assing letter=g 
cs

    물론 G:는 기존에 있지 않은 비어 있는 드라이브 문자여야 합니다. (이하 우리가 작업하고 있는 USB메모리의 드라이브 문자는 G:로 간주합니다.) 이제 exit를 입력하여 diskpart에서 빠져 나옵니다.

    이제 Windows Server 2016 ISO 파일을 마운트하여 xcopy 명령으로 USB에 심는 과정이 남았습니다. 다만, 전술한 바와 같이 install.wim 파일의 크기를 확인해서 이것이 4Gb를 넘는다면 추가 작업을 해 주어야 합니다.

    명령프롬프트 관리자모드는 닫지 마시고, Windows 탐색기를 열어 OS 이미지가 들어 있는 ISO 파일을 더블클릭하여 마운트 해 줍니다. (이때 이 이미지에 할당된 드라이브 문자를 H:라고 합시다.)

1
C:\WINDOWS\system32> xcopy h:\*.* g:\ /E /H /F 
cs

    이 명령이 오류 없이 실행을 종료하면, 이미지 안에 4Gb를 넘는 파일이 없다는 것입니다. 해피한 상황이죠. 불행히도 오류메세지가 뜨며 멈춘다면, H:\Resources폴더 안에 있는 install.wim 파일의 속성 창을 열어 크기를 확인합니다. Windows Server 2016 Standard 의 경우 4.6Gb 가량 되는군요. 눈물을 머금고 명령 프롬프트 관리자모드에서 아래 명령을 실행해 줍니다.

1
C:\WINDOWS\system32> dism /Split-Image /ImageFile:h:\sources\install.wim /SWMFile:g:\sources\install.swm /FileSize:4096 
cs

    4.6Gb의 큰 파일을 읽어들인 후 쪼개어 나누어 이미지를 만들고 저장하는 과정이므로 꽤 시간이 걸립니다. 인내심을 가지고 기다릴 필요가 있습니다. 위 명령이 성공적으로 종료되면 다시 위의 xcopy 명령을 재실행 해 주되 install.wim 파일을 제외하고 xcopy를 해 주어야 합니다. 여러 가지 방법이 있겠지만, 저는 제외파일목록 리스트법을 씁니다. 우선 시스템 디스크의 루트디렉토리(C:\)에 exludelist.txt라는 텍스트파일을 만들고 그 안의 내용은 xcopy에서 제외할 파일의 목록을 한 줄에 한 파일씩 기재하고 저장합니다. (와일드카드 문자인 *,?도 사용가능합니다.) 우리의 경우는 install.wim 하나면 되겠지요. 그리고 xcopy 명령을 아래와 같이 해 줍니다.

1
C:\WINDOWS\system32> xcopy h:\*.* g:\ /E /H /F /EXCLUDE:c:\excludelist.txt 
cs

    여기까지 잘 완료되면, 운영체제 설치를 위한 USB 디스크의 준비는 마쳤습니다. 이제 다른 PC에서 작업했다면 USB메모리를 '꺼내기'를 해 준 후, Cenovo mini PC 2에 꽂고 USB드라이브 부팅을 시도해야 하는데, 제 경우는 몇 번 시도해서 모두 실패했습니다. 화면에 아무런 표시 없이 바로 윈도우즈 부팅으로 넘어가다 보니, 무슨 키가 부팅 옵션을 선택할 수 있게 해 주는 것인지도 모르겠고, UEFI Firmware 모드에 진입해도 Boot Override 옵션이나, 부팅순서 변경에 대한 메뉴를 못찾겠더군요. 이 키 저키 다 누르다가 포기하고 Windows 10 복구 메뉴를 통한 UEFI USB메모리/ODD 부팅 메뉴를 통해 USB 설치환경으로 부팅이 가능했습니다. 불법복제라도 깔려 있어서 다행이었던 게지요.

    이제부터는 쉴새없이 불규칙적으로 깜박이는 화면과의 싸움이었습니다. 게다가 켜져있는 시간보다 꺼져있는 시간이 약 2~3배 정도 많은 상황이라 나중엔 눈까지 아프더군요. 이 괴로움은 운영체제 설치를 마치고 장치관리자에서 드라이버들을 설치하면서 인텔 그래픽 드라이버가 깔릴때까지 계속되었습니다.

    운영체제를 새로 설치한 후 드라이버들을 복원할 때, 원래는 새로 설치한 Windows OS에서 역시 관리자모드로 명령프롬프트를 열고, 아래 명령처럼 해 주면 드라이버들이 모두 복구가 되어야 합니다. 

1
C:\WINDOWS\system32> dism /online /Add-Driver /Driver:d:\drivers /Recurse 
cs

    그러나 저의 경우는 '오프라인 이미지에서만 사용할 수 있는 명령입니다.'라는 메세지가 나오면서 복구가 진행이 되지 않았습니다.

    그렇다면 GUI환경에서 하나하나 수동으로 설치해 주는 '삽질'을 쓸 수 밖에 없습니다. 새로 설치한 OS에 관리자로 로그인한 후, '파일 탐색기'를 실행하고 왼쪽 프레임의 '내 PC'에 대고 오른쪽 클릭해 주면 나오는 메뉴에서 '속성'을 클릭합니다. 그러면 시스템 정보가 나오는 새 창이 뜨는데 여기 왼쪽 프레임에 '장치 관리자'를 실행해 줍니다. 여기 보이는 '알 수 없는 장치'를 오른쪽 클릭하고 메뉴에서 '드라이버 소프트웨어 업데이트'를 클릭합니다. 이때 새로 열리는 창에서 '컴퓨터에서 드라이버 소프트웨어 찾아보기' 단추를 누르면 또 새로운 창이 뜨는데, '다음 위치에서 드라이버 검색' 아래 상자에 우리가 백업받았던 "D:\drivers"를 입력하고 그 아래의 '하위폴더 포함'란에 체크표시 해 준 후 다음을 눌러 주면 윈도우즈가 해당 드라이버를 하위 폴더에서 찾아 설치하게 됩니다.

    단, Cenovo mini PC 2의 경우 SD카드, USB 드라이버의 문제 때문인지 설치가 진행이 안되어, 드라이버 파일들을 'C:\drivers'폴더로 복사한 후 복원해 주었더니 문제 없이 대부분 설치가 되었습니다. 또, Windows가 설치되면서 기본적으로 설치된 드라이버도 백업된 폴더에서 업데이트 해 주는 것이 좋습니다. 그래픽 드라이버를 기본으로 깔린 마이크로소프트의 것이 있었음에도 이렇게 인텔의 것으로 업데이트 해 주고 나서야 깜박임이 사라졌습니다. 제 경우는 현재 Broadcomm 관련 무선 인터넷과 관련된 장치가 설정이 잘못되어 있고, '알 수 없는 장치' 2개가 남아 있습니다만, 기본적인 동작에는 문제가 없어 보입니다. LAN도 RJ45로 유선 연결해서 서버로 쓸 예정이니, 특별히 문제될 건 없구요.

    다행히도 얼추 기본적인 운영체제의 설치 및 드라이버 설치는 마쳤습니다. 우리 돈으로 약 5만5천 원 가량 들어간 이번 구매는 그럭 저럭 성공이라고 볼 수 있겠네요. 오랜 시간 사용해도 튼튼히 잘 버텨 주기만을 바랄 뿐입니다. 이제는 원격데스크톱 연결 켜 놓고, 모니터연결은 빼고 Fax모뎀과 복합기를 USB에 물려 놓고 라즈베리파이 옆에 짱박아 놨습니다. 필요할 때 원격 접속하여 작업할 수 있도록 해 놓은 거죠. 앞으로 팩스서버 설정, 인쇄서버 설정 등을 진행해 봐야 겠네요.

  1. 실은, 50% 부분환불을 목표로 이보다 월씬 큰 금액인 80불 환불을 요청한 것입니다. 그러면서 seller와의 메세지를 통해 압박을 하니 거의 70불에 가까운 금액을 환급받게 된 것이죠. [본문으로]
  2. 그러나, Aliexpress dispute팀의 중재 결과, 전액환불을 받기 위해서는 제 부담으로 반품 국제택배를 보내고 환불받아야 했습니다. 저는 잘못한 게 없는데... 황당한 정책이더군요. [본문으로]
Posted by truerain
l

라즈베리파이에 EMP (Nginx + MariaDB + PHP) 설치하기

   오늘은 라즈베리파이에 동적인 웹 서비스를 가동하는데 필요한 3종세트, 즉 웹서버 + 데이터베이스 서버 + PHP를 설치하고 기본적인 설정을 하는 방법에 대한 이야기를 해 보겠습니다.

1. 들어가는 말

   전통적으로 리눅스에는 Apache 웹 서버와 Mysql DB서버를 PHP에 연동시켜 사용해 왔습니다. 하지만 최근 경향을 보면 개인 서버나 소호, 중소기업의 경우 Apache 웹서버 보다는 설정이 보다 간편하고 적은 접속자 수에 적합한 Nginx의 사용을 더 선호하는 편이고, DB서버의 경우 Oracle에 편입된 Mysql의 미래에 대해 의구심을 가지는 개발자들이 이를 대체하는 MariaDB를 fork하여 그 사용자 기반을 넓혀가고 있지요. 이에 따라 데비안8 버전에 기반을 둔 Raspbian 운영체제가 설치되어 있는 라즈베리파이에도 Nginx, MariaDB, PHP를 서로 연동시킨 동적 웹서버를 구현해 보도록 하겠습니다.

   이 글에서는 우리의 라즈베리파이가 내부네트워크 192.168.0.2의 주소를 가지고 있다고 가정합니다.


2. 각 애플리케이션의 설치

(1) Nginx 설치

1
$ sudo apt-get install nginx 
cs

   아래와 같이 재부팅없이 nginx 웹서비스를 실행해 줍니다.

1

$ sudo systemctl start nginx.service 

cs

   데비안8의 nginx를 설치하면 기본 웹사이트의 위치는 /var/www/html 입니다.

   nginx가 잘 설치되었다면, 이 기본 웹사이트는 내부 네트워크 PC에 있는 웹브라우저 주소창에 192.168.0.2를 입력 시 아래와 같은 기본 환영 페이지로 보이게 됩니다.

 

(2) Mariadb 설치

1
$ sudo apt-get install mariadb-server mariadb-client 
cs

   위 명령을 실행하면 설치가 진행되면서 MariaDB의 root 암호를 처음 설정하는 파란색 대화창이 열립니다. 보안을 위해 운영체제 root 암호와는 다른 새 암호를 권장합니다. 새 암호를 입력하면, 다시 한번 root 암호를 확인 입력하는 화면에 동일한 암호를 입력합니다. 이후 나머지 설치과정을 마치게 됩니다.

 

(3) PHP 설치

1

$ sudo apt-get install php5-fpm 

cs

   위 명령의 실행으로 fastCGI를 지원하는 PHP-FPM (PHP FastCGI Process Manager)를 설치해 줍니다. PHP-FPM도 Nginx처럼 systemd에 의해 관리되는 서비스(대몬)입니다. FastCGI 서버죠.

 

3. 각 애플리케이션의 설정

(1) Nginx 설정

   아래와 같이 nginx의 설정파일을 editor로 엽니다.

sudo nano -w /etc/nginx/nginx.conf

1
$ sudo nano -w /etc/nginx/nginx.conf 
cs
 

   nano 에디터 화면에서

keepalive_timeout  65;

라는 라인을 찾아 숫자 65를 2로 바꾸어 줍니다.

   이번에는 default 사이트의 설정 파일을 바꿔줄 차례입니다.

1
$ sudo nanow -w /etc/nginx/sites-available/default 
cs

   여기서 다음과 같은 줄을 찾습니다.

 # Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

   여기 index로 시작하는 라인 제일 끝에 다음과 같이 index.php를 추가해 줍니다.

 index index.html index.htm index.nginx-debian.html index.php;

   이 파일의 좀 더 아래쪽으로 내려가서 다음과 같은 부분을 찾습니다.

 #location ~ \.php$ {
    #include snippets/fastcgi-php.conf;

#    # With php5-cgi alone:
#    fastcgi_pass 127.0.0.1:9000;
#    #With php5-fpm:
#    fastcgi_pass unix:/var/run/php5-fpm.sock;
#}

   윗 부분에서 일부 주석처리를 제거해 다음처럼 편집해 줍니다.

 location ~ \.php$ {
    include snippets/fastcgi-php.conf;

#    # With php5-cgi alone:
#    fastcgi_pass 127.0.0.1:9000;
     # With php5-fpm:
     fastcgi_pass unix:/var/run/php5-fpm.sock;
}

   마지막으로 다음과 같은 절차는 작동을 위해 반드시 필요하지는 않지만, 보안 강화를 위해 진행을 권장합니다.

   바로 아래 부분에서 다음과 같은 부분을 찾습니다.

 # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
    #deny all;
#}

   이를 다음과 같이 주석 처리 제거를 해 줍니다.

 # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
    deny all;
}

   편집이 완료되었으면 Control+X키를 누르고 저장 여부를 확인하는 메세지에 y키를 눌러 저장 후 nano 에디터를 빠져 나옵니다.

   그리고 재부팅 없이 설정파일이 반영되도록 다음과 같이 nginx 서비스를 재시작해 줍니다.

1
$ sudo systemctl reload nginx.service 
cs

 

(2) PHP 설정 1 (웹서버와의 연동)

   이제 PHP-FPM의 설정파일을 다음과 같이 엽니다.

1

$ sudo nano -w /etc/php5/fpm/php.ini 

cs

   이 파일에서 아래와 같은 부분을 찾습니다.

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
;cgi.fix_pathinfo=1

   이 라인은 꽤 한참 아래로 내려가야 나오는데, 제 경우는 771번째 줄에 있었습니다. 이 설정을 아래와 같이 바꾸어 줍니다.

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

   cgi.fix_pathinfo의 설정값을 0으로 바꾸어 주는 것인데, 앞의 ; 주석을 제거해 주어야 합니다. 그렇지 않으면 PHP가 이 설정값을 기본값인 1로 인식합니다.

   자, 이제 PHP가 잘 작동하는지 PHP 상태 정보를 불러오는 php 페이지를 만들어 봅니다. 다음과 같이 새 php 페이지를 만들어 줍니다.

1
$ sudo nano -w /var/www/html/info.php 
cs

   이 파일에 아래 내용을 붙여 넣고 Ctrl+X키로 저장(y입력) 후 nano에디터를 나옵니다.

<?php
phpinfo();
?>

   자, 이제 네트워크 내의 PC에서 웹브라우져를 열고 주소창에 아래 주소를 입력해 봅니다.

   아래 그림과 비슷하게 PHP의 정보가 웹브라우져에 출력된다면 웹서버와 PHP가 잘 연동되도록 설정된 것입니다.

 

(3) PHP설정 2 (데이터베이스 서버와의 연동)

   Debian 패키지 시스템에서 PHP는 여러가지 기능이 모듈화되어 각각의 패키지 형태로 제공됩니다. 어떠한 모듈들이 있는지는 다음과 같은 명령으로 확인할 수 있습니다.

1
$ sudo apt-cache search php5 
cs

   이 중에서 본인이 어떤 웹서비스를 할 것인가에 따라 본인에게 필요한 모듈을 골라서 설치해 줄 수 있습니다. DB연동도 PostgreSQL, sybase/MSSQL Server 등에 대한 연동까지 가능합니다. MariaDB는 Mysql을 완전히 대체(drop-in replacement)하는 애플리케이션이므로 MariaDB와의 연동을 위해서도 php5-mysql 혹은 php5-mysqlnd를 설치해 주어야 합니다. 끝에 붙은 nd는 native driver의 약자로서, php5-mysqlnd의 사용이 더 권장된다고 하네요. 우리도 이 녀석을 설치해 봅니다.

1
$ sudo apt-get install php5-mysqlnd 
cs

   특별히 설정파일을 만질 필요 없이 설치 과정 중에 스크립트가 알아서 다 연동 시켜 주고요. 우리는 그냥 다시 한번 웹브라우저에서 php 정보를 다시 불러서 확인해 보면 됩니다.

 

   위 그림과 비슷하게 설정이 되었다면 PHP와 MariaDB가 잘 연동된 것입니다.

   자, 이제 모든 설정을 마쳤으면, 보안상 우리가 생성한 info.php 파일은 삭제하는 것을 권장합니다.

 

4. 나오는 말

   이상과 같이 데비안 리눅스가 돌아가고 있는 라즈베리파이에 Nginx 웹 서비스, PHP 동적페이지 서비스, MariaDB 데이터베이스 서비스를 서로 연동하여 설치하는 방법을 살펴 보았습니다. 저렴한 구매비용뿐 아니라, 전력 소모도 적고 소음도 없으며 공간 마저 거의 차지하지 않는 이 기특한 물건 덕분에, 개인이나 소호, 중소기업까지도 이 작은 보드에 LEMP를 설치하여 동적 웹 서비스를 하기에 무리가 없는 시대가 도래하였습니다. 이제 이 웹서버에 여러 유용한 웹 콘텐츠를 올려 유용하게 사용해 봅시다. [끝.]

Posted by truerain
l