@ -0,0 +1,2 @@ |
|||
#/usr/bin/env bash |
|||
complete -W "build_modules repack_system" minios-autoinstall |
@ -0,0 +1,2 @@ |
|||
#/usr/bin/env bash |
|||
complete -W "build_modules repack_system" minios-install |
@ -1,7 +0,0 @@ |
|||
127.0.0.1 localhost |
|||
127.0.1.1 minios |
|||
|
|||
# The following lines are desirable for IPv6 capable hosts |
|||
::1 localhost ip6-localhost ip6-loopback |
|||
ff02::1 ip6-allnodes |
|||
ff02::2 ip6-allrouters |
@ -1,28 +0,0 @@ |
|||
|
|||
|
|||
\l |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
Thank you for using MiniOS. |
|||
Based on Debian GNU/Linux. |
|||
Powered by [1;32mSlax[0;29m. |
|||
|
|||
[1;1m:::: :::: ::::::::::: :::: ::: ::::::::::: :::::::: :::::::: [0;29m |
|||
[1;1m+:+:+: :+:+:+ :+: :+:+: :+: :+: :+: :+: :+: :+: [0;29m |
|||
[1;1m+:+ +:+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ [0;29m |
|||
[1;1m+#+ +:+ +#+ +#+ +#+ +:+ +#+ +#+ +#+ +:+ +#++:++#++ [0;29m |
|||
[1;1m+#+ +#+ +#+ +#+ +#+#+# +#+ +#+ +#+ +#+ [0;29m |
|||
[1;1m#+# #+# #+# #+# #+#+# #+# #+# #+# #+# #+# [0;29m |
|||
[1;1m### ### ########### ### #### ########### ######## ######## [0;29m |
|||
|
|||
Root login name: [1;33mroot[0;29m |
|||
Password: [1;33mtoor[0;29m |
|||
User login name: [1;33mlive[0;29m |
|||
Password: [1;33mevil[0;29m |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,74 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
PARENT_DIR="$(dirname "$SCRIPT_DIR")" |
|||
CURRENT_DIR="$(pwd)" |
|||
ISO_DIR=$CURRENT_DIR/iso |
|||
TMP_DIR="/tmp/" |
|||
|
|||
if [ -f $SCRIPT_DIR/minioslib ]; then |
|||
. $SCRIPT_DIR/minioslib || exit 1 |
|||
else |
|||
. /usr/lib/minioslib || exit 1 |
|||
fi |
|||
if [ -f $SCRIPT_DIR/config ]; then |
|||
. $SCRIPT_DIR/config || exit 1 |
|||
elif [ -f /etc/minios/config ]; then |
|||
. /etc/minios/config || exit 1 |
|||
else |
|||
. /run/initramfs/lib/config || exit 1 |
|||
fi |
|||
if [ -f $CURRENT_DIR/config ]; then |
|||
. $CURRENT_DIR/config |
|||
fi |
|||
|
|||
# don't change! use ./autoinstall instead |
|||
UNATTENDED="1" |
|||
|
|||
CMD=(build_modules repack_system) |
|||
|
|||
# ============= main ================ |
|||
|
|||
BUILD_DIR="" |
|||
|
|||
common_variables |
|||
|
|||
console_colours |
|||
|
|||
allow_root_only |
|||
|
|||
create_completion |
|||
|
|||
# check number of args |
|||
if [[ $# == 0 || $# > 3 ]]; then help; fi |
|||
|
|||
# loop through args |
|||
dash_flag=false |
|||
start_index=0 |
|||
end_index=${#CMD[*]} |
|||
for ii in "$@"; do |
|||
if [[ $ii == "-" ]]; then |
|||
dash_flag=true |
|||
continue |
|||
fi |
|||
find_index $ii |
|||
if [[ $dash_flag == false ]]; then |
|||
start_index=$index |
|||
else |
|||
end_index=$(($index + 1)) |
|||
fi |
|||
done |
|||
if [[ $dash_flag == false ]]; then |
|||
end_index=$(($start_index + 1)) |
|||
fi |
|||
|
|||
#loop through the commands |
|||
for ((ii = $start_index; ii < $end_index; ii++)); do |
|||
${CMD[ii]} |
|||
done |
|||
|
|||
echo -e "${BOLD}${LIGHTYELLOW}$0${ENDCOLOUR} - ${LIGHTGREEN}Command completed successfully!${ENDCOLOUR}" |
@ -0,0 +1,74 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
PARENT_DIR="$(dirname "$SCRIPT_DIR")" |
|||
CURRENT_DIR="$(pwd)" |
|||
ISO_DIR=$CURRENT_DIR/iso |
|||
TMP_DIR="/tmp/" |
|||
|
|||
if [ -f $SCRIPT_DIR/minioslib ]; then |
|||
. $SCRIPT_DIR/minioslib || exit 1 |
|||
else |
|||
. /usr/lib/minioslib || exit 1 |
|||
fi |
|||
if [ -f $SCRIPT_DIR/config ]; then |
|||
. $SCRIPT_DIR/config || exit 1 |
|||
elif [ -f /etc/minios/config ]; then |
|||
. /etc/minios/config || exit 1 |
|||
else |
|||
. /run/initramfs/lib/config || exit 1 |
|||
fi |
|||
if [ -f $CURRENT_DIR/config ]; then |
|||
. $CURRENT_DIR/config |
|||
fi |
|||
|
|||
# don't change! use ./autoinstall instead |
|||
UNATTENDED="0" |
|||
|
|||
CMD=(build_modules repack_system) |
|||
|
|||
# ============= main ================ |
|||
|
|||
BUILD_DIR="" |
|||
|
|||
common_variables |
|||
|
|||
console_colours |
|||
|
|||
allow_root_only |
|||
|
|||
create_completion |
|||
|
|||
# check number of args |
|||
if [[ $# == 0 || $# > 3 ]]; then help; fi |
|||
|
|||
# loop through args |
|||
dash_flag=false |
|||
start_index=0 |
|||
end_index=${#CMD[*]} |
|||
for ii in "$@"; do |
|||
if [[ $ii == "-" ]]; then |
|||
dash_flag=true |
|||
continue |
|||
fi |
|||
find_index $ii |
|||
if [[ $dash_flag == false ]]; then |
|||
start_index=$index |
|||
else |
|||
end_index=$(($index + 1)) |
|||
fi |
|||
done |
|||
if [[ $dash_flag == false ]]; then |
|||
end_index=$(($start_index + 1)) |
|||
fi |
|||
|
|||
#loop through the commands |
|||
for ((ii = $start_index; ii < $end_index; ii++)); do |
|||
${CMD[ii]} |
|||
done |
|||
|
|||
echo -e "${BOLD}${LIGHTYELLOW}$0${ENDCOLOUR} - ${LIGHTGREEN}Command completed successfully!${ENDCOLOUR}" |
@ -0,0 +1,2 @@ |
|||
#!/bin/bash |
|||
minios-autoinstall build_modules |
@ -0,0 +1,2 @@ |
|||
#!/bin/bash |
|||
minios-autoinstall repack_system |
@ -0,0 +1,871 @@ |
|||
#!/bin/bash |
|||
|
|||
# Functions library :: for install scripts |
|||
# Author: crims0n. <http://minios.ru> |
|||
# |
|||
|
|||
# ================================================================= |
|||
# ================================================================= |
|||
# ========================= VARIABLES ============================= |
|||
# ================================================================= |
|||
# ================================================================= |
|||
|
|||
function common_variables() { |
|||
if [ $DISTRIBUTION_ARCH = "amd64" ]; then |
|||
KERNEL_ARCH="amd64" |
|||
#PACKAGE_VARIANT="standard" |
|||
elif [ $DISTRIBUTION_ARCH = "i386" ]; then |
|||
KERNEL_ARCH="686-pae" |
|||
#PACKAGE_VARIANT="minimal" |
|||
elif [ $DISTRIBUTION_ARCH = "arm64" ]; then |
|||
KERNEL_ARCH="arm64" |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# ================================================================= |
|||
# ===================== COMMON FUNCTIONS ========================== |
|||
# ================================================================= |
|||
# ================================================================= |
|||
|
|||
function current_process() { |
|||
echo -e "${LIGHTYELLOW}=====> running ${CYAN}${CMD[ii]}${ENDCOLOUR}${LIGHTYELLOW} ...${ENDCOLOUR}" |
|||
} |
|||
|
|||
# ================================================================= |
|||
# beautiful console |
|||
# красивая консоль |
|||
# ================================================================= |
|||
function console_colours() { |
|||
RED="\e[31m" |
|||
GREEN="\e[32m" |
|||
YELLOW="\e[33m" |
|||
BLUE="\e[34m" |
|||
MAGENTA="\e[35m" |
|||
CYAN="\e[36m" |
|||
LIGHTGRAY="\e[37m" |
|||
DARKGRAY="\e[90m" |
|||
LIGHTRED="\e[91m" |
|||
LIGHTGREEN="\e[92m" |
|||
LIGHTYELLOW="\e[93m" |
|||
LIGHTBLUE="\e[94m" |
|||
LIGHTMAGENTA="\e[95m" |
|||
LIGHTCYAN="\e[96m" |
|||
BOLD="\e[1m" |
|||
DIM="\e[2m" |
|||
UNDERLINED="\e[4m" |
|||
BLINK="\e[5m" |
|||
REVERSE="\e[7m" |
|||
HIDDEN="\e[8m" |
|||
ENDCOLOUR="\e[0m" |
|||
} |
|||
|
|||
# ================================================================= |
|||
# help functions |
|||
# функции помощи |
|||
# ================================================================= |
|||
function help() { |
|||
# if $1 is set, use $1 as headline message in help() |
|||
if [ -f /etc/default/locale ]; then |
|||
if grep -q 'LANG="ru_RU.UTF-8"' /etc/default/locale >>$OUTPUT; then |
|||
if [ -z ${1+x} ]; then |
|||
echo -e "${LIGHTYELLOW}Этот скрипт собирает модули для $SYSTEMNAME.${ENDCOLOUR}" |
|||
echo -e |
|||
else |
|||
echo -e $1 |
|||
echo |
|||
fi |
|||
echo -e "Поддерживаемые команды : ${CYAN}${CMD[*]}${ENDCOLOUR}" |
|||
echo -e |
|||
echo -e "Синтаксис: ${MAGENTA}$0${ENDCOLOUR} [start_cmd] [-] [end_cmd]" |
|||
if [ -L /usr/bin/$LIVEKITNAME-install ] && [ "$0" != "/usr/bin/$LIVEKITNAME-install" ]; then |
|||
echo -e "\t${CYAN}$LIVEKITNAME-install${ENDCOLOUR} [start_cmd] [-] [end_cmd]" |
|||
fi |
|||
echo -e "\tзапуск от start_cmd до end_cmd" |
|||
echo -e "\tесли start_cmd опущен, выполняются все команды, начиная с первой" |
|||
echo -e "\tесли end_cmd опущен, выполняются все команды до последней" |
|||
echo -e "\tвведите одну команду, чтобы запустить определенную команду" |
|||
echo -e "\tвведите '-' как единственный аргумент для запуска всех команд" |
|||
echo -e "\t" |
|||
echo -e "\tСкрипты установки должны находиться в папке с именем будущего модуля." |
|||
echo -e "\tНапример, чтобы собрать модуль с именем 06-vscode, скрипты сборки" |
|||
echo -e "\tдолжны находиться по следующему пути: ${LIGHTYELLOW}$CURRENT_DIR/modules/06-vscode${ENDCOLOUR}" |
|||
echo -e "\tПримеры:" |
|||
echo -e "\t${LIGHTYELLOW}$0 build_modules${ENDCOLOUR} сборка модулей" |
|||
echo -e "\t${LIGHTYELLOW}$0 repack_system${ENDCOLOUR} перепаковка системы с типом сжатия, указанным" |
|||
echo -e "\tв /etc/$LIVEKITNAME/config в переменной COMP_TYPE" |
|||
echo -e "\t${LIGHTYELLOW}$0 -${ENDCOLOUR} эта команда запустит обе функции поочерёдно" |
|||
exit 0 |
|||
else |
|||
if [ -z ${1+x} ]; then |
|||
echo -e "${LIGHTYELLOW}This script builds modules for $SYSTEMNAME.${ENDCOLOUR}" |
|||
echo -e |
|||
else |
|||
echo -e $1 |
|||
echo |
|||
fi |
|||
echo -e "Supported commands : ${CYAN}${CMD[*]}${ENDCOLOUR}" |
|||
echo -e |
|||
echo -e "Syntax: ${MAGENTA}$0${ENDCOLOUR} [start_cmd] [-] [end_cmd]" |
|||
if [ -L /usr/bin/$LIVEKITNAME-install ] && [ "$0" != "/usr/bin/$LIVEKITNAME-install" ]; then |
|||
echo -e "\t${CYAN}$LIVEKITNAME-install${ENDCOLOUR} [start_cmd] [-] [end_cmd]" |
|||
fi |
|||
echo -e "\trun from start_cmd to end_cmd" |
|||
echo -e "\tif start_cmd is omitted, start from first command" |
|||
echo -e "\tif end_cmd is omitted, end with last command" |
|||
echo -e "\tenter single cmd to run the specific command" |
|||
echo -e "\tenter '-' as only argument to run all commands" |
|||
echo -e "\t" |
|||
echo -e "\tThe installation scripts must be in the folder with the" |
|||
echo -e "\tname of the future module. For example, to build a module" |
|||
echo -e "\tnamed 06-vscode, build scripts should be in the following" |
|||
echo -e "\tpath: ${LIGHTYELLOW}$CURRENT_DIR/modules/06-vscode${ENDCOLOUR}" |
|||
echo -e "\tExamples:" |
|||
echo -e "\t${LIGHTYELLOW}$0 build_modules ${ENDCOLOUR} build modules" |
|||
echo -e "\t${LIGHTYELLOW}$0 repack_system ${ENDCOLOUR} repack the system with the" |
|||
echo -e "\tcompression type specified by /etc/$LIVEKITNAME/config in COMP_TYPE variable" |
|||
echo -e "\t${LIGHTYELLOW}$0 - ${ENDCOLOUR} this command will run both functions alternately" |
|||
exit 0 |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# parsing input commands |
|||
# разбор входных команд |
|||
# ================================================================= |
|||
function find_index() { |
|||
local ret |
|||
local i |
|||
for ((i = 0; i < ${#CMD[*]}; i++)); do |
|||
if [ "${CMD[i]}" == "$1" ]; then |
|||
index=$i |
|||
return |
|||
fi |
|||
done |
|||
help "Command not found : $1" |
|||
} |
|||
|
|||
# ================================================================= |
|||
# creating a symbolic link to the executable file for using |
|||
# autocompletion on the command line |
|||
# создание символической ссылки на исполняемый файл для |
|||
# использования автодополнения в командной строке |
|||
# ================================================================= |
|||
function create_livekitname_install_symlink() { |
|||
if [ -L /usr/bin/$LIVEKITNAME-install ]; then |
|||
if [ "$(readlink /usr/bin/$LIVEKITNAME-install)" != "$SCRIPT_DIR/install" ]; then |
|||
rm -f /usr/bin/$LIVEKITNAME-install |
|||
ln -s $SCRIPT_DIR/install /usr/bin/$LIVEKITNAME-install |
|||
if grep 'LANG="ru_RU.UTF-8"' /etc/default/locale >>$OUTPUT; then |
|||
echo -e "Символическая ссылка ${MAGENTA}/usr/bin/$LIVEKITNAME-install${ENDCOLOUR} была обновлена." |
|||
echo -e "Теперь она указывает на ${MAGENTA}$SCRIPT_DIR/install${ENDCOLOUR}." |
|||
else |
|||
echo -e "The ${MAGENTA}/usr/bin/$LIVEKITNAME-install${ENDCOLOUR} symbolic link has been updated." |
|||
echo -e "It now points to ${MAGENTA}$SCRIPT_DIR/install${ENDCOLOUR}." |
|||
fi |
|||
fi |
|||
if [ "$0" != "/usr/bin/$LIVEKITNAME-install" ]; then |
|||
if grep 'LANG="ru_RU.UTF-8"' /etc/default/locale >>$OUTPUT; then |
|||
echo -e "Вы можете использовать команду ${CYAN}$LIVEKITNAME-install${ENDCOLOUR} для запуска этой программы." |
|||
else |
|||
echo -e "You can use the ${CYAN}$LIVEKITNAME-install${ENDCOLOUR} command to run this program." |
|||
fi |
|||
fi |
|||
else |
|||
ln -s $SCRIPT_DIR/install /usr/bin/$LIVEKITNAME-install |
|||
if grep 'LANG="ru_RU.UTF-8"' /etc/default/locale >>$OUTPUT; then |
|||
echo -e "Символическая ссылка ${MAGENTA}/usr/bin/$LIVEKITNAME-install${ENDCOLOUR} была добавлена" |
|||
echo -e "для ${MAGENTA}$SCRIPT_DIR/install${ENDCOLOUR}." |
|||
|
|||
else |
|||
echo -e "The ${MAGENTA}/usr/bin/$LIVEKITNAME-install${ENDCOLOUR} symbolic link has been added" |
|||
echo -e "for ${MAGENTA}$SCRIPT_DIR/install${ENDCOLOUR}." |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# creating autocompletion on the command line |
|||
# создание автодополнения в командной строке |
|||
# ================================================================= |
|||
function create_completion() { |
|||
if [ -d /etc/bash_completion.d ]; then |
|||
if [ ! -f /etc/bash_completion.d/$LIVEKITNAME-install ] || ! grep "${CMD[*]}" /etc/bash_completion.d/$LIVEKITNAME-install >>$OUTPUT; then |
|||
cat <<EOF >/etc/bash_completion.d/$LIVEKITNAME-install |
|||
#/usr/bin/env bash |
|||
complete -W "${CMD[*]}" $LIVEKITNAME-install |
|||
EOF |
|||
fi |
|||
if [ "$0" != "/usr/bin/$LIVEKITNAME-install" ]; then |
|||
if grep 'LANG="ru_RU.UTF-8"' /etc/default/locale >>$OUTPUT; then |
|||
echo -e "Дополнение команд работает только при использовании команды ${CYAN}$LIVEKITNAME-install${ENDCOLOUR}." |
|||
echo -e |
|||
else |
|||
echo -e "Command completion only works when using the ${CYAN}$LIVEKITNAME-install${ENDCOLOUR} command." |
|||
echo -e |
|||
fi |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# only allow 'root' to run the script |
|||
# разрешаем запуск скрипта только пользователю 'root' |
|||
# ================================================================= |
|||
|
|||
function allow_root_only() { |
|||
if [ $(id -u) -ne 0 ]; then |
|||
echo -e "${BOLD}${RED}This script should be run as 'root'!${ENDCOLOUR}" |
|||
exit 1 |
|||
fi |
|||
|
|||
export HOME=/root |
|||
export LC_ALL=C |
|||
} |
|||
|
|||
# ================================================================= |
|||
# check that we are inside chroot |
|||
# проверяем, что мы внутри chroot |
|||
# ================================================================= |
|||
|
|||
function check_is_in_chroot() { |
|||
if [ $(stat -c %i /)="2" ]; then |
|||
echo -e "${BOLD}${RED}This script should be run inside chroot only!${ENDCOLOUR}" |
|||
exit 1 |
|||
fi |
|||
} |
|||
|
|||
# Unzip gzipped files (man pages), so LZMA can compress 2times better. |
|||
# First we fix symlinks, then uncompress files |
|||
# $1 = search directory |
|||
uncompress_files() { |
|||
local LINK LINE |
|||
|
|||
find "$1" -type l -name "*.gz" | while read LINE; do |
|||
LINK="$(readlink "$LINE" | sed -r 's/.gz$//')" |
|||
FILE="$(echo "$LINE" | sed -r 's/.gz$//')" |
|||
ln -sfn "$LINK" "$FILE" |
|||
rm -f "$LINE" |
|||
done |
|||
find "$1" -type f -name "*.gz" | xargs -r gunzip |
|||
} |
|||
|
|||
# remove broken links |
|||
# $1 = search directory |
|||
remove_broken_links() { |
|||
find "$1" -type l -exec test ! -e {} \; -print | xargs rm -vf |
|||
} |
|||
|
|||
function add_chroot_configuration_files() { |
|||
cat <<EOF >$1/$LIVEKITNAME.conf |
|||
OUTPUT=$OUTPUT |
|||
LOGPATH=$LOGPATH |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO |
|||
CREATE_BACKUP=$CREATE_BACKUP |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE |
|||
APT_CMD=$APT_CMD |
|||
APT_OPTIONS=$APT_OPTIONS |
|||
LIVE_TYPE=$LIVE_TYPE |
|||
DISTRIBUTION=$DISTRIBUTION |
|||
DISTRIBUTION_TYPE=$DISTRIBUTION_TYPE |
|||
PACKAGE_VARIANT=$PACKAGE_VARIANT |
|||
COMP_TYPE=$COMP_TYPE |
|||
KERNEL_ARCH=$KERNEL_ARCH |
|||
LIVEKITNAME=$LIVEKITNAME |
|||
SYSTEMNAME=$SYSTEMNAME |
|||
DISTRIBUTION_ARCH=$DISTRIBUTION_ARCH |
|||
EOF |
|||
|
|||
cat <<'EOF' >$1/functions |
|||
#!/bin/bash |
|||
|
|||
# ================================================================= |
|||
# beautiful console |
|||
# красивая консоль |
|||
# ================================================================= |
|||
function console_colours() { |
|||
RED="\e[31m" |
|||
GREEN="\e[32m" |
|||
YELLOW="\e[33m" |
|||
BLUE="\e[34m" |
|||
MAGENTA="\e[35m" |
|||
CYAN="\e[36m" |
|||
LIGHTGRAY="\e[37m" |
|||
DARKGRAY="\e[90m" |
|||
LIGHTRED="\e[91m" |
|||
LIGHTGREEN="\e[92m" |
|||
LIGHTYELLOW="\e[93m" |
|||
LIGHTBLUE="\e[94m" |
|||
LIGHTMAGENTA="\e[95m" |
|||
LIGHTCYAN="\e[96m" |
|||
BOLD="\e[1m" |
|||
DIM="\e[2m" |
|||
UNDERLINED="\e[4m" |
|||
BLINK="\e[5m" |
|||
REVERSE="\e[7m" |
|||
HIDDEN="\e[8m" |
|||
ENDCOLOUR="\e[0m" |
|||
} |
|||
|
|||
# ================================================================= |
|||
# reading configuration file |
|||
# чтение конфигурационного файла |
|||
# ================================================================= |
|||
|
|||
function read_config() { # read_config file.cfg var_name1 var_name2 |
|||
# ref: https://stackoverflow.com/a/20815951 |
|||
|
|||
shopt -s extglob # needed the "one of these"-match below |
|||
local configfile="${1?No configuration file given}" |
|||
local keylist="${@:2}" # positional parameters 2 and following |
|||
|
|||
if [[ ! -f "$configfile" ]]; then |
|||
echo >&2 "\"$configfile\" is not a file!" |
|||
exit 1 |
|||
fi |
|||
if [[ ! -r "$configfile" ]]; then |
|||
echo >&2 "\"$configfile\" is not readable!" |
|||
exit 1 |
|||
fi |
|||
|
|||
keylist="${keylist// /|}" # this will generate a regex 'one of these' |
|||
|
|||
# lhs : "left hand side" : Everything left of the '=' |
|||
# rhs : "right hand side": Everything right of the '=' |
|||
# |
|||
# "lhs" will hold the name of the key you want to read. |
|||
# The value of "rhs" will be assigned to that key. |
|||
while IFS='= ' read -r lhs rhs; do |
|||
# IF lhs in keylist |
|||
# AND rhs not empty |
|||
if [[ "$lhs" =~ ^($keylist)$ ]] && [[ -n $rhs ]]; then |
|||
rhs="${rhs%\"*}" # Del opening string quotes |
|||
rhs="${rhs#\"*}" # Del closing string quotes |
|||
rhs="${rhs%\'*}" # Del opening string quotes |
|||
rhs="${rhs#\'*}" # Del closing string quotes |
|||
eval $lhs=\"$rhs\" # The magic happens here |
|||
fi |
|||
# tr used as a safeguard against dos line endings |
|||
done <<<$(tr -d '\r' <$configfile) |
|||
|
|||
shopt -u extglob # Switching it back off after use |
|||
} |
|||
|
|||
# Unzip gzipped files (man pages), so LZMA can compress 2times better. |
|||
# First we fix symlinks, then uncompress files |
|||
# $1 = search directory |
|||
uncompress_files() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
local LINK LINE |
|||
|
|||
find "$1" -type l -name "*.gz" | while read LINE; do |
|||
LINK="$(readlink "$LINE" | sed -r 's/.gz$//')" |
|||
FILE="$(echo "$LINE" | sed -r 's/.gz$//')" |
|||
ln -sfn "$LINK" "$FILE" |
|||
rm -f "$LINE" |
|||
done |
|||
find "$1" -type f -name "*.gz" | xargs -r gunzip |
|||
} |
|||
|
|||
# remove broken links |
|||
# $1 = search directory |
|||
remove_broken_links() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
find "$1" -type l -exec test ! -e {} \; -print | xargs rm -vf |
|||
} |
|||
EOF |
|||
} |
|||
|
|||
function remove_chroot_configuration_files() { |
|||
rm -f $1/$LIVEKITNAME.conf |
|||
rm -f $1/functions |
|||
} |
|||
|
|||
function chroot_run() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
add_chroot_configuration_files $1 |
|||
chroot $1 /bin/bash <<EOF |
|||
. /functions |
|||
read_config /$LIVEKITNAME.conf OUTPUT LOGPATH BUILD_TEST_ISO CREATE_BACKUP DEBIAN_FRONTEND_TYPE APT_CMD APT_OPTIONS LIVE_TYPE DISTRIBUTION DISTRIBUTION_TYPE PACKAGE_VARIANT COMP_TYPE KERNEL_ARCH LIVEKITNAME SYSTEMNAME DISTRIBUTION_ARCH |
|||
export OUTPUT LOGPATH BUILD_TEST_ISO CREATE_BACKUP DEBIAN_FRONTEND_TYPE APT_CMD APT_OPTIONS LIVE_TYPE DISTRIBUTION DISTRIBUTION_TYPE PACKAGE_VARIANT COMP_TYPE KERNEL_ARCH LIVEKITNAME SYSTEMNAME DISTRIBUTION_ARCH |
|||
${@:2} |
|||
EOF |
|||
remove_chroot_configuration_files $1 |
|||
} |
|||
|
|||
# ================================================================= |
|||
# ================================================================= |
|||
# ======================= MODULES FUNCTIONS ======================= |
|||
# ================================================================= |
|||
# ================================================================= |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_check_mounted() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
if grep -qs "$MODULE_MERGED_DIR" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/dev" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/run" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/proc" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/sys" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/dev/pts" /proc/mounts || grep -qs "$MODULE_MERGED_DIR/tmp" /proc/mounts; then |
|||
echo -e "${BOLD}${LIGHTYELLOW}Chroot contains mounted filesystems.${ENDCOLOUR}" |
|||
if [ "$UNATTENDED" = "1" ]; then |
|||
module_chroot_umount_fs |
|||
else |
|||
read -r -p "$(echo -e ""Do you want to ${GREEN}unmount them${ENDCOLOUR}? [${BOLD}${GREEN}Y${ENDCOLOUR}/n])" response |
|||
response=${response,,} |
|||
if [[ "$response" =~ ^(no|n)$ ]]; then |
|||
exit 1 |
|||
else |
|||
module_chroot_umount_fs |
|||
fi |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_check_build_dir() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
if [ "$UNATTENDED" = "1" ]; then |
|||
#echo -e "${RED}!!!Unattended installation!!!${ENDCOLOUR}" |
|||
echo -e "The working directory is ${MAGENTA}$MODULE_UPPER_DIR${ENDCOLOUR}." |
|||
if [ "$(ls -A $MODULE_UPPER_DIR)" != "" ]; then |
|||
module_cleanup |
|||
module_check_mounted |
|||
fi |
|||
else |
|||
# ▼ должно быть только перенаправление ошибки! |
|||
if [ "$(ls -A $MODULE_UPPER_DIR)" != "" ]; then |
|||
echo -e "${MAGENTA}$MODULE_UPPER_DIR${ENDCOLOUR} is not empty." |
|||
module_cleanup |
|||
module_check_mounted |
|||
echo -e "The working directory is ${MAGENTA}$MODULE_MERGED_DIR${ENDCOLOUR}." |
|||
else |
|||
module_check_mounted |
|||
echo -e "The working directory is ${MAGENTA}$MODULE_MERGED_DIR${ENDCOLOUR}." |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_chroot_mount_fs() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
|
|||
local MODULES MODULE_LOWER_DIR |
|||
|
|||
module_check_mounted |
|||
|
|||
mkdir -p $MODULES_DIR |
|||
mount -t tmpfs none $MODULES_DIR |
|||
|
|||
MODULES_LIST="" |
|||
MODULES=(/run/initramfs/memory/bundles/*.$BEXT) |
|||
for ((i = ${#MODULES[@]} - 1; i >= 0; i--)); do |
|||
MODULE_LOWER_DIR=$(basename ${MODULES[$i]} .$BEXT) |
|||
mkdir -p $MODULES_DIR/lower/$MODULE_LOWER_DIR-lower |
|||
mount -o bind ${MODULES[$i]} $MODULES_DIR/lower/$MODULE_LOWER_DIR-lower |
|||
MODULES_LIST=$MODULES_LIST":""$MODULES_DIR/lower/$MODULE_LOWER_DIR-lower" |
|||
done |
|||
MODULES_LIST=${MODULES_LIST:1} |
|||
|
|||
mkdir -p $MODULE_UPPER_DIR $MODULE_WORK_DIR $MODULE_MERGED_DIR |
|||
|
|||
mount -t overlay overlay -o lowerdir=$MODULES_LIST,upperdir=$MODULE_UPPER_DIR,workdir=$MODULE_WORK_DIR $MODULE_MERGED_DIR |
|||
|
|||
if [ ! -d $MODULE_MERGED_DIR/dev ]; then |
|||
mkdir -p $MODULE_MERGED_DIR/dev |
|||
fi |
|||
if [ ! -d $MODULE_MERGED_DIR/run ]; then |
|||
mkdir -p $MODULE_MERGED_DIR/run |
|||
fi |
|||
if [ ! -d $MODULE_MERGED_DIR/proc ]; then |
|||
mkdir -p $MODULE_MERGED_DIR/proc |
|||
fi |
|||
if [ ! -d $MODULE_MERGED_DIR/sys ]; then |
|||
mkdir -p $MODULE_MERGED_DIR/sys |
|||
fi |
|||
if [ ! -d $MODULE_MERGED_DIR/tmp ]; then |
|||
mkdir -p $MODULE_MERGED_DIR/tmp |
|||
fi |
|||
|
|||
mount --bind /dev $MODULE_MERGED_DIR/dev |
|||
|
|||
echo "nameserver 8.8.8.8" >$MODULE_MERGED_DIR/etc/resolv.conf |
|||
|
|||
mount none -t proc $MODULE_MERGED_DIR/proc |
|||
mount none -t sysfs $MODULE_MERGED_DIR/sys |
|||
mount none -t devpts $MODULE_MERGED_DIR/dev/pts |
|||
mount none -t tmpfs $MODULE_MERGED_DIR/tmp |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_chroot_umount_fs() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
|
|||
local MODULES MODULE_LOWER_DIR |
|||
|
|||
set +e |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
umount $MODULE_MERGED_DIR/proc |
|||
umount $MODULE_MERGED_DIR/sys |
|||
umount $MODULE_MERGED_DIR/dev/pts |
|||
umount $MODULE_MERGED_DIR/tmp |
|||
umount $MODULE_MERGED_DIR/dev |
|||
|
|||
rm -f $MODULE_UPPER_DIR/etc/resolv.conf |
|||
|
|||
umount $MODULE_MERGED_DIR |
|||
|
|||
umount $MODULES_DIR/lower/* |
|||
|
|||
umount $MODULES_DIR |
|||
else |
|||
umount $MODULE_MERGED_DIR/proc >>$OUTPUT 2>&1 |
|||
umount $MODULE_MERGED_DIR/sys >>$OUTPUT 2>&1 |
|||
umount $MODULE_MERGED_DIR/dev/pts >>$OUTPUT 2>&1 |
|||
umount $MODULE_MERGED_DIR/tmp >>$OUTPUT 2>&1 |
|||
umount $MODULE_MERGED_DIR/dev >>$OUTPUT 2>&1 |
|||
|
|||
rm -f $MODULE_UPPER_DIR/etc/resolv.conf >>$OUTPUT 2>&1 |
|||
|
|||
umount $MODULE_MERGED_DIR >>$OUTPUT 2>&1 |
|||
|
|||
umount $MODULES_DIR/lower/* >>$OUTPUT 2>&1 |
|||
|
|||
umount $MODULES_DIR >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
set -e |
|||
|
|||
module_check_mounted |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_cleanup() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
if [ "$UNATTENDED" = "1" ]; then |
|||
module_check_mounted |
|||
rm -rf $MODULE_UPPER_DIR |
|||
if [ -d "$MODULE_UPPER_DIR" ]; then |
|||
module_cleanup |
|||
fi |
|||
else |
|||
read -r -p "$(echo -e ""Do you want to ${BOLD}${RED}completely remove content${ENDCOLOUR} of ${MAGENTA}$MODULE_UPPER_DIR${ENDCOLOUR}? [y/${BOLD}${GREEN}N${ENDCOLOUR}])" response |
|||
response=${response,,} |
|||
if [[ "$response" =~ ^(yes|y)$ ]]; then |
|||
module_check_mounted |
|||
rm -rf $MODULE_UPPER_DIR |
|||
if [ -d "$MODULE_UPPER_DIR" ]; then |
|||
module_cleanup |
|||
fi |
|||
else |
|||
echo -e "${MAGENTA}$MODULE_UPPER_DIR${ENDCOLOUR} should be empty to continue." |
|||
exit 1 |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_chroot_finish_up() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
|
|||
chroot $MODULE_MERGED_DIR /bin/bash -x <<EOF |
|||
truncate -s 0 /etc/machine-id |
|||
EOF |
|||
|
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot $MODULE_MERGED_DIR /bin/bash -x <<EOF |
|||
rm /sbin/initctl |
|||
dpkg-divert --rename --remove /sbin/initctl |
|||
EOF |
|||
else |
|||
chroot $MODULE_MERGED_DIR /bin/bash -x <<EOF |
|||
rm /sbin/initctl >>$OUTPUT 2>&1 |
|||
dpkg-divert --rename --remove /sbin/initctl >>$OUTPUT 2>&1 |
|||
EOF |
|||
fi |
|||
|
|||
if [ -d $MODULE_UPPER_DIR/home/live ]; then |
|||
chown 1000:1000 $MODULE_UPPER_DIR/home/live |
|||
chown -R 1000:1000 $MODULE_UPPER_DIR/home/live |
|||
fi |
|||
} |
|||
|
|||
function chroot_cleanup() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
|
|||
set +eu |
|||
rm -f $1/functions |
|||
rm -f $1/$LIVEKITNAME.conf |
|||
rm -f $1/preinstall |
|||
rm -f $1/install |
|||
rm -f $1/install2 |
|||
rm -f $1/cleanup |
|||
rm -f $1/$PACKAGE_VARIANT.list |
|||
rm -f $1/postinstall |
|||
rm -rf $1/rootcopy-install |
|||
rm -rf $1/rootcopy |
|||
rm -rf $1/patches |
|||
|
|||
rm -f $1/etc/fstab |
|||
rm -f $1/etc/mtab |
|||
rm -f $1/etc/apt/sources.list~ |
|||
rm -Rf $1/etc/systemd/system/timers.target.wants |
|||
rm -f $1/etc/systemd/system/multi-user.target.wants/ssh.service |
|||
rm -f $1/etc/systemd/system/multi-user.target.wants/dnsmasq.service |
|||
|
|||
rm -f $1/etc/ssh/ssh_host* |
|||
|
|||
rm -f $1/var/backups/* |
|||
rm -f $1/var/cache/ldconfig/* |
|||
rm -f $1/var/cache/debconf/* |
|||
rm -f $1/var/cache/fontconfig/* |
|||
rm -f $1/var/lib/apt/extended_states |
|||
rm -f $1/var/lib/systemd/random-seed |
|||
rm -f $1/var/lib/apt/lists/deb.* |
|||
rm -Rf $1/root/.local/share/mc |
|||
rm -Rf $1/root/.cache |
|||
rm -f $1/root/.wget-hsts |
|||
|
|||
rm -f $1/var/lib/dpkg/*-old |
|||
rm -f $1/var/log/* |
|||
rm -f $1/var/log/*/* |
|||
rm -f $1/var/log/*/*/* |
|||
rm -f $1/var/cache/apt/archives/*.deb |
|||
rm -f $1/var/cache/apt/*.bin |
|||
rm -f $1/var/cache/debconf/*-old |
|||
rm -f $1/var/lib/dhcp/dhclient.leases |
|||
rm -f $1/root/.bash_history |
|||
rm -f $1/root/.wget-hsts |
|||
rm -Rf $1/usr/share/doc/* |
|||
rm -Rf $1/usr/share/info/* |
|||
rm -f $1/usr/share/images/fluxbox/debian-squared.jpg |
|||
rm -Rf $1/usr/share/fluxbox/nls/??* |
|||
rm -Rf $1/usr/share/gnome/help |
|||
|
|||
rm -Rf $1/usr/share/locale/?? |
|||
rm -Rf $1/usr/share/locale/??_* |
|||
rm -Rf $1/usr/share/locale/??@* |
|||
rm -Rf $1/usr/share/locale/??? |
|||
rm -Rf $1/usr/share/i18n/locales/*_* |
|||
rm -Rf $1/usr/share/man/?? |
|||
rm -Rf $1/usr/share/man/*_* |
|||
|
|||
rm -Rf $1/usr/share/icons/elementaryXubuntu-dark |
|||
rm -Rf $1/usr/share/icons/gnome/256x256 |
|||
|
|||
rm $1/usr/share/applications/compton.desktop |
|||
rm $1/usr/share/applications/debian-uxterm.desktop |
|||
rm $1/usr/share/applications/debian-xterm.desktop |
|||
rm $1/usr/share/applications/htop.desktop |
|||
rm $1/usr/share/applications/mc.desktop |
|||
rm $1/usr/share/applications/mcedit.desktop |
|||
rm $1/usr/share/applications/pcmanfm-desktop-pref.desktop |
|||
rm $1/usr/share/applications/python2.7.desktop |
|||
rm $1/usr/share/applications/python3.7.desktop |
|||
rm $1/usr/share/applications/vim.desktop |
|||
|
|||
if [ -z $1 ]; then |
|||
uncompress_files $1/etc/alternatives |
|||
uncompress_files $1/usr/share/man |
|||
|
|||
remove_broken_links $1/etc/alternatives |
|||
remove_broken_links $1/usr/share/man |
|||
fi |
|||
|
|||
set -eu |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function module_build_cleanup() { |
|||
echo -e "=====> the ${CYAN}${FUNCNAME[0]}${ENDCOLOUR} function is executing ..." |
|||
|
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot_cleanup $MODULE_UPPER_DIR |
|||
else |
|||
chroot_cleanup $MODULE_UPPER_DIR >>$OUTPUT 2>&1 |
|||
fi |
|||
} |
|||
|
|||
# ================================================================= |
|||
# |
|||
# |
|||
# ================================================================= |
|||
function build_modules() { |
|||
current_process |
|||
|
|||
MODULES_DIR=$CURRENT_DIR/build |
|||
|
|||
if [ -d $CURRENT_DIR/modules ]; then |
|||
cd $CURRENT_DIR/modules |
|||
else |
|||
help |
|||
fi |
|||
|
|||
for MODULE in *; do |
|||
MODULE_UPPER_DIR="$MODULES_DIR/$MODULE-upper" |
|||
MODULE_WORK_DIR="$MODULES_DIR/$MODULE-work" |
|||
MODULE_MERGED_DIR="$MODULES_DIR/$MODULE-merged" |
|||
|
|||
module_check_build_dir |
|||
|
|||
module_chroot_mount_fs |
|||
|
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot_run $MODULE_MERGED_DIR $APT_CMD update |
|||
else |
|||
chroot_run $MODULE_MERGED_DIR $APT_CMD update >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
# run pre-install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall ]; then |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall $MODULE_MERGED_DIR/preinstall |
|||
chmod +x $MODULE_MERGED_DIR/preinstall |
|||
chroot_run $MODULE_MERGED_DIR /preinstall |
|||
else |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall $MODULE_MERGED_DIR/preinstall |
|||
chmod +x $MODULE_MERGED_DIR/preinstall |
|||
chroot_run $MODULE_MERGED_DIR /preinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
fi |
|||
|
|||
# copy files |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
if [ "$(ls -A $CURRENT_DIR/modules/$MODULE/rootcopy-install)" != "" ]; then |
|||
(cd $CURRENT_DIR/modules/$MODULE/rootcopy-install && cp --parents -afr * $MODULE_MERGED_DIR/) |
|||
fi |
|||
else |
|||
if [ "$(ls -A $CURRENT_DIR/modules/$MODULE/rootcopy-install)" != "" ] >>$OUTPUT 2>&1; then |
|||
(cd $CURRENT_DIR/modules/$MODULE/rootcopy-install && cp --parents -afr * $MODULE_MERGED_DIR/) |
|||
fi |
|||
fi |
|||
|
|||
# run install script |
|||
if [ -f $CURRENT_DIR/modules/$MODULE/install ]; then |
|||
cp $CURRENT_DIR/modules/$MODULE/install $MODULE_MERGED_DIR/install |
|||
chmod +x $MODULE_MERGED_DIR/install |
|||
if [ -f $CURRENT_DIR/modules/$MODULE/cleanup ]; then |
|||
cp $CURRENT_DIR/modules/$MODULE/cleanup $MODULE_MERGED_DIR/cleanup |
|||
fi |
|||
if [ -f $CURRENT_DIR/modules/$MODULE/$PACKAGE_VARIANT.list ]; then |
|||
cp $CURRENT_DIR/modules/$MODULE/$PACKAGE_VARIANT.list $MODULE_MERGED_DIR/$PACKAGE_VARIANT.list |
|||
fi |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot_run $MODULE_MERGED_DIR /install |
|||
else |
|||
chroot_run $MODULE_MERGED_DIR /install >>$OUTPUT 2>&1 |
|||
fi |
|||
fi |
|||
|
|||
# run install2 script |
|||
if [ -f $CURRENT_DIR/modules/$MODULE/install2 ]; then |
|||
cp $CURRENT_DIR/modules/$MODULE/install2 $MODULE_MERGED_DIR/install2 |
|||
chmod +x $MODULE_MERGED_DIR/install2 |
|||
if [ "$(ls -A $CURRENT_DIR/modules/$MODULE/patches)" != "" ] >>$OUTPUT 2>&1; then |
|||
mkdir $MODULE_MERGED_DIR/patches |
|||
(cd $CURRENT_DIR/modules/$MODULE/patches && cp --parents -afr * $MODULE_MERGED_DIR/patches/) |
|||
fi |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot_run $MODULE_MERGED_DIR /install2 |
|||
else |
|||
chroot_run $MODULE_MERGED_DIR /install2 >>$OUTPUT 2>&1 |
|||
fi |
|||
fi |
|||
|
|||
# copy files |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
if [ "$(ls -A $CURRENT_DIR/modules/$MODULE/rootcopy-postinstall)" != "" ]; then |
|||
(cd $CURRENT_DIR/modules/$MODULE/rootcopy-postinstall && cp --parents -afr * $MODULE_MERGED_DIR/) |
|||
fi |
|||
else |
|||
if [ "$(ls -A $CURRENT_DIR/modules/$MODULE/rootcopy-postinstall)" != "" ] >>$OUTPUT 2>&1; then |
|||
(cd $CURRENT_DIR/modules/$MODULE/rootcopy-postinstall && cp --parents -afr * $MODULE_MERGED_DIR/) |
|||
fi |
|||
fi |
|||
|
|||
# run post-install script |
|||
if [ -f $CURRENT_DIR/modules/$MODULE/postinstall ]; then |
|||
cp $CURRENT_DIR/modules/$MODULE/postinstall $MODULE_MERGED_DIR/postinstall |
|||
chmod +x $MODULE_MERGED_DIR/postinstall |
|||
if [ $OUTPUT = "/dev/stdout" ] && [ ! -f /dev/stdout ]; then |
|||
chroot_run $MODULE_MERGED_DIR /postinstall |
|||
else |
|||
chroot_run $MODULE_MERGED_DIR /postinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
fi |
|||
|
|||
set +e |
|||
chroot_run $MODULE_MERGED_DIR uncompress_files /etc/alternatives |
|||
chroot_run $MODULE_MERGED_DIR uncompress_files /usr/share/man |
|||
chroot_run $MODULE_MERGED_DIR remove_broken_links /etc/alternatives |
|||
chroot_run $MODULE_MERGED_DIR remove_broken_links /usr/share/man |
|||
set -e |
|||
|
|||
module_chroot_finish_up |
|||
|
|||
module_build_cleanup |
|||
|
|||
if [ "$(ls -A $MODULE_UPPER_DIR)" != "" ]; then |
|||
mksquashfs $MODULE_UPPER_DIR $CURRENT_DIR/$MODULE-$COMP_TYPE.$BEXT -comp $COMP_TYPE -b 1024K -always-use-fragments -noappend || exit |
|||
else |
|||
echo -e "${MAGENTA}$MODULE_UPPER_DIR${ENDCOLOUR} ${RED}is empty${ENDCOLOUR}. Nothing to do." |
|||
fi |
|||
|
|||
module_chroot_umount_fs |
|||
|
|||
done |
|||
|
|||
} |
|||
|
|||
function repack_module() { |
|||
cd $CURRENT_DIR |
|||
OLD_MODULE=$MODULE |
|||
MODULE=${MODULE%"-$OLD_COMP_TYPE.$BEXT"} |
|||
if [ $COMP_TYPE = $OLD_COMP_TYPE ]; then |
|||
echo "The module is already in the required compression format." && exit |
|||
fi |
|||
|
|||
if (ls $CURRENT_DIR/*.$BEXT | grep -q $MODULE 2>/dev/null); then |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
echo -e "Please remove $CURRENT_DIR/$MODULE-$COMP_TYPE.$BEXT${ENDCOLOUR} if you want to build ${MAGENTA}$MODULE${ENDCOLOUR}." |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
else |
|||
mksquashfs /run/initramfs/memory/bundles/$OLD_MODULE $CURRENT_DIR/$MODULE-$COMP_TYPE.$BEXT -comp $COMP_TYPE -b 1024K -always-use-fragments -noappend || exit |
|||
fi |
|||
} |
|||
|
|||
function repack_system() { |
|||
current_process |
|||
|
|||
cd /run/initramfs/memory/bundles/ |
|||
for MODULE in *; do |
|||
if (ls /run/initramfs/memory/bundles/*-xz.$BEXT | grep -q $MODULE >>/dev/null 2>&1); then |
|||
OLD_COMP_TYPE="xz" |
|||
repack_module |
|||
elif (ls /run/initramfs/memory/bundles/*-lz4.$BEXT | grep -q $MODULE >>/dev/null 2>&1); then |
|||
OLD_COMP_TYPE="lz4" |
|||
repack_module |
|||
elif (ls /run/initramfs/memory/bundles/*-zstd.$BEXT | grep -q $MODULE >>/dev/null 2>&1); then |
|||
OLD_COMP_TYPE="zstd" |
|||
repack_module |
|||
fi |
|||
done |
|||
} |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 857 B After Width: | Height: | Size: 857 B |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 711 B After Width: | Height: | Size: 711 B |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |