: 12月末まで20%OFF権
: あのクワトロ・ジャイアントを1800円ですぐお届け!!!
: ドミノ・ピザ & まぐまぐ限定 → http://a.mag2.jp/iHay
─────────────────────────────────[PR]─
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ いますぐ実践! Linux システム管理 / Vol.169 / 読者数:1386名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
こんばんは、うすだです。
なんだったかは忘れましたが、無料のサービスを受けるため、某転職情報
サイトに登録してから、求人情報のメールが届くようになりました。
いま、特に転職したいというわけではないのですが、どういう会社がなに
を募集しているのかというのは気になりますので、たまに眺めています。
で、見ていて思うのが、どの会社さんも、社名にインパクトがなくて記憶
に残らない、ということです。(ものすごく失礼ですみませんが…。)
多いのが、あまり聞いたことのない横文字の名前とか、ありきたりすぎる
名前(システムなんとか、なんとかテクノロジーなど)、それと、長い社名
を短縮したアルファベット3文字、などでしょうか。
でも、そんな中、ありふれた横文字単語の組み合わせでも、組み合わせが
面白い社名に出くわすことがあります。
そうしますと、なんでそんな名前にしたんだろうと思い、中身をじっくり
見てしまいます。(思うツボですよね…)
ちなみに、個人的におおっと思ったのは、「バイナリーラブ」です。
バイナリーをラブですよ。すごい発想ですよね。
(例がないとアレだと思い、意を決して書いてみました。どきどき。)
それはさておき、では、超メジャーな会社の社名はどうなんだろうか? と
いう疑問が、個人的に沸いてきました。
グーグル、ヤフー、マイクロソフト、アップル、ソフトバンク、インテル
…などなど、社名が普通名詞的になっている会社がたくさんあります。
それらをあらためて見てみますと、そういう意味だったのかとか、意外と
ぱっとしないなあとか、いろいろ考えられて、興味深いです。
…というわけで、いくつか分類しようとしたのですが、凝っている社名も
そうでない社名もあり、これっていう傾向は見られておりません。
結局、知られているかどうかが重要、なのかもしれませんね。
以上、スタート地点戻ったところで、今回もはりきってまいります!!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回のお題 - alien でパッケージを変換する
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ひとくちに Linux と言いましても、さまざまなディストリビューション
が世の中には存在しております。
ですが、使用するパッケージの形式は、RedHat 系ですと RPM、Debian 系
ですと deb と、ディストリビューションの数ほどには存在しません。
ですので、他のディストリビューション用のパッケージを試してみたら、
意外と問題なく使えた、といったことが少なからずあるように思います。
とはいえ、Debian を使っているのに、RPM パッケージしかない場合は、
途方に暮れてしまいますよね。(もちろん、逆も同様ですが。)
しかし、みなさん、ご安心ください。
そんな貴兄のために、パッケージを変換してくれる、便利なツールが存在
します。それは、alien さんです。
alien
http://kitenet.net/~joey/code/alien/
今回は、この alien さんを使って、手軽にパッケージを変換する方法を
ご紹介したいと思います。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ パッケージを変換する
もちろん、まずは、alien パッケージが必要です。
しかし、残念ながら、Debian 系にはありますが、RedHat 系にはないよう
です。申し訳ありませんが、RedHat 系の貴兄は、指をくわえて見ていて
ください。(あるいは、ソースを入手してコンパイルしてみてください。)
$ sudo apt-get install alien
さて、基本的な使い方ですが、いたって簡単です。
変換したい形式をオプションで指定するだけです。
変換できる形式は、deb や rpm はもちろん、Stampede Linux の slp や
Slackware の tgz、そして Solaris の pkg にまで対応しています。
(といっても、Stampede なんていうのは初めて知りましたが…。)
それぞれ、オプションは、--to-パッケージ名 になります。
たとえば、foo-0.0.1-1.fc12.i386.rpm を deb パッケージに変換したい
場合は、以下のように実行します。
……………………………………………………………………………………
$ alien --to-deb foo-0.0.1-1.fc12.i386.rpm
Must run as root to convert to deb format (or you may use fakeroot).
……………………………………………………………………………………
おっと、root で実行するか、fakeroot を使えと言われてしまいました。
穏便に、fakeroot を使ってみたいと思います。
……………………………………………………………………………………
$ fakeroot alien --to-deb foo-0.0.1-1.fc12.i386.rpm
foo_0.0.1-2_i386.deb generated
……………………………………………………………………………………
…ああ、今度は大丈夫です。
逆に、deb パッケージから RPM パッケージへの変換は、--to-rpm という
オプションでできます。
以下では、bar_0.0.2-35_i386.deb を RPM パッケージに変換します。
……………………………………………………………………………………
$ alien --to-rpm bar_0.0.2-35_i386.deb
Warning: alien is not running as root!
Warning: Ownerships of files in the generated packages will \
probably be wrong.
……………………………………………………………………………………
エラーにはなりませんが、非root で実行すると都合が悪そうです。
同様に、fakeroot でオブラートに包みます。
……………………………………………………………………………………
bar-0.0.2-36.i386.rpm generated
$ fakeroot alien --to-rpm bar_0.0.2-35_i386.deb
bar-0.0.2-36.i386.rpm generated
……………………………………………………………………………………
同じようにして、slp や tgz への変換も可能です。
ただし、pkg への変換は、pkgproto というコマンドがない! と言われ、
エラーになってしまいますので、できませんでした。
……………………………………………………………………………………
$ fakeroot alien --to-pkg baz-0.0.3-99.noarch.rpm
sh: pkgproto: not found
error during pkgproto:
……………………………………………………………………………………
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ ところでちゃんと動くかな
変換だけしても、実際にインストールや動作に失敗していては、元も子も
ありませんよね。というわけで、確認してみましょう。
前回、John the Ripper をご紹介しましたが、残念ながら Fedora にしか
パッケージがないようだ、とお伝えしました。
では、alien さんで deb パッケージを作ってみましょう。
ちなみに、john さんの RPM パッケージは、以下を使用しました。
ftp://rpmfind.net/linux/fedora/releases/10/Everything/i386/os/Packages/john-1.7.0.2-6.fc9.i386.rpm
deb パッケージの作成手順は、先ほどと同様です。
インストールもしてしまう場合は、--install オプションをつけます。
……………………………………………………………………………………
$ sudo alien --to-deb --install john-1.7.0.2-6.fc9.i386.rpm
……………………………………………………………………………………
問題なく、インストールが行われました。
そして、前回の手順にしたがって、動作させてみます。
test3 ユーザに対して、single crack mode を試してみますと、あっさり
発見していただけました。問題なさそうです。
……………………………………………………………………………………
$ sudo unshadow /etc/passwd /etc/shadow > privpasswd
$ chmod 400 privpasswd
$ john --single --users=test3 privpasswd
Loaded 1 password hash (FreeBSD MD5 [32/32])
test3 (test3)
guesses: 1 time: 0:00:00:00 100% c/s: 4.54 trying: test3
……………………………………………………………………………………
ちなみに、SHA512 には未対応のようです。
(おそらく、DES と MD5 だけのような…前回は気づきませんでした。)
……………………………………………………………………………………
$ john --users=test1 privpasswd
No password hashes loaded
$ grep test1 privpasswd
test1:$6$2zjoH...:1001:100::/home/test1:/bin/bash
……………………………………………………………………………………
さらにちなみに、ホームの下にファイルが作られるようです。
……………………………………………………………………………………
$ ls ~/.john/
john.log john.pot
……………………………………………………………………………………
ただ、なんでもかんでもうまくいく、というわけではなく、いくつか確認
した限りでは、環境の違いによりうまく動作しない、ということが何度か
見受けられました。
たとえば、alien そのものの deb パッケージを RPM パッケージに変換し
ますと、Perl のライブラリが /usr/share/perl5 以下に入ります。
ですが、RedHat 系では /usr/share/perl5 を参照しないようですので、
alien を実行しますと、以下のように叱られてしまいます。
……………………………………………………………………………………
$ alien --to-deb dnotify-0.18.0-1.i386.rpm
Can't locate Alien/Package/Deb.pm in @INC (@INC contains: ...) \
at /usr/bin/alien line 296.
BEGIN failed--compilation aborted at /usr/bin/alien line 296.
……………………………………………………………………………………
上記の問題は、perl -I/usr/share/perl5 などとすることで回避できます
が、他にも問題はありますので、その都度対応する必要があります。
(ちなみに、alien の場合、上記で回避しても、他の問題で引っかかり、
すんなりとは動作してくれません。残念…。)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ tgzからパッケージを作る
さて、tgz への変換が可能ということは、tgz をパッケージにできる、と
いうことでもあります。
昔、RPM や deb パッケージを無理やり作る方法をご紹介しました。
ですが、alien を使えば、あれこれする必要はありません。
苦労して考えたのになーという釈然としない気持ちは置いておきまして、
alien でパッケージに仕立て上げてみましょう。
ここでは、/usr/bin/usucmd.sh というファイルだけのパッケージを作成
してみます。
まずは、/usr/bin/usucmd.sh を、以下のようにしてでっち上げます。
……………………………………………………………………………………
$ mkdir -p usr/bin
$ cat > usr/bin/usucmd.sh << E-O-F
> #!/bin/sh
> echo $*
> E-O-F
$ chmod +x usr/bin/usucmd.sh
……………………………………………………………………………………
そうしましたら、以下の手順で tgz にしましょう。
……………………………………………………………………………………
$ tar cfz usucmd-0.1.tgz usr
……………………………………………………………………………………
あとは、いつものように、alien で rpm や deb に変換するだけです。
まずは、rpm から。
(変換は最初のalienの実行だけです。残りは確認のための実行です。)
……………………………………………………………………………………
$ fakeroot alien --to-rpm usucmd-0.1.tgz
usucmd-0.1-2.noarch.rpm generated
$ rpm -qip usucmd-0.1-2.noarch.rpm
Name : usucmd Relocations: (not relocatable)
Version : 0.1 Vendor: (none)
...
Group : Converted/unknown Source RPM: usucmd-0.1-2.src.rpm
Size : 18 License: unknown
...
$ rpm -qlp usucmd-0.1-2.noarch.rpm
/usr
/usr/bin
/usr/bin/usucmd.sh
……………………………………………………………………………………
もちろん、deb パッケージも作ることができます。
(変換は最初のalienの実行だけです。残りは確認のための実行です。)
……………………………………………………………………………………
$ fakeroot alien --to-deb usucmd-0.1.tgz
usucmd_0.1-2_all.deb generated
$ dpkg -I usucmd_0.1-2_all.deb
...
Package: usucmd
Version: 0.1-2
Architecture: all
...
Section: alien
Priority: extra
Description: Converted tgz package
...
$ dpkg -c usucmd_0.1-2_all.deb
...
drwxr-xr-x usu/adm 0 2009-11-11 00:20 ./usr/bin/
-rwxr-xr-x usu/adm 18 2009-11-11 00:20 ./usr/bin/usucmd.sh
……………………………………………………………………………………
…ああ、あっけないほどうまくいきます。
もしよろしければ、過去の苦労した結果もご覧いただけますと幸いです。
Vol.130 - RPM パッケージを作成する
http://www.usupi.org/sysad/130.html
Vol.131 - deb パッケージを作成する
http://www.usupi.org/sysad/131.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
□ おわりに
以上、alien を使って、パッケージを変換する方法を、ご紹介しました。
上記は、だいたい Ubuntu 9.10 の環境で試しましたが、RPM パッケージ
を扱う際、db3 に関するエラーがぱんぱん出ました。
……………………………………………………………………………………
error: cannot open Name index using db3 - No such file or directory (2)
エラー: Name インデックスを db3 でオープンできません - No such \
file or directory (2)
……………………………………………………………………………………
エラーは出ますが、RPM パッケージは生成されていますので、気にしない
でおいています。(なにかご存知でしたら、ご教示くださいませ。)
それはさておき、パッケージがなくて困ったときや、ただのファイルの塊
をパッケージにしたいときなどに、試してみていただけますと幸いです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 宿題の答え
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回の宿題は、
入力されたパスワードが正しいかどうかを確認するツールを、作成して
ください。
でした。
ではさっそく、自分なりに考えた、回答となるスクリプトです。
……………………………………………………………………………………
#!/usr/bin/perl
use strict;
if($#ARGV != 1) {
warn "Usage: $0 username password\n";
exit 1;
}
my $user = shift; # 引数で指定したユーザ名
my $pass = shift; # 引数で指定したパスワード
open(SHADOW, "/etc/shadow") || die "cannot open.";
while(
my ($luser, $lencr) = split(/:/, $_); # shadowから得る
my ($salt, $encr);
next if $luser ne $user; # ユーザ名が不一致なら次のループへ
if($lencr =~ /^(\$\d[^\$]*\$[^\$]+\$)(.*)$/) {
$salt = $1; # DES以外の場合(たぶん)
} else {
$salt = substr($lencr, 0, 2); # DESの場合
}
$encr = crypt($pass, $salt); # 暗号化
if($encr eq $lencr) {
print "match: $lencr\n";
} else {
print "NOT match: $lencr != $encr\n";
}
last;
}
close(SHADOW);
……………………………………………………………………………………
これを checkpasswd.pl というファイル名にして保存しましたら、いつも
のように実行可能にしましょう。
……………………………………………………………………………………
$ chmod +x checkpasswd.pl
……………………………………………………………………………………
そして、rootの権限で、ユーザ名とパスワードかもしれない文字列を引数
に指定して実行します。
たとえば、test ユーザのパスワードが test1 かどうかを確認するには、
以下のように実行します。
……………………………………………………………………………………
# ./checkpasswd.pl test test1
match: 暗号化したパスワード
……………………………………………………………………………………
一致しますと、上記のように match: とかいうのが出力されます。
異なる場合は、NOT match: 云々と出力されます。
……………………………………………………………………………………
# ./checkpasswd.pl test nisepasswd
NOT match: ホンモノの暗号化したパスワード != ニセモノ
……………………………………………………………………………………
このスクリプトでは、/etc/shadow を直接読み込んで、指定したユーザの
暗号化したパスワードが一致するかどうかを確認しています。
そして、暗号化したパスワードが $なんとか$ で始まる場合は、次に出現
する $ までを salt とし、そうでなければDESだとみなして最初の2文字
を salt としています。
それで正しいかどうか、ちょっと自信がないのですが、こちらの環境で、
MD5, SHA256, SHA512 および DES では動作しました。
ちなみに、/etc/pam.d/passwd などにある pam_unix.so の引数で、暗号
化のアルゴリズムを変えられます。
たとえば、以下のような行が含まれますと、MD5 が使われます。
……………………………………………………………………………………
password required pam_unix.so ...中略... md5
……………………………………………………………………………………
passwd コマンドでパスワードを変更しますと、暗号化したパスワードが
$1$ で始まります。
これを、sha256 や sha512 に変更しますと、$5$ や $6$ で始まる長ーい
文字列になります。
詳しくは以下などに説明がありますので、興味のある方はご覧ください。
crypt (Unix) - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Crypt_%28Unix%29
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 今回の宿題
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
今回の宿題は、
alien で生成したパッケージの情報を、適切な内容に変更しましょう。
です。
alien で生成されたパッケージ、特に tgz から生成した場合の情報は、
なんと言いますか、かなりそっけないように思います。
たとえば Description は、Converted tgz package くらいしか記述して
くれません。(まあ仕方がないのですが。)
というわけで、いくつかカスタマイズを試みてみたいと思います。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ あとがき
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
というわけで、長年親しんだ Vine から、意を決して Ubuntu に鞍替えを
してしまいましたが(Vine ユーザのみなさま、すみません!)、各種設定で
いろいろ失敗をやらかしております。
せっかくですので(?)、2点ほど、ご紹介させていただきます。
まずは、Firefox 絡みです。
このマシンでは、Ubuntu のパッケージである Firefox を使用しています
が、別のマシンではダウンロードしたバイナリを使用しています。
ただ、各種設定ファイル等をなるべくマシン間で共通にしていますので、
Firefox の起動を、以下のシェルスクリプト($HOME/bin/firefox です)で
行っています。
#!/bin/sh
if [ -x /some/where/firefox/firefox ]; then
/some/where/firefox/firefox $*
else
firefox $*
fi
ダウンロードしたバイナリが /some/where/firefox/firefox として存在
すればそのバイナリを起動し、そうでなければパスの通った firefox を
起動する、という単純なスクリプトです。
ですが、PATH の中で、もし /usr/bin よりも $HOME/bin の方を先に指定
していますと、/some/where/firefox/firefox がないと、自分自身である
$HOME/bin/firefox を起動しますので、$HOME/bin/firefox を無限に起動
し続けてしまいます。
ということは、今でこそ気づきますが、当然そのときは気づかず、GNOME
のパネルから上記を起動し、プロセスを無限に起動させてしまいました。
いくらマシンが速くなったとはいえ、どんどんプロセスを増産していくの
ですから、次第に操作できなくなるほどモーレツに重くなっていきます。
…という状況を、何度も味わう羽目になりました。
最初は、新手のウィルスか何かか!…と焦りましたが、psコマンドを実行
したところ、$HOME/bin/firefox が数百…あるいは数千個並ぶのを見て、
己の犯した過ちに気づいた次第です。
(psコマンドが実行されるまでには、膨大な時間を要しましたが…。)
それに比べますと、もう1つの失敗は、たいしたことないです。たぶん。
いままで、端末エミュレータは、kterm か mlterm を使ってきましたが、
Ubuntu にしてからは GNOME端末をフツーに使ってみております。
GNOME端末さんは、キーボード・ショートカットの設定がメニューで簡単
にできますので、他のツールに合わせて、コピーに Ctrl-c を割り当てて
おきました。
当然、Ctrl-c を押しますと、GNOME端末がコピーの処理を行います。
ですので、なにかコマンドを実行して、途中で止めたくなって Ctrl-c を
押下しても、止まらなくなってしまいました。
…ええ、設定したそのときは、なにも考えていなかったのです。
そして、そんなアホな設定をしたことすら、忘れていたのです。
ですので、最初はなぜ効かなくなったのかわからず、Ctrl-z で中断して
killする、という回りくどい手順で、プロセスを強制終了していました。
ですが、ふと、キーボード・ショートカットの設定をしたことを思い出し
まして、Ctrl-c の設定を解除し、平穏な日々に戻ったという次第です。
…まあ、言ってみればそれだけです。
これをご覧いただき、みなさまのうっかりな設定が一つでも減ることを、
心から願っております。(ほんとうに!)
今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、12月6日(日) の未明にお会いしましょう!
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)
バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html
「栗日記」- 栗マグカップを作ろうかなと思っております。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)
◎いますぐ実践! Linuxシステム管理
のバックナンバー・配信停止はこちら
⇒ http://archive.mag2.com/0000149633/index.html
このメールに返信すれば、発行者さんへ感想を送れます
━【まぐまぐ!からのお知らせ】━━━━━━━━━━━━━━━━━━━━━
>>まとまった金額が必要、利息が気になる…、いつものコンビ二で利用したい<<
そんなあなたに、まぐまぐ!から「オリックスVIPローンカード」のご案内
【詳しくはこちら】 http://a.mag2.jp/ilzU
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▽こちらもいかが?ビジネス・キャリアジャンルの注目メルマガ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
●アスマナ ─イヤでも成功路線にのってしまう常識はずれの方法─
http://www.mag2.com/w/0001004781.html
○国立大学大学院(ビジネススクール)非常勤講師の経験を持つ、外資系コン
サルティングファーム・大手外資系IT企業出身の“アスマナ塾”主宰者による
若手社会人・学生がキャリアを成功させるための「常識はずれの方法」
★発行者サイトもご覧ください↓
アスマナ塾:http://www.asumana.jp/ 事務局:http://www.yerbabuena.co.jp/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━【まぐまぐ!】━

