2009年9月11日金曜日

ubuntuにgoogle-earth 5.1 を入れる

google-earth Ver5.1 がリリースされたので、インストールメモ。


ポイント

  • 事前に前のバージョンを削除しておく。
  • qt4を使用しているみたい。
  • メニューのフォントはqtconfig から行なう。
  • フォントがビットマップで汚ない。
  • インストール先は自分のhomeにする。


インストール

 インストール自体はGoogleからダウンロードしてきた GoogleEarthLinux.bin ファイルに実行属性を付与してからダブルクリックで実行すればOK.

フォント

 このままだとフォントがビットマップで汚ないので、修正します。
同梱のqtライブラリを使用しないようにし、ubuntuのライブラリを利用するように変更します。以下を端末から実行。
sudo apt-get install libqtcore4 libqtgui4 libqt4-webkit qt4-qtconfig

cd ~/google-earth
mv libQtCore.so.4{,.bak}
mv libQtNetwork.so.4{,.bak}
mv libQtGui.so.4{,.bak}
mv libQtWebKit.so.4{,.bak}

cd ~/google-earth/plugins/imageformats/
mv libqgif.so{,.bak}
mv libqjpeg.so{,.bak}

ln -s /usr/lib/qt4/plugins/imageformats/libqjpeg.so .
ln -s /usr/lib/qt4/plugins/imageformats/libqgif.so .


フォントの変更は qtconfig から行ないます。フォントによってはうまく変更出来ないようです。

 これでアンチエイリアスの効いた状態になりました。



参考

GNU/Linux版Google Earth 5.0上の日本語フォントの問題とその対処

2009年9月10日木曜日

icewmの壁紙を変える

icewmの壁紙は、~/.icewm/preferences 内の、
DesktopBackgroundImage="ほげほげ.jpg"
行を書き換えてあげればいいわけですが、その後、icewmを再起動しないと反映されません。
けっこう面倒くさいので、さくっとシェルスクリプトでやっちゃいましょう。

以下のシエルスクリプトを、icewmbg-changer.sh という名前で保存し、実行属性を付けてください。

#!/bin/sh
# -*- coding: utf-8 -*-
# last updated : 2009/09/07 03:46:02 JST
#
# icewm用壁紙チェンジャー
# 使い方。
# icewmbg-changer.sh /home/foo/picture/hogehoge.jpg
# 引数がない場合はファイルセレクタが立ち上がります。
# ファイラのコンテキストメニューなどに登録して使うと便利でしょう。

# icewmの設定ファイル。フルパスで。
pref='/home/ほげほげ/.icewm/preferences'
# 壁紙のあるディレクトリ。フルパスで。
WALLPAAPERS='/home/ほげほげ/MyPictures/Wallpapers/'

if [ $# = 0 ]; then
cd $WALLPAAPERS
FILE=$(zenity --file-selection --title "Wallpaper Select")
else
FILE=$1
fi
sed --in-place=.bak -e \
's:^DesktopBackgroundImage=.*$:DesktopBackgroundImage="'"${FILE}"'":' $pref
icewmbg -r



設定

 以下二行を自分の環境に合わせて編集してください。
pref='/home/もげげ/.icewm/preferences'
WALLPAAPERS='/home/もげげ/MyPictures/Wallpapers/'


使い方

 そのまま起動すればファイル選択ダイアログが出ます。
 が、このシェルスクリプト単独ではあまりおいしくはないので、ファイラや画像管理ソフトと組み合わせて使うのがいいでしょう。
 ファイラなどのコンテクストメニューに登録しておけば、もっと便利に壁紙を変えることが出来ます。

 私はファイラに rox を利用しているので、こんな感じになります。



 ファイラと組み合わせれば、さくさく壁紙を変更出来るようになるので是非活用してみてください。

2009年8月9日日曜日

Emacsで行を右寄せをする

 昔作ったやつです。
 標準だと、M-x set-justification-right で右寄せしてくれます。がこれだとタブと空白で埋めてくれるので、空白だけで右寄せしてくれるものを作りました。

インストール

  1.  下の方のelispを right-line.el という名前で、~/.lisp などに保存します。
  2.  ~/.emacs

    (require 'right-line)
    (global-set-key "\C-cr" 'justify-right-line) ; 行を右寄せする
    と書いておきます。


使い方

 右寄せしたい行の上にカーソルを持っていき、C-c r とすれば右寄せされます。
 選択範囲内の右寄せも出来ます。
 桁数は C-u 桁数 M-x set-fill-column で。デフォルトだと C-x f かな?

right-line.el


;;; right-line.el --- 右寄せ
;; $Id: right-line.el,v 1.6 2007/10/11 09:55:17 yama Exp yama $
;; last updated : 2007/10/16 15:00:41 JST

;; Copyright (C) 2007 yama

;; Author: yama <yama@localhost>
;; Keywords:

;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:

;; 行を右寄せする。範囲選択していれば範囲選択部分を右寄せする。

;;; ToDo


;;; Code:

(defun yama-region-active-p ()
"リージョンアクティブならtを返す.
2007年10月06日(土曜日) 12:45:08 JST by yama"

(if (and transient-mark-mode mark-active) t nil))

(defun right-line ()
"2007年09月15日(土曜日) 14:46:17 JST
カレント行を空白で埋めて、右寄せする"

(interactive)
(save-excursion
(end-of-line)
(let ((ln(- fill-column (current-column))))
(beginning-of-line)
(insert-char ?\ ln))))


(defun right-line-region (start end)
"選択範囲内を空白で埋めて右寄せする。範囲選択されてなければカレント行を右寄せする
2007年10月06日(土曜日) 12:44:41 JST by yama"

(interactive "r")
(save-excursion
(save-restriction
(goto-char start)
(unless (bolp)
(beginning-of-line)
(setq start (point)))
(goto-char end)
(unless (bolp)
(beginning-of-line)
(setq end (point)))
(narrow-to-region start end)
(let ((max-line (count-lines start end))
(count 0))
(goto-char (point-min))
(while (< count max-line)
(right-line)
(next-line)
(setq count (1+ count)))))))

(defun justify-right-line (start end)
"カレント行を右寄せする。範囲選択されているなら範囲内を右寄せする.
2007年10月16日(火曜日) 14:08:05 JST by yama"

(interactive "r")
(if (yama-region-active-p)
(right-line-region start end)
(right-line)))

(provide 'right-line)
;;; right-line.el ends here



 報告書とか文書の末尾の署名なんかに利用すると便利です。
 自分で作って使っていなかったり・・・orz

2009年8月2日日曜日

Emacsの起動時間を調べる

Emacs23.1 がリリースされましたねー。めでたいめでたい。やんややんや。
もっともだいぶ前から使っていたんで新鮮さはないんですが、やっぱりアンチエイリアスの効いたフォントは美しい。

んで、emacs23から追加された関数を使って、Emacsの起動に掛かった時間を表示する機能など。小ネタです。

;;;====================================
;;;; boot-time
;;;====================================
;;; 起動するまでにかかった時間を表示。
(defun boot-time ()
" 起動するまでにかかった時間を表示。"
(interactive)
(message "起動時間:%s秒"
(- (cadr after-init-time) (cadr before-init-time))))


M-x boot-time で起動時間が表示されます。

2009年7月2日木曜日

CLIで天気予報を表示する

 最近perlを触る機会があり、perlをいじるのは初めてだったのですが、なんとかでっち上げてみました。perlなんて記号だらけの省略記法だらけで大嫌いだったのでですが、時代は変わり、最近ではモジュールを活用してブロックを組み立てるかのように書けるとか。
 実際 CPAN の充実ぶりは凄いですね。あらためて perl を見直しました。

 んで今回はYahooから天気予報を取得して表示するコマンドです。前回は今現在の気象情報を表示するだったのですが今回は予報です。

インストール

 以下のスクリプトを適当な名前、yohou.pl みたいな名前で ~/bin/ あたりにでも保存し、chmod +x yohou.pl として実行属性を付けておいてください。

#!/usr/bin/perl
# last updated : 2009/07/02 15:46:45 JST
#
# Yahooから天気予報を取得する。

use utf8;
use strict;
use warnings;
use XML::TreePP;

binmode STDOUT, ":utf8";


# url
# 以下のurlから調べて下さい。
# http://weather.yahoo.co.jp/weather/public/rss.html
my $url = "http://rss.weather.yahoo.co.jp/rss/days/4410.xml";
# カットする文字列。
my $cut = " 東京(東京) ";




my $tpp = XML::TreePP->new(array_element => [qw( item )]);
$tpp->set( utf8_flag => 1 );
my $tree = $tpp->parsehttp( GET => $url);
my $channelhash = $tree->{rss}->{channel};
print $channelhash->{title} . "\n";
my $itemarray = $channelhash->{item};
foreach my $itemhash ( @$itemarray ) {
my $base = $itemhash->{title};
unless ($base =~ /^\[PR\]/) {
$base =~ s/ - Yahoo!天気情報$//;
$base =~ s/ (\d)日/ 0$1日/;
if ($base =~ /^【 \d\d日/) {
my $idx = rindex($base, '】');
my $day = substr($base, 0, $idx + 1);
$day =~ s/$cut//;
my $wea = substr($base, $idx + 2);
my @tenki = split(/ - /, $wea);
$tenki[0] = trim($tenki[0]);
print sprintf("%s %-4s %s", $day, ume($tenki[0]), $tenki[1]) . "\n";
}
else {
print $base . "\n";
}
}
}
print $channelhash->{copyright} . "\n";

sub trim {
my $val = shift;
$val =~ s/^\s*(.*?)\s*$/$1/;
return $val;
}

sub ume {
my $val = shift;
my $len = length($val);
if ($len < 4) {
$val = $val . " " x (4 - $len);
}
return $val;
}

 次に自分の住んでいる地域の天気予報を表示するために、http://weather.yahoo.co.jp/weather/public/rss.html から地域のurlをコピーして
my $url = ”http://rss.weather.yahoo.co.jp/rss/days/4410.xml"
の行を変更しておいてください。その下の my $cut も同じく地域に合わせて変更を。$cut は単に冗長な部分を削除するだけですから、ほっといても特に問題ありません。

 次にこのスクリプトは XML::TreePP というモジュールを利用しているので、
sudo apt-get install libxml-treepp-perl
としてインストールしておいて下さい。
 以上で準備は完了です。後は ~/bin/yohou.pl とでもして実行すれば、
~$ yohou
Yahoo!天気情報 - 東京(東京)の天気
【 02日(木)】 雨後曇  26℃/21℃
【 03日(金)】 曇り   26℃/21℃
【 04日(土)】 曇時々雨 25℃/22℃
【 05日(日)】 曇時々雨 27℃/21℃
【 06日(月)】 曇り   28℃/22℃
【 07日(火)】 曇時々雨 28℃/22℃
【 08日(水)】 曇時々雨 27℃/22℃
【 09日(木)】 曇時々雨 26℃/22℃
【 23区西部 】警報・注意報はありません
【 23区東部 】警報・注意報はありません
【 多摩北部 】警報・注意報はありません
【 多摩西部 】警報・注意報はありません
【 多摩南部 】警報・注意報はありません
Copyright (C) 2009 Yahoo Japan Corporation. All Rights Reserved.
な感じで天気予報が表示されます。天気情報コマンドと合わせて使えばいいでせう。


# ん〜それにしてもperl の文字列処理のやり方がまだ理解していない・・・でもモジュールは便利だね。というか便利すぎ。
# いままでrubyばかりだったけど、perlで便利なモジュールがある場合はperlを使おう。

2009年6月7日日曜日

ubuntuに Nagios を入れる

UbuntuでNagiosなんだけど、英語ですね。
という のっぽのブログ「バカンチ」さんの書き込みをみたので、Nagios を日本語化したものをPPAに上げておきました。
https://launchpad.net/~yama-natuki/+archive/ppa
からどうぞ。

これだけではあれなので自分でも入れてみました。
インストール後、パスワードを設定しないといけないみたい。
sudo dpkg-reconfigure nagios3-common
してパスワードを設定。
あとは、 http://localhost/nagios3/ にアクセス。

2009年6月2日火曜日

ubuntuで AppArmor を使ってセキュアな環境を構築する

AppArmor はubuntuにセキュアな環境を提供するフレームワークです。同様のものにSElinuxがありますが、あちらはがっちがちの強固なセキュアOSで、我々のようなエンドユーザーが気軽にほいほいと使えるものでもありません。SElinuxの中の人も、ポリシーは専門家が記述すればいいと言っています・・・

 幸いにして AppArmor はカジュアルに扱えるセキュリティツールとしてubuntuで採用されており、これを使わない手はありません。がしかし日本語での資料がほとんどなく、ろくに有効活用されていないのが実情だと思います。
 そこで、自分のためのメモとして簡単な使い方を書いてみたいと思います。

導入

 apparmor はアプリごとにルールを設定し、設定したルール以外の行動を禁止します。ですからあるアプリが脆弱性を利用してクラックされ、そのアプリから全然関係のないファイルにアクセスしようとしても、それはルールで許可されていませんから、アクセスが出来ず、被害を防げるという仕組みです。
 このルールをプロファイル(ポリシー)といい、あらかじめいくつか用意されていますので、まずprofileを導入します。
sudo apt-get install apparmor-profiles apparmor-utils
apparmor 自体は標準で有効になっているはず。

確認する

sudo apparmor_status
でステータスが確認出来ます。
 enforce mode が実際にprofileを適用しています。
 complain mode が学習モードで、システムログに学習結果をどんどん書き出しています。


新しいprofileを作る

 polipo を使っているので、こいつのprofileを実際に作っていきます。

sudo aa-genprof /usr/bin/polipo
とすると、
Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" button below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /usr/bin/polipo

[(S)can system log for SubDomain events] / (F)inish
と聞いてきますので、F キーを押して終了させます。そうすると、 /etc/apparmor.d/ 以下に usr.bin.polipo というファイルが作られます。
 次に、
sudo aa-complain /usr/bin/polipo
としてすぐさま学習モードにし、
sudo /etc/init.d/polipo restart
としてpolipoをリスタートさせ、しばらく動作させます。この間 apparmor はpolipoの動作ログを取り続けます。いろいろとpolipoを動作させ、その振る舞いを学習できたかなあと思ったら、
sudo aa-logprof
として学習結果を反映させます。
対話形式で、許可、不許可を聞いてきますので、逐次答えていきます。答え終わると、セーブするか聞いてくるので、もちろんセーブします。

 しばらく学習行為を終え、もう漏れがないかなあと思ったら、complainモードからenforceモードに
sudo aa-enforce polipo
として切り替えます。

 これでpolipoは設定したファイル以外にはアクセス出来なくなります。
 参考までに、/etc/apparmor.d/usr.bin.polipo の中身を。
# Last Modified: Tue Jun  2 16:00:15 2009
#include

/usr/bin/polipo flags=(complain) {
#include
#include



/etc/polipo/config r,
/etc/polipo/forbidden r,
/etc/polipo/uncachable r,
/usr/bin/polipo r,
/usr/share/polipo/www/doc/* r,
owner /var/cache/polipo/ r,
owner /var/cache/polipo/** rw,
owner /var/log/polipo/polipo.log a,
owner /var/run/polipo/polipo.pid w,

}

こんな感じになっています。もちろんエディタで直接変更してもかまいません。

 つまり簡単に言うと、
  1. プロファイルがなければ aa-genprof で作る。
  2. complainモードでしばらく学習させる。
  3. aa-logprof で学習結果を反映させる。
  4. Okなようなら enforceモードに切り替える。
こんな感じです。ね、簡単でしょう?w

 ちなみに aa-genprof でいきなりFキーで終了させていましたが、あのままの状態でアプリを立ち上げ、いろいろ操作をした後に、Fキーでなく、Sキーを押すと、許可、不許可の設定が続きます。ただ短時間の学習だとどうしても漏れがあるので、しばらくはcomplainモードで回したのちに、 aa-logprof で反映させるといいでしょう。

# 正直デスクトップユーザで セキュアOS必要かというと現状いらないんじゃないかと思うんですが、将来のことを考えると憶えておいて損はないと思います。でもその前に TOMOYO がubuntu にきちゃうかなw