at_ito
2015年1月9日 18時54分
プログラムを作成した際に、依存しているライブラリのライセンスを確認する必要があると思います。その際に、リンクしているライブラリのソースコードを取得する必要があるため、指定のバイナリが使用しているライブラリのDebianパッケージ名、Debianソースパッケージ名を調べるためのシェルスクリプトを作ってみました。
以下のシェルスクリプトを作成し、ATDEで動かしてみてください。
#!/bin/sh OBJDUMP=arm-linux-gnueabi-objdump GCC=arm-linux-gnueabi-gcc BIN="$1" dirname2() { local base=`pwd` cd `dirname $1` local dir=`pwd` cd $base echo $dir } needed=`$OBJDUMP -p $BIN | grep NEEDED | sed -e "s/^.* //"` libdirs=`$GCC -print-search-dirs | grep -e "libraries: =" | sed -e "s/libraries: =//" -e "s/:/ /g"` pkgs= for f in $needed do lib=`find $libdirs -ignore_readdir_race -name $f 2>/dev/null` if [ ! "$lib" ]; then echo "can't find package: $f" continue fi lib=`dirname2 $lib`/`basename $lib` pkgs="$pkgs `dpkg -S $lib | cut -d':' -f1`" done pkgs=`echo $pkgs | tr ' ' '\n' | sort | uniq | tr '\n' ' '` echo "packages: $pkgs" srcpkgs= for pkg in $pkgs do srcpkg=`dpkg-query -p $pkg | grep 'Source:' | cut -d' ' -f2` if [ ! "$srcpkg" ]; then echo "can't find source package: $pkg" continue fi srcpkgs="$srcpkgs $srcpkg" done echo "source packages: $srcpkgs"
※: ATDE5で使用することを想定しています。他の環境で使用する場合は、修正が必要な可能性があります。
上記シェルスクリプトの実行例(ファイル名find_package.shの場合)は以下のとおりです。
[ATDE ~]$ ./find_package.sh ~/atmark-dist/romfs/bin/wget packages: libc6-armel-cross libssl1.0.0-armel-cross source packages: eglibc openssl
上記のソースパッケージ名をもとに、ソースコード等を取得し、ライセンスを調べることができます。