トップ 最新 追記

Days of Speed

過ぎゆく日々を書こう。忘れっぽい未来の自分のために


2013-01-01

_ 明けましておめでとうございます

明けましておめでとうございます。今年もよろしくお願いします。

Tags: life

_ pam_usbを使ってUSBメモリで認証をする

Google+のDebianコミュニティUSBメモリを使ってログインする動画が流れていたので試してみました。 (例ではubuntu/mintで説明しているのだけど、なぜDebianコミュニティに投稿したのだろう。謎。)

これを書く前に少しググってみたらpam_usb (aluzzardi/pam_usb GitHub)の開発の歴史は古く、USBメモリを使った認証ネタは結構あったよう *1 *2 *3 ですが、今ならデバイス自動認識で面倒も少ないのでお手軽に使えるのではと思います。


pam_usbを試す前にライブCDなどを準備しておく

システムのpam周りをいじるので、ログインできなくなる可能性があります。 ですので、ライブCD/DVD/USBメモリなどをあらかじめ準備しておき、不測の事態に備えておいてください。


pam_usbのインストール

aptを使ってpamusb-commonをインストールするとlibpam-usbなど必要なものがインストールされます。

$ sudo aptitude install pamusb-common

pamusb-confを使ってUSBメモリとユーザーの登録

pam_usbは公開鍵認証でUSBメモリに秘密鍵を入れて認証もできるのですが、ひとまずはネタ元動画と同じようにUSBメモリを鍵にしてユーザーのログインをできるようにします。

USBメモリの登録

あらかじめ認証に使うUSBメモリを差しておきます。 そしてpamusb-confコマンドに--add-deviceオプションに適当なデバイス名(例ではUSBKEY)を指定して実行します。

$ sudo pamusb-conf --add-device=USBKEY(USBKEYには適当な名前をつけてください)
* No device configured for user "hoge".
[sudo] password for hoge:
Please select the device you wish to add.
* Using " silicon-power (E69508006873)" (only option)

Which volume would you like to use for storing data ?
* Using "/dev/sdb1 (UUID: 4683-EADE)" (only option)

Name		: USBKEY
Vendor		: Unknown
Model		: silicon-power
Serial		: E69508006873
UUID		: 4683-EADE

Save to /etc/pamusb.conf ?
[Y/n] y
Done.

実行すると最後に「/etc/pamusb.confに保存しますか?」と尋ねられるので、保存して登録は終わりです。

ユーザーの登録

USBメモリを使ってログインするユーザーをpamusb-confコマンドを使って登録します。

$ sudo pamusb-conf --add-user=name=hoge
Which device would you like to use for authentication ?
* Using "USBKEY" (only option)

User		: name=hoge
Device		: USBKEY

Save to /etc/pamusb.conf ?
[Y/n] y
Done.

設定をすると/etc/pamusb.conf以外にUSBメモリに.pamusbという隠しディレクトリと認証用のファイルも作成されます。

$ ls -la /media/USBKEY/.pamusb/
合計 12
drwx------ 2 hoge hoge 4096  1月  1 12:45 .
drwx------ 3 hoge hoge 4096  1月  1 12:49 ..
-rw-r--r-- 1 hoge hoge 1024  1月  1 12:45 hoge.debian.pad

pamusb-checkを使って登録したUSBメモリ・ユーザーで認証できるかチェックする

登録したUSBメモリ・ユーザーで認証ができるかをチェックします。

登録したUSBメモリを差したままにしておき、pamusb-chekckを登録したユーザーで実行します。

$ pamusb-check hoge
* Authentication request for user "hoge" (pamusb-check)
* Device "USBKEY" is connected (good).
* Performing one time pad verification...
* Access granted.

問題なく認証できました。--dumpオプションを指定して設定を表示します。

$ pamusb-check --dump hoge
Configuration dump for user hoge (service: pamusb-check):
enable			: true
debug			: false
quiet			: false
color_log		: true
one_time_pad		: true
deny_remote		: true
pad_expiration		: 3600 seconds
probe_timeout		: 10 seconds
hostname		: debian
system_pad_directory	: .pamusb
device_pad_directory	: .pamusb

登録していないユーザーでチェックしてみます。

$ pamusb-check fuga
* No device configured for user "fuga".

「デバイスに設定されていません」と出ました。 次にUSBメモリを抜いてpamusb-checkを実行します。

$ pamusb-check hoge
* Authentication request for user "hoge" (pamusb-check)
* Device "USBKEY" is not connected.
* Access denied.

USBメモリが接続されていないので拒否されました。

suやsudo、GDM3などの認証に使ってみる

pam_usbの設定は、関連パッケージのインストール時点で/etc/pam.d/common-authに設定されます(詳しくは後述)。 common-authはsuやlogin、各ディスプレイマネージャーの設定からincludeされているので、基本的には何もすることなくpam_usbの認証が使えることになります。

pamusb-checkが成功した人は、USBメモリを差したまま、端末で「su hoge」などを実行してsuで登録したユーザーに変更してみてください。パスワード無しでそのユーザーになれたはずです。

続いて、いったんログアウトして、登録したユーザーを選択してください。 これもパスワード無しでログイン出来たはずです。


/etc/pam.d/common-authの編集

pam_usbの設定はインストール時点で登録されるので基本的には変更することはありませんが、変更する場合についてちょっと考えてみました。

CASE1: USBメモリが差してあるとpam_usb認証、差してない場合はパスワード認証になる

pam_usb関連パッケージをインストールしたときの設定です。 pam_usbの認証を試してUSBメモリの認証に失敗すれば通常のパスワードログイン認証になります。

# here are the per-package modules (the "Primary" block)
auth    sufficient      pam_usb.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass
CASE2: USBメモリに登録したユーザーのみログイン可(パスワード認証のみのユーザーはログイン不可)

この設定はミスすると、ログインできなくなるので設定の際にはお気をつけ下さい。

パスワード認証を無効にして、USBメモリに登録したユーザーのみログインができる設定です。

common-authの17行目のpam_usbの設定を、sufficientからrequiredに変更して、18行目のpam_unixをコメントアウトします。 するとUSBメモリの認証しか行われなくなり、USBメモリに登録されたユーザーだけしかログインできなくなります。 (パスワードのみでログインするユーザーはログイン不可)

# here are the per-package modules (the "Primary" block)
auth    required      pam_usb.so
# auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass
CASE3: USBメモリの登録ユーザーかつパスワードもログインに必要(パスワード認証のみユーザーはログイン不可)

この設定もミスすると、ログインできなくなるので設定の際にはお気をつけ下さい。

CASE2以上に使う人がいるのかと思いますが、パスワード認証のみのユーザーはログイン不可、USBメモリにユーザーを登録してあり、なおかつパスワード認証に成功した人のみがログインできる設定です。

設定はcommon-authの17行目のpam_usbの設定をrequired、18行目のpam_unixが有効にします。

# here are the per-package modules (the "Primary" block)
auth    required      pam_usb.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass

_ それにしても

新年早々何をかいてるんだか。 年末はバタバタしてて掃除できなかったから掃除しよ。

Tags: life

2013-01-03

_ tDiaryをバージョンアップした

うちのサーバーはこの日記をはじめ、いくつかtDiaryが動いているのだけど、Rubyは1.8だし、いろいろあってバラバラのバージョンのtDiaryが動いててちょっと気持ち悪い状態だったのでDebianパッケージのtDiaryを使うように変更してバージョンアップしました。

が、これが大変でした。

移行前にVirtualBoxで試したときは、うまくいったのでそれほど時間かからず終わるかと思って2日遅くから作業を始めたら、昔の設定ミスで画像が表示されていないページを発見したり、思わぬ不具合に遭遇したりして結局まるまる1日がかりになってしまいましたとさ。

ということで不具合メモ。

blogkitのarchive_dropdownプラグインとdropdown_calendarプラグインでリンクが「YYYYMM.html」形式にならない

SilverRecipeのサイトで、サイドバーのarchive_dropdownプラグインから移動できるかテストしたら、リンクURIが「YYYYMM.html」とならず「?date=YYYYMM」ってなってた。

「えー!」っと思って調べたけど、html_anchorプラグインは有効だし、mod_rewriteでマッチしているよう。YYYYMM.htmlでアクセスしても問題なくアクセスできるから、もういいかと諦めたらdropdown_calendarプラグインも同じような状態ということを発見。 とりあえず、自分のところはdropdown_calendarを外して変更して対処。

DebianパッケージのtDiaryは3.1.3なのでtDiary 3.2をダウンロードして確認したけど、症状が同じだったので、これはDebianパッケージの問題じゃなくてtDiaryの問題かも。

Debianパッケージのままの依存関係ではGFMスタイルが使えない(使えました)

tDiaryの記法にGFM(Github Flavered Markdown)スタイルが入ってたので試してみようかとスタイルをコピーして*1tdiary.confを変更して、pygments_cssプラグインを有効にしたらこんなエラーが出た。

Plugin Error
Errors in plugins? Retry to Update or Configure.

    TDiary::PluginError

    Plugin error in '50sp.rb'.
    Plugin error in '/usr/share/tdiary/contrib/plugin/pygments_css.rb'.
    cannot load such file -- pygments
    (plugin/50sp.rb):132:in `rescue in block (3 levels) in load_plugin'

    /usr/share/tdiary/tdiary/plugin.rb:65:in `rescue in initialize'
    /usr/share/tdiary/tdiary/plugin.rb:56:in `initialize'
    /usr/share/tdiary/tdiary.rb:225:in `new'
    /usr/share/tdiary/tdiary.rb:225:in `load_plugins'
    /usr/share/tdiary/tdiary.rb:377:in `load_plugins'
    /usr/share/tdiary/tdiary.rb:186:in `do_eval_rhtml'
    /usr/share/tdiary/tdiary.rb:162:in `eval_rhtml'
    /usr/share/tdiary/tdiary/dispatcher/update_main.rb:31:in `run'
    /usr/share/tdiary/tdiary/dispatcher/update_main.rb:6:in `run'
    /usr/share/tdiary/tdiary/dispatcher.rb:21:in `dispatch_cgi'
    /usr/share/tdiary/update.rb:36:in `<top (required)>'
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    update.rb:7:in `<main>'

Configureのリンクをクリックしても設定画面に戻れないし、ちょっと焦ったけれど日記データにあるtdiary.confのプラグイン設定からpygments_css.rbを削除してひとまず設定画面には戻れた。

で、原因を探ってたけど結論から書くとRuby関連のパッケージが足りなかった。 ということでruby-albinoとruby-yajlパッケージ、gem2debでpygments.rbパッケージを作って放り込んで使えるようになった。

$ sudo apt-get install ruby-albino ruby-yajl
$ gem2deb pygments.rb
$ sudo dpkg -i ruby-pygments.rb_0.3.7-1_all.deb

これはtdiary-contribパッケージにBTSしてたほうがいいかな。

複数行の整形済みテキストが使えない

とりあえずエラーはなくなったけど、複数行の整形済みテキストがうまくパースされない。

```
# ほげほげ
```

こんなシェルスクリプトのコメント行が見出しになってしまう。 なにかライブラリが足りないのかな?とりあえずWikiスタイルに戻す。

*1 コピーしなくてもシムリンク貼ってあった

本日のツッコミ(全4件) [ツッコミを入れる]

_ うわばみ [リポートよろしく。 ちなみに pygments は近いうち ITP 予定です。]

_ nogajun [なるほど。了解です。]

_ hsbt [blogkit のアンカーが上手く動かないのは不具合な気がします...]

_ ただただし [不具合ではなくて(いちおう)意図的なものです。というのもこのdropdownはformなので、クエリパラメタの形じゃ..]


2013-01-04

_ 別の環境を動かすschrootが超便利なのでメモった

amd64な環境でi386なバイナリを動かそうと思ったのだけど、multiarchだとライブラリのパッケージがバッティングしてインストールできなかったのでschrootを使ってみた。

chrootな環境は、仮想環境の中でもう一つの環境を動かしたり、いろいろゴニョゴニョする事は多いと思うのでメモ。

インストール

schrootのインストールはサクっとaptで。debootstrapはすでに入ってるいる人は多いと思うけど念のため。

$ apt-get install schroot debootstrap

debootstrapでschroot環境を作る

debootstrapを使ってschrootをする環境を作ります。 ここで注意ですが、debootstrapを実行するとき--include=sudoとオプションを指定してsudoもインストールしておきましょう。

なぜかというと、debootstrapでインストールした状態ではsudoはインストールされません。 今どきのDebian環境では、rootを作成せずsudoを使ってユーザーに管理者権限を持たせてある場合があると思いますが*1、その状態のままschroot環境に入ると、sudoがないので管理者権限が使えないという悲しい状態になります。

ということでdebootstrapには--include=sudoをつけて実行しておきましょう。

# mkdir -p /srv/chroot/squeeze-i386
# debootstrap --arch=i386 --include=sudo squeeze /srv/chroot/squeeze-i386 http://ftp.jp.debian.org/debian

schrootの設定

/etc/schroot/schroot.confを編集してschrootの設定をします。

# vi /etc/schroot/schroot.conf

コメントアウトされた設定を見るといろんな使い方ができるようですが、とりあえずはシンプルにschroot.confの末尾にこんな感じで設定を書きます。

[squeeze]
description=Debian Squeeze i386
type=directory
directory=/srv/chroot/squeeze-i386
users=(ユーザー名)
groups=(グループ名)
aliases=stable,default

schroot環境を使ってみる

登録している環境のリストを見る

-lオプションをつけるとschroot.confに登録している設定一覧が表示されます。

$ schroot -l
chroot:default
chroot:squeeze
chroot:stable
登録している環境の状態を見る

-cオプションで環境の名前と-iオプションで環境の状態が表示されます。

$ schroot -c sid -i
  ─── Chroot ───
  Name                   squeeze
  Description            Debian squeeze i386
  Type                   directory
  Message Verbosity      normal
  Users                  (ユーザー名)
  Groups                 (グループ名)
  Root Users
  Root Groups
  Aliases                stable default
  Preserve Environment   false
  Default Shell
  Environment Filter     ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$
  Run Setup Scripts      true
  Configuration Profile  default
  Script Configuration
  Session Managed        true
  Session Cloned         false
  Session Purged         false
  Directory              /srv/chroot/squeeze-i386
  Personality            linux32
  User Modifiable Keys
  Root Modifiable Keys
  User Data
    setup.config         default/config
    setup.copyfiles      default/copyfiles
    setup.fstab          default/fstab
    setup.nssdatabases   default/nssdatabases
  Filesystem Union Type  none
schroot環境にログインする

ログインする場合はschrootするだけでログインできます。 schroot環境に入っているときはコマンドプロンプトに「(環境名)」がつくので、すぐにわかると思います。

$ schroot -c squeeze
(squeeze)hoge@machine:~$
schroot環境のプログラムを実行する
$ schroot -c squeeze /bin/ls

と、こんな感じで実行できるのならXを使うプログラムを実行したくなると思いますが、実行するとこうなります。

$ schroot -c squeeze icedove
Error: no display specified

慣れた人なら、xhostコマンドでXサーバーのアクセス許可をしたり、環境変数DISPLAYを設定したり面倒なことをしなきゃなんないのかと思うかもしれませんが、親の環境を引き継いでコマンドを実行する-pオプションをつけると、この問題もあっさり回避できます。

$ schroot -p -c squeeze icedove

これで親の環境とシームレスにschroot環境のプログラムを実行できますね。

おわりに

schrootは普通のディレクトリにchrootする以外に、aufsでCOWな環境にできたり、ブロックデバイスにも使えるみたいなので、もうちょっといじってみよう。 あと、いろいろ/homeとかマウントされたり親環境からコピーされるファイルなどの設定は/etc/schroot/以下にあるので、それを見ると良いよ。

Tags: debian

*1 Debianインストール時にrootのパスワードを空にするとなるんですよ


2013-01-07

_ 風邪ひいた

土曜に京都で開催された2013年第一回関西Debian/Ubuntu新年会に出てから、彼女の家に遊びに行ったのだけど風邪をひいてしまった。 頭、痛い。

Tags: life

_ シェルスクリプトで時間差を求める

ラジオを録音したいと思ったのでシェルスクリプトで時間計算をどうしたらいいのか調べてみた。

NHKラジオ第1のすっぴん!の放送時間は朝8時から11時50分までということで、この差分を求めてみます。

$ date -d "2013/1/8 08:00"
2013年  1月  8日 火曜日 08:00:00 JST
$ date -d "2013/1/8 11:50"
2013年  1月  8日 火曜日 11:50:00 JST

このままじゃ計算できないのでUNIX時間に変換する。

$ date -d "2013/1/8 08:00" "+%s"
1357599600
$ date -d "2013/1/8 11:50" "+%s"
1357613400

計算できるようになったのでexprなりbcなりで終了時刻から開始時刻を引くと秒数が出る。

$ expr 1357613400 - 1357599600
13800

すっぴん!は3時間50分なのでbcで秒数を出して比べてみます。

$ echo "(60*3+50)*60" | bc
13800

合ってますね。 これをrtmpdumpの終了時間に設定すれば録音できるかな。

UNIX時間から通常の時間表示に変換する

逆にUNIX時間から通常の時間表示に変換することもあるけど、よく忘れるのでメモ。

$ date -d "@1357599600"
2013年  1月  8日 火曜日 08:00:00 JST

こういう方法もあるけど、上のほうが覚えやすいかも。

$ date -d "1970-1-1  GMT +1357613400 second"
2013年  1月  8日 火曜日 11:50:00 JST

2013-01-08

_ 体調ぼちぼち

とりあえず昨日は帰ってきてからずっと寝てたのでマシになった。 熱が出てないので今日には復活するかな。

Tags: life

2013-01-09

_ ラジオに出てきますよ

とりあえず体調戻りました。

で、今日、19時からFM GENKIの「GRCサウンドパラダイス」にでミキサー兼パーソナリティで出てきます。

Tags: life fmgenki

2013-01-11

_ 日本のストリーミングラジオの録音について調べてみた

ラジオを録音したいなと思ったので調べたものをまとめてみた。

radiko.jp(民放AM/FM)

直接録音するのは面倒臭い。 聞く局も限られてるから、録音しなくてもいいかな。

らじる★らじる(NHK)

配信が2段構えになってるのはさすが。 RTMPのほうはAACで、MMSはWMAで配信なので、rtmpdump使ってAACのほうを録音すると音質はよさげ。 でも、手軽さならMMSのストリームをダンプするほうが早いので迷うところ。

コミュニティFM(CSRA/JCBA)

  • ストリーミング方式: CSRA:MMS JCBA:RTMP
    • CSRAはMMSだけど、JCBAはRTMPになってるのはなぜ。
  • CSRAサイマルラジオJCBA(日本コミュニティ放送協会)に分かれてるのでややこしい。
    • CSRAとサイマルラジオは同じなんだけど、ストリーミングのドメイン名がcsra.fmとsimulradio.jpに分かれてたり、いったいなんなん?
  • 認証やDRMは、かかってないのでmplayerのdumpstreammsdlでキャプチャできる。
    • JCBAのほうは気づいている人がいないのか、rtspdumpでダンプするには解析しなきゃいけない。
  • ラジオ局の情報や番組表のAPIなどは用意されていない。
    • サイト自体手作りでスクレイピングしようにも例外が多いから、手で直さないと使えない感じ。
    • ていうかストリーミングもURIが統一されてなかったりシステムもバラバラな感じ。

CSRAのキャプチャは問題なくできる。JCBAはrtmpdumpでキャプチャできそうだけど調べないとわからない。 ラジオ局が多いのに統一されたインターフェースもなく、データが整理されてないから全国を網羅しようと思ったら結構大変。

_ timeoutコマンドで時間を限定してコマンドを実行する

ラジオ関連の話です。

mplayerのdumpstreamは、Ctrl+Cで止めない限り延々ダンプし続けます。 なんとか止める方法はないかと調べてたけど、検索で引っかかるのはmplayerをバックグラウンドで実行後、killをsleepで一定時間スリープさせて止めるものばかり。 これはこれでいいのだけど、もう少しスマートにできないかなと思って調べたら、timeoutコマンドを使えば一定時間経過後にコマンドが終了できるので、これを使うのがよさげ。

使い方はこんな感じ。

$ timeout 時間 コマンド

FM GENKIのストリーミングを1分間だけダンプするには、こんな感じで書くと1分後に終了します。 (注: コマンドは1分で終了しますが、mplayerは開始直後、バッファにデータを貯めるので録音自体は50秒前後です。)

$ timeout 1m mplayer -playlist http://csra.fm/asx/fm-genki.asx -dumpstream -dumpfile fmgenki.asf

_ Dropbox-Uploaderを使ってコマンドラインからDropboxにアップロードする

Dropboxにファイルをアップロードするシェルスクリプト。 Dropbox APIを使ってるので最初にAPIキーの設定が必要だけど、指示に従えばすぐに設定できるのでサクッと使えます。

ラジオ録音スクリプトと組み合わせれば、録音して、どこでもラジオが聞けるぜ!


2013-01-13

_ 「殺して38&つーさん 結婚パーティー!!」に行ってきたよ

ライブの様子 マリーさん作殺してさんとつーさんのウェルカムボード

TV JACK 1000でもお世話になった、殺してさんが結婚して、結婚記念ライブを開くというので行ってきた。

みんなニコニコ。ホント、いいライブだったよな。 神戸だけど姫路勢ばっかり。マッシュルームが残ってたらなぁ。

Tags: life music

2013-01-19

_ 姫路IT系勉強会 Vol.13で「デザイナーさんに送る「黒い画面は怖くない!」(チートシート付き)」という発表をしたよ

チートシートやハンズオン用のLive USBメモリを作ったのだけど、結果から言うと大失敗。

ターゲットを「ターミナル自体が使えない/使いたくない人」と想定して資料を作ったのだけど、来てた人は、ある程度まで触れる/抵抗は無いけどちょっと苦手という、それなりに使える人だった事、そしてハンズオンぽくやりたいなと考えてたけど、事前のアナウンスができてなかったのでうまくまわらなかった。

ということで、資料を作りなおして、またどこかでやり直したいです。


2013-01-21

_ ジアンジアンのマスターが亡くなられたそう

マッシュルームが亡くなり、次はジアンジアンのカレーも亡くなった。 さみしいな。


2013-01-27

_ 関西Debian勉強会で奈良に行ってきた

春日大社入口鹿さん鹿注意

奈良で関西Debian勉強会があったので行って、月刊Debianポリシーをちょこっとだけ話をしました。

Drupal 紀野さんのDebianとDrupal話しは面白かったな。 告知が十分でなかったのか、奈良開催だったせいかわからないけど、人が少なかったのはちょっと残念。

懇親会は焼鶏とお鍋 奈良町 雷門というお店で、鍋と鳥料理を堪能しましたとさ。 また、奈良はゆっくり行きたい。

Tags: debian

2013-01-30

_ image_ex.rbが使えないと思ったら、ImageMagickとnetpbmが入ってなかった

この日記に写真をアップロードしたら原寸で表示されて「なぜ?」と思って調べたら、サーバーの不要なパッケージを削除した際にImageMagickとnetpbmをざっくり消してたみたい。

image_ex.rbって、tdiary-contribに含まれるパッケージだから、recommendsかsuggestsに書いてあってもよいかも。

Tags: tdiary debian

_ いろいろ追記

しばらく日記が書けなかったから、書き留めたいことを追記した。

Tags: life

_ Markdownとドキュメント変換ツール「pandoc」を使って、Debian勉強会の資料を作成しよう

東京エリア/関西Debian勉強会の資料は、発表スライドとは別にTeXで紙の資料を作成しています。(勉強会gitリポジトリ) TeXで書かれた資料の一部を抜き出すとこんな感じ。

\dancersection{タイトル}{発表者名}
\subsection{大見出し}
本文がここにありまして見出しが続いたりします。
\subsubsection{小見出し}
\begin{itemize}
\item アイテム1
\item アイテム2
\end{itemize}

要はHTMLみたいに文書をタグで囲んで意味づけしてやればいいのだけど、プレーンテキストのマークアップはemacsとやてふを使っても結構時間がかかります。

そこで、Markdownを使って書いてDebian勉強会の資料をサクっと作ってしまおうというのが今回のエントリです。

ネタばらしすると、今月の月刊Debianポリシーの資料作成が間に合いそうになかったので、苦肉の策でpandocの変換を試したら、これが以外に良かったので残しておこうという話でもあったりします。

Markdownで書く

最初にMarkdownで資料を書きます。Markdownを書くエディタは何でも構いません。プレビューしながら書けるReTextでも、emacsのmarkdown-modeでも使いやすいエディタで書いてください。

Markdownの書式ですが、pandocで使われるMarkdown書式はオリジナルのMarkdown書式からPHP MarkdownやGithub Flavored Markdownのいいとこ取りした、Pandoc’s markdown書式になってます。 基本的には、作表などオリジナル書式に足りないところを足しているだけなので、書く上でそんなに戸惑うことはないと思います。

上のTeXをpandoc Markdownで書くとこんな感じになります。

% タイトル
% 発表者名

大見出し
-------
本文がここにありまして見出しが続いたりします。

## 小見出し

* アイテム1
* アイテム2

pandocで変換してみる

これをpandocを使って変換します。hoge.mdで保存しておいたMarkdownテキストを変換するならこんな感じ。

$ pandoc -o hoge.tex hoge.md

出力例はこんな感じ。

\subsection{大見出し}

本文がここにありまして見出しが続いたりします。

\subsection{小見出し}

\begin{itemize}
\item
  アイテム1
\item
  アイテム2
\end{itemize}

dancersectionはDebian勉強会のマクロだから仕方ないとして、ほぼ完璧ですね! 細かいところで言えば、HTMLのリンクが\href{}に展開されるけど、Debian勉強会では\url{}という違いぐらいだと思います。

いろいろいじればDebian勉強会のスタイルにあったTeXにも変換できそうだから、これからいじってみます。

Tags: linux debian

_ libreofficeをバックエンドに使ったドキュメント変換ツール「unoconv」もいい!

OpenOffice.org/LibreOfficeをヘッドレスで動かしてWord/Excelの文書を変換するサーバーなんてのがありますが、pandoc関係を検索してたらコマンドで変換できるツールがありました。 リポジトリにあるのでapt-get install unoconvでインストールできます。

pandocと組み合わせたら、なんでも文書が変換できるんじゃない?


2001|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|06|08|12|
2011|01|02|03|06|07|08|09|10|11|12|
2012|01|02|03|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|12|
2014|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|10|11|12|
2017|01|02|11|

クリエイティブ・コモンズ・ライセンス Jun NOGATA を著作者とするこの 作品クリエイティブ・コモンズの 表示 - 継承 4.0 国際 ライセンスで提供されています。