APVE: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Как сделать много связанных копий)
(Если виртуальная машина не хочет бэкапиться)
 
(не показано 50 промежуточных версий 2 участников)
Строка 1: Строка 1:
 +
=Важные моменты при создании кластера PVE=
 +
 +
==На всех узлах должны быть сформированы правильным образом файлы /etc/hosts==
 +
 +
Пример одного из серверов нашего кластера:
 +
 +
<pre>
 +
127.0.0.1 localhost
 +
192.168.10.126 alt-edu-hpg8.nntc.nnov.ru alt-edu-hpg8
 +
192.168.10.125 alt-edu-hpg5
 +
192.168.10.124 alt-edu-apve4
 +
192.168.10.121 alt-edu-apve1
 +
192.168.10.122 alt-edu-apve2
 +
192.168.10.123 alt-edu-apve3
 +
</pre>
 +
 +
Соответственно, если нужно будет добавить в кластер ещё один узел, то нужно НА КАЖДОЙ из нод кластера добавить в /etc/hosts сопоставление имени и его ip адреса.
 +
 +
Если этого не сделать, то будут ошибки добавления в кластер нового узла и после этого повиснет веб интерфейс на любой ноде кластера.
 +
 +
==Как исправить такую ситуацию (если повис веб интерфейс)?==
 +
 +
Отделить неуспешную ноду от кластера по инструкции: https://pve.proxmox.com/wiki/Cluster_Manager#_remove_a_cluster_node (раздел Separate a Node Without Reinstalling)
 +
 +
На кластере в терминале выполнить отсоединение неуспешной ноды командой
 +
 +
pvecm delnode 5
 +
 +
, где 5 - идентификатор ноды из corosync
 +
 +
Иногда по идентификатору не получается. Тогда можно попробовать по имени ноды или по ip адресу
 +
 +
Иногда кажется что кластер развалился. В этом случае нужно перезапустить сервис на каждой из нод и немного подождать.
 +
 +
Перезапустить corosync -- команда:
 +
 +
systemctl restart corosync
 +
 +
Подождать и потом проверить статус кластера командой:
 +
 +
pvecm status
 +
 +
Также можно посмотреть состав нод кластера -- командой:
 +
 +
pvecm nodes
 +
 +
Также иногда может потребоваться перезапустить сервисы на каждой ноде:
 +
 +
systemctl restart pveproxy
 +
 +
systemctl restart pve-cluster
 +
 +
 +
 
=Настройка после клонирования образа на базе AltEduPve=
 
=Настройка после клонирования образа на базе AltEduPve=
  
Строка 166: Строка 220:
  
 
=Лайфхаки=
 
=Лайфхаки=
 +
 +
==Автонастройка компьютеров с PVE при работе сети по DHCP==
 +
 +
<pre>
 +
cat << 'EOF1' > /opt/after-boot.sh
 +
#!/bin/bash
 +
 +
 +
mac=$(ip a | grep eno -A 1 | grep ether | awk {'print $2'})
 +
 +
cat << EOF > /etc/net/ifaces/vmbr0/iplink
 +
address ${mac}
 +
EOF
 +
 +
systemctl restart network
 +
sleep 2
 +
killall dhcpcd
 +
sleep 8
 +
dhcpcd vmbr0
 +
 +
ip=$(ip a | grep vmbr0 | grep inet | awk {'print $2'} | awk -F '/' {'print $1'})
 +
name="prdb-$(echo $ip | awk -F '.' {'print $3'})-$(echo $ip | awk -F '.' {'print $4'})"
 +
 +
echo ${name} > /etc/hostname
 +
 +
cat << EOF > /etc/hosts
 +
${ip}    ${name}
 +
127.0.0.1    localhost.localdomain localhost
 +
EOF
 +
 +
EOF1
 +
 +
cat << 'EOF' > /etc/rc.d/rc.local
 +
#!/bin/bash
 +
/opt/after-boot.sh
 +
exit 0
 +
EOF
 +
 +
chmod +x /etc/rc.d/rc.local
 +
chmod +x /opt/after-boot.sh
 +
</pre>
 +
 +
 +
==Перенос виртмашин после переименования узла==
 +
 +
<pre>
 +
systemctl stop pve-cluster
 +
systemctl stop corosync
 +
pmxcfs -l
 +
/bin/rm /etc/pve/corosync.conf
 +
