为Android编译cryptsetup

时间:2018-05-20 05:42:48

标签: android arm debian cross-compiling luks

对于长长的序言感到抱歉,但是这里......

我希望能够在手机上阅读我的LUKS加密USB驱动器,因此我正在为Android搜索cryptsetup。我发现了一个被遗弃的Guardian Project repo导致我在Fedora 11上编译静态二进制文件old blog post。卫报项目回购似乎是使用博客文章中的想法,而不是使用armv5tel-redhat- linux-gnueabi-gcc-c ++,它使用的是Android NDK。 Play商店中有一个应用程序声称使用来自此repo的创意,它还提供了一个GUI。在XDA论坛上还有一个线程,用户提供使用Android NDK编译的静态二进制文件。

然而,这些已经过时或不可信任。现在Debian已经打包了一个可以定位armel / armhf架构的GNU交叉编译器,我想尝试使用它来构建cryptsetup。使用Debian工具的优点是下载/安装尺寸小得多。缺点是尺寸较大的二进制文件。使用this Github gist中的想法,我得到了以下shell脚本,它实现了结果:

arch=armel;triplet=arm-linux-gnueabi
#arch=armhf;triplet=arm-linux-gnueabihf #either option works
DEVMAPPERDIR=$HOME/libdevmapper
sudo dpkg --add-architecture $arch
#enable unstable sources
echo 'deb-src http://deb.debian.org/debian/ sid main'|sudo tee -a /etc/apt/sources.list
sudo apt update
#toolchain
sudo apt -y install gcc-$triplet dpkg-dev autopoint automake libtool pkg-config
#package compilation dependencies
sudo apt -y install libselinux1-dev:$arch libgcrypt20-dev:$arch uuid-dev:$arch libpopt-dev:$arch libjson-c-dev:$arch
apt-get source cryptsetup lvm2
cd lvm2-*
#patch for linking errors
sed -i 's/SELINUX_LIBS="-lsepol"/SELINUX_LIBS="-lsepol -lpcre"/' configure
./configure --enable-static-link --enable-pkgconfig --prefix=$DEVMAPPERDIR --host=$triplet ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
make install_device-mapper
cd ../cryptsetup-*
./autogen.sh && ./configure --enable-static-cryptsetup --host=$triplet PKG_CONFIG_PATH="$DEVMAPPERDIR/lib/pkgconfig" CFLAGS="-I$DEVMAPPERDIR/include/" LDFLAGS="-Wl,-rpath-link,$DEVMAPPERDIR/lib"
make install DESTDIR=$HOME/cryptsetup

libdevmapper-dev的打包版本不包含静态库,因为它依赖于已经不再支持静态构建的udev。由于ipsetup的udev isn't needed,我从源代码编译了libdevmapper,并在编译cryptsetup时传递了适当的标志。

现在我来问问题:

  1. 我这样做是对的吗?
  2. 由于与Debian Stretch一起打包的glibc的要求,所以获得的二进制文件需要Linux v3.2(Android v4.2)或更高版本。是否有一些简单的方法来定位早期的内核? Debian Jessie允许定位v2.6.32(Android v2.2),但没有交叉编译器。
  3. Android NDK FOSS?

0 个答案:

没有答案