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
上記のソースパッケージ名をもとに、ソースコード等を取得し、ライセンスを調べることができます。