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.

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
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로 재시작해야함은 잊지 말자.

신고
linux 2012.12.10 03:14

Tunneling SSH over HTTP(S)

http://dag.wieers.com/howto/ssh-http-tunneling/

http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html

http://proxytunnel.sourceforge.net

어떻게 잘 해서 동아리방 컴퓨터 외부에서 SSH로 접속할 수 있으면 여러모로 응용이 가능할듯

신고
linux 2012.12.07 03:12

Setting Ubuntu Server 12.04 on VMWare

 다음은 혼자 공부하기+Linux와 관련된 일을 수월하게 하기 위한 목적으로 VMWare에 설치한 Ubuntu Server 12.04의 세팅 과정이다.

 Windows에서 -nix 관련 일을 하려면 Cygwin을 설치하면 되지 않느냐는 생각도 할 수 있지만, 그 뭔가 어설픈듯한(완성도를 논하는게 아니라, Cygwin에서 모든 Linux의 기능을 "설치"하고 "사용가능"하게 만들 수가 없다는 뜻이다) Cygwin을 참을 수가 없어서 결국 VM을 만들기로 했다.

1. 공유 폴더 만들기

지난 포스트에서 했다. 저 포스트에도 써있지만, 공유폴더를 심볼릭 링크 해주면 편하다.

2. root pw 설정

sudo su

passwd

3. SSH 설치: VM은 Background로 돌리고 각종 터미널 프로그램(iPuttyXShell을 추천한다. 둘다 개인사용자는 무료)으로 VM에 할당된 내부 IP에 접속하는 것이, 터미널 스크롤도 안되는 VMWare 화면보다 훨씬 나은게 당연하다

sudo apt-get install ssh

4. vim 설치: 사실 이후 작업을 하면 쓸 일이 별로 없지만.. 그래도 리눅서라면 당연히 설치(?)해야하지 않을까. 적어도 기본으로 있는 vi는 쓸게 못 된다.

sudo apt-get install vim

5. vsftpd 설치: 이 작업때문에 4번 작업이 별 의미가 없다. FTP접속을 가능하게 해주는 데몬인데, FTP접속이 가능하다면 FTP가 연동되는 수많은 "쩌는" 편집기들(Notepad++, Sublime Text 2 등. 전자는 무료, 후자는 유료지만 주기적으로 거슬리는 화면을 보면 무료로 사용할 수 있다)로 파일을 열어서 편집하면 그만이기 때문. vim이 더 좋다는 변태들은 답x... ㅈㅅ...

sudo apt-get install vsftpd

vim /etc/vsftpd.conf (이럴때는 또 vim이 쓰기가 편하다.. 터미널창에서 다 끝나니까)

anonymous_enable을 NO로 바꾸고 local_enable, write_enable을 주석처리하는 #을 지우고 :wq

sudo /etc/init.d/vsftpd restart 

로 vsftpd를 재시작하면 설정파일대로 잘 작동한다.

6. gdb 설치

sudo apt-get install gdb


 일단 이정도 설치해놓으면 VM을 켠 다음 바로 Background로 트레이에 쳐박아놓고 터미널 클라이언트로 접속해 쓰던가 각종 편집기로 FTP에 접속해서 코딩하는데 불편함이 없을 것 같다.


신고
linux 2012.12.07 01:58

Setting Shared Folder in Ubuntu Server 12.04 on VMWare

다른건 다 모르겠고

공유폴더를 위해 vmware tools를 깔았는데, 제대로 설정이 안 되어서 vmware-config-tools.pl을 실행시켰더니 kernel header path를 못찾겠단다.

해결책

$
$
$
$ sudo apt-get install linux-headers-$(uname -r)

일반적으로 커널 업데이트를 하지 않았다면, uname -r의 결과는 3.2.0-29-generic-pae이다.

설치하고 나서 다시 config하면 path가 잘 들어가 있음.

재시작하면 shared folder는 /mnt/hgfs에 마운트되어 있음. 편히 쓰려면 홈디랙토리에 ln -s /mnt/hgfs shared 정도로 심볼릭링크를 해주면 깔끔함.

신고


티스토리 툴바