‘Linux’ カテゴリーのアーカイブ

Ubuntu 10.10 (Maverick Meerkat) ServerにJDK6をインストールする

今回の情報元。
How to install Sun JDK on Ubuntu 10.10 "Maverick meerkat"? – Stack Overflow

まずはaptラインの設定。

# vi /etc/apt/source.list

末尾に

deb http://archive.canonical.com/ubuntu maverick partner
deb-src http://archive.canonical.com/ubuntu maverick partner

を追加。

# aptitude update
# aptitude install sun-java6-jdk

で、OK。


debian lennyにJDKをインストールする

aptでインストールできますが、non-freeパッケージを有効にする必要があります。

# vi /etc/apt/sources.list

末尾に1行追加します。

deb http://ftp.jp.debian.org/debian/ lenny non-free

# aptitude update

# aptitude install sun-java6-jdk
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
拡張状態情報を読み込んでいます
パッケージの状態を初期化しています… 完了
タスクの記述を読み込んでいます… 完了
以下の新規パッケージがインストールされます:
  avahi-daemon{a} dbus{a} dbus-x11{a} gsfonts{a} gsfonts-x11{a} java-common{a} libasound2{a}
  libavahi-common-data{a} libavahi-common3{a} libavahi-core5{a} libdaemon0{a} libdbus-1-3{a} libnss-mdns{a}
  libxi6{a} libxtst6{a} odbcinst1debian1{a} sun-java6-bin{a} sun-java6-jdk sun-java6-jre{a} unixodbc{a}
更新: 0 個、新規インストール: 20 個、削除: 0 個、保留: 0 個。
61.7MB のアーカイブを取得する必要があります。展開後に 175MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]

途中でライセンスの確認をされます。
問題なければ続行すれば後は勝手に進んでインストール完了です。


ImageMagickのPDF変換用gsコマンドを差し替える

例によってRedHat EL4にて、yumでconvertを入れたものの、バージョンが6.4.6と古く、Powerpointで作成したPDFがエラーになる。

エラー内容はこんな感じ。

$ convert -channel RGB ./test.pdf ./test.jpg

   **** This file has a corrupted %%EOF marker, or garbage after the %%EOF.
   **** The file was produced by Microsoft? PowerPoint? 2010:
   **** please notify the author of this software
   **** that the file does not conform to Adobe's published PDF
   **** specification.  Processing of the file will continue normally.

Error: /rangecheck in --.buildshading2--
Operand stack:
   --dict:8/8(L)--   --dict:3/5(L)--   --nostringval--   false   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --dict:3/4(L)--   --nostringval--   --dict:5/5(L)--
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1   3   %oparray_pop   1   3   %oparray_pop   1   3   %oparray_pop   --nostringval--   2   1   2   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   1   %stopped_push   --nostringval--   --nostringval--   --nostringval--   1   %stopped_push   --nostringval--   --nostringval--   %array_continue   --nostringval--   false   1   %stopped_push   --nostringval--   %loop_continue   --nostringval--   --nostringval--   --nostringval--   3   10   %oparray_pop   --nostringval--   --nostringval--   false   1   %stopped_push   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1069/1123(ro)(G)--   --dict:0/20(G)--   --dict:93/200(L)--   --dict:93/200(L)--   --dict:97/127(ro)(G)--   --dict:229/230(ro)(G)--   --dict:19/24(L)--   --dict:4/6(L)--   --dict:19/20(L)--   --dict:3/5(L)--
Current allocation mode is local
GNU Ghostscript 7.07: Unrecoverable error, exit code 1
convert: Postscript delegate failed `./test.pdf': No such file or directory @ pdf.c/ReadPDFImage/612.
convert: missing an image filename `./test.jpg' @ convert.c/ConvertImageCommand/2710.

で、見る限り、GhostScriptのエラーのようなので、gsのバージョンを調べてみると、

$ gs -v

GNU Ghostscript 7.07 (2003-05-17)

Copyright (C) 2003 artofcode LLC, Benicia, CA.  All rights reserved.

というわけで、GhostScriptのコマンドの最新版を別にインストールして対応。その際、元のgsコマンドを入れ替えるわけにいかなかったので、ImageMagickから読み込むgsコマンドのファイルだけを指定できないかと思ったら、ImageMagickはXMLでコマンドを定義していたんですね。

ImageMagick • View topic – manually set delegate path to gs (ghostscript)

各種コマンドのオプションがImageMagick-6.4.6/config/delegates.xmlに記述されています。

gsコマンドの箇所を絶対パスに書き換えてやるだけで完了。便利。


Linuxで複数ユーザで使えるリモートデスクトップ環境を作る

今回やりたかったのは、社内で複数の人が一台の共有マシンを使って、とある時間のかかる処理をするための環境作成です。

最初はxinetd+Xvfb+x11vncでgdmをあーやってこーやって…って色々試していたのですが、Windowsのリモートデスクトップ接続をクライアントに使えた方が便利だなぁとか思ってRDPで転送する方法がないか調べたところ、むしろさっきまで小難しくやろうとしていたすべてをまるっとまとめてやってくれるxrdpというものを発見!

これならシンクライアントっぽいものが一瞬で作れる!ということでさっそく導入してみたので手順解説します。

WS000001

このxrdp、デフォルトのままならリモートデスクトップユーザからシステムに変更を加える作業はできないので、今回の用途に最適です。

xrdp | Get xrdp at SourceForge.net

ユーザの追加も、通常通りLinuxにユーザ追加するだけで、リモートデスクトップログインできるようになります。

VNCに対する利点は多分こんなところ

  • 画像解像度がクライアント側から変更できる
    WS000000
  • Windowsユーザに追加クライアントをインストールしてもらう必要がない

設定にあたってはこちらのブログのエントリが大変参考になりました。これがないとまともにキーボード使えませんでした。

サーバはUbuntu Server 9.10(Karmic Koala)を使いました。別にUbuntuデスクトップ版でも良かった説。

とりあえずインストール時にこれらを選択しておきます。インストール後なら$ sudo taskselでもOK。

  • Basic Ubuntu server
  • OpenSSH Server
  • Ubuntu desktop

xrdpですが、aptやSourceForgeからtar.gzでダウンロードできるものはバージョンが古く、Windows7のリモートデスクトップ接続クライアントに対応していません。なので、cvsレポジトリから最新を持ってくる必要があります。

今回チェックアウトしたものは2009-12-26に最終更新されたバージョンです。

まずは下準備とチェックアウトまで。

$ sudo aptitude update
$ sudo aptitude install cvs autoconf libtool libssl-dev libpam0g-dev libx11-dev libxfixes-dev tightvncserver scim scim-anthy
$ cd ~/
$ mkdir xrdp
$ cd xrdp
$ cvs -d:pserver:anonymous@xrdp.cvs.sourceforge.net:/cvsroot/xrdp login
$ cvs -z3 -d:pserver:anonymous@xrdp.cvs.sourceforge.net:/cvsroot/xrdp co .
$ cd xrdp

で、前述のブログを参考にいくつかファイルを修正します。

$ vi xrdp/lang.c
          if ((code >= 0) && (code < 128))


          if ((code >= 0) && (code < 135))

に。

$ vi xrdp/xrdp_types.h
    struct xrdp_key_info keys_noshift[128];
    struct xrdp_key_info keys_shift[128];
    struct xrdp_key_info keys_altgr[128];
    struct xrdp_key_info keys_capslock[128];
    struct xrdp_key_info keys_shiftcapslock[128];

    struct xrdp_key_info keys_noshift[135];
    struct xrdp_key_info keys_shift[135];
    struct xrdp_key_info keys_altgr[135];
    struct xrdp_key_info keys_capslock[135];
    struct xrdp_key_info keys_shiftcapslock[135];

に。

$ ./bootstrap
$ ./configure
$ make
$ sudo make install

次は日本語キーボード用にキーマップを作成します。キーマップファイルは/usr/local/bin/xrdp-genkeymapを使って作ることもできるのですが、「\」や「_」のキーが効かなくなる現象があるので、さきほどのエントリからコピーしてきます。

とは言ってもファイル単体では公開されていないので、xrdp-0.5.0-instfiles.patchから当該部分を引っこ抜いてくる形になります。

ちなみに自分で生成する場合は、GUI上の端末から(ここ重要)
$ sudo /usr/local/bin/xrdp-genkeymap /etc/xrdp/km-0411.ini
でOKです。

それ以外は普通にSSHから作業できます。認識する名前別にキーマップの複製。lnでもいいかも。

$ cd /etc/xrdp/
$ sudo cp km-0411.ini km-e0200411.ini
$ sudo cp km-0411.ini km-e0210411.ini
$ sudo cp km-0411.ini km-e0010411.ini
$ sudo vi /etc/xrdp/startwm.sh

startwm.shの内容は前述のエントリからまるごとコピペして上書きします。が、Ubuntuで試したところ、ログイン後にキー配列がめちゃくちゃになる現象(「qwerty」が「c.gvn 」になる)があるので、一行追加して対策します。

export XKL_XMODMAP_DISABLE=1

を、for WindowManager in $SESSIONSの前にでも入れておきます。

で、あとは起動するだけです。

$ sudo /etc/xrdp/xrdp.sh start

WS000002

複数のユーザが同時にログインしても問題なく動作します。1200×1920とかの解像度でもストレスなく作業できました。

Mac OS Xな人々にはRemote Desktop Connection Client for Mac 2もあるのでばっちりです。

追記:あ、右シフトキーが効かない現象がありました。謎。


