error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

$HOME/local以下に、gcc4.8.3導入後、glibc2.20を投入。しかし、aria2コンパイル後できた実行ファイルで、表題のエラーが出る。

 

実行ファイルを調べてみると。

 

/lib64/ld-linux-x86-64.so.2 --list $HOME/local/bin/aria2c

    linux-vdso.so.1 => (0x00007fffccffe000)

    libaria2.so.0 => $HOME/local/lib/libaria2.so.0 (0x00007fb310027000)

    libcares.so.2 => $HOME/local/lib/libcares.so.2 (0x00007fb30fe16000)

    libgcrypt.so.11 => /lib64/libgcrypt.so.11 (0x00007fb30fb8f000)

    libdl.so.2 => $HOME/local/lib/libdl.so.2 (0x00007fb30f98b000)

    libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007fb30f786000)

    libgnutls.so.26 => /usr/lib64/libgnutls.so.26 (0x00007fb30f4e3000)

    libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007fb30f254000)

    libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fb30ef01000)

    libz.so.1 => /lib64/libz.so.1 (0x00007fb30eceb000)

    libstdc++.so.6 => $HOME/local/gcc/lib64/libstdc++.so.6 (0x00007fb30e9e8000)

    libm.so.6 => $HOME/local/lib/libm.so.6 (0x00007fb30e6e5000)

    libgcc_s.so.1 => $HOME/local/gcc/lib64/libgcc_s.so.1 (0x00007fb30e4cf000)

    libc.so.6 => $HOME/local/lib/libc.so.6 (0x00007fb30e132000)

    librt.so.1 => $HOME/local/lib/librt.so.1 (0x00007fb30df29000)

    /lib64/ld-linux-x86-64.so.2 (0x00007fb3105ea000)

    libtasn1.so.3 => /usr/lib64/libtasn1.so.3 (0x00007fb30dd19000)

    libpthread.so.0 => $HOME/local/lib/libpthread.so.0 (0x00007fb30dafd000)

 

$HOME/local/lib/ld-linux-x86-64.so.2 --list $HOME/local/bin/aria2c

    linux-vdso.so.1 (0x00007fff69f79000)

    libaria2.so.0 => $HOME/local/lib/libaria2.so.0 (0x00007f7d26dfa000)

    libcares.so.2 => $HOME/local/lib/libcares.so.2 (0x00007f7d26be9000)

    libgcrypt.so.11 => /lib64/libgcrypt.so.11 (0x00007f7d26961000)

    libdl.so.2 => $HOME/local/lib/libdl.so.2 (0x00007f7d2675d000)

    libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f7d26558000)

    libgnutls.so.26 => /usr/lib64/libgnutls.so.26 (0x00007f7d262b5000)

    libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f7d26026000)

    libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f7d25cd3000)

    libz.so.1 => /lib64/libz.so.1 (0x00007f7d25abd000)

    libstdc++.so.6 => $HOME/local/gcc/lib64/libstdc++.so.6 (0x00007f7d257ba000)

    libm.so.6 => $HOME/local/lib/libm.so.6 (0x00007f7d254b7000)

    libgcc_s.so.1 => $HOME/local/gcc/lib64/libgcc_s.so.1 (0x00007f7d252a1000)

    libc.so.6 => $HOME/local/lib/libc.so.6 (0x00007f7d24f04000)

    librt.so.1 => $HOME/local/lib/librt.so.1 (0x00007f7d24cfb000)

    /lib64/ld-linux-x86-64.so.2 => $HOME/local/lib/ld-linux-x86-64.so.2 (0x00007f7d273bd000)

    libtasn1.so.3 => /usr/lib64/libtasn1.so.3 (0x00007f7d24aeb000)

    libpthread.so.0 => $HOME/local/lib/libpthread.so.0 (0x00007f7d248cf000)

 

ls -l /lib64/ld-linux-x86-64.so.2

    lrwxrwxrwx 1 root root 10 11月 4 21:44 2014 /lib64/ld-linux-x86-64.so.2 -> ld-2.12.so*

ls -l $HOME/local/lib/ld-linux-x86-64.so.2

    lrwxrwxrwx 1 user user 10 11月 6 15:41 2014 $HOME/local/lib/ld-linux-x86-64.so.2 -> ld-2.20.so*

 

という事で、rootでシンボリックファイルを張り直せばOKのような気がしたが、root権限が無いuserなので、これはできない。。。

 

LDFLAGS="-Wl,--dynamic-linker=$HOME/local/lib/ld-linux-x86-64.so.2" ./configure --prefix=$HOME/local --enable-libaria2

 

1週間程度時間を費やし、上記でようやく解決。

none rootなcloudlinuxにgcc4.8.3導入

試行錯誤に約4日。コンパイルに半日以上。

とりあえずインストール完了したのでメモ。

 

GNUで新しいパッケージを既に$HOME/local/以下で利用していたため、

  • aclocalは、$HOME/local/binを利用している事を確認。
  • PKG_CONFIG_PATHとld.so.confで、いずれも$HOME/local/配下にあるものを、/usr/lib62, /lib64より先に読み込んでいるか確認。

で。

mkdir $HOME/local/gcc

 

cd $HOME/local/work

wget -O - ftp://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.bz2 | bzip2 -dc | tar xf -

cd gmp-5.1.3

M4=$HOME/local/bin/m4 ./configure --prefix=$HOME/local/gcc --enable-cxx

make -j2

make -j2 check

make install

 

cd $HOME/local/work

wget -O - http://www.mpfr.org/mpfr-3.1.2/mpfr-3.1.2.tar.bz2 | bzip2 -dc | tar xf -

cd ../mpfr-3.1.2

./configure --prefix=/$HOME/local/gcc --with-gmp=$HOME/local/gcc

make -j2

make -j2 check

make install

 

cd $HOME/local/work

wget -O - http://www.multiprecision.org/mpc/download/mpc-1.0.2.tar.gz | gzip -dc | tar xf -

cd ../mpc-1.0.2

/configure --prefix=$HOME/local/gcc --with-gmp=$HOME/local/gcc --with-mpfr=$HOME/local/gcc

make -j2

make -j2 check

make install

 

cd $HOME/local/work

wget -O - http://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2 | bzip2 -dc | tar xf -

mkdir gcc-build

cd gcc-build

../gcc-4.8.3/configure --enable-languages=c,c++,fortran --prefix=$HOME/local/gcc --with-gmp=$HOME/local/gcc --with-mpfr=$HOME/local/gcc --with-mpc=$HOME/local/gcc --with-stage1-ldflags="-
Wl,-rpath,$HOME/local/gcc/lib" --with-boot-ldflags="-Wl,-rpath,$HOME/local/gcc/lib" --with-multilib-list=m64 --program-suffix=46

make -j2

ここで、

msgfmt -o de.mo ../../../../gcc-4.8.3/libstdc++-v3/po/de.po

が、セグメント違反なエラーでコンパイル停止。

$HOME/local/bin/msgfmtでは無く、/usr/bin/msgfmtを使うように変更し、再び、make -j2

make install

 

ld.so.confの先頭に、$HOME/local/gcc/lib64を追加し、ldconfig実行

$HOME/.bash_profileのPATHの先頭に、$HOME/local/gcc/binを追加し、source $HOME/.bash_profileを実行

 

さらに、シンボリックリンクを張る。

ln -b -s $HOME/local/gcc/bin/gcc46 $HOME/local/bin/gcc
ln -b -s $HOME/local/gcc/bin/gcc-ar46 $HOME/local/bin/gcc-ar
ln -b -s $HOME/local/gcc/bin/gcc-nm46 $HOME/local/bin/gcc-nm
ln -b -s $HOME/local/gcc/bin/gcc-ranlib46 $HOME/local/bin/gcc-ranlib
ln -b -s $HOME/local/gcc/bin/gcov46 $HOME/local/bin/gcov
ln -b -s $HOME/local/gcc/bin/gfortran46 $HOME/local/bin/gfortran
ln -b -s $HOME/local/gcc/bin/c++46 $HOME/local/bin/c++
ln -b -s $HOME/local/gcc/bin/cpp46 $HOME/local/bin/cpp
ln -b -s $HOME/local/gcc/bin/g++46 $HOME/local/bin/g++

 

AWSのEBSダイエット

rsyncの以前にメモした方法では、うまくいっていない事が判明。

 

と。いう事で。

 

  1. ターゲットインスタンスを停止し、スナップショット(big-snap)を作成
  2. big-snapからボリューム(big-volume)を作成
  3. 減量させたボリューム(small-volume)も作成
  4. ターゲットインスタンスをスタート(他に活きているインスタンスが無かったので・・・)
  5. big-volumeとsmall-volumeを4のインスタンスへデタッチ
    big-volumeは、/dev/xvdf。small-volumeは、/dev/xvdg。ってな具合。
  6. ターゲットインスタンスにシェルログインし、rootになり、
  7. e2fsck -f /dev/xvdf
  8. resize2fs -M -p /dev/xvdf
    これをすると、blocksizeが表示されるので、この数字を使ってチャンクナンバー(ddのcount)を計算する。
    blocks * 4 / (chunk_size_mb * 1024) 切り上げで整数に。
    ちなみにchunk_size_mbは、16Mが推奨。(chunk_size_mb = 16)
  9. dd if=/dev/xvdf ibs=16M of=/dev/xvdg obs=16M count=チャンクナンバー(整数値)
  10. resize2fs -p /dev/xvdg
  11. e2fsck -f /dev/xvdg
  12. で。big-volumeとsmall-volumeをデタッチ
  13. samll-volumeのスナップショットをとり、そのスナップショットからイメージ(AIM)を作成
  14. 作ったAIMをLaunch。(CPUは、ターゲットインスタンスを参照し、キメ打ち)

で。ダイエット版がブートしました。

 

none rootなlinuxへrtorrent導入メモ

ターミナル操作ができるホスティングサービスなarvix。yumできれば、amazonいらずかもな感もあるが、そうは問屋が卸さない。

 

久しぶりのconfigureで、make、installな試行錯誤を繰り返したので、メモ。

 

gccのバージョンが古く、c++11周りのエラーで素直にインストールできなかった。

結局、autoconf、cppunitから--prefix=$HOME/localへmake install。

rtorrentとlibtorrentのソースは

http://libtorrent.rakshasa.no/ の tar.gzを展開(gitのほうでは何故かうまくいかず・・・)

make checkで不気味なエラーも表示されるが、とりあえずこれでrtorrentしたら動いた。

(設定はこちらを参照)

 

まだまだ課題が残るが。。。ってな事で、メモを。

aws ec2 ebsのディスクサイズを縮小(既存インスタンツからebsブートのAMI作成)

この方法ではダメな感じ。こちらを参照。

 

試行錯誤、約丸1日。

 

参考にしたサイト。

  1. http://recipe.kc-cloud.jp/archives/3989
  2. http://3u3.org/infrastructure/aws/34

1と2の記述には微妙に違いがある。

  • インスタンツはSTOPする必要があるのか無いのか
  • 稼働中のインスタンツのボリュームを使うのか、それとも稼働中のインスタンツのボリュームのスナップショットから作成されたボリュームを使うのか
  • ラベルの指定方法
  • rsyncの、コピー元とコピー先の指定
  • コピー先のボリュームを利用していたインスタンツにattachする必要があるのか

 

成功したのは、

 

作成元となるebsは、稼働したままスナップショットを作成し、このスナップショットからボリュームを作成したモノをコピー元とする。

 

コピー元、(減量した)コピー先とも、genericなSSDでOK。(元がmagneticであっても)

 

e2lableでのラベル指定は、コピー元のラベルに、コピー先のラベルをあわせる。(ちなみに、うちのは、「_/」であった。)

 

rsyncは、「rsync -ax /larege/ /small」でOK。(「/」に要注意)

 

利用していたインスタンツに(減量)コピー先のボリュームを、/dev/sda1などとしてattachする必要な無し。

 

あと。重要だったのは、コピー先から作られたAMIをローンチする際に、kernelID(あれば、RAMdisk IDも)を指定しないとうまくいかなかった。

 

以上。減量方法と既存インスタンツからebs複製の方法を知りました。

aws。素敵!

 

 

MozRepl::RemoteObjectのTypErrorは仕様?

xpath->で得た@を、$_->{innerHTML}すると、しばしばTypeErrorでコケる。

 

WWW::Mechaize::Firefoxをnewする際に、bufsizeを、=>10_000_000とか増やしたり、autodieを=>0にしてもダメ。

@の中身を、分割して小さく処理させてもダメ。

Stack Overflowで、getとis_visibleをeval{}でトラップしてる例を参考に、evalを使ってxpath->と$_->{innerHTML}を評価し、プログラム停止をトラップをさせて、ループの先頭に戻してやったら、ウマくいった。

 

なるほど。

TypeError: can't access dead ojbectとか出るので、致命的で不可逆なエラーかと思ったが、やり直しが利く(周知な?)内部エラーの模様。

作者のchangelog、ToDoにも、「!」となっているので、今後もなおる可能性が低い事もあり、これで対応する事にする。

WMFirefoxのxpathでは@hrefがとれない?

WWW::Mechanize::FirefoxGoogle画像検索を画像URIで。が。。。

どーしてもxpathで検索結果タイトルの@hrefがとれない。

 

丸2日費やしたがダメ。才能無し。ソース見る根性も無し。

で。

 

h3の[@class="rc"]でごっそり抜いて、

$wmf->xpath('//*[@class="rc"]')

HTML::TreeBuilder::LibXMLであっさり取得。

$tree->findnodes_as_strings('//h3/a/@href')

 

二度手間で、あれだけど・・・これで、よし。と、しよう。