linux 2014.12.08 01:36

Linux VFS kernel(1)

 연구하고 있는 분야에서 Linux Virtual File System(VFS)에 해당하는 커널을 건드려야 할 일이 생기고 말았다. 이 분야에서 커널을 건드리게 될 줄은 몰랐지만 아무튼 필요하다고 판명되었으니 오늘부터 공부한 것들을 조금씩 정리하기로 했다.

 이 시리즈는 처음엔 VFS에 대한 간단한 소개로 시작하여, 마지막으론 VFS 커널 소스를 수정하고 컴파일 하는 것으로 끝나게 될 것이다.

 세상엔 수많은 파일 시스템들이 존재한다. MS-DOS 시절부터 사용해온 FAT가 있고, Linux를 책임져온 ext 시리즈도 있을 것이며, 삼성 모비낸드에 최적화된 RFS, MS의 메인 파일 시스템인 NTFS, 사과농장의 공식 파일시스템인 HFS 등등, 지금 만들어지고 있거나 사용되고 있거나 이미 도태된 파일 시스템들은 수도 없이 많을 것이다.

 물론 이 수많은 파일 시스템들이 모든 운영체제에서 바로 인식되지는 않는다. 파일 시스템마다 파일을 저장하는 방식, 파일 시스템 자체의 구조 등이 완전히 다르기 때문에 운영체제는 각각의 파일 시스템을 이해하기 위한 무언가가 있지 않다면 그 파일 시스템들을 인식할 수 없을 것이다. Windows에선 이를 드라이버가 담당한다. 예를 들어 HFS드라이버를 깔면(대개 맥의 부트캠프 지원 유틸리티에서 설치하게 된다) HFS에 대한 읽기, 쓰기가 가능해지는 것이다. 즉, Windows 시스템에 대한 거의 문회한적 이해도를 바탕으로 이러한 상황을 근사해보면 <그림 1> 비슷한 구조가 나올 것이다

<그림 1>

하지만 Linux에선 다르다.

(작성중)

신고

'linux' 카테고리의 다른 글

Linux VFS kernel(1)  (0) 2014.12.08
Ports below 1024 can be opened only by root.  (0) 2014.03.24
Taking a web page's screenshot on CLI only environment  (0) 2013.10.16
[Ubuntu] vsftpd umask  (0) 2013.07.26
Tunneling SSH over HTTP(S)  (0) 2012.12.10
Setting Ubuntu Server 12.04 on VMWare  (0) 2012.12.07
linux 2014.03.24 12:34

Ports below 1024 can be opened only by root.

Tip/programming 2013.11.23 01:16

Flask Tutorial

linux 2013.10.16 02:03

Taking a web page's screenshot on CLI only environment

 모종(=알바)의 이유로, 백엔드 단에서 특정 URL을 받으면, 그 URL에 해당하는 웹 페이지의 스크린 샷을 찍어서 돌려줘야 하는 작업을 하게 되었다. 처음엔 불가능할 줄 알았는데(+그냥 보라고! 왜 이걸 서버를 시켜!), 언제나 방법은 있더라. 

 wkhtmltoimage가 바로 그것이다. 이 프로그램은 CLI 환경에서 특정 URL을 jpg나 png로 저장할 수 있도록 해준다(자매품으로 wkhtmltopdf 같은 것도 있다). X Server를 통해 웹 페이지를 Graphically Rendering한 다음, 이에 대한 스크린샷을 만드는 것이다(라고 삽질 결과 예상해본다). 그러나 순수한 CLI 환경에선 X Server 같은걸 키우질 않는다. 이걸 어찌해야 할까? 오늘 이 포스트에서 정리할 내용은 이에 대한 해답을 찾는 삽질 과정이다.

 갑님이 제공해주신 서버가 CentOS인 관계로 오늘 설명은 CentOS 6.2 기준으로 한다. 난 우분투가 좋은데......

Part 1. Install wkhtmltoimage

먼저 wkhtmltoimage를 설치한다. yum은 아니고, wget으로 tarball을 받는다.

[root@xx html]# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2

[root@xx html]# tar xvf wkhtmltoimage-0.11.0_rc1-static-i386.tar.bz2

의외로, 압축을 푼 결과는 컴파일해야하는 소스가 아닌 바이너리이다. 편하네(물론 제대로 실행이 안 되면 안 편하겠지만). 그 다음 wkhtmltoimage를 /usr/bin으로 옮겨준다(취향). 권한 설정도 잊지말고 하자.

[root@xx wkhtmltoimage-0.11.0_rc1-static-i386]# mv wkhtmltoimage-i386 /usr/bin/wkhtmltoimage

[root@xx bin]# chmod a+x /usr/bin/wkhtmltoimage

그리고 사용법 대로 한번 써본다.

[root@xx html]# wkhtmltoimage www.google.co.kr google.jpg

Loading page (1/2)

Rendering (2/2)                                                    

QPixmap: Cannot create a QPixmap when no GUI is being used   ] 25%

QPixmap: Cannot create a QPixmap when no GUI is being used

QPixmap: Cannot create a QPixmap when no GUI is being used

QPixmap: Cannot create a QPixmap when no GUI is being used

QPixmap: Cannot create a QPixmap when no GUI is being used

QPixmap: Cannot create a QPixmap when no GUI is being used

QPixmap: Cannot create a QPixmap when no GUI is being used

Segmentation fault

 wow... segfault... 물론, 이래서 되면 삽질이라고 안 했겠지. wkhtmltoimage는 X 환경을 필요로 하는 것이었다. 정말 CLI만 되는 환경에서 그래픽 렌더링이 될줄 믿고있던 내가 바보지.

Part 2. Install Xvfb

 그런데, Only CLI 환경에서 X Window를 깔아서 풀 그래픽을 보는 건 영 미덥지 않다. 그리고 역시 나 말고도 이런 생각을 한 사람은 있었다. 그래서 우린 X Window 대신 CLI 환경에서 X Window Desktop을 가상으로 만들어주는 Xvfb라는 것을 설치하기로 한다.

[root@xx html]# yum -y install Xvfb (대소문자 구분 주의!)

그리고 역시 구글링을 통해 Xvfb의 사용법을 알아내서 한번 가상의 X Window를 만들어 본다.

[root@xx html]# Xvfb :1 -screen 0 1024x768x24

대충 '1번 (가상)Display에 1024x768, 24bit짜리 가상 스크린을 만든다' 라는 뜻이다.

[root@xx html]# Xvfb :1 -screen 0 1024x768x24

Could not init font path element unix/:7100, removing from list!

역시 공짜는 없지. font path를 보아 하니 X Font Server 관련 문제임을 유추할 수 있다. X Window 환경에 대해 자세히 파본 적은 없지만 언뜻 어깨너머 본 바로는 X Window의 구성요소 중엔 폰트 렌더링을 담당하는 Font Server가 있단 소릴 들은 적이 있어서.

Part 3. Install & Run xfs

 문답무용

[root@xx html]# yum -y install xfs

xfs가 설치되었다. xfs 구동

[root@xx html]# xfs&

[1] 12116

[root@xx html]# xfs notice: ignoring font path element /usr/share/X11/fonts/100dpi:unscaled (unreadable)

xfs notice: ignoring font path element /usr/share/X11/fonts/Type1 (unreadable)

xfs notice: ignoring font path element /usr/share/fonts/default/Type1 (unreadable)

뭐라 잡설이 많지만, 어쨌든 구동 된다. 정말? 하는 생각이 들면 ps aux | grep xfs

Part 4. Ace!

 이제 웬만한 건 대충 해결 본 것 같으니, 다시 Xvfb를 구동한다.

[root@xx html]# Xvfb :1 -screen 0 1024x768x24&

[2] 12118

잡설 없이 돌아간다. 그리고 그동안 삽질하며 알아낸 wkhtmltoimage 옵션을 지정해서 다시 써본다.

[root@xx html]# wkhtmltoimage --use-xserver www.google.com google.jpg

wkhtmltoimage: cannot connect to X server

???? X server 켰잖아. 스크린 만들었잖아. 근데 왜?? 하면서 삽질하는건 내 몫이고, 이거 보는 사람들은 내 삽질의 결과를 이용하겠지

[root@xx html]# export DISPLAY=:1

--use-xserver를 할 때, 환경 변수의 DISPLAY 변수를 보는 것 같다. 추가해주자.

[root@xx html]# wkhtmltoimage --use-xserver www.google.com google.jpg

Loading page (1/2)

Rendering (2/2)                                                    

Done

넵. 끝

Part 5. Result, Future Research

한글 폰트가 깨져있는 구글 스크린샷 보내드렸습니다...

 xfs에 한글폰트를 어떻게 조지면 해결될 것 같지만, 그건 귀찮으니 알아서 방법을 찾아보시길.. 사실 필자도 아직 방법을 안 찾아봤다. 귀찮아서.. 어쨌든 되는걸 확인한 다음이면 그날은 흥미가 확 떨어진다. php등에서 응용하려면 exec()를 써주면서 귀찮은 권한문제에 대해 생각해보자. 여기까지.

Part 6. 소감

재밌었다. 신기했다.

Appendix. 한글 폰트 설치

 해결 방법은 의외로 간단했다.

[root@xx html]# yum -y install fonts-korean

[root@xx html]# fc-cache

[root@xx html]# yum groupinstall -y korean-support -x xorg-x11-server-Xorg

다시 스크린샷을 찍어보면 한글이 잘 표시될 것이다.

신고

'linux' 카테고리의 다른 글

Linux VFS kernel(1)  (0) 2014.12.08
Ports below 1024 can be opened only by root.  (0) 2014.03.24
Taking a web page's screenshot on CLI only environment  (0) 2013.10.16
[Ubuntu] vsftpd umask  (0) 2013.07.26
Tunneling SSH over HTTP(S)  (0) 2012.12.10
Setting Ubuntu Server 12.04 on VMWare  (0) 2012.12.07
Tip/programming 2013.08.20 15:55

[Sublime Text] SublimeLinter 1.7.2 Exception

다음과 같은 에러가 나타난다.

An exception occured when running pep8 checker: 'int' object has no attribute 'lineno'

해결법

1. SublimeLinter가 설치된 경로로 들어간 다음

2. /loc/to/sublimelinter/modules/libs/pyflakes/messgae.py 의 12번째 줄을

3. self.lineno = loc

로 수정한다.

https://github.com/SublimeLinter/SublimeLinter/pull/520/files

신고

'Tip > programming' 카테고리의 다른 글

Flask Tutorial  (0) 2013.11.23
[Sublime Text] SublimeLinter 1.7.2 Exception  (0) 2013.08.20
git cheat sheet  (0) 2013.06.08
IDE에서 C++11 Standard를 지원하는지 확인하는 방법  (0) 2013.05.31
Visual Studio 작업물을 메일로 보낼 때 주의사항  (0) 2013.05.31
tree.hh  (0) 2013.05.17
Tip/mac os x 2013.07.31 18:42

[VMWare Fusion] Port Forwading

 Windows용 VMWare엔 포트포워딩을 포함한 네트워크설정이 아주 친절하게 GUI로 접근하도록 되어있지만, OSX에선 아니다. 그렇다고 못할건 없지만... 여기선 VMWare에서 돌아가는 VM의 네트워크가 NAT로 설정되어 있음을 가정한다.

-1. 필자의 네트워크 환경

 하나의 공유기 내에 맥북과 다른 랩탑이 한대 붙어있고 맥북 내부에선 VMWare의 NAT환경으로 VM들이 붙어있는 상황. 목적은 다른 랩탑에서 맥북 내부에서 돌아가는 VM에 접속해 작업을 이어서 하는 것. 공유기 자체에서의 포트포워딩에 대한 내용은 각자 잘 찾아보시길

0. 일단 모든 VM을 끄고 VMWare를 종료한다.

1. 다음과 같은 명령어로 VMWare Fusion의 가상 NAT 어댑터(내부에선 vmnet8인가보다) 설정파일을 연다. 스크린샷이 잘려서 보인다면, 그 설정파일은 /Library/Preferences/VMWare\ Fusion/vmnet8/nat.conf 이다.

2. 내리다보면 [incomingtcp]라는 부분이 있는데, 이 부분에 다음과 같은 양식으로 포워딩해준다

[외부 포트] = [VM의 IP]:[VM 내부 포트]


스크린샷은 예시로, Django 개발을 위해 Sublime FTPSync를 이용할 FTP 포트, VM의 SSH 포트, VM의 HTTP포트를 열어놓았다.

3. VMWare를 실행하고 VM을 다시 켠다.

4. 외부에서 접속되는지 테스트 해본다.

신고

'Tip > mac os x' 카테고리의 다른 글

[VMWare Fusion] Port Forwading  (0) 2013.07.31
VMWare Fusion에서 background로 VM 돌리기  (0) 2012.09.05
linux 2013.07.26 17:38

[Ubuntu] vsftpd umask

vsftpd를 이용하여 ftp를 구축했다고 하자. 그 후 외부에서 remote로 접속한 후 파일을 생성할 때(예를 들어 nppftp나 sublime text ftpsync등의 외부편집기를 이용해서 파일을 생성할 때), 생성된 파일의 권한이 -rw-------(=600)가 되어 엑세스 권한이 있어야 할 다른 프로그램들이 이를 정상적으로 엑세스할 수 없는 경우가 있다. 이때는

sudo vim /etc/vsftpd.conf

로 vsftpd 설정을 열고

local_umask=022 항목과 write_enable=YES 의 주석을 제거한 후

file_open_mode=644 //-rw-r--r--

항목을 추가해 준다.

물론

sudo /etc/init.d/vsftpd restart로 재시작해야함은 잊지 말자.

신고
Tip/etc 2013.07.16 13:48

regex

http://j07051.tistory.com/554

신고

'Tip > etc' 카테고리의 다른 글

regex  (0) 2013.07.16
windows 8 에서의 색 보정  (0) 2013.03.28
부팅시 자동으로 VM이 실행되게 하기  (0) 2012.12.18
hack/tips 2013.06.27 17:26

ASCII Code

계속 대회나 문제풀이나 헥스에디터를 통한 파일분석을 하던 중 자연스럽게 알게 된 ascii code에 대한 것들을 정리해본다. 당연히 뻔한 소리긴 하지만, 분석할 때 소소하게 분석속도를 높일 수 있다.

0x30~0x39가 숫자

0x28은 괄호를 열고

0x29는 괄호를 닫는다

0x2f는 /

0x41부터는 A고 0x61부터는 a다. 뭐가 Z이고 z인지는 여기에 25(0x19)를 더해보면 된다. 더해보면 0x5a, 0x7a가 된다.

0x7f는 backspace다. 예를 들어 0x6162637f64는 abd가 된다는 것.

신고

'hack > tips' 카테고리의 다른 글

ASCII Code  (0) 2013.06.27
Tip/programming 2013.06.08 03:50

git cheat sheet



신고

'Tip > programming' 카테고리의 다른 글

Flask Tutorial  (0) 2013.11.23
[Sublime Text] SublimeLinter 1.7.2 Exception  (0) 2013.08.20
git cheat sheet  (0) 2013.06.08
IDE에서 C++11 Standard를 지원하는지 확인하는 방법  (0) 2013.05.31
Visual Studio 작업물을 메일로 보낼 때 주의사항  (0) 2013.05.31
tree.hh  (0) 2013.05.17