Virtual PC上でdebianのeth0が消えた現象

Windows Vista Ultimate x32上のMicrosoft Virtual PCからWindows 7 Enterprise x64のWindows Virtual PCにDebian lennyの仮想マシンのデータをそっくり移して使おうとしたら、eth0がなぜか消えてしまった…

loしか残ってないという状況。

結論から言うと、/etc/udev/rules.d/70-persistent-net.rulesを削除した後、rebootしたら直りました。

/etc/init.d/networking restartとかでは直らず。

ゲストOSが64bitじゃないからいけないのかとか思ってdebianの64bit版とか別にインストールしようと試みて、ゲストOSには32bitしか受け付けないことを知ったり。なので、そこは問題ではなかった。


Windows 7 x64でのVirtual PCとdebian

Windows 7 x64環境のWindows Virtual PCに、以前Vista 32bit版のMicrosoft Virtual PC 2007で使っていたdebian Lennyの仮想マシンを持ってきて起動させようとしたら、ブートの途中で何もエラーも表示せずに応答しなくなってしまったので対策を調査。

多分Windows 7どうこうではなくて、64bit版だということが問題っぽい。

MicrosoftVirtualPc2007/lenny – Debian Wiki

noreplace-paravirtパラメータを追加しておけば良いだけ。

まぁ、すでに設定していた場合は何もせずに移行できたって話ですね。Windows Virtual PCとVirtual PC 2007間での互換性問題はほとんどなさそう。

追記

NICを認識しない…やっぱりdebianを64bit版にするしかないのか…?


FON2202の電源を入れたら無線クライアントとして繋がるようにする

引き続き、La Fonera 2.0ことFON2202をいじる。

電源を入れたら自動で無線LANに接続して、動作を開始するようにする。これができれば電源ケーブルだけで取り回しがかなり自由に。あ、SSH開放したDEVELOPERファームを入れていること前提です。

無線LANに接続するところの参考サイトはこちら。
仙石浩明の日記: La Fonera を無線LAN 端末として使ってみる

まずはFONのFREESPOTとして待ち受けている無線を止めるところから。
というかアレなので一回全部止めてしまいましょう。
# wlanconfig ath0 destroy
# wlanconfig ath1 destroy

で、新たに1つ、staモード、通常の無線クライアントとしてath0を作成。
# wlanconfig ath0 create wlandev wifi0 wlanmode sta

接続先の設定。
# iwconfig ath0 essid "HogeHoge"
# iwconfig ath0 key s:hogehogewep00
# iwpriv ath0 mode 11g

で、起動。
# ifconfig ath0 up

一応これだけでアクセスポイントには接続できているはずなのだけど、IPは勝手に設定したりしないので、DHCPクライアントを使って取得。
# udhcpc -i ath0

では早速Pingを…
# ping www.google.co.jp
ping: bad address ‘www.google.co.jp’

あれ?

名前解決を…
# nslookup www.google.co.jp
Server:    xxx.xxx.xxx.xxx
Address 1: xxx.xxx.xxx.xxx

nslookup: can’t resolve ‘www.google.co.jp’: Name or service not known

おぉぉ

どうやら調べたらFirewallらしい。Firewall有効にしていると、無線側からのSSHもPingも通らない。
今回はLAN内に設置するため、その辺のセキュリティはいらないので、さっくりとFirewallを外すことに。

# /etc/init.d/firewall stop
# nslookup www.google.co.jp
Server:    xxx.xxx.xxx.xxx
Address 1: xxx.xxx.xxx.xxx

Name:      www.google.co.jp
Address 1: 66.249.89.99 jp-in-f99.google.com
Address 2: 66.249.89.147 jp-in-f147.google.com
Address 3: 66.249.89.104 jp-in-f104.google.com

おぉ、できたー。

…と、喜んだのもつかの間。1分ほど経つとath0の接続が切れる現象が。
色々調べて見ると、どうやらchillispotというものが起動して、設定を書きなおしてるらしいということが判明。
なるほど、無線アクセスポイントを構築するプログラムとのこと。
いらないね。

というわけで、起動を解除…しようとしたがどうにもどこから起動しているのかがわからない…
WANが有効になったことをトリガに起動されているらしいのだけど…
/etc/hotplug.d/以下にnetとifaceというディレクトリがあって、その辺を探ってみたのだけど、どうにも止められず。

