Monthly Archives: 2月 2014

Windowsのクリップボード操作系ツール

Pocket

クリップボードに移したデータに対し、何らかの操作を行うWindowsのツールをまとめる。

 

任意の文章を引用貼り付け

Thunderbirdでは、任意の文章であっても「引用文として貼り付け(Ctrl+Shift+O)」で引用貼り付けができる。
Outlookには同等の機能がない。
以下、二つのツールは、実行するとクリップボードの文字列先頭に引用記号”>”を付けてくれるもの。

ひと手間増えるのは悔しいが、ランチャーに本ツールを登録しておき、貼り付け前に実行するとよい

クリップボードの文字列に引用記号を付加するツール

Plus引用符
http://www.vector.co.jp/soft/dl/winnt/writing/se341366.html

引用くん
http://www.fukapon.com/showcase/softwares/inyokun.html

デフォルトでは引用記号は”>”。
実行すると以下のようにになる。

気に入らない。
“>”のあとにスペースがあってほしい。

この場合、「引用くん」のほうがいいだろう。
オプションで引用記号を自由に変えられるから。
方法は同梱のドキュメントを参照のこと。

 

Excelの表をメールやテキストファイルに貼りつける

Excel文字罫線変換
http://www.ne.jp/asahi/soft/miday/Excel_Moji/Excel_Moji.html

文字通り。
Excelの表をコピーしクリップボードに送った状態で起動すると、文字罫線に変換してくれる。
変換後の例は以下の通り。

以上

カスタムpkgをpoudriereで作ろう

Pocket

poudriereとは

中の人曰く:

primarily designed to test package production on FreeBSD. However, most people will find it useful to bulk build ports for FreeBSD.
「package生成のテストを主眼にデザインされたツールである。しかしながら、ほとんどの人はportsをまとめてコンパイルする点を有用と考えるだろう。」

とのこと。

ちなみにpoudriereとはフランス語であり、英語にするとgunpowder magazine、つまり弾薬庫のことだそうな。

物騒であるな。
あと、poudriereって綴りが覚えづらくて困る。

カスタムpackageのためのツール?

一方で、poudriereはカスタムpackageを欲する人にも勧められてたりする。
というのも。
現時点では、pkgでインストールするpackageのオプションは決め打ちされていて自由に選ぶことができない。
有名なところで例を挙げると、PHPのpackageにapacheモジュールが付属しない。
したがって、apacheモジュールが欲しければ自分でコンパイルするしかない。

コンパイルとくればportsである。
poudriereもコンパイルを行うが、こちらはpackageを作ることができる。
packageを作ってしまえば、pkgコマンドで手軽に管理できる。
おお。
これは便利なのか?

しかしながら準備段階でコンパイルが発生しているわけで、わざわざpkgコマンドなんて経由しないで、portsからコンパイルしてさっさと入れてしまったほうが効率的だろう。

それでもpoudriereが有用なケース①: 複数ホストが対象のとき

ずいぶんネガティブなことを書いたけれども、もしもカスタムpackageを複数ホストで使うのならば、poudriereの利点が活きてくる。
poudriereの優れているところは、公式のpackageレポジトリの構成とまったく同じものを作る点だ。
そのディレクトリをwebサーバで公開するだけで、自前のレポジトリができてしまう。
クライアントでは、pkgコマンドの見に行く場所を自前レポジトリに向けるだけでよい。

やってみると分かるけど、同じLANにあるレポジトリはめっぽう速くて気分がよい。速いのはあたりまえだけど。
こうしたことから、カスタムpackageを複数ホストにばら撒くならpoudriereはとても有用である。

それでもpoudriereが有用なケース②: オフラインマシン向け

もう一つ加えるとすれば、オフラインのマシンにpackageを展開する場合だろう。

pkgコマンドにはcreateというサブコマンドがあり、インストール済みのpakcageからpackageを再生成できる。
これを利用して、ネットに繋がるマシン(たいていはセキュリティポリシー上許可されたマシン(多くはWindows)の「上で」動く仮想マシン)でpackageをインストールしてpkg create、ネットに繋げないマシンにまるまる移すことができる。

また別の考え方をすると、テスト環境でpackageをインストールして検証し、問題のないことを確認したら、packageを本番環境に移す、ということもできるだろう。

