diff --git a/ublinux/functions b/ublinux/functions index 2ba8c32..072e29c 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -807,7 +807,7 @@ ubconfig_exec_system(){ case "[${SECTION_NAME}]" in "[${SYSCONF}/config]"|"[config]") case "${NAME_VAR}" in - HOSTNAME) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/30-network-hostname "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + HOSTNAME) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/30-network-hostname ;; SERVICESSTART|SERVICESNOSTART|SERVICESMASK|SERVICESUNMASK|\ SERVICES_ENABLE|SERVICES_DISABLE|SERVICES_MASK|SERVICES_UNMASK) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/20-services exec_services_enabledisable "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" @@ -819,7 +819,7 @@ ubconfig_exec_system(){ ;; "[${SYSCONF}/system]"|"[system]") case "${NAME_VAR}" in - HOSTNAME) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/30-network-hostname "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + HOSTNAME) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/30-network-hostname ;; SERVICESSTART|SERVICESNOSTART|SERVICESMASK|SERVICESUNMASK|\ SERVICES_ENABLE|SERVICES_DISABLE|SERVICES_MASK|SERVICES_UNMASK) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/20-services exec_services_enabledisable "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" @@ -882,8 +882,8 @@ ubconfig_exec_system(){ ;; "[${SYSCONF}/server]"|"[server]") case "${NAME_VAR}" in - STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-containers-storage "${COMMAND_MODE_VAR}" ;; - STORAGE_LIBVIRT_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/81-server-libvirt-storage "${COMMAND_MODE_VAR}" ;; + STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-containers-storage ;; + STORAGE_LIBVIRT_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/81-server-libvirt-storage ;; UBPILE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; UBPILE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; UBPILE_REVERSE_PROXY_PORT) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_02_reverse_proxy_port "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; @@ -892,30 +892,30 @@ ubconfig_exec_system(){ ;; "[${SYSCONF}/desktop]"|"[desktop]") case "${NAME_VAR}" in - MULTISEAT_SIMPLE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/55-multiseat ;; + MULTISEAT_SIMPLE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/55-multiseat ;; AUTOEXEC) ${ROOTFS}/usr/lib/ublinux/rc.desktop/all/autoexec "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; AUTOEXEC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.desktop/all/autoexec "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; - LIGHTDM_XDMCP) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_xdmcp ;; - LIGHTDM_XDMCP\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_xdmcp ;; - LIGHTDM_GREETER\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_greeter;; + LIGHTDM_XDMCP) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_xdmcp "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + LIGHTDM_XDMCP\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_xdmcp "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + LIGHTDM_GREETER\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/60-lightdm-settings exec_lightdm_greeter "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; *) NO_FIND_EXCUTE=1 ;; esac ;; "[${SYSCONF}/save]"|"[save]") case "${NAME_VAR}" in SAVE_ALL_CACHE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/75-save-cache ;; - SAVE_ROOTCOPY_CHANGES) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; - SAVE_ROOTCOPY_INCLUDE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; - SAVE_ROOTCOPY_EXCLUDE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + SAVE_ROOTCOPY_CHANGES) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy ;; + SAVE_ROOTCOPY_INCLUDE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy ;; + SAVE_ROOTCOPY_EXCLUDE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/76-save-rootcopy ;; *) NO_FIND_EXCUTE=1 ;; esac ;; "[${SYSCONF}/network]"|"[network]") case "${NAME_VAR}" in DOMAIN) export PARENT="${PKGNAME}" - if [[ "${COMMAND_MODE_VAR}" == 'set' ]]; then + if [[ "${COMMAND_MODE_VAR}" =~ 'set' ]]; then ${ROOTFS}/usr/bin/ubdomain-client -q configure - elif [[ "${COMMAND_MODE_VAR}" == 'remove' ]]; then + elif [[ "${COMMAND_MODE_VAR}" =~ 'remove' ]]; then ${ROOTFS}/usr/bin/ubdomain-client -q unconfigure fi ;; @@ -935,12 +935,20 @@ ubconfig_exec_system(){ ACCESS_ALLOWED_SGID\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/42-access-suid-sgid exec_access_allowed_sgid ;; ACCESS_ALLOWED_INTERPRETER\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/43-access-interpreter ;; MOUNT_ATTR\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/44-mountattr ;; - MOUNT_QUOTA\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/45-disk-quota ;; + MOUNT_QUOTA\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/45-disk-quota "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; CGROUP_QUOTA\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/46-cgroup-quota "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; POLKIT\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/59-polkit ;; *) NO_FIND_EXCUTE=1 ;; esac ;; + "[${SYSCONF}/kiosk]"|"[kiosk]") + case "${NAME_VAR}" in + XFCE4_KIOSK\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/8-kiosk-xfce4-kioskrc ;; + XFCE4_KIOSK_USER_LOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/8-kiosk-xfce4-kioskrc ;; + XFCE4_KIOSK_USER_UNLOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/8-kiosk-xfce4-kioskrc ;; + *) NO_FIND_EXCUTE=1 ;; + esac + ;; \[*\]) case "${NAME_VAR}" in *) NO_FIND_EXCUTE=1 ;; diff --git a/ublinux/rc.desktop/all/autoexec b/ublinux/rc.desktop/all/autoexec index 5750be4..3f7061e 100755 --- a/ublinux/rc.desktop/all/autoexec +++ b/ublinux/rc.desktop/all/autoexec @@ -55,12 +55,13 @@ exec_autoexec_remove(){ ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then + if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then shift exec_autoexec_set $@ KERNEL_AUTOEXEC="$(cmdline_value autoexec)" [[ -n ${KERNEL_AUTOEXEC} ]] && exec_autoexec_set AUTOEXEC="${KERNEL_AUTOEXEC}" - elif [[ $1 == remove ]]; then + elif [[ $1 == @("set-="|"set--="|"remove") ]]; then shift exec_autoexec_remove $@ fi + diff --git a/ublinux/rc.halt.pre/75-save-cache b/ublinux/rc.halt.pre/75-save-cache index 18ad536..901f92d 100755 --- a/ublinux/rc.halt.pre/75-save-cache +++ b/ublinux/rc.halt.pre/75-save-cache @@ -8,17 +8,17 @@ SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/save; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null -PATH_ROOT="" +ROOTFS="" PATH_CHANGES="/memory/changes" NAME_ROOTCOPY="rootcopy" -PATH_ROOTCOPY=$(find ${PATH_ROOT}/memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_ROOTCOPY}" | head -1) -[[ -n ${PATH_ROOTCOPY} ]] || PATH_ROOTCOPY="$(find ${PATH_ROOT}/memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)" +PATH_ROOTCOPY=$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_ROOTCOPY}" | head -1) +[[ -n ${PATH_ROOTCOPY} ]] || PATH_ROOTCOPY="$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)" [[ -n ${PATH_ROOTCOPY} ]] && PATH_ROOTCOPY="${PATH_ROOTCOPY%/*}/${NAME_ROOTCOPY}" || exit 0 NAME_MODULES="modules" -PATH_MODULES=$(find ${PATH_ROOT}/memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_MODULES}" | head -1) -[[ -n ${PATH_MODULES} ]] || PATH_MODULES="$(find ${PATH_ROOT}/memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)" +PATH_MODULES=$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_MODULES}" | head -1) +[[ -n ${PATH_MODULES} ]] || PATH_MODULES="$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)" [[ -n ${PATH_MODULES} ]] && PATH_MODULES="${PATH_MODULES%/*}/${NAME_MODULES}" || exit 0 [[ -n ${PATH_ROOTCOPY} ]] || install -dm0755 -o root -g root "${PATH_ROOTCOPY}" @@ -40,13 +40,4 @@ PATH_MODULES=$(find ${PATH_ROOT}/memory/layer-base/*/ -maxdepth 1 -type d -name cp -af etc/pacman.d ${PATH_ROOTCOPY}/etc/ cp -af etc/ssh ${PATH_ROOTCOPY}/etc/ fi - - # Save DOMAIN settings - if [[ -n ${DOMAIN} && -w ${PATH_ROOTCOPY} ]]; then - cd ${PATH_CHANGES} - find etc/ -type f -name krb5.conf -exec install -CDm644 {} ${PATH_ROOTCOPY}/{} \; - find etc/ -type f -name krb5.keytab -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; - find etc/ -type f -name realmd.conf -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; - find etc/sssd/ -type f -name "*.conf" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; - fi \ No newline at end of file diff --git a/ublinux/rc.halt.pre/76-save-rootcopy b/ublinux/rc.halt.pre/76-save-rootcopy index 5dfa80d..d387f4b 100755 --- a/ublinux/rc.halt.pre/76-save-rootcopy +++ b/ublinux/rc.halt.pre/76-save-rootcopy @@ -12,6 +12,7 @@ debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/save; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/network; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null PATH_CHANGES="/memory/changes" NAME_ROOTCOPY="rootcopy" @@ -46,9 +47,29 @@ exec_save_rootcopy(){ fi } +exec_save_sssd_rootcopy(){ + PATH_ROOTCOPY=$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_ROOTCOPY}" | head -1) + [[ -n ${PATH_ROOTCOPY} ]] || PATH_ROOTCOPY="$(find ${ROOTFS}/memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)" + [[ -n ${PATH_ROOTCOPY} ]] && PATH_ROOTCOPY="${PATH_ROOTCOPY%/*}/${NAME_ROOTCOPY}" || exit 0 + + # Save DOMAIN settings + if [[ -n ${DOMAIN} && -w ${PATH_ROOTCOPY} ]]; then + [[ -f ${PATH_ROOTCOPY}/etc/krb5.conf ]] && rm -f ${PATH_ROOTCOPY}/etc/krb5.conf + [[ -f ${PATH_ROOTCOPY}/etc/krb5.keytab ]] && rm -f ${PATH_ROOTCOPY}/etc/krb5.keytab + [[ -f ${PATH_ROOTCOPY}/etc/realmd.conf ]] && rm -f ${PATH_ROOTCOPY}/etc/realmd.conf + find ${PATH_ROOTCOPY}/etc/sssd/ -type f -name "*.conf" -delete + cd ${PATH_CHANGES} + find etc/ -type f -name "krb5.conf" -exec install -CDm644 {} ${PATH_ROOTCOPY}/{} \; + find etc/ -type f -name "krb5.keytab" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; + find etc/ -type f -name "realmd.conf" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; + find etc/sssd/ -type f -name "*.conf" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \; + fi +} + ################ ##### MAIN ##### ################ [[ ${SYSTEMBOOT_STATEMODE} == "changes" ]] && exit 0 exec_save_rootcopy $@ + exec_save_sssd_rootcopy $@ diff --git a/ublinux/rc.local.d/42-domain_join b/ublinux/rc.local.d/42-domain_join index 83663b7..7021ced 100755 --- a/ublinux/rc.local.d/42-domain_join +++ b/ublinux/rc.local.d/42-domain_join @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 @@ -11,19 +11,22 @@ SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" - if [[ ${DOMAIN} != "" ]]; then +LOG_UBDOMAIN="/var/log/ubdomain-client.log" + + if [[ -n ${DOMAIN} ]]; then ## Указать доменных пользователей AccountsService, что-бы были видны для выбора логина в DM systemctl --quiet --wait is-system-running - ls -d /home/*@*/ 2>/dev/null | xargs -ri basename {} | xargs -ri dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.Accounts /org/freedesktop/Accounts org.freedesktop.Accounts.CacheUser string:{} - cp -af /memory/layer-base/1/ublinux-data/rootcopy/etc/krb5.conf /etc/ -# ls -d /home/*@*/ 2>/dev/null | xargs -ri basename {} | xargs -ri touch /var/lib/AccountsService/users/{} - if /usr/bin/systemctl --wait is-active network-online.target; then - touch /var/log/ubdomain-client.log - date >> /var/log/ubdomain-client.log -# /usr/bin/ubdomain-client configure &>> /var/log/ubdomain-client.log + if /usr/bin/systemctl --quiet --wait is-active network-online.target &>/dev/null; then + sleep 2 + touch ${LOG_UBDOMAIN} + date >> ${LOG_UBDOMAIN} +# /usr/bin/ubdomain-client configure &>> ${LOG_UBDOMAIN} # /usr/bin/systemctl enable sssd.service # /usr/bin/systemctl restart sssd.service -# /usr/bin/adcli update -v --domain=${DOMAIN} --show-details &>> /var/log/ubdomain-client.log + /usr/bin/adcli update -v --domain=${DOMAIN} --show-details &>> ${LOG_UBDOMAIN} + echo &>> ${LOG_UBDOMAIN} + sleep 2 + ls -d /home/*@*/ 2>/dev/null | xargs -ri basename {} | xargs -ri dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.Accounts /org/freedesktop/Accounts org.freedesktop.Accounts.CacheUser string:{} &>> ${LOG_UBDOMAIN} +# ls -d /home/*@*/ 2>/dev/null | xargs -ri basename {} | xargs -ri touch /var/lib/AccountsService/users/{} fi - - fi + fi \ No newline at end of file diff --git a/ublinux/rc.local.d/43-repository b/ublinux/rc.local.d/43-repository index 4473d91..0e3db3a 100755 --- a/ublinux/rc.local.d/43-repository +++ b/ublinux/rc.local.d/43-repository @@ -121,6 +121,20 @@ exec_autoupdate(){ true } +## Удалить старые версии дубликато пакетов в базе pacman +exec_remove_duplicated_pacman(){ + PATH_PACMAN_DB="/var/lib/pacman/local/" + # Из всех дубликатов приложений в базе pacman удалить старые версии + cd ${PATH_PACMAN_DB}; rm -rdfv $(ls -1vr ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #' + + # Ситуация для которой нет обработки + # Если в полном сохранении пользователь обновиляет систему и в очередное обновление обновил только модули, то изменения останутся старыми, т.к. /changes/ имеет верхний слой + # т.е. по факту прилложения останутся старыми. Новые файлы из модуля будут видны, и далее могут не дать обновить на новые пакеты. Поэтому старые пакеты из базы pacman удаляем + # т.е. в базе pacman будут новые пакеты, а по факту файлы/бинарники старые + # Одно из решений - после установки модулей проверять какие пакеты в базе дублируются и эти файлы этих приложений из модуля переписать в корень + #sudo rsync -hrlptgoDHAXEU --existing --update --exclude ".wh.*" --progress /memory/bundles/010-core-2204-2-x86_64.ubm/ / +} + ################ ##### MAIN ##### ################ diff --git a/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc b/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc index 87dbd36..d7d2f44 100755 --- a/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc +++ b/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc @@ -11,11 +11,20 @@ debug_mode "$0" "$@" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/kiosk; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -KIOSKRC="/etc/xdg/xfce4/kiosk/kioskrc" -## Настройка /etc/xdg/xfce4/kiosk/kioskrc - if [[ -n ${XFCE4_KIOSK[@]} ]]; then +## Режим киоска XFCE4, запретить изменять параметры пользователям и группам +## XFCE4_KIOSK[:]= +## # Пользователи и группы, варианты значений: +## =ALL # Разрешить всем +## =NONE # Запретить +## =@whell,@users # Разрешить группам +## =superadmin,user-1 # Разрешить пользователям +## =@wheel,user-1 # Разрешить группе и пользователю +#XFCE4_KIOSK[xfce4-panel:CustomizePanel]=@wheel + + KIOSKRC="/etc/xdg/xfce4/kiosk/kioskrc" + if [[ ${#XFCE4_KIOSK[@]} -ne 0 ]]; then [[ -d ${KIOSKRC%/*} ]] || install -dm0755 -o root -g root "${KIOSKRC%/*}" - [[ -f ${KIOSKRC} ]] && true > ${KIOSKRC} + true > ${KIOSKRC} for SELECT in "${!XFCE4_KIOSK[@]}"; do SECTION=$(cut -d: -f1 <<< ${SELECT}) PROPERTY=$(cut -d: -f2 <<< ${SELECT}) @@ -29,4 +38,43 @@ KIOSKRC="/etc/xdg/xfce4/kiosk/kioskrc" done fi +## Назначить настройки киоска XFCE4 пользователям +## XFCE4_KIOSK_USER_LOCKED=disable +## disable # Снять все ограничения +## XFCE4_KIOSK_USER_LOCKED= +## # Пользователи и группы, варианты значений: +## =* # Все пользователи +## =@whell;@users # Указанные группы +## =superadmin;user-1 # Указанным пользователям +## =@wheel;user-1 # Указанным группам и пользователям +## XFCE4_KIOSK_USER_LOCKED="*" + +## Назначить исключения настроек киоска XFCE4 пользователям +## XFCE4_KIOSK_USER_UNLOCKED=disable +## disable # Снять все ограничения +## XFCE4_KIOSK_USER_UNLOCKED= +## # Пользователи и группы, варианты значений: +## =* # Все пользователи +## =@whell;@users # Указанные группы +## =superadmin;user-1 # Указанным пользователям +## =@wheel;user-1 # Указанным группам и пользователям +## XFCE4_KIOSK_USER_UNLOCKED="root,@wheel" + + PATH_XDG_XFCE_CHANNEL="/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/" + PARAM_LOCKED= + PARAM_UNLOCKED= + if [[ -n ${XFCE4_KIOSK_USER_LOCKED} || -n ${XFCE4_KIOSK_USER_UNLOCKED} ]]; then + if [[ ${XFCE4_KIOSK_USER_LOCKED} == "disable" || ${XFCE4_KIOSK_USER_UNLOCKED} == "disable" ]]; then + for FILE_CHANNEL_XML in ${PATH_XDG_XFCE_CHANNEL}/*.xml; do + sed -E "s/^]*>//" -i ${FILE_CHANNEL_XML} + done + else + [[ -n ${XFCE4_KIOSK_USER_LOCKED} ]] && PARAM_LOCKED=" locked=\"${XFCE4_KIOSK_USER_LOCKED//,/;}\"" + [[ -n ${XFCE4_KIOSK_USER_UNLOCKED} ]] && PARAM_UNLOCKED=" unlocked=\"${XFCE4_KIOSK_USER_UNLOCKED//,/;}\"" + for FILE_CHANNEL_XML in ${PATH_XDG_XFCE_CHANNEL}/*.xml; do + sed -E "s/^]*>//" -i ${FILE_CHANNEL_XML} + done + fi + fi + \ No newline at end of file diff --git a/ublinux/rc.post.d/45-disk-quota b/ublinux/rc.post.d/45-disk-quota index 7cf13a2..9f8e44d 100755 --- a/ublinux/rc.post.d/45-disk-quota +++ b/ublinux/rc.post.d/45-disk-quota @@ -314,7 +314,7 @@ exec_disk_quota_get(){ ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then + if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then shift exec_disk_quota $@ elif [[ $1 == get ]]; then diff --git a/ublinux/rc.post.d/46-cgroup-quota b/ublinux/rc.post.d/46-cgroup-quota index 8647092..0e0c7d4 100755 --- a/ublinux/rc.post.d/46-cgroup-quota +++ b/ublinux/rc.post.d/46-cgroup-quota @@ -61,10 +61,10 @@ exec_cgroup_quota_remove(){ ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then + if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then shift exec_cgroup_quota_set "$@" - elif [[ $1 == remove ]]; then + elif [[ $1 == @("set-="|"set--="|"remove") ]]; then shift exec_cgroup_quota_remove "$@" fi diff --git a/ublinux/rc.preinit.d/21-ntp b/ublinux/rc.preinit.d/21-ntp index 41fd090..f957649 100755 --- a/ublinux/rc.preinit.d/21-ntp +++ b/ublinux/rc.preinit.d/21-ntp @@ -88,10 +88,10 @@ exec_ntp_servers_stop(){ ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then + if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then shift exec_ntp_servers_set $@ - elif [[ $1 == remove ]]; then + elif [[ $1 == @("set-="|"set--="|"remove") ]]; then shift exec_ntp_servers_stop $@ fi diff --git a/ublinux/rc.preinit.d/23-realmd b/ublinux/rc.preinit.d/23-realmd index 472ee62..ff8eafa 100755 --- a/ublinux/rc.preinit.d/23-realmd +++ b/ublinux/rc.preinit.d/23-realmd @@ -10,8 +10,8 @@ ENABLED=yes DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS='.'; CMD_CHROOT='chroot . '; } 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" "$@" @@ -40,7 +40,7 @@ SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null #fi if [[ -n ${DOMAIN} && ${DOMAIN[client]} == "realmd_sssd" ]]; then if [[ -f ${ROOTFS}/etc/krb5.keytab ]]; then - [[ -f etc/krb5.conf && -f sssd/sssd.conf ]] || chroot . usr/bin/ubdomain-client -q configure 2>/dev/null + [[ -f ${ROOTFS}/etc/krb5.conf && -f ${ROOTFS}/etc/sssd/sssd.conf ]] || ${CMD_CHROOT} /usr/bin/ubdomain-client -q configure 2>/dev/null [[ -f ${ROOTFS}/usr/lib/systemd/system/sssd.service ]] && ln -sf /usr/lib/systemd/system/sssd.service ${ROOTFS}/etc/systemd/system/multi-user.target.wants/sssd.service fi fi diff --git a/ublinux/rc.preinit.d/30-network-hostname b/ublinux/rc.preinit.d/30-network-hostname index 91a76e6..bcf8703 100755 --- a/ublinux/rc.preinit.d/30-network-hostname +++ b/ublinux/rc.preinit.d/30-network-hostname @@ -22,78 +22,70 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -exec_hostname(){ - local PARAM="$@" - [[ -n ${PARAM} ]] && eval "${PARAM%%=*}='${PARAM#*=}'" - SET_HOSTNAME="${HOSTNAME}" - [[ -z ${SET_HOSTNAME} ]] && SET_HOSTNAME=ublinux-live +set_hostname(){ + local SET_HOSTNAME=$1 # Удалить предыдущее имя хоста OLD_HOSTNAME=$(tail -1 ${ROOTFS}/etc/hostname); OLD_HOSTNAME=${OLD_HOSTNAME%%.*} - sed -E -e "s/\s${OLD_HOSTNAME}(\s|$)/ /g" -e "s/\s${OLD_HOSTNAME}\.[-0-9a-zA-Z.]*(\s|$)/ /g" -e "/^\s*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s*$/d" -i ${ROOTFS}/etc/hosts + sed -E -e "s/\s${OLD_HOSTNAME}(\s|$)/ /g" -e "s/\s${OLD_HOSTNAME}(\s|$)/ /g" -e "s/\s${OLD_HOSTNAME}\.[-0-9a-zA-Z.]*(\s|$)/ /g" -e "/^\s*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s*$/d" -i ${ROOTFS}/etc/hosts # Если нет новой строки, то вставить tail -c1 -- ${ROOTFS}/etc/hosts | grep -qx $'\n' || echo >> ${ROOTFS}/etc/hosts - HOSTS_1="127.0.0.1 sb-ssl.l.google.com safebrowsing.clients.google.com safebrowsing.cache.l.google.com" + HOSTS_1="127.0.0.1 sb-ssl.l.google.com safebrowsing.clients.google.com safebrowsing.cache.l.google.com" grep -q "^\s*${HOSTS_1}\s*$" ${ROOTFS}/etc/hosts || echo "${HOSTS_1}" >> ${ROOTFS}/etc/hosts - HOSTS_2="127.0.0.1 ${SET_HOSTNAME%%.*}" + HOSTS_2="127.0.0.1 ${SET_HOSTNAME%%.*}" grep -q "^\s*${HOSTS_2}\s*$" ${ROOTFS}/etc/hosts || echo "${HOSTS_2}" >> ${ROOTFS}/etc/hosts - [[ ${SET_HOSTNAME} != ${SET_HOSTNAME#*.} ]] && DOMAIN="${SET_HOSTNAME#*.}" - if [[ ${DOMAIN} != "" ]]; then - SET_HOSTNAME="${SET_HOSTNAME%%.*}.${DOMAIN}" - echo "${SET_HOSTNAME}" > ${ROOTFS}/etc/hostname - HOSTS_3="127.0.0.1 ${SET_HOSTNAME}" + echo "${SET_HOSTNAME}" > ${ROOTFS}/etc/hostname + + if [[ -n ${DOMAIN} ]]; then + HOSTS_3="127.0.0.1 ${SET_HOSTNAME}" grep -q "^\s*${HOSTS_3}\s*$" ${ROOTFS}/etc/hosts || echo "${HOSTS_3}" >> ${ROOTFS}/etc/hosts ## Указать доменных пользователей AccountsService, что-бы были видны для выбора логина в DM ls -d ${ROOTFS}/home/*@*/ 2>/dev/null | xargs -ri basename {} | xargs -ri touch ${ROOTFS}/var/lib/AccountsService/users/{} - ## Домен для сервера dhcpd if [[ -f ${ROOTFS}/etc/dhcpd.conf ]]; then sed s/"option domain-name .*"/"option domain-name \"${DOMAIN}\";"/g -i ${ROOTFS}/etc/dhcpd.conf sed s/"option nis-domain .*"/"option nis-domain \"${DOMAIN}\";"/g -i ${ROOTFS}/etc/dhcpd.conf fi - - ## Имя хоста записать в конфиг с постфиксом домена + ## Имя хоста записать в конфиг с суфиксом домена [[ -f ${ROOTFS}/etc/ublinux/system ]] && { grep -q "^\s*HOSTNAME=${SET_HOSTNAME}\s*$" ${ROOTFS}/etc/ublinux/system || sed "s/^\s*HOSTNAME=.*/HOSTNAME=${SET_HOSTNAME}/g" -i ${ROOTFS}/etc/ublinux/system; } - else - echo "${SET_HOSTNAME}" > ${ROOTFS}/etc/hostname fi } -exec_hostname_live(){ - # Если выполнение в initrd, то выход - [[ -z ${ROOTFS} ]] || return 0 - local PARAM="$@" - [[ -n ${PARAM} ]] && eval "${PARAM%%=*}='${PARAM#*=}'" - SET_HOSTNAME="${HOSTNAME}" - [[ -z ${SET_HOSTNAME} ]] && SET_HOSTNAME=ublinux-live - [[ ${DOMAIN} != "" ]] && SET_HOSTNAME="${SET_HOSTNAME%%.*}.${DOMAIN}" +set_hostname_live(){ + local SET_HOSTNAME=$1 hostnamectl set-hostname ${SET_HOSTNAME} - ## Если меняется имя хоста в запущенных X, то новое имя добавляем в xauth who | grep "(:[0-9.]*)$" | cut -d' ' -f1 | xargs -ri su {} -c "xauth list | sed 's|^.*/|su {} -c \\\\\"xauth add ${SET_HOSTNAME}/|;s|$|\\\\\"|'" | xargs -ri sh -c '{}' # Если указан домен, то задаём переменную DOMAIN= # Примечание: Имя сервера контроллера домена включает постфикс домена, но в домен не входит + # Примечание: Невозможно определить, какой уровень именно домен, следовательно отключаю #[[ ${SET_HOSTNAME} != ${SET_HOSTNAME#*.} ]] && DOMAIN="${SET_HOSTNAME#*.}" #[[ ${DOMAIN} != "" ]] && ubconfig -q set network DOMAIN="${DOMAIN}" } +exec_hostname(){ + DEFAULT_HOSTNAME="ublinux-live" + KERNEL_HOSTNAME=$(cmdline_value hostname) + [[ ${KERNEL_HOSTNAME} == "" ]] || HOSTNAME=${KERNEL_HOSTNAME} + [[ -z ${HOSTNAME} ]] && HOSTNAME="${DEFAULT_HOSTNAME}" + if [[ -n ${DOMAIN} ]]; then + HOSTNAME="${HOSTNAME%%.*}.${DOMAIN}" + else + # Если в имени хоста + [[ ${SET_HOSTNAME} != ${SET_HOSTNAME#*.} ]] && DOMAIN="${SET_HOSTNAME#*.}" + fi + set_hostname ${HOSTNAME} + # Если выполнение в initrd, то пропустить + [[ -n ${ROOTFS} ]] || set_hostname_live ${HOSTNAME} +} + ################ ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then - shift - KERNEL_HOSTNAME=$(cmdline_value hostname) - [[ ${KERNEL_HOSTNAME} == "" ]] || HOSTNAME=${KERNEL_HOSTNAME} - exec_hostname $@ - exec_hostname_live $@ - elif [[ $1 == remove ]]; then - shift - exec_hostname $@ - exec_hostname_live $@ - fi + exec_hostname $@ diff --git a/ublinux/rc.preinit.d/55-multiseat b/ublinux/rc.preinit.d/55-multiseat index 714d16e..04f9413 100755 --- a/ublinux/rc.preinit.d/55-multiseat +++ b/ublinux/rc.preinit.d/55-multiseat @@ -44,10 +44,4 @@ EOF ##### MAIN ##### ################ - if [[ -z $@ || $1 == set ]]; then - shift - exec_multiseat $@ - elif [[ $1 == remove ]]; then - shift - exec_multiseat $@ - fi + exec_multiseat $@ diff --git a/ublinux/rc.preinit.d/60-lightdm-settings b/ublinux/rc.preinit.d/60-lightdm-settings index 482c517..144d88f 100755 --- a/ublinux/rc.preinit.d/60-lightdm-settings +++ b/ublinux/rc.preinit.d/60-lightdm-settings @@ -33,10 +33,17 @@ SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null ## # Значение параметра #LIGHTDM_XDMCP=enable exec_lightdm_xdmcp(){ + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || COMMAND="set=" + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local LIGHTDM_XDMCP= + declare -A LIGHTDM_XDMCP + [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf" FILE_LIGHTDM_XDMCP_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-xdmcp-ubconfig.conf" - - if [[ ${LIGHTDM_XDMCP} == @("enable"|"yes") && ${#LIGHTDM_XDMCP[@]} -ne 0 ]]; then + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${LIGHTDM_XDMCP} == @("enable"|"yes") && ${#LIGHTDM_XDMCP[@]} -ne 0 ]]; then [[ -d ${ROOTFS}/etc/lightdm/${FILE_LIGHTDM_XDMCP_CONF%/*} ]] || mkdir -p ${FILE_LIGHTDM_XDMCP_CONF%/*} cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_XDMCP_CONF}" [XDMCPServer] @@ -46,7 +53,7 @@ EOF [[ ${LIGHTDM_PARAM} == 0 ]] && continue echo "${LIGHTDM_PARAM}=${LIGHTDM_XDMCP[${LIGHTDM_PARAM}]}" >> "${FILE_LIGHTDM_XDMCP_CONF}" done - else + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then rm -f "${FILE_LIGHTDM_XDMCP_CONF}" fi } @@ -65,18 +72,37 @@ EOF ## # Значение параметра #LIGHTDM_GREETER[greeter-session]=io.elementary.greeter exec_lightdm_greeter(){ + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || COMMAND="set=" + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local LIGHTDM_GREETER= + declare -A LIGHTDM_GREETER + [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf" FILE_LIGHTDM_GREETER_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-greeter-ubconfig.conf" - if [[ ${#LIGHTDM_GREETER[@]} -ne 0 ]]; then + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#LIGHTDM_GREETER[@]} -ne 0 ]]; then [[ -d ${ROOTFS}/etc/lightdm/${FILE_LIGHTDM_GREETER_CONF%/*} ]] || mkdir -p ${FILE_LIGHTDM_GREETER_CONF%/*} cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_GREETER_CONF}" [Seat:*] EOF for LIGHTDM_PARAM in "${!LIGHTDM_GREETER[@]}"; do [[ ${LIGHTDM_PARAM} == 0 ]] && continue + [[ -z ${PARAM} && ${LIGHTDM_PARAM} == "greeter-session" ]] && { [[ -f ${ROOTFS}/usr/share/xgreeters/${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}.desktop ]] || continue; } + if [[ ${LIGHTDM_PARAM} == "greeter-session" ]]; then + if [[ -n ${PARAM} ]]; then + # Если с входящим параметром, т.е. вполнение через ubconfig, то перевыполнить подготовку фона + ${ROOTFS}/usr/lib/ublinux/rc.post.d/12-dm-background + else + # Если без входящего параметра, т.е. вполнение при загрузке, то проверить наличие гритера в системе + [[ -f ${ROOTFS}/usr/share/xgreeters/${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}.desktop ]] || continue + fi + fi + echo "${LIGHTDM_PARAM}=${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}" >> "${FILE_LIGHTDM_GREETER_CONF}" done - else + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then rm -f "${FILE_LIGHTDM_GREETER_CONF}" fi } diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 7bf55dc..bafa11a 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -736,15 +736,26 @@ GRUB_BOOT_SILENT="splash" ################################################################################ ## Domain configuration ## Подключение к AD серверу -#DOMAIN=ublinux.ru +## DOMAIN= +## # Имя домена +## DOMAIN=ubdc.ru ## Сервер контроллера домена/kerberos ## Отключить автопоиск сервера контроллера домена/kerberos и задать статический +## DOMAIN[server]= +## # DNS имя сервера домена ## DOMAIN[server]=pdc.ublinux.ru -## Клиент для подключения к домену [ *realmd_sssd | realmd_winbind | samba | none ] +## Клиент для подключения к домену +## DOMAIN[client]= +## # Клиент, допустимые значение: *realmd_sssd,realmd_winbind,samba,none ## DOMAIN[client]=realmd_sssd +## Клиент для подключения к домену [ *realmd_sssd|realmd_winbind|samba|none ] +## DOMAIN[dns]= +## # IP адрес сервера DNS, который имеет информацию о домене. При наличии нескольких DNS или разных DNS в сети. +## DOMAIN[dns]=192.168.1.1 + ## Пользователь имеющий права ввода в домен. ## Применяется, если необходимо автоматизировать ввод в домен с большого числа ПК, или при работе в режиме полной песочницы, где невозможно сохранить ## Пароль кодировать в base64: echo 'password' | base64 @@ -1154,8 +1165,27 @@ NSSWITCHWINBIND=yes #XFCE4_KIOSK[xfdesktop:CustomizeWindowlist]=NONE #XFCE4_KIOSK[xfdesktop:CustomizeDesktopIcons]=@wheel -## Назначить настройки XFCE4 по умолчанию -#XFCE4_KIOSK_DEFAULT="user-1,user-2" +## Назначить настройки киоска XFCE4 пользователям +## XFCE4_KIOSK_USER_LOCKED=disable +## disable # Снять все ограничения +## XFCE4_KIOSK_USER_LOCKED= +## # Пользователи и группы, варианты значений: +## =* # Все пользователи +## =@whell;@users # Указанные группы +## =superadmin;user-1 # Указанным пользователям +## =@wheel;user-1 # Указанным группам и пользователям +## XFCE4_KIOSK_USER_LOCKED="*" + +## Назначить исключения настроек киоска XFCE4 пользователям +## XFCE4_KIOSK_USER_UNLOCKED=disable +## disable # Снять все ограничения +## XFCE4_KIOSK_USER_UNLOCKED= +## # Пользователи и группы, варианты значений: +## =* # Все пользователи +## =@whell;@users # Указанные группы +## =superadmin;user-1 # Указанным пользователям +## =@wheel;user-1 # Указанным группам и пользователям +## XFCE4_KIOSK_USER_UNLOCKED="root,@wheel" ## Назначить настройки XFCE4 через xfconf-query ## XFCE4_XFCONF[,<@groups>::]=: