diff --git a/VERSION.md b/VERSION.md index a55f171..98e892c 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -VERSION 2.13 +VERSION 2.14 diff --git a/ublinux/rc.post.d/45-disk-quota b/ublinux/rc.post.d/45-disk-quota index d6b647d..0885c40 100755 --- a/ublinux/rc.post.d/45-disk-quota +++ b/ublinux/rc.post.d/45-disk-quota @@ -14,15 +14,16 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null #declare -A DISK_QUOTA -#DISK_QUOTA[usrquota:/dev/sda1]=enable -#DISK_QUOTA[usrquota:/dev/sda1]=disable +#DISK_QUOTA[usrquota:/dev/sda4]=enable +#DISK_QUOTA[usrquota:/dev/sda4]=disable #DISK_QUOTA[usrquota:/dev/sda4:user-1,user-2]=7M:8M:0:0:86400:86400 #DISK_QUOTA[usrquota:/dev/sda4:user-1]=5M:6M:0:0 #DISK_QUOTA[usrquota:/dev/sda4:user-2]=7M:8M:0:0 #DISK_QUOTA[usrquota:/mnt/MyExt4:user-1,user-2]=5M:6M:0:0 #DISK_QUOTA[usrquota:/dev/sda4]=0:0:0:0:1604800:8604800 -#DISK_QUOTA[grpquota:/dev/sda1]=enable +#DISK_QUOTA[grpquota:/dev/sda4]=enable +#DISK_QUOTA[grpquota:/dev/sda4]=disable #DISK_QUOTA[grpquota:/dev/sda4:users]=2M:3M:0:0:604800:604800 #DISK_QUOTA[grpquota:/mnt/MyExt4:users]=5M:6M:0:0:604800:604800 @@ -303,11 +304,20 @@ exec_disk_quota(){ done fi } +exec_disk_quota_get(){ + KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253) + PATH_DEVICE_LSBLK=$(grep -E " (ext2|ext3|ext4|xfs|btrfs|nfs) " <<< ${KNOW_LSBLK} | cut -d' ' -f1) #" + echo "${PATH_DEVICE_LSBLK}" +} ################ ##### MAIN ##### ################ - exec_disk_quota $@ - #exec_disk_quota_get $@ - \ No newline at end of file + if [[ -z $@ || $1 == set ]]; then + shift + exec_disk_quota $@ + elif [[ $1 == get ]]; then + shift + exec_disk_quota_get $@ + fi diff --git a/ublinux/rc.post.d/46-cgroup-quota b/ublinux/rc.post.d/46-cgroup-quota index 80692fd..11308c1 100755 --- a/ublinux/rc.post.d/46-cgroup-quota +++ b/ublinux/rc.post.d/46-cgroup-quota @@ -13,29 +13,54 @@ SYSCONF="${ROOTFS}/${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null -exec_cgroup_quota(){ +get_compat_unit(){ + if [[ ! ${ITEM_UNIT} =~ ".service"$|".slice"$|".scope"$ ]]; then + USER_ID=$(id -u ${ITEM_UNIT} 2>/dev/null) + [[ -n ${USER_ID} ]] && USER_SLICE="user-${USER_ID}.slice" || return 1 + COMPAT_UNIT=${USER_SLICE} + else + COMPAT_UNIT=${ITEM_UNIT} + fi +} +# ARG1: CGROUP_QUOTA[superadmin]=MemoryHigh=500M,MemorySwapMax=100M,CPUQuota=400% +exec_cgroup_quota_set(){ ## Квоты на ресурсы, через cgroup2. Механизм systemd или напрямую cgroup + [[ -n $@ ]] && declare -A CGROUP_QUOTA && eval $@ if [[ -n ${CGROUP_QUOTA[@]} ]]; then for ITEM_UNIT in "${!CGROUP_QUOTA[@]}"; do - if [[ ! ${ITEM_UNIT} =~ ".service"$|".slice"$|".scope"$ ]]; then - USER_ID=$(id -u ${ITEM_UNIT}) - [[ -n ${ITEM_UNIT} ]] && USER_SLICE="user-$(id -u ${USER_ID}).slice" || return 1 - COMPAT_UNIT=${USER_SLICE} - else - COMPAT_UNIT=${ITEM_UNIT} - fi + get_compat_unit if readlink -fq ${ROOTFS}/usr/bin/init | grep -q "lib/systemd/systemd$"; then - systemctl set-property --runtime ${COMPAT_UNIT} ${CGROUP_QUOTA[${ITEM_UNIT}]//,/ } - systemctl daemon-reload + /usr/bin/systemctl set-property --runtime ${COMPAT_UNIT} ${CGROUP_QUOTA[${ITEM_UNIT}]//,/ } + /usr/bin/systemctl daemon-reload else true fi done fi } +# ARG1: CGROUP_QUOTA[superadmin]= +exec_cgroup_quota_remove(){ +## Очистить квоты на ресурсы, через cgroup2. Механизм systemd или напрямую cgroup + [[ -n $@ ]] && ITEM_UNIT=${@#*[} && ITEM_UNIT=${ITEM_UNIT%%]*} || return 0 + [[ -n ${ITEM_UNIT} ]] || return 0 + get_compat_unit + if readlink -fq ${ROOTFS}/usr/bin/init | grep -q "lib/systemd/systemd$"; then + /usr/bin/systemctl set-property --runtime ${COMPAT_UNIT} $(cat /run/systemd/system.control/${COMPAT_UNIT}.d/* | grep -v "^[#\[]" | sed "s/=.*$/= /g" | tr -d \\n) + #systemctl revert ${COMPAT_UNIT} + /usr/bin/systemctl daemon-reload + else + true + fi +} ################ ##### MAIN ##### ################ - exec_cgroup_quota $@ + if [[ -z $@ || $1 == set ]]; then + shift + exec_cgroup_quota_set $@ + elif [[ $1 == 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 0b37710..c997c07 100755 --- a/ublinux/rc.preinit.d/21-ntp +++ b/ublinux/rc.preinit.d/21-ntp @@ -20,8 +20,6 @@ SYSCONF="${ROOTFS}/${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - [[ -n $1 ]] && NTPSERVERS=$1 - [[ -n $2 ]] && ETH_INTERFACE="-$2" # List NTP servers: PART_SYSTEMDPATH/Service_Name Process_Name NTP_SERVICES_PROCESS=" sysinit.target.wants/systemd-timesyncd.service systemd-timesyncd @@ -32,35 +30,67 @@ SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null multi-user.target.wants/ptp4l.service ptp4l multi-user.target.wants/phc2sys.service phc2sys" +exec_ntp_servers_set(){ + restart_systemd_ntp(){ + if [[ -n ${ROOTFS} ]]; then + ${CMD_CHROOT} /usr/bin/systemctl --quiet enable ${NTP_SYSTEMSERVICE} &>/dev/null + else + /usr/bin/systemctl daemon-reload + /usr/bin/systemctl --quiet enable ${NTP_SYSTEMSERVICE} &>/dev/null + /usr/bin/systemctl --quiet restart ${NTP_SYSTEMSERVICE} &>/dev/null + fi + } ISSYSTEMD=$(readlink -fq ${ROOTFS}/usr/bin/init | grep "lib/systemd/systemd$") + if [[ ${NTPSERVERS,,} == "dhcp" ]]; then + # Вызывая из NetworkManager скрипта, переменна ${NTPSERVERS} перезаписана на сервера NTP из DHCP + [[ -n $1 ]] && local NTPSERVERS="$1" + fi if [[ ${NTPSERVERS,,} == "stop" ]]; then - # Для systemd - if [[ -n ${ISSYSTEMD} ]]; then - while IFS=' ' read ITEM_NTP_SERVICE ITEM_NTP_PROCESS; do - [[ -z ${ITEM_NTP_SERVICE} || -z ${ITEM_NTP_PROCESS} ]] && continue - if [[ -n ${ROOTFS} ]]; then - ${CMD_CHROOT} systemctl --quiet disable ${ITEM_NTP_SERVICE##*/} &>/dev/null - else - systemctl --quiet disable --now ${ITEM_NTP_SERVICE##*/} &>/dev/null || pkill -9 ${ITEM_NTP_PROCESS} - fi - done < <(tr -d '\t' <<< ${NTP_SERVICES_PROCESS}) + exec_ntp_servers_stop + elif [[ ${NTPSERVERS,,} == "dhcp" ]]; then + # Активная systemd и выбран сервис NTP_SYSTEMSERVICE=systemd-timesyncd.service + if [[ -n ${ISSYSTEMD} && ${NTP_SYSTEMSERVICE} == "systemd-timesyncd.service" && -f ${ROOTFS}/usr/lib/systemd/system/systemd-timesyncd.service ]]; then + restart_systemd_ntp fi - # Вызывая из NetworkManager скрипта, переменна ${NTPSERVERS} перезаписана на сервера NTP - elif [[ -n ${NTPSERVERS} && ${NTPSERVERS,,} != "dhcp" ]]; then + elif [[ -n ${NTPSERVERS} ]]; then [[ ${NTPSERVERS,,} == "default" ]] && NTPSERVERS=${NTPSERVERS_DEFAULT} - if [[ -n ${ISSYSTEMD} && ${NTP_SYSTEMSERVICE} == "systemd-timesyncd.service" && -f ${ROOTFS}/usr/lib/systemd/system/systemd-timesyncd.service ]]; then - CONFIG_TIMESYNCD=${ROOTFS}/etc/systemd/timesyncd.conf.d/ulinux${ETH_INTERFACE}.conf - mkdir -p ${ROOTFS}/etc/systemd/timesyncd.conf.d - NTPSERVERS=$(tr ',;' ' ' <<< ${NTPSERVERS}) - cat <<-EOF > "${CONFIG_TIMESYNCD}" + # Активная systemd и выбран сервис NTP_SYSTEMSERVICE=systemd-timesyncd.service + if [[ -n ${ISSYSTEMD} && ${NTP_SYSTEMSERVICE} == "systemd-timesyncd.service" && -f ${ROOTFS}/usr/lib/systemd/system/systemd-timesyncd.service ]]; then + NTPSERVERS=$(tr ',;' ' ' <<< ${NTPSERVERS}) +# CONFIG_TIMESYNCD="${ROOTFS}/etc/systemd/timesyncd.conf.d/ublinux${ETH_INTERFACE}.conf" + CONFIG_TIMESYNCD="${ROOTFS}/etc/systemd/timesyncd.conf.d/ubconfig.conf" + [[ -d ${CONFIG_TIMESYNCD%/*} ]] || mkdir -p ${CONFIG_TIMESYNCD%/*} + rm -f ${CONFIG_TIMESYNCD%/*}/ubconfig*.conf + cat <<-EOF > "${CONFIG_TIMESYNCD}" [Time] NTP=${NTPSERVERS} FallbackNTP=${NTPSERVERS_FALLBACK} EOF - if [[ -n ${ROOTFS} ]]; then - ${CMD_CHROOT} systemctl --quiet enable ${NTP_SYSTEMSERVICE} &>/dev/null - else - systemctl --quiet enable --now ${NTP_SYSTEMSERVICE} &>/dev/null - fi - fi + restart_systemd_ntp + fi + fi +} +exec_ntp_servers_stop(){ + # Определяем активную systemd + ISSYSTEMD=$(readlink -fq ${ROOTFS}/usr/bin/init | grep "lib/systemd/systemd$") + while IFS=' ' read ITEM_NTP_SERVICE ITEM_NTP_PROCESS; do + [[ -z ${ITEM_NTP_SERVICE} || -z ${ITEM_NTP_PROCESS} ]] && continue + if [[ -n ${ISSYSTEMD} && -n ${ROOTFS} ]]; then + ${CMD_CHROOT} /usr/bin/systemctl --quiet disable ${ITEM_NTP_SERVICE##*/} &>/dev/null + elif [[ -n ${ISSYSTEMD} ]]; then + /usr/bin/systemctl --quiet disable --now ${ITEM_NTP_SERVICE##*/} &>/dev/null || pkill -f ${ITEM_NTP_PROCESS} + fi + done < <(tr -d '\t' <<< ${NTP_SERVICES_PROCESS}) +} + +################ +##### MAIN ##### +################ + + if [[ -z $@ || $1 == set ]]; then + shift + exec_ntp_servers_set $@ + elif [[ $1 == remove ]]; then + shift + exec_ntp_servers_stop $@ fi diff --git a/ublinux/rc.preinit.d/55-multiseat b/ublinux/rc.preinit.d/55-multiseat index 84a2cc4..193cfcc 100755 --- a/ublinux/rc.preinit.d/55-multiseat +++ b/ublinux/rc.preinit.d/55-multiseat @@ -22,7 +22,7 @@ SOURCE=${SYSCONF}/desktop; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null FILE_UDEV_MULTISEAT="${ROOTFS}/etc/udev/rules.d/72-seat-ubconfig.rules" - [[ ${DISPLAYMANAGER} == "none" ]] && exit 0 +exec_multiseat(){ if [[ -n "${MULTISEAT_SIMPLE[@]}" ]]; then for SEAT in "${!MULTISEAT_SIMPLE[@]}"; do while read SEAT_DEVICE; do @@ -34,3 +34,20 @@ EOF else rm -f ${FILE_UDEV_MULTISEAT} fi + if [[ -z ${ROOTFS} ]]; then + /usr/bin/udevadm control --reload-rules + /usr/bin/udevadm trigger + fi +} + +################ +##### MAIN ##### +################ + + if [[ -z $@ || $1 == set ]]; then + shift + exec_multiseat $@ + elif [[ $1 == remove ]]; then + shift + exec_multiseat $@ + fi diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 03957f9..b75e828 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -30,7 +30,7 @@ [/etc/ublinux/config] ## Config verison ## Версия конфигурации -VERSION=2.13 +VERSION=2.14 ## Additional boot parameters ## Дополнительные параметры загрузки, только для управления модулями @@ -60,15 +60,16 @@ DEFAULTUSER=superadmin NEEDEDUSERS='superadmin:1000:x:Администратор' ## Пользователи системы -## ADDUSER[user_name:UID:comment:additional_groups:opt_manual]=password_hash|x -## user_name -## UID -## comment -## additional_groups -## opt_manual -## password_hash|x +## ADDUSER[user_name:uid:comment:user_group:extra_groups:optional]=password_hash|x +## user_name # Имя пользователя +## uid # UID пользователя, если необходимо автоматически расчитавыть, то оставить пустым или 'x' +## comment # Поле GECOS, с подробным описанием пользователя, можно локализованное +## user_group # Основная группа пользователя, если выбрано пусто или 'x', то 'user_group=user_name' +## extra_groups # Дополнительные группы пользователя +## optional # Дополнительные опции, например: '--shell /usr/bin/bash --no-user-group' +## password_hash|x # Хеш пароля пользователя, если выбрано 'x', то 'password_hash=DEFAULTPASSWD' ## ADDUSER[superadmin:1000:Администратор:]=x -## ADDUSER[user-1:x:Пользователь-1:vboxusers,libvirt:opt_manual]=passsword_hash +## ADDUSER[user-1:x:Пользователь-1::vboxusers,libvirt]=passsword_hash # Помещать пользователя с ID 1000 в группу Администраторов whell #ADDADM=yes @@ -80,10 +81,10 @@ NEEDEDUSERS='superadmin:1000:x:Администратор' ## Autostart services ## Автоматически поднимать службы (можно указывать службы xinetd) ## Для работы bluetooth SERVICESSTART+=bluetooth -## Для работы в WINDOWS сетях с DNS NETBIOS, включить NSSWITCHWINBIND=yes и добавить SERVICESSTART=nmb,winbind +## Для работы в WINDOWS сетях с DNS NETBIOS, включить NSSWITCHWINBIND=yes и добавить SERVICESSTART+=,nmb,winbind ## Для VMWareWorkstation: vmware-networks,vmware-usbarbitrator ## SERVICESSTART=tor,polipo,cups-lpd,pcscd -SERVICESSTART=dbus-broker,NetworkManager,sshd,systemd-swap,systemd-timesyncd,cups,cockpit.socket,avahi-daemon,avahi-dnsconfd,veyon,smb,nmb,winbind,bluetooth +SERVICESSTART=dbus-broker,NetworkManager,sshd,systemd-swap,cups,cockpit.socket,avahi-daemon,avahi-dnsconfd,veyon,smb,nmb,winbind,bluetooth ## You can disable some of standart services start ## Отключение служб, включенных по умолчанию diff --git a/ublinux/templates/ublinux-data_ru.ini b/ublinux/templates/ublinux-data_ru.ini index c12128d..b75e828 100644 --- a/ublinux/templates/ublinux-data_ru.ini +++ b/ublinux/templates/ublinux-data_ru.ini @@ -30,7 +30,7 @@ [/etc/ublinux/config] ## Config verison ## Версия конфигурации -VERSION=2.11 +VERSION=2.14 ## Additional boot parameters ## Дополнительные параметры загрузки, только для управления модулями @@ -60,15 +60,16 @@ DEFAULTUSER=superadmin NEEDEDUSERS='superadmin:1000:x:Администратор' ## Пользователи системы -## ADDUSER[user_name:UID:comment:additional_groups:opt_manual]=password_hash|x -## user_name -## UID -## comment -## additional_groups -## opt_manual -## password_hash|x +## ADDUSER[user_name:uid:comment:user_group:extra_groups:optional]=password_hash|x +## user_name # Имя пользователя +## uid # UID пользователя, если необходимо автоматически расчитавыть, то оставить пустым или 'x' +## comment # Поле GECOS, с подробным описанием пользователя, можно локализованное +## user_group # Основная группа пользователя, если выбрано пусто или 'x', то 'user_group=user_name' +## extra_groups # Дополнительные группы пользователя +## optional # Дополнительные опции, например: '--shell /usr/bin/bash --no-user-group' +## password_hash|x # Хеш пароля пользователя, если выбрано 'x', то 'password_hash=DEFAULTPASSWD' ## ADDUSER[superadmin:1000:Администратор:]=x -## ADDUSER[user-1:x:Пользователь-1:vboxusers,libvirt:opt_manual]=passsword_hash +## ADDUSER[user-1:x:Пользователь-1::vboxusers,libvirt]=passsword_hash # Помещать пользователя с ID 1000 в группу Администраторов whell #ADDADM=yes @@ -80,10 +81,10 @@ NEEDEDUSERS='superadmin:1000:x:Администратор' ## Autostart services ## Автоматически поднимать службы (можно указывать службы xinetd) ## Для работы bluetooth SERVICESSTART+=bluetooth -## Для работы в WINDOWS сетях с DNS NETBIOS, включить NSSWITCHWINBIND=yes и добавить SERVICESSTART=nmb,winbind +## Для работы в WINDOWS сетях с DNS NETBIOS, включить NSSWITCHWINBIND=yes и добавить SERVICESSTART+=,nmb,winbind ## Для VMWareWorkstation: vmware-networks,vmware-usbarbitrator ## SERVICESSTART=tor,polipo,cups-lpd,pcscd -SERVICESSTART=dbus-broker,NetworkManager,sshd,systemd-swap,systemd-timesyncd,cups,cockpit.socket,avahi-daemon,avahi-dnsconfd,veyon,smb,nmb,winbind,bluetooth +SERVICESSTART=dbus-broker,NetworkManager,sshd,systemd-swap,cups,cockpit.socket,avahi-daemon,avahi-dnsconfd,veyon,smb,nmb,winbind,bluetooth ## You can disable some of standart services start ## Отключение служб, включенных по умолчанию