ただこの方法には問題があって、現時点のpkgコマンドにはインストール済みのpackageをリプレイスする仕組みがないのである。

例えばターゲットとなるマシンのbashを更新したいとする。
通常であればpkg upgradeを使うところだが、このコマンドは手許にあるpackageを読んでくれないのである。
(もしできるのなら教えてください本当に)
どうしようもないので、いったんbashをアンインストールしてから再インストールするという、なんだかすごく頭の悪いことをする羽目になる。

bashなら悠長なこと言ってられるかもしれないが、これがサーバソフトウェアなら大変である。
またこれが1つ2つではなく、数百個になったらどうするのか。

ここで告白するが、私はとても面倒くさくなって、packageを根こそぎ削除して新規にまるまるインストールしようとした。
そしたら、pkgコマンドも削除されててリアルでorzとなった。
みんなは気をつけるように。

話を戻すと、こういうウッカリさんには、poudriereは便利、かもしれない。

注意点

仮想マシンでpoudriereを動かす人は以下の点に注意すべき。
端的に言って、firefox等のブラウザ、libreofficeなどの巨大packageを作る際には、膨大なメモリ、swapが必要である。メモリ、swapそれぞれ1GBでは失敗した。
メモリを用意できない場合には、出来合いのpackageを持ってくるしかないだろう。
なお、ブラウザに限って言えば、operaなら悠々とコンパイルできたことをお伝えしておく。

ながながと前置きをしたが、以下にpoudriereでカスタムpackageを作る方法を示す。

前提

便宜上、「インターネットに繋がっていない」ことを「オフライン」と表現する。
「オフラインマシン」であれば、「インターネットには繋がっていないマシン」とする。
ただしオフラインマシンであっても、LANには接続されている前提。

ネット接続可能で、poudriereのインストールされているマシンをオンラインマシンとする。

オンラインマシンでpackageを作り、「レポジトリをオフラインマシンにコピーしてから」、オフラインマシンにインストールするという手順にする。
つまりこれは複数のオフラインマシンを前提にしているというわけ。

事前準備

オンラインマシンにpoudriereの環境があること。
作り方は本記事の前編であるこちらをどうぞ。
オフラインマシンには、pkgコマンド、webサーバ(nginx, lighttpd, apacheのいずれか。Pythonでもよい。 Python? ええPythonです)、あとはまあ転送用に、rsyncがあると便利。なくてもよい。

オフラインマシンへのpkgインストールはこちらを。
オフラインマシンへのpackageインストールは、poudriereに関するこちらを。

全体の流れ

poudriereでカスタムpackageを作るときの流れは以下のようなものである。

1.おもむろにテキストファイルを開く
2.カスタマイズしたいpackageの一覧をズラズラと並べる。
3.このとき、origin付きで並べること。php5ならlang/php5というように。
4.poudirereのサブコマンドoptionsを使って一括でoption設定をする。
5.あとは同じファイルでbulkコンパイルすればよい。

では。

カスタマイズしたいpackage一覧の作成

一例として、以下のようなファイルを作る。
pkg.custom.txt

originの探し方はpkg search -o phpなどとすればよい。

optionの設定

以下のようにする。

optionsサブコマンドにテキストファイルを与えると、書かれているpackageのoptionを根こそぎ聞いてくれる。

実態は、おそらく当該portsに移ってmake config-recursiveをしている。
それはともかく、素のままoptionsを実行すると、再帰的にmake configされるので大変である。
大量の依存を抱えているといつまで経ってもoption選択が終わらない。ウンザリする。
そもそもカスタマイズしたいpackageだけを書いているのにこんなことをされては迷惑である。
そこで-nオプションを与えて、option設定を一階層に限るというわけ。

packageの作成

あとは同じテキストファイルを、bulkコマンドに与えて上げればよい。
待つだけ。

リポジトリの展開

オンラインマシン(”オンラインマシン”の定義は「前提」章を参照のこと)からオフラインマシンに移す。
オンラインマシンでいきなりリポジトリを公開するケースはこちらを。

さて以下の場所にリポジトリができたとする。

それをオフラインマシンに転送。

rsyncを使った。
ないならtarでもなんでも固めて持っていけ。
ここでは192.168.200.100がオフラインマシン。
オフラインマシンにいる普通のユーザのディレクトリに置いているが、気にしない。

その後、オフラインマシンに移って該当箇所をwebで公開。

pythonが入っていれば以下のコマンドですぐに公開できる(Python 2の例)。

 

オフラインマシンでの設定

以下のような設定を書けばOK。

 

リポジトリの設定を変えたら必ずpkg -vvで確認。

 

あとはpkg updateしていつもの流れ。

 

以上。

Pythonがあればwebサーバを動かせる件について

Pocket

Pythonがあれば、webサーバソフトウェアを追加することなくwebサーバを立ち上げることができる。
たいへん便利なのでメモしておく。

書式

Python 2.xの場合、以下のようにすると、「カレントディレクトリ」をwebサーバとして公開する。
ポートは8000。
つまりアドレスはhttp://<当該ホスト>:8000/となる。
なお、8000なので起動はスーパーユーザじゃなくても平気。

Python 3.xの場合。

 

実行例

下記のようなindex.htmlを用意する。

pythonでwebサーバ起動。
2.7.6なので、python2の書式ですな。

w3mで繋いでみると。

おお。
sockstatの結果は以下の通り。

 

[UNIX tips] 復活祭(イースター)の日付に神代の遊び心を見た(2014年のイースターは4/20です)

Pocket

cal/ncalにはイースター(復活祭)を表示するオプションがある。
私はキリスト教徒ではないのですが、コマンドにこういったオプションが自然に入っていることに感銘したので記録する。

結論

* Linux(GNU cal)ならcal -e/cal -oでOK。

calコマンド

UNIXにはcalコマンドという、カレンダーを表示するコマンドがある。
手許のMacにもきちんと入っていて(MacなのでFreeBSD由来です)、実行してみると以下のように表示される。

 

復活祭とは

wikiがこちら。
http://ja.wikipedia.org/wiki/復活祭

「復活祭は基本的に「春分の日の後の最初の満月の次の日曜日」に祝われるため、年によって日付が変わる移動祝日である。」ということなので、コンピュータに計算させるニーズは、それなりにあるというわけですな。

コマンド実行例

OS XやFreeBSDで復活祭の日付を表示させるには、calコマンドではできず、ncalコマンドを使う必要がある。
GNU calなら問題なし、つまり大半のLinuxでも問題なし。
ncalコマンドは、calコマンドにさらにレイアウトやオプションを追加したもの。

-e、つまりeaster、で復活祭の日付を表示する。
-o、つまりOrthodox(正教)での復活祭の日付を表示する。

東方、西方、同じようですな。

おわりに

マニュアルを見ると、calコマンドはAT&T UNIXのVersion 5で現れたとのこと。
1975年ごろ。
まさに神代である。

そして、そんな時代でターミナル上にカレンダーを豪快に表示させるという、ロックなコマンドが生まれてるんである。
「真面目にやれよ」とか怒られなかったんですかね。
そしていつごろか、そこに復活祭のような移動祝祭日を計算するオプションが入ってくる。
のびのびしているというか、融通無碍というか。
気持ちよくて、駄文を記した次第でございます。

UNIX界の既読問題はfingerで解決…?

Pocket

埋め草ネタです。
LINEでは既読になっているのに返信ないとかが問題になるらしいんですがどうでもいいですね。

先日、ふとfingerしてみたら、メールをいつから読んでないか、表示されることに気が付いた。
知らなかったよ…。

 

 

No tags for this post.

poudriereでhomebrew(自前) pkgリポジトリを

Pocket

poudriereを使ったので経緯を記す。
poudriereは自前のpkgngレポジトリを作るツール。
自前のレポジトリを作るのは、自前のpackageを置きたいときや、オフラインマシンにpackageを提供したいとき、である。

poudriereの構築は、以下二つのサイトに沿えばできる。
ただ、簡潔にまとめられているので、本記事では補足も併せてまとめる。
http://blog.etoilebsd.net/post/Home_made_pkgng_repo
http://w.vmeta.jp/tdiary/?date=20130205

仕組み

poudriereがどのようにしてpackageを作るかというと。
OS/アーキテクチャごとにjailを作り、そこでportsからpackagesを作る。
つまりホストのOS|アーキテクチャと違っていても大丈夫だが、ホストは最新にしておいた方がよい。

packagesはあるディレクトリにまとめられる。
ディレクトリはそのままwebで公開できる形式になっている。
他のマシンから、pkgngでつなげば、自家製packagesを取得できる。

作成するpackagesは自分で選ぶことができる。
また、オプションも選ぶことができる。
オプションはまた別途。

必要なもの

zpoolを最低7GB用意しておくこと。

インストール

ports-mgmt/poudriereからportsでもpkgでもよいのでインストール。

設定ファイル

まず設定ファイルを作る。
/usr/local/etc/poudriere.conf.sampleをもとに。

/usr/local/etc/poudriere.conf

 

poudriere作業用zfsの準備

zpoolからzfsを切り出し、/poudriereにマウント。
poudriere.confを参照すると、最低でも7GBとある。

zfsの操作はよろしければこちらをどうぞ。
http://april.fool.jp/blogs/?p=1827

結果として以下のような環境。
20.0Gのzpoolをvaultとして作成している。

ここからpoudriereとして切り出し。

それを/poudriereにマウント。

再起動しても大丈夫なようにfstabに書き込み

以降、本格的な作業に。

デフォルトのportstreeを作る。: poudriere ports

jailごとにportsディレクトリを持っていてはディスクがいくらあっても足らない。
そこでportsディレクトリは全jailsで共有する。
そのportsディレクトリ、portstreeを作る。

poudriere ports -cで作成。
場所は/poudriere/ports/defaultに作られる。

ちなみに、二回目からは-uで更新。
指定がなければportsnapが使われる。
svnとかが使いたければ-m svnなどと指定する。

作成例

二回目以降の例
すでにportsがある状態で-cを指定すると怒られる。

 

各システム向けのJailを作る: poudriere jail

いよいよ個別のjail。
pkgを提供したいシステムに合わせてjailを作る。

jailを作るにはpoudriere jailを使う。
poudriere jailでオプション一覧が表示される。

-jでjailname指定、-vでFreeBSDバージョン、-aでアーキテクチャ(i386かamd64)を指定。
-cで作成、-dで削除、-lで一覧、-sで開始、-kで停止、-uで更新。

後で見返した時に分からなくなるので、jail名にはシステム関連の情報を入れておくとよい。
たとえば9.2-RELEASE i386向けなら92i386というように。

実行例

一覧の例

削除例

このときのmountの出力
えらいことに。

 

jailの作成が失敗するとき

失敗しなかったらこの章は読み飛ばしてOK.
最初のCreatingで失敗するときは、以前に作った何かが邪魔しているはず。

zfs listすると同じ名前の残骸がある。

削除。オプションなしではうまくいかないので-rで再トライ。

きれいになった。

 

作成したいpackagesのリストを作る

作成したいpackagesを指定する。
テキストファイルにpackagesを並べればよい。

ただしOriginで記載すること。
Originっていうのは…たとえばrsyncならnet/rsyncと書く。
Originが分からなければ、pkg searchするときに-oを付ければよい。

psearch(ports-mgmt/psearch)でもできる。

試しにrsyncだけ書く。

 

packagesの作成: poudriere bulk

いよいよ作成。
作成にはpoudriere bulkを使う。
poudriere bulkでオプションを一覧できる。

-fで作成するパッケージリストを指定。さっき作ったやつ。

特定のjailでのみ実施したい場合は-jでjailname指定。
-cで作成したpackagesをすべて吹き飛ばす。
-C -f <file>に書かれたpackagesのみ消す。

では実行。
初回なのでpkgも作ってくれているようですな。

 

自家製packagesの公開

さて。
作成したpackagesはどこにあるかというと、今回の場合は以下である。

このディレクトリをwebサーバで公開する。
※もちろん、webサーバで公開しているディレクトリに中身を移しても可。

この場所は、poudriere.confのPOUDRIERE_DATAで決まる。
${POUDRIERE_DATA}/packages/<jailname>-default/となる。
もしこの場所が気に食わなかったら、POUDRIERE_DATAを変える。

lsで中身を見てみると、オフィシャルpkgsiteのものと全くそっくりな内容になっている。

ではこれをwebサーバで公開する。
ここではnginxを例にとる。
nginx.confは下記のように。

デフォルトからほとんど変えていない。
変えたのは、#Here!と記載した箇所。
rootを/usr/local/poudriere/data/packagesに向ける。
autoindexをonにする。
nginxは、デフォルトではautoindex offなので、明示的に指定しないとForbiddenを食らってしまう。

nginxを起動して;

接続確認。良さそうですな。

webサーバを他の用途にも使っている場合には、以下のようにlocation /packages/を/usr/local/poudriere/dataに向ければよい。
※冗長なのでserverディレクティブの中しか引用しない。

 

クライアント側の設定

やっとたどり着いた。
クライアント側では/etc/pkg/の下か、/usr/local/etc/pkg/repos/の下に以下のような設定ファイルを作る。
ここで192.168.200.111はサーバのアドレス。

/etc/pkg/homebrew.conf

こうしておき、pkg -vvとすると見えるはず。

pkg updateするとさっき作ったpackagesも見える。

いろんな工夫については別途。

pkgのデータが壊れたでござる。よろしい。消しておしまい。

Pocket

pkgngで色々と遊んでたりすると、ごくごく稀に以下のような表示が出ることがある。

 

要するにpkgのdatabaseが壊れたということである。

これを復旧するにはどうしたらよいか。
実はすごく簡単だし、大した問題ではない。
ここで壊れているのは、repository catalogueつまりpkgサーバに何が格納されているか、というデータベースなので、消してもう一回ダウンロードすればよい。

 

として、それからpkg updateすればよいだけ。
ただし削除するときは注意。
local.sqliteは、そのホストにどのpkgがインストールされているか、というデータベースである。
これを消してしまうと、当然ながらそのホストにはpkgが一つもインストールされていない、ということになって、たいへん面倒なことになるから注意。
告白すると私は一度やりました。ええ。

[メモ] pkgngで更新のあるpackagesを一覧にするには

Pocket

pkg updateとやったあと、更新のあったpackagesを一覧するには。

スマート: “pkg version -vRL=”とすればよい。
かっこよくない: いきなりpkg upgradeして表示させる。

実行例

…なんか面倒くさいことになってるけど、この通り。

portsのINDEXを使う場合

/usr/portsがあり、OSバージョンに合ったINDEXがあれば、version -vIL=も使える。
INDEXとは、/usr/ports/INDEX-10などの、portsの目次。
portsを使わない場合は不要だけど、poudriereで自家製packagesを使うときには重宝するかも。

 

オプション補足

-Iと-Rの違いは下記の通り。

-vと-Lの意味は以下の通り。

 

pkgngが死んで詰んだときには

Pocket

 

pkgコマンドが何らかの要因で壊れてしまい、pkgコマンド自体の再インストールすらできず詰んでしまったときの対処方法を示す。
お急ぎの方は「蘇生方法」からお読みください。

背景: pkgはベースシステム?package?

pkgコマンドは、ベースシステムに組み込まれていながら、pkgシステムで管理されている。
言い換えると、ベースシステムに含まれているのに追加ソフトウェアとしてのpackagesでもある、というちょっと変わった存在である。

これは、pkgコマンド自体を、OSのバージョンに固定されることなく、更新できるための仕組み。
pkgコマンドが純然たるベースシステムであった場合、pkgコマンドを更新するたびにOSリリースが発生してしまうからである。

だから、皆さんご存知の通り、初めてpkgコマンドを実行すると最新のpkgをダウンロード&インストールするのだが、それは上記のような理由である。

なお、ここでの「ベースシステム」とは、FreeBSD projectがリリースする一式(カーネル+ユーザランド)を指す。packagesはユーザが任意に追加するソフトウェア。

問題: pkgはpackageなのでpkgが壊れると詰む。

よろしい。背景は、わかる。
しかし、問題もあって、すなわち;
pkgコマンドもpkgngで管理しているので、pkgコマンドが壊れてしまった場合、pkgの再インストールができず詰む
ということである。

たとえば、pkgコマンドが依存しているshared objectが無くなったとか、壊れた場合である。
FreeBSDではこういう場合に備えて、/rescueにスタティックリンクされたコマンドが並べられているが、pkgはここにない(9.2-RELEASEで確認)。

どうしたらよいか。

蘇生方法: pkgコマンドをダウンロードして、それでpkgコマンドをインストールせよ。

結論。pkgのpackageにはスタティックリンクされたpkgが含まれているのでそれを使う。
以下、手順。

pkgコマンドのダウンロード

まず、pkg.freebsd.orgからpkgコマンドのpackageをダウンロードする。
OSバージョン、アーキテクチャに合ったpackageを選ぶこと。

9.2 i386なら、以下
http://pkg.freebsd.org/freebsd:9:x86:32/latest/Latest/pkg.txz

10.0 amd64なら、以下
http://pkg.freebsd.org/freebsd:10:x86:64/latest/Latest/pkg.txz

※URLは変わる可能性があるので、都度、確認すること。
pkg.freebsd.orgから辿っていけばよい。

実行例

pkg-staticの取り出し。

以下のようにしてpkg-staticを取り出す。
このpkg-staticがスタティックリンクされたpkg

pkgのインストール

このpkg-staticを使って、ダウンロード済みのpkg packageをインストールする。
ローカルにダウンロード済みのpackageをインストールする場合には引数にaddを与える。
壊れたpkgが邪魔でインストールできないなら、-fを付けて強制的にインストールする。

あとは通常通りpkg updateなど。

pkgの設定確認

pkgの設定を一覧したり、どのリポジトリを見ているかを確認するにはpkg -vvとする。
pkgについて、誰かに質問するときには、この出力も必ず付けること。

pkgの設定ファイルなど。

以下があれば何とかなるはず。

/usr/local/etc/pkg/repos/FreeBSD.conf

以上

Windowsでcurlを使おう。あるいはMicrosoft Security Essentialの定義ファイルをcurlでダウンロード。

Pocket

Windowsでもバッチファイルでファイルのダウンロードをしたい事がある。
そうすると、たとえばIEにURLを渡して起動するといったような事が考えられるが、いちいち保存を選ばないといけないとか、何かの操作が必要になってしまう。
これではバッチファイルの意味がない。
無人で行う方法にはいくつかあるだろうが、ここではcurlを使ってみる。

curlとは

curlとは、URLを使った、データ送受信コマンドである。
UNIX/Linux系では有名なコマンドだけれども、実はWindows向けバイナリも配布されている。

公式サイト
http://curl.haxx.se/
Wikipedia
http://ja.wikipedia.org/wiki/CURL

インストール

上記サイトのダウンロードページから取得。
http://curl.haxx.se/download.html

Windows向けには32bit版, 64bit版のほか、Generic版, MSVC版がある。
さらにMSIとzipが選べる。

Genericの方が最新なのでこちらを使った。2014/1/7現在のバージョンは7.34.0。
Windows7だけど2000/XPのもので問題なし。

インストーラは使いたくないのであれば、MSIではなくzipの方でどうぞ。
ただしzipの場合は、PATHを通すなどの作業は自分でしないといけないよう。

curlの使い方

curlはオプションが多くてウンザリする。
以下のサイトが適切な量にまとまっていると思う。

http://d.hatena.ne.jp/hogem/20091122/1258863440

curlの使い方例

proxy越しにMicrosoft Security Essential定義ファイルのダウンロードをする例。

curlは、そのままだとダウンロードした内容を標準出力に表示する。
-Oを付けると、ダウンロード先のファイル名で保存する。
この場合だとmpam-fe.exeとして保存する。

proxyサーバは、-xあるいは–proxyで指定する。
書式は<[protocol://][user:password@]proxyhost[:port]>

プロトコル指定がなければHTTP proxyとして扱われる。
ポート番号については、指定がなければ1080として扱われる。

例ではproxyサーバとしてthis.is.sample.proxyserver.com:8080を指定。
定義ファイルのダイレクトリンクとして http://download.microsoft.com/download/DefinitionUpdates/mpam-fe.exe を指定している(いつまで使えるかは分からない)

追記: リトライ数、リトライ感覚の指定

サーバの反応が悪く、ダウンロード途中で失敗してしまうことがある。
そういう場合には、–retry <num> –retry-delay <sec>を指定しておこう。

 

curlのman抜粋

以下、-xと-Oのマニュアルを抜粋。