#!/usr/bin/env bash
#
# Description: Helper PKGBUILD for build ubm package
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
#

VERSION_SCRIPT=2.16

    build_container(){
	_prepare_container(){
	    sudo cp -fa /etc/pacman.conf ${CONTAINER_ROOT}/etc/
	    sudo sed "s/^SigLevel.*/SigLevel = Never/g" -i ${CONTAINER_ROOT}/etc/pacman.conf
	    echo "Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch" | sudo tee "${CONTAINER_ROOT}/etc/pacman.d/mirrorlist" &> /dev/null
	    #sudo sed -i "s|^Include.*|Server=https://repo.ublinux.ru/${pkgver}/\$repo/\$arch|g" ${CONTAINER_ROOT}/etc/pacman.conf
	    sudo cp -fa /etc/makepkg.conf ${CONTAINER_ROOT}/etc/
	    sudo sed "s/^[[:blank:]#]*MAKEFLAGS=.*/MAKEFLAGS=\"-j\$\(nproc\)\"/" -i ${CONTAINER_ROOT}/etc/makepkg.conf
	    sudo sed "s/^[[:blank:]#]*COMPRESSZST=.*/COMPRESSZST=(zstd -T0 -c -z -v --ultra -20 -)/" -i ${CONTAINER_ROOT}/etc/makepkg.conf
	    #echo 'ALL ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee --append "${CONTAINER_ROOT}/etc/sudoers.d/allnopasswd" &> /dev/null
	}
	_prepare_container2(){
	    sudo cp -fa /etc/locale.conf ${CONTAINER_ROOT}/etc/
	    sudo cp -fa /etc/locale.gen ${CONTAINER_ROOT}/etc/
	    sudo cp -fa /usr/lib/locale/locale-archive ${CONTAINER_ROOT}/usr/lib/locale/locale-archive
	    sudo cp -fa /etc/pacman.d/gnupg ${CONTAINER_ROOT}/etc/pacman.d/gnupg
            # Отключаем хуки pacman которые обновляют кеши
	    #sudo sed -E "s/^[[:blank:]#]*HookDir .*/HookDir     = \/etc\/pacman\.d\/hooks\//" -i ${CONTAINER_ROOT}/etc/pacman.conf
            sudo install -dm755 ${CONTAINER_ROOT}/etc/pacman.d/hooks
            DISABLE_HOOKS=(
        		    #'30-systemd-hwdb.hook'
        		    '30-update-mime-database.hook'
        		    #'40-update-ca-trust.hook'
        		    '80-atd.hook'
        		    '80-cronie.hook'
        		    '90-packagekit-refresh.hook'
        		    '90-update-appstream-cache.hook'
        		    'fontconfig.hook'
        		    'gdk-pixbuf-query-loaders.hook'
        		    'gtk-update-icon-cache.hook'
        		    'glib-compile-schemas.hook'
        		    'rebuild-detector.hook'
        		    'update-vlc-plugin-cache.hook'
        		    'update-desktop-database.hook'
        		    #'xorg-mkfontscale.hook'
        		    )
    	    for SELECT_HOOK in "${DISABLE_HOOKS[@]}"; do
        	sudo ln -fs /dev/null "${CONTAINER_ROOT}/etc/pacman.d/hooks/${SELECT_HOOK}"
    	    done
	    #sudo rm -f ${CONTAINER_ROOT}/usr/share/libalpm/hooks/90-packagekit-refresh.hook
	}
	# sudo ubcontainer --showlayers --mlist ${CONTAINER_MODULE}
	[[ ${_PATH_CHANGES_HDD} != "" ]] && ARG_CHANGES="--changes ${_PATH_CHANGES_HDD}/changes-${CONTAINER_NAME}" && CONTAINER_CHANGES="${_PATH_CHANGES_HDD}/changes-${CONTAINER_NAME}"
	[[ -z ${_DISTR_REPO_VER} || $(grep -E "VERSION_ID=" /usr/lib/os-release | cut -d= -f2) == ${_DISTR_REPO_VER} ]] && ARG_PREPARE_CONTAINER="--prepare"
	sudo ubcontainer --build "${ARG_PREPARE_CONTAINER}" --name "${CONTAINER_NAME}" --type chroot --flist "${srcdir}/${_MODULES_SRC}" "${ARG_CHANGES}"
	[[ -z ${ARG_PREPARE_CONTAINER} ]] && _prepare_container
	_prepare_container2
    }
    prepare_container3(){
	#Определиться при каких условиях отключать перезапись пользователей, групп и временных каталогов
#    	sudo find /run/sysusers.d/ /run/tmpfiles.d/ -type l -delete
#    	sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c 'pacman-key --init; pacman-key --populate $(ls /usr/share/pacman/keyrings/*.gpg | sed "s%.*/%%;s%\.[^.]*$%%")'
	true
    }
    remove_before_install_pkg(){
    # Удаляем пакеты из списка ${_PACKAGES_SRC} с меткой в префиксе имени
	if [[ -n ${REMOVE_BEFORE_INSTALL_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} pacman -Rcs --noconfirm ${REMOVE_BEFORE_INSTALL_PKG//$'\n'/ }"
	    sudo arch-chroot ${CONTAINER_ROOT} pacman -Rcs --noconfirm ${REMOVE_BEFORE_INSTALL_PKG}
	fi
    }
    install_pkg(){
    # Устанавливаем пакеты из списка ${_PACKAGES_SRC}, игнорируя строки с префиксами
	if [[ -n ${INSTALL_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c 'pacinstall --dbsync --install --yolo ${INSTALL_PKG//$'\n'/ }'"
	    sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c "pacinstall --dbsync --install --yolo ${INSTALL_PKG//$'\n'/ }"
#	    sudo pacstrap ${CONTAINER_ROOT} ${INSTALL_PKG}
	fi
    }
    install_nodeps_pkg(){
    # Устанавливаем пакеты из списка ${_PACKAGES_SRC}, игнорируя строки с префиксами. Игнорируя все проверки и зависимости
	if [[ -n ${INSTALL_NODEPS_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c 'pacinstall --dbsync --install --no-deps --yolo ${INSTALL_NODEPS_PKG//$'\n'/ }'"
	    sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c "pacinstall --dbsync --install --no-deps --yolo ${INSTALL_NODEPS_PKG//$'\n'/ }"
	fi
    }

    install_overwrite_pkg(){
    # Устанавливаем пакеты из списка ${_PACKAGES_SRC} с меткой в префиксе имени, перезаписав имеющиеся файлы
	if [[ -n ${INSTALL_OVERWRITE_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c 'echo yes | pacman -S --overwrite '*' ${INSTALL_OVERWRITE_PKG//$'\n'/ }'"
	    sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c "echo yes | pacman -S --overwrite '*' ${INSTALL_OVERWRITE_PKG//$'\n'/ }"
	fi
    }
    install_self_pkg(){
    # Устанавливаем в модуль пакет описания модуля
	_PKGBUILD_UBM=$(cat <<EOF
pkgname=${pkgname}
pkgver=${pkgver}
pkgrel=${pkgrel}
pkgdesc='${pkgdesc}'
arch=(${arch[@]})
url='${url}'
license=(${license[@]})
groups=(${groups[@]})
depends=(${depends[@]})
install='${install}'
source=("${_NAME_UBM}")

package() {
    install -dm 600 -o root -g root "\${pkgdir}${_PATH_UBM}"
    install -Dm 400 -o root -g root "\${srcdir}/${_NAME_UBM}" "\${pkgdir}${_PATH_UBM}/"
}
EOF
)
	_build_self_pkg(){
	    echo "${_PKGBUILD_UBM}" > PKGBUILD
	    [[ -f "${srcdir}/${install}" ]] && cp -af "${srcdir}/${install}" .
	    sudo rm -f ${_NAME_UBM}
	    touch ${_NAME_UBM}
	    updpkgsums; PKGDEST="" makepkg -cCrdf
	    _SELF_PKGNAME=$(makepkg --packagelist)
	    sudo cp -af ${_SELF_PKGNAME##*/} ${CONTAINER_ROOT}/root/
	    _SELF_PKGNAME="/root/${_SELF_PKGNAME##*/}"
	}
	_build_self_pkg
	echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} pacman -Udd --dbonly --noconfirm ${_SELF_PKGNAME}"
	sudo arch-chroot ${CONTAINER_ROOT} pacman -Udd --dbonly --noconfirm ${_SELF_PKGNAME}
	sudo rm -f ${CONTAINER_ROOT}/${_SELF_PKGNAME}
    }
    manual_install_pkg(){
    # Устанавливаем пакеты найденные в текущей папке по имени *.pkg.tar.*
	local MANUAL_INSTALL_PKG=$(cd ${srcdir}; ls -1 *.pkg.tar.* 2>/dev/null)
	if [[ -n ${MANUAL_INSTALL_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} pacman -U --noconfirm ${MANUAL_INSTALL_PKG//$'\n'/ }"
	    sudo cp -afL ${srcdir}/*.pkg.tar.* -t ${CONTAINER_ROOT}/root/
	    sudo arch-chroot ${CONTAINER_ROOT} /usr/bin/bash -c "pacman -U --noconfirm /root/*.pkg.tar.*"
	    sudo rm -f ${CONTAINER_ROOT}/root/*.pkg.tar.*
	fi
    }
    manual_execute(){
    # Выполнение команд пользователя в контейнере
        #echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} /bin/bash"
        #sudo arch-chroot ${CONTAINER_ROOT} /bin/bash
        true
    }
    remove_after_install_pkg(){
    # Удаляем пакеты из списка ${_PACKAGES_SRC} с меткой в префиксе имени
	if [[ -n ${REMOVE_AFTER_INSTALL_PKG} ]]; then
	    echo; msg "EXECUTE: sudo arch-chroot ${CONTAINER_ROOT} pacman -Rddcs --noconfirm ${REMOVE_AFTER_INSTALL_PKG//$'\n'/ }"
	    sudo arch-chroot ${CONTAINER_ROOT} pacman -Rddcs --noconfirm ${REMOVE_AFTER_INSTALL_PKG//$'\n'/ }
	fi
    }
    trim_container(){
    # Trim path
	local PATH_TRIM="$1"
	[[ ${PATH_TRIM} != "" && ${PATH_TRIM} != "/"  ]] || return 0
	echo
	# Удалить отключённый хуки pacman
	sudo find ${PATH_TRIM}/etc/pacman.d/hooks/ -lname '/dev/null' -delete 2>/dev/null || true
#	sudo rm -rdf ${PATH_TRIM}/usr/share/libalpm
	# Удалить каталоги
	REMOVE_DIR=(
		    '/mnt'
		    '/media'
		    '/usr/lib/locale'
		    '/var/lib/ubcontainer'
		    '/var/lib/pacman/sync'
		    '/var/cache/fontconfig'
		    '/var/cache/ldconfig'
		    '/var/cache/pacman/pkg'
		    '/var/cache'
		    '/etc/pacman.d/gnupg'
		    # Спорная чистка проверить
		    '/var/lib/rpm'
		    )
	for SELECT_REMOVE_DIR in "${REMOVE_DIR[@]}"; do
	    [[ -d ${PATH_TRIM}${SELECT_REMOVE_DIR} ]] || continue
	    msg2 "REMOVE DIR: ${SELECT_REMOVE_DIR}"
	    sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} | sed -e "s/[^─][^\/]*\//   │/g" -e "s/│\([^ ]\)/├── \1/"
	    sudo rm -rdf ${PATH_TRIM}${SELECT_REMOVE_DIR}
	done
	REMOVE_FILE=(
		    '/etc/sudoers.d/allnopasswd'
		    '/etc/locale.conf'
		    '/etc/locale.gen'
		    '/etc/os-release'
		    '/etc/lsb-release'
		    '/etc/ublinux-release'
		    '/etc/machine-id'
		    '/etc/ld.so.cache'
		    '/etc/hostname'
		    '/usr/lib/os-release'
		    '/usr/lib/udev/hwdb.bin'
		    '/usr/share/mime/mime.cache'
		    '/usr/share/glib-2.0/schemas/gschemas.compiled'
		    )
	for SELECT_REMOVE_FILE in "${REMOVE_FILE[@]}"; do
	    [[ -f ${PATH_TRIM}${SELECT_REMOVE_FILE} ]] || continue
	    msg2 "REMOVE FILE: ${SELECT_REMOVE_FILE}"
	    sudo rm -f ${PATH_TRIM}${SELECT_REMOVE_FILE}
	done
	# Удалить каталоги если они пустые
	REMOVE_DIR=(
		    '/etc/pacman.d/'
		    )
	for SELECT_REMOVE_DIR in "${REMOVE_DIR[@]}"; do
	    [[ -d ${PATH_TRIM}${SELECT_REMOVE_DIR} ]] || continue
	    [[ -n $(sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} ! -type d) ]] && continue
	    msg2 "REMOVE EMPTY DIR: ${SELECT_REMOVE_DIR}"
	    sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} | sed -e "s/[^─][^\/]*\//   │/g" -e "s/│\([^ ]\)/├── \1/"
	    sudo rm -rdf ${PATH_TRIM}${SELECT_REMOVE_DIR}
	done
    }
    trim_container_modules(){
    # Trim path modules
	local PATH_TRIM=$1
	sudo rm -rdfv ${PATH_TRIM}/usr/lib/modules/*/modules.*
    }
    trim_container_log(){
    # Trim path log
	local PATH_TRIM=$1
	REMOVE_DIR=(
		    '/var/log'
		    )
	for SELECT_REMOVE_DIR in "${REMOVE_DIR[@]}"; do
	    [[ -d ${PATH_TRIM}${SELECT_REMOVE_DIR} ]] || continue
	    msg2 "REMOVE DIR: ${SELECT_REMOVE_DIR}"
	    sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} | sed -e "s/[^─][^\/]*\//   │/g" -e "s/│\([^ ]\)/├── \1/"
	    sudo rm -rdf ${PATH_TRIM}${SELECT_REMOVE_DIR}
	done
    }
    trim_container_passwd(){
    # Trim passwd shadow group gshadow
	local PATH_TRIM=$1
	[[ ${PATH_TRIM} != "" && ${PATH_TRIM} != "/"  ]] || return 0
	[[ -f ${PATH_TRIM}/etc/passwd ]] && msg "Show /etc/passwd :" && cat ${PATH_TRIM}/etc/passwd
	[[ -f ${PATH_TRIM}/etc/group ]] && msg "Show /etc/group :" && cat ${PATH_TRIM}/etc/group
	if [[ -f ${PATH_TRIM}/etc/passwd || -f ${PATH_TRIM}/etc/group ]]; then
	    echo; msg "INFO: Проверьте отсутствие пользователей и групп с UID и GID в диапазоне 900-999. Если присутствуют, то поченить."; echo
	fi
	REMOVE_FILE=(
		    '/etc/passwd'
		    '/etc/passwd-'
		    '/etc/shadow'
		    '/etc/shadow-'
		    '/etc/group'
		    '/etc/group-'
		    '/etc/gshadow'
		    '/etc/gshadow-'
		    )
	for SELECT_REMOVE_FILE in "${REMOVE_FILE[@]}"; do
	    [[ -f ${PATH_TRIM}${SELECT_REMOVE_FILE} ]] || continue
	    msg2 "REMOVE FILE: ${SELECT_REMOVE_FILE}"
	    sudo rm -f ${PATH_TRIM}${SELECT_REMOVE_FILE}
	done
	#sudo rm -f ${PATH_TRIM}/etc/{passwd,passwd-,shadow,shadow-,group,group-,gshadow,gshadow-}
    }
    trim_container_pacman(){
    # Trim pacman
	local PATH_TRIM=$1
	[[ ${PATH_TRIM} != "" && ${PATH_TRIM} != "/"  ]] || return 0
	REMOVE_FILE=(
		    '/etc/pacman.d/mirrorlist'
		    '/etc/pacman.conf'
		    '/etc/makepkg.conf'
		    )
	for SELECT_REMOVE_FILE in "${REMOVE_FILE[@]}"; do
	    [[ -f ${PATH_TRIM}${SELECT_REMOVE_FILE} ]] || continue
	    msg2 "REMOVE FILE: ${SELECT_REMOVE_FILE}"
	    sudo rm -f ${PATH_TRIM}${SELECT_REMOVE_FILE}
	done
    }
    trim_container_manual(){
    # Trim manual. В качестве аргументов каталоги и файлы для удаления
	local PATH_TRIM="$1"
	shift
#	sudo find ${PATH_TRIM}/ -type d -empty -delete 2>/dev/null || true
	[[ -n $@ ]] && ARG_REMOVE="$@" \
	|| ARG_REMOVE=(
		    '/boot'
		    '/root'
		    )
	for SELECT_REMOVE_ARG in "${ARG_REMOVE[@]}"; do
		msg2 "REMOVE: ${SELECT_REMOVE_ARG}"
	    if [[ -d ${PATH_TRIM}${SELECT_REMOVE_ARG} ]]; then
		sudo find ${PATH_TRIM}${SELECT_REMOVE_ARG} | sed -e "s/[^─][^\/]*\//   │/g" -e "s/│\([^ ]\)/├── \1/"
		sudo rm -rdf ${PATH_TRIM}${SELECT_REMOVE_ARG}
	    elif [[ -f ${PATH_TRIM}${SELECT_REMOVE_ARG} ]]; then
		sudo rm -f ${PATH_TRIM}${SELECT_REMOVE_ARG}
	    fi
	done
    }
    save_changes_module(){
    # Save module with changes
	[[ -n ${_COMPRESSION} ]] && ARG_COMPRESSION="--comp ${_COMPRESSION}" && ARG_COMPRESSION_MKSQUASHFS="-comp ${_COMPRESSION}"
	[[ -n ${_BLOCKSIZE} ]] && ARG_BLOCKSIZE="--blocksize ${_BLOCKSIZE}" && ARG_BLOCKSIZE_MKSQUASHFS="-b ${_BLOCKSIZE}"
	echo; msg "EXECUTE: sudo ubcontainer --destroy --name ${CONTAINER_NAME} ${ARG_COMPRESSION} ${ARG_BLOCKSIZE} ${_ARG_WH} --save ${_NAME_UBM}"
	sudo ubcontainer --destroy --name ${CONTAINER_NAME}  ${ARG_COMPRESSION} ${ARG_BLOCKSIZE} ${_ARG_WH} --save ${_NAME_UBM} || msg "ERROR: module ${_NAME_UBM} not build"
	#sudo mksquashfs "${CONTAINER_CHANGES}" "${_NAME_UBM}" -noappend ${ARG_COMPRESSION_MKSQUASHFS} ${ARG_BLOCKSIZE_MKSQUASHFS} || msg "ERROR: module ${_NAME_UBM} not build"
	sudo rm -rdf ${CONTAINER_CHANGES}
	sync; sync; sync; echo 3 | sudo tee /proc/sys/vm/drop_caches &>/dev/null
    }

    build_root_container(){
        [[ -n ${_DISTR_REPO_VER} ]] || _DISTR_REPO_VER=$(grep -E "VERSION_ID=" /usr/lib/os-release | cut -d= -f2)
	sudo mkdir -p "${CONTAINER_ROOT}"
    }
    prepare_root_pacman(){
        cp -fa /etc/pacman.conf .
        awk -i inplace -v b=2 '/^\[.*\]$/{f=1; c++} !(f && c>=b); /^\s*$/{f=0}' ./pacman.conf
        cat <<EOF >> ./pacman.conf
[core]
Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch

[extra]
Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch

[multilib]
Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch

[community]
Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch

[modules]
Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch
EOF
        #sudo sed "s/^SigLevel.*/SigLevel = Never/g" -i ./pacman.conf
        #sudo sed -i "s|^Include.*|Server=https://repo.ublinux.ru/${_DISTR_REPO_VER}/\$repo/\$arch|g" ./pacman.conf
    }
    pacstrap_root_pkg(){
    # Устанавливаем пакеты из списка ${_PACKAGES_SRC}, игнорируя строки с префиксами
        if [[ -n ${INSTALL_PKG} ]]; then
	    local PACMAN_PKG="pacman shadow ublinux-sysusers ublinux-tmpfiles ublinux-keyring"
            echo; msg "EXECUTE: sudo pacstrap -GMC pacman.conf ${CONTAINER_ROOT} ${PACMAN_PKG//$'\n'/ }"
            sudo pacstrap -GMC ./pacman.conf ${CONTAINER_ROOT} ${PACMAN_PKG}
	    sudo mount --bind ${CONTAINER_ROOT} ${CONTAINER_ROOT}
	    sudo arch-chroot ${CONTAINER_ROOT} bash -c "pacman-key --init; pacman-key --populate ublinux"
        fi
    }
    trim_root_container(){
    # Trim path
	local PATH_TRIM="$1"
	[[ ${PATH_TRIM} != "" && ${PATH_TRIM} != "/"  ]] || return 0
	REMOVE_DIR=(
    		    '/etc/pacman.d/gnupg'
		    '/mnt'
		    '/media'
#		    '/usr/lib/locale'
		    '/var/lib/ubcontainer'
		    '/var/lib/pacman/sync'
		    '/var/cache/fontconfig'
		    '/var/cache/ldconfig'
		    '/var/cache/pacman/pkg'
		    '/var/cache'
#		    '/var/lib/rpm'
    		    '/var/log'
		    )
	for SELECT_REMOVE_DIR in "${REMOVE_DIR[@]}"; do
	    [[ -d ${PATH_TRIM}${SELECT_REMOVE_DIR} ]] || continue
	    msg2 "REMOVE FILE: ${SELECT_REMOVE_DIR}"
	    sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} | sed -e "s/[^─][^\/]*\//   │/g" -e "s/│\([^ ]\)/├── \1/"
	    sudo find ${PATH_TRIM}${SELECT_REMOVE_DIR} -type f -delete 2>/dev/null || true
	    #sudo rm -rdf ${PATH_TRIM}${SELECT_REMOVE_DIR}/*
	done
	REMOVE_FILE=(
#		    '/etc/locale.conf'
#		    '/etc/locale.gen'
		    '/etc/ld.so.cache'
		    '/usr/lib/udev/hwdb.bin'
		    '/usr/share/mime/mime.cache'
		    '/usr/share/glib-2.0/schemas/gschemas.compiled'
		    )
	for SELECT_REMOVE_FILE in "${REMOVE_FILE[@]}"; do
	    [[ -f ${PATH_TRIM}${SELECT_REMOVE_FILE} ]] || continue
	    msg2 "REMOVE FILE: ${SELECT_REMOVE_FILE}"
	    sudo rm -f ${PATH_TRIM}${SELECT_REMOVE_FILE}
	done
	sudo rm -rdf "${PATH_TRIM}/root/.parallel/tmp"
    }
    save_root_changes_module(){
    # Save module with changes
        # Освобождаем mount --bind
	sudo umount ${CONTAINER_ROOT}
        [[ -n ${_COMPRESSION} ]] && ARG_COMPRESSION="--comp ${_COMPRESSION}" && ARG_COMPRESSION_MKSQUASHFS="-comp ${_COMPRESSION}"
	[[ -n ${_BLOCKSIZE} ]] && ARG_BLOCKSIZE="--blocksize ${_BLOCKSIZE}" && ARG_BLOCKSIZE_MKSQUASHFS="-b ${_BLOCKSIZE}"
	echo; msg "EXECUTE: sudo mksquashfs ${CONTAINER_CHANGES} ${_NAME_UBM} ${ARG_COMPRESSION} ${ARG_BLOCKSIZE} -noappend"
	#sudo ubcontainer --destroy --name ${CONTAINER_NAME}  ${ARG_COMPRESSION} ${ARG_BLOCKSIZE} ${_ARG_WH} --save ${_NAME_UBM} || echo "ERROR: module ${_NAME_UBM} not build"
	sudo mksquashfs "${CONTAINER_CHANGES}" "${_NAME_UBM}" -noappend ${ARG_COMPRESSION_MKSQUASHFS} ${ARG_BLOCKSIZE_MKSQUASHFS} || msg "ERROR: module ${_NAME_UBM} not build"
	sudo rm -rdf ${CONTAINER_CHANGES}
	sync; sync; sync; echo 3 | sudo tee /proc/sys/vm/drop_caches &>/dev/null
    }
    create_list_pkg(){
	# Пакеты на удаление из списка ${_PACKAGES_SRC} с меткой в префиксе имени '*'
	REMOVE_BEFORE_INSTALL_PKG=$(sed "s/^\s*//g; /^$/d" ${srcdir}/${_PACKAGES_SRC} | grep -E "^\*[0-9a-z@._+-]" | sed "s/^\**//")
	# Пакеты на установку из списка ${_PACKAGES_SRC}, игнорируя строки с префиксами '#' '*' '**' '%' '%%'
	INSTALL_PKG=$(sed "s/^\s*//g; /^$/d" ${srcdir}/${_PACKAGES_SRC} | grep -Ev "^#|^\*|^%")
	# Пакеты на установку из списка ${_PACKAGES_SRC} с меткой в префиксе имени '%', пропускать все проверки и зависимости
	INSTALL_NODEPS_PKG=$(sed "s/^\s*//g; /^$/d" ${srcdir}/${_PACKAGES_SRC} | grep -E "^%[0-9a-z@._+-]" | sed "s/^%*//")
	# Пакеты на установку из списка ${_PACKAGES_SRC} с меткой в префиксе имени '%%', перезаписав имеющиеся файлы
	INSTALL_OVERWRITE_PKG=$(sed "s/^\s*//g; /^$/d" ${srcdir}/${_PACKAGES_SRC} | grep -E "^%%[0-9a-z@._+-]" | sed "s/^%*//")
	# Пакеты на удаление из списка ${_PACKAGES_SRC} с меткой в префиксе имени '**'
	#REMOVE_AFTER_INSTALL_PKG=$(sed "s/\s//g" ${srcdir}/${_PACKAGES_SRC} | grep "^\*\*[0-9a-z@._+-]" | sed 's/^\**//g')
	REMOVE_AFTER_INSTALL_PKG=$(sed "s/^\s*//g; /^$/d" ${srcdir}/${_PACKAGES_SRC} | grep -E "^\*\*[0-9a-z@._+-]" | sed "s/^\**//")
    }
    
    build_module(){
	CONTAINER_NAME="${pkgname}-${RANDOM:0:4}"
	#CONTAINER_NAME="${pkgname}-1111"
	CONTAINER_ROOT="/memory/aufs-${CONTAINER_NAME}"
	CONTAINER_CHANGES="/memory/changes-${CONTAINER_NAME}"
	create_list_pkg
	
	build_container
	prepare_container3
	remove_before_install_pkg
	install_pkg
	install_nodeps_pkg
	install_overwrite_pkg
	install_self_pkg
	manual_install_pkg
	manual_execute
	remove_after_install_pkg
	trim_container_modules "${CONTAINER_CHANGES}"
	trim_container_log "${CONTAINER_CHANGES}"
	trim_container_passwd "${CONTAINER_CHANGES}"
	trim_container_pacman "${CONTAINER_CHANGES}"
	trim_container "${CONTAINER_CHANGES}"
	trim_container_manual "${CONTAINER_CHANGES}"
	save_changes_module
    }
    
    build_root_module(){
        CONTAINER_NAME="${pkgname}-${RANDOM:0:4}"
        #CONTAINER_NAME="${pkgname}-1513"
        [[ ${_PATH_CHANGES_HDD} != "" ]] && CONTAINER_ROOT="${_PATH_CHANGES_HDD}/changes-${CONTAINER_NAME}" || CONTAINER_ROOT="/tmp/changes-${CONTAINER_NAME}"
        CONTAINER_CHANGES=${CONTAINER_ROOT}
	create_list_pkg

        build_root_container
        prepare_root_pacman
        pacstrap_root_pkg
	remove_before_install_pkg
	install_pkg
	install_nodeps_pkg
	install_overwrite_pkg
        install_self_pkg
	manual_install_pkg
	manual_execute
	remove_after_install_pkg
        trim_root_container "${CONTAINER_CHANGES}"
        save_root_changes_module
    }

