• このエントリーをはてなブックマークに追加

スポンサードリンク

はじめに

org-babel-tangleをEmacsの外のコマンドラインから実行する方法を調べました。

そして、生成したyamlファイルをansibleにわたして実行することで、 実行可能なドキュメントを生成してみました。

関連する過去記事は以下。

Environment

  • ArchLinux
  • Emacs 24.3

Emacs の関数をコマンドラインから実行する

org-modeでかかれたドキュメントを コマンドラインから変換するためのスクリプトを調べた。

以下のサイトから直接スクリプトを引用する。

#!/bin/sh
# -*- mode: shell-script -*-
#
# tangle files with org-mode
#
DIR=`pwd`
FILES=""

# wrap each argument in the code required to call tangle on it
for i in $@; do
    FILES="$FILES \"$i\""
done

emacs -Q --batch \
    --eval "(progn
     (add-to-list 'load-path (expand-file-name \"~/src/org/lisp/\"))
     (add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\" t))
     (require 'org)(require 'org-exp)(require 'ob)(require 'ob-tangle)
     (mapc (lambda (file)
            (find-file (expand-file-name file \"$DIR\"))
            (org-babel-tangle)
            (kill-buffer)) '($FILES)))" 2>&1 |grep tangled

このスクリプトを実行すると、コマンドラインからorg-babel-tangleが実行できる。

org-banel-tangleとansible-playbookを同時実行

枯れた自分のシェルスクリプトの知識を呼び覚まして、シェルスクリプトを書いた。

Indentをたもつために、以下のおまじないも加えた。

(setq org-src-preserve-indentation t)

virtualboxのインストールスクリプト

以下のようなorgファイルを用意した。

* VirtualBox

– [[https://wiki.archlinux.org/index.php/VirtualBox_(%E6%97%A5%E6%9C%AC%E8%AA%9E)][VirtualBox (日本語) – ArchWiki]]

以下のモジュールが必要。

– virtualbox
– virtualbox-host-modules
– qt4

#+begin_src yaml :tangle yes

– hosts: localhost
sudo: yes
tasks:
– name: Install VirtualBox
pacman: name=virtualbox,virtualbox-host-modules,qt4
#+end_src

ArchLinuxでゲストOSを動かすためにはKernelモジュールをロードする必要がある。

#+begin_src yaml :tangle yes
– name: Load Kernel Module
command: modprobe vboxdrv
#+end_src

コマンドラインから実行して、virtualboxをインストール成功!カッコいい。

[tsu-nera]% ./ansible-org-tangled.sh archlinux/virtualbox.org

PLAY [localhost] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [localhost]

TASK: [Install VirtualBox] **************************************************** 
ok: [localhost]

TASK: [Load Kernel Module] **************************************************** 
changed: [localhost]

PLAY RECAP ******************************************************************** 
localhost                  : ok=3    changed=1    unreachable=0    failed=0

もちろん、org-modeなので、HTMLへの出力とかもできる。

githubにアップするだげで、orgファイルはいい感じに表示されるところがよい。