Skip to content

Commit

Permalink
chore: [linglong]The installation package slimming down
Browse files Browse the repository at this point in the history
Sync the id version as deb version, and slimming down the linglong layer
package.

Log: Linglong installation package slimming down.
  • Loading branch information
re2zero committed Sep 25, 2024
1 parent c14ea36 commit c234606
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 6 deletions.
28 changes: 25 additions & 3 deletions arm64/linglong.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Expand Down
73 changes: 73 additions & 0 deletions deploy_dep
Original file line number Diff line number Diff line change
@@ -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}'/.+(?<!\.a)$' >> "${ID_VALUE}.install"
#echo '^'${PREFIX}'/lib/.+(?<!\.a|\.pc|\.cmake|\.h|\.sh|\.prf|\.inc)$' >> "${ID_VALUE}.install"
28 changes: 25 additions & 3 deletions linglong.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Expand Down

0 comments on commit c234606

Please sign in to comment.