setroubleshoot로 SELinux 권한 문제 해결하기

최근 워드프레스를 업데이트 하면서, 분명히 apache에 파일 쓰기 권한을 루트 디렉터리에 주었음에도 불구하고(775 Permission) 계속 업데이트를 할 수 없다는 메시지가 떠서 열심히 구글링을 하던 도중, setroubleshoot이라는 어-썸한 툴을 발견했다.
사용법도 엄청 간단한데, CentOS 7 기준 yum install setroubleshoot으로 설치하여 사용하면 된다.
이후에 SELinux 권한 관련 문제가 발생하게 되면,

1
sealert /var/log/audit/audit.log
cs

위 명령어를 통해 어떤 권한을 수정하면 되는지 확인하면 된다.

한국에서 유독 SELinux 관련 문제가 발생하면 SELinux를 비활성화하거나 Permissive 모드로 사용하란 의견이 많은데 난 정말 반대다.
물론, 쉽고 빠른 방법이긴 하지만 부수적인 문제가 너무 많이 발생하는 해결 방법이기 때문이다. SELinux라는 것을 애초에 왜 만들었겠는가?

Raspberry Pi Zero W의 Wi-Fi 설정

최근 Argon40를 통해 Raspberry Pi Zero W를 구입했습니다.
Raspberry Pi 3과 같은 Wireless LAN 칩을 사용한 Zero 시리즈로 단돈 15$면 배송비 포함으로 라즈베리 파이로 할 수 있는 것들을 대부분 할 수 있죠.
물론 Orange Pi Zero보다는 가격 대비 성능이 떨어지지만,
그래도 Raspberry Pi라는 플랫폼의 특성 상 지원이 빵빵하다는 점에서 사용하기 편한 점이 많습니다.

처음 Zero W를 받고 설정을 해 보았는데, Wi-Fi 연결이 되지 않았습니다. Debian에서는 AP 연결 설정을 /etc/wpa_supplicant/wpa_supplicant.conf를 통해 하게 되어 있는데, 이 중에서 Country 설정을 KR로 바꾸게 되면 wpa_supplicant 프로세스가 맛이 가버리는 문제가 있습니다.

따라서 이 문제를 해결하기 위해서는 Country 설정을 다른 나라로 바꾸고,
Airport 계열의 라우터를 사용하시는 경우 국가 설정을 대한민국 이외의 국가로 설정해 주셔야 접속이 가능합니다.
이는 wpa_supplicant를 -dd 옵션으로 실행하여 보면 확인할 수 있습니다.

이렇게 Wi-Fi 연결 설정을 마친 뒤에는 아마 raspi-config나 GUI 상에서 Wi-Fi를 설정하는 것이 불가능해질 것입니다.
그러나 wpa_supplicant.conf 파일의 Wi-Fi 설정을 비운 후 iwlist를 통해 스캔을 해 보면 잘 되므로,
너무 걱정하지 않으셔도 됩니다.
Stretch뿐만 아니라 Jessie에서도 같은 문제가 일어나는 걸로 봐서는 Broadcom 칩셋의 드라이버 문제로 보입니다.

WordPress에서의 업그레이드 오류 대처법

필자는 Centos 7을 SELinux Enforced 모드가 활성화된 채로 운용하고 있다.
이게 당연히 맞는 이야기이고, 몇 가지 문제점이 생긴다고 해서 SELinux 자체를 비활성화 시킨다는 것은 내 정보는 공공재입니다~ 하는 것과 마찬가지라 생각해 문제가 조금씩 있더라도 자료를 찾아가며 해결하려 하는 편이다.

최근에 APM(Apache + PHP + MySQL)에서 Nginx + PHP-fpm + MariaDB 구성으로 넘어오면서 데이터 이전을 했는데, 워드프레스 코어 업데이트가 되지 않는 문제가 발생했다.
구글신의 힘을 빌어 chcon -t httpd_sys_script_rw_t (path_to_wp-content)를 먹이면 된다는 말에 혹해 해봤지만 실패.
혹시나 chowning이 문제인가 싶어서 nobody:nobody를 해봤는데도 실패.
나는 nginx를 사용하고 있었기에, 당연히 nginx daemon이 파일 쓰기 권한이 없어서 그런가보다 싶어서 chown nginx:nginx를 해봤지만 이것도 실패.

결과적으로 chown apache:apache가 답이었다.
워드프레스 루트 폴더의 php 파일들은 chcon -t http_sys_script_exec_t *.php로 권한을 주어야 하고, 워드프레스 루트 폴더는 chown -R apache:apache (path-to-wp-root) 으로 소유자 설정을 한 후, wp-content 내의 폴더들은 chcon -R -t httpd_sys_script_rw_t *를 주어야 정상적으로 작동한다.

위 내용을 적용해도 안 될때는, setenforce 0로 SELinux Enforcing 모드를 Permissive로 바꾼 뒤에 하려던 작업(워드프레스에서의)을 실행해보고, /var/log/audit/audit.log를 참고해 어느 권한이 문제가 되는지 확인해 보자.

-추가-
이렇게 적용을 해도 무슨 문제인지 PNG파일은 업로드가 되지 않고, JPG/JPEG 파일만 업로드가 정상적으로 된다. 이건 워드프레스 자체의 문제로 보이는데… 더 알아봐야겠다.

ODROID C2 사용기.

_DSC1215_DSC1216_DSC1218_DSC1219_DSC1223 _DSC1231

폼팩터는 RPi3과 동일하다.
스토리지로 eMMC를 사용할 수 있다는 것과, Bluetooth 및 WLAN 탑재가 되어 있지 않다는 것이 주요한 차이점.
물론 arm64 환경이라는 것도.

microSD를 사용한다면 Sandisk社의 제품을 사용하는 것이 좋다.
현재 필자가 사용하고 있는 제품은 Sandisk microSD Extreme 32GB UHS-I U3.
하드커널에서 공식적으로 부팅 시에 지연 현상을 방지하려면 Sandisk社의 제품을 사용할 것을 명시하고 있다.

한 가지 이해가 안 가는 점이 있다면 다들 공감하는 microSD의 삽입 위치.
참 애매한 위치다.

_DSC1234_DSC1238 _DSC1237

케이스를 씌운 모습.
측면에는 microUSB OTG 포트와, HDMI 풀사이즈 포트, DC 전원 포트가 있다.
DC 전원 포트를 사용하는 대신 microUSB로 전원 공급 역시 가능하다.

VNC 서버 설치기. (ODROID C2)

라즈베리 파이의 성공을 필두로, 많은 종류의 임베디드 보드가 생겨났다.
SATA를 지원하는 큐비보드나, 아주 작은 사이즈의 C.H.I.P. 등 기능도 모양도 다양하다.

이 중에서 나는 ESP8266을 제어하기 위한 서버가 필요했기 때문에, 커뮤니티 지원이 가장 활발한 라즈베리 파이 3과 조금 더 나은 하드웨어 스펙을 자랑하는 ODROID C2 중에서 고민하다 결국 후자를 택했다.

RPi3과 C2의 하드웨어 스펙 중 가장 큰 차이가 나는 부분은 CPU 클럭과 메모리, 그리고 OS 아키텍쳐이다.
RPi3과 C2 모두 ARM의 Cortex-A53 쿼드코어를 사용하지만 RPi3은 1.2GHz이고, C2는 2GHz로 조금 더 높다.
메모리의 경우는 DDR2 1GB(RPi3) vs DDR3 2GB(C2).
사용하는 OS 아키텍쳐는 RPi3이 32bit, C2가 64bit이다.
자세한 비교는 다음 링크를 참고하면 될 것이다. (링크)

사실 ARM64라는 플랫폼에서의 Linux 지원은 현재 아직 미흡한 단계지만, 성능이 조금 더 낫지 않겠나 하는 생각에 산 것이다.

참고로 C2의 경우 기본 지원 OS는 안드로이드이다.
제조사인 하드커널社는 임베디드 개발 보드로 유명한 한국 회사.
리눅스도 배포하고 있지만 어디까지나 심심풀이로 하는 것에 지나지 않는다고.

본론으로 들어가서, ODROID C2에 VNC 서버를 사용하려고 하면 애로사항이 조금 있다.
VNC 서버 중 tightvncserver나 vnc4server를 사용할 경우, 화면이 정상적으로 표시되지 않고 회색으로만 나타나는 현상이 발생한다.

이를 해결하기 위해선 ~/.vnc/xstartup을 수정해 주면 된다.

마지막 줄의 /etc/X11/Xsession을 주석 처리해 주고, 밑에 다음과 같이 두 줄을 추가한다.

1
2
3
# /etc/X11/Xsession
unset DBUS_SESSION_BUS_ADDRESS
exec /usr/bin/matesession &
cs

Python 3.5.2 설치하기. (CentOS 7)

CentOS 7에는 기본적으로 Python 2.7이 설치되어 있다.

하지만 Python 3.5 버전 이상이 필요한 경우 yum으로는 최신 버전이 3.4이고, 설치할 때 Python 3용 pip가 함께 설치되지 않는다.

이런 귀찮음이 있어서 그냥 curl로 make install을 하는 편이 편하다.

방법은 다음과 같다.

[rita@rita /]# cd /usr/src
[rita@rita src]# curl -O https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
[rita@rita src]# tar xf Python-3.5.2.tgz
[rita@rita src]# cd Python-3.5.2
[rita@rita Python-3.5.2]# ./configure
[rita@rita Python-3.5.2]# make
[rita@rita Python-3.5.2]# make install

curl로 파일을 받을 폴더로 지정한 /usr/src는 사용자 취향대로 수정은 하면 되고…
/usr/local/bin에 들어가 보면 설치한 Python 3.5.2는 python3 또는 python3.5로 실행할 수 있다.
pip 역시 pip3.5 또는 pip3 모두 가능.

make install 후 python3 명령어 실행이 되지 않는다면 reboot를 하자.

SKY IM-100 구입기.

지금까지 써오던 iPhone 5s가 조금씩 느려지고 있기도 했고, 안드로이드로 갈아타야지 하는 생각이 겹쳐 Xperia X Performance와 SKY IM-100 중 고민을 하다 IM-100으로 생각이 기울었다.

첫 번째로 저렴한 가격, 그리고 두 번째로 깔끔하고 각진 디자인이 그 이유였다.
필자의 경우 휴대전화의 주 사용 목적이 SNS와 유튜브 정도라서, 굳이 플래그십 스마트폰 정도의 성능이 필요하지 않은 점도 한 몫을 했다.

구입한 가격은 10만 원 대.
기기 출고가가 40만원 대로, 공시지원금을 다 받는다면 할부원금이 약 10만 원 대로 나온다.

_DSC1158

박스의 전면부.
요즘은 애플 제품의 패키징 디자인을 많이 따라 심플한 것이 특징.

_DSC1171

박스를 열어 보면 IM-100이 반겨준다.
_DSC1185_상당히 각진 디자인.
예전 Xperia Z 시리즈나, Vega Iron을 보는 느낌이다.

_DSC1179

스피커와 microUSB 포트.

_DSC1180

제품의 상징인 금색 휠과 전원 버튼, 그리고 USIM/microSD 슬롯.

_DSC1197

요즘은 일체형 디자인이 많아 이런 식으로 microSD를 삽입할 수 있도록 하는 경우가 많다.
간혹 microSD 또는 USIM을 추가로 하나 더 삽입하도록 해서 Dual SIM을 구현하는 경우도 있고.

_DSC1181

상단의 3.5mm 잭과 소음 감소용 마이크.

_DSC1188

번들 충전기와 충전 케이블.
IM-100은 스톤으로 무선 충전도 가능하고, microUSB를 통해 유선 충전도 가능하다.

_DSC1189

DC 5V/1.6A 출력.
스마트폰이 보급될 때 쯤의 충전기 출력은 약 1A.
이후 스마트폰의 스펙이 상향평준화 되면서 조금씩 늘어나더니 요즘은 1.5A 이상이 많다.
아쉽게도 퀵차지는 지원하지 않는다.

_DSC1195

번들 무선 충전기 겸 스피커인 스톤.
첫 느낌은 턴테이블을 닮았다는 것.
LED를 달은 턴테이블이랄까.

_DSC1190 _DSC1191 _DSC1193

스피커의 출력은 3W+3W+우퍼.
2600mAh 배터리가 내장되어 있어 휴대용 스피커로도 사용할 수 있다.
무선 충전기로 사용할 때 출력은 5V/1A.

한 차례의 구조조정을 겪고 탄생한 IM-100.
모바일 사업부의 존치를 고민하고 있는 LG, 소니와 달리 제대로 소비자의 마음을 간파한 것 같다.
앞으로도 계속 좋은 제품을 출시해 주길.

SAMSUNG 850 series EVO 250GB (MZ-75E250B/KR) 구입기.

원래 사후 지원이 잘 되는 삼성 제품을 예전부터 봐 오긴 했었다.
좋은 평가도 있었지만 그래도 SSD 하나가 뭐 그렇게 다르겠나 싶어서 리뷰안테크 제품을 구입했고,
일이 터졌다.

때는 지난 주 토요일 자정.

갑자기 컴퓨터가 부팅만 하면 OS를 로드하는 도중 크래시가 나는 증상이 생겼다.
불과 1시간 전까지만 해도 멀쩡하게 사용했던 컴퓨터가 대체 왜…?
불길한 기운이 들어 급하게 Windows 복구 디스크를 만들어 복구를 실행했다.

그리고 그 이후, SSD가 아예 인식이 되지 않는 상황에 빠져 버렸다.
“그래, SSD에는 중요한 자료가 없으니 괜찮아. 하드는 괜찮겠지” 하는 마음으로 다른 컴퓨터에 하드를 물려 보았다.

파티션 인식이 되질 않는다.

패닉이었다. 2시까지 약 2시간 동안 어떻게든 살려야 한다는 생각으로 온갖 방법을 다 동원해 봤지만 어쩔 수가 없었다.
눈물을 머금고 하드를 포맷한 뒤 건질 수 있는 자료들만 건지고(하드 용량 중 1테라를 따로 파티셔닝해놓은 덕에 그 자료들은 온전했다) Windows 10을 설치했다.

그렇게 해서 부랴부랴 새벽에 SSD를 퀵으로 주문하고 아침에 다시 일어나 봤더니 주말엔 배송을 안 한다고(…)

덕분에 오늘 바깥 바람도 쐴 겸 물건을 직접 수령해 왔다.

 _DSC1145_DSC1150

 인클로저는 경량의 얇은 금속 재질. 발열을 해결하기 위한 것으로 보인다.

_DSC1153 _DSC1155 _DSC1156 _DSC1157죽어버린 SSD를 분해해 봤다.
처음엔 흔한 접촉 불량인가 싶어 커넥터를 다시 납땜해 보기도 하고, 지우개로 단자 부분을 문질러도 봤지만 별 소용이 없었다.

이 제품의 컨트롤러는 SMI社의 SM2246EN으로, 주로 중저가형 SSD에 많이 사용된다.

여담이지만 이거, 나름 1600TBW까지 버틴다고 선전한 물건이다(…).
개인적으론 저장장치에 투자를 조금 더 해서, 필자와 같은 사태를 겪지 않았으면 한다.

이 일이 있기 전에도 가끔 SSD가 인식이 되지 않는 일이 있었다.
그 때마다 SATA 선만 뺐다 끼워주면 문제가 없길래, 접촉 불량 문제인가 했었다.
다시 말하지만, 저장 장치엔 투자를 조금 더 하자(…).
물론 CTRL+S는 기본 소양이고.

새로 산 850 series EVO는 나름 괜찮다.
TLC라 수명이 짧다고 꺼리는 사람도 있겠지만, 일반적인 사용자에게는 문제가 되지 않는 수준.
Data Migration 툴을 제공해 주어서 OS 설치를 다시 하지 않아도 된다는 점이 편했다.
가격도 10만원 이하이니 가성비로는 상위권이지 않을까.

SSD_INFO SSD_MARK

TLC답지 않게 높은 성능을 자랑한다.
보통 TLC의 경우 Access Time이 늦기 마련인데, 이것은 그런 현상이 없다.

작은 용량의 SSD를 구입하여 사용하는 경우, 용량의 제약이 많아 WIMBOOT를 사용하기도 한다.
그러나 별도로 PE버전의 Windows에서 작업한 이미지를 다시 설치해야 하기 때문에 복잡한 점이 많다.
사용하는 OS가 Windows 10인 경우, CompactOS를 활용하면 WIMBOOT만큼은 아니지만 공간 확보에 도움을 줄 수 있다.

cmd

ipTIME V108을 분해해 보았다.

간헐적으로 일어나는 속도 저하 때문에 도저히 견딜 수가 없어 새로운 유선 공유기를 주문하게 되었다.

펌웨어 플래싱을 새로 해 보아도 해결되지 않는 것으로 보아 하드웨어에 문제가 있는 듯 해서 열어보았다.

KakaoTalk_20160712_194044079

ipTIME V108의 전면부. 보통 V 넘버링은 저가형 모델, 혹은 VPN 기능 탑재 모델로 알려져 있다.

KakaoTalk_20160712_194044668 내부 부품들.
MICREL社는 현재 Microchip社에 인수된 회사이다.
KSZ8695X는 GoC(Gateway-on-a-Chip)인데, ARM992T(@166MHz)를 코어로 하는 IC이다.
100Mbps 지원은 무리가 없는 수준.

아래 넓직한 칩은 SPANSION社의 CMOS Flash Memory. 16Mbit의 용량이다.
4X32SDRAM이라 쓰인 칩은 StarRam社 제품. 중국 제조사인지 데이터시트가 검색되지 않는다.

전체적인 구성을 볼 때 전혀 문제가 없는데, 아마도 메인 칩인 KSZ8695X의 발열 문제로 인해
(평상시에 52℃이다) 성능 문제가 발생하는 것이 아닌가 한다.

— 추가 —

캡처

telnet으로 접속해 보니 busybox를 돌린다…?

동영상 파일에서 음성 스트림을 추출해 보자!

모종의 경로로 음원을 구하다 보면 동영상 파일에서 음성 파일을 추출하는 경우가 많죠.
예전엔 nicosound 등의 사이트가 있었기도 하고요.

이 포스트에서는 동영상을 FFMPEG를 통해 음성 스트림을 Direct Stream Copy로 추출하는 방법에 대해
논해볼까 합니다.

FFMPEG란 인코딩을 위한 툴입니다. CLI 환경에서 돌아가는지라 이를 활용한 것들이 대표적으로
유X일이라던가, 다X팟 인코더 등이 있죠.

사용법은 간단하게 하면 다음과 같습니다.

$ ffmpeg –i input.mp4 output.avi

이것을 batch 파일을 통해 이용해 보도록 합시다.

@echo off
FOR %%f IN (%1, %2, %3, %4, %5) DO (ffmpeg.exe –i %%f –c:a copy –vn %%f.m4a)

이렇게 Direct Stream Copy를 하게 되면, 손실 포맷(m4a, mp3, ogg 등)으로 다시 인코딩하게 되어 생기는 손실을 막을 수 있습니다.

별도로 경로를 지정하고 싶다면 -vn 옵션 뒤를 수정하면 됩니다.
위 batch 파일은 5개의 큐만 존재하므로 원한다면 %6, %7 등으로 뒤를 수정해 큐를 늘릴 수 있습니다.