起動するものはしょうがないということで、起動スクリプトを書き換えて対処。
# vi /etc/init.d/chillispot
do_start() {
の次の行に
return 1
として、即終了させておく。

この辺、OpenWRTにしてあれば入ってないと思うので無用な苦労しなくていいはず。
次回の課題だなぁ。

まとめ。
電源入で自動接続の設定はchillispotの編集をした後、適当に/root/にでもシェルスクリプトを作って起動時に実行するように仕込むだけ。
# vi /root/wlaninit.sh

#!/bin/sh

wlanconfig ath0 destroy
wlanconfig ath1 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode sta 
iwconfig ath0 essid "HogeHoge" 
iwconfig ath0 key s:hogehogewep00
iwpriv ath0 mode 11g

ifconfig ath0 up
udhcpc -i ath0
/etc/init.d/firewall stop

で保存。

# chmod +x /root/wlaninit.sh
# cd /etc/rc.d/
# ln -s /root/wlaninit.sh S96wlaninit

いじょ。一度起動してから終了させるのが非常に無駄くさいがアクセスできなくなったりしてハマれる時間がないので今回はこれで。


FON2202の自動アップデートを停止する

色々いじる関係上、自動でアップデートとかされても困るので自動アップデートを停止する。

SSHでログイン後、
# vi /bin/thinclient

. /tmp/.thinclient.sh
の行を以下のように書き換えてコメントアウト。
# . /tmp/.thinclient.sh

これでOK。
やり方は基本的に他のFONと同じ。DEVELOPERファームで最初からSSH使えるので手順が大幅に楽。


Linuxでパノラマ画像結合をバッチ処理してみる

ある固定の複数のカメラから定期的に送信されてくる写真をパノラマ結合する。
環境はDebian Linux(lenny)。

カメラとしてはこんなものを用意。

P1020072

Logicool Qcam Pro 9000の中身2つ。ノーダルポイントとか考慮した方がいいのでしょうが、遠景だと問題にならないのでパス。画角はそれぞれ75度。

で、これが元画像。

image6_2cam image6_1cam

とりあえず前提条件として、カメラが固定で移動しないので、毎回同じ変換処理をかけるだけ。コントロールポイントの計算とかはしない。
で、変形の計算については、GUIが便利なWindowsのHuginを使ってあらかじめ計算しておきます。

Huginの使い方とかは
Hugin / Panorama Toolsによりパノラマ写真を作る
とかを参照。
諸々設定が完了したら、メニューの[ファイル]→[PTStitcher用スクリプトの書き出し]でパラメータ類をファイルに書き出します。

次はLinux側。
まずはPanoToolsをSourceForgeからダウンロード。バージョンはひとつ前のメジャーバージョンの12を使用。
$ wget http://downloads.sourceforge.net/sourceforge/panotools/libpano12-2.8.6.tar.gz?use_mirror=jaist -O libpano12-2.8.6.tar.gz
panotool13もあるけど、PTStitcherがlibpano12.soを所望で13だと使えないので12で。
どうやら13からはPTStitcherのオープンソース移植版のPTmenderというものを使うらしい。
一応、スクリプトとかオプションは互換とのこと。でもハマるのが怖いので今回は見送り。

ダウンロード後、展開。
$ tar xvzf libpano12-2.8.6.tar.gz
$ cd libpano12-2.8.6
libpng-devとかlibtiff-devが入ってないと文句言われるので、
$ sudo aptitude install libpng-dev libtiff-dev
しておく。
$ ./configure –prefix=/usr
$ make
$ sudo make install
これでPTStitcherを使う準備完了。

$ wget http://www.all-in-one.ee/~dersch/PanoTools.tar.gz
$ tar xvzf PanoTools.tar.gz
$ cd PTLinux/Helpers/
$ chmod +x PTStitcher
$ ./PTStitcher -h
Usage: PTStitcher [options] file1 file2 …

オプションとかはPTStitcher.txtに書いてある。
で、先ほどのスクリプトファイルを設置して
$ ./PTStitcher -o output.jpg sample.pto
とかやれば出力完了!

image6_2cam-image6_1cam

バッチ処理部分は適当に…


FON2202にcurlを入れてファイルをアップロードする

特に難しいことはなく、ただそろそろディスク容量が厳しくなってくるのも事実。

# cd /tmp/
# wget http://www.fonera.be/rep/FON2202/index.php?get=245 -O libcurl_7.17.1-1_mips.ipk
# wget http://www.fonera.be/rep/FON2202/index.php?get=35 -O curl_7.17.1-1_mips.ipk
# wget http://www.fonera.be/rep/FON2202/index.php?get=277 -O libopenssl_0.9.8h-1_mips.ipk
# opkg install libcurl_7.17.1-1_mips.ipk curl_7.17.1-1_mips.ipk libopenssl_0.9.8h-1_mips.ipk

上記コマンドでcurlはインストールできる。

curlの動作に必要なOpenSSLのライブラリが476.84 kBもあるので、正直オススメできない…

ただし、その分メリットは大きい。ファイルのアップロードも簡単。

# curl -F FILE=@snap0.jpg http://192.168.0.x/upload.php

FUSEのパッケージもあるから、ネットワークドライブでマウントしてしまった方がいいのかもしれない。片っ端からAmazonS3に上げてくとか。