成長の果実 -2ページ目

成長の果実

不完全でも良いから前に進む。

[前提]
OS: CentOS 5.7 x64

---------- 以下、記事 ----------



以前、OSが32bit版でのchekinstallのインストール手順を書いていたが、OSが64bit版の場合は同じ手順ではインストールできなかった為、64bit版用に手順を残しておく。


checkinstallをインストールしてソースファイルからRPMを作成する(32bit版)
http://ameblo.jp/welx/entry-11057347817.html



checkinstallの公式サイトより、モジュールをダウンロードしてインストールする。

CheckInstall Homepage
http://www.asic-linux.com.mx/~izto/checkinstall/


# wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz ← 2012.03.12時点での最新版。最新版は公式HPで確認すること
# tar xzvf checkinstall-1.6.2.tar.gz
# cd checkinstall-1.6.2
# make
# make install
# checkinstall ← checkinstall自身もパッケージ化する

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。

The checkinstallrc file was not found at:
/usr/local/sbin/../checkinstallrc

デフォルトの内容を使うものとします

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]:  ← 空Enter

パッケージのドキュメンテーションを準備..OK

使用するパッケージ方式を選んでください。
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力R ←今回はRPM化する


**************************************
**** RPM package creation selected ***
**************************************

このパッケージは以下の内容で構成されます:

1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]
2 - Name: [ checkinstall ]
3 - Version: [ 1.6.2 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ checkinstall-1.6.2 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ checkinstall ]

変更するものの番号を入力してください。Enterで続行します:  ← 空Enter

Installing with make install...

========================= インストールの結果 ===========================
for file in locale/checkinstall-*.po ; do \
case ${file} in \
locale/checkinstall-template.po) ;; \
*) \
out=`echo $file | sed -s 's/po/mo/'` ; \
msgfmt -o ${out} ${file} ; \
if [ $? != 0 ] ; then \
exit 1 ; \
fi ; \
;; \
esac ; \
done
make -C installwatch
make[1]: ディレクトリ `/tmp/checkinstall-1.6.2/installwatch' に入ります
make[1]: `all' に対して行うべき事はありません.
make[1]: ディレクトリ `/tmp/checkinstall-1.6.2/installwatch' から出ます
export
export CVS_RSH="ssh"
export G_BROKEN_FILENAMES="1"
export HISTSIZE="1000"
export HOME="/root"
export HOSTNAME="xxxxx"
export INPUTRC="/etc/inputrc"
export INSTW_BACKUP="1"
export INSTW_DBGFILE="/var/tmp/tmp.tXkVFO3901/dbgfile"
export INSTW_DBGLVL="0"
export INSTW_EXCLUDE="/dev,/proc,/tmp,/tmp/checkinstall-1.6.2,/var/tmp,"
export INSTW_LOGFILE="/var/tmp/tmp.tXkVFO3901/newfiles.tmp"
export INSTW_ROOTPATH="/var/tmp/tmp.tXkVFO3901"
export INSTW_TRANSL="1"
export LANG="ja_JP.UTF-8"
export LD_PRELOAD="/usr/local/lib64/installwatch.so"
export LESSOPEN="|/usr/bin/lesspipe.sh %s"
export LOGNAME="root"
export LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
export MAIL="/var/spool/mail/root"
export MAKEFLAGS=""
export MAKELEVEL="1"
export MFLAGS=""
export OLDPWD
export PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
export PWD="/tmp/checkinstall-1.6.2"
export SHELL="/bin/bash"
export SHLVL="5"
export SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
export SSH_CLIENT="xxx.xxx.xxx.xxx 60906 22"
export SSH_CONNECTION="xxx.xxx.xxx.xxx 60906 xxx.xxx.xxx.xxx 22"
export SSH_TTY="/dev/pts/1"
export TERM="xterm-color"
export TEXTDOMAIN="checkinstall"
export TEXTDOMAINDIR="/usr/local/sbin/../lib/checkinstall/locale"
export USER="root"
export _="/usr/bin/make"
make -C installwatch install
make[1]: ディレクトリ `/tmp/checkinstall-1.6.2/installwatch' に入ります
mkdir -p /usr/local/lib
mkdir -p /usr/local/bin
if [ -r /usr/local/lib/installwatch.so ]; then \
rm -f /usr/local/lib/installwatch.so; \
fi
install installwatch.so /usr/local/lib
sed -e "s|#PREFIX#|/usr/local|" < installwatch > /usr/local/bin/installwatch
chmod 755 /usr/local/bin/installwatch
make[1]: ディレクトリ `/tmp/checkinstall-1.6.2/installwatch' から出ます
mkdir -p /usr/local/sbin
install checkinstall makepak /usr/local/sbin
for file in locale/*.mo ; do \
LANG=`echo $file | sed -e 's|locale/checkinstall-||' \
-e 's|\.mo||'` && \
mkdir -p /usr/local/lib/checkinstall/locale/${LANG}/LC_MESSAGES && \
cp $file /usr/local/lib/checkinstall/locale/${LANG}/LC_MESSAGES/checkinstall.mo || \
exit 1 ; \
done
mkdir -p /usr/local/lib/checkinstall
install -m644 checkinstallrc-dist /usr/local/lib/checkinstall
if ! [ -f /usr/local/lib/checkinstall/checkinstallrc ]; then \
cp /usr/local/lib/checkinstall/checkinstallrc-dist /usr/local/lib/checkinstall/checkinstallrc; \
else \
echo; \
echo; \
echo ======================================================== ;\
echo; \
echo An existing checkinstallrc file has been found. ;\
echo The one from this distribution can be found at: ; \
echo; \
echo -e \\t/usr/local/lib/checkinstall/checkinstallrc-dist ; \
echo; \
echo; \
echo ======================================================== ;\
echo; \
fi


========================================================

An existing checkinstallrc file has been found.
The one from this distribution can be found at:

/usr/local/lib/checkinstall/checkinstallrc-dist


========================================================


======================== インストールに成功しました ==========================

Copying documentation directory...
./
./CREDITS
./FAQ
./README
./COPYING
./INSTALL
./RELNOTES
./TODO
./Changelog
./BUGS

tempディレクトリにファイルをコピー..OK

Stripping ELF binaries...OK

manページを圧縮..OK

ファイルリストを作成..OK

RPMパッケージを作成..OK

注意: パッケージはインストールされません

tempファイルを削除..OK

doc-pakディレクトリを削除..OK

バックアップパッケージを書き込み..OK
OK

temp dirを削除..OK


**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm
You can install it in your system anytime using:

rpm -i checkinstall-1.6.2-1.x86_64.rpm

**********************************************************************



checkinstall自身をソールファイルからRPM化するところまではできたので、次は実際にインストールしていく。


# rpm -ivh /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm ← インストール
準備中... ########################################### [100%]
1:checkinstall ########################################### [100%]

# rpm -q checkinstall ← RPMデータベースに登録されていることを確認
checkinstall-1.6.2-1

# checkinstall -v ← バージョンを確認

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。





最後にこれが一番重要だが、64bit環境では以下の対処をすることで使用可能となる。

# ln -s /usr/local/lib/installwatch.so /usr/local/lib64/installwatch.so




以上。
[検証環境]: CentOS 5.7 x64

----------------------------------------------------


WEBページのHTMLソースを取得したい場合は、perlのLWPなんかを使って取得できるが、AjaxでHTMLソースが隠蔽化されているページはLWPでは取得できない。



ブラウザで確認しても、Ajaxで隠蔽化されたページのHTMLソースは見ることはできないが、Firebugなどのデバッグツールを使用すれば解析することは可能になる。


例えばスワロフスキーの公式サイトはAjaxを使ってHTMLソースを隠蔽化しているけど、Google Chromeだと「要素の検証」という機能を使えば解析できるのでそれで解析できることも確認できる。

成長の果実-MozRepl_Ajax01





前置きはここまでで、ブラウザを使って手動で解析できることは確認できたが、これを自動化したいところ。

LWPみたいにスクリプト使ってHTMLソースを取得したい。



ちゃんと解決方法があって、perlモジュールの「WWW::Mechanize::Firefox」とFirefoxアドオンの「MozRepl」を使えば同様の処理が可能になる。




ということで、以下インストール手順の説明。




◎WWW::Mechanize::Firefoxのインストール

# perl -MCPAN -eshell
cpan> install WWW::Mechanize::Firefox
cpan> quit





◎MozReplのインストール
アドオンをインストールしたいFirefoxから下記URLへアクセスして、MozReplアドオンをインストールする。


MozRepl :: Add-ons for Firefox
https://addons.mozilla.org/en-US/firefox/addon/mozrepl/


アドオンインストール後はメニューバーの「ツール -> MozRepl -> Start」を押下するとMozReplを起動できる。

成長の果実-MozRepl_Ajax02


もちろんFirefoxは起動したままにしておくこと。



インストールは以上。




お気付き方もいるかと思うが、WWW::Mechanize::Firefoxで渡したURLをFirefoxで表示させてその結果を取得してきてるという、少し無理矢理な気がすることをやっている。

ブラウザを通さないとAjaxのHTMLソース隠蔽化を回避できないのかな・・・


取得できるからいいんだけど、GUI環境が必要になるためCUIだけで完結できないところが悩みどころ。





兎にも角にもインストールは終わったので、取得してみる。


適当にhtmlSrcGet.plとかのファイル名で、下記内容のスクリプトを書いてみる。



# vi htmlSrcGet.pl

#!/usr/bin/perl

$url = $ARGV[0];

use WWW::Mechanize::Firefox;
use Encode;

my $mech = WWW::Mechanize::Firefox->new();
$mech->get("$url");
print encode('utf-8', $mech->content);




取得!!(取得テスト用URLは、スワロフスキー公式サイトのもの)

# chmod 755 htmlSrcGet.pl
# ./htmlSrcGet.pl "http://www.swarovski.com/Web_JP/ja/0109/category/%E3%82%B8%E3%83%A5%E3%82%A8%E3%83%AA%E3%83%BC/%E3%83%9A%E3%83%B3%E3%83%80%E3%83%B3%E3%83%88.html"




Firefoxに指定URLのページが表示されて、取得後は勝手にタブが閉じる。

$成長の果実-MozRepl_Ajax03



スクリプトを打ったコンソール上には指定URLのHTMLソースが表示される。

ちゃんと隠蔽化が解除されたHTMLソースが表示される。




やりたいことはできるので、ひとまずAjaxで隠蔽化されたページのHTMLソースを取得したい時は、この方法でいこうかな。
昨日のAppleプレスイベント後、新しい情報が色々と出てきてますね。



忘れないように備忘録程度に記事にしておきます。




下記ブログの方の情報にはたまにお世話になってるので感謝です。


Xcode 4.3ではファイルをドラッグ&ドロップで追加するとき、ターゲットに追加するかどうかのチェックが外れることが多いので注意! - 24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/20120308/1331219362