From c234606d8f3310bdef006454b43d90e619144297 Mon Sep 17 00:00:00 2001 From: re2zero Date: Wed, 25 Sep 2024 13:44:46 +0800 Subject: [PATCH] chore: [linglong]The installation package slimming down Sync the id version as deb version, and slimming down the linglong layer package. Log: Linglong installation package slimming down. --- arm64/linglong.yaml | 28 +++++++++++++++-- deploy_dep | 73 +++++++++++++++++++++++++++++++++++++++++++++ linglong.yaml | 28 +++++++++++++++-- 3 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 deploy_dep diff --git a/arm64/linglong.yaml b/arm64/linglong.yaml index aed22592..c800f40f 100644 --- a/arm64/linglong.yaml +++ b/arm64/linglong.yaml @@ -21,11 +21,13 @@ command: build: | cat /var/lib/dpkg/status|grep "^Package: " > ${PREFIX}/packages.list bash ./install_dep linglong/sources "${PREFIX}" - cp ${PREFIX}/lib/${TRIPLET}/blas/libblas.* ${PREFIX}/lib/${TRIPLET} - cp ${PREFIX}/lib/${TRIPLET}/lapack/liblapack.* ${PREFIX}/lib/${TRIPLET} + mv ${PREFIX}/lib/${TRIPLET}/blas/libblas.* ${PREFIX}/lib/${TRIPLET} + mv ${PREFIX}/lib/${TRIPLET}/lapack/liblapack.* ${PREFIX}/lib/${TRIPLET} # 获取版本号 VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') + # 使用sed命令替换version的值 + sed -i "s/^ version: .*/ version: ${VERSION}.1/" linglong.yaml cmake -B build ${conf_args} \ -DSYSTEMD_USER_UNIT_DIR=${PREFIX}/lib/systemd/user \ @@ -35,11 +37,31 @@ build: | -DVERSION=${VERSION} cmake --build build -j`nproc` - cmake --build build --target install + cmake --build build --target install > install.log 2>&1 # 解决GIO运行问题: Settings schema xxx is not installed glib-compile-schemas $PREFIX/share/glib-2.0/schemas + # 项目生成应用名和动态隐式加载的依赖库,ldd无法找到的其他库 + LDD_FILES=( + deepin-movie + libmpv.so + libgpuinfo.so + libavcodec.so + libavutil.so + libavformat.so + libgstreamer-1.0.so + libgstpbutils-1.0.so + libffmpegthumbnailer.so + libdeepin-event-log.so + libblas.so + liblapack.so + libgfortran.so + ) + + # 生成.install 文件 + bash ./deploy_dep "${LDD_FILES[@]}" + sources: # - kind: git # url: https://github.com/linuxdeepin/deepin-movie-reborn diff --git a/deploy_dep b/deploy_dep new file mode 100644 index 00000000..ddf29555 --- /dev/null +++ b/deploy_dep @@ -0,0 +1,73 @@ +# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. +# +# SPDX-License-Identifier: GPL-3.0-or-later + +#!/bin/bash +set -e + +# 生成安装目录/文件和运行时依赖的必要库 +# 获取应用id +ID_VALUE=$(awk -F ': ' '/^ id: / {print $2}' linglong.yaml) + +## 获取安装的文件列表并写入安装脚本(排除头文件、pc和cmake文件) +# cmake 安装 +if ! grep -- "-- Installing:" install.log | awk '{print $NF}' | grep -vE '\.(h|cmake|pc)$' > ${ID_VALUE}.install; then + echo "cmake install files are empty!" +fi +# qmake 安装 +if ! grep -- "-install qinstall" install.log | awk '{print $NF}' | grep -vE '\.(h|cmake|pc)$' >> ${ID_VALUE}.install; then + echo "qmake install files are empty!" +fi +# 动态库软连接 +if ! grep -- "^ln -f -s " install.log | awk '{print $NF}' >> ${ID_VALUE}.install; then + echo "Get library softlink empty!" +fi + +# glib-compile-schemas 文件添加到 install 文件 +for SCHEMAS in "${PREFIX}"/share/glib-2.0/schemas/gschema*; do + if [[ -f "$SCHEMAS" ]]; then + echo "$SCHEMAS" >> "${ID_VALUE}.install" + fi +done + +# 获取依赖的所有文件 +for LDFILE in "$@"; do + + # 判断文件是否以 .so 结尾 + if [[ "$LDFILE" == *.so ]]; then + FILE_PATH="${PREFIX}/lib/${TRIPLET}/$LDFILE" + + # 添加依赖库到 install 文件 + for SOFILE in "${PREFIX}/lib/${TRIPLET}"/${LDFILE}*; do + if [[ -f "$SOFILE" ]]; then + echo "$SOFILE" >> "${ID_VALUE}.install" + fi + done + else + FILE_PATH="${PREFIX}/bin/$LDFILE" + fi + + # 获取依赖库 + DEPENDENCIES=$(ldd "$FILE_PATH" | grep "$PREFIX") || continue + if [[ ! -z "$DEPENDENCIES" ]]; then + echo "$DEPENDENCIES" | while IFS= read -r line; do + LIB_PATH=${line##*=> } + LIB_PATH=${LIB_PATH%%(*} + + # 获取基本库名并匹配相关库 + LIB_DIR=$(dirname "$LIB_PATH") + BASE_LIB_NAME=$(basename "$LIB_PATH") + + # 使用通配符查找相关库文件并添加到 install 文件 + for FILE in "$LIB_DIR"/${BASE_LIB_NAME%.*}*; do + if [[ -f "$FILE" ]]; then + echo "$FILE" >> "${ID_VALUE}.install" + fi + done + done + fi +done + +# 排除静态链接库 +#echo '^'${PREFIX}'/'${TRIPLET}'/.+(?> "${ID_VALUE}.install" +#echo '^'${PREFIX}'/lib/.+(?> "${ID_VALUE}.install" \ No newline at end of file diff --git a/linglong.yaml b/linglong.yaml index 4a698f2a..a6eef95d 100644 --- a/linglong.yaml +++ b/linglong.yaml @@ -21,11 +21,13 @@ command: build: | cat /var/lib/dpkg/status|grep "^Package: " > ${PREFIX}/packages.list bash ./install_dep linglong/sources "${PREFIX}" - cp ${PREFIX}/lib/${TRIPLET}/blas/libblas.* ${PREFIX}/lib/${TRIPLET} - cp ${PREFIX}/lib/${TRIPLET}/lapack/liblapack.* ${PREFIX}/lib/${TRIPLET} + mv ${PREFIX}/lib/${TRIPLET}/blas/libblas.* ${PREFIX}/lib/${TRIPLET} + mv ${PREFIX}/lib/${TRIPLET}/lapack/liblapack.* ${PREFIX}/lib/${TRIPLET} # 获取版本号 VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') + # 使用sed命令替换version的值 + sed -i "s/^ version: .*/ version: ${VERSION}.1/" linglong.yaml cmake -B build ${conf_args} \ -DSYSTEMD_USER_UNIT_DIR=${PREFIX}/lib/systemd/user \ @@ -35,11 +37,31 @@ build: | -DVERSION=${VERSION} cmake --build build -j`nproc` - cmake --build build --target install + cmake --build build --target install > install.log 2>&1 # 解决GIO运行问题: Settings schema xxx is not installed glib-compile-schemas $PREFIX/share/glib-2.0/schemas + # 项目生成应用名和动态隐式加载的依赖库,ldd无法找到的其他库 + LDD_FILES=( + deepin-movie + libmpv.so + libgpuinfo.so + libavcodec.so + libavutil.so + libavformat.so + libgstreamer-1.0.so + libgstpbutils-1.0.so + libffmpegthumbnailer.so + libdeepin-event-log.so + libblas.so + liblapack.so + libgfortran.so + ) + + # 生成.install 文件 + bash ./deploy_dep "${LDD_FILES[@]}" + sources: # - kind: git # url: https://github.com/linuxdeepin/deepin-movie-reborn