Conty/create-utils.sh

164 lines
5.3 KiB
Bash
Raw Permalink Normal View History

2021-03-28 18:31:25 +02:00
#!/usr/bin/env bash
2023-02-16 11:48:21 +01:00
# General build dependencies: gawk grep lz4 zstd curl gcc make autoconf
2022-01-16 11:30:31 +01:00
# libtool pkgconf libcap fuse2 (or fuse3) lzo xz zlib findutils
2021-08-06 14:10:31 +02:00
#
2022-01-16 11:32:50 +01:00
# Dwarfs build dependencies: fuse2 (or fuse3) openssl jemalloc
2022-01-16 11:30:31 +01:00
# xxhash boost lz4 xz zstd libarchive libunwind google-glod gtest fmt
# gflags double-conversion cmake ruby-ronn libevent libdwarf git
2021-08-06 14:10:31 +02:00
#
# Dwarfs compilation is optional and disabled by default.
2021-04-11 22:47:10 +02:00
2021-03-28 18:31:25 +02:00
script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
2022-01-06 17:20:28 +01:00
# Set to true to compile dwarfs instead of squashfuse
build_dwarfs="false"
2021-08-06 14:10:31 +02:00
squashfuse_version="0.1.105"
bwrap_version="0.8.0"
lz4_version="1.9.4"
zstd_version="1.5.5"
squashfs_tools_version="4.6.1"
fuse_overlayfs_version="1.12"
2021-03-28 18:31:25 +02:00
export CC=gcc
export CXX=g++
export CFLAGS="-O2"
2021-03-28 18:31:25 +02:00
export CXXFLAGS="${CFLAGS}"
2022-01-06 17:20:28 +01:00
export LDFLAGS="-Wl,-O1,--sort-common,--as-needed"
2021-03-28 18:31:25 +02:00
mkdir -p "${script_dir}"/build-utils
cd "${script_dir}"/build-utils || exit 1
2023-02-16 11:48:21 +01:00
curl -#Lo lz4.tar.gz https://github.com/lz4/lz4/archive/refs/tags/v${lz4_version}.tar.gz
curl -#Lo zstd.tar.gz https://github.com/facebook/zstd/archive/refs/tags/v${zstd_version}.tar.gz
curl -#Lo bwrap.tar.gz https://github.com/containers/bubblewrap/archive/refs/tags/v${bwrap_version}.tar.gz
curl -#Lo fuse-overlayfs.tar.gz https://github.com/containers/fuse-overlayfs/archive/refs/tags/v${fuse_overlayfs_version}.tar.gz
2021-03-28 18:31:25 +02:00
tar xf lz4.tar.gz
tar xf zstd.tar.gz
tar xf bwrap.tar.gz
tar xf fuse-overlayfs.tar.gz
2022-01-06 17:20:28 +01:00
if [ "${build_dwarfs}" != "true" ]; then
2023-02-16 11:48:21 +01:00
curl -#Lo squashfuse.tar.gz https://github.com/vasi/squashfuse/archive/refs/tags/${squashfuse_version}.tar.gz
curl -#Lo sqfstools.tar.gz https://github.com/plougher/squashfs-tools/archive/refs/tags/${squashfs_tools_version}.tar.gz
2022-01-06 17:20:28 +01:00
tar xf squashfuse.tar.gz
tar xf sqfstools.tar.gz
fi
2021-03-28 18:31:25 +02:00
cd bubblewrap-"${bwrap_version}" || exit 1
2021-03-28 18:31:25 +02:00
./autogen.sh
./configure --disable-selinux --disable-man
make -j"$(nproc)" DESTDIR="${script_dir}"/build-utils/bin install
2021-03-28 18:31:25 +02:00
cd ../fuse-overlayfs-"${fuse_overlayfs_version}" || exit 1
./autogen.sh
./configure
make -j"$(nproc)" DESTDIR="${script_dir}"/build-utils/bin install
cd ../lz4-"${lz4_version}" || exit 1
make -j"$(nproc)" DESTDIR="${script_dir}"/build-utils/bin install
2021-03-28 18:31:25 +02:00
cd ../zstd-"${zstd_version}" || exit 1
ZSTD_LEGACY_SUPPORT=0 HAVE_ZLIB=0 HAVE_LZMA=0 HAVE_LZ4=0 BACKTRACE=0 make -j"$(nproc)" DESTDIR="${script_dir}"/build-utils/bin install
2021-03-28 18:31:25 +02:00
2022-01-06 17:20:28 +01:00
if [ "${build_dwarfs}" != "true" ]; then
cd ../squashfuse-"${squashfuse_version}" || exit 1
2022-01-06 17:20:28 +01:00
./autogen.sh
./configure
make -j"$(nproc)" DESTDIR="${script_dir}"/build-utils/bin install
2021-03-28 18:31:25 +02:00
cd ../squashfs-tools-"${squashfs_tools_version}"/squashfs-tools || exit 1
make -j"$(nproc)" GZIP_SUPPORT=1 XZ_SUPPORT=1 LZO_SUPPORT=1 LZMA_XZ_SUPPORT=1 \
2022-01-06 17:20:28 +01:00
LZ4_SUPPORT=1 ZSTD_SUPPORT=1 XATTR_SUPPORT=1
make INSTALL_DIR="${script_dir}"/build-utils/bin/usr/local/bin install
fi
cd "${script_dir}"/build-utils || exit 1
2021-03-28 18:31:25 +02:00
mkdir utils
mv bin/usr/local/bin/bwrap utils
mv bin/usr/local/bin/squashfuse utils
mv bin/usr/local/bin/squashfuse_ll utils
mv bin/usr/local/bin/mksquashfs utils
mv bin/usr/local/bin/unsquashfs utils
mv bin/usr/local/bin/fuse-overlayfs utils
mv bin/usr/local/lib/liblz4.so."${lz4_version}" utils/liblz4.so.1
mv bin/usr/local/lib/libzstd.so."${zstd_version}" utils/libzstd.so.1
2021-03-28 18:31:25 +02:00
mv bin/usr/local/lib/libfuseprivate.so.0.0.0 utils/libfuseprivate.so.0
mv bin/usr/local/lib/libsquashfuse.so.0.0.0 utils/libsquashfuse.so.0
if ! ldd utils/squashfuse | grep -q libfuse.so.2; then
mv utils/squashfuse utils/squashfuse3
mv utils/squashfuse_ll utils/squashfuse3_ll
2021-03-28 18:31:25 +02:00
fi
2021-08-06 14:10:31 +02:00
if [ "${build_dwarfs}" = "true" ]; then
git clone https://github.com/mhx/dwarfs.git --recursive
# Revert commit aeeddae, because otherwise dwarfs might use
# /usr/lib/locale/locale-archive file, which would break it
# on systems using musl libc
#
# This can also be worked around by setting LC_ALL=C, but for now
# let's revert the commit
cd dwarfs || exit 1
git revert --no-commit aeeddaecab5d4648780b0e11dc03fca19e23409a
mkdir build
cd build || exit 1
2022-01-06 17:20:28 +01:00
cmake .. -DCMAKE_BUILD_TYPE=Release \
2021-08-06 14:10:31 +02:00
-DPREFER_SYSTEM_ZSTD=ON -DPREFER_SYSTEM_XXHASH=ON \
-DPREFER_SYSTEM_GTEST=ON -DPREFER_SYSTEM_LIBFMT=ON
2021-08-06 14:10:31 +02:00
make -j"$(nproc)"
2022-01-06 17:20:28 +01:00
make DESTDIR="${script_dir}"/build-utils/bin install
cd "${script_dir}"/build-utils || exit 1
2021-08-06 14:10:31 +02:00
mv bin/usr/local/sbin/dwarfs2 utils/dwarfs
mv bin/usr/local/sbin/dwarfs utils/dwarfs3
mv bin/usr/local/bin/mkdwarfs utils
mv bin/usr/local/bin/dwarfsextract utils
fi
mapfile -t libs_list < <(ldd utils/* | awk '/=> \// {print $3}')
2021-08-06 14:10:31 +02:00
for i in "${libs_list[@]}"; do
2021-08-06 14:10:31 +02:00
if [ ! -f utils/"$(basename "${i}")" ]; then
cp -L "${i}" utils
fi
done
if [ ! -f utils/ld-linux-x86-64.so.2 ]; then
cp -L /lib64/ld-linux-x86-64.so.2 utils
fi
2021-03-28 18:31:25 +02:00
find utils -type f -exec strip --strip-unneeded {} \; 2>/dev/null
2021-04-11 22:05:50 +02:00
cat <<EOF > utils/info
bubblewrap ${bwrap_version}
fuse-overlayfs ${fuse_overlayfs_version}
2021-04-11 22:05:50 +02:00
lz4 ${lz4_version}
zstd ${zstd_version}
EOF
2021-08-06 14:10:31 +02:00
if [ "${build_dwarfs}" = "true" ]; then
2022-01-06 17:20:28 +01:00
echo "dwarfs $(git -C dwarfs rev-parse --short HEAD)-git" >> utils/info
utils="utils_dwarfs.tar.gz"
else
2022-01-06 17:20:28 +01:00
echo "squashfuse ${squashfuse_version}" >> utils/info
echo "squashfs-tools ${squashfs_tools_version}" >> utils/info
utils="utils.tar.gz"
2021-08-06 14:10:31 +02:00
fi
tar -zcf "${utils}" utils
mv "${script_dir}"/"${utils}" "${script_dir}"/"${utils}".old
mv "${utils}" "${script_dir}"
2021-03-28 18:31:25 +02:00
cd "${script_dir}" || exit 1
rm -rf build-utils
clear
echo "Done!"