From f5f5f2ee4e8ea1ed4ab55f67055c2cc77ca9aee7 Mon Sep 17 00:00:00 2001 From: asmeron Date: Fri, 26 Dec 2025 16:35:53 +0600 Subject: [PATCH] Fix executed --- ublinux/functions | 700 ++---------------- ublinux/rc.d/rc.desktop | 21 +- ublinux/rc.d/rc.halt | 7 +- ublinux/rc.d/rc.halt.pre | 7 +- ublinux/rc.d/rc.local | 7 +- ublinux/rc.d/rc.network | 8 +- ublinux/rc.d/rc.pamaccount | 8 +- ublinux/rc.d/rc.pamauth | 8 +- ublinux/rc.d/rc.pampassword | 8 +- ublinux/rc.d/rc.pamsession | 8 +- ublinux/rc.d/rc.post | 30 +- ublinux/rc.d/rc.preinit | 28 +- ublinux/rc.d/rc.xorg | 7 +- ublinux/rc.desktop/all/pulseaudio | 2 - ublinux/rc.desktop/all/ublinuxupdate | 2 - ublinux/rc.desktop/deonly/cryptkeeper | 2 +- .../deonly/gnome-network-proxy-system | 2 +- ublinux/rc.halt.pre/02-sysrq-sleepshutdown | 2 +- ublinux/rc.halt.pre/10-shutdown | 3 +- ublinux/rc.halt.pre/20-grub | 9 +- ublinux/rc.halt.pre/25-accounts-sync | 9 +- ublinux/rc.halt.pre/85-save-cache | 6 +- ublinux/rc.halt.pre/86-save-rootcopy | 10 +- ublinux/rc.local.d/20-pwgr-check | 3 +- ublinux/rc.local.d/31-sound | 2 +- ublinux/rc.local.d/40-pacman | 2 +- ublinux/rc.local.d/43-repository | 25 +- ublinux/rc.local.d/50-update-cache-gtk-icon | 2 +- ublinux/rc.local.d/50-update-desktop-database | 4 +- ublinux/rc.local.d/51-mozilla_extensions | 2 +- ublinux/rc.local.d/52-consolesetup | 2 +- ublinux/rc.local.d/98-ubpile | 5 +- ublinux/rc.network.d/10-network | 3 +- ublinux/rc.network.d/81-samba | 6 +- ublinux/rc.network.d/90-ublinuxupdate | 6 +- ublinux/rc.pamsession.d/01-placeondesktop | 3 +- ublinux/rc.pamsession.d/02-journald-notify | 28 +- ublinux/rc.pamsession.d/03-certmonger-cepces | 2 +- ublinux/rc.pamsession.d/04-user-locale | 2 +- ublinux/rc.post.d/01-system | 4 +- ublinux/rc.post.d/02-hwclock | 2 +- ublinux/rc.post.d/03-modprobepreload | 2 +- ublinux/rc.post.d/09-automount | 2 +- ublinux/rc.post.d/10-brand-backgrounds | 10 +- ublinux/rc.post.d/11-xorg | 4 +- ublinux/rc.post.d/12-dm-background | 2 +- ublinux/rc.post.d/13-dconf | 6 +- ublinux/rc.post.d/16-kiosk-desktop | 2 +- ublinux/rc.post.d/17-kiosk-gtk | 2 +- ublinux/rc.post.d/18-kiosk-xfce4-kioskrc | 2 +- ublinux/rc.post.d/20-initrd | 2 +- ublinux/rc.post.d/23-publicdir | 2 +- ublinux/rc.post.d/24-samba-usershares | 2 +- ublinux/rc.post.d/30-network | 2 +- ublinux/rc.post.d/35-soundprofile | 2 +- ublinux/rc.post.d/42-access-suid-sgid | 5 +- ublinux/rc.post.d/43-access-exec | 2 +- ublinux/rc.post.d/44-mountattr | 2 +- ublinux/rc.post.d/45-disk-quota | 2 +- ublinux/rc.post.d/46-cgroup-quota | 2 +- ublinux/rc.post.d/50-update-fonts | 2 +- ublinux/rc.post.d/51-theme | 2 +- ublinux/rc.post.d/60-blacklistdkms | 2 +- ublinux/rc.preinit.d/01-depmod | 2 +- ublinux/rc.preinit.d/02-modulespreload | 6 +- ublinux/rc.preinit.d/03-ldconfig | 2 +- ublinux/rc.preinit.d/04-update-fonts | 35 +- ublinux/rc.preinit.d/10-system | 5 +- ublinux/rc.preinit.d/11-partitions | 5 +- ublinux/rc.preinit.d/12-save2module | 2 +- ublinux/rc.preinit.d/13-release | 2 +- ublinux/rc.preinit.d/20-services | 5 +- ublinux/rc.preinit.d/21-ntp | 2 +- ublinux/rc.preinit.d/22-samba | 2 +- ublinux/rc.preinit.d/23-realmd | 5 +- ublinux/rc.preinit.d/24-logging | 5 +- ublinux/rc.preinit.d/30-network-hostname | 2 +- ublinux/rc.preinit.d/31-network-proxy-system | 2 +- ublinux/rc.preinit.d/32-network | 2 +- ublinux/rc.preinit.d/35-iptables | 2 +- ublinux/rc.preinit.d/36-ufw | 2 +- ublinux/rc.preinit.d/40-authpam | 2 +- ublinux/rc.preinit.d/50-xorg | 2 +- ublinux/rc.preinit.d/51-autologin | 2 +- ublinux/rc.preinit.d/52-desktop | 2 +- ublinux/rc.preinit.d/53-language | 4 +- ublinux/rc.preinit.d/54-backgrounds | 2 +- ublinux/rc.preinit.d/55-multiseat | 2 +- ublinux/rc.preinit.d/56-openssl-engine | 2 +- ublinux/rc.preinit.d/57-access-denied-vtx11 | 2 +- ublinux/rc.preinit.d/58-access-login | 5 +- ublinux/rc.preinit.d/59-polkit | 4 +- ublinux/rc.preinit.d/60-lightdm-settings | 5 +- ublinux/rc.preinit.d/63-xorg-dpi | 2 +- ublinux/rc.preinit.d/64-swapspace | 2 +- ublinux/rc.preinit.d/65-kesl | 2 +- ublinux/rc.preinit.d/70-virtualbox | 2 +- ublinux/rc.preinit.d/71-vmware | 2 +- ublinux/rc.preinit.d/72-hyperv | 2 +- ublinux/rc.preinit.d/73-qemu | 2 +- ublinux/rc.preinit.d/80-server-storage | 5 +- ublinux/rc.preinit.d/90-apparmor | 2 +- ublinux/rc.preinit.d/99-osinstall | 2 +- ublinux/rc.preinit/01-inifile | 12 +- ublinux/rc.preinit/02-skel-adds | 2 +- ublinux/rc.preinit/03-initvars | 2 +- ublinux/rc.preinit/05-save-clean | 2 +- ublinux/rc.preinit/06-statemode | 5 +- ublinux/rc.preinit/08-prettyname | 2 +- ublinux/rc.preinit/10-accounts | 620 +++++++++++++++- ublinux/rc.preinit/20-remount | 2 +- ublinux/rc.preinit/50-install-pkg | 7 +- .../{clean_distr.sh => clean_distr} | 0 ...linux-00-install.sh => ublinux-00-install} | 14 +- ublinux/rootfs-patches/ublinux_db_patch_distr | 8 + .../rootfs-patches/ublinux_db_patch_distr.sh | 7 - ublinux/rootfs-patches/ublinux_de_patch_distr | 8 + .../rootfs-patches/ublinux_de_patch_distr.sh | 7 - .../rootfs-patches/ublinux_edu_patch_distr | 8 + .../rootfs-patches/ublinux_edu_patch_distr.sh | 7 - ublinux/rootfs-patches/ublinux_patch_distr | 8 + ublinux/rootfs-patches/ublinux_patch_distr.sh | 7 - .../rootfs-patches/ublinux_srv_patch_distr | 8 + .../rootfs-patches/ublinux_srv_patch_distr.sh | 7 - ...rough_revert.sh => gpu_passthrough_revert} | 2 +- ...rough_single.sh => gpu_passthrough_single} | 0 .../{printers_setup.sh => printers_setup} | 55 +- ...ters_setup_capt.sh => printers_setup_capt} | 61 +- .../scripts/{ubxswitcher.sh => ubxswitcher} | 18 +- ublinux/systemd/printers-setup@.service | 2 +- ublinux/udev/70-setup-prn-ubconfig.rules | 6 +- ublinux/udev/99-printers-local-ubconfig.rules | 10 +- 132 files changed, 1087 insertions(+), 1013 deletions(-) rename ublinux/rootfs-patches/{clean_distr.sh => clean_distr} (100%) rename ublinux/rootfs-patches/ublinux/{ublinux-00-install.sh => ublinux-00-install} (72%) create mode 100755 ublinux/rootfs-patches/ublinux_db_patch_distr delete mode 100755 ublinux/rootfs-patches/ublinux_db_patch_distr.sh create mode 100755 ublinux/rootfs-patches/ublinux_de_patch_distr delete mode 100755 ublinux/rootfs-patches/ublinux_de_patch_distr.sh create mode 100755 ublinux/rootfs-patches/ublinux_edu_patch_distr delete mode 100755 ublinux/rootfs-patches/ublinux_edu_patch_distr.sh create mode 100755 ublinux/rootfs-patches/ublinux_patch_distr delete mode 100755 ublinux/rootfs-patches/ublinux_patch_distr.sh create mode 100755 ublinux/rootfs-patches/ublinux_srv_patch_distr delete mode 100755 ublinux/rootfs-patches/ublinux_srv_patch_distr.sh rename ublinux/scripts/{gpu_passthrough_revert.sh => gpu_passthrough_revert} (94%) rename ublinux/scripts/{gpu_passthrough_single.sh => gpu_passthrough_single} (100%) rename ublinux/scripts/{printers_setup.sh => printers_setup} (74%) rename ublinux/scripts/{printers_setup_capt.sh => printers_setup_capt} (83%) rename ublinux/scripts/{ubxswitcher.sh => ubxswitcher} (78%) diff --git a/ublinux/functions b/ublinux/functions index 5db5eb8..151a6b4 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -6,13 +6,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # -[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS="/sysroot"; CMD_CHROOT="chroot ${ROOTFS}"; } -SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -SYSCONF="${ROOTFS}${SYSCONF}" - -export TEXTDOMAINDIR="${ROOTFS}/usr/share/locale" -export TEXTDOMAIN="ublinux_functions" - ere_quote_grep() { # Что экранировать sed 's/[][\.|$(){}?+*^]/\\&/g' <<< "$*" @@ -105,6 +98,8 @@ return_hash_password(){ echo "${BLOCK_PASSWORD}${HASH_PASSWORD}" } +# External: ubl-settings-usergroups +# # Если параметр $1 известный хеш, то вернуть true, иначе false # Применяется ubl-settings-usergroup is_hash_password(){ @@ -113,6 +108,8 @@ is_hash_password(){ [[ ${HASH_PASSWORD} =~ ^('!*'|'!'|'!!'|'*')*'$'(_|1|2|2a|2b|2x|2y|3|4|5|6|7|md5|sha1|gy|y|argon2d|argon2i|argon2ds|argon2id)'$' ]] || return 1 } +# External: ubl-settings-usergroups +# # Remove user home directories. Used ubl-settings-usergroup # $1 # Users name a comma separated list # TODO: Запросить хомяк по умолчанию из /etc/default/useradd HOME= @@ -120,10 +117,12 @@ remove_userhome(){ local LIST_USERNAME="$@" [[ ${LIST_USERNAME} != "" ]] || return 1 while IFS= read -r SELECT_USERNAME; do - rm -rdf ${ROOTFS}/home/"${SELECT_USERNAME}" + rm -rf ${ROOTFS}/home/"${SELECT_USERNAME}" done < <(tr ',;' '\n' <<< ${LIST_USERNAME}) } +# External: ubl-settings-usergroups +# # Convert plain passwords to a hash in the global configuration # Конвертировать не шифрованные пароли в шифрованные для глобальных переменных USERADD GROUPADD DEFAULTPASSWD DEFAULTROOTPASSWD # $1 # Параметр конфигурации, где содержится пароль который нужно конвертировать, если первые символы %%, то пароль останется не шифрованным @@ -211,611 +210,6 @@ globalconf_convert_pass_plain_to_hash(){ fi } -##################################################################################### -### -### Функции управления пользователями и группами с помощью тектовых процессоров ### -### -##################################################################################### - -# Добавить пользователя в /etc/passwd /etc/shadow -# user_add $1:$2:$3:$4:$5:$6:$7:$8:$9:$10:$11:$12:$13 -# $1 # Имя пользователя -# $2 # GECOS пользователя -# $3 # UID идентификатор пользователя -# # = 's' | 'system' # Вычисляется автоматически, первый свободный системного диапазона -# # Если не задан, то вычисляется автоматически, первый свободный пользовательского диапазона -# $4 # GID первичной группы пользователя -# # Если не задана, то создать группу по имени пользователя и взять GID -# $5 # Зашифрованный пароль -# # = '' # Если не задано, то пароль '!*' запрет авторизации -# # = ' ' # Если пробел, то без пароля -# # = 'lock' | 'l' # Заблокировать авторизация, добавив '!' перед хешем -# # = 'unlock' | 'u' # Разблокировать авторизация, убрав '!' или '!!' или '!*' или '*' перед хешем -# $6 # HOME пользователя -# $7 # SHELL пользователя -# $8 # LASTCHANGED -# $9 # MINDAY -# $10 # MAXDAY -# $11 # WARN -# $12 # INACTIVE -# $13 # EXPIRE -# Для изменения параметров существующего пользователя, обязательный параметр: $1 или $3 пользователя -# Если одно из полей содержит "+" то значение поля не менять в файле -# Пример: user_add user-1:Пользователь-1 -# Пример: user_add user-1:Пользователь-1:1001:1001 -# Пример: user_add user-1:Пользователь-1:1001:1001:!*:/home/user-1:/bin/bash:19788:0:99999:7:2:19800 -# Пример: user_add root:+:+:+:!*:+:+::+:+:+:+:+ -user_add(){ - [[ $1 == @("-v"|"--verbose") ]] && local VERBOSE='yes' && shift - local FILE_PASSWD="${ROOTFS}/etc/passwd" - local FILE_SHADOW="${ROOTFS}/etc/shadow" - local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - local FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd" - - local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) - local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) - local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) - local DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD}) - - [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+HOME=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_HOME_USER=${BASH_REMATCH[2]:-/home} - [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+SHELL=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_SHELL_USER=${BASH_REMATCH[2]:-/bin/bash} - local DEFAULT_HOME_SYSTEM="/" - local DEFAULT_SHELL_SYSTEM="/usr/bin/nologin" - - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_MAX_DAYS[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_MAXDAY=${BASH_REMATCH[2]:-99999} - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_MIN_DAYS[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_MINDAY=${BASH_REMATCH[2]:-0} - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_WARN_AGE[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_WARN=${BASH_REMATCH[2]:-7} - get_free_uid(){ - local PARAM="$@" - local UID_MIN= UID_MAX= UID_NEW= - if [[ ${PARAM} == "@system" ]]; then - # Свободный номер системного списка группы - #UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+SYS_UID_MIN[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MIN=${BASH_REMATCH[2]:-500} - #UID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+SYS_UID_MAX[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MAX=${BASH_REMATCH[2]:-999} - UID_NEW=$(awk -F':' -v USER_MIN=${UID_MIN} -v USER_MAX=${UID_MAX} '{ uid[$3]=USER_MAX } END {for (x=USER_MAX; x>=USER_MIN; x--) if (!uid[x]) {print x; exit}}' ${FILE_PASSWD}) #' - [[ ${UID_NEW} == "" ]] && UID_NEW=${UID_MAX} - else - # Свободный номер списка групп, кроме системного списка - #UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+UID_MIN[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MIN=${BASH_REMATCH[2]:-1000} - #UID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") - [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+UID_MAX[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MAX=${BASH_REMATCH[2]:-60000} - UID_NEW=$(awk -F':' -v USER_MIN=${UID_MIN} -v USER_MAX=${UID_MAX} '{ uid[$3]=USER_MIN } END {for (x=USER_MIN; x<=USER_MAX; x++) if (!uid[x]) {print x; exit}}' ${FILE_PASSWD}) #' - [[ ${UID_NEW} == "" ]] && UID_NEW=${UID_MIN} - fi - printf "%d" "${UID_NEW}" - } - is_uid_system(){ - local UID_MIN= - UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") - [[ ${SELECT_UID} -lt ${UID_MIN:=1000} ]] && printf "%d" "1" || printf "%d" "0" - } - local PARAM="$@" - # Получаем из аргумента значения - local IS_USER_SYSTEM= - local SELECT_NOUSE= - local SELECT_USERNAME= SELECT_GECOS= SELECT_UID= SELECT_GID= SELECT_PASSWORD= SELECT_HOME= SELECT_SHELL= SELECT_LASTCHANGED= SELECT_MINDAY= SELECT_MAXDAY= SELECT_WARN= SELECT_INACTIVE= SELECT_EXPIRE= NULL= - IFS=: read -r SELECT_USERNAME SELECT_GECOS SELECT_UID SELECT_GID SELECT_PASSWORD SELECT_HOME SELECT_SHELL SELECT_LASTCHANGED SELECT_MINDAY SELECT_MAXDAY SELECT_WARN SELECT_INACTIVE SELECT_EXPIRE NULL <<< "${PARAM}" - [[ ${SELECT_USERNAME} == "" && ${SELECT_UID} == "" ]] && { >&2 echo "ERROR: not added/changed '${SELECT_USERNAME}' username"; return 1; } - # Получаем из файла значения - local VOL_FILEP_PLAINPASSWORD= VOL_FILEP_UID= VOL_FILEP_GID= VOL_FILEP_GECOS= VOL_FILEP_HOME= VOL_FILEP_SHELL= VOL_FILEP_USERNAME= - if [[ ${SELECT_USERNAME} != @(""|"+") ]]; then - [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEP_UID=${BASH_REMATCH[3]} \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} \ - && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ - && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ - && VOL_FILEP_SHELL=${BASH_REMATCH[7]} - VOL_FILEP_USERNAME=${SELECT_USERNAME} - elif [[ ${SELECT_USERNAME} == @(""|"+") && ${SELECT_UID} =~ ^[[:digit:]]+$ ]]; then - [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEP_USERNAME=${BASH_REMATCH[2]} \ - && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} \ - && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ - && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ - && VOL_FILEP_SHELL=${BASH_REMATCH[7]} - VOL_FILEP_UID=${SELECT_UID} - SELECT_USERNAME=${VOL_FILEP_USERNAME} - fi - [[ ${SELECT_USERNAME} == @(""|"+") ]] && { >&2 echo "ERROR: not added/changed empty username"; return 1; } - [[ ${SELECT_PASSWORD} == "+" ]] && SELECT_PLAINPASSWORD=${VOL_FILEP_PLAINPASSWORD} - [[ ${SELECT_PLAINPASSWORD} == "" ]] && SELECT_PLAINPASSWORD='x' - if [[ ${SELECT_UID} == "+" && ${VOL_FILEP_UID} != "" ]]; then - SELECT_UID=${VOL_FILEP_UID} - elif [[ ${SELECT_UID} == @("s"|"system") ]]; then - SELECT_UID=$(get_free_uid @system) - elif [[ ${SELECT_UID} =~ ^[[:digit:]]+$ ]]; then - true - else - # Если UID не задан, то берём первый свободный - SELECT_UID=$(get_free_uid) - fi - if [[ ${SELECT_GID} == "+" && ${VOL_FILEP_GID} != "" ]]; then - SELECT_GID=${VOL_FILEP_GID} - elif [[ ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then - true - else - # Если GID не задан, то создаём группу по имени пользователя ${SELECT_UID} и получаем GID от созданной группы - IFS=: read -r NULL SELECT_GID NULL NULL NULL NULL <<< $(group_add --verbose "${SELECT_USERNAME}:+:+:+:+") - [[ ${SELECT_GID} == "" ]] && SELECT_GID=${SELECT_UID} - fi - [[ ${SELECT_GECOS} == "+" ]] && SELECT_GECOS=${VOL_FILEP_GECOS} - if [[ ${SELECT_HOME} == "+" && ${VOL_FILEP_HOME} != "" ]]; then - SELECT_HOME=${VOL_FILEP_HOME} - elif [[ ${SELECT_HOME} == @(""|"+") ]]; then - [[ $(is_uid_system) == 1 ]] && SELECT_HOME=${DEFAULT_HOME_SYSTEM} || SELECT_HOME="${DEFAULT_HOME_USER}/${SELECT_USERNAME}" - fi - if [[ ${SELECT_SHELL} == "+" && ${VOL_FILEP_SHELL} != "" ]]; then - SELECT_SHELL=${VOL_FILEP_SHELL} - elif [[ ${SELECT_SHELL} == @(""|"+") ]]; then - [[ $(is_uid_system) == 1 ]] && SELECT_SHELL=${DEFAULT_SHELL_SYSTEM} || SELECT_SHELL=${DEFAULT_SHELL_USER} - fi - - local VOL_FILEPS_PASSWORD= VOL_FILEPS_LASTCHANGED= VOL_FILEPS_MINDAY= VOL_FILEPS_MAXDAY= VOL_FILEPS_WARN= VOL_FILEPS_INACTIVE= VOL_FILEPS_EXPIRE= VOL_FILEPS_NOUSE= - [[ ${DATA_FILE_SHADOW} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEPS_PASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEPS_LASTCHANGED=${BASH_REMATCH[3]} \ - && VOL_FILEPS_MINDAY=${BASH_REMATCH[4]} \ - && VOL_FILEPS_MAXDAY=${BASH_REMATCH[5]} \ - && VOL_FILEPS_WARN=${BASH_REMATCH[6]} \ - && VOL_FILEPS_INACTIVE=${BASH_REMATCH[7]} \ - && VOL_FILEPS_EXPIRE=${BASH_REMATCH[8]} \ - && VOL_FILEPS_NOUSE=${BASH_REMATCH[9]} - if [[ ${SELECT_PASSWORD} == "+" && ${VOL_FILEPS_PASSWORD} != "" ]]; then - SELECT_PASSWORD=${VOL_FILEPS_PASSWORD} - elif [[ ${SELECT_PASSWORD} == @("lock"|"l") && ${VOL_FILEPS_PASSWORD} != "" ]]; then - if [[ ${VOL_FILEPS_PASSWORD:0:1} == "!" ]]; then - SELECT_PASSWORD=${VOL_FILEPS_PASSWORD} - else - SELECT_PASSWORD="!${VOL_FILEPS_PASSWORD}" - fi - elif [[ ${SELECT_PASSWORD} == @("unlock"|"u") && ${VOL_FILEPS_PASSWORD} != "" ]]; then - if [[ ${VOL_FILEPS_PASSWORD:0:2} == "!!" ]]; then - SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:2}" - elif [[ ${VOL_FILEPS_PASSWORD:0:2} == "!*" ]]; then - SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:2}" - elif [[ ${VOL_FILEPS_PASSWORD:0:1} == "*" ]]; then - SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:1}" - elif [[ ${VOL_FILEPS_PASSWORD:0:1} == "!" ]]; then - SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:1}" - else - SELECT_PASSWORD="${VOL_FILEPS_PASSWORD}" - fi - elif [[ ${SELECT_PASSWORD} == " " ]]; then - SELECT_PASSWORD= - elif [[ ${SELECT_PASSWORD} == @(""|"+") ]]; then - SELECT_PASSWORD="!*" - fi - if [[ ${SELECT_LASTCHANGED} == "+" && ${VOL_FILEPS_LASTCHANGED} != "" ]]; then - SELECT_LASTCHANGED=${VOL_FILEPS_LASTCHANGED} - elif [[ ${SELECT_LASTCHANGED} =~ ^[[:digit:]]{4,4}'-'[[:digit:]]{1,2}'-'[[:digit:]]{1,2}$ ]]; then - SELECT_LASTCHANGED=$(( $(${CMD_CHROOT} date --date="${SELECT_LASTCHANGED} 0000" +"%s")/(60*60*24) )) - elif [[ ${SELECT_LASTCHANGED} =~ ^[[:digit:]]{1,5}$ ]]; then - true - else - SELECT_LASTCHANGED=$(( $(${CMD_CHROOT} date +%s)/(60*60*24) )) # (60*60*24)=18400 second on day - fi - if [[ ${SELECT_MINDAY} == "+" && ${VOL_FILEPS_MINDAY} != "" ]]; then - SELECT_MINDAY=${VOL_FILEPS_MINDAY} - elif [[ ${SELECT_MINDAY} =~ ^[[:digit:]]+$ ]]; then - true - else - [[ $(is_uid_system) == 1 ]] && SELECT_MINDAY= || SELECT_MINDAY=${DEFAULT_MINDAY} - fi - if [[ ${SELECT_MAXDAY} == "+" && ${VOL_FILEPS_MAXDAY} != "" ]]; then - SELECT_MAXDAY=${VOL_FILEPS_MAXDAY} - elif [[ ${SELECT_MAXDAY} =~ ^[[:digit:]]+$ ]]; then - true - else - [[ $(is_uid_system) == 1 ]] && SELECT_MAXDAY= || SELECT_MAXDAY=${DEFAULT_MAXDAY} - fi - if [[ ${SELECT_WARN} == "+" && ${VOL_FILEPS_WARN} != "" ]]; then - SELECT_WARN=${VOL_FILEPS_WARN} - elif [[ ${SELECT_WARN} =~ ^[[:digit:]]+$ ]]; then - true - else - [[ $(is_uid_system) == 1 ]] && SELECT_WARN= || SELECT_WARN=${DEFAULT_WARN} - fi - if [[ ${SELECT_INACTIVE} == "+" && ${VOL_FILEPS_INACTIVE} != "" ]]; then - SELECT_INACTIVE=${VOL_FILEPS_INACTIVE} - elif [[ ${SELECT_INACTIVE} =~ (-1|^[[:digit:]]+$) ]]; then - true - else - SELECT_INACTIVE= - fi - if [[ ${SELECT_EXPIRE} == "+" && ${VOL_FILEPS_EXPIRE} != "" ]]; then - SELECT_EXPIRE=${VOL_FILEPS_EXPIRE} - elif [[ ${SELECT_EXPIRE} =~ ^[[:digit:]]{4,4}'-'[[:digit:]]{1,2}'-'[[:digit:]]{1,2}$ ]]; then - SELECT_EXPIRE=$(( $(${CMD_CHROOT} date --date="${SELECT_EXPIRE} 0000" +"%s")/(60*60*24) )) - elif [[ ${SELECT_EXPIRE} =~ ^[[:digit:]]{1,5}$ ]]; then - true - else - SELECT_EXPIRE= - fi - SELECT_NOUSE="" - # Если нет изменений, то ничего не делать - if [[ "${SELECT_USERNAME}" != "${VOL_FILEP_USERNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEP_PLAINPASSWORD}" || "${SELECT_UID}" != "${VOL_FILEP_UID}" || "${SELECT_GID}" != "${VOL_FILEP_GID}" || "${SELECT_GECOS}" != "${VOL_FILEP_GECOS}" \ - || "${SELECT_HOME}" != "${VOL_FILEP_HOME}" || "${SELECT_SHELL}" != "${VOL_FILEP_SHELL}" ]]; then - #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}" - #printf "%s:%s:%d:%d:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" >> "${FILE_PASSWD}" - #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" - #sed -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" - while [[ ${DATA_FILE_PASSWD} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_PASSWD="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done - [[ ${DATA_FILE_PASSWD} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_PASSWD="${BASH_REMATCH[1]}" - printf "%s\n%s:%s:%d:%d:%s:%s:%s\n" "${DATA_FILE_PASSWD}" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" > "${FILE_PASSWD}" - fi - if [[ "${SELECT_PASSWORD}" != "${VOL_FILEPS_PASSWORD}" || "${SELECT_LASTCHANGED}" != "${VOL_FILEPS_LASTCHANGED}" || "${SELECT_MINDAY}" != "${VOL_FILEPS_MINDAY}" || "${SELECT_MAXDAY}" != "${VOL_FILEPS_MAXDAY}" \ - || "${SELECT_WARN}" != "${VOL_FILEPS_WARN}" || "${SELECT_INACTIVE}" != "${VOL_FILEPS_INACTIVE}" || "${SELECT_EXPIRE}" != "${VOL_FILEPS_EXPIRE}" ]]; then - #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}" - #printf "%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" >> "${FILE_SHADOW}" - #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" - #sed -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" - while [[ ${DATA_FILE_SHADOW} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_SHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done - [[ ${DATA_FILE_SHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_SHADOW="${BASH_REMATCH[1]}" - printf "%s\n%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${DATA_FILE_SHADOW}" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" > "${FILE_SHADOW}" - fi - [[ -z ${VERBOSE} ]] || printf "%s:%s:%d:%d:%s:%s:%s:%d:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_GECOS}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_PASSWORD}" "${SELECT_HOME}" "${SELECT_SHELL}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" -} - -# Удалить пользователя из /etc/passwd /etc/shadow -# user_del $1:$2 -# $1 # Имя пользователя -# $2 # UID идентификатор пользователя -# Что-бы удалить пользователя можно указать $1 или $2 или оба одновременно $1:$2 -# Пример: user_del user-1 -# user_del :1001 -# user_del user-2:1002 -user_del(){ - local FILE_PASSWD="${ROOTFS}/etc/passwd" - local FILE_SHADOW="${ROOTFS}/etc/shadow" - local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) - local FILE_GROUP="${ROOTFS}/etc/group" - local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(< ${FILE_GROUP}) - local PARAM="$@" - local SELECT_USERNAME= SELECT_UID= - IFS=: read -r SELECT_USERNAME SELECT_UID NULL <<< "${PARAM}" - [[ ${SELECT_USERNAME} == "" && ${SELECT_UID} == "" ]] && { >&2 echo "ERROR: not delete '${SELECT_USERNAME}' username"; return 1; } - SELECT_USERNAME=$@ - local VOL_FILEP_PLAINPASSWORD VOL_FILEP_UID VOL_FILEP_GID VOL_FILEP_GECOS VOL_FILEP_HOME VOL_FILEP_SHELL - # Ищем пользователя вначале по имени, после по UID - [[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEP_UID=${BASH_REMATCH[3]} \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} \ - && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ - && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ - && VOL_FILEP_SHELL=${BASH_REMATCH[7]} - [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && SELECT_USERNAME=${BASH_REMATCH[2]} \ - && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ - && VOL_FILEP_UID=${SELECT_UID} \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} \ - && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ - && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ - && VOL_FILEP_SHELL=${BASH_REMATCH[7]} - sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}" - sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}" - # Если имеется группа с таким же именем пользователя и она является основной группой указанного пользователя и в ней нет других пользователей - local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= OTHER_USERNAME= - [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEG_GID=${BASH_REMATCH[3]} \ - && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} - # и она не является основной у других пользователей - [[ -n ${VOL_FILEP_GID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):([^$'\n']*):"${VOL_FILEP_GID}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && OTHER_USERNAME=${BASH_REMATCH[2]} - # то удаляем группу - if [[ ${VOL_FILEP_GID} == ${VOL_FILEG_GID} && -z ${VOL_FILEG_MEMBERS} && -z ${OTHER_USERNAME} ]]; then - sed /^${SELECT_USERNAME}:/d -i "${FILE_GROUP}" - sed /^${SELECT_USERNAME}:/d -i "${FILE_GSHADOW}" - fi - # Удаляем пользователя из всех групп - sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" -i "${FILE_GROUP}" - sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" -i "${FILE_GSHADOW}" -} - -# Добавить группу в /etc/group /etc/gshadow -# group_add $1:$2:$3:$4:$5 -# $1 # Имя группы -# $2 # GID идентификатор группы -# # = 's' | 'system' # Вычисляется автоматически, первый свободный системного диапазона -# # Если не задан, то вычисляется автоматически, первый свободный пользовательского диапазона -# $3 # Члены группы, разделённые запятыми -# $4 # Зашифрованный пароль -# # = '' # Если не задано, то пароль '!*' запрет авторизации -# # = ' ' # Если пробел, то без пароля -# # = 'lock' | 'l' # Заблокировать авторизация, добавив '!' перед хешем -# # = 'unlock' | 'u' # Разблокировать авторизация, убрав '!' или '!!' или '!*' или '*' перед хешем -# $5 # Администраторы группы, разделённые запятыми -# Для изменения параметров существующей группы, обязательный параметр: $1 или $2 пользователя -# Если одно из полей содержит "+" то значение поля не менять в файле -# Пример: g_department_1 -# Пример: g_department_1:1010 -# Пример: g_department_1:1010:user-1,user-2::superadmin -# Пример: g_department_1:+:+:+:+ -# Пример: g_department_1:1010:+:+:+ -group_add(){ - [[ $1 == @("-v"|"--verbose") ]] && local VERBOSE='yes' && shift - local FILE_GROUP="${ROOTFS}/etc/group" - local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" - local DATA_FILE_GROUP=$(< ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) - local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) - get_free_gid(){ - local PARAM="$@" - local GID_MIN= GID_MAX= GID_NEW= - if [[ ${PARAM} == "@system" ]]; then - # Свободный номер системного списка группы - GID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - GID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=500} -v GROUP_MAX=${GID_MAX:=999} '{ gid[$3]=GROUP_MAX } END {for (x=GROUP_MAX; x>=GROUP_MIN; x--) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' - [[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MAX} - else - # Свободный номер списка групп, кроме системного списка - GID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - GID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") - # Предоставить свободный номер с начала списка - GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=6000} '{ gid[$3]=GROUP_MIN } END {for (x=GROUP_MIN; x<=GROUP_MAX; x++) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' - [[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MIN} - # Предоставить свободный номер с конца списка - #GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '{ gid[$3]=GROUP_MAX } END {for (x=GROUP_MAX; x>=GROUP_MIN; x--) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' - #[[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MAX} - fi - printf "%d" "${GID_NEW}" - } - local PARAM="$@" - # Получаем из аргумента значения - local SELECT_GROUPNAME= SELECT_GID= SELECT_MEMBERS= SELECT_PASSWORD= SELECT_ADMINISTRATORS= NULL= - IFS=: read -r SELECT_GROUPNAME SELECT_GID SELECT_MEMBERS SELECT_PASSWORD SELECT_ADMINISTRATORS NULL <<< "${PARAM}" - [[ ${SELECT_GROUPNAME} == "" && ${SELECT_GID} == "" ]] && { >&2 echo "ERROR: not added/changed '${SELECT_GROUPNAME}' groupname"; return 1; } - # Получаем из файла значения - local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= VOL_FILEG_GROUPNAME= - local SELECT_PLAINPASSWORD= - if [[ ${SELECT_GROUPNAME} != @(""|"+") ]]; then - [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEG_GID=${BASH_REMATCH[3]} \ - && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} - VOL_FILEG_GROUPNAME=${SELECT_GROUPNAME} - elif [[ ${SELECT_GROUPNAME} == @(""|"+") && ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then - [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEG_GROUPNAME=${BASH_REMATCH[2]} \ - && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[3]} \ - && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} - VOL_FILEG_GID=${SELECT_GID} - SELECT_GROUPNAME=${VOL_FILEG_GROUPNAME} - fi - [[ ${SELECT_GROUPNAME} == @(""|"+") ]] && { >&2 echo "ERROR: not added/changed empty groupname"; return 1; } - [[ ${SELECT_PASSWORD} == "+" ]] && SELECT_PLAINPASSWORD=${VOL_FILEG_PLAINPASSWORD} || SELECT_PLAINPASSWORD='x' - [[ ${SELECT_PASSWORD} == "" || ${SELECT_PLAINPASSWORD} == "" ]] && SELECT_PLAINPASSWORD='x' - if [[ ${SELECT_GID} == "+" && ${VOL_FILEG_GID} != "" ]]; then - SELECT_GID=${VOL_FILEG_GID} - elif [[ ${SELECT_GID} == @("s"|"system") ]]; then - SELECT_GID=$(get_free_gid @system) - elif [[ ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then - true - else - SELECT_GID=$(get_free_gid) - fi - [[ ${SELECT_MEMBERS} == "+" ]] && SELECT_MEMBERS=${VOL_FILEG_MEMBERS} - - local VOL_FILEGS_PASSWORD= VOL_FILEGS_ADMINISTRATORS= VOL_FILEGS_MEMBERS= - [[ ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEGS_PASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEGS_ADMINISTRATORS=${BASH_REMATCH[3]} \ - && VOL_FILEGS_MEMBERS=${BASH_REMATCH[4]} - if [[ ${SELECT_PASSWORD} == "+" && ${VOL_FILEGS_PASSWORD} != "" ]]; then - SELECT_PASSWORD=${VOL_FILEGS_PASSWORD} - elif [[ ${SELECT_PASSWORD} == @("lock"|"l") && ${VOL_FILEGS_PASSWORD} != "" ]]; then - if [[ ${VOL_FILEGS_PASSWORD:0:1} == "!" ]]; then - SELECT_PASSWORD=${VOL_FILEGS_PASSWORD} - else - SELECT_PASSWORD="!${VOL_FILEGS_PASSWORD}" - fi - elif [[ ${SELECT_PASSWORD} == @("unlock"|"u") && ${VOL_FILEGS_PASSWORD} != "" ]]; then - if [[ ${VOL_FILEGS_PASSWORD:0:2} == "!!" ]]; then - SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:2}" - elif [[ ${VOL_FILEGS_PASSWORD:0:2} == "!*" ]]; then - SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:2}" - elif [[ ${VOL_FILEGS_PASSWORD:0:1} == "*" ]]; then - SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:1}" - elif [[ ${VOL_FILEGS_PASSWORD:0:1} == "!" ]]; then - SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:1}" - else - SELECT_PASSWORD="${VOL_FILEGS_PASSWORD}" - fi - elif [[ ${SELECT_PASSWORD} == " " ]]; then - SELECT_PASSWORD= - elif [[ ${SELECT_PASSWORD} == @(""|"+") ]]; then - SELECT_PASSWORD="!*" - fi - [[ ${SELECT_ADMINISTRATORS} == "+" ]] && SELECT_ADMINISTRATORS=${VOL_FILEGS_ADMINISTRATORS} - # Если нет изменений, то ничего не делать - if [[ "${SELECT_GROUPNAME}" != "${VOL_FILEG_GROUPNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEG_PLAINPASSWORD}" || "${SELECT_GID}" != "${VOL_FILEG_GID}" || "${SELECT_MEMBERS}" != "${VOL_FILEG_MEMBERS}" ]]; then - #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GROUP}" - #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" >> "${FILE_GROUP}" - #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}" - - while [[ ${DATA_FILE_GROUP} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GROUP="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done - [[ ${DATA_FILE_GROUP} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GROUP="${BASH_REMATCH[1]}" - printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GROUP}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GROUP}" - - #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" - fi - if [[ "${SELECT_PASSWORD}" != "${VOL_FILEGS_PASSWORD}" || "${SELECT_ADMINISTRATORS}" != "${VOL_FILEGS_ADMINISTRATORS}" || "${SELECT_MEMBERS}" != "${VOL_FILEGS_MEMBERS}" ]]; then - #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GSHADOW}" - #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" >> "${FILE_GSHADOW}" - #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}" - - while [[ ${DATA_FILE_GSHADOW} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GSHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done - [[ ${DATA_FILE_GSHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GSHADOW="${BASH_REMATCH[1]}" - printf "%s\n%s:%s:%s:%s\n" "${DATA_FILE_GSHADOW}" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" > "${FILE_GSHADOW}" - - #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" - fi - [[ -z ${VERBOSE} ]] || printf "%s:%d:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_GID}" "${SELECT_MEMBERS}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" -} - -# Удалить группу из /etc/group /etc/gshadow -# group_del $1 -# $1 # Имя группы -# $2 # GID идентификатор группы -# Что-бы удалить группу можно указать $1 или $2 или оба одновременно $1:$2 -# Пример: group_del user-1 -# group_del :1001 -# group_del user-2:1002 -group_del(){ - local FILE_GROUP="${ROOTFS}/etc/group" - local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(< ${FILE_GROUP}) - local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) - local PARAM="$@" - local SELECT_GROUPNAME= SELECT_GID= NULL= - IFS=: read -r SELECT_GROUPNAME SELECT_GID NULL <<< "${PARAM}" - local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= - [[ -n ${SELECT_GROUPNAME} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ - && VOL_FILEG_GID=${BASH_REMATCH[3]} \ - && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} - [[ -n ${SELECT_GID} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ - && SELECT_GROUPNAME=${BASH_REMATCH[2]} \ - && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[3]} \ - && VOL_FILEG_GID=${SELECT_GID} \ - && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} - local VOL_FILEP_PLAINPASSWORD VOL_FILEP_UID VOL_FILEP_GID VOL_FILEP_GECOS VOL_FILEP_HOME VOL_FILEP_SHELL - [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):([^$'\n']*):"${VOL_FILEG_GID}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEP_USERNAME=${BASH_REMATCH[2]} \ - && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ - && VOL_FILEP_UID=${BASH_REMATCH[4]} \ - && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ - && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ - && VOL_FILEP_SHELL=${BASH_REMATCH[7]} - if [[ -n ${VOL_FILEP_USERNAME} ]]; then - >&2 echo "ERROR: cannot remove the primary group of user '${VOL_FILEP_USERNAME}'" - else - sed "/^${SELECT_GROUPNAME}:/d" -i "${FILE_GROUP}" - sed "/^${SELECT_GROUPNAME}:/d" -i "${FILE_GSHADOW}" - fi -} - -# Добавить пользователей в группы /etc/group /etc/gshadow -# user_add_group $1,$1,... $2,$2,$2,... -# $1 # Имя пользователя и/или UID. Разделённых ',' -# # :,:,... -# $2 # Имена групп разделённых ',' -# Пример: user_add_group user-1 wheel,lp,disk -# Пример: user_add_group user-1,user-2 wheel,lp,disk -# Пример: user_add_group :1001 wheel,lp,disk -# Пример: user_add_group user-1:1001 wheel,lp,disk -user_add_group(){ - local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) - local FILE_GROUP="${ROOTFS}/etc/group" - local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(< ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) - local SELECT_USERNAME_UID_LIST=$1 - local SELECT_GROUPS=$2 - while IFS= read -r SELECT_USERNAME_UID; do - [[ ${SELECT_USERNAME_UID_LIST} == "" ]] && continue - local SELECT_USERNAME= SELECT_UID= NULL= - IFS=: read -ru3 SELECT_USERNAME SELECT_UID NULL 3<<< "${SELECT_USERNAME_UID}" - local SELECT_GID= SELECT_GROUPNAME= VOL_FILEP_GID= - # Ищем пользователя вначале по имени, после по UID - [[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} - [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && SELECT_USERNAME=${BASH_REMATCH[2]} \ - && VOL_FILEP_GID=${BASH_REMATCH[4]} - [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] || { >&2 echo "ERROR: user '${SELECT_USERNAME}' not found"; return 1; } - [[ -n ${SELECT_GROUPS} ]] || { >&2 echo "ERROR: groups should not be empty"; return 1; } - SELECT_GID=${VOL_FILEP_GID} - [[ -n ${SELECT_GID} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ - && SELECT_GROUPNAME=${BASH_REMATCH[2]} - # Убираем дубликаты групп - SELECT_GROUPS=$(sort -u <<< ${SELECT_GROUPS//,/$'\n'}); SELECT_GROUPS=${SELECT_GROUPS//$'\n'/,} - # Проверяем, если группа является основной у пользователя, то исключить из списка групп - SELECT_GROUPS=$(sed "s/^${SELECT_GROUPNAME}$//g;s/^${SELECT_GROUPNAME},//g;s/,${SELECT_GROUPNAME}$//g;s/,${SELECT_GROUPNAME},/,/g" <<< "${SELECT_GROUPS}") - while IFS= read -ru4 SELECT_GROUPNAME; do - [[ ${SELECT_GROUPNAME} == "" ]] && continue - if [[ ! ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then - DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:.*[^:]$/ s/$/,${SELECT_USERNAME}/" <<< ${DATA_FILE_GROUP}) - DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:.*:$/ s/$/${SELECT_USERNAME}/" <<< ${DATA_FILE_GROUP}) - fi - if [[ ! ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then - DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:.*[^:]$/ s/$/,${SELECT_USERNAME}/" <<< ${DATA_FILE_GSHADOW}) - DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:.*:$/ s/$/${SELECT_USERNAME}/" <<< ${DATA_FILE_GSHADOW}) - fi - done 4<<< ${SELECT_GROUPS//,/$'\n'} - done <<< ${SELECT_USERNAME_UID_LIST//,/$'\n'} - echo "${DATA_FILE_GROUP}" > "${FILE_GROUP}" - echo "${DATA_FILE_GSHADOW}" > "${FILE_GSHADOW}" -} - -# Удалить пользователя из групп /etc/group /etc/gshadow -# user_remove_group $1,$1,$1 $2,$2,$2,... -# $1 # Список имён пользователей и/или UID. Разделитель ',' -# # :,:,... -# $2 # Имена групп разделённых ',' -# # Если указано '%all' то все группы -# Пример: user_remove_group user-1 wheel,lp,disk -# Пример: user_remove_group user-1,user-2 wheel,lp,disk -# Пример: user_remove_group :1001 wheel,lp,disk -# Пример: user_remove_group user-1:1001 %all -user_remove_group(){ - local FILE_PASSWD="${ROOTFS}/etc/passwd" - local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) - local FILE_GROUP="${ROOTFS}/etc/group" - local FILE_GSHADOW="${ROOTFS}/etc/gshadow" - local DATA_FILE_GROUP=$(< ${FILE_GROUP}) - local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) - local SELECT_USERNAME_UID_LIST=$1 - local SELECT_GROUPS=$2 - local SELECT_USERNAME_UID= - while IFS= read -r SELECT_USERNAME_UID; do - [[ ${SELECT_USERNAME_UID} == "" ]] && continue - local SELECT_USERNAME= SELECT_UID= NULL= - IFS=: read -ru3 SELECT_USERNAME SELECT_UID NULL 3<<< "${SELECT_USERNAME_UID}" - if [[ ${SELECT_GROUPS} == '%all' ]]; then - DATA_FILE_GROUP=$(sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GROUP}) - DATA_FILE_GSHADOW=$(sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GSHADOW}) - else - # Ищем пользователя вначале по имени, после по UID - #[[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] - [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ - && SELECT_USERNAME=${BASH_REMATCH[2]} - # Если пользователя нет среди пользователей. Отключил, чтобы всех без проверки удалять. - #[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] || { >&2 echo "ERROR: user '${SELECT_USERNAME}' not found"; continue; } - [[ -n ${SELECT_GROUPS} ]] || { >&2 echo "ERROR: groups should not be empty"; return 1; } - #[[ ${SELECT_GROUPS} == '%all' ]] && SELECT_GROUPS=$(sed -En 's/^([^:]+):.*/\1/p' <<< ${DATA_FILE_GROUP}) #' - locale SELECT_GROUPNAME= - while IFS= read -ru4 SELECT_GROUPNAME; do - [[ ${SELECT_GROUPNAME} == "" ]] && continue - if [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then - DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME}$/:/g;\ - /^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME},/:/g;\ - /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME}$//g;\ - /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GROUP}) - fi - if [[ ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then - DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME}$/:/g;\ - /^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME},/:/g;\ - /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME}$//g;\ - /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GSHADOW}) - fi - done 4<<< "${SELECT_GROUPS//,/$'\n'}" - fi - done <<< "${SELECT_USERNAME_UID_LIST//,/$'\n'}" - echo "${DATA_FILE_GROUP}" > "${FILE_GROUP}" - echo "${DATA_FILE_GSHADOW}" > "${FILE_GSHADOW}" -} ##################################################################################### ### @@ -823,6 +217,8 @@ user_remove_group(){ ### ##################################################################################### +# External: ubl-settings-usergroups +# # Получить запись вида конфигурации USERADD из системного пользователя # Если системный пользователь имеет настройки аналогичные настройкам создаваемого пользователя через .sysusers, то не выводим # $1 # Опции не обязательные @@ -954,6 +350,8 @@ get_conf_useradd_from_system(){ done <<< "${PARAM_ALL// /$'\n'}" } +# External: ubl-settings-usergroups +# # Получить запись вида конфигурации USERSHADOW из системного пользователя: USERSHADOW[superadmin]='2024-03-06:0:99999:7::' # Если системный пользователь имеет настройки аналогичные настройкам создаваемого пользователя через .sysusers, то не выводим # $1 # Опции не обязательные @@ -1032,6 +430,8 @@ get_conf_usershadow_from_system(){ done <<< "${PARAM_ALL// /$'\n'}" } +# External: ubl-settings-usergroups +# # Получить запись вида конфигурации GROUPADD из систеных групп # Если системная группа имеет настройки аналогичные настройкам создаваемой группы через .sysusers, то не выводим # $1 # Опции не обязательные @@ -1170,53 +570,52 @@ get_de(){ ########################## debug_log(){ - if [[ $(< /proc/cmdline) =~ (^| )"debug"( |$) ]]; then - echo "- debug: $*" >&2 - log "- debug: $*" - fi + if [[ $(< /proc/cmdline) =~ (^| )"debug"( |$) ]]; then + echo "- debug: $*" >&2 + log "- debug: $*" + fi } log(){ - echo "$@" 2>/dev/null >>/var/log/ublinux.log + echo "$@" 2>/dev/null >> /var/log/ublinux.log } debug_mode(){ - if [[ $(cmdline_parameter debug) || ${DEBUGMODE} == "yes" ]]; then - name=$(basename $0) - slash="/" - [[ "$(pwd)" == "/union" ]] && slash="" - if [[ ! -f ${slash}var/log/ublinux/${name}.log ]]; then - echo "$0 -- debug mode enabled" - test -d ${slash}var/log/ublinux || mkdir -p ${slash}var/log/ublinux - echo $(date) > ${slash}var/log/ublinux/${name}.log || echo "can not create log file" - $0 "$@" 2>&1 | tee -a ${slash}var/log/ublinux/${name}.log - exit 0 - fi - fi + if [[ $(cmdline_parameter debug) || ${DEBUGMODE} == "yes" ]]; then + [[ -n ${SELF_FILE} && -n ${SELF_NAME} ]] || { local SELF_FILE=$0; local SELF_NAME=${0##*/}; } + [[ ${PWD} == "/union" ]] && local ROOTFS="." || local ROOTFS= + if [[ ! -f ${ROOTFS}/var/log/ublinux/${SELF_NAME}.log ]]; then + echo "${SELF_NAME} -- debug mode enabled" + [[ -d ${ROOTFS}/var/log/ublinux ]] || mkdir -p ${ROOTFS}/var/log/ublinux + echo $(date) > ${ROOTFS}/var/log/ublinux/${SELF_NAME}.log || echo "ERROR: Can not create log file" + ${SELF_FILE} "$@" 2>&1 | tee -a ${ROOTFS}/var/log/ublinux/${SELF_NAME}.log + exit 0 + fi + fi } echodebug(){ - [[ ${DEBUG_IS_ENABLED} || ${DEBUGMODE} == "yes" ]] && echo "$1" - if [[ -n "$2" ]]; then - command=$2 - shift; shift - if [[ -z $1 ]]; then - ${command} - else - ${command} "$@" + [[ ${DEBUG_IS_ENABLED} || ${DEBUGMODE} == "yes" ]] && echo "$1" + if [[ -n "$2" ]]; then + command=$2 + shift; shift + if [[ -z $1 ]]; then + ${command} + else + ${command} "$@" + fi fi - fi } +########################## +########################## + # Create module # call mksquashfs with apropriate arguments # $1 = directory which will be compressed to squashfs module # $2 = output filesystem module file # $3..$9 = optional arguments like -keep-as-directory or -b 123456789 create_module(){ - [[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } - SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 - SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null [[ $(< $@) =~ (^| )("-comp"|"-noD")( |$) ]] && MKSQFS_OPTS= @@ -1263,7 +662,7 @@ find_n_run_scripts(){ } allow_only_root(){ - [[ ${UID} == 0 ]] || { echo "Only root can run $(basename $0)"; exit 1; } + [[ ${UID} == 0 ]] || { echo "Only root can run ${SELF_NAME}"; exit 1; } } @@ -1668,15 +1067,26 @@ ubconfig_exec_system(){ ################ return 0 2>/dev/null && return 0 + + [[ -d ${SSC_EXTRACT_DIR} ]] && rm -rf "${SSC_EXTRACT_DIR}" + [[ -n ${SSC_ARGV0} ]] && { [[ -f /usr/bin/bash && && /usr/bin/bash --version | grep -q ^"GNU bash" || exit 1; } + [[ -z ${SELF_FILE} ]] && [[ -n ${SSC_ARGV0} ]] && SELF_FILE=${SSC_ARGV0} && SELF_NAME=${SSC_ARGV0##*/} && SELF_PATH=${SSC_ARGV0%/*} || { SELF_FILE=${0} && SELF_NAME=${0##*/} && SELF_PATH=${0%/*}; } + [[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } + SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 + SYSCONF="${ROOTFS}${SYSCONF}" + + #export TEXTDOMAINDIR="${ROOTFS}/usr/share/locale" + #export TEXTDOMAIN="ublinux_functions" + if [[ -z $@ ]]; then while read -r FUNCTION; do $"${FUNCTION##* }" done < <(declare -F | grep "declare -f exec_") else while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } fi - diff --git a/ublinux/rc.d/rc.desktop b/ublinux/rc.d/rc.desktop index d62b017..79c1a3d 100755 --- a/ublinux/rc.d/rc.desktop +++ b/ublinux/rc.d/rc.desktop @@ -15,15 +15,20 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null DE=$(get_de) cd "${HOME}" - for SCRIPT in /usr/lib/ublinux/rc.desktop/${DE}/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} & 2>/dev/null - done + + PATH_FIND="/usr/lib/ublinux/rc.desktop/${DE}" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) + RC_DESKTOP_NOEXEC=${RC_DESKTOP_NOEXEC//,/ }; RC_DESKTOP_NOEXEC=${RC_DESKTOP_NOEXEC//;/ } - for SCRIPT in /usr/lib/ublinux/rc.desktop/all/*; do - [[ ${RC_DESKTOP_NOEXEC} =~ (^| |/)"${SCRIPT##*/}"( |$) ]] && continue - [[ ${RC_DESKTOP_NOEXEC} =~ (^| |/)"${DE}:${SCRIPT##*/}"( |$) ]] && continue - [[ -x ${SCRIPT} ]] && ${SCRIPT} & 2>/dev/null - done + PATH_FIND="/usr/lib/ublinux/rc.desktop/all" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + [[ ${RC_DESKTOP_NOEXEC} =~ (^| |/)"${SELECT_FILE##*/}"( |$) ]] && continue + [[ ${RC_DESKTOP_NOEXEC} =~ (^| |/)"${DE}:${SELECT_FILE##*/}"( |$) ]] && continue + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) echo 1 > /run/ublinux_started diff --git a/ublinux/rc.d/rc.halt b/ublinux/rc.d/rc.halt index 795ddad..65b9f4d 100755 --- a/ublinux/rc.d/rc.halt +++ b/ublinux/rc.d/rc.halt @@ -9,8 +9,9 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } - for SCRIPT in /usr/lib/ublinux/rc.halt/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null - done + PATH_FIND="/usr/lib/ublinux/rc.halt" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.halt.pre b/ublinux/rc.d/rc.halt.pre index 490fdbe..0e820c0 100755 --- a/ublinux/rc.d/rc.halt.pre +++ b/ublinux/rc.d/rc.halt.pre @@ -9,8 +9,9 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } - for SCRIPT in /usr/lib/ublinux/rc.halt.pre/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null - done + PATH_FIND="/usr/lib/ublinux/rc.halt.pre" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.local b/ublinux/rc.d/rc.local index 8f593ac..96d5b2f 100755 --- a/ublinux/rc.d/rc.local +++ b/ublinux/rc.d/rc.local @@ -16,9 +16,10 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" - for SCRIPT in /usr/lib/ublinux/rc.local.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null & - done + PATH_FIND="/usr/lib/ublinux/rc.local.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) echo -ne > /run/ublinux_started chmod 664 /run/ublinux_started diff --git a/ublinux/rc.d/rc.network b/ublinux/rc.d/rc.network index 269c92c..e1cbc8c 100755 --- a/ublinux/rc.d/rc.network +++ b/ublinux/rc.d/rc.network @@ -16,8 +16,10 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" - for SCRIPT in /usr/lib/ublinux/rc.network.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null & - done + PATH_FIND="/usr/lib/ublinux/rc.network.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.pamaccount b/ublinux/rc.d/rc.pamaccount index 9d08c33..f4f2c29 100755 --- a/ublinux/rc.d/rc.pamaccount +++ b/ublinux/rc.d/rc.pamaccount @@ -13,8 +13,10 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - for SCRIPT in /usr/lib/ublinux/rc.pamaccount.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} & - done + PATH_FIND="/usr/lib/ublinux/rc.pamaccount.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.pamauth b/ublinux/rc.d/rc.pamauth index 72c543c..2f8a7c9 100755 --- a/ublinux/rc.d/rc.pamauth +++ b/ublinux/rc.d/rc.pamauth @@ -13,8 +13,10 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - for SCRIPT in /usr/lib/ublinux/rc.pamauth.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} & - done + PATH_FIND="/usr/lib/ublinux/rc.pamauth.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.pampassword b/ublinux/rc.d/rc.pampassword index 87736f9..a450864 100755 --- a/ublinux/rc.d/rc.pampassword +++ b/ublinux/rc.d/rc.pampassword @@ -13,8 +13,10 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - for SCRIPT in /usr/lib/ublinux/rc.pampassword.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} & - done + PATH_FIND="/usr/lib/ublinux/rc.pampassword.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.pamsession b/ublinux/rc.d/rc.pamsession index e2ae59d..06f2ce4 100755 --- a/ublinux/rc.d/rc.pamsession +++ b/ublinux/rc.d/rc.pamsession @@ -13,8 +13,10 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - for SCRIPT in /usr/lib/ublinux/rc.pamsession.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} & - done + PATH_FIND="/usr/lib/ublinux/rc.pamsession.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + #${SELECT_FILE} 2>/dev/null & + ${SELECT_FILE} & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.d/rc.post b/ublinux/rc.d/rc.post index d53dc40..3bbac98 100755 --- a/ublinux/rc.d/rc.post +++ b/ublinux/rc.d/rc.post @@ -12,21 +12,25 @@ DEBUGMODE=no SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" - for SCRIPT in /usr/lib/ublinux/rc.post.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null & - done - for SCRIPT in /usr/lib/ublinux/rc.post/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null - done + PATH_FIND="/usr/lib/ublinux/rc.post.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) + + PATH_FIND="/usr/lib/ublinux/rc.post" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) # We have to launch some rc scripts from external modules - LOCKDIR=/var/lock/ublinux/rc.runonce - [[ -d ${LOCKDIR} ]] || mkdir -p "${LOCKDIR}" - for SCRIPT in /usr/lib/ublinux/rc.runonce/*; do - [[ -f "${LOCKDIR}/$(basename ${SCRIPT})" || ! -x "${SCRIPT}" ]] && continue - ${SCRIPT} start 2>/dev/null - touch "${LOCKDIR}/${SCRIPT##*/}" - done + PATH_FIND="/usr/lib/ublinux/rc.runonce" + LOCKDIR="/var/lock/ublinux/rc.runonce" + [[ -d ${LOCKDIR} ]] || install -dm0700 "${LOCKDIR}" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + [[ -f "${LOCKDIR}/${SELECT_FILE##*/}" ]] && continue + ${SELECT_FILE} start 2>/dev/null + touch "${LOCKDIR}/${SELECT_FILE##*/}" + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) readlink -fq /usr/bin/init 2>/dev/null | grep -q "lib/systemd/systemd$" && wait diff --git a/ublinux/rc.d/rc.preinit b/ublinux/rc.d/rc.preinit index 7787f1f..7c76a77 100755 --- a/ublinux/rc.d/rc.preinit +++ b/ublinux/rc.d/rc.preinit @@ -8,25 +8,29 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } +DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -DEBUGMODE=no -. /liblinuxlive 2>/dev/null || . /mnt/live/liblinuxlive 2>/dev/null +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +SOURCE="/liblinuxlive" && [[ -r ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || SOURCE="/mnt/live/liblinuxlive" && [[ -r ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" -debug_log "Starting rc.preinit" -debug_shell + debug_log "Starting rc.preinit" + debug_shell # Install systemd services - [[ ! -h usr/lib/systemd/system/ublinux-postinit.service ]] && bash usr/lib/ublinux/rootfs-patches/ublinux/ublinux-00-install.sh - - for SCRIPT in usr/lib/ublinux/rc.preinit/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null - done - for SCRIPT in usr/lib/ublinux/rc.preinit.d/*; do - [[ -x ${SCRIPT} ]] && ${SCRIPT} 2>/dev/null & - done + [[ ! -h ${ROOTFS}/usr/lib/systemd/system/ublinux-postinit.service ]] && ${ROOTFS}/usr/lib/ublinux/rootfs-patches/ublinux/ublinux-00-install + + PATH_FIND="${ROOTFS}/usr/lib/ublinux/rc.preinit" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) + + PATH_FIND="${ROOTFS}/usr/lib/ublinux/rc.preinit.d" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + ${SELECT_FILE} 2>/dev/null & + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) wait true diff --git a/ublinux/rc.d/rc.xorg b/ublinux/rc.d/rc.xorg index 1263677..d31dfd4 100755 --- a/ublinux/rc.d/rc.xorg +++ b/ublinux/rc.d/rc.xorg @@ -9,8 +9,9 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } - for SCRIPT in /usr/lib/ublinux/rc.xorg/*; do - [[ -x ${SCRIPT} ]] && . ${SCRIPT} 2>/dev/null - done + PATH_FIND="/usr/lib/ublinux/rc.xorg" + while IFS= LC_ALL=C read -ru3 -d '' SELECT_FILE; do + . ${SELECT_FILE} 2>/dev/null + done 3< <(find "${PATH_FIND}" -type f -executable -print0 | sort -Vz) true diff --git a/ublinux/rc.desktop/all/pulseaudio b/ublinux/rc.desktop/all/pulseaudio index 4099138..73d0bf8 100755 --- a/ublinux/rc.desktop/all/pulseaudio +++ b/ublinux/rc.desktop/all/pulseaudio @@ -9,10 +9,8 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no . /usr/lib/ublinux/functions . /usr/lib/ublinux/default -debug_mode "$0" "$@" SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/hardware; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rc.desktop/all/ublinuxupdate b/ublinux/rc.desktop/all/ublinuxupdate index 40856d9..c83fa04 100755 --- a/ublinux/rc.desktop/all/ublinuxupdate +++ b/ublinux/rc.desktop/all/ublinuxupdate @@ -9,10 +9,8 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no . /usr/lib/ublinux/functions . /usr/lib/ublinux/default -debug_mode "$0" "$@" SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/update; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rc.desktop/deonly/cryptkeeper b/ublinux/rc.desktop/deonly/cryptkeeper index b95dc0b..d71af7f 100755 --- a/ublinux/rc.desktop/deonly/cryptkeeper +++ b/ublinux/rc.desktop/deonly/cryptkeeper @@ -15,5 +15,5 @@ ENABLED=no SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null - which $(basename $0) >/dev/null 2>&1 || exit 0 + which cryptkeeper >/dev/null 2>&1 || exit 0 [[ ${CRYPTKEEPERSTART} != "no" ]] && cryptkeeper & diff --git a/ublinux/rc.desktop/deonly/gnome-network-proxy-system b/ublinux/rc.desktop/deonly/gnome-network-proxy-system index 67ee7e3..b5d873e 100755 --- a/ublinux/rc.desktop/deonly/gnome-network-proxy-system +++ b/ublinux/rc.desktop/deonly/gnome-network-proxy-system @@ -9,7 +9,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 diff --git a/ublinux/rc.halt.pre/02-sysrq-sleepshutdown b/ublinux/rc.halt.pre/02-sysrq-sleepshutdown index 0a2be2b..5239d04 100755 --- a/ublinux/rc.halt.pre/02-sysrq-sleepshutdown +++ b/ublinux/rc.halt.pre/02-sysrq-sleepshutdown @@ -9,7 +9,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SYSCONF="${ROOTFS}${SYSCONF}" diff --git a/ublinux/rc.halt.pre/10-shutdown b/ublinux/rc.halt.pre/10-shutdown index b2bae33..f640d72 100755 --- a/ublinux/rc.halt.pre/10-shutdown +++ b/ublinux/rc.halt.pre/10-shutdown @@ -16,10 +16,9 @@ HALT_PROCESSES_KILL="" HALT_SERVICES_STOP="" HALT_EXCLUDE_STOP="" -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rc.halt.pre/20-grub b/ublinux/rc.halt.pre/20-grub index 2664f48..d07d19f 100755 --- a/ublinux/rc.halt.pre/20-grub +++ b/ublinux/rc.halt.pre/20-grub @@ -8,12 +8,12 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no +#DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +#debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null @@ -233,7 +233,8 @@ exec_grub_kernel_boot(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.halt.pre/25-accounts-sync b/ublinux/rc.halt.pre/25-accounts-sync index e836cd5..f95492b 100755 --- a/ublinux/rc.halt.pre/25-accounts-sync +++ b/ublinux/rc.halt.pre/25-accounts-sync @@ -10,12 +10,12 @@ shopt -s extglob ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no +#DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +#debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null @@ -270,7 +270,8 @@ exec_02_groupadd_sync(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.halt.pre/85-save-cache b/ublinux/rc.halt.pre/85-save-cache index d46a900..5041d29 100755 --- a/ublinux/rc.halt.pre/85-save-cache +++ b/ublinux/rc.halt.pre/85-save-cache @@ -8,12 +8,12 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no +#DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS="/sysroot"; CMD_CHROOT="chroot ${ROOTFS}"; } +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +#debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" diff --git a/ublinux/rc.halt.pre/86-save-rootcopy b/ublinux/rc.halt.pre/86-save-rootcopy index 331bc65..62a81ad 100755 --- a/ublinux/rc.halt.pre/86-save-rootcopy +++ b/ublinux/rc.halt.pre/86-save-rootcopy @@ -8,12 +8,12 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -DEBUGMODE=no +#DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +#debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null @@ -66,8 +66,8 @@ exec_save_sssd_rootcopy(){ [[ -f "${PATH_CHANGES}/etc/krb5.conf" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/krb5.conf" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/krb5.conf" 2>/dev/null [[ -f "${PATH_CHANGES}/etc/krb5.keytab" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/krb5.keytab" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/krb5.keytab" 2>/dev/null [[ -f "${PATH_CHANGES}/etc/realmd.conf" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/realmd.conf" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/realmd.conf" 2>/dev/null - [[ -d "${PATH_CHANGES}/etc/sssd" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/etc/sssd" "${PATH_ROOTCOPY}/etc/" 2>/dev/null || rm -rdf "${PATH_ROOTCOPY}/etc/sssd" 2>/dev/null - [[ -d "${PATH_CHANGES}/var/lib/sss" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/var/lib/sss" "${PATH_ROOTCOPY}/var/lib/" 2>/dev/null || rm -rdf "${PATH_ROOTCOPY}/var/lib/sss" 2>/dev/null + [[ -d "${PATH_CHANGES}/etc/sssd" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/etc/sssd" "${PATH_ROOTCOPY}/etc/" 2>/dev/null || rm -rf "${PATH_ROOTCOPY}/etc/sssd" 2>/dev/null + [[ -d "${PATH_CHANGES}/var/lib/sss" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/var/lib/sss" "${PATH_ROOTCOPY}/var/lib/" 2>/dev/null || rm -rf "${PATH_ROOTCOPY}/var/lib/sss" 2>/dev/null # cd ${PATH_CHANGES} # find etc/ -type f -name "krb5.conf" -exec install -CDm644 {} ${PATH_ROOTCOPY}/{} \; diff --git a/ublinux/rc.local.d/20-pwgr-check b/ublinux/rc.local.d/20-pwgr-check index 671a10f..c3d5d44 100755 --- a/ublinux/rc.local.d/20-pwgr-check +++ b/ublinux/rc.local.d/20-pwgr-check @@ -58,7 +58,8 @@ exec_check_user_group(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.local.d/31-sound b/ublinux/rc.local.d/31-sound index 34e627a..c8e037f 100755 --- a/ublinux/rc.local.d/31-sound +++ b/ublinux/rc.local.d/31-sound @@ -4,7 +4,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.local.d/40-pacman b/ublinux/rc.local.d/40-pacman index 56a8462..39cec9e 100755 --- a/ublinux/rc.local.d/40-pacman +++ b/ublinux/rc.local.d/40-pacman @@ -15,7 +15,7 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" exec_01_init_pacman_gpg(){ - /usr/bin/pacman-key -l &>/dev/null 2>&1 || rm -rdf /etc/pacman.d/gnupg + /usr/bin/pacman-key -l &>/dev/null 2>&1 || rm -rf /etc/pacman.d/gnupg pacman-key --init &>/dev/null pacman-key --populate $(ls /usr/share/pacman/keyrings/*.gpg | sed 's%.*/%%;s%\.[^.]*$%%') &>/dev/null #usr/bin/pacman-key --updatedb diff --git a/ublinux/rc.local.d/43-repository b/ublinux/rc.local.d/43-repository index 01460f9..5708fc4 100755 --- a/ublinux/rc.local.d/43-repository +++ b/ublinux/rc.local.d/43-repository @@ -308,13 +308,13 @@ exec_03_repopublic_web(){ elif [[ ${SELECT_STATUS} == @("disable"|"no"|"none") ]]; then kill_web_service "${REPOPUBLIC_WEB_PATH}" umount "${PATH_NEW_REPOPUBLIC_WEB_PATH}"/* 2>/dev/null - rm -rdf "${PATH_NEW_REPOPUBLIC_WEB_PATH}" + rm -rf "${PATH_NEW_REPOPUBLIC_WEB_PATH}" fi done 3< <(printf "%s\n" "${!REPOPUBLIC_WEB[@]}") elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then kill_web_service umount "${PATH_NEW_REPOPUBLIC_WEB_PATH}"/* 2>/dev/null - rm -rdf "${PATH_NEW_REPOPUBLIC_WEB_PATH}" + rm -rf "${PATH_NEW_REPOPUBLIC_WEB_PATH}" fi } @@ -339,7 +339,7 @@ exec_03_repopublic_ftp(){ } ## pacoloco (https://github.com/anatol/pacoloco) -## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. +## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. ## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю. ## REPOPUBLIC_CACHE=enable|yes|disable|no|none ## enable|yes # Включить ленивое зеркало @@ -347,9 +347,9 @@ exec_03_repopublic_ftp(){ ## ## Если задано только "REPOPUBLIC_CACHE=enable" без указания рпозиториев пользователем, то создаётся зеркало по умолчанию, где "2204" версия текущего дистрибутива: ## : REPOPUBLIC_CACHE[ublinux_2405]=url@http://repo.ublinux.ru/2405,url@https://repo.ublinux.ru/2405 -## На клиенте необходимо указать: -## либо в файле "/etc/pacman.conf" у каждого репозитория: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch -## либо в файле "/etc/pacman.d/mirrorlist" для всех репозиториев: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch +## На клиенте необходимо указать: +## либо в файле "/etc/pacman.conf" у каждого репозитория: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch +## либо в файле "/etc/pacman.d/mirrorlist" для всех репозиториев: Server=http://ipadress:8080/repo/ublinux_2204/$repo/$arch ## либо параметры в конфигурации REPOSITORY[core]='http://ipadress:8080/repo/ublinux_2204/$repo/$arch' ## ## REPOPUBLIC_CACHE[]= @@ -624,7 +624,7 @@ exec_remove_duplicated_pacman(){ local PKG_PACMAN_DB_OLD=() local PKG_PACMAN_DB_NEW=() # Из всех дубликатов приложений в базе pacman удалить старые версии - #cd ${PATH_PACMAN_DB}; rm -rdf $(ls -1vr ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #' + #cd ${PATH_PACMAN_DB}; rm -rf $(ls -1vr ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #' readarray -t PKG_PACMAN_DB_OLD < <(ls -1vr ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #' readarray -t PKG_PACMAN_DB_NEW < <(ls -1v ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #' # Индексы позиций имени пакетов в массиве одинаковые, только разные версии @@ -634,11 +634,11 @@ exec_remove_duplicated_pacman(){ if [[ -d "/memory/changes/${PATH_PACMAN_DB}/${PKG_PACMAN_DB_NEW[${PKG_PACMAN_DB}]}" ]]; then # Если новые пакет находится в самом низком слое /changes/, то значит и файлы данных пакеты будут новые # Следует удалить старое имя пакета из корня - rm -rdf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_OLD[${PKG_PACMAN_DB}]}" + rm -rf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_OLD[${PKG_PACMAN_DB}]}" elif [[ -d "/memory/changes/${PATH_PACMAN_DB}/${PKG_PACMAN_DB_OLD[${PKG_PACMAN_DB}]}" ]]; then # Если старый пакет находится в самом низком слое /changes/, то значит и файлы данных пакеты будут старые, не смотря на новизну модуля # Следует удалить новое имя пакета из корня - rm -rdf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_NEW[${PKG_PACMAN_DB}]}" + rm -rf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_NEW[${PKG_PACMAN_DB}]}" else # В нижнем слое /changes/ нет пакета, значит оба пакета и старый и новый находятся в модулях # Сравниваем номера слоёв старого и нового пакета и удяляем имя пакета в более высоком слое, который перекрывается более низким слоем @@ -652,9 +652,9 @@ exec_remove_duplicated_pacman(){ if [[ -n ${AUFS_BUNDLE_PKG_NEW_NUM} && -n ${AUFS_BUNDLE_PKG_OLD_NUM} ]]; then # Принудительно указываем, что числа в десятичной системе исчисления $((10#${})) if [[ $((10#${AUFS_BUNDLE_PKG_NEW_NUM})) -lt $((10#${AUFS_BUNDLE_PKG_OLD_NUM})) ]]; then - rm -rdf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_OLD[${PKG_PACMAN_DB}]}" + rm -rf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_OLD[${PKG_PACMAN_DB}]}" else - rm -rdf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_NEW[${PKG_PACMAN_DB}]}" + rm -rf "${PATH_PACMAN_DB}/${PKG_PACMAN_DB_NEW[${PKG_PACMAN_DB}]}" fi fi fi @@ -677,7 +677,8 @@ exec_remove_duplicated_pacman(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.local.d/50-update-cache-gtk-icon b/ublinux/rc.local.d/50-update-cache-gtk-icon index 8db0fbb..58169e0 100755 --- a/ublinux/rc.local.d/50-update-cache-gtk-icon +++ b/ublinux/rc.local.d/50-update-cache-gtk-icon @@ -19,5 +19,5 @@ debug_mode "$0" "$@" #[[ ${UPDATE_GTK_ICON_CACHE} != "no" ] && [[ -d "/usr/share/icons/hicolor/" ]] && gtk-update-icon-cache ${UPDATE_GTK_ICON_OPTS} >/dev/null 2>&1 [[ ${UPDATE_GTK_ICON_CACHE} != "no" ]] && find /usr/share/icons -mindepth 1 -maxdepth 1 -type d | while read -r THEME; do - [[ -f "${THEME}/index.theme" ] && gtk-update-icon-cache -f -q "${THEME}" 2>/dev/null + [[ -f "${THEME}/index.theme" ]] && gtk-update-icon-cache -f -q "${THEME}" 2>/dev/null done \ No newline at end of file diff --git a/ublinux/rc.local.d/50-update-desktop-database b/ublinux/rc.local.d/50-update-desktop-database index b91c1d2..dca5a31 100755 --- a/ublinux/rc.local.d/50-update-desktop-database +++ b/ublinux/rc.local.d/50-update-desktop-database @@ -10,11 +10,9 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -#. /usr/lib/ublinux/functions -#. /usr/lib/ublinux/default debug_mode "$0" "$@" if [[ -d "/usr/share/applications/" || -d "/usr/local/share/applications/" ]]; then - touch /usr/share/applications/screensavers + UPDATE_FILE="/usr/share/applications/ubhwreport.desktop" && [[ -f ${UPDATE_FILE} ]] && touch ${UPDATE_FILE} update-desktop-database -q 2>/dev/null fi diff --git a/ublinux/rc.local.d/51-mozilla_extensions b/ublinux/rc.local.d/51-mozilla_extensions index 2411a81..b2b0c11 100755 --- a/ublinux/rc.local.d/51-mozilla_extensions +++ b/ublinux/rc.local.d/51-mozilla_extensions @@ -4,7 +4,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 diff --git a/ublinux/rc.local.d/52-consolesetup b/ublinux/rc.local.d/52-consolesetup index 8c395c6..0512b77 100755 --- a/ublinux/rc.local.d/52-consolesetup +++ b/ublinux/rc.local.d/52-consolesetup @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == yes ]] || exit 0 DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 diff --git a/ublinux/rc.local.d/98-ubpile b/ublinux/rc.local.d/98-ubpile index 3ed68cd..8bf3800 100755 --- a/ublinux/rc.local.d/98-ubpile +++ b/ublinux/rc.local.d/98-ubpile @@ -129,7 +129,7 @@ exec_02_ubpile(){ [[ -n ${UBPILE_DB[0]} ]] || local UBPILE_DB="fs" case ${UBPILE_DB[0]} in fs) - [[ -d ${PATH_UBPILE}/data ]] && rm -rdf ${PATH_UBPILE}/data + [[ -d ${PATH_UBPILE}/data ]] && rm -rf ${PATH_UBPILE}/data ;; sqlite) cd ${PATH_UBPILE} @@ -314,7 +314,8 @@ message_motd(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.network.d/10-network b/ublinux/rc.network.d/10-network index bfcf5c8..755a702 100755 --- a/ublinux/rc.network.d/10-network +++ b/ublinux/rc.network.d/10-network @@ -110,7 +110,8 @@ exec_network(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.network.d/81-samba b/ublinux/rc.network.d/81-samba index a103124..46621c6 100755 --- a/ublinux/rc.network.d/81-samba +++ b/ublinux/rc.network.d/81-samba @@ -5,9 +5,9 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. -SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +ROOTFS= +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rc.network.d/90-ublinuxupdate b/ublinux/rc.network.d/90-ublinuxupdate index 52adc06..9194257 100755 --- a/ublinux/rc.network.d/90-ublinuxupdate +++ b/ublinux/rc.network.d/90-ublinuxupdate @@ -11,9 +11,9 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. -SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +ROOTFS= +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rc.pamsession.d/01-placeondesktop b/ublinux/rc.pamsession.d/01-placeondesktop index 4b423e1..4bbf5ab 100755 --- a/ublinux/rc.pamsession.d/01-placeondesktop +++ b/ublinux/rc.pamsession.d/01-placeondesktop @@ -394,7 +394,8 @@ remove_desktop(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.pamsession.d/02-journald-notify b/ublinux/rc.pamsession.d/02-journald-notify index b9d1466..2c84c75 100755 --- a/ublinux/rc.pamsession.d/02-journald-notify +++ b/ublinux/rc.pamsession.d/02-journald-notify @@ -135,10 +135,10 @@ exec_01_journald_notify(){ [[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}" fi if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#JOURNALD_NOTIFY[@]} -ne 0 ]]; then - local TYPE= TYPE_VOLUE= PRIORITY= OPTIONS= FILTER= + local TYPE= TYPE_VALUE= PRIORITY= OPTIONS= FILTER= for SELECT_JOURNALD_NOTIFY in "${!JOURNALD_NOTIFY[@]}"; do - IFS=: read -r TYPE TYPE_VOLUE PRIORITY OPTIONS NULL <<< ${SELECT_JOURNALD_NOTIFY} - [[ -n ${TYPE} && -n ${TYPE_VOLUE} ]] || continue + IFS=: read -r TYPE TYPE_VALUE PRIORITY OPTIONS NULL <<< ${SELECT_JOURNALD_NOTIFY} + [[ -n ${TYPE} && -n ${TYPE_VALUE} ]] || continue case "${TYPE,,}" in "u") TYPE="--unit" ;; "uu") TYPE="--user-unit" ;; @@ -146,11 +146,11 @@ exec_01_journald_notify(){ "f") TYPE="--facility" ;; *) continue ;; esac - [[ ${TYPE} == "--facility" ]] && { [[ ${TYPE_VOLUE,,} == @(0|kern|1|user|2|mail|3|daemon|4|auth|5|syslog|6|lpr|7|news|8|uucp|9|10|authpriv|11|ftp|12|13|14|15|cron|16|local0|17|local1|18|local2|19|local3|20|local4|21|local5|22|local6|23|local7) ]] || continue; } + [[ ${TYPE} == "--facility" ]] && { [[ ${TYPE_VALUE,,} == @(0|kern|1|user|2|mail|3|daemon|4|auth|5|syslog|6|lpr|7|news|8|uucp|9|10|authpriv|11|ftp|12|13|14|15|cron|16|local0|17|local1|18|local2|19|local3|20|local4|21|local5|22|local6|23|local7) ]] || continue; } [[ -n ${PRIORITY} && ${PRIORITY} == @(0|emerg|1|alert|2|crit|3|err|4|warning|5|notice|6|info|7|debug) ]] && PRIORITY="--priority ${PRIORITY}" FILTER=${JOURNALD_NOTIFY[${SELECT_JOURNALD_NOTIFY}]} - pkill -f "/usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live ${TYPE} ${TYPE_VOLUE} ${PRIORITY} ${OPTIONS} ${FILTER}" - setsid -f /usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live "${TYPE}" "${TYPE_VOLUE}" "${PRIORITY}" "${OPTIONS}" "${FILTER}" + pkill -f "/usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live ${TYPE} ${TYPE_VALUE} ${PRIORITY} ${OPTIONS} ${FILTER}" + setsid -f /usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live "${TYPE}" "${TYPE_VALUE}" "${PRIORITY}" "${OPTIONS}" "${FILTER}" if [[ ${FILTER} =~ (^|,)"ip@conflict"(,|$) ]]; then # Включить таймаут обнаружения конфликтов IP на всех сетевых интерфейсах [[ ${NETWORK[all@connmod]} =~ "ipv4.dad-timeout -1" ]] || ubconfig --quiet --target system set [network] NETWORK[all@connmod]+=" ipv4.dad-timeout -1" @@ -161,10 +161,10 @@ exec_01_journald_notify(){ PARAM_VALUE="${PARAM#*=}" JOURNALD_NOTIFY+="${PARAM_VALUE// /,}" fi - local TYPE= TYPE_VOLUE= PRIORITY= OPTIONS= FILTER= + local TYPE= TYPE_VALUE= PRIORITY= OPTIONS= FILTER= for SELECT_JOURNALD_NOTIFY in "${!JOURNALD_NOTIFY[@]}"; do - IFS=: read -r TYPE TYPE_VOLUE PRIORITY OPTIONS NULL <<< ${SELECT_JOURNALD_NOTIFY} - [[ -n ${TYPE} && -n ${TYPE_VOLUE} ]] || continue + IFS=: read -r TYPE TYPE_VALUE PRIORITY OPTIONS NULL <<< ${SELECT_JOURNALD_NOTIFY} + [[ -n ${TYPE} && -n ${TYPE_VALUE} ]] || continue case "${TYPE,,}" in "u") TYPE="--unit" ;; "uu") TYPE="--user-unit" ;; @@ -172,10 +172,10 @@ exec_01_journald_notify(){ "f") TYPE="--facility" ;; *) continue ;; esac - [[ ${TYPE} == "--facility" ]] && { [[ ${TYPE_VOLUE,,} == @(0|kern|1|user|2|mail|3|daemon|4|auth|5|syslog|6|lpr|7|news|8|uucp|9|10|authpriv|11|ftp|12|13|14|15|cron|16|local0|17|local1|18|local2|19|local3|20|local4|21|local5|22|local6|23|local7) ]] || continue; } + [[ ${TYPE} == "--facility" ]] && { [[ ${TYPE_VALUE,,} == @(0|kern|1|user|2|mail|3|daemon|4|auth|5|syslog|6|lpr|7|news|8|uucp|9|10|authpriv|11|ftp|12|13|14|15|cron|16|local0|17|local1|18|local2|19|local3|20|local4|21|local5|22|local6|23|local7) ]] || continue; } [[ -n ${PRIORITY} && ${PRIORITY} == @(0|emerg|1|alert|2|crit|3|err|4|warning|5|notice|6|info|7|debug) ]] && PRIORITY="--priority ${PRIORITY}" FILTER=${JOURNALD_NOTIFY[${SELECT_JOURNALD_NOTIFY}]} - pkill -f "/usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live ${TYPE} ${TYPE_VOLUE} ${PRIORITY} ${OPTIONS} ${FILTER}" + pkill -f "/usr/lib/ublinux/rc.pamsession.d/02-journald-notify ubconfig_journald_notify_live ${TYPE} ${TYPE_VALUE} ${PRIORITY} ${OPTIONS} ${FILTER}" if [[ ${FILTER} =~ (^|,)"ip@conflict"(,|$) ]]; then # Выключить таймаут обнаружения конфликтов IP на всех сетевых интерфейсах [[ ${NETWORK[all@connmod]} =~ "ipv4.dad-timeout -1" ]] && ubconfig --quiet --target system set [network] NETWORK[all@connmod]-="ipv4.dad-timeout -1" @@ -185,7 +185,7 @@ exec_01_journald_notify(){ } ubconfig_journald_notify_live(){ - local TYPE=$1 TYPE_VOLUE=$2 PRIORITY=$3 OPTIONS=$4 FILTER=$5 + local TYPE=$1 TYPE_VALUE=$2 PRIORITY=$3 OPTIONS=$4 FILTER=$5 NOTIFY_ICON="--icon dialog-information --urgency=normal" init(){ export TEXTDOMAIN="ublinux-init-${0##*/}" @@ -242,7 +242,7 @@ ubconfig_journald_notify_live(){ done 3<<< ${FILTER//,/$'\n'} } init - journalctl ${TYPE} "${TYPE_VOLUE}" ${PRIORITY} --no-hostname --lines 1 --output export --follow ${OPTIONS} | while IFS= read SELECT_JOURNAL_ITEM; do + journalctl ${TYPE} "${TYPE_VALUE}" ${PRIORITY} --no-hostname --lines 1 --output export --follow ${OPTIONS} | while IFS= read SELECT_JOURNAL_ITEM; do [[ ${SELECT_JOURNAL_ITEM} =~ ($'\n'|^)+"PRIORITY="([^$'\n']*)($'\n'|$)+ ]] && case ${BASH_REMATCH[2]} in 0|emerg) NOTIFY_ICON="--icon dialog-error --urgency=critical" ;; 1|alert) NOTIFY_ICON="--icon dialog-error --urgency=critical" ;; @@ -272,8 +272,8 @@ ubconfig_journald_notify_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" shift done diff --git a/ublinux/rc.pamsession.d/03-certmonger-cepces b/ublinux/rc.pamsession.d/03-certmonger-cepces index 2e6a567..afffb28 100755 --- a/ublinux/rc.pamsession.d/03-certmonger-cepces +++ b/ublinux/rc.pamsession.d/03-certmonger-cepces @@ -104,8 +104,8 @@ ubconfig_certmonger_cepces_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" shift done diff --git a/ublinux/rc.pamsession.d/04-user-locale b/ublinux/rc.pamsession.d/04-user-locale index c01c511..7b873b7 100755 --- a/ublinux/rc.pamsession.d/04-user-locale +++ b/ublinux/rc.pamsession.d/04-user-locale @@ -116,8 +116,8 @@ exec_01_user_locale(){ else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" shift done diff --git a/ublinux/rc.post.d/01-system b/ublinux/rc.post.d/01-system index 856243d..cf98de7 100755 --- a/ublinux/rc.post.d/01-system +++ b/ublinux/rc.post.d/01-system @@ -10,11 +10,11 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" -[[ -d /memory/run ]] && cp -fr /memory/run/* /run/ && rm -rdf /memory/run +[[ -d /memory/run ]] && cp -fr /memory/run/* /run/ && rm -rf /memory/run [[ -f /etc/sysctl.conf ]] && sysctl -p /etc/sysctl.conf [[ -f /etc/sysctl.d/ublinux.conf ]] && sysctl -p /etc/sysctl.d/ublinux.conf diff --git a/ublinux/rc.post.d/02-hwclock b/ublinux/rc.post.d/02-hwclock index 6c8975c..869a39a 100755 --- a/ublinux/rc.post.d/02-hwclock +++ b/ublinux/rc.post.d/02-hwclock @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/03-modprobepreload b/ublinux/rc.post.d/03-modprobepreload index 14f41d9..6b47560 100755 --- a/ublinux/rc.post.d/03-modprobepreload +++ b/ublinux/rc.post.d/03-modprobepreload @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/09-automount b/ublinux/rc.post.d/09-automount index 94ef0d9..f736a68 100755 --- a/ublinux/rc.post.d/09-automount +++ b/ublinux/rc.post.d/09-automount @@ -12,7 +12,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/10-brand-backgrounds b/ublinux/rc.post.d/10-brand-backgrounds index 2dfa8dd..d976318 100755 --- a/ublinux/rc.post.d/10-brand-backgrounds +++ b/ublinux/rc.post.d/10-brand-backgrounds @@ -52,7 +52,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -426,7 +426,7 @@ insert_background_icon(){ build_background_all build_background_de # Изменение разрешения фонов DM DE - case ${fname_ratio} in + case ${fname_ratio} in "4:3" | "5:4" | "16:10" ) # Изменить размер по высоте (hight) for filename in ${wp_de_filename} ${wp_dm_filename}; do convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}" @@ -441,12 +441,12 @@ insert_background_icon(){ convert -crop x${hight}+0+$crop_top "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}" done ;; - "16:9") # Изменить размер пропорционально + "16:9") # Изменить размер пропорционально for filename in ${wp_de_filename} ${wp_dm_filename}; do convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}" done ;; - *) # Изменить размер пропорционально + *) # Изменить размер пропорционально for filename in ${wp_de_filename} ${wp_dm_filename}; do convert -resize x${hight} "${wallpapers_tmp}/${filename}" "${wallpapers_tmp}/${filename}" done @@ -481,5 +481,5 @@ insert_background_icon(){ insert_background_icon ${img_nosave} fi fi - [[ -n ${BUILD_MANUAL} ]] || rm -rdf ${wallpapers_tmp} + [[ -n ${BUILD_MANUAL} ]] || rm -rf ${wallpapers_tmp} \ No newline at end of file diff --git a/ublinux/rc.post.d/11-xorg b/ublinux/rc.post.d/11-xorg index d611697..ca4f491 100755 --- a/ublinux/rc.post.d/11-xorg +++ b/ublinux/rc.post.d/11-xorg @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -239,8 +239,8 @@ ${SET_SECTION}EndSection else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" shift done diff --git a/ublinux/rc.post.d/12-dm-background b/ublinux/rc.post.d/12-dm-background index 652fc4a..7ce233a 100755 --- a/ublinux/rc.post.d/12-dm-background +++ b/ublinux/rc.post.d/12-dm-background @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/13-dconf b/ublinux/rc.post.d/13-dconf index c90d280..06e900f 100755 --- a/ublinux/rc.post.d/13-dconf +++ b/ublinux/rc.post.d/13-dconf @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -23,12 +23,12 @@ DCONF_PROFILE_USER="/etc/dconf/profile/user" exec_dconf(){ ## Настрока dconf профилей - [[ -d ${DCONF_PROFILE_USER%/*} ]] || install -dm0755 ${DCONF_PROFILE_USER%/*} + [[ -d ${DCONF_PROFILE_USER%/*} ]] || install -dm0755 ${DCONF_PROFILE_USER%/*} [[ -f ${DCONF_PROFILE_USER} ]] && grep -Fxq "user-db:user" ${DCONF_PROFILE_USER} &>/dev/null || echo "user-db:user" >> ${DCONF_PROFILE_USER} while IFS= read -r -d '' FIND_DCONF_DB; do FIND_DCONF_DB=${FIND_DCONF_DB##*/}; FIND_DCONF_DB=${FIND_DCONF_DB%*.d} grep -Fxq "system-db:${FIND_DCONF_DB}" ${DCONF_PROFILE_USER} &>/dev/null || echo "system-db:${FIND_DCONF_DB}" >> ${DCONF_PROFILE_USER} - done < <(find ${DCONF_DB} -type d -iname "*.d" -print0) + done < <(find ${DCONF_DB} -type d -iname "*.d" -print0 | sort -Vz) } ################ diff --git a/ublinux/rc.post.d/16-kiosk-desktop b/ublinux/rc.post.d/16-kiosk-desktop index 4ba798d..e3ba2ea 100755 --- a/ublinux/rc.post.d/16-kiosk-desktop +++ b/ublinux/rc.post.d/16-kiosk-desktop @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/17-kiosk-gtk b/ublinux/rc.post.d/17-kiosk-gtk index 151e21b..e04648a 100755 --- a/ublinux/rc.post.d/17-kiosk-gtk +++ b/ublinux/rc.post.d/17-kiosk-gtk @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc b/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc index 3093334..6672410 100755 --- a/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc +++ b/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/20-initrd b/ublinux/rc.post.d/20-initrd index 55cea08..e5a6e8d 100755 --- a/ublinux/rc.post.d/20-initrd +++ b/ublinux/rc.post.d/20-initrd @@ -10,7 +10,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/23-publicdir b/ublinux/rc.post.d/23-publicdir index 9cf7604..d791c29 100755 --- a/ublinux/rc.post.d/23-publicdir +++ b/ublinux/rc.post.d/23-publicdir @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/24-samba-usershares b/ublinux/rc.post.d/24-samba-usershares index d70872f..774e729 100755 --- a/ublinux/rc.post.d/24-samba-usershares +++ b/ublinux/rc.post.d/24-samba-usershares @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/30-network b/ublinux/rc.post.d/30-network index bd6a541..9290aa6 100755 --- a/ublinux/rc.post.d/30-network +++ b/ublinux/rc.post.d/30-network @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/35-soundprofile b/ublinux/rc.post.d/35-soundprofile index e7576f9..10ca189 100755 --- a/ublinux/rc.post.d/35-soundprofile +++ b/ublinux/rc.post.d/35-soundprofile @@ -4,7 +4,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/42-access-suid-sgid b/ublinux/rc.post.d/42-access-suid-sgid index 19ced49..476d336 100755 --- a/ublinux/rc.post.d/42-access-suid-sgid +++ b/ublinux/rc.post.d/42-access-suid-sgid @@ -12,7 +12,7 @@ DEBUGMODE=no SELF_NAME="42-access-suid-sgid" -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -59,7 +59,8 @@ exec_access_allowed_sgid(){ # declare -f ${FUNCTION} &>/dev/null && ${FUNCTION} # done while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.post.d/43-access-exec b/ublinux/rc.post.d/43-access-exec index 74498c1..8758762 100755 --- a/ublinux/rc.post.d/43-access-exec +++ b/ublinux/rc.post.d/43-access-exec @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/44-mountattr b/ublinux/rc.post.d/44-mountattr index ac01b95..0b8cd4a 100755 --- a/ublinux/rc.post.d/44-mountattr +++ b/ublinux/rc.post.d/44-mountattr @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/45-disk-quota b/ublinux/rc.post.d/45-disk-quota index ff9ebb1..75527d2 100755 --- a/ublinux/rc.post.d/45-disk-quota +++ b/ublinux/rc.post.d/45-disk-quota @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/46-cgroup-quota b/ublinux/rc.post.d/46-cgroup-quota index 1f79348..a106b82 100755 --- a/ublinux/rc.post.d/46-cgroup-quota +++ b/ublinux/rc.post.d/46-cgroup-quota @@ -10,7 +10,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/50-update-fonts b/ublinux/rc.post.d/50-update-fonts index fb06c09..8c2b7e9 100755 --- a/ublinux/rc.post.d/50-update-fonts +++ b/ublinux/rc.post.d/50-update-fonts @@ -10,7 +10,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/51-theme b/ublinux/rc.post.d/51-theme index 3869586..13ad2f5 100755 --- a/ublinux/rc.post.d/51-theme +++ b/ublinux/rc.post.d/51-theme @@ -10,7 +10,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.post.d/60-blacklistdkms b/ublinux/rc.post.d/60-blacklistdkms index 7efd436..0ce1ffa 100755 --- a/ublinux/rc.post.d/60-blacklistdkms +++ b/ublinux/rc.post.d/60-blacklistdkms @@ -10,7 +10,7 @@ ENABLED=no [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +ROOTFS= SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/01-depmod b/ublinux/rc.preinit.d/01-depmod index 9d24271..c5f3df1 100755 --- a/ublinux/rc.preinit.d/01-depmod +++ b/ublinux/rc.preinit.d/01-depmod @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/02-modulespreload b/ublinux/rc.preinit.d/02-modulespreload index 5bb1058..46ef09a 100755 --- a/ublinux/rc.preinit.d/02-modulespreload +++ b/ublinux/rc.preinit.d/02-modulespreload @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 @@ -30,12 +30,12 @@ SOURCE=${SYSCONF}/hardware; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null exec_modulespreload(){ for SELECT_MODULE in ${MODULES_PRELOAD//,/ }; do - [[ ${BLACK_LIST_MODULES} =~ (^|,|;)${SELECT_MODULE}(,|;|$) || ${CMD_CHROOT} modprobe ${SELECT_MODULE} + [[ ${BLACK_LIST_MODULES} =~ (^|,|;)${SELECT_MODULE}(,|;|$) ]] || ${CMD_CHROOT} modprobe ${SELECT_MODULE} done BLACK_LIST="${ROOTFS}/etc/modprobe.d/blacklist-ublinux.conf" for SELECT_MODULE in ${MODULES_BLACKLIST//,/ }; do - [[ $(< ${BLACK_LIST}) =~ (^|$'\n')"blacklist ${SELECT_MODULE}"($'\n'|$) ]] || echo "blacklist ${SELECT_MODULE}" >> ${BLACK_LIST} + [[ $(< ${BLACK_LIST}) =~ (^|$'\n')"blacklist ${SELECT_MODULE}"($'\n'|$) ]] || echo "blacklist ${SELECT_MODULE}" >> ${BLACK_LIST} done } diff --git a/ublinux/rc.preinit.d/03-ldconfig b/ublinux/rc.preinit.d/03-ldconfig index 2c71118..a8ddee6 100755 --- a/ublinux/rc.preinit.d/03-ldconfig +++ b/ublinux/rc.preinit.d/03-ldconfig @@ -14,7 +14,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/04-update-fonts b/ublinux/rc.preinit.d/04-update-fonts index 807c1ab..44e3c0e 100755 --- a/ublinux/rc.preinit.d/04-update-fonts +++ b/ublinux/rc.preinit.d/04-update-fonts @@ -16,35 +16,40 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" exec_update_font_cache(){ for FONT_PATH in ${ROOTFS}/usr/share/fonts{,/default}/TTF ${ROOTFS}/usr/X11R6/lib/X11/fonts/TTF; do - if [[ -d "${FONT_PATH}" ]]; then - ${CMD_CHROOT} /usr/bin/mkfontscale ${FONT_PATH} - ${CMD_CHROOT} /usr/bin/mkfontdir ${FONT_PATH} - fi + if [[ -d "${FONT_PATH}" ]]; then + ${CMD_CHROOT} /usr/bin/mkfontscale ${FONT_PATH/${ROOTFS}/} + ${CMD_CHROOT} /usr/bin/mkfontdir ${FONT_PATH/${ROOTFS}/} + fi done ${CMD_CHROOT} /usr/bin/fc-cache -s 2>&1 &>/dev/null } exec_update_font_cache_live(){ - for FONT_PATH in ${ROOTFS}/usr/share/fonts/*; do - if [[ -d "${FONT_PATH}" ]]; then - xset +fp "${FONT_PATH}" 2>&1 &>/dev/null - ${CMD_CHROOT} /usr/bin/mkfontscale ${FONT_PATH} - ${CMD_CHROOT} /usr/bin/mkfontdir ${FONT_PATH} - fi - done - xset fp rehash 2>&1 &>/dev/null + if [[ -z ${ROOTFS} ]]; then + for FONT_PATH in /usr/share/fonts/*; do + if [[ -d "${FONT_PATH}" ]]; then + xset +fp "${FONT_PATH}" 2>&1 &>/dev/null + /usr/bin/mkfontscale ${FONT_PATH} + /usr/bin/mkfontdir ${FONT_PATH} + fi + done + xset fp rehash 2>&1 &>/dev/null + fi } ################ ##### MAIN ##### ################ - exec_update_font_cache - #exec_update_font_cache_live + if [[ -n ${ROOTFS} ]]; then + exec_update_font_cache + else + exec_update_font_cache_live + fi diff --git a/ublinux/rc.preinit.d/10-system b/ublinux/rc.preinit.d/10-system index 496b270..b30075b 100755 --- a/ublinux/rc.preinit.d/10-system +++ b/ublinux/rc.preinit.d/10-system @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -122,7 +122,8 @@ exec_environment(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/11-partitions b/ublinux/rc.preinit.d/11-partitions index d15c0fe..27cbcf8 100755 --- a/ublinux/rc.preinit.d/11-partitions +++ b/ublinux/rc.preinit.d/11-partitions @@ -16,7 +16,7 @@ ENABLED=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } #SOURCE=${ROOTFS}/usr/lib/ublinux/scripts/liblinuxlive; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 @@ -152,7 +152,8 @@ exec_link(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/12-save2module b/ublinux/rc.preinit.d/12-save2module index 3c0608d..a4f9cc1 100755 --- a/ublinux/rc.preinit.d/12-save2module +++ b/ublinux/rc.preinit.d/12-save2module @@ -16,7 +16,7 @@ ENABLED=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/13-release b/ublinux/rc.preinit.d/13-release index c621786..e9227b8 100755 --- a/ublinux/rc.preinit.d/13-release +++ b/ublinux/rc.preinit.d/13-release @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/20-services b/ublinux/rc.preinit.d/20-services index 65da96b..68569c1 100755 --- a/ublinux/rc.preinit.d/20-services +++ b/ublinux/rc.preinit.d/20-services @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -276,7 +276,8 @@ exec_services_startstop_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/21-ntp b/ublinux/rc.preinit.d/21-ntp index 8e2ac3e..4a33ba9 100755 --- a/ublinux/rc.preinit.d/21-ntp +++ b/ublinux/rc.preinit.d/21-ntp @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/22-samba b/ublinux/rc.preinit.d/22-samba index a4045a3..a3e7e02 100755 --- a/ublinux/rc.preinit.d/22-samba +++ b/ublinux/rc.preinit.d/22-samba @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/23-realmd b/ublinux/rc.preinit.d/23-realmd index 6123be0..4d43c73 100755 --- a/ublinux/rc.preinit.d/23-realmd +++ b/ublinux/rc.preinit.d/23-realmd @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -101,7 +101,8 @@ domain_configure_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/24-logging b/ublinux/rc.preinit.d/24-logging index ec7cafe..a6c0a53 100755 --- a/ublinux/rc.preinit.d/24-logging +++ b/ublinux/rc.preinit.d/24-logging @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -336,7 +336,8 @@ exec_logrotate_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/30-network-hostname b/ublinux/rc.preinit.d/30-network-hostname index 0167366..afa95fa 100755 --- a/ublinux/rc.preinit.d/30-network-hostname +++ b/ublinux/rc.preinit.d/30-network-hostname @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/31-network-proxy-system b/ublinux/rc.preinit.d/31-network-proxy-system index 11c1817..f2bca2c 100755 --- a/ublinux/rc.preinit.d/31-network-proxy-system +++ b/ublinux/rc.preinit.d/31-network-proxy-system @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/32-network b/ublinux/rc.preinit.d/32-network index 4164212..2e0da51 100755 --- a/ublinux/rc.preinit.d/32-network +++ b/ublinux/rc.preinit.d/32-network @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/35-iptables b/ublinux/rc.preinit.d/35-iptables index e2a4a0f..c74cc37 100755 --- a/ublinux/rc.preinit.d/35-iptables +++ b/ublinux/rc.preinit.d/35-iptables @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/36-ufw b/ublinux/rc.preinit.d/36-ufw index 0a01a8b..280535f 100755 --- a/ublinux/rc.preinit.d/36-ufw +++ b/ublinux/rc.preinit.d/36-ufw @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/40-authpam b/ublinux/rc.preinit.d/40-authpam index a72b5b8..468efd4 100755 --- a/ublinux/rc.preinit.d/40-authpam +++ b/ublinux/rc.preinit.d/40-authpam @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/50-xorg b/ublinux/rc.preinit.d/50-xorg index fc5233e..4b991db 100755 --- a/ublinux/rc.preinit.d/50-xorg +++ b/ublinux/rc.preinit.d/50-xorg @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/51-autologin b/ublinux/rc.preinit.d/51-autologin index c01499d..fcd63e5 100755 --- a/ublinux/rc.preinit.d/51-autologin +++ b/ublinux/rc.preinit.d/51-autologin @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/52-desktop b/ublinux/rc.preinit.d/52-desktop index 7351688..548b854 100755 --- a/ublinux/rc.preinit.d/52-desktop +++ b/ublinux/rc.preinit.d/52-desktop @@ -15,7 +15,7 @@ ENABLED=yes DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/53-language b/ublinux/rc.preinit.d/53-language index 4f19b78..1d73ca1 100755 --- a/ublinux/rc.preinit.d/53-language +++ b/ublinux/rc.preinit.d/53-language @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -205,8 +205,8 @@ set_vconsole_live(){ else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" shift done diff --git a/ublinux/rc.preinit.d/54-backgrounds b/ublinux/rc.preinit.d/54-backgrounds index bd37fc2..25d4b32 100755 --- a/ublinux/rc.preinit.d/54-backgrounds +++ b/ublinux/rc.preinit.d/54-backgrounds @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/55-multiseat b/ublinux/rc.preinit.d/55-multiseat index 5756130..0a49a2e 100755 --- a/ublinux/rc.preinit.d/55-multiseat +++ b/ublinux/rc.preinit.d/55-multiseat @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/56-openssl-engine b/ublinux/rc.preinit.d/56-openssl-engine index 61a5d9a..b05715f 100755 --- a/ublinux/rc.preinit.d/56-openssl-engine +++ b/ublinux/rc.preinit.d/56-openssl-engine @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/57-access-denied-vtx11 b/ublinux/rc.preinit.d/57-access-denied-vtx11 index ef891f0..cb3d3f6 100755 --- a/ublinux/rc.preinit.d/57-access-denied-vtx11 +++ b/ublinux/rc.preinit.d/57-access-denied-vtx11 @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/58-access-login b/ublinux/rc.preinit.d/58-access-login index ad38c2a..9910b85 100755 --- a/ublinux/rc.preinit.d/58-access-login +++ b/ublinux/rc.preinit.d/58-access-login @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -61,7 +61,8 @@ exec_access_denied_login(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/59-polkit b/ublinux/rc.preinit.d/59-polkit index 3338f0e..1d53206 100755 --- a/ublinux/rc.preinit.d/59-polkit +++ b/ublinux/rc.preinit.d/59-polkit @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -177,8 +177,8 @@ EOF else FUNCTION= while [[ $# -gt 0 ]]; do + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} #[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } - # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done diff --git a/ublinux/rc.preinit.d/60-lightdm-settings b/ublinux/rc.preinit.d/60-lightdm-settings index 5be7961..1b75dca 100755 --- a/ublinux/rc.preinit.d/60-lightdm-settings +++ b/ublinux/rc.preinit.d/60-lightdm-settings @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -129,7 +129,8 @@ EOF else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/63-xorg-dpi b/ublinux/rc.preinit.d/63-xorg-dpi index acd91ae..757fc0a 100755 --- a/ublinux/rc.preinit.d/63-xorg-dpi +++ b/ublinux/rc.preinit.d/63-xorg-dpi @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/64-swapspace b/ublinux/rc.preinit.d/64-swapspace index a252188..834f951 100755 --- a/ublinux/rc.preinit.d/64-swapspace +++ b/ublinux/rc.preinit.d/64-swapspace @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 diff --git a/ublinux/rc.preinit.d/65-kesl b/ublinux/rc.preinit.d/65-kesl index 9ab27eb..63ef268 100755 --- a/ublinux/rc.preinit.d/65-kesl +++ b/ublinux/rc.preinit.d/65-kesl @@ -20,7 +20,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/70-virtualbox b/ublinux/rc.preinit.d/70-virtualbox index 19316d7..ac1545c 100755 --- a/ublinux/rc.preinit.d/70-virtualbox +++ b/ublinux/rc.preinit.d/70-virtualbox @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/71-vmware b/ublinux/rc.preinit.d/71-vmware index aaad7d6..82f4f7b 100755 --- a/ublinux/rc.preinit.d/71-vmware +++ b/ublinux/rc.preinit.d/71-vmware @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/72-hyperv b/ublinux/rc.preinit.d/72-hyperv index 2428001..167ac58 100755 --- a/ublinux/rc.preinit.d/72-hyperv +++ b/ublinux/rc.preinit.d/72-hyperv @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/73-qemu b/ublinux/rc.preinit.d/73-qemu index cb20111..f4a4234 100755 --- a/ublinux/rc.preinit.d/73-qemu +++ b/ublinux/rc.preinit.d/73-qemu @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/80-server-storage b/ublinux/rc.preinit.d/80-server-storage index 1404879..bee315a 100755 --- a/ublinux/rc.preinit.d/80-server-storage +++ b/ublinux/rc.preinit.d/80-server-storage @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -144,7 +144,8 @@ EOF else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit.d/90-apparmor b/ublinux/rc.preinit.d/90-apparmor index 7ba639b..15c4716 100755 --- a/ublinux/rc.preinit.d/90-apparmor +++ b/ublinux/rc.preinit.d/90-apparmor @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit.d/99-osinstall b/ublinux/rc.preinit.d/99-osinstall index 7bc78b1..5ea3c0d 100755 --- a/ublinux/rc.preinit.d/99-osinstall +++ b/ublinux/rc.preinit.d/99-osinstall @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/01-inifile b/ublinux/rc.preinit/01-inifile index 20183b2..6a30dc0 100755 --- a/ublinux/rc.preinit/01-inifile +++ b/ublinux/rc.preinit/01-inifile @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -24,15 +24,15 @@ debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" INIGZFILE=$(find /memory -maxdepth 1 -iname "*.ini.gz") - [[ -f ${INIGZFILE} ]] || INIGZFILE=$(find ${ROOTFS}/memory -maxdepth 1 -iname "*.ini.gz") - [[ -f ${INIGZFILE} ]] || INIGZFILE=$(find /tmp -maxdepth 1 -iname "*.ini.gz") + [[ ! -f ${INIGZFILE} ]] && [[ -d ${ROOTFS}/memory ]] && INIGZFILE=$(find ${ROOTFS}/memory -maxdepth 1 -iname "*.ini.gz") + [[ ! -f ${INIGZFILE} ]] && [[ -d /tmp ]] && INIGZFILE=$(find /tmp -maxdepth 1 -iname "*.ini.gz") [[ -f ${INIGZFILE} ]] && GZFILE=${INIGZFILE} CONFGZFILE=$(find /memory -maxdepth 1 -iname "*.conf.gz") - [[ -f ${CONFGZFILE} ]] || CONFGZFILE=$(find ${ROOTFS}/memory -maxdepth 1 -iname "*.conf.gz") - [[ -f ${CONFGZFILE} ]] || CONFGZFILE=$(find /tmp -maxdepth 1 -iname "*.conf.gz") + [[ ! -f ${CONFGZFILE} ]] && [[ -d ${ROOTFS}/memory ]] && CONFGZFILE=$(find ${ROOTFS}/memory -maxdepth 1 -iname "*.conf.gz") + [[ ! -f ${CONFGZFILE} ]] && [[ -d /tmp ]] && CONFGZFILE=$(find /tmp -maxdepth 1 -iname "*.conf.gz") [[ -f ${CONFGZFILE} ]] && GZFILE=${CONFGZFILE} - + [[ -f ${GZFILE} ]] || { echo "Config file '*.ini.gz' or '*.conf.gz' not found!"; return 1; } [[ -d ${SYSCONF} ]] || mkdir -p "${SYSCONF}" diff --git a/ublinux/rc.preinit/02-skel-adds b/ublinux/rc.preinit/02-skel-adds index e94742c..f7b5437 100755 --- a/ublinux/rc.preinit/02-skel-adds +++ b/ublinux/rc.preinit/02-skel-adds @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/03-initvars b/ublinux/rc.preinit/03-initvars index 89d7d94..75877ff 100755 --- a/ublinux/rc.preinit/03-initvars +++ b/ublinux/rc.preinit/03-initvars @@ -16,7 +16,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/05-save-clean b/ublinux/rc.preinit/05-save-clean index 7bf10e7..ec09b21 100755 --- a/ublinux/rc.preinit/05-save-clean +++ b/ublinux/rc.preinit/05-save-clean @@ -14,7 +14,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/06-statemode b/ublinux/rc.preinit/06-statemode index eafaae4..fbf7b36 100755 --- a/ublinux/rc.preinit/06-statemode +++ b/ublinux/rc.preinit/06-statemode @@ -14,7 +14,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -26,7 +26,8 @@ exec_statemode(){ STATE_MODE=$(cmdline_value ub.mode) STATE_HOME=$(cmdline_value ub.home) STATE_COPY2RAM=$(cmdline_parameter ub.copy2ram) - sed '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config + [[ -d ${SYSCONF} ]] || install -dm0755 "${SYSCONF}" + [[ -w ${SYSCONF}/config ]] && sed '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then ## Полное сохранение HDD: ub.mode=changes echo 'SYSTEMBOOT_STATEMODE=changes' > ${SYSCONF}/config diff --git a/ublinux/rc.preinit/08-prettyname b/ublinux/rc.preinit/08-prettyname index e013011..27ce068 100755 --- a/ublinux/rc.preinit/08-prettyname +++ b/ublinux/rc.preinit/08-prettyname @@ -14,7 +14,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/10-accounts b/ublinux/rc.preinit/10-accounts index e58e9f9..1ab6080 100755 --- a/ublinux/rc.preinit/10-accounts +++ b/ublinux/rc.preinit/10-accounts @@ -16,10 +16,13 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ -f /usr/bin/bash ]] && /usr/bin/bash --version | grep -q ^"GNU bash" || exit 1 +[[ -d ${SSC_EXTRACT_DIR} ]] && rm -rf "${SSC_EXTRACT_DIR}" +[[ -n ${SSC_ARGV0} ]] && SELF_FILE=${SSC_ARGV0} && SELF_NAME=${SSC_ARGV0##*/} && SELF_PATH=${SSC_ARGV0%/*} || { SELF_FILE=${0} && SELF_NAME=${0##*/} && SELF_PATH=${0%/*}; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +debug_mode "${SELF_FILE}" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null @@ -41,6 +44,614 @@ shopt -s extglob DEFAULT_HOME_USER="/home" NAME_REGEX="^[a-z_][-a-z0-9_]*\$" +##################################################################################### +### +### Функции управления пользователями и группами с помощью тектовых процессоров ### +### +##################################################################################### + +# Добавить пользователя в /etc/passwd /etc/shadow +# user_add $1:$2:$3:$4:$5:$6:$7:$8:$9:$10:$11:$12:$13 +# $1 # Имя пользователя +# $2 # GECOS пользователя +# $3 # UID идентификатор пользователя +# # = 's' | 'system' # Вычисляется автоматически, первый свободный системного диапазона +# # Если не задан, то вычисляется автоматически, первый свободный пользовательского диапазона +# $4 # GID первичной группы пользователя +# # Если не задана, то создать группу по имени пользователя и взять GID +# $5 # Зашифрованный пароль +# # = '' # Если не задано, то пароль '!*' запрет авторизации +# # = ' ' # Если пробел, то без пароля +# # = 'lock' | 'l' # Заблокировать авторизация, добавив '!' перед хешем +# # = 'unlock' | 'u' # Разблокировать авторизация, убрав '!' или '!!' или '!*' или '*' перед хешем +# $6 # HOME пользователя +# $7 # SHELL пользователя +# $8 # LASTCHANGED +# $9 # MINDAY +# $10 # MAXDAY +# $11 # WARN +# $12 # INACTIVE +# $13 # EXPIRE +# Для изменения параметров существующего пользователя, обязательный параметр: $1 или $3 пользователя +# Если одно из полей содержит "+" то значение поля не менять в файле +# Пример: user_add user-1:Пользователь-1 +# Пример: user_add user-1:Пользователь-1:1001:1001 +# Пример: user_add user-1:Пользователь-1:1001:1001:!*:/home/user-1:/bin/bash:19788:0:99999:7:2:19800 +# Пример: user_add root:+:+:+:!*:+:+::+:+:+:+:+ +user_add(){ + [[ $1 == @("-v"|"--verbose") ]] && local VERBOSE='yes' && shift + local FILE_PASSWD="${ROOTFS}/etc/passwd" + local FILE_SHADOW="${ROOTFS}/etc/shadow" + local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" + local FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd" + + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) + local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) + local DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD}) + + [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+HOME=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_HOME_USER=${BASH_REMATCH[2]:-/home} + [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+SHELL=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_SHELL_USER=${BASH_REMATCH[2]:-/bin/bash} + local DEFAULT_HOME_SYSTEM="/" + local DEFAULT_SHELL_SYSTEM="/usr/bin/nologin" + + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_MAX_DAYS[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_MAXDAY=${BASH_REMATCH[2]:-99999} + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_MIN_DAYS[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_MINDAY=${BASH_REMATCH[2]:-0} + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+PASS_WARN_AGE[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && local DEFAULT_WARN=${BASH_REMATCH[2]:-7} + get_free_uid(){ + local PARAM="$@" + local UID_MIN= UID_MAX= UID_NEW= + if [[ ${PARAM} == "@system" ]]; then + # Свободный номер системного списка группы + #UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+SYS_UID_MIN[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MIN=${BASH_REMATCH[2]:-500} + #UID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+SYS_UID_MAX[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MAX=${BASH_REMATCH[2]:-999} + UID_NEW=$(awk -F':' -v USER_MIN=${UID_MIN} -v USER_MAX=${UID_MAX} '{ uid[$3]=USER_MAX } END {for (x=USER_MAX; x>=USER_MIN; x--) if (!uid[x]) {print x; exit}}' ${FILE_PASSWD}) #' + [[ ${UID_NEW} == "" ]] && UID_NEW=${UID_MAX} + else + # Свободный номер списка групп, кроме системного списка + #UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+UID_MIN[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MIN=${BASH_REMATCH[2]:-1000} + #UID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") + [[ ${DATA_FILE_LOGINDEFS} =~ ($'\n'|^)+UID_MAX[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MAX=${BASH_REMATCH[2]:-60000} + UID_NEW=$(awk -F':' -v USER_MIN=${UID_MIN} -v USER_MAX=${UID_MAX} '{ uid[$3]=USER_MIN } END {for (x=USER_MIN; x<=USER_MAX; x++) if (!uid[x]) {print x; exit}}' ${FILE_PASSWD}) #' + [[ ${UID_NEW} == "" ]] && UID_NEW=${UID_MIN} + fi + printf "%d" "${UID_NEW}" + } + is_uid_system(){ + local UID_MIN= + UID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; printf "%d" "${BASH_REMATCH[1]}") + [[ ${SELECT_UID} -lt ${UID_MIN:=1000} ]] && printf "%d" "1" || printf "%d" "0" + } + local PARAM="$@" + # Получаем из аргумента значения + local IS_USER_SYSTEM= + local SELECT_NOUSE= + local SELECT_USERNAME= SELECT_GECOS= SELECT_UID= SELECT_GID= SELECT_PASSWORD= SELECT_HOME= SELECT_SHELL= SELECT_LASTCHANGED= SELECT_MINDAY= SELECT_MAXDAY= SELECT_WARN= SELECT_INACTIVE= SELECT_EXPIRE= NULL= + IFS=: read -r SELECT_USERNAME SELECT_GECOS SELECT_UID SELECT_GID SELECT_PASSWORD SELECT_HOME SELECT_SHELL SELECT_LASTCHANGED SELECT_MINDAY SELECT_MAXDAY SELECT_WARN SELECT_INACTIVE SELECT_EXPIRE NULL <<< "${PARAM}" + [[ ${SELECT_USERNAME} == "" && ${SELECT_UID} == "" ]] && { >&2 echo "ERROR: not added/changed '${SELECT_USERNAME}' username"; return 1; } + # Получаем из файла значения + local VOL_FILEP_PLAINPASSWORD= VOL_FILEP_UID= VOL_FILEP_GID= VOL_FILEP_GECOS= VOL_FILEP_HOME= VOL_FILEP_SHELL= VOL_FILEP_USERNAME= + if [[ ${SELECT_USERNAME} != @(""|"+") ]]; then + [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEP_UID=${BASH_REMATCH[3]} \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} \ + && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ + && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ + && VOL_FILEP_SHELL=${BASH_REMATCH[7]} + VOL_FILEP_USERNAME=${SELECT_USERNAME} + elif [[ ${SELECT_USERNAME} == @(""|"+") && ${SELECT_UID} =~ ^[[:digit:]]+$ ]]; then + [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEP_USERNAME=${BASH_REMATCH[2]} \ + && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} \ + && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ + && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ + && VOL_FILEP_SHELL=${BASH_REMATCH[7]} + VOL_FILEP_UID=${SELECT_UID} + SELECT_USERNAME=${VOL_FILEP_USERNAME} + fi + [[ ${SELECT_USERNAME} == @(""|"+") ]] && { >&2 echo "ERROR: not added/changed empty username"; return 1; } + [[ ${SELECT_PASSWORD} == "+" ]] && SELECT_PLAINPASSWORD=${VOL_FILEP_PLAINPASSWORD} + [[ ${SELECT_PLAINPASSWORD} == "" ]] && SELECT_PLAINPASSWORD='x' + if [[ ${SELECT_UID} == "+" && ${VOL_FILEP_UID} != "" ]]; then + SELECT_UID=${VOL_FILEP_UID} + elif [[ ${SELECT_UID} == @("s"|"system") ]]; then + SELECT_UID=$(get_free_uid @system) + elif [[ ${SELECT_UID} =~ ^[[:digit:]]+$ ]]; then + true + else + # Если UID не задан, то берём первый свободный + SELECT_UID=$(get_free_uid) + fi + if [[ ${SELECT_GID} == "+" && ${VOL_FILEP_GID} != "" ]]; then + SELECT_GID=${VOL_FILEP_GID} + elif [[ ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then + true + else + # Если GID не задан, то создаём группу по имени пользователя ${SELECT_UID} и получаем GID от созданной группы + IFS=: read -r NULL SELECT_GID NULL NULL NULL NULL <<< $(group_add --verbose "${SELECT_USERNAME}:+:+:+:+") + [[ ${SELECT_GID} == "" ]] && SELECT_GID=${SELECT_UID} + fi + [[ ${SELECT_GECOS} == "+" ]] && SELECT_GECOS=${VOL_FILEP_GECOS} + if [[ ${SELECT_HOME} == "+" && ${VOL_FILEP_HOME} != "" ]]; then + SELECT_HOME=${VOL_FILEP_HOME} + elif [[ ${SELECT_HOME} == @(""|"+") ]]; then + [[ $(is_uid_system) == 1 ]] && SELECT_HOME=${DEFAULT_HOME_SYSTEM} || SELECT_HOME="${DEFAULT_HOME_USER}/${SELECT_USERNAME}" + fi + if [[ ${SELECT_SHELL} == "+" && ${VOL_FILEP_SHELL} != "" ]]; then + SELECT_SHELL=${VOL_FILEP_SHELL} + elif [[ ${SELECT_SHELL} == @(""|"+") ]]; then + [[ $(is_uid_system) == 1 ]] && SELECT_SHELL=${DEFAULT_SHELL_SYSTEM} || SELECT_SHELL=${DEFAULT_SHELL_USER} + fi + + local VOL_FILEPS_PASSWORD= VOL_FILEPS_LASTCHANGED= VOL_FILEPS_MINDAY= VOL_FILEPS_MAXDAY= VOL_FILEPS_WARN= VOL_FILEPS_INACTIVE= VOL_FILEPS_EXPIRE= VOL_FILEPS_NOUSE= + [[ ${DATA_FILE_SHADOW} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEPS_PASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEPS_LASTCHANGED=${BASH_REMATCH[3]} \ + && VOL_FILEPS_MINDAY=${BASH_REMATCH[4]} \ + && VOL_FILEPS_MAXDAY=${BASH_REMATCH[5]} \ + && VOL_FILEPS_WARN=${BASH_REMATCH[6]} \ + && VOL_FILEPS_INACTIVE=${BASH_REMATCH[7]} \ + && VOL_FILEPS_EXPIRE=${BASH_REMATCH[8]} \ + && VOL_FILEPS_NOUSE=${BASH_REMATCH[9]} + if [[ ${SELECT_PASSWORD} == "+" && ${VOL_FILEPS_PASSWORD} != "" ]]; then + SELECT_PASSWORD=${VOL_FILEPS_PASSWORD} + elif [[ ${SELECT_PASSWORD} == @("lock"|"l") && ${VOL_FILEPS_PASSWORD} != "" ]]; then + if [[ ${VOL_FILEPS_PASSWORD:0:1} == "!" ]]; then + SELECT_PASSWORD=${VOL_FILEPS_PASSWORD} + else + SELECT_PASSWORD="!${VOL_FILEPS_PASSWORD}" + fi + elif [[ ${SELECT_PASSWORD} == @("unlock"|"u") && ${VOL_FILEPS_PASSWORD} != "" ]]; then + if [[ ${VOL_FILEPS_PASSWORD:0:2} == "!!" ]]; then + SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:2}" + elif [[ ${VOL_FILEPS_PASSWORD:0:2} == "!*" ]]; then + SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:2}" + elif [[ ${VOL_FILEPS_PASSWORD:0:1} == "*" ]]; then + SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:1}" + elif [[ ${VOL_FILEPS_PASSWORD:0:1} == "!" ]]; then + SELECT_PASSWORD="${VOL_FILEPS_PASSWORD:1}" + else + SELECT_PASSWORD="${VOL_FILEPS_PASSWORD}" + fi + elif [[ ${SELECT_PASSWORD} == " " ]]; then + SELECT_PASSWORD= + elif [[ ${SELECT_PASSWORD} == @(""|"+") ]]; then + SELECT_PASSWORD="!*" + fi + if [[ ${SELECT_LASTCHANGED} == "+" && ${VOL_FILEPS_LASTCHANGED} != "" ]]; then + SELECT_LASTCHANGED=${VOL_FILEPS_LASTCHANGED} + elif [[ ${SELECT_LASTCHANGED} =~ ^[[:digit:]]{4,4}'-'[[:digit:]]{1,2}'-'[[:digit:]]{1,2}$ ]]; then + SELECT_LASTCHANGED=$(( $(${CMD_CHROOT} date --date="${SELECT_LASTCHANGED} 0000" +"%s")/(60*60*24) )) + elif [[ ${SELECT_LASTCHANGED} =~ ^[[:digit:]]{1,5}$ ]]; then + true + else + SELECT_LASTCHANGED=$(( $(${CMD_CHROOT} date +%s)/(60*60*24) )) # (60*60*24)=18400 second on day + fi + if [[ ${SELECT_MINDAY} == "+" && ${VOL_FILEPS_MINDAY} != "" ]]; then + SELECT_MINDAY=${VOL_FILEPS_MINDAY} + elif [[ ${SELECT_MINDAY} =~ ^[[:digit:]]+$ ]]; then + true + else + [[ $(is_uid_system) == 1 ]] && SELECT_MINDAY= || SELECT_MINDAY=${DEFAULT_MINDAY} + fi + if [[ ${SELECT_MAXDAY} == "+" && ${VOL_FILEPS_MAXDAY} != "" ]]; then + SELECT_MAXDAY=${VOL_FILEPS_MAXDAY} + elif [[ ${SELECT_MAXDAY} =~ ^[[:digit:]]+$ ]]; then + true + else + [[ $(is_uid_system) == 1 ]] && SELECT_MAXDAY= || SELECT_MAXDAY=${DEFAULT_MAXDAY} + fi + if [[ ${SELECT_WARN} == "+" && ${VOL_FILEPS_WARN} != "" ]]; then + SELECT_WARN=${VOL_FILEPS_WARN} + elif [[ ${SELECT_WARN} =~ ^[[:digit:]]+$ ]]; then + true + else + [[ $(is_uid_system) == 1 ]] && SELECT_WARN= || SELECT_WARN=${DEFAULT_WARN} + fi + if [[ ${SELECT_INACTIVE} == "+" && ${VOL_FILEPS_INACTIVE} != "" ]]; then + SELECT_INACTIVE=${VOL_FILEPS_INACTIVE} + elif [[ ${SELECT_INACTIVE} =~ (-1|^[[:digit:]]+$) ]]; then + true + else + SELECT_INACTIVE= + fi + if [[ ${SELECT_EXPIRE} == "+" && ${VOL_FILEPS_EXPIRE} != "" ]]; then + SELECT_EXPIRE=${VOL_FILEPS_EXPIRE} + elif [[ ${SELECT_EXPIRE} =~ ^[[:digit:]]{4,4}'-'[[:digit:]]{1,2}'-'[[:digit:]]{1,2}$ ]]; then + SELECT_EXPIRE=$(( $(${CMD_CHROOT} date --date="${SELECT_EXPIRE} 0000" +"%s")/(60*60*24) )) + elif [[ ${SELECT_EXPIRE} =~ ^[[:digit:]]{1,5}$ ]]; then + true + else + SELECT_EXPIRE= + fi + SELECT_NOUSE="" + # Если нет изменений, то ничего не делать + if [[ "${SELECT_USERNAME}" != "${VOL_FILEP_USERNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEP_PLAINPASSWORD}" || "${SELECT_UID}" != "${VOL_FILEP_UID}" || "${SELECT_GID}" != "${VOL_FILEP_GID}" || "${SELECT_GECOS}" != "${VOL_FILEP_GECOS}" \ + || "${SELECT_HOME}" != "${VOL_FILEP_HOME}" || "${SELECT_SHELL}" != "${VOL_FILEP_SHELL}" ]]; then + #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}" + #printf "%s:%s:%d:%d:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" >> "${FILE_PASSWD}" + #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" + #sed -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}" + while [[ ${DATA_FILE_PASSWD} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_PASSWD="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_PASSWD} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_PASSWD="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%d:%s:%s:%s\n" "${DATA_FILE_PASSWD}" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" > "${FILE_PASSWD}" + fi + if [[ "${SELECT_PASSWORD}" != "${VOL_FILEPS_PASSWORD}" || "${SELECT_LASTCHANGED}" != "${VOL_FILEPS_LASTCHANGED}" || "${SELECT_MINDAY}" != "${VOL_FILEPS_MINDAY}" || "${SELECT_MAXDAY}" != "${VOL_FILEPS_MAXDAY}" \ + || "${SELECT_WARN}" != "${VOL_FILEPS_WARN}" || "${SELECT_INACTIVE}" != "${VOL_FILEPS_INACTIVE}" || "${SELECT_EXPIRE}" != "${VOL_FILEPS_EXPIRE}" ]]; then + #sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}" + #printf "%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" >> "${FILE_SHADOW}" + #sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" + #sed -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}" + while [[ ${DATA_FILE_SHADOW} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_SHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_SHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_SHADOW="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${DATA_FILE_SHADOW}" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" > "${FILE_SHADOW}" + fi + [[ -z ${VERBOSE} ]] || printf "%s:%s:%d:%d:%s:%s:%s:%d:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_GECOS}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_PASSWORD}" "${SELECT_HOME}" "${SELECT_SHELL}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" +} + +# Удалить пользователя из /etc/passwd /etc/shadow +# user_del $1:$2 +# $1 # Имя пользователя +# $2 # UID идентификатор пользователя +# Что-бы удалить пользователя можно указать $1 или $2 или оба одновременно $1:$2 +# Пример: user_del user-1 +# user_del :1001 +# user_del user-2:1002 +user_del(){ + local FILE_PASSWD="${ROOTFS}/etc/passwd" + local FILE_SHADOW="${ROOTFS}/etc/shadow" + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local FILE_GROUP="${ROOTFS}/etc/group" + local FILE_GSHADOW="${ROOTFS}/etc/gshadow" + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local PARAM="$@" + local SELECT_USERNAME= SELECT_UID= + IFS=: read -r SELECT_USERNAME SELECT_UID NULL <<< "${PARAM}" + [[ ${SELECT_USERNAME} == "" && ${SELECT_UID} == "" ]] && { >&2 echo "ERROR: not delete '${SELECT_USERNAME}' username"; return 1; } + SELECT_USERNAME=$@ + local VOL_FILEP_PLAINPASSWORD VOL_FILEP_UID VOL_FILEP_GID VOL_FILEP_GECOS VOL_FILEP_HOME VOL_FILEP_SHELL + # Ищем пользователя вначале по имени, после по UID + [[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEP_UID=${BASH_REMATCH[3]} \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} \ + && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ + && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ + && VOL_FILEP_SHELL=${BASH_REMATCH[7]} + [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && SELECT_USERNAME=${BASH_REMATCH[2]} \ + && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ + && VOL_FILEP_UID=${SELECT_UID} \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} \ + && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ + && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ + && VOL_FILEP_SHELL=${BASH_REMATCH[7]} + sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}" + sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}" + # Если имеется группа с таким же именем пользователя и она является основной группой указанного пользователя и в ней нет других пользователей + local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= OTHER_USERNAME= + [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEG_GID=${BASH_REMATCH[3]} \ + && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} + # и она не является основной у других пользователей + [[ -n ${VOL_FILEP_GID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):([^$'\n']*):"${VOL_FILEP_GID}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && OTHER_USERNAME=${BASH_REMATCH[2]} + # то удаляем группу + if [[ ${VOL_FILEP_GID} == ${VOL_FILEG_GID} && -z ${VOL_FILEG_MEMBERS} && -z ${OTHER_USERNAME} ]]; then + sed /^${SELECT_USERNAME}:/d -i "${FILE_GROUP}" + sed /^${SELECT_USERNAME}:/d -i "${FILE_GSHADOW}" + fi + # Удаляем пользователя из всех групп + sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" -i "${FILE_GROUP}" + sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" -i "${FILE_GSHADOW}" +} + +# Добавить группу в /etc/group /etc/gshadow +# group_add $1:$2:$3:$4:$5 +# $1 # Имя группы +# $2 # GID идентификатор группы +# # = 's' | 'system' # Вычисляется автоматически, первый свободный системного диапазона +# # Если не задан, то вычисляется автоматически, первый свободный пользовательского диапазона +# $3 # Члены группы, разделённые запятыми +# $4 # Зашифрованный пароль +# # = '' # Если не задано, то пароль '!*' запрет авторизации +# # = ' ' # Если пробел, то без пароля +# # = 'lock' | 'l' # Заблокировать авторизация, добавив '!' перед хешем +# # = 'unlock' | 'u' # Разблокировать авторизация, убрав '!' или '!!' или '!*' или '*' перед хешем +# $5 # Администраторы группы, разделённые запятыми +# Для изменения параметров существующей группы, обязательный параметр: $1 или $2 пользователя +# Если одно из полей содержит "+" то значение поля не менять в файле +# Пример: g_department_1 +# Пример: g_department_1:1010 +# Пример: g_department_1:1010:user-1,user-2::superadmin +# Пример: g_department_1:+:+:+:+ +# Пример: g_department_1:1010:+:+:+ +group_add(){ + [[ $1 == @("-v"|"--verbose") ]] && local VERBOSE='yes' && shift + local FILE_GROUP="${ROOTFS}/etc/group" + local FILE_GSHADOW="${ROOTFS}/etc/gshadow" + local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) + local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS}) + get_free_gid(){ + local PARAM="$@" + local GID_MIN= GID_MAX= GID_NEW= + if [[ ${PARAM} == "@system" ]]; then + # Свободный номер системного списка группы + GID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=500} -v GROUP_MAX=${GID_MAX:=999} '{ gid[$3]=GROUP_MAX } END {for (x=GROUP_MAX; x>=GROUP_MIN; x--) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' + [[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MAX} + else + # Свободный номер списка групп, кроме системного списка + GID_MIN=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + GID_MAX=$([[ ${DATA_FILE_LOGINDEFS} =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}") + # Предоставить свободный номер с начала списка + GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=6000} '{ gid[$3]=GROUP_MIN } END {for (x=GROUP_MIN; x<=GROUP_MAX; x++) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' + [[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MIN} + # Предоставить свободный номер с конца списка + #GID_NEW=$(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '{ gid[$3]=GROUP_MAX } END {for (x=GROUP_MAX; x>=GROUP_MIN; x--) if (!gid[x]) {print x; exit}}' ${FILE_GROUP}) #' + #[[ ${GID_NEW} == "" ]] && GID_NEW=${GID_MAX} + fi + printf "%d" "${GID_NEW}" + } + local PARAM="$@" + # Получаем из аргумента значения + local SELECT_GROUPNAME= SELECT_GID= SELECT_MEMBERS= SELECT_PASSWORD= SELECT_ADMINISTRATORS= NULL= + IFS=: read -r SELECT_GROUPNAME SELECT_GID SELECT_MEMBERS SELECT_PASSWORD SELECT_ADMINISTRATORS NULL <<< "${PARAM}" + [[ ${SELECT_GROUPNAME} == "" && ${SELECT_GID} == "" ]] && { >&2 echo "ERROR: not added/changed '${SELECT_GROUPNAME}' groupname"; return 1; } + # Получаем из файла значения + local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= VOL_FILEG_GROUPNAME= + local SELECT_PLAINPASSWORD= + if [[ ${SELECT_GROUPNAME} != @(""|"+") ]]; then + [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEG_GID=${BASH_REMATCH[3]} \ + && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} + VOL_FILEG_GROUPNAME=${SELECT_GROUPNAME} + elif [[ ${SELECT_GROUPNAME} == @(""|"+") && ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then + [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEG_GROUPNAME=${BASH_REMATCH[2]} \ + && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[3]} \ + && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} + VOL_FILEG_GID=${SELECT_GID} + SELECT_GROUPNAME=${VOL_FILEG_GROUPNAME} + fi + [[ ${SELECT_GROUPNAME} == @(""|"+") ]] && { >&2 echo "ERROR: not added/changed empty groupname"; return 1; } + [[ ${SELECT_PASSWORD} == "+" ]] && SELECT_PLAINPASSWORD=${VOL_FILEG_PLAINPASSWORD} || SELECT_PLAINPASSWORD='x' + [[ ${SELECT_PASSWORD} == "" || ${SELECT_PLAINPASSWORD} == "" ]] && SELECT_PLAINPASSWORD='x' + if [[ ${SELECT_GID} == "+" && ${VOL_FILEG_GID} != "" ]]; then + SELECT_GID=${VOL_FILEG_GID} + elif [[ ${SELECT_GID} == @("s"|"system") ]]; then + SELECT_GID=$(get_free_gid @system) + elif [[ ${SELECT_GID} =~ ^[[:digit:]]+$ ]]; then + true + else + SELECT_GID=$(get_free_gid) + fi + [[ ${SELECT_MEMBERS} == "+" ]] && SELECT_MEMBERS=${VOL_FILEG_MEMBERS} + + local VOL_FILEGS_PASSWORD= VOL_FILEGS_ADMINISTRATORS= VOL_FILEGS_MEMBERS= + [[ ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEGS_PASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEGS_ADMINISTRATORS=${BASH_REMATCH[3]} \ + && VOL_FILEGS_MEMBERS=${BASH_REMATCH[4]} + if [[ ${SELECT_PASSWORD} == "+" && ${VOL_FILEGS_PASSWORD} != "" ]]; then + SELECT_PASSWORD=${VOL_FILEGS_PASSWORD} + elif [[ ${SELECT_PASSWORD} == @("lock"|"l") && ${VOL_FILEGS_PASSWORD} != "" ]]; then + if [[ ${VOL_FILEGS_PASSWORD:0:1} == "!" ]]; then + SELECT_PASSWORD=${VOL_FILEGS_PASSWORD} + else + SELECT_PASSWORD="!${VOL_FILEGS_PASSWORD}" + fi + elif [[ ${SELECT_PASSWORD} == @("unlock"|"u") && ${VOL_FILEGS_PASSWORD} != "" ]]; then + if [[ ${VOL_FILEGS_PASSWORD:0:2} == "!!" ]]; then + SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:2}" + elif [[ ${VOL_FILEGS_PASSWORD:0:2} == "!*" ]]; then + SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:2}" + elif [[ ${VOL_FILEGS_PASSWORD:0:1} == "*" ]]; then + SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:1}" + elif [[ ${VOL_FILEGS_PASSWORD:0:1} == "!" ]]; then + SELECT_PASSWORD="${VOL_FILEGS_PASSWORD:1}" + else + SELECT_PASSWORD="${VOL_FILEGS_PASSWORD}" + fi + elif [[ ${SELECT_PASSWORD} == " " ]]; then + SELECT_PASSWORD= + elif [[ ${SELECT_PASSWORD} == @(""|"+") ]]; then + SELECT_PASSWORD="!*" + fi + [[ ${SELECT_ADMINISTRATORS} == "+" ]] && SELECT_ADMINISTRATORS=${VOL_FILEGS_ADMINISTRATORS} + # Если нет изменений, то ничего не делать + if [[ "${SELECT_GROUPNAME}" != "${VOL_FILEG_GROUPNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEG_PLAINPASSWORD}" || "${SELECT_GID}" != "${VOL_FILEG_GID}" || "${SELECT_MEMBERS}" != "${VOL_FILEG_MEMBERS}" ]]; then + #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GROUP}" + #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" >> "${FILE_GROUP}" + #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}" + + while [[ ${DATA_FILE_GROUP} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GROUP="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_GROUP} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GROUP="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GROUP}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GROUP}" + + #printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" + fi + if [[ "${SELECT_PASSWORD}" != "${VOL_FILEGS_PASSWORD}" || "${SELECT_ADMINISTRATORS}" != "${VOL_FILEGS_ADMINISTRATORS}" || "${SELECT_MEMBERS}" != "${VOL_FILEGS_MEMBERS}" ]]; then + #sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GSHADOW}" + #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" >> "${FILE_GSHADOW}" + #sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}" + + while [[ ${DATA_FILE_GSHADOW} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GSHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done + [[ ${DATA_FILE_GSHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GSHADOW="${BASH_REMATCH[1]}" + printf "%s\n%s:%s:%s:%s\n" "${DATA_FILE_GSHADOW}" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" > "${FILE_GSHADOW}" + + #printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" + fi + [[ -z ${VERBOSE} ]] || printf "%s:%d:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_GID}" "${SELECT_MEMBERS}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" +} + +# Удалить группу из /etc/group /etc/gshadow +# group_del $1 +# $1 # Имя группы +# $2 # GID идентификатор группы +# Что-бы удалить группу можно указать $1 или $2 или оба одновременно $1:$2 +# Пример: group_del user-1 +# group_del :1001 +# group_del user-2:1002 +group_del(){ + local FILE_GROUP="${ROOTFS}/etc/group" + local FILE_GSHADOW="${ROOTFS}/etc/gshadow" + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local FILE_PASSWD="${ROOTFS}/etc/passwd" + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local PARAM="$@" + local SELECT_GROUPNAME= SELECT_GID= NULL= + IFS=: read -r SELECT_GROUPNAME SELECT_GID NULL <<< "${PARAM}" + local VOL_FILEG_PLAINPASSWORD= VOL_FILEG_GID= VOL_FILEG_MEMBERS= + [[ -n ${SELECT_GROUPNAME} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[2]} \ + && VOL_FILEG_GID=${BASH_REMATCH[3]} \ + && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} + [[ -n ${SELECT_GID} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ + && SELECT_GROUPNAME=${BASH_REMATCH[2]} \ + && VOL_FILEG_PLAINPASSWORD=${BASH_REMATCH[3]} \ + && VOL_FILEG_GID=${SELECT_GID} \ + && VOL_FILEG_MEMBERS=${BASH_REMATCH[4]} + local VOL_FILEP_PLAINPASSWORD VOL_FILEP_UID VOL_FILEP_GID VOL_FILEP_GECOS VOL_FILEP_HOME VOL_FILEP_SHELL + [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):([^$'\n']*):"${VOL_FILEG_GID}":([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEP_USERNAME=${BASH_REMATCH[2]} \ + && VOL_FILEP_PLAINPASSWORD=${BASH_REMATCH[3]} \ + && VOL_FILEP_UID=${BASH_REMATCH[4]} \ + && VOL_FILEP_GECOS=${BASH_REMATCH[5]} \ + && VOL_FILEP_HOME=${BASH_REMATCH[6]} \ + && VOL_FILEP_SHELL=${BASH_REMATCH[7]} + if [[ -n ${VOL_FILEP_USERNAME} ]]; then + >&2 echo "ERROR: cannot remove the primary group of user '${VOL_FILEP_USERNAME}'" + else + sed "/^${SELECT_GROUPNAME}:/d" -i "${FILE_GROUP}" + sed "/^${SELECT_GROUPNAME}:/d" -i "${FILE_GSHADOW}" + fi +} + +# Добавить пользователей в группы /etc/group /etc/gshadow +# user_add_group $1,$1,... $2,$2,$2,... +# $1 # Имя пользователя и/или UID. Разделённых ',' +# # :,:,... +# $2 # Имена групп разделённых ',' +# Пример: user_add_group user-1 wheel,lp,disk +# Пример: user_add_group user-1,user-2 wheel,lp,disk +# Пример: user_add_group :1001 wheel,lp,disk +# Пример: user_add_group user-1:1001 wheel,lp,disk +user_add_group(){ + local FILE_PASSWD="${ROOTFS}/etc/passwd" + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local FILE_GROUP="${ROOTFS}/etc/group" + local FILE_GSHADOW="${ROOTFS}/etc/gshadow" + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) + local SELECT_USERNAME_UID_LIST=$1 + local SELECT_GROUPS=$2 + while IFS= read -r SELECT_USERNAME_UID; do + [[ ${SELECT_USERNAME_UID_LIST} == "" ]] && continue + local SELECT_USERNAME= SELECT_UID= NULL= + IFS=: read -ru3 SELECT_USERNAME SELECT_UID NULL 3<<< "${SELECT_USERNAME_UID}" + local SELECT_GID= SELECT_GROUPNAME= VOL_FILEP_GID= + # Ищем пользователя вначале по имени, после по UID + [[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} + [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && SELECT_USERNAME=${BASH_REMATCH[2]} \ + && VOL_FILEP_GID=${BASH_REMATCH[4]} + [[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] || { >&2 echo "ERROR: user '${SELECT_USERNAME}' not found"; return 1; } + [[ -n ${SELECT_GROUPS} ]] || { >&2 echo "ERROR: groups should not be empty"; return 1; } + SELECT_GID=${VOL_FILEP_GID} + [[ -n ${SELECT_GID} && ${DATA_FILE_GROUP} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_GID}":([^$'\n']*)($'\n'|$)+ ]] \ + && SELECT_GROUPNAME=${BASH_REMATCH[2]} + # Убираем дубликаты групп + SELECT_GROUPS=$(sort -u <<< ${SELECT_GROUPS//,/$'\n'}); SELECT_GROUPS=${SELECT_GROUPS//$'\n'/,} + # Проверяем, если группа является основной у пользователя, то исключить из списка групп + SELECT_GROUPS=$(sed "s/^${SELECT_GROUPNAME}$//g;s/^${SELECT_GROUPNAME},//g;s/,${SELECT_GROUPNAME}$//g;s/,${SELECT_GROUPNAME},/,/g" <<< "${SELECT_GROUPS}") + while IFS= read -ru4 SELECT_GROUPNAME; do + [[ ${SELECT_GROUPNAME} == "" ]] && continue + if [[ ! ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then + DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:.*[^:]$/ s/$/,${SELECT_USERNAME}/" <<< ${DATA_FILE_GROUP}) + DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:.*:$/ s/$/${SELECT_USERNAME}/" <<< ${DATA_FILE_GROUP}) + fi + if [[ ! ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then + DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:.*[^:]$/ s/$/,${SELECT_USERNAME}/" <<< ${DATA_FILE_GSHADOW}) + DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:.*:$/ s/$/${SELECT_USERNAME}/" <<< ${DATA_FILE_GSHADOW}) + fi + done 4<<< ${SELECT_GROUPS//,/$'\n'} + done <<< ${SELECT_USERNAME_UID_LIST//,/$'\n'} + echo "${DATA_FILE_GROUP}" > "${FILE_GROUP}" + echo "${DATA_FILE_GSHADOW}" > "${FILE_GSHADOW}" +} + +# Удалить пользователя из групп /etc/group /etc/gshadow +# user_remove_group $1,$1,$1 $2,$2,$2,... +# $1 # Список имён пользователей и/или UID. Разделитель ',' +# # :,:,... +# $2 # Имена групп разделённых ',' +# # Если указано '%all' то все группы +# Пример: user_remove_group user-1 wheel,lp,disk +# Пример: user_remove_group user-1,user-2 wheel,lp,disk +# Пример: user_remove_group :1001 wheel,lp,disk +# Пример: user_remove_group user-1:1001 %all +user_remove_group(){ + local FILE_PASSWD="${ROOTFS}/etc/passwd" + local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) + local FILE_GROUP="${ROOTFS}/etc/group" + local FILE_GSHADOW="${ROOTFS}/etc/gshadow" + local DATA_FILE_GROUP=$(< ${FILE_GROUP}) + local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW}) + local SELECT_USERNAME_UID_LIST=$1 + local SELECT_GROUPS=$2 + local SELECT_USERNAME_UID= + while IFS= read -r SELECT_USERNAME_UID; do + [[ ${SELECT_USERNAME_UID} == "" ]] && continue + local SELECT_USERNAME= SELECT_UID= NULL= + IFS=: read -ru3 SELECT_USERNAME SELECT_UID NULL 3<<< "${SELECT_USERNAME_UID}" + if [[ ${SELECT_GROUPS} == '%all' ]]; then + DATA_FILE_GROUP=$(sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GROUP}) + DATA_FILE_GSHADOW=$(sed "s/:${SELECT_USERNAME}$/:/g;s/:${SELECT_USERNAME},/:/g;s/,${SELECT_USERNAME}$//g;s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GSHADOW}) + else + # Ищем пользователя вначале по имени, после по UID + #[[ -n ${SELECT_USERNAME} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] + [[ -n ${SELECT_UID} && ${DATA_FILE_PASSWD} =~ ($'\n'|^)+([^$'\n']*):([^$'\n']*):"${SELECT_UID}":([^$'\n']*):([^$'\n']*):([^$'\n']*):([^$'\n']*)($'\n'|$)+ ]] \ + && SELECT_USERNAME=${BASH_REMATCH[2]} + # Если пользователя нет среди пользователей. Отключил, чтобы всех без проверки удалять. + #[[ ${DATA_FILE_PASSWD} =~ ($'\n'|^)+"${SELECT_USERNAME}": ]] || { >&2 echo "ERROR: user '${SELECT_USERNAME}' not found"; continue; } + [[ -n ${SELECT_GROUPS} ]] || { >&2 echo "ERROR: groups should not be empty"; return 1; } + #[[ ${SELECT_GROUPS} == '%all' ]] && SELECT_GROUPS=$(sed -En 's/^([^:]+):.*/\1/p' <<< ${DATA_FILE_GROUP}) #' + locale SELECT_GROUPNAME= + while IFS= read -ru4 SELECT_GROUPNAME; do + [[ ${SELECT_GROUPNAME} == "" ]] && continue + if [[ ${DATA_FILE_GROUP} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then + DATA_FILE_GROUP=$(sed "/^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME}$/:/g;\ + /^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME},/:/g;\ + /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME}$//g;\ + /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GROUP}) + fi + if [[ ${DATA_FILE_GSHADOW} =~ ($'\n'|^)+"${SELECT_GROUPNAME}":([^$'\n']*):([^$'\n']*)(:|:[-a-z0-9_,]+,)"${SELECT_USERNAME}"(,|$'\n'|$)+ ]]; then + DATA_FILE_GSHADOW=$(sed "/^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME}$/:/g;\ + /^${SELECT_GROUPNAME}:/ s/:${SELECT_USERNAME},/:/g;\ + /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME}$//g;\ + /^${SELECT_GROUPNAME}:/ s/,${SELECT_USERNAME},/,/g" <<< ${DATA_FILE_GSHADOW}) + fi + done 4<<< "${SELECT_GROUPS//,/$'\n'}" + fi + done <<< "${SELECT_USERNAME_UID_LIST//,/$'\n'}" + echo "${DATA_FILE_GROUP}" > "${FILE_GROUP}" + echo "${DATA_FILE_GSHADOW}" > "${FILE_GSHADOW}" +} + +##################################################################################### + # Задать пароль пользователю # $1 # Имя пользователя # $2 # Зашифрованный пароля, если не указан, то пароль '!*' запрет авторизации @@ -99,7 +710,7 @@ create_home(){ if [[ -d "${ROOTFS}${SELECT_HOME}" ]]; then if [[ -n ${SELECT_FORCESKEL} ]]; then cp -Taf ${ROOTFS}/etc/skel "${ROOTFS}${SELECT_HOME}" - [[ -e "${ROOTFS}${SELECT_HOME}/.cache" ]] && rm -rdf "${ROOTFS}${SELECT_HOME}/.cache" + [[ -e "${ROOTFS}${SELECT_HOME}/.cache" ]] && rm -rf "${ROOTFS}${SELECT_HOME}/.cache" ${CMD_CHROOT} bash -c "cd /etc/skel && find . -exec chown -fh ${SELECT_USERNAME}:${SELECT_GROUP} ${SELECT_HOME}/{} \;" ${CMD_CHROOT} /usr/bin/chown -fh ${SELECT_USERNAME}:${SELECT_GROUP} "${SELECT_HOME}" ${CMD_CHROOT} /usr/bin/chmod -f u+rw,g-rwx,o-rwx "${SELECT_HOME}" @@ -851,7 +1462,8 @@ exec_99_dm_hint_password(){ else FUNCTION= while [[ $# -gt 0 ]]; do - [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || {} + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/rc.preinit/20-remount b/ublinux/rc.preinit/20-remount index 7b8530e..ae79646 100755 --- a/ublinux/rc.preinit/20-remount +++ b/ublinux/rc.preinit/20-remount @@ -14,7 +14,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" diff --git a/ublinux/rc.preinit/50-install-pkg b/ublinux/rc.preinit/50-install-pkg index b00feeb..8ad8fe2 100755 --- a/ublinux/rc.preinit/50-install-pkg +++ b/ublinux/rc.preinit/50-install-pkg @@ -14,10 +14,13 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } DEBUGMODE=no -[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } +[[ -f /usr/bin/bash ]] && /usr/bin/bash --version | grep -q ^"GNU bash" || exit 1 +[[ -d ${SSC_EXTRACT_DIR} ]] && rm -rf "${SSC_EXTRACT_DIR}" +[[ -n ${SSC_ARGV0} ]] && SELF_FILE=${SSC_ARGV0} && SELF_NAME=${SSC_ARGV0##*/} && SELF_PATH=${SSC_ARGV0%/*} || { SELF_FILE=${0} && SELF_NAME=${0##*/} && SELF_PATH=${0%/*}; } +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -debug_mode "$0" "$@" +debug_mode "${SELF_FILE}" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null diff --git a/ublinux/rootfs-patches/clean_distr.sh b/ublinux/rootfs-patches/clean_distr similarity index 100% rename from ublinux/rootfs-patches/clean_distr.sh rename to ublinux/rootfs-patches/clean_distr diff --git a/ublinux/rootfs-patches/ublinux/ublinux-00-install.sh b/ublinux/rootfs-patches/ublinux/ublinux-00-install similarity index 72% rename from ublinux/rootfs-patches/ublinux/ublinux-00-install.sh rename to ublinux/rootfs-patches/ublinux/ublinux-00-install index 4f2aff0..e25817a 100755 --- a/ublinux/rootfs-patches/ublinux/ublinux-00-install.sh +++ b/ublinux/rootfs-patches/ublinux/ublinux-00-install @@ -6,30 +6,30 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # -unset ROOTFS && [[ -d /usr/lib/ublinux ]] || ROOTFS="." +[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; } #/etc/rc.d INITD=${ROOTFS}/etc/init.d [[ -d ${INITD} ]] || INITD=${ROOTFS}/etc/rc.d/init.d if [[ -d ${INITD} && -d ${ROOTFS}/usr/lib/ublinux/rc.d/init.d ]]; then - find ${ROOTFS}/usr/lib/ublinux/rc.d/init.d -type f | sed s%${ROOTFS}/usr/lib/ublinux/rc.d/init.d/%% | while read FILE_INITD; do + while IFS= read -ru3 FILE_INITD; do ln -sf /usr/lib/ublinux/rc.d/init.d/${FILE_INITD} ${INITD} - done + done 3< <(find ${ROOTFS}/usr/lib/ublinux/rc.d/init.d -type f | sed "s%${ROOTFS}/usr/lib/ublinux/rc.d/init.d/%%") fi #systemd SYSTEMDFILES=${ROOTFS}/usr/lib/systemd/system [[ -d ${SYSTEMDFILES} ]] || SYSTEMDFILES=${ROOTFS}/lib/systemd/system if [[ -d ${SYSTEMDFILES} && -d ${ROOTFS}/usr/lib/ublinux/systemd ]]; then - find ${ROOTFS}/usr/lib/ublinux/systemd -type f | sed s%${ROOTFS}/usr/lib/ublinux/systemd/%% | while read FILE_SYSTEMD; do + while IFS= read -ru3 FILE_SYSTEMD; do ln -sf /usr/lib/ublinux/systemd/${FILE_SYSTEMD} ${SYSTEMDFILES} - done + done 3< <(find ${ROOTFS}/usr/lib/ublinux/systemd -type f | sed "s%${ROOTFS}/usr/lib/ublinux/systemd/%%") fi if [[ -d ${SYSTEMDFILES} && -d ${ROOTFS}/usr/lib/ublinux/systemd ]]; then - ls -1d ${ROOTFS}/usr/lib/ublinux/systemd/*.wants | sed s%${ROOTFS}/usr/lib/ublinux/systemd/%% | while read FILE_SYSTEMD; do + while IFS= read -ru3 FILE_SYSTEMD; do [[ -d ${SYSTEMDFILES}/${FILE_SYSTEMD} ]] || mkdir -p ${SYSTEMDFILES}/${FILE_SYSTEMD} cp -df ${ROOTFS}/usr/lib/ublinux/systemd/${FILE_SYSTEMD}/* ${SYSTEMDFILES}/${FILE_SYSTEMD} - done + done 3< <(ls -1d ${ROOTFS}/usr/lib/ublinux/systemd/*.wants | sed "s%${ROOTFS}/usr/lib/ublinux/systemd/%%") fi ln -sf /usr/lib/ublinux/rc.d/rc.xorg ${ROOTFS}/etc/X11/xinit/xinitrc.d/00-ublinux-rc-xorg diff --git a/ublinux/rootfs-patches/ublinux_db_patch_distr b/ublinux/rootfs-patches/ublinux_db_patch_distr new file mode 100755 index 0000000..a87eda7 --- /dev/null +++ b/ublinux/rootfs-patches/ublinux_db_patch_distr @@ -0,0 +1,8 @@ +#!/bin/bash + +echo $0 +PATH_EDITION="/usr/lib/ublinux/rootfs-patches/ublinux_db" +while IFS= read -ru3 SCRIPT; do + echo "${SCRIPT}" + ${SCRIPT} +done 3< <(find ${PATH_EDITION} -type f -name "*" | sort) diff --git a/ublinux/rootfs-patches/ublinux_db_patch_distr.sh b/ublinux/rootfs-patches/ublinux_db_patch_distr.sh deleted file mode 100755 index 8fb2d4c..0000000 --- a/ublinux/rootfs-patches/ublinux_db_patch_distr.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -echo $0 -find /usr/lib/ublinux/rootfs-patches/ublinux_db -type f -name \*.sh | sort | while read a ;do - echo $a - bash $a -done diff --git a/ublinux/rootfs-patches/ublinux_de_patch_distr b/ublinux/rootfs-patches/ublinux_de_patch_distr new file mode 100755 index 0000000..cf2ae5a --- /dev/null +++ b/ublinux/rootfs-patches/ublinux_de_patch_distr @@ -0,0 +1,8 @@ +#!/bin/bash + +echo $0 +PATH_EDITION="/usr/lib/ublinux/rootfs-patches/ublinux_de" +while IFS= read -ru3 SCRIPT; do + echo "${SCRIPT}" + ${SCRIPT} +done 3< <(find ${PATH_EDITION} -type f -name "*" | sort) diff --git a/ublinux/rootfs-patches/ublinux_de_patch_distr.sh b/ublinux/rootfs-patches/ublinux_de_patch_distr.sh deleted file mode 100755 index bc7cc4d..0000000 --- a/ublinux/rootfs-patches/ublinux_de_patch_distr.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -echo $0 -find /usr/lib/ublinux/rootfs-patches/ublinux_de -type f -name \*.sh | sort | while read a ;do - echo $a - bash $a -done diff --git a/ublinux/rootfs-patches/ublinux_edu_patch_distr b/ublinux/rootfs-patches/ublinux_edu_patch_distr new file mode 100755 index 0000000..3e70bd8 --- /dev/null +++ b/ublinux/rootfs-patches/ublinux_edu_patch_distr @@ -0,0 +1,8 @@ +#!/bin/bash + +echo $0 +PATH_EDITION="/usr/lib/ublinux/rootfs-patches/ublinux_edu" +while IFS= read -ru3 SCRIPT; do + echo "${SCRIPT}" + ${SCRIPT} +done 3< <(find ${PATH_EDITION} -type f -name "*" | sort) diff --git a/ublinux/rootfs-patches/ublinux_edu_patch_distr.sh b/ublinux/rootfs-patches/ublinux_edu_patch_distr.sh deleted file mode 100755 index a72783d..0000000 --- a/ublinux/rootfs-patches/ublinux_edu_patch_distr.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -echo $0 -find /usr/lib/ublinux/rootfs-patches/ublinux_edu -type f -name \*.sh | sort | while read a ;do - echo $a - bash $a -done diff --git a/ublinux/rootfs-patches/ublinux_patch_distr b/ublinux/rootfs-patches/ublinux_patch_distr new file mode 100755 index 0000000..4e134c8 --- /dev/null +++ b/ublinux/rootfs-patches/ublinux_patch_distr @@ -0,0 +1,8 @@ +#!/bin/bash + +echo $0 +PATH_EDITION="/usr/lib/ublinux/rootfs-patches/ublinux" +while IFS= read -ru3 SCRIPT; do + echo "${SCRIPT}" + ${SCRIPT} +done 3< <(find ${PATH_EDITION} -type f -name "*" | sort) diff --git a/ublinux/rootfs-patches/ublinux_patch_distr.sh b/ublinux/rootfs-patches/ublinux_patch_distr.sh deleted file mode 100755 index 5932ede..0000000 --- a/ublinux/rootfs-patches/ublinux_patch_distr.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -echo $0 -find /usr/lib/ublinux/rootfs-patches/ublinux -type f -name \*.sh | sort | while read a ;do - echo $a - bash $a -done diff --git a/ublinux/rootfs-patches/ublinux_srv_patch_distr b/ublinux/rootfs-patches/ublinux_srv_patch_distr new file mode 100755 index 0000000..c29a39e --- /dev/null +++ b/ublinux/rootfs-patches/ublinux_srv_patch_distr @@ -0,0 +1,8 @@ +#!/bin/bash + +echo $0 +PATH_EDITION="/usr/lib/ublinux/rootfs-patches/ublinux_srv" +while IFS= read -ru3 SCRIPT; do + echo "${SCRIPT}" + ${SCRIPT} +done 3< <(find ${PATH_EDITION} -type f -name "*" | sort) diff --git a/ublinux/rootfs-patches/ublinux_srv_patch_distr.sh b/ublinux/rootfs-patches/ublinux_srv_patch_distr.sh deleted file mode 100755 index 4bf4a0a..0000000 --- a/ublinux/rootfs-patches/ublinux_srv_patch_distr.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -echo $0 -find /usr/lib/ublinux/rootfs-patches/ublinux_srv -type f -name \*.sh | sort | while read a ;do - echo $a - bash $a -done diff --git a/ublinux/scripts/gpu_passthrough_revert.sh b/ublinux/scripts/gpu_passthrough_revert similarity index 94% rename from ublinux/scripts/gpu_passthrough_revert.sh rename to ublinux/scripts/gpu_passthrough_revert index 0d79280..14f14b8 100755 --- a/ublinux/scripts/gpu_passthrough_revert.sh +++ b/ublinux/scripts/gpu_passthrough_revert @@ -6,7 +6,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # set -x - + # Re-Bind GPU to Nvidia Driver virsh nodedev-reattach pci_0000_09_00_1 virsh nodedev-reattach pci_0000_09_00_0 diff --git a/ublinux/scripts/gpu_passthrough_single.sh b/ublinux/scripts/gpu_passthrough_single similarity index 100% rename from ublinux/scripts/gpu_passthrough_single.sh rename to ublinux/scripts/gpu_passthrough_single diff --git a/ublinux/scripts/printers_setup.sh b/ublinux/scripts/printers_setup similarity index 74% rename from ublinux/scripts/printers_setup.sh rename to ublinux/scripts/printers_setup index 3ebfaae..743e19b 100755 --- a/ublinux/scripts/printers_setup.sh +++ b/ublinux/scripts/printers_setup @@ -6,7 +6,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # ## -## printers_setup.sh [$1 $2] +## printers_setup [$1 $2] ## without $1 $2 - Action=auto ## $1 - Action ## add @@ -17,8 +17,7 @@ ## sys/devices/pci0000:00/0000:00:14.0/usb1/1-8 ## -# Проверка на суперпользователя -#[[ $USER != 'root' ]] && exec sudo "$0" +[[ -f /usr/bin/bash ]] && /usr/bin/bash --version | grep -q ^"GNU bash" || exit 1 LIST_PPD=$(cat </dev/null)" DEV_IDPRODUCT="$(cat /${DEVNAME}/../idProduct)" @@ -43,31 +42,31 @@ init_printer(){ PRINTER_CMD="$(echo "${DEV_IEEE1284_ID}" | grep CMD | head -1 | cut -d: -f2 2>/dev/null)" PRINTER_CLS="$(echo "${DEV_IEEE1284_ID}" | grep CLS | head -1 | cut -d: -f2 2>/dev/null)" PRINTER_NAME=$(echo "${PRINTER_MDL}" | tr " " "-" 2>/dev/null) - for WAIT_TIME in 1 2 3 4; do + for WAIT_TIME in 1 2 3 4; do PRINTER_LP=$(basename $(ls -Udb /${DEVNAME}/usbmisc/lp* 2>/dev/null | head -1) 2>/dev/null) [[ -z ${PRINTER_LP} ]] && sleep ${WAIT_TIME} || break done # PRINTER_LP="/dev/$(cat /${DEVNAME}/usbmisc/*/uevent | grep DEVNAME | cut -d= -f2)" PRINTER_LP="/dev/usb/${PRINTER_LP}" - echo "$(date '+%m.%d.%Y %T') : $0 : init_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : init_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" [[ ${PRINTER_CLS} == "PRINTER" ]] || exit 1 [[ -z ${PRINTER_NAME} ]] && exit 1 # PATH_LOG="/tmp/printer-${DEV_SERIAL}.log" } add_printer(){ - echo "$(date '+%m.%d.%Y %T') : $0 : add_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : add_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" # echo "${LIST_PPD}" | while read STR_PRINTER; do # if [[ ${PRINTER_MDL} == $(echo ${STR_PRINTER} | cut -d":" -f1) ]]; then # NAME_URI=$(lpinfo -v | grep "direct" | grep "${DEV_SERIAL}" | cut -d" " -f2 | head -1) # NAME_PPD=$(lpinfo --make-and-model "${PRINTER_MDL}" -m | head -1 | cut -d" " -f1) # lpadmin -E -p ${PRINTER_NAME} -E -v "${NAME_URI}" -m ${NAME_PPD} -D "Info" -L "Office" -o "printer-is-shared=false" -m ${NAME_PPD} -# fi +# fi # done if [[ ${PRINTER_CMD} == "CAPT" ]]; then # /usr/bin/bash -c "${PATH_SETUP_CAPT} ${DEVNAME} ${ACTION}" - echo "$(date '+%m.%d.%Y %T') : $0 : Forward to CAPT script : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" - /usr/bin/bash -c "/usr/lib/ublinux/scripts/printers_setup_capt.sh ${ACTION} ${DEVNAME} " + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Forward to CAPT script : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" + /usr/lib/ublinux/scripts/printers_setup_capt ${ACTION} ${DEVNAME} else # NAME_URI=$(lpinfo -v | grep "direct" | grep "usb:" | grep "${DEV_SERIAL}" | cut -d" " -f2 | head -1) NAME_URI=$(/usr/lib/cups/backend/usb | grep "direct usb:" | grep "${DEV_SERIAL}" | cut -d" " -f2 | head -1) @@ -79,7 +78,7 @@ add_printer(){ # PAGESIZE_OPT=$(lpoptions -l -p "${PRINTER_NAME}" | grep -E "PageSize|Page Size|Media Size" | head -1 | cut -d: -f1) # [[ -n ${PAGESIZE_OPT} ]] && echo "lpoptions -E -p "${PRINTER_NAME}" -o "${PAGESIZE_OPT%%/*}"=A4" # Duplex On -# DUPLEX_OPT=$(lpoptions -l -p "${PRINTER_NAME}" | grep -E "HPOption_Duplexer|Duplex Unit|Duplexing" | head -1 | cut -d: -f1) +# DUPLEX_OPT=$(lpoptions -l -p "${PRINTER_NAME}" | grep -E "HPOption_Duplexer|Duplex Unit|Duplexing" | head -1 | cut -d: -f1) # [[ -n ${DUPLEX_OPT} ]] && echo "lpoptions -p "${PRINTER_NAME}" -o "${DUPLEX_OPT%%/*}"=True" lpoptions -E -d "${PRINTER_NAME}" >/dev/null @@ -87,13 +86,13 @@ add_printer(){ cupsenable -E "${PRINTER_NAME}" cupsaccept -E "${PRINTER_NAME}" echo "export PRINTER=\"${PRINTER_NAME}\"" > /etc/profile.d/ublinux-default-printer.sh - echo "export LPDEST=\"${PRINTER_NAME}\"" >> /etc/profile.d/ublinux-default-printer.sh - echo "$(date '+%m.%d.%Y %T') : $0 : end add_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" + echo "export LPDEST=\"${PRINTER_NAME}\"" >> /etc/profile.d/ublinux-default-printer.sh + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : end add_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" fi } remove_printer(){ - /usr/lib/ublinux/scripts/printers_setup_capt.sh ${ACTION} ${DEVNAME} + /usr/lib/ublinux/scripts/printers_setup_capt ${ACTION} ${DEVNAME} # Удаляем все принтеры которые не обнаружены /usr/lib/cups/backend/usb while read STR_PRINTER; do PRINTER_NAME=$(echo ${STR_PRINTER%%:*}) @@ -106,18 +105,22 @@ remove_printer(){ cupsreject -E "${PRINTER_NAME}" 2>/dev/null # lpadmin -x "${PRINTER_NAME}" 2>/dev/null grep -q "${PRINTER_NAME}" /etc/profile.d/ublinux-default-printer.sh 2>/dev/null && rm -f /etc/profile.d/ublinux-default-printer.sh - echo "$(date '+%m.%d.%Y %T') : $0 : remove_printer : ${ACTION} : ${DEVNAME} : ${PRINTER_NAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_printer : ${ACTION} : ${DEVNAME} : ${PRINTER_NAME}" fi done <<< "$(LC_ALL=en_US.UTF-8 lpstat -v 2>/dev/null | grep "device for" | sed "s/device for //")" } -################################################################# -# # -# Main # -# # -################################################################# +############################### +### ::: M A I N ::: ### +############################### - PATH_SETUP_CAPT="/usr/lib/ublinux/scripts/printers_setup_capt.sh" + [[ -d ${SSC_EXTRACT_DIR} ]] && rm -rf "${SSC_EXTRACT_DIR}" + [[ -n ${SSC_ARGV0} ]] && PKGNAME=${SSC_ARGV0##*/} && PKGPATH=${SSC_ARGV0%/*} || { PKGNAME=${0##*/} && PKGPATH=${0%/*}; } + + # Проверка на суперпользователя + #[[ $USER != 'root' ]] && exec sudo "${PKGNAME}" + + PATH_SETUP_CAPT="/usr/lib/ublinux/scripts/printers_setup_capt" PATH_LOG="/var/log/cups/printers_setup.log" exec 3>&1 4>&2 @@ -128,21 +131,21 @@ remove_printer(){ [[ -z ${DEVNAME} ]] && DEVNAME=$2 ([[ -z ${DEVNAME} || -z ${ACTION} ]]) && exit 0 echo; echo "-------------------------------------------------------------------------------------------------------------------" - echo "$(date '+%m.%d.%Y %T') : $0 : Start : ${ACTION} : ${DEVNAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Start : ${ACTION} : ${DEVNAME}" case "${ACTION}" in add) sleep 5 - init_printer - add_printer + init_printer + add_printer ;; remove) # echo "${DEVNAME}" -# echo $0 $@ called by $PPID +# echo ${PKGNAME} $@ called by $PPID remove_printer ;; esac - echo "$(date '+%m.%d.%Y %T') : $0 : Finish : ${ACTION} : ${DEVNAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Finish : ${ACTION} : ${DEVNAME}" diff --git a/ublinux/scripts/printers_setup_capt.sh b/ublinux/scripts/printers_setup_capt similarity index 83% rename from ublinux/scripts/printers_setup_capt.sh rename to ublinux/scripts/printers_setup_capt index a730e26..5cc4ff7 100755 --- a/ublinux/scripts/printers_setup_capt.sh +++ b/ublinux/scripts/printers_setup_capt @@ -6,7 +6,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # ## -## printers_setup_capt.sh [$1 $2] +## printers_setup_capt [$1 $2] ## without $1 $2 - Action=auto ## $1 - Action ## add @@ -17,12 +17,11 @@ ## sys/devices/pci0000:00/0000:00:14.0/usb1/1-8 ## -# Проверка на суперпользователя -#[[ $USER != 'root' ]] && exec sudo "$0" +[[ -f /usr/bin/bash ]] && /usr/bin/bash --version | grep -q ^"GNU bash" || exit 1 init_printer(){ echo "${DEVNAME}" | grep -q "/dev/usb/lp" && DEVNAME="$(udevadm info -a -n ${DEVNAME} 2>/dev/null | grep "looking at" | head -1 | cut -d\' -f2 | sed "s/\/usbmisc.*//")" - [[ -z "${DEVNAME}" ]] && echo "$(date '+%m.%d.%Y %T') : $0 : ${ACTION} : ERROR : Not found DEVICE ${DEVNAME}"; [[ -z "${DEVNAME}" ]] && exit 1 + [[ -z "${DEVNAME}" ]] && echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : ${ACTION} : ERROR : Not found DEVICE ${DEVNAME}"; [[ -z "${DEVNAME}" ]] && exit 1 DEV_IDPRODUCT="$(cat /${DEVNAME}/../idProduct)" DEV_IDVENDOR="$(cat /${DEVNAME}/../idVendor)" DEV_SERIAL="$(cat /${DEVNAME}/../serial)" @@ -34,14 +33,14 @@ init_printer(){ # PRINTER_NAME="$(echo "${PRINTER_MDL}" | tr "/" "-" | tr " " "-" 2>/dev/null)-CAPT" PRINTER_NAME="$(echo "${PRINTER_MDL}" | tr "/" "-" | tr " " "-" 2>/dev/null)" PRINTER_NAME_PPD="$(echo "${PRINTER_MDL}" | tr " " "-" 2>/dev/null)" - for WAIT_TIME in 1 2 3 4; do + for WAIT_TIME in 1 2 3 4; do PRINTER_LP=$(basename $(ls -Udb /${DEVNAME}/usbmisc/lp* 2>/dev/null | head -1) 2>/dev/null) [[ -z ${PRINTER_LP} ]] && sleep ${WAIT_TIME} || break done # PRINTER_LP="/dev/$(cat /${DEVNAME}/usbmisc/*/uevent | grep DEVNAME | cut -d= -f2)" PRINTER_LP="/dev/usb/${PRINTER_LP}" [[ ${PRINTER_MDL} == "LBP810" ]] && PRINTER_MDL="LBP1120" - echo "$(date '+%m.%d.%Y %T') : $0 : init_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : init_printer : ${ACTION} : ${DEVNAME} : ${DEV_IDPRODUCT}:${DEV_IDVENDOR} : ${PRINTER_MFG} : ${PRINTER_MDL} : ${PRINTER_CMD} : ${PRINTER_CLS} : ${DEV_SERIAL} : ${PRINTER_NAME} : ${PRINTER_LP}" [[ ${PRINTER_MDL} ]] || exit 1 [[ ${PRINTER_CLS} == "PRINTER" ]] || exit 1 [[ ${PRINTER_CMD} == "CAPT" ]] || exit 1 @@ -50,28 +49,28 @@ init_printer(){ } auto_detect_capt_lp(){ - echo "$(date '+%m.%d.%Y %T') : $0 : auto_detect_lp" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : auto_detect_lp" for DEV_LP in /dev/usb/lp*; do INFODEV="$(udevadm info -a -n ${DEV_LP} 2>/dev/null)" DEV_IEEE1284_ID="$(echo "${INFODEV}" | grep ATTRS{ieee1284_id} | head -1 | grep -o '".*"' | tr -d '"' | tr ";" "\n" 2>/dev/null)" PRINTER_MDL="$(echo "${DEV_IEEE1284_ID}" | grep MDL | head -1 | cut -d: -f2 2>/dev/null)" PRINTER_CMD="$(echo "${DEV_IEEE1284_ID}" | grep CMD | head -1 | cut -d: -f2 2>/dev/null)" - [[ ${PRINTER_CMD} == "CAPT" ]] && DEVNAME="$(udevadm info -a -n ${DEV_LP} | grep "looking at" | head -1 | cut -d\' -f2 | sed "s/\/usbmisc.*//")" && echo "$(date '+%m.%d.%Y %T') : $0 : Auto detect CAPT printer: ${DEV_LP}" || echo "$(date '+%m.%d.%Y %T') : $0 : Printer: ${DE_LP} is not CAPT !" + [[ ${PRINTER_CMD} == "CAPT" ]] && DEVNAME="$(udevadm info -a -n ${DEV_LP} | grep "looking at" | head -1 | cut -d\' -f2 | sed "s/\/usbmisc.*//")" && echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Auto detect CAPT printer: ${DEV_LP}" || echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Printer: ${DE_LP} is not CAPT !" done } # Удалить CAPT принтер, который определился и установился автоматически без CCPD remove_not_ccpdcapt(){ - echo "$(date '+%m.%d.%Y %T') : $0 : remove_not_ccpdcapt : ${PRINTER_NAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_not_ccpdcapt : ${PRINTER_NAME}" PRINTER_NOTCCP=$(LC_ALL=en_US.UTF-8 lpstat -v 2>/dev/null | grep " usb://.*${DEV_SERIAL}.*" | head -1 | cut -d: -f1 | cut -d" " -f3) - [[ -n ${PRINTER_NOTCCP} ]] && lpadmin -x "${PRINTER_NOTCCP}" && echo "$(date '+%m.%d.%Y %T') : $0 : remove_not_ccpdcapt : REMOVE : ${PRINTER_NOTCCP}" -# LC_ALL=en_US.UTF-8 lpstat -v "${PRINTER_NAME}" 2>/dev/null | grep -q " usb://.*${DEV_SERIAL}.*" | head -1 && lpadmin -x "${PRINTER_NAME}" && echo "$(date '+%m.%d.%Y %T') : $0 : remove_not_ccpdcapt : REMOVE : ${PRINTER_NAME}" + [[ -n ${PRINTER_NOTCCP} ]] && lpadmin -x "${PRINTER_NOTCCP}" && echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_not_ccpdcapt : REMOVE : ${PRINTER_NOTCCP}" +# LC_ALL=en_US.UTF-8 lpstat -v "${PRINTER_NAME}" 2>/dev/null | grep -q " usb://.*${DEV_SERIAL}.*" | head -1 && lpadmin -x "${PRINTER_NAME}" && echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_not_ccpdcapt : REMOVE : ${PRINTER_NAME}" } add_printer(){ # Сделать проверку, если принтер существует с одинаковым именем, но другой адрес ${PRINTER_LP} if ! LC_ALL=en_US.UTF-8 lpstat -v "${PRINTER_NAME}" &>/dev/null; then - echo "$(date '+%m.%d.%Y %T') : $0 : add_printer : ${PRINTER_NAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : add_printer : ${PRINTER_NAME}" NAME_URI="ccp://localhost:59687" NAME_PPD=$(lpinfo --make-and-model ${PRINTER_NAME_PPD} -m | head -1 | cut -d" " -f1) # NAME_PPD=$(basename -- $(grep -H ${PRINTER_NAME} /usr/share/cups/model/*.ppd | head -1 | cut -d: -f1)) @@ -84,7 +83,7 @@ add_printer(){ # PAGESIZE_OPT=$(lpoptions -l -p ${PRINTER_NAME} | grep -E "PageSize|Media Size" | head -1 | cut -d: -f1) # [[ ${PAGESIZE_OPT} ]] && echo "lpoptions -E -p ${PRINTER_NAME} -o ${PAGESIZE_OPT%%/*}=A4" # Duplex On -# DUPLEX_OPT=$(lpoptions -l -p ${PRINTER_NAME} | grep -E "HPOption_Duplexer|Duplex Unit|Duplexing" | head -1 | cut -d: -f1) +# DUPLEX_OPT=$(lpoptions -l -p ${PRINTER_NAME} | grep -E "HPOption_Duplexer|Duplex Unit|Duplexing" | head -1 | cut -d: -f1) # [[ ${DUPLEX_OPT} ]] && echo "lpoptions -p ${PRINTER_NAME} -o ${DUPLEX_OPT%%/*}=True" lpoptions -E -d "${PRINTER_NAME}" &>/dev/null lpadmin -E -d "${PRINTER_NAME}" @@ -98,7 +97,7 @@ remove_printer(){ while read PRINTER_DEV_LP_CAPT; do if [[ ! -e "${PRINTER_DEV_LP_CAPT}" ]] || echo "${DEVNAME}" | grep -q "/dev/usb/lp"; then PRINTER_NAME=$(cat /etc/ccpd.conf | grep -B1 "^DevicePath" | head -1 | tr -d "<&>" | cut -d" " -f2) - echo "$(date '+%m.%d.%Y %T') : $0 : remove_printer : ${ACTION} : ${DEVNAME} : ${PRINTER_DEV_LP_CAPT} : ${PRINTER_NAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_printer : ${ACTION} : ${DEVNAME} : ${PRINTER_DEV_LP_CAPT} : ${PRINTER_NAME}" cupsdisable -E "${PRINTER_NAME}" 2>/dev/null cupsreject -E "${PRINTER_NAME}" 2>/dev/null ccpdadmin -x "${PRINTER_NAME}" 2>/dev/null @@ -111,7 +110,7 @@ remove_printer(){ done <<< "$(systemctl -q is-enabled ccpd.service && [[ -f /etc/ccpd.conf ]] && cat /etc/ccpd.conf | grep "^DevicePath" | cut -d" " -f2 | xargs)" # Удалить все принтеры CCP while read PRINTER_CCP; do - echo "$(date '+%m.%d.%Y %T') : $0 : remove_printer : REMOVE PRINTER CCP: ${PRINTER_CCP}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : remove_printer : REMOVE PRINTER CCP: ${PRINTER_CCP}" # cupsdisable -E "${PRINTER_CCP}" 2>/dev/null # cupsreject -E "${PRINTER_CCP}" 2>/dev/null # ccpdadmin -x "${PRINTER_CCP}" @@ -125,7 +124,7 @@ start_captstatusui(){ DESKTOP_CAPTSTATUSUI="${NAME_CAPTSTATUSUI}.desktop" SERVICE_CAPTSTATUSUI="${NAME_CAPTSTATUSUI}.service" # Создаем кнопку запуска captstatusui - echo "$(date '+%m.%d.%Y %T') : $0 : start_captstatusui : ${PATH_APPLICATION}/${DESKTOP_CAPTSTATUSUI}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : start_captstatusui : ${PATH_APPLICATION}/${DESKTOP_CAPTSTATUSUI}" echo '[Desktop Entry] Type=Application Exec=captstatusui -P '${PRINTER_NAME}' @@ -168,7 +167,7 @@ stop_captstatusui(){ NAME_CAPTSTATUSUI="captstatusui-${PRINTER_NAME}" DESKTOP_CAPTSTATUSUI="${NAME_CAPTSTATUSUI}.desktop" SERVICE_CAPTSTATUSUI="${NAME_CAPTSTATUSUI}.service" - echo "$(date '+%m.%d.%Y %T') : $0 : stop_captstatusui : ${PATH_APPLICATION}/${DESKTOP_CAPTSTATUSUI}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : stop_captstatusui : ${PATH_APPLICATION}/${DESKTOP_CAPTSTATUSUI}" [[ -n ${LOGIN_USER} ]] && systemctl -q --machine=${LOGIN_USER}@.host --user disable --now ${SERVICE_CAPTSTATUSUI} 2>/dev/null systemctl --global disable ${SERVICE_CAPTSTATUSUI} # rm -f "${XDG_AUTOSTART}/${DESKTOP_CAPTSTATUSUI}" @@ -180,11 +179,15 @@ stop_captstatusui(){ # systemctl daemon-reload } -################################################################# -# # -# Main # -# # -################################################################# +############################### +### ::: M A I N ::: ### +############################### + + [[ -d ${SSC_EXTRACT_DIR} ]] && rm -rf "${SSC_EXTRACT_DIR}" + [[ -n ${SSC_ARGV0} ]] && PKGNAME=${SSC_ARGV0##*/} && PKGPATH=${SSC_ARGV0%/*} || { PKGNAME=${0##*/} && PKGPATH=${0%/*}; } + + # Проверка на суперпользователя + #[[ $USER != 'root' ]] && exec sudo "${PKGNAME}" PATH_LOG="/var/log/cups/printers_setup.log" exec 3>&1 4>&2 @@ -192,9 +195,9 @@ stop_captstatusui(){ exec 1>>${PATH_LOG} 2>&1 [[ -n $1 ]] && ACTION="$1" || ACTION="add" - [[ -n $2 ]] && DEVNAME="$2" || auto_detect_capt_lp + [[ -n $2 ]] && DEVNAME="$2" || auto_detect_capt_lp - echo "$(date '+%m.%d.%Y %T') : $0 : Start: ${ACTION} : ${DEVNAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Start: ${ACTION} : ${DEVNAME}" # Пользователь под которым мы вошли в ситему LOGIN_USER=$(who | grep "(:[[:digit:]])" | grep "tty" | head -1 | cut -d" " -f1) #" @@ -205,7 +208,7 @@ stop_captstatusui(){ XDG_AUTOSTART="/etc/xdg/autostart" PATH_APPLICATION="/usr/share/applications" # Подгружаем файл содержащий путь до рабочего стола - XDG_DESKTOP_DIR=$(cat $(find /home/*/.config/user-dirs.dirs -type f -print -quit) | grep XDG_DESKTOP_DIR | cut -d= -f2 | tr -d '"' | cut -d"/" -f2) + XDG_DESKTOP_DIR=$(cat $(find /home/*/.config/user-dirs.dirs -type f -print -quit) | grep XDG_DESKTOP_DIR | cut -d= -f2 | tr -d '"' | cut -d"/" -f2) [[ -z ${XDG_DESKTOP_DIR} ]] && XDG_DESKTOP_DIR="Рабочий стол" case "$ACTION" in add) @@ -214,15 +217,15 @@ stop_captstatusui(){ remove_not_ccpdcapt add_printer start_captstatusui - sleep 20 + sleep 20 remove_not_ccpdcapt ;; remove) - remove_printer + remove_printer stop_captstatusui ;; esac - echo "$(date '+%m.%d.%Y %T') : $0 : Finish : ${ACTION} : ${DEVNAME}" + echo "$(date '+%m.%d.%Y %T') : ${PKGNAME} : Finish : ${ACTION} : ${DEVNAME}" #udevadm info -a -n /dev/usb/lp0 | grep "ATTRS{ieee1284_id}" #lpstat -v @@ -246,7 +249,7 @@ stop_captstatusui(){ #[LBP6310]=6310 [LBP7010C]=7018C [LBP7018C]=7018C [LBP7200C]=7200C [LBP7210C]=7210C \ #[LBP9100C]=9100C [LBP9200C]=9200C) -#отсортированные имена принтеров +#отсортированные имена принтеров #NAMESPRINTERS=$(echo "${!LASERSHOT[@]}" | tr ' ' '\n' | sort -n -k1.4) #список моделей, которые поддерживаются утилитой автоотключения diff --git a/ublinux/scripts/ubxswitcher.sh b/ublinux/scripts/ubxswitcher similarity index 78% rename from ublinux/scripts/ubxswitcher.sh rename to ublinux/scripts/ubxswitcher index 56a4a34..083fda6 100755 --- a/ublinux/scripts/ubxswitcher.sh +++ b/ublinux/scripts/ubxswitcher @@ -11,14 +11,14 @@ # Делаем бэкап последней записи буфера BACKUPCLIPB=$(xsel -b) if [[ -n $1 ]]; then - xdotool key --delay 150 Control - xdotool key --delay 150 Control+Left -# xdotool keydown --delay 150 Control key --delay 150 Left keyup --delay 150 Control - xdotool key --delay 50 Shift+End + xdotool key --delay 150 Control + xdotool key --delay 150 Control+Left +# xdotool keydown --delay 150 Control key --delay 150 Left keyup --delay 150 Control + xdotool key --delay 50 Shift+End else - xdotool key --delay 150 End - xdotool key --delay 150 End - xdotool key --delay 50 Shift+Home + xdotool key --delay 150 End + xdotool key --delay 150 End + xdotool key --delay 50 Shift+Home fi xdotool key --delay 50 Control+Insert SELCLIPB=$(xsel -b) @@ -31,7 +31,3 @@ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~ф # Восстанавливаем бэкап последней записи буфера echo -n "${BACKUPCLIPB}" | xsel -b -i # echo -n "${BACKUPCLIPB}" | xsel -p -i - - - - diff --git a/ublinux/systemd/printers-setup@.service b/ublinux/systemd/printers-setup@.service index 7005e2b..bfa7ec8 100644 --- a/ublinux/systemd/printers-setup@.service +++ b/ublinux/systemd/printers-setup@.service @@ -17,4 +17,4 @@ Requires=cups.socket After=cups.socket [Service] -ExecStart=/usr/bin/bash /usr/lib/ublinux/scripts/printers_setup.sh add %I +ExecStart=/usr/lib/ublinux/scripts/printers_setup add %I diff --git a/ublinux/udev/70-setup-prn-ubconfig.rules b/ublinux/udev/70-setup-prn-ubconfig.rules index 915287c..b855159 100644 --- a/ublinux/udev/70-setup-prn-ubconfig.rules +++ b/ublinux/udev/70-setup-prn-ubconfig.rules @@ -10,8 +10,8 @@ # Low-level USB device add trigger #ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", ENV{ID_USB_INTERFACES}!="*:070104:*", TAG+="systemd", ENV{SYSTEMD_WANTS}="configure-printer-ublinux@usb-$env{BUSNUM}-$env{DEVNUM}.service" #ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}="configure-printer-ublinux@%p.service" -#ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/mnt/livemedia/ublinux-data/rootcopy/usr/lib/ublinux/scripts/printer-udev-test.sh add %p" -#ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/usr/lib/ublinux/scripts/printers_setup.sh add %p" +#ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/mnt/livemedia/ublinux-data/rootcopy/usr/lib/ublinux/scripts/printer-udev-test add %p" +#ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/usr/lib/ublinux/scripts/printers_setup add %p" #ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", TAG+="systemd", ENV{SYSTEMD_WANTS}="configure-printer-ublinux@usb-$env{BUSNUM}-$env{DEVNUM}.service" ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printers-setup@.service" @@ -24,6 +24,6 @@ ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ENV{INTERFACE}= # 7/1/2 - device with bidirectional USB, managed by usb backend # 7/1/3 - device with special USB protocol, managed by hp backend # 7/1/4 - device with IPP over USB protocol, managed by ipp-usb daemon -ACTION=="remove", SUBSYSTEM=="usb", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/usr/lib/ublinux/scripts/printers_setup.sh remove %p" +ACTION=="remove", SUBSYSTEM=="usb", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="/usr/lib/ublinux/scripts/printers_setup remove %p" #ACTION=="remove", SUBSYSTEM=="usb", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", TAG+="systemd" diff --git a/ublinux/udev/99-printers-local-ubconfig.rules b/ublinux/udev/99-printers-local-ubconfig.rules index 0a6ab20..aa2212f 100644 --- a/ublinux/udev/99-printers-local-ubconfig.rules +++ b/ublinux/udev/99-printers-local-ubconfig.rules @@ -18,7 +18,7 @@ #ACTION=="remove", SUBSYSTEM=="usb", ENV{INTERFACE}=="7/1/*", ENV{INTERFACE}!="7/1/4", RUN+="udev-configure-printer remove %p" #ENV{hp_test}=="yes", PROGRAM="/bin/sh -c 'logger -p user.info loading HP Device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c '/usr/bin/nohup /usr/bin/hp-config_usb_printer $env{BUSNUM}:$env{DEVNUM}'" -#SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", RUN+="/usr/lib/ublinux/cups-printers.sh" +#SUBSYSTEM=="block", ATTRS{idVendor}=="03f0", ACTION=="add", RUN+="/usr/lib/ublinux/cups-printers" # Lulzbot TAZ Pro in Bootloader mode (for flashing firmware) #SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MAKER_TOOL}="1" @@ -36,7 +36,7 @@ #LABEL="hpmud_rules_end" -#KERNEL=="lp*", ACTION=="add|remove", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers.sh" -#ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="c12a", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers.sh" -#ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="c12a", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers.sh" -ACTION=="add|remove", SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers.sh" +#KERNEL=="lp*", ACTION=="add|remove", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers" +#ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="c12a", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers" +#ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="c12a", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers" +ACTION=="add|remove", SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*", RUN+="/bin/bash -c /usr/lib/ublinux/scripts/udev-cups-printers"