RubyGems 사용기.

Posted 2007. 2. 17. 23:40
오늘 루비로 회사 소스 저장소를 백업하는데 쓸 간단한 스크립트를 만들었습니다. 루비 파일 한 개로 된 간단한 프로그램이라 패키징 할 필요도 없지만 루비용 패키징 도구인 RubyGems를 사용해 볼 생각에 gem 파일로 만들어보았습니다. 리눅스 프로그램 패키징에 사용되는 RPM이나 DEB의 스펙 파일과 유사할 것이라 생각했는데, RubyGems은 스펙 파일도 실행 가능한 루비 스크립트더군요. 스펙 자체를 실행할 수 있는 모델이라는 게 재미있었습니다. 다음은 제가 작성한 sysadmin의 스펙 파일입니다.


require 'rubygems'

spec = Gem::Specification.new do |s|

  s.name = 'sysadmin'
  s.version = '0.0.1'
  s.platform = Gem::Platform::RUBY
  s.summary = "sysadmin is a collection of Linux server administration tools."
  s.files = Dir.glob("bin/**/*").delete_if {|item| item.include?(".svn")}
  s.bindir = 'bin'
  s.executables = 'reposbackup'
  s.require_path = '.'

  s.add_dependency 'net-sftp', '>= 1.1.0'
  s.add_dependency 'progressbar', '>= 0.0.3'
  s.has_rdoc=false

  s.author = "Kwang Yul Seo"
  s.email = "kwangyul.seo@gmail.com"
  s.homepage = "http://skyul.tistory.com"

end

if $0==__FILE__
    Gem::manage_gems
    Gem::Builder.new(spec).build
end

패키지에 포함될 파일을 files 속성에 정의해주는데, Dir.glob 메쏘드를 사용해 bin 이후 모든 파일을 집어 넣습니다. 또한 bindir 속성과 executables 속성을 지정해주면, 여기에 지정된 파일은 설치 시에 자동으로 /usr/bin 디렉토리에 복사해줘서 실행 가능하게 만들어 주더군요. add_dependency를 이용해서 간단하게 필요한 패키지의 의존성을 표시해줄 수 있고요. 위 스크립트를 실행시키면 Gem::Builder.new(spec).build 부분에서 gem 파일을 생성해 줍니다.

사용자 삽입 이미지