/bin/rm -r /etc/corosync/*
 +
</pre>
 +
 +
export SRC_DIR='prdb-145-37'
 +
 +
<pre>
 +
cd /etc/pve/nodes/
 +
deldirs=$(ls | grep -v $(hostname))
 +
confs=$(ls $SRC_DIR/qemu-server/*.conf)
 +
 +
for i in $(echo ${confs}); do
 +
destfile=$(echo $i | awk -F '/' {'print $3'})
 +
cat $i > $(hostname)/qemu-server/$destfile
 +
done
 +
 +
for d in $(echo ${deldirs}); do
 +
rm -rf $d
 +
done
 +
</pre>
 +
 +
==Настройка PVE из Pmagic==
 +
 +
Просто бросьте это в консоль (если нужно, предварительно измените в текстовом редакторе и бросьте потом)
 +
 +
<pre>
 +
cat << 'EOF1' > q.sh
 +
#!/bin/bash
 +
###############################
 +
classname="mobd"
 +
pcnumber=10
 +
 +
###############################
 +
partprobe /dev/nvme0n1
 +
 +
gdisk /dev/nvme0n1 << EOF
 +
x
 +
e
 +
w
 +
Y
 +
EOF
 +
 +
mkdir /mnt/q
 +
mount /dev/nvme0n1p2 /mnt/q
 +
 +
mac=`ip a | grep eth0 -A 1 | head -2 | awk {'print $2'} | tail -1`
 +
ipmask=`ip a | grep "inet 10.207" | awk {'print $2'}`
 +
ip=`echo $ipmask | awk -F '/' {'print $1'}`
 +
mask=`echo $ipmask | awk -F '/' {'print $2'}`
 +
ip3=`echo $ip | awk -F '.' {'print $3'}`
 +
ip4=`echo $ip | awk -F '.' {'print $4'}`
 +
 +
echo "address $mac" > /mnt/q/etc/net/ifaces/vmbr0/iplink
 +
echo "${classname}-${ip3}-${ip4}.nntc.nnov.ru" > /mnt/q/etc/hostname
 +
echo "127.0.0.1 localhost" > /mnt/q/etc/hosts
 +
echo "${ip} ${classname}-${ip3}-${ip4}.nntc.nnov.ru ${classname}-${ip3}-${ip4}" >> /mnt/q/etc/hosts
 +
 +
cat << EOF > /mnt/q/usr/share/applications/demoexam-seat.desktop
 +
[Desktop Entry]
 +
Version=1.0
 +
Type=Application
 +
Name=Demo Exam Seat
 +
GenericName=Demo Exam Seat
 +
Comment=
 +
Exec=/opt/run-demoexam-seat.sh ${pcnumber}
 +
Terminal=false
 +
MimeType=text/plain;
 +
Icon=
 +
Categories=Development;
 +
StartupNotify=true
 +
EOF
 +
 +
cat << EOF > /mnt/q/usr/share/applications/demoexam-seat-spice.desktop
 +
[Desktop Entry]
 +
Version=1.0
 +
Type=Application
 +
Name=Demo Exam Seat (SPICE)
 +
GenericName=Demo Exam Seat (SPICE)
 +
Exec=/opt/run-demoexam-seat-spice.sh ${pcnumber}
 +
Terminal=false
 +
MimeType=text/plain;
 +
Icon=
 +
Categories=Development;
 +
StartupNotify=true
 +
EOF
 +
 +
umount /mnt/q
 +
 +
EOF1
 +
 +
chmod +x q.sh
 +
./q.sh
 +
</pre>
 +
 +
 +
==Если после клонирования PVE через архивирование файловой системы PVE не стартует==
 +
 +
systemctl stop pve-cluster
 +
systemctl stop corosync
 +
/bin/rm -rf /etc/pve
 +
reboot
 +
 +
Источник: https://forum.proxmox.com/threads/installation-to-start-pve-cluster.85490/
 +
 +
==Если виртуальная машина не хочет бэкапиться==
 +
 +
Ошибка вроде этой:
 +
 +
Backup of VM 40100 failed - unable to connect to qmeventd socket (vmid: 40100) - No such file or directory
 +
 +
Тогда:
 +
 +
systemctl start qmeventd.service
 +
 +
Источник: https://forum.proxmox.com/threads/backup-of-vm-failed-unable-to-connect-to-qmeventd-socket.117940/
 +
 +
==Если не работает автостарт виртуальных машин после загрузки PVE==
 +
 +
systemctl enable pve-guests
 +
 +
==Если proxnox не хочет запускать бэкапы по расписанию==
 +
 +
Включить сервис:
 +
 +
systemctl enable --now pvescheduler
 +
 +
Источник: https://forum.proxmox.com/threads/backups-not-running-after-upgrade-to-7-4.124784/
 +
 +
==Сброс ноды после вывода из кластера==
 +
 +
Выполнить последовательность команд:
 +
 +
<pre>
 +
systemctl stop pve-cluster
 +
systemctl stop corosync
 +
pmxcfs -l
 +
/bin/rm /etc/pve/corosync.conf
 +
/bin/rm -r /etc/corosync/*
 +
killall pmxcfs
 +
systemctl start pve-cluster
 +
</pre>
 +
 +
При необходимости, можно очистить ноду от остатков конфигураций других кластерных нод.
 +
Для этого нужно перейти в каталог:
 +
 +
cd /etc/pve/nodes
 +
 +
и удалить оттуда все каталоги, кроме каталога конфигурации самой ноды
 +
 +
/bin/rm -r node-89-11  node-89-13  node-89-2  node-89-4  node-89-6  node-89-8
 +
 +
затем перезагрузка
 +
 +
reboot
 +
 +
После этих процедур нода готова становиться кластером или быть введённой в уже существующий кластер
 +
 +
==Если нода удалена из кластера, но осталась в дереве узлов веб интерфейса==
 +
 +
Нужно последовательно на каждом узле запустить эти команды. Пример показывает запуск команды на cluster-node8, через ssh
 +
 +
ssh cluster-node8 systemctl restart corosync && systemctl restart pve-cluster
 +
 +
Если узлов, допустим, 8, то нужно выполнить последовательно команду, подключаясь поочерёдно к каждому из узлов
 +
 +
Например, так:
 +
 +
for i in 2 3 6 7 8; do ssh cluster-node${i} systemctl restart corosync && systemctl restart pve-cluster; done
 +
 +
==Синхронизировать время и перегенерировать сертификаты на всех нодах==
 +
 +
Последовательно зайти на каждый узел и просто бросить это в консоль и нажать Enter
 +
 +
<pre>
 +
cat << EOF > /tmp/fix.sh
 +
ntpdate pool.ntp.org
 +
rm /etc/pve/pve-root-ca.pem
 +
rm /etc/pve/priv/pve-root-ca.key
 +
rm /etc/pve/nodes/cluster-node1/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node2/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node3/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node4/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node6/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node7/pve-ssl.{pem,key}
 +
rm /etc/pve/nodes/cluster-node8/pve-ssl.{pem,key}
 +
rm /etc/pve/authkey.pub
 +
rm /etc/pve/priv/authkey.key
 +
rm /etc/pve/priv/authorized_keys
 +
pvecm updatecerts -f
 +
systemctl restart pvedaemon
 +
systemctl restart pveproxy
 +
systemctl restart corosync
 +
mv /root/.ssh/known_hosts /root/.ssh/known_hosts_old
 +
EOF
 +
bash /tmp/fix.sh
 +
</pre>
  
 
==Решение проблем с MAC-адресами в копиях виртуальных esxi==
 
==Решение проблем с MAC-адресами в копиях виртуальных esxi==
Строка 255: Строка 554:
 
  for i in `seq 1 22`; do qm clone 400 $((400+$i)) --name new-machine-name-$i --full false;done
 
  for i in `seq 1 22`; do qm clone 400 $((400+$i)) --name new-machine-name-$i --full false;done
  
==Как сделать много копий в кластере==
+
==Как переименовать машины==
 
 
Допустим, имеем кластер из узлов вида
 
 
 
alt-pve-155-X
 
  
, где
+
Даём новые имена машинам с 601 по 612
  
X
+
префикс хотим такой
  
это номер узла кластера (при использовании в цикле важно, чтобы номера узлов в кластере шли подряд). Представим, что узлы у нас пронумерованы от 1 до 12
+
ssa-lin-de-
  
 +
Команда:
  
Также имеем шаблонную виртуальную машину с номером 800
+
  for i in `seq 1 12`; do qm set $((600+$i)) --name ssa-lin-de-$i;done
 
 
 
 
Тогда для клонирования виртуальной машины по разным узлам кластера нужно на узле-кластере выполнить следующую команду.
 
 
 
  for i in `seq 1 12`; do qm clone 800 $((800+$i)) --target alt-pve-155-$i --name vm-spiridonov-postgres-$i ;done
 
  
  
Строка 360: Строка 651:
 
  systemctl enable autorename.service
 
  systemctl enable autorename.service
 
  systemctl start autorename.service
 
  systemctl start autorename.service
 +
 +
 +
==Создание пользователей и добавление разрешений==
 +
 +
Для создания пользователя можно использовать команду:
 +
<pre>
 +
pveum user add nameuser@pve --password 123456
 +
,где nameuser имя пользователя
 +
</pre>
 +
Для добавления пользователя к виртуальной машине:
 +
<pre>
 +
pveum acl modify /vms/900 --users vasya@pve --roles PVEVMUser
 +
</pre>
 +
,где /vms/900 путь до машины, 900-id машины.
 +
user@pve - имя пользователя
 +
PVEVMUser - роль.
 +
 +
==Создать снапшот==
 +
 +
Если снапшот
 +
 +
dfl
 +
 +
и машины с 602 по 612,
 +
 +
то
 +
 +
for i in `seq 2 12`; do qm snapshot $((600+$i)) dfl;done
 +
 +
 +
==Откатить виртмашины к снапшоту==
 +
 +
Если снапшот
 +
 +
dfl
 +
 +
и машины с 602 по 612,
 +
 +
то
 +
 +
for i in `seq 2 12`; do qm rollback $((600+$i)) dfl;done
 +
 +
 +
Если нужно конкретные машины по номерам
 +
 +
В этом примере откатываем машины 619 и 620
 +
 +
for i in 19 20; do qm rollback $((600+$i)) dfl;done
 +
 +
==Остановить и удалить машины==
 +
 +
===Остановить===
 +
 +
for i in `seq 1 23`; do qm stop $((200+$i));done
 +
 +
===Удалить===
 +
 +
for i in `seq 1 23`; do qm destroy $((200+$i)) --purge true;done
 +
 +
==Отключить засыпание Ubuntu 20.04==
 +
 +
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
 +
 +
 +
==sudo su под пользователем administrator без пароля на Ubuntu 20.04==
 +
 +
echo 'administrator ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
 +
 +
==Нагенерить конфиги для подключения по RDP через Remmina==
 +
 +
cd /home/user/.local/share/remmina
 +
 +
<pre>
 +
cat << tpl.remmina > EOF
 +
[remmina]
 +
password=nEwuUehzdh8=
 +
gateway_username=
 +
notes_text=
 +
vc=
 +
preferipv6=0
 +
ssh_tunnel_loopback=0
 +
serialname=
 +
sound=off
 +
printer_overrides=
 +
name=test drp pdrb vm1
 +
console=0
 +
colordepth=99
 +
security=
 +
precommand=
 +
disable_fastpath=0
 +
left-handed=0
 +
postcommand=
 +
multitransport=0
 +
group=
 +
server=10.207.144.62:33901
 +
ssh_tunnel_certfile=
 +
glyph-cache=0
 +
ssh_tunnel_enabled=0
 +
disableclipboard=0
 +
audio-output=
 +
parallelpath=
 +
monitorids=
 +
cert_ignore=0
 +
gateway_server=
 +
serialpermissive=0
 +
protocol=RDP
 +
old-license=0
 +
ssh_tunnel_password=
 +
resolution_mode=2
 +
pth=
 +
loadbalanceinfo=
 +
disableautoreconnect=0
 +
clientname=
 +
clientbuild=
 +
resolution_width=0
 +
drive=
 +
relax-order-checks=0
 +
username=student
 +
base-cred-for-gw=0
 +
gateway_domain=
 +
network=none
 +
rdp2tcp=
 +
gateway_password=
 +
serialdriver=
 +
domain=
 +
profile-lock=0
 +
rdp_reconnect_attempts=
 +
restricted-admin=0
 +
multimon=0
 +
exec=
 +
smartcardname=
 +
serialpath=
 +
enable-autostart=0
 +
usb=
 +
shareprinter=0
 +
ssh_tunnel_passphrase=
 +
shareparallel=0
 +
disablepasswordstoring=0
 +
quality=0
 +
span=0
 +
parallelname=
 +
ssh_tunnel_auth=0
 +
keymap=
 +
ssh_tunnel_username=
 +
execpath=
 +
shareserial=0
 +
resolution_height=0
 +
timeout=
 +
useproxyenv=0
 +
sharesmartcard=0
 +
freerdp_log_filters=
 +
microphone=
 +
dvc=
 +
ssh_tunnel_privatekey=
 +
gwtransp=http
 +
ssh_tunnel_server=
 +
ignore-tls-errors=1
 +
disable-smooth-scrolling=0
 +
gateway_usage=0
 +
websockets=0
 +
freerdp_log_level=INFO
 +
window_height=941
 +
window_maximize=0
 +
window_width=1537
 +
scale=2
 +
viewmode=1
 +
EOF
 +
</pre>
 +
 +
for i in `seq 1 14`; do cat tpl.remmina | sed "s/33901/$((33900+$i))/g" | sed "s/vm1/vm$((0+$i))/g" > group_rdp_vm$((0+$i))_10-207-144-62-$((33900+$i)).remmina; done

Текущая версия на 11:14, 1 ноября 2024

Содержание

Важные моменты при создании кластера PVE

На всех узлах должны быть сформированы правильным образом файлы /etc/hosts

Пример одного из серверов нашего кластера:

127.0.0.1 localhost
192.168.10.126 alt-edu-hpg8.nntc.nnov.ru alt-edu-hpg8
192.168.10.125 alt-edu-hpg5
192.168.10.124 alt-edu-apve4
192.168.10.121 alt-edu-apve1
192.168.10.122 alt-edu-apve2
192.168.10.123 alt-edu-apve3

Соответственно, если нужно будет добавить в кластер ещё один узел, то нужно НА КАЖДОЙ из нод кластера добавить в /etc/hosts сопоставление имени и его ip адреса.

Если этого не сделать, то будут ошибки добавления в кластер нового узла и после этого повиснет веб интерфейс на любой ноде кластера.

Как исправить такую ситуацию (если повис веб интерфейс)?

Отделить неуспешную ноду от кластера по инструкции: https://pve.proxmox.com/wiki/Cluster_Manager#_remove_a_cluster_node (раздел Separate a Node Without Reinstalling)

На кластере в терминале выполнить отсоединение неуспешной ноды командой

pvecm delnode 5

, где 5 - идентификатор ноды из corosync

Иногда по идентификатору не получается. Тогда можно попробовать по имени ноды или по ip адресу

Иногда кажется что кластер развалился. В этом случае нужно перезапустить сервис на каждой из нод и немного подождать.

Перезапустить corosync -- команда:

systemctl restart corosync

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

pvecm status

Также можно посмотреть состав нод кластера -- командой:

pvecm nodes

Также иногда может потребоваться перезапустить сервисы на каждой ноде:

systemctl restart pveproxy
systemctl restart pve-cluster


Настройка после клонирования образа на базе AltEduPve

Deploy dd image over ssh+dd

dd if=alt-edu-pve-template-70g.dd | ssh root@172.16.254.124 /bin/dd of=/dev/sda

Задать переменную с именем диска

DISK='/dev/sda'

Задать переменную с именем сетевого интерфейса для моста

MACHINE_ETH0_DEVICE='eth0'
MACHINE_ETH1_DEVICE='eth1'

Задать переменные для настройки сети

MACHINE_NAME='alt-edu-apve4'
MACHINE_IP0='192.168.10.124'
MACHINE_MASK0='24'
MACHINE_IP1='172.16.254.124'
MACHINE_MASK1='16'
MACHINE_GATEWAY='172.16.1.1'
MACHINE_DNS='172.16.1.1'

Выполнить скрипт из partedmagic

fdisk $DISK <<EOF
d
2
n
p
2


N
w
EOF
pvresize "${DISK}2"
vgchange -ay
mkdir /mnt/d
mount /dev/alt-vg/root /mnt/d
IP=$MACHINE_IP1
HOST=$MACHINE_NAME
echo "127.0.0.1 localhost" > /mnt/d/etc/hosts
echo "$IP $HOST.nntc.nnov.ru $HOST" >> /mnt/d/etc/hosts
echo "$HOST" > /mnt/d/etc/hostname
rm -rf /mnt/d/etc/net/ifaces/*
mkdir /mnt/d/etc/net/ifaces/vmbr0
cat << EOF > /mnt/d/etc/net/ifaces/vmbr0/options
TYPE=bri
VLAN_AWARE=yes
VIDS=2-2048
ONBOOT=yes
DISABLED=no
NM_CONTROLLED=no
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
CONFIG_IPV6=no
BOOTPROTO=static
HOST="$MACHINE_ETH0_DEVICE"
EOF
echo "$MACHINE_IP0/$MACHINE_MASK0" > /mnt/d/etc/net/ifaces/vmbr0/ipv4address
#echo "default via $MACHINE_GATEWAY" > /mnt/d/etc/net/ifaces/vmbr0/ipv4route
#echo "nameserver $MACHINE_GATEWAY" > /mnt/d/etc/net/ifaces/vmbr0/resolve.conf


mkdir /mnt/d/etc/net/ifaces/vmbr1
cat << EOF > /mnt/d/etc/net/ifaces/vmbr1/options
TYPE=bri
VLAN_AWARE=yes
VIDS=2-2048
ONBOOT=yes
DISABLED=no
NM_CONTROLLED=no
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
CONFIG_IPV6=no
BOOTPROTO=static
HOST="$MACHINE_ETH1_DEVICE"
EOF
echo "$MACHINE_IP1/$MACHINE_MASK1" > /mnt/d/etc/net/ifaces/vmbr1/ipv4address
echo "default via $MACHINE_GATEWAY" > /mnt/d/etc/net/ifaces/vmbr1/ipv4route
echo "nameserver $MACHINE_GATEWAY" > /mnt/d/etc/net/ifaces/vmbr1/resolve.conf


cat << EOF > /mnt/d/etc/sysconfig/network
# When set to no, this may cause most daemons' initscripts skip starting.
NETWORKING=yes

# Used by hotplug/pcmcia/ifplugd scripts to detect current network config
# subsystem.
CONFMETHOD=etcnet

# Used by rc.sysinit to setup system hostname at boot.
HOSTNAME=$HOST

# This is used by ALTLinux ppp-common to decide if we want to install
# nameserver lines into /etc/resolv.conf or not.
RESOLV_MODS=yes
EOF
reboot

Выполнить скрипт уже из pve, подключившись в рута по ssh

apt-get update
apt-get dist-upgrade
apt-get install -y firefox
rpm -e chromium-disable-webfonts
vgchange -ay
lvcreate -y alt-vg --name vmstorage -L 400g
zpool create zfspool /dev/alt-vg/vmstorage -f
zfs set compression=off zfspool
zfs set sync=disabled zfspool
mkdir /zfspool/storage
chown storage:storage /zfspool/storage -R
pvesm add zfspool vmstorage --pool zfspool --content images,rootdir
pvesm add cifs pveshare --server 172.16.254.123 --share mcluster1 --username mcluster1 --password --content iso,backup

Дополнительные настройки

Решение проблемы с офисом

apt-get install LibreOffice LibreOffice-langpack-ru

Google Chrome

epm play chrome

Если нужен доступ к системе по VNC

Смотреть здесь: https://wiki.nntc.nnov.ru/index.php?title=Vnc

Если нужен докер

apt-get install docker-ce docker-compose
usermod student -aG docker
systemctl enable --now docker

Что такое Docker и для чего может быть полезен?

Смотреть здесь: https://wiki.nntc.nnov.ru/index.php?title=Docker

Для чего, например, может быть нужен докер?

Запуск веб версии VNC клиента - смотреть здесь: https://wiki.nntc.nnov.ru/index.php?title=Vnc#.D0.97.D0.B0.D0.BF.D1.83.D1.81.D1.82.D0.B8.D1.82.D1.8C_.D0.BA.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.B5.D1.80_.D1.81_NoVNC_.D0.B4.D0.BB.D1.8F_.D1.82.D1.80.D0.B0.D0.BD.D1.81.D0.BB.D1.8F.D1.86.D0.B8.D0.B8_.D1.80.D0.B0.D0.B1.D0.BE.D1.87.D0.B5.D0.B3.D0.BE_.D1.81.D1.82.D0.BE.D0.BB.D0.B0_.D0.B2_.D0.B1.D1.80.D0.B0.D1.83.D0.B7.D0.B5.D1.80

Лайфхаки

Автонастройка компьютеров с PVE при работе сети по DHCP

cat << 'EOF1' > /opt/after-boot.sh 
#!/bin/bash


mac=$(ip a | grep eno -A 1 | grep ether | awk {'print $2'})

cat << EOF > /etc/net/ifaces/vmbr0/iplink
address ${mac}
EOF

systemctl restart network
sleep 2
killall dhcpcd
sleep 8
dhcpcd vmbr0

ip=$(ip a | grep vmbr0 | grep inet | awk {'print $2'} | awk -F '/' {'print $1'})
name="prdb-$(echo $ip | awk -F '.' {'print $3'})-$(echo $ip | awk -F '.' {'print $4'})"

echo ${name} > /etc/hostname

cat << EOF > /etc/hosts
${ip}     ${name}
127.0.0.1     localhost.localdomain localhost
EOF

EOF1

cat << 'EOF' > /etc/rc.d/rc.local 
#!/bin/bash
/opt/after-boot.sh
exit 0
EOF

chmod +x /etc/rc.d/rc.local
chmod +x /opt/after-boot.sh


Перенос виртмашин после переименования узла

systemctl stop pve-cluster
systemctl stop corosync
pmxcfs -l
/bin/rm /etc/pve/corosync.conf
/bin/rm -r /etc/corosync/*
export SRC_DIR='prdb-145-37'
cd /etc/pve/nodes/
deldirs=$(ls | grep -v $(hostname))
confs=$(ls $SRC_DIR/qemu-server/*.conf)

for i in $(echo ${confs}); do
destfile=$(echo $i | awk -F '/' {'print $3'})
cat $i > $(hostname)/qemu-server/$destfile
done

for d in $(echo ${deldirs}); do
rm -rf $d
done

Настройка PVE из Pmagic

Просто бросьте это в консоль (если нужно, предварительно измените в текстовом редакторе и бросьте потом)

cat << 'EOF1' > q.sh
#!/bin/bash
###############################
classname="mobd"
pcnumber=10

###############################
partprobe /dev/nvme0n1

gdisk /dev/nvme0n1 << EOF
x
e
w
Y
EOF

mkdir /mnt/q
mount /dev/nvme0n1p2 /mnt/q

mac=`ip a | grep eth0 -A 1 | head -2 | awk {'print $2'} | tail -1`
ipmask=`ip a | grep "inet 10.207" | awk {'print $2'}`
ip=`echo $ipmask | awk -F '/' {'print $1'}`
mask=`echo $ipmask | awk -F '/' {'print $2'}`
ip3=`echo $ip | awk -F '.' {'print $3'}`
ip4=`echo $ip | awk -F '.' {'print $4'}`

echo "address $mac" > /mnt/q/etc/net/ifaces/vmbr0/iplink
echo "${classname}-${ip3}-${ip4}.nntc.nnov.ru" > /mnt/q/etc/hostname
echo "127.0.0.1 localhost" > /mnt/q/etc/hosts
echo "${ip} ${classname}-${ip3}-${ip4}.nntc.nnov.ru ${classname}-${ip3}-${ip4}" >> /mnt/q/etc/hosts

cat << EOF > /mnt/q/usr/share/applications/demoexam-seat.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Demo Exam Seat
GenericName=Demo Exam Seat
Comment=
Exec=/opt/run-demoexam-seat.sh ${pcnumber}
Terminal=false
MimeType=text/plain;
Icon=
Categories=Development;
StartupNotify=true
EOF

cat << EOF > /mnt/q/usr/share/applications/demoexam-seat-spice.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Demo Exam Seat (SPICE)
GenericName=Demo Exam Seat (SPICE)
Exec=/opt/run-demoexam-seat-spice.sh ${pcnumber}
Terminal=false
MimeType=text/plain;
Icon=
Categories=Development;
StartupNotify=true
EOF

umount /mnt/q

EOF1

chmod +x q.sh
./q.sh


Если после клонирования PVE через архивирование файловой системы PVE не стартует

systemctl stop pve-cluster
systemctl stop corosync
/bin/rm -rf /etc/pve
reboot

Источник: https://forum.proxmox.com/threads/installation-to-start-pve-cluster.85490/

Если виртуальная машина не хочет бэкапиться

Ошибка вроде этой:

Backup of VM 40100 failed - unable to connect to qmeventd socket (vmid: 40100) - No such file or directory

Тогда:

systemctl start qmeventd.service

Источник: https://forum.proxmox.com/threads/backup-of-vm-failed-unable-to-connect-to-qmeventd-socket.117940/

Если не работает автостарт виртуальных машин после загрузки PVE

systemctl enable pve-guests

Если proxnox не хочет запускать бэкапы по расписанию

Включить сервис:

systemctl enable --now pvescheduler

Источник: https://forum.proxmox.com/threads/backups-not-running-after-upgrade-to-7-4.124784/

Сброс ноды после вывода из кластера

Выполнить последовательность команд:

systemctl stop pve-cluster
systemctl stop corosync
pmxcfs -l
/bin/rm /etc/pve/corosync.conf
/bin/rm -r /etc/corosync/*
killall pmxcfs
systemctl start pve-cluster

При необходимости, можно очистить ноду от остатков конфигураций других кластерных нод. Для этого нужно перейти в каталог:

cd /etc/pve/nodes

и удалить оттуда все каталоги, кроме каталога конфигурации самой ноды

/bin/rm -r node-89-11  node-89-13  node-89-2  node-89-4  node-89-6  node-89-8

затем перезагрузка

reboot

После этих процедур нода готова становиться кластером или быть введённой в уже существующий кластер

Если нода удалена из кластера, но осталась в дереве узлов веб интерфейса

Нужно последовательно на каждом узле запустить эти команды. Пример показывает запуск команды на cluster-node8, через ssh

ssh cluster-node8 systemctl restart corosync && systemctl restart pve-cluster

Если узлов, допустим, 8, то нужно выполнить последовательно команду, подключаясь поочерёдно к каждому из узлов

Например, так:

for i in 2 3 6 7 8; do ssh cluster-node${i} systemctl restart corosync && systemctl restart pve-cluster; done

Синхронизировать время и перегенерировать сертификаты на всех нодах

Последовательно зайти на каждый узел и просто бросить это в консоль и нажать Enter

cat << EOF > /tmp/fix.sh
ntpdate pool.ntp.org
rm /etc/pve/pve-root-ca.pem
rm /etc/pve/priv/pve-root-ca.key
rm /etc/pve/nodes/cluster-node1/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node2/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node3/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node4/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node6/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node7/pve-ssl.{pem,key}
rm /etc/pve/nodes/cluster-node8/pve-ssl.{pem,key}
rm /etc/pve/authkey.pub
rm /etc/pve/priv/authkey.key
rm /etc/pve/priv/authorized_keys
pvecm updatecerts -f
systemctl restart pvedaemon
systemctl restart pveproxy
systemctl restart corosync
mv /root/.ssh/known_hosts /root/.ssh/known_hosts_old
EOF
bash /tmp/fix.sh

Решение проблем с MAC-адресами в копиях виртуальных esxi

1. Войти по ssh на esxi машину

ssh root@172.16.X.Y

При удачном логине будет примерно такое приглашение командной строки

[root@localhost:~]

2. Кинуть туда этот текст и нажать enter

cat << 'EOF' > fix.sh
#!/bin/sh
newmac=$(esxcfg-nics -l | grep vmnic0 | awk {'print $7'})
oldmac=$(cat /etc/vmware/esx.conf | grep 'vmkernelnic' | grep -o '..:..:..:..:..:..')
sed -i "s/$oldmac/$newmac/g" /etc/vmware/esx.conf;
echo "test new mac $newmac"
cat /etc/vmware/esx.conf | grep $newmac
echo "please type command: reboot"
EOF
chmod +x fix.sh
./fix.sh

3. Перезагрузить систему

reboot

Переименовать и/или перенастроить сеть на ALT-PVE

Допустим, есть задача установить следующие параметры (не важно на как предварительно настроенной ALT-PVE)

Хотим такой ip адрес: 192.168.0.77 Хотим такую маску: 255.255.255.0 (aka 24) Хотим такое имя хоста: alt-pve

Тогда нужно подготовить такой текст и бросить его в рутовую консоль:

IP=192.168.0.77
MASK=24
GW=192.168.0.1
HOST=alt-pve
echo "127.0.0.1 localhost" > /etc/hosts
echo "$IP $HOST.local $HOST" >> /etc/hosts
echo "$HOST" > /etc/hostname
rm -rf /etc/net/ifaces/*
mkdir /etc/net/ifaces/vmbr0
cat << EOF > /etc/net/ifaces/vmbr0/options
TYPE=bri
VLAN_AWARE=yes
VIDS=2-2048
ONBOOT=yes
DISABLED=no
NM_CONTROLLED=no
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
CONFIG_IPV6=no
BOOTPROTO=static
HOST="eth0"
EOF
echo "$IP/$MASK" > /etc/net/ifaces/vmbr0/ipv4address
echo "default via $GW" > /etc/net/ifaces/vmbr0/ipv4route
echo "nameserver $GW" > /etc/net/ifaces/vmbr0/resolve.conf
cat << EOF > /etc/sysconfig/network
# When set to no, this may cause most daemons' initscripts skip starting.
NETWORKING=yes
# Used by hotplug/pcmcia/ifplugd scripts to detect current network config
# subsystem.
CONFMETHOD=etcnet
# Used by rc.sysinit to setup system hostname at boot.
HOSTNAME=$HOST
# This is used by ALTLinux ppp-common to decide if we want to install
# nameserver lines into /etc/resolv.conf or not.
RESOLV_MODS=yes
EOF
reboot

Затем нажать Enter для перезагрузки машины


Как сделать много связанных копий

for i in `seq 1 22`; do qm clone 400 $((400+$i)) --name new-machine-name-$i --full false;done

Как переименовать машины

Даём новые имена машинам с 601 по 612

префикс хотим такой

ssa-lin-de-

Команда:

for i in `seq 1 12`; do qm set $((600+$i)) --name ssa-lin-de-$i;done

Сетевой мост vmbr0 в PVE в режиме dhcp

в файле /etc/net/ifaces/vmbr0/options выставить параметр

BOOTPROTO=dhcp

удалить файлы

rm /etc/net/ifaces/vmbr0/ipv4*

Создать скрипт

cat << 'EOF' > /etc/systemd/system/dhcponboot.service
[Unit]
Description=dhcponboot
Requires=network-online.target
After=network-online.target

[Service]
Restart=no
ExecStart=dhclient vmbr0
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

дать команды

systemctl daemon-reload 
systemctl enable dhcponboot.service
systemctl start dhcponboot.service

Автопереименование машины

Создать скрипт

cat << 'EOF' > /usr/bin/autorename.sh
#!/bin/sh
sleep 3s
hostname_prefix="pc"
new_ip=$(ip a | grep eth0 | tail -1 | awk {'print $2'} | awk -F '/' {'print $1'})
oct3=$(echo $new_ip | awk -F '.' {'print $3'})
oct4=$(echo $new_ip | awk -F '.' {'print $4'})
new_hostname="${hostname_prefix}-${oct3}-${oct4}"
echo "127.0.0.1 localhost" > /etc/hosts
echo "$new_ip ${new_hostname}.local ${new_hostname}" >> /etc/hosts
echo $new_hostname > /etc/hostname
exit 0
EOF
chmod +x /usr/bin/autorename.sh

Создать сервис

cat << 'EOF' > /etc/systemd/system/autorename.service
[Unit]
Description=autorename
Requires=network-online.target
After=network-online.target

[Service]
Restart=no
ExecStart=/usr/bin/autorename.sh
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

дать команды

systemctl daemon-reload 
systemctl enable autorename.service
systemctl start autorename.service


Создание пользователей и добавление разрешений

Для создания пользователя можно использовать команду:

pveum user add nameuser@pve --password 123456
,где nameuser имя пользователя

Для добавления пользователя к виртуальной машине:

pveum acl modify /vms/900 --users vasya@pve --roles PVEVMUser

,где /vms/900 путь до машины, 900-id машины. user@pve - имя пользователя PVEVMUser - роль.

Создать снапшот

Если снапшот

dfl

и машины с 602 по 612,

то

for i in `seq 2 12`; do qm snapshot $((600+$i)) dfl;done


Откатить виртмашины к снапшоту

Если снапшот

dfl

и машины с 602 по 612,

то

for i in `seq 2 12`; do qm rollback $((600+$i)) dfl;done


Если нужно конкретные машины по номерам

В этом примере откатываем машины 619 и 620

for i in 19 20; do qm rollback $((600+$i)) dfl;done

Остановить и удалить машины

Остановить

for i in `seq 1 23`; do qm stop $((200+$i));done

Удалить

for i in `seq 1 23`; do qm destroy $((200+$i)) --purge true;done

Отключить засыпание Ubuntu 20.04

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target


sudo su под пользователем administrator без пароля на Ubuntu 20.04

echo 'administrator ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

Нагенерить конфиги для подключения по RDP через Remmina

cd /home/user/.local/share/remmina

cat << tpl.remmina > EOF
[remmina]
password=nEwuUehzdh8=
gateway_username=
notes_text=
vc=
preferipv6=0
ssh_tunnel_loopback=0
serialname=
sound=off
printer_overrides=
name=test drp pdrb vm1
console=0
colordepth=99
security=
precommand=
disable_fastpath=0
left-handed=0
postcommand=
multitransport=0
group=
server=10.207.144.62:33901
ssh_tunnel_certfile=
glyph-cache=0
ssh_tunnel_enabled=0
disableclipboard=0
audio-output=
parallelpath=
monitorids=
cert_ignore=0
gateway_server=
serialpermissive=0
protocol=RDP
old-license=0
ssh_tunnel_password=
resolution_mode=2
pth=
loadbalanceinfo=
disableautoreconnect=0
clientname=
clientbuild=
resolution_width=0
drive=
relax-order-checks=0
username=student
base-cred-for-gw=0
gateway_domain=
network=none
rdp2tcp=
gateway_password=
serialdriver=
domain=
profile-lock=0
rdp_reconnect_attempts=
restricted-admin=0
multimon=0
exec=
smartcardname=
serialpath=
enable-autostart=0
usb=
shareprinter=0
ssh_tunnel_passphrase=
shareparallel=0
disablepasswordstoring=0
quality=0
span=0
parallelname=
ssh_tunnel_auth=0
keymap=
ssh_tunnel_username=
execpath=
shareserial=0
resolution_height=0
timeout=
useproxyenv=0
sharesmartcard=0
freerdp_log_filters=
microphone=
dvc=
ssh_tunnel_privatekey=
gwtransp=http
ssh_tunnel_server=
ignore-tls-errors=1
disable-smooth-scrolling=0
gateway_usage=0
websockets=0
freerdp_log_level=INFO
window_height=941
window_maximize=0
window_width=1537
scale=2
viewmode=1
EOF
for i in `seq 1 14`; do cat tpl.remmina | sed "s/33901/$((33900+$i))/g" | sed "s/vm1/vm$((0+$i))/g" > group_rdp_vm$((0+$i))_10-207-144-62-$((33900+$i)).remmina; done