@ -2,9 +2,9 @@
# title :appimage-builder.sh
# description :Script for building AppImage
# author :Alexander Zhirov
# date :20240 31 2
# version :0. 1 .0
# usage :bash appimage-builder.sh
# date :20240 52 2
# version :0. 2 .0
# usage :bash appimage-builder.sh --help
#===============================================================================
# Пакеты AppImageTool
@ -14,32 +14,32 @@
set -e
version = "0. 1 .0"
version = "0. 2 .0"
# Определения по умолчанию
# Приложение для сборки AppImage
appimage_tool = $( which appimagetool-x86_64.AppImage)
appimage_tool = ""
# Среда выполнения
appimage_runtime = $( which runtime-x86_64)
appimage_runtime = ""
# Output
appimage_output = " ${ HOME } "
appimage_output = " "
# Директория с рецептами
appimage_input = " ./apps "
appimage_input = " $( dirname $( realpath ${ 0 } ) ) /apps "
# Директория с кэшем
appimage_cache = " ${ HOME } /appimage_cache "
appimage_cache = " "
# Список приложений для сборки
appimage_apps = ( )
# Дополнительные необходимые утилиты
rpm2cpio = $( which rpm2cpio)
cpio = $( which cpio)
rpm2cpio _tool = $( which rpm2cpio 2>/dev/null )
cpio _tool = $( which cpio 2>/dev/null )
if [ ! -x ${ rpm2cpio } ] ; then
if [ ! -x " ${ rpm2cpio _tool } " ] ; then
echo "Отсутствует утилита rpm2cpio"
exit 1
fi
if [ ! -x ${ cpio } ] ; then
if [ ! -x " ${ cpio _tool } " ] ; then
echo "Отсутствует утилита cpio"
exit 1
fi
@ -48,7 +48,7 @@ extrpm() {
local rpm = " ${ 1 } "
local destination_path = " ${ 2 } "
${ rpm2cpio } ${ rpm } | ${ cpio } -idmvD ${ destination_path }
${ rpm2cpio _tool } ${ rpm } | ${ cpio _tool } -idmvD ${ destination_path }
}
build_appimage( ) {
@ -66,22 +66,22 @@ build_appimage() {
if [ ! -f ${ sources } ] ; then
echo " ${ name } : не найдено исходных файлов для упаковки "
return
return 1
fi
if [ ! -s ${ sources } ] ; then
echo " ${ name } : не найдено ни одного источника "
return
return 1
fi
if [ ! -d ${ files } ] ; then
echo " ${ files } : не найдена директория с файлами "
return
return 1
fi
if ! [ " $( ls -A ${ files } ) " ] ; then
echo " ${ files } : отсутствуют файлы для сборки AppImage "
return
return 1
fi
# Создание директорий для сборки AppImage
@ -125,17 +125,20 @@ build_appimage() {
${ appimage_tool } -v --runtime-file ${ appimage_runtime } ${ app } ${ appimage_output } /${ name_appimage }
rm -rvf ${ tmp }
return 0
}
help_scritp( ) {
echo -e "\n" \
" Использование: ${ 0 } [ОПЦИИ]... [СПИСОК ПАКЕТОВ ДЛЯ СБОРКИ]\n " \
" Использование: $( basename ${ 0 } ) [ОПЦИИ]... [СПИСОК ПАКЕТОВ ДЛЯ СБОРКИ]\n " \
"Основные опции:\n" \
"\t-t\t--appimage-tool\t\tИнс тр у ме нт сборки AppImage\n" \
"\t-r\t--appimage-runtime\tИнс тр у ме нт времени выполнения\n" \
"\t-i\t--input-path\t\tДир е кто р ия с пакетами исходных файлов\n" \
"\t-o\t--output-path\t\tДир е кто р ия сохранения собранных AppImage\n" \
"\t-c\t--cache-path\t\tДир е кто р ия кеша для пакетов sources\n" \
"\t-l\t--log-path\t\tДир е кто р ия для сохранения журнала сборки\n" \
"Дополнительно:\n" \
"\t-h\t--help\t\t\tПо ка за ть справку\n" \
"\t-v\t--version\t\tВ е р с ия скрипта\n"
@ -166,6 +169,10 @@ main() {
appimage_cache = " ${ value } "
shift
; ;
-l| --log-path)
appimage_log = " ${ value } "
shift
; ;
-h| --help)
help_scritp
exit 0
@ -181,53 +188,76 @@ main() {
shift
done
if [ ! -f ${ appimage_tool } ] ; then
echo " Отсутствует инструмент сборки $( basename ${ appimage_tool } ) "
if [ -z " ${ appimage_tool } " ] ; then
appimage_tool = $( which appimagetool-x86_64.AppImage 2>/dev/null)
fi
if [ ! -f " ${ appimage_tool } " ] ; then
echo "Отсутствует инструмент сборки: https://github.com/AppImage/appimagetool"
exit 1
fi
if [ ! -x ${ appimage_tool } ] ; then
if [ ! -x " ${ appimage_tool } " ] ; then
echo " Инструмент сборки $( basename ${ appimage_tool } ) должен быть исполняемым "
exit 1
fi
if [ ! -f ${ appimage_runtime } ] ; then
echo " Отсутствует инструмент времени выполнения $( basename ${ appimage_runtime } ) "
if [ -z " ${ appimage_runtime } " ] ; then
appimage_runtime = $( which runtime-x86_64 2>/dev/null)
fi
if [ ! -f " ${ appimage_runtime } " ] ; then
echo "Отсутствует инструмент времени выполнения: https://github.com/AppImage/type2-runtime"
exit 1
fi
if [ ! -x ${ appimage_runtime } ] ; then
if [ ! -x " ${ appimage_runtime } " ] ; then
echo " Инструмент времени выполнения $( basename ${ appimage_runtime } ) должен быть исполняемым "
exit 1
fi
if [ ! -d ${ appimage_input } ] ; then
if [ ! -d " ${ appimage_input } " ] ; then
echo "Н е установлена директория исхоных файлов для сборки AppImage"
exit 1
fi
if [ ! -d ${ appimage_output } ] ; then
echo " Н е установлена директория для сохранения AppImage "
if [ " $( find ${ appimage_input } -maxdepth 1 -type d | wc -l) " -eq 1 ] ; then
echo " Директория не содержит исхоных файлов для сборки AppImage: ${ appimage_input } "
exit 1
fi
if [ ! -d ${ appimage_cache } ] ; then
echo "Н е определена директория для кеша. Будет использована директория по умолчанию"
if [ ! -d " ${ appimage_output } " ] ; then
appimage_output = " ${ HOME } /AppImages "
mkdir -p " ${ appimage_output } "
echo " Н е установлена директория для сохранения AppImage. Будет использована директория по умолчанию: ${ appimage_output } "
fi
if [ ! -d " ${ appimage_cache } " ] ; then
appimage_cache = "/tmp/appimage_cache"
mkdir -p " ${ appimage_cache } "
echo " Н е определена директория для кеша. Будет использована директория по умолчанию: ${ appimage_cache } "
fi
if [ ! -d " ${ appimage_log } " ] ; then
appimage_log = " ${ appimage_output } "
echo " Н е определена директория для журнала. Будет использована директория по умолчанию: ${ appimage_output } "
fi
echo " Инструмент сборки: ${ appimage_tool } "
echo " Инструмент времени выполнения: ${ appimage_runtime } "
echo " Директория исходных файлов: ${ appimage_input } "
echo " Директория для сохранения AppImage: ${ appimage_input } "
echo " Директория для сохранения AppImage: ${ appimage_ out put} "
echo " Директория для кеша: ${ appimage_cache } "
echo " Список собираемых пакетов: ${ appimage_apps [@] } "
local pkgs = $( printf "%s\n" " ${ appimage_apps [@] } " | xargs -I { } find ${ appimage_input } -name { } -mindepth 1 -maxdepth 1 -type d)
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
}