Как организовать управление группой ПК: различия между версиями

Материал из IT в школе
Перейти к навигацииПерейти к поиску
Строка 1: Строка 1:




Строка 89: Строка 90:


Файл /root/onreboot.sh
Файл /root/onreboot.sh


В приведенной версии файл рассчитан не 2 корпуса.
В приведенной версии файл рассчитан не 2 корпуса.
Строка 110: Строка 109:
Ниже приведен пример файла инициализации. ЭТО ПРИМЕР. ОБЯЗАТЕЛЬНО РАЗБЕРИТЕСЬ  ЧТО ТАМ К ЧЕМУ ПЕРЕД ИСПОЛЬЗОВАНИЕМ. в конце концов самое важное - уметь вносить в него изменения в случае если чтото понадобится.   
Ниже приведен пример файла инициализации. ЭТО ПРИМЕР. ОБЯЗАТЕЛЬНО РАЗБЕРИТЕСЬ  ЧТО ТАМ К ЧЕМУ ПЕРЕД ИСПОЛЬЗОВАНИЕМ. в конце концов самое важное - уметь вносить в него изменения в случае если чтото понадобится.   


Я стремился создать файл, который САМ НАСТРАИВАЕТ ПК по максимуму от состояния свежеустановленной системы. Возможно не все еще готово, привожу файл как есть.   
Я стремился создать файл, который САМ НАСТРАИВАЕТ ПК по максимуму от состояния свеже-установленной системы. Возможно не все еще готово, привожу файл как есть.   
 
Возможно Вам не надо инициализировать систему с нуля , тогда файл может быть сильно сокращен. В него Вы будете вписывать только необходимые текущие изменения и удалять их как только они внесены.  <syntaxhighlight lang="bash">
#!/bin/bash
 
#start.sh
 
 
#насройка системы запуска по расширению (xdg) так, чтобы в первую очередь вызывался libreoffice и только потом P7
set_mime()
{
#mime om libreofuice
if [ ! -f /etc/xdg/local/mimeapps.list ]; then
mkdir /etc/xdg/local
echo 'XDG_CONFIG_DIRS="/etc/xdg/local:$XDG_CONFIG_DIRS"' > /etc/profile.d/00-local.sh
chmod +x /etc/profile.d/00-local.sh
cp /etc/xdg/mos/mimeapps.list /etc/xdg/local/
sed -i '/^#.\+$/d'  /etc/xdg/local/mimeapps.list
sed -i 's/onlyoffice-desktopeditors.desktop;//g' /etc/xdg/local/mimeapps.list
sed -i 's/r7-office-desktopeditors.desktop;//g' /etc/xdg/local/mimeapps.list
sed -i '/^application\/vnd/  s/$/r7-office-desktopeditors.desktop;onlyoffice-desktopeditors.desktop;/' /etc/xdg/local/mimeapps.list
sed -i '/^text\/csv/  s/$/r7-office-desktopeditors.desktop;onlyoffice-desktopeditors.desktop;/' /etc/xdg/local/mimeapps.list
sed -i '/^application\/rtf/  s/$/r7-office-desktop;onlyoffice-desktopeditors.desktop;/' /etc/xdg/local/mimeapps.list
sed -i '/^application\/msword/  s/$/r7-office-desktop;onlyoffice-desktopeditors.desktop;/' /etc/xdg/local/mimeapps.list
fi
}
 
 
#установка 0 тайиаута при загрузке. Защита от очень "умных" детей - чтобы они не вошли в отладочную консоль. перестраховка, которая иногда мешает мне самому
set_grub_timeout0()
{
#grub disable timeout
sed -i -r 's/^#*(GRUB_TIMEOUT=).*/GRUB_TIMEOUT=0/' /etc/sysconfig/grub2
sed -i -r 's/^#*(GRUB_HIDDEN_TIMEOUT=).*/GRUB_HIDDEN_TIMEOUT=$GRUB_TIMEOUT/' /etc/sysconfig/grub2
grub-mkconfig -o /boot/grub/grub.cfg
}
 
#установка crontab для отключения компьютера в 22:00 и 7:00 - чтобы компы и доски не оставались вкоюченными на ночь
#также устанавливает запуск onreboot.sh после перезагрузки
set_shutdown()
{
if [ -z "`crontab -l | grep shutdown`" ]; then
echo -e "@reboot /root/onreboot.sh\n0 22 * * * /sbin/shutdown now\n0 7 * * * /sbin/shutdown now\n" | crontab -u root -
fi
}
 
 
 
# разные донстройки KDE для пользователя ${USR}, включая блокировку (перевод в ro) некоторых настроечных файлов при установке LOCK=1
set_kde()
{
 
#set some flags
FD=`cat /home/${USR}/.config/plasma-org.kde.plasma.desktop-appletsrc | grep alphaSort`
if  [ "${FD}" == "" ]; then
sed -i '/^favoritesPortedToKAstats=.*/i alphaSort=true\nlimitDepth=true\nshowIconsRootLevel=true' /home/${USR}/.config/plasma-org.kde.plasma.desktop-appletsrc
fi
 
#отключение масштаба
if [ -z "`cat /home/${USR}/.config/kwinrc | grep 'zoomEnabled=false'`"  ]; then
echo -e "[Plugins]\nzoomEnabled=false\n" >>  /home/${USR}/.config/kwinrc
fi
 
#отключить засыпание
sed -i '/AC\]\[DPMS/,+2d' /home/${USR}/.config/powermanagementprofilesrc
sed -i '/AC\]\[DimDisp/,+2d' /home/${USR}/.config/powermanagementprofilesrc
 
#блокировка файлов настроек
cd /home/${USR}/.config/
for i in plasma-org.kde.plasma.desktop-appletsrc kdeglobals  powermanagementprofilesrc systemsettingsrc kcmfonts
do
if [ ! -z "${LOCK}" ] ; then
chown root:${USR} ${i}
chmod 040 ${i}
else
chown ${USR}:${USR} ${i}
chmod 644 ${i}
fi
done
 
}
 
 
# восстановление папок teacher_control на рабочем столе ПК из компкласса
create_veyon_share()
{
#создать общую папку
echo -e "[Desktop Entry]\nIcon=folder-remote\nName=Задания\nType=Application\nExec=dolphin sftp://${USR}:648@${VEYON}/home/share" > "/home/${USR}/Рабочий стол/share.desktop"
chown ${USR}:${USR}  "/home/${USR}/Рабочий стол/share.desktop"
chmod 744 "/home/${USR}/Рабочий стол/share.desktop"
#создать каталог сдать работы
mkdir "/home/${USR}/Рабочий стол/Сдать работы"
chown ${USR}:${USR} "/home/${USR}/Рабочий стол/Сдать работы"
}
 
 
 
#сброс WIFI подключений (для ПК, подключенных проводом)
clean_wifi()
{
#удалить wifi соединения
rm /etc/NetworkManager/system-connections/Study.MOS.nmconnection
rm /etc/NetworkManager/system-connections/Study.nmconnection
}
 
 
#Установка Chrome браузером по умолчанию
# и восстановление иконки на рабочем столе
setup_chromium()
{
#создать хромиум on desktop
echo -e "#!/usr/bin/env xdg-open\n[Desktop Entry]\nIcon=chromium\nName=Chromium\nType=Application\nExec=chromium" > "/home/${USR}/Рабочий стол/Chromium.desktop"
chown ${USR}:${USR}  "/home/${USR}/Рабочий стол/Chromium.desktop"
chmod 744 "/home/${USR}/Рабочий стол/Chromium.desktop"
#  Установка Chrome браузером по умолчанию
if [ ! -f /home/student/.config/mimeapps.list ]; then
    echo -e '#!/usr/bin/env xdg-open\n[Default Applications]\nx-scheme-handler/http=chromium\nx-scheme-handler/https=chromium'  > "/home/${USR}/.config/mimeapps.list"
    chown ${USR}:${USR} /home/${USR}/.config/mimeapps.list
else
    sed -i -r 's/(http=|https=).*/\1chromium/' "/home/${USR}/.config/mimeapps.list"
fi
}
 


#удалеие ненужных файлов по списку
clean()
{
CLN="${CLEAN} /home/teacher/default.png /root/upd.sh /home/${USR}/Рабочий__стол/Chromium home/${USR}/Рабочий_стол/Основы__работы__в__МОС.desktop /home/${USR}/Рабочий__стол/Основы__работы__в__МОС /home/${USR}/Рабочий__стол/yandex-browser.desktop /home/${USR}/Рабочий__стол/mosobrtv.desktop /home/${USR}/Рабочий__стол/Chromium"
for i in ${CLN}
do
NAME="${i//__/ /}"
echo DELETE $NAME
rm -f "${NAME}"
done
}


# установка правильных репозиториев
check_repo()
{
#remove some repos
if [ -f /etc/apt/sources.list.d/alt.list ] || [ -f /etc/apt/sources.list.d/yandex.list ] || [ -f /etc/apt/sources.list.d/ipsl.list ] || [ -f /etc/apt/sources.list.d/heanet.list ]; then
rm  /etc/apt/sources.list.d/*
fi


Возможно Вам не надо инициализировать систему с нуля , тогда файл может быть сильно сокращен. В него Вы будете вписывать только необходимые текущие изменения и удалять их как только они внесены. 


if [ ! -z '`cat /etc/apt/sources.list.d/mos-base-repo.list | grep "#"`' ] || [ ! -f '/etc/apt/sources.list.d/mos-base-repo.list' ]; then
https://os.mos.ru/git/andreyka648/adminka/src/master/start.sh 
echo -e "rpm http://repo.os.mos.ru/a/p10/base/release x86_64 classic\nrpm http://repo.os.mos.ru/a/p10/base/release x86_64-i586 classic\nrpm http://repo.os.mos.ru/a/p10/base/release noarch classic\n" > /etc/apt/sources.list.d/mos-base-repo.list
fi


 
На сервере размещаем скрипы start.sh и reg.sh  и файл index.php.  Настроена авторизация, чтобы доступ был только у Вас.  
if [ ! -z '`cat /etc/apt/sources.list.d/mos-repo.list | grep "#"`' ] || [ ! -f '/etc/apt/sources.list.d/mos-repo.list' ]; then
echo -e "rpm http://repo.os.mos.ru/a/p10/mos/release x86_64 hasher\nrpm http://repo.os.mos.ru/a/p10/mos/release noarch hasher\nrpm http://repo.os.mos.ru/a/p10/mos/release x86_64-i586 hasher\n" > /etc/apt/sources.list.d/mos-repo.list
fi
}
 
 
#обновление
update()
{
check_repo
remove-old-kernels -f
apt-get update
apt-get -y dist-upgrade
update-kernel -f
apt-get clean
}
 
 
#установка фона рабочего стола 648.png с сервера
setup_wallpaper()
{
if [ ! -f  /etc/648.png ]; then
wget -O /etc/648.png http://${SERVER}/648.png
fi
if [ -z "`cat /home/${USR}/.config/plasma-org.kde.plasma.desktop-appletsrc | grep 648.png`" ]; then
sed -i 's/^Image=.\+$/Image=\/etc\/648\.png/g' /home/${USR}/.config/plasma-org.kde.plasma.desktop-appletsrc
fi
}
 
 
#настройка vnc  пароль - password можно поменять
setup_x11vnc()
{
if [ ! -f /root/vnc/passwd ]; then
/sbin/chkconfig x11vnc on
/sbin/service x11vnc start
mkdir /root/.vnc/
x11vnc --storepasswd password /root/.vnc/passwd
fi
}
 
#проверка налисчия и установка/удаление недостающих пакетов по списку из переменной
setup_pkt()
{
remove-old-kernels -y
apt-get -y remove ${REMOVE}
for i in ${INSTALL}
do
echo INSTALL ${i} ?
if [ -z "`rpm -qa | grep  -e \"${i}-[0-9]\" `" ] ; then
echo INSTALL ${i} !
apt-get -y install ${INSTALL}
else
echo ALREADY INSTALLED
fi
done
 
for i in ${INSTALLEPM}
do
echo INSALLEPM ${i} ?
if [ ! -f  "/usr/bin/${i}" ] ; then
echo INSALLEPM ${i} !
NAME="$(echo $i | tr '[A-Z]' '[a-z]')"
epm play --auto ${NAME}
else
echo ALREADY INSTALLED
fi
done
}
 
 
 
#включение снхронизации времени СО СВОИМ СЕРВЕРОМ (нужно установить на сервере ntp)
setup_timesync()
{
if [ -f /etc/systemd/timesyncd.conf ]; then
if [ -z "`cat /etc/systemd/timesyncd.conf | grep ${SERVER}`" ] ; then
echo "NTP=${SERVER}" >> /etc/systemd/timesyncd.conf
systemctl enable systemd-timesyncd
systemctl restart systemd-timesyncd
fi
fi
}
 
 
 
 
 
 
# причисление пользователя к vboxusers (разрешение запуска virtualbox)
vbox_user()
{
USER="$1"
 
if [ -z "`cat /etc/group | grep vboxusers`" ] ;  then
return
fi
 
if [ -z "`cat /etc/group | grep vboxusers | grep ${USER}`" ] ;  then
usermod -a -G vboxusers ${USER}
fi
}
 
#установка стороннего libreoffice с официального сайта. файл lo.tar.gz на сервере перепакован с двух файлов, скаченных с сайта libreoffice (base и ru)
 
setup_lo()
{
if [ ! -h /usr/bin/libreoffice ]; then
ln -s /opt/libreoffice7.5/program/soffice /usr/bin/libreoffice
fi
 
mv /usr/share/applications/libreoffice7.5-base.desktop /usr/share/applications/base.desktop
mv /usr/share/applications/libreoffice7.5-calc.desktop /usr/share/applications/calc.desktop
mv /usr/share/applications/libreoffice7.5-draw.desktop /usr/share/applications/draw.desktop
mv /usr/share/applications/libreoffice7.5-impress.desktop /usr/share/applications/impress.desktop
mv /usr/share/applications/libreoffice7.5-math.desktop /usr/share/applications/math.desktop
mv /usr/share/applications/libreoffice7.5-writer.desktop /usr/share/applications/writer.desktop
mv /usr/share/applications/libreoffice7.5-startcenter.desktop /usr/share/applications/startcenter.desktop
mv /usr/share/applications/libreoffice7.5-xsltfilter.desktop /usr/share/applications/xsltfilter.desktop
 
 
 
if [  -d /opt/libreoffice7.5 ]; then
return
fi
cd /tmp
rm lo.tar.gz
wget http://${SERVER}/lo.tar.gz
tar xvf lo.tar.gz
apt-get -y install /tmp/RPMS/*.rpm
rm lo.tar.gz
rm -rf /tmp/RPMS/
for USR in ${USERS}
do
rm -rf /home/${USR}/.config/.libreoffice
done
}
 
 
#установка стороннего blender (в репе на момент написания 2.9, сторонний 3.4)
 
setup_bl()
{
if [  -d /opt/blender* ]; then
return
fi
cd /opt
rm bl.tar.xz
wget http://${SERVER}/bl.tar.xz
tar xvf bl.tar.xz
rm bl.tar.xz
CAT="`ls /opt/ | grep blender`"
cp /opt/${CAT}/blender.desktop /usr/share/applications/blender.desktop
rm /usr/bin/blender
ln -s /opt/${CAT}/blender /usr/bin/blender
}
 
 
 
#запускается для панелей
 
 
setup_panel()
{
echo "*****************************************"
echo "*****************PANEL*******************"
echo "*****************************************"
 
 
REMOVE="apt-indicator cheese"
INSTALL="yandex-browser-stable kde5-kamerka guvcview x11vnc-service"
EPM=""
 
update
setup_timesync
set_mime
setup_pkt
setup_x11vnc
set_shutdown
 
for USR in ${USERS}
do
echo user ${USR}
clean
set_kde
setup_wallpaper
#добавление в список папок дельфина общей папки для панелей, расшаренной на сервере
sed -i  /nas648/,/bookmark/d /home/${USR}/.local/share/user-places.xbel
TT=`cat /home/teacher/.local/share/user-places.xbel | grep "${SERVER}"`
if  [ "${TT}" == "" ]; then
echo -e "<bookmark href=\"smb://boards:boards@${SERVER}/boards\">\n<title>\nОбщая папка\n</title>\n</bookmark>" > /tmp/add.txt
sed -i '/<\/xbel>/{
r /tmp/add.txt
a <\/xbel>
d
}' /home/${USR}/.local/share/user-places.xbel
rm /tmp/add.txt
fi
done
}
 
#запускается для ноутбуков
 
setup_note()
{
echo "*****************************************"
echo "*****************NOTE********************"
echo "*****************************************"
REMOVE="apt-indicator cheese kernel-modules-e1000e-std-def LibreOffice-common blender openboard"
INSTALL="yandex-browser-stable kde5-kamerka xorg-96dpi guvcview x11vnc-service systemd-timesyncd"
INSTALLEPM="zoom teams skype sferum Telegram viber tamtam"
update
set_mime
setup_lo
setup_bl
setup_pkt
setup_x11vnc
setup_timesync
#блокирока обновление hplip
if [ -z "`cat /etc/apt/apt.conf.d/hold-hplip.conf | grep hplip`" ] ; then
echo 'RPM::Hold { ^hplip; };' > /etc/apt/apt.conf.d/hold-hplip.conf
fi
for USR in ${USERS}
do
echo user ${USR}
#clean
#set_kde
done
}
 
#запускается для ионоблоков
 
setup_cc()
{
echo "****************************************"
echo "*****************CC*********************"
echo "****************************************"
REMOVE="apt-indicator cheese LibreOffice-common blender openboard"
INSTALL="yandex-browser-stable kde5-kamerka guvcview pinta virtualbox x11vnc-service systemd-timesyncd"
INSTALLEPM="zoom teams skype sferum Telegram viber tamtam"
update
set_mime
clean
setup_lo
setup_bl
setup_pkt
setup_x11vnc
setup_timesync
if [ ! -z "${TIMEOUT}" ]; then
set_grub_timeout0
fi
setup_wine
clean_wifi
set_shutdown
vbox_user student
vbox_user teacher
 
 
for USR in ${USERS}
do
echo user ${USR}
set_kde
setup_chromium
create_veyon_share
setup_wallpaper
done
}
 
#основной скрипт. расшифроввуем hostname
 
HN=`hostname`
TYPE=${HN:0:1}
IN=(${HN//-/ })
CORP=${IN[1]}
CAB=${IN[2]}
COMP=${IN[3]}
 
 
#выбираем сервер и запускаем скрипт для панелей
 
if [ ${TYPE} == 'p' ] ; then
USERS="teacher"
if [ ${CORP} == "1" ] ; then
SERVER=10.xxx.xxx.26
setup_panel
exit
fi
if [ ${CORP} == "2" ] ; then
SERVER=10.xxx.xxx.26
setup_panel
exit
fi
fi
 
# для компклассов (моноблоков)
 
if [ ${TYPE} == 'm' ] ; then
LOCK=1
USERS="student"
if [ ${CORP} == "1" ] ; then
  SERVER="172.xxx.xxx.16"
  if [ ${CAB} == 'xx' ]; then
  TIMEOUT=0
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
  if [ ${CAB} == 'xx' ]; then
  TIMEROUT=0
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
  if [ ${CAB} == 'xx' ]; then
  USERS="student k10a k10b"
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
  if [ ${CAB} == '34a' ]; then
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
fi
if [ ${CORP} == "2" ] ; then
  SERVER="172.xx.xx.16"
  if [ ${CAB} == 'xx' ]; then
  TIMEOUT=0
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
  if [ ${CAB} == 'xx' ]; then
  TIMEOUT=0
  VEYON="mxxxx.local"
  setup_cc
  exit
  fi
fi
fi
 
# для ноутбуков
 
if [ ${TYPE} == 'n' ] ; then
USERS='user'
if [ ${CORP} == "1" ] ; then
SERVER="172.xx.xx.16"
setup_note
exit
fi
if [ ${CORP} == "2" ] ; then
SERVER="172.xx.xx.16"
setup_note
exit
fi
fi
 
 
 
</syntaxhighlight>На сервере размещаем скрипы start.sh и reg.sh  и файл index.php.  Настроена авторизация, чтобы доступ был только у Вас.  


У меня также установлены webssh и novnc для входа по ssh и vnc непосредственно из браузера.  
У меня также установлены webssh и novnc для входа по ssh и vnc непосредственно из браузера.  
Строка 626: Строка 123:
Это удобно - чтото менять можно не только со своего компьютера но и с любого, который оказался под рукой. Кроме того, вход происходит при нажатии ссылки из index.php
Это удобно - чтото менять можно не только со своего компьютера но и с любого, который оказался под рукой. Кроме того, вход происходит при нажатии ссылки из index.php


Правда, WEBSSH И NOVNC несколько доработаны, чтобы не приходилось набирать пароль каждый раз. Когданибудь я их выложк :)
Правда, WEBSSH И NOVNC несколько доработаны, чтобы не приходилось набирать пароль каждый раз. Когда-нибудь я их выложу :)


'''Данная версия index.php предельно упрощена специально для wiki и может содержать ошибки.'''  
'''Данная версия index.php предельно упрощена специально для wiki и может содержать ошибки.'''  
Строка 634: Строка 131:
Необходимо создать каталог /var/www/html/base/ и дать ему права на доступ от php
Необходимо создать каталог /var/www/html/base/ и дать ему права на доступ от php


Вопросы? kekalo@mail.ru
[[Категория:Скрипты]]
[[Категория:Скрипты]]
[[Категория:МОС]]
[[Категория:МОС]]

Навигация