- Добавлен флаг -l|--log-path для указания директории сохранения вывода процесса сборки в журнал appimage_build.log
- Добавлены проверки на наличие инструментов сборки AppImage - Добавлены проверки на наличие указанных путей, передаваемых через флаги
This commit is contained in:
parent
8b0a2d5f91
commit
8a8c037fc2
|
@ -0,0 +1,12 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [0.2.0](https://git.zhirov.kz/alexander/appimage-builder/compare/0.1.0...0.2.0) - 2024-05-22
|
||||||
|
### Added
|
||||||
|
- Добавлен флаг `-l|--log-path` для указания директории сохранения вывода процесса сборки в журнал `appimage_build.log`
|
||||||
|
### Fixed
|
||||||
|
- Добавлены проверки на наличие инструментов сборки AppImage
|
||||||
|
- Добавлены проверки на наличие указанных путей, передаваемых через флаги
|
||||||
|
|
||||||
|
## [0.1.0](https://git.zhirov.kz/alexander/appimage-builder/commit/8b0a2d5f9194e67d2eb805a4631261ca23cfa013) - 2024-03-12
|
||||||
|
### Added
|
||||||
|
- Релиз
|
|
@ -25,3 +25,10 @@
|
||||||
|
|
||||||
- `current_path` - текущая директория пакета
|
- `current_path` - текущая директория пакета
|
||||||
- `app_path` - временная директория сборки пакета (иерархия будущего AppImage)
|
- `app_path` - временная директория сборки пакета (иерархия будущего AppImage)
|
||||||
|
|
||||||
|
## Необходимые инструменты для сборки пакета AppImage
|
||||||
|
|
||||||
|
- [AppImageTool](https://github.com/AppImage/appimagetool) - инструмент низкого уровня для создания AppImage из существующего AppDir
|
||||||
|
- [type2-runtime](https://github.com/AppImage/type2-runtime) - среда выполнения - исполняемая часть каждого AppImage. Он монтирует полезную нагрузку через FUSE и выполняет точку входа
|
||||||
|
- [rpm2cpio](https://www.opennet.ru/man.shtml?topic=rpm2cpio&category=8&russian=0) - извлекает архив cpio из RPM пакета
|
||||||
|
- [cpio](https://www.opennet.ru/man.shtml?topic=cpio&category=8&russian=0) - инструмент копирования файлов в архив и из архива
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
# title :appimage-builder.sh
|
# title :appimage-builder.sh
|
||||||
# description :Script for building AppImage
|
# description :Script for building AppImage
|
||||||
# author :Alexander Zhirov
|
# author :Alexander Zhirov
|
||||||
# date :20240312
|
# date :20240522
|
||||||
# version :0.1.0
|
# version :0.2.0
|
||||||
# usage :bash appimage-builder.sh
|
# usage :bash appimage-builder.sh --help
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
|
|
||||||
# Пакеты AppImageTool
|
# Пакеты AppImageTool
|
||||||
|
@ -14,32 +14,32 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
version="0.1.0"
|
version="0.2.0"
|
||||||
|
|
||||||
# Определения по умолчанию
|
# Определения по умолчанию
|
||||||
# Приложение для сборки AppImage
|
# Приложение для сборки AppImage
|
||||||
appimage_tool=$(which appimagetool-x86_64.AppImage)
|
appimage_tool=""
|
||||||
# Среда выполнения
|
# Среда выполнения
|
||||||
appimage_runtime=$(which runtime-x86_64)
|
appimage_runtime=""
|
||||||
# Output
|
# Output
|
||||||
appimage_output="${HOME}"
|
appimage_output=""
|
||||||
# Директория с рецептами
|
# Директория с рецептами
|
||||||
appimage_input="./apps"
|
appimage_input="$(dirname $(realpath ${0}))/apps"
|
||||||
# Директория с кэшем
|
# Директория с кэшем
|
||||||
appimage_cache="${HOME}/appimage_cache"
|
appimage_cache=""
|
||||||
# Список приложений для сборки
|
# Список приложений для сборки
|
||||||
appimage_apps=()
|
appimage_apps=()
|
||||||
|
|
||||||
# Дополнительные необходимые утилиты
|
# Дополнительные необходимые утилиты
|
||||||
rpm2cpio=$(which rpm2cpio)
|
rpm2cpio_tool=$(which rpm2cpio 2>/dev/null)
|
||||||
cpio=$(which cpio)
|
cpio_tool=$(which cpio 2>/dev/null)
|
||||||
|
|
||||||
if [ ! -x ${rpm2cpio} ]; then
|
if [ ! -x "${rpm2cpio_tool}" ]; then
|
||||||
echo "Отсутствует утилита rpm2cpio"
|
echo "Отсутствует утилита rpm2cpio"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -x ${cpio} ]; then
|
if [ ! -x "${cpio_tool}" ]; then
|
||||||
echo "Отсутствует утилита cpio"
|
echo "Отсутствует утилита cpio"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -48,7 +48,7 @@ extrpm() {
|
||||||
local rpm="${1}"
|
local rpm="${1}"
|
||||||
local destination_path="${2}"
|
local destination_path="${2}"
|
||||||
|
|
||||||
${rpm2cpio} ${rpm} | ${cpio} -idmvD ${destination_path}
|
${rpm2cpio_tool} ${rpm} | ${cpio_tool} -idmvD ${destination_path}
|
||||||
}
|
}
|
||||||
|
|
||||||
build_appimage() {
|
build_appimage() {
|
||||||
|
@ -66,22 +66,22 @@ build_appimage() {
|
||||||
|
|
||||||
if [ ! -f ${sources} ]; then
|
if [ ! -f ${sources} ]; then
|
||||||
echo "${name}: не найдено исходных файлов для упаковки"
|
echo "${name}: не найдено исходных файлов для упаковки"
|
||||||
return
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -s ${sources} ]; then
|
if [ ! -s ${sources} ]; then
|
||||||
echo "${name}: не найдено ни одного источника"
|
echo "${name}: не найдено ни одного источника"
|
||||||
return
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${files} ]; then
|
if [ ! -d ${files} ]; then
|
||||||
echo "${files}: не найдена директория с файлами"
|
echo "${files}: не найдена директория с файлами"
|
||||||
return
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ "$(ls -A ${files})" ]; then
|
if ! [ "$(ls -A ${files})" ]; then
|
||||||
echo "${files}: отсутствуют файлы для сборки AppImage"
|
echo "${files}: отсутствуют файлы для сборки AppImage"
|
||||||
return
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Создание директорий для сборки AppImage
|
# Создание директорий для сборки AppImage
|
||||||
|
@ -125,17 +125,20 @@ build_appimage() {
|
||||||
${appimage_tool} -v --runtime-file ${appimage_runtime} ${app} ${appimage_output}/${name_appimage}
|
${appimage_tool} -v --runtime-file ${appimage_runtime} ${app} ${appimage_output}/${name_appimage}
|
||||||
|
|
||||||
rm -rvf ${tmp}
|
rm -rvf ${tmp}
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
help_scritp() {
|
help_scritp() {
|
||||||
echo -e "\n" \
|
echo -e "\n" \
|
||||||
"Использование: ${0} [ОПЦИИ]... [СПИСОК ПАКЕТОВ ДЛЯ СБОРКИ]\n" \
|
"Использование: $(basename ${0}) [ОПЦИИ]... [СПИСОК ПАКЕТОВ ДЛЯ СБОРКИ]\n" \
|
||||||
"Основные опции:\n" \
|
"Основные опции:\n" \
|
||||||
"\t-t\t--appimage-tool\t\tИнструмент сборки AppImage\n" \
|
"\t-t\t--appimage-tool\t\tИнструмент сборки AppImage\n" \
|
||||||
"\t-r\t--appimage-runtime\tИнструмент времени выполнения\n" \
|
"\t-r\t--appimage-runtime\tИнструмент времени выполнения\n" \
|
||||||
"\t-i\t--input-path\t\tДиректория с пакетами исходных файлов\n" \
|
"\t-i\t--input-path\t\tДиректория с пакетами исходных файлов\n" \
|
||||||
"\t-o\t--output-path\t\tДиректория сохранения собранных AppImage\n" \
|
"\t-o\t--output-path\t\tДиректория сохранения собранных AppImage\n" \
|
||||||
"\t-c\t--cache-path\t\tДиректория кеша для пакетов sources\n" \
|
"\t-c\t--cache-path\t\tДиректория кеша для пакетов sources\n" \
|
||||||
|
"\t-l\t--log-path\t\tДиректория для сохранения журнала сборки\n" \
|
||||||
"Дополнительно:\n" \
|
"Дополнительно:\n" \
|
||||||
"\t-h\t--help\t\t\tПоказать справку\n" \
|
"\t-h\t--help\t\t\tПоказать справку\n" \
|
||||||
"\t-v\t--version\t\tВерсия скрипта\n"
|
"\t-v\t--version\t\tВерсия скрипта\n"
|
||||||
|
@ -166,6 +169,10 @@ main() {
|
||||||
appimage_cache="${value}"
|
appimage_cache="${value}"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-l|--log-path)
|
||||||
|
appimage_log="${value}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
help_scritp
|
help_scritp
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -181,53 +188,76 @@ main() {
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ ! -f ${appimage_tool} ]; then
|
if [ -z "${appimage_tool}" ] ; then
|
||||||
echo "Отсутствует инструмент сборки $(basename ${appimage_tool})"
|
appimage_tool=$(which appimagetool-x86_64.AppImage 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${appimage_tool}" ]; then
|
||||||
|
echo "Отсутствует инструмент сборки: https://github.com/AppImage/appimagetool"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -x ${appimage_tool} ]; then
|
if [ ! -x "${appimage_tool}" ]; then
|
||||||
echo "Инструмент сборки $(basename ${appimage_tool}) должен быть исполняемым"
|
echo "Инструмент сборки $(basename ${appimage_tool}) должен быть исполняемым"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f ${appimage_runtime} ]; then
|
if [ -z "${appimage_runtime}" ] ; then
|
||||||
echo "Отсутствует инструмент времени выполнения $(basename ${appimage_runtime})"
|
appimage_runtime=$(which runtime-x86_64 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${appimage_runtime}" ]; then
|
||||||
|
echo "Отсутствует инструмент времени выполнения: https://github.com/AppImage/type2-runtime"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -x ${appimage_runtime} ]; then
|
if [ ! -x "${appimage_runtime}" ]; then
|
||||||
echo "Инструмент времени выполнения $(basename ${appimage_runtime}) должен быть исполняемым"
|
echo "Инструмент времени выполнения $(basename ${appimage_runtime}) должен быть исполняемым"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${appimage_input} ]; then
|
if [ ! -d "${appimage_input}" ]; then
|
||||||
echo "Не установлена директория исхоных файлов для сборки AppImage"
|
echo "Не установлена директория исхоных файлов для сборки AppImage"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${appimage_output} ]; then
|
if [ "$(find ${appimage_input} -maxdepth 1 -type d | wc -l)" -eq 1 ]; then
|
||||||
echo "Не установлена директория для сохранения AppImage"
|
echo "Директория не содержит исхоных файлов для сборки AppImage: ${appimage_input}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d ${appimage_cache} ]; then
|
if [ ! -d "${appimage_output}" ]; then
|
||||||
echo "Не определена директория для кеша. Будет использована директория по умолчанию"
|
appimage_output="${HOME}/AppImages"
|
||||||
|
mkdir -p "${appimage_output}"
|
||||||
|
echo "Не установлена директория для сохранения AppImage. Будет использована директория по умолчанию: ${appimage_output}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${appimage_cache}" ]; then
|
||||||
appimage_cache="/tmp/appimage_cache"
|
appimage_cache="/tmp/appimage_cache"
|
||||||
mkdir -p "${appimage_cache}"
|
mkdir -p "${appimage_cache}"
|
||||||
|
echo "Не определена директория для кеша. Будет использована директория по умолчанию: ${appimage_cache}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${appimage_log}" ]; then
|
||||||
|
appimage_log="${appimage_output}"
|
||||||
|
echo "Не определена директория для журнала. Будет использована директория по умолчанию: ${appimage_output}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Инструмент сборки: ${appimage_tool}"
|
echo "Инструмент сборки: ${appimage_tool}"
|
||||||
echo "Инструмент времени выполнения: ${appimage_runtime}"
|
echo "Инструмент времени выполнения: ${appimage_runtime}"
|
||||||
echo "Директория исходных файлов: ${appimage_input}"
|
echo "Директория исходных файлов: ${appimage_input}"
|
||||||
echo "Директория для сохранения AppImage: ${appimage_input}"
|
echo "Директория для сохранения AppImage: ${appimage_output}"
|
||||||
echo "Директория для кеша: ${appimage_cache}"
|
echo "Директория для кеша: ${appimage_cache}"
|
||||||
echo "Список собираемых пакетов: ${appimage_apps[@]}"
|
echo "Список собираемых пакетов: ${appimage_apps[@]}"
|
||||||
|
|
||||||
local pkgs=$(printf "%s\n" "${appimage_apps[@]}" | xargs -I {} find ${appimage_input} -name {} -mindepth 1 -maxdepth 1 -type d)
|
local pkgs=$(printf "%s\n" "${appimage_apps[@]}" | xargs -I {} find ${appimage_input} -name {} -mindepth 1 -maxdepth 1 -type d)
|
||||||
|
|
||||||
for pkg in ${pkgs}; do
|
for pkg in ${pkgs}; do
|
||||||
build_appimage ${pkg}
|
if build_appimage ${pkg} > "${appimage_log}/appimage_build.log" 2>&1 ; then
|
||||||
|
echo "AppImage $(basename ${pkg}) был собран"
|
||||||
|
else
|
||||||
|
echo "AppImage $(basename ${pkg}) не был собран"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue