2013. 1. 18. 20:19

연구실에서 현재 ubuntu 12.10이 설치된 PC와 windows 8 이 설치된 PC를 같이 쓰다 보니, 서로 파일을 주고받을 일이 종종 생긴다. 이걸 전부 메신저나 ftp같은걸로 주고받을려면 상당히 귀찮다. 그래서 windows 홈 디렉토리를 SMB로 공유해서 리눅스에 마운트시키고, 리눅스 홈 디렉토리도 samba로 공유해서 윈도에 네트워크 드라이브로 연결해서 쓰고 있었다.

근데 이게 좀 애매했던 것이, windows 홈 디렉토리를 리눅스에 마운트시키려고 할 때 계정 정보를 파일로 어딘가에 써놔야만 한다는거다. 그것도 plain text로! 그동안은 600으로 퍼미션을 줘서 숨긴다고 숨겼지만 여전히 불안한 것은 사실이었다.

그래서 이번에 뭘 좀 찾아보다 보니 pam_mount란걸 발견해서 잘 쓰고 있었다. 과거형인 이유는, Windows 7 쓰다가 8로 바꾸는 과정에서 계정을 라이브 계정으로 바꿨는데, 이게 라이브 계정이 되면서 계정 자체가 이메일처럼 바뀌면서 리눅스 계정과 호환이 안되는 사태가 발생했기 때문이다 ㅜㅜ

그래도 로컬 계정을 쓴다거나 Windows 7을 쓴다거나 하는 경우는 별 문제가 없으니 일단 팁으로 써본다.

pam_mount 모듈은 linux에서 계정 인증할때 쓰는 pam의 모듈로써, linux 인증 시스템의 정보를 이용해서 인증을 필요로 하는 여러 가지 파일 시스템을 계정 로그인시 자동으로 mount해주는 기능을 가지고 있다. 지원되는 것 중에 굵직한 것 몇 가지만 예를 들어보면, 내가 예전까지 잘 쓰고 있던 SMB(CIFS), 또 ssh 서버만 있으면 특별한 서버가 따로 필요 없는 sshfs 정도가 있고, fuse를 이용한 경우도 적용이 되는 것으로 보인다.

우분투의 경우 pam_mount 모듈을 설치하기가 쉬운데, 간단하게

apt-get install libpam-mount

명령으로 설치 가능하다.

global한 환경 파일은 /etc/security/pam_mount.conf.xml (Ubuntu 12.10 기준)에 들어 있는데, 여기서 luserconf 항목의 주석을 해제해주면 각 사용자별 설정을 홈디렉토리/.pam_mount.conf.xml 파일에서 설정해줄 수 있다. 또 mntoptions 항목에서 mount 명령어에 -o 옵션으로 넘겨지는 옵션 중 허용할 것과 불허할 것을 설정해 줄 수 있는데, 허용되지 않은 옵션을 넘길 경우 pam_mount.conf.xml 파일의 해당 명령을 무시하고 에러메시지를 밷는다. 기본적으로 화이트리스트 기반이며, allow="*" 항목을 추가시켜주면 블랙리스트 기반으로 처리 가능하다.

그리고 실제 마운트시키는 볼륨에 대한 정보는, LDAP등으로 동시에 계정이나 홈디렉토리가 관리되는 계정이 아닌 이상에는 각자 개인별로 설정파일을 갖는 편이 나을텐데, 내가 설정해놓은 CIFS 설정 파일을 첨부한다.

<?xml version="1.0" encoding="utf-8" ?>

<pam_mount>

  <volume
    options="uid=%(USER),dir_mode=0755,file_mode=0644,ip=x.x.x.x,nodev,nosuid"
    user="*"
    mountpoint="/home/%(USER)/Mounts/Windows"
    path="Users"
    server="WINDOWS-PC"
    fstype="cifs"
    />

</pam_mount>

%(USER)는 로그인되는 계정명으로 치환되는 매크로다. user에는 이 설정 파일이 적용되는 유저네임을 쓰면 된다.

주의할 점은, linux에서 사용하는 계정/비밀번호로 마운트를 시도하기 때문에 계정과 비밀번호가 일치해야 한다는 점이다. 현재 내가 못쓰고 있는 이유이기도 하다. ㅜㅜ Windows8에서 계정명에 대한 alias가 지원된다면 좋겠는데... 찾아도 잘 모르겠더라.

좀 더 자세한 정보가 필요하면 pam_mount 공식 홈페이지를 참조하시길...

2010. 4. 13. 16:13
최근에 개인적인 사정으로 인해 DirectShow와 GTK를 ruby로 건드려야 하는 일이 생겼다. 근데 다 좋은데, DShow로 비디오 재생시킬 때 GTK쪽 윈도의 HWND를 알아야 할 필요가 생겼다.

물론 DShow extension에서 창을 하나 만들고 그 창에 비디오창을 임베딩 시킨 다음 그 hwnd를 GTK로 넘겨주어도 좋지만, 앞으로의 활용을 위해서 ruby-gtk2 측에서 hwnd를 반환하도록 수정시켜봤다.

많이 수정한 것은 아니고, gtk/rbgdkdraw.c에서 387행 #endif 밑에
388 #ifdef GDK_WINDOWING_WIN32
389 #include <gdk/gdkwin32.h>
390 static VALUE
391 gdkdraw_get_hwnd(self)
392     VALUE self;
393 {
394     return ULONG2NUM(GDK_WINDOW_HWND(_SELF(self)));
395 }
396 #endif
넣어주고, 이 함수를 루비 메서드로 하기 위해서 추가한 뒤의 행번호로 472행 #endif 밑에
473 #ifdef GDK_WINDOWING_WIN32
474     rb_define_method(gdkDrawable, "hwnd", gdkdraw_get_hwnd, 0);
475 #endif
넣어주면 끝. 컴파일 가이드는 http://ruby-gnome2.sourceforge.jp/hiki.cgi?compile_mingw 이 사이트를 보고 그대로 따라했고, cairo.h를 못 찾는 문제는 Makefile에 -I 옵션을 줘서 카이로 지정해주고, 기본 헤더파일에서 INT32나 boolean 중복 선언 문제는 기본 mingw 헤더를 수정해서 패스했다.

압축파일에 있는 .rb파일은 루비가 설치된 디렉토리가 C:\ruby일 때 C:\ruby\lib\ruby\site_ruby\1.8 에 넣고, so 파일은 C:\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt 에 넣으면 큰 문제 없이 동작한다.

DirectShow를 ruby에서 쓰는건, 딱히 필터나 필터그래프를 있는 그대로 래핑해서 넣진 않았고, 당장 나에게 필요한 플레이어 기능만 짜넣어서 익스텐션을 만들고 있다. 나중에 완성되면 여기다 공개하도록 하겠다.

2009. 10. 28. 02:08
FUSE는 리눅스에 있는 시스템인데, Filesystem in Userspace 의 줄임말이다.

무얼 하는 것인가, 하면 커널이 아닌 유저스페이스에서 동작하는 파일 시스템 드라이버를 만들 수 있게 해주는 것이다. 리눅스 커널에 fuse가 포함되면 드라이버로 굳이 만들지 않더라도 여러 가지 파일 시스템을 쓸 수 있는 것이다.

fuse를 쓰는 것 중에 제일 쓸만한 것이 개인적으로는 sshfs를 들고 싶은데, sftp를 이용해서 다른 컴퓨터에 있는 디렉토리를 마운트시키는 것이 가능하다. 별다른 설정 없이 ssh만 작동한다면 원격 디렉토리를 쓸 수 있다는 점에서 상당히 유용하다. 포트도 자유자재로 바꿀 수 있고 ssh 자체가 암호화를 통해 어느 정도 보안성도 갖기 때문에 필자는 사용중인 데스크탑에 온갖 서버의 디렉토리를 sshfs로 물려놓았다.

이렇듯 fuse란 녀석은 상당히 활용도가 높은데, 이것과 비슷한 일을 하는 윈도용 라이브러리를 발견해서 정보를 링크해 둔다.

DOKAN이라는 것인데, 이 것은 지금 일본인이 개발하고 있는 것으로 보인다. 오픈소스이며, sshfs의 예제도 같이 올려져 있다.

공식 사이트: http://dokan-dev.net/

루비와 닷넷 프레임워크용 바인딩을 제공하니까 갖다 쓰면 유용할 듯 하다.
2008. 12. 23. 21:45
보통 ruby-gd는 gem install ruby-gd 로 깔곤 했는데 win32에선 이게 안돼서 꽤나 고생했다.

그래서 찾아본 결과, 예전에는 찾지 못했던 해결법을 발견하여 여기다가 쓴다.

  1. GD2 다운로드 받기
    libgd 홈페이지에서 직접 받은 gd2는 정상적으로 link가 안된다.
    따라서 다음 홈페이지에서 다른 것을 받도록 한다.
    http://www.vortex-tech.com/blog/2008/05/19/ruby-gd2-on-windows/
    다운 받은 파일 중 dll파일을 시스템 폴더나 ruby 실행파일이 있는 디렉토리(보통 c:\ruby\bin)에 복사해 넣는다.
  2. ruby-gd2 설치하기
    적당한 커맨드 라인창을 띄운 다음에(ex> cmd.exe)
    gem install gd2

    를 입력한다.
  3. require 'gd2' 로 시작한다.
참 쉽다. 왜 이걸 몰랐을까 -_-

'프로그래밍 > Ruby' 카테고리의 다른 글

Ruby-GNOME2 0.18 One-Click Installer for Windows  (0) 2009.10.20
rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기  (0) 2009.02.02
GMemRB 공개  (0) 2009.02.01
Ruby-GD2 in WIN32  (0) 2008.12.23
Ruby-GNOME2  (0) 2008.12.09
Ruby on Rails  (0) 2008.05.28
GD, gd2, ruby, Win32, Windows