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の以前にメモした方法では、うまくいっていない事が判明。
と。いう事で。
- ターゲットインスタンスを停止し、スナップショット(big-snap)を作成
- big-snapからボリューム(big-volume)を作成
- 減量させたボリューム(small-volume)も作成
- ターゲットインスタンスをスタート(他に活きているインスタンスが無かったので・・・)
- big-volumeとsmall-volumeを4のインスタンスへデタッチ
big-volumeは、/dev/xvdf。small-volumeは、/dev/xvdg。ってな具合。 - ターゲットインスタンスにシェルログインし、rootになり、
- e2fsck -f /dev/xvdf
- resize2fs -M -p /dev/xvdf
これをすると、blocksizeが表示されるので、この数字を使ってチャンクナンバー(ddのcount)を計算する。
blocks * 4 / (chunk_size_mb * 1024) 切り上げで整数に。
ちなみにchunk_size_mbは、16Mが推奨。(chunk_size_mb = 16) - dd if=/dev/xvdf ibs=16M of=/dev/xvdg obs=16M count=チャンクナンバー(整数値)
- resize2fs -p /dev/xvdg
- e2fsck -f /dev/xvdg
- で。big-volumeとsmall-volumeをデタッチ
- samll-volumeのスナップショットをとり、そのスナップショットからイメージ(AIM)を作成
- 作った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のほうでは何故かうまくいかず・・・)
- Library: libtorrent-0.13.4.tar.gz
- Client: rtorrent-0.9.4.tar.gz
make checkで不気味なエラーも表示されるが、とりあえずこれでrtorrentしたら動いた。
(設定はこちらを参照)
まだまだ課題が残るが。。。ってな事で、メモを。
aws ec2 ebsのディスクサイズを縮小(既存インスタンツからebsブートのAMI作成)
この方法ではダメな感じ。こちらを参照。
試行錯誤、約丸1日。
参考にしたサイト。
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にも、「!」となっているので、今後もなおる可能性が低い事もあり、これで対応する事にする。