ΠΠΎΠΌΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ
ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ, ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²ΡΡΠ°Π²Π°Π»Π° Π·Π°Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ Β«ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ Β» ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ΡΡ.
ΠΡΠΎΠ»ΠΎΠ³
Π ΠΎΡΠ΄Π΅Π» ΠΠ’ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠ΅ΠΉΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅Π³ΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΡ, ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈΡΡ Ρ ΠΏΡΠΎΡΡΠ±ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Β«ΡΡΠ°Π½ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡΒ» Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ°Π½Π½ΡΠ΅ ΡΡΠ°Π½ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠΎΡΡΠ°Π»Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΡΠ°Π±ΠΎΡΡ Ρ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΠΎΡΡΠ°Π»Π°ΠΌΠΈ.
ΠΠ°ΠΆΠ½ΡΠΌ Π°ΡΠΏΠ΅ΠΊΡΠΎΠΌ ΡΠ²Π»ΡΠ»ΡΡ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Β«Π·Π°ΡΠΎΡΠ΅Π½Π°Β» ΠΏΠΎΠ΄ MS Windows (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΒ»), Π° Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΎΡΠΊΡΡΡΡΡ
ΡΠΎΡΠΌΠ°ΡΠΎΠ², MS Office ΠΎΡΡΠ°Π΅ΡΡΡ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΡΡΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ MS Windows ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π²ΠΈΠ΄Π΅Π»ΠΎΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΠ΅Π°Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΈΡ
ΡΡΠ΅ΡΠΊΠ΅ ΡΡΠ΅ΡΡΠΈΠΌ Π»ΠΈΡΠ°ΠΌ.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΠ
- ΠΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ (Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΊΠ»ΡΡΠΈ ΡΠ΅Π΅ΡΡΡΠ°) Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π°Π»ΡΡΡΡΡ.
- ΠΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ.
- ΠΡΡ ΠΎΠ΄ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎ Π±Π΅Π»ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ Π°Π΄ΡΠ΅ΡΠΎΠ².
- ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
- Π ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎΡ ΡΠ΅Π°Π½ΡΠ° Π±ΠΎΠ»Π΅Π΅ 5 ΠΌΠΈΠ½ΡΡ, ΡΠ΅Π°Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ, ΡΡΠ°Π½ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΎΡΠΈΡΡΠΊΡ.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΡΡΠ°Π½ΡΠΈΠΉ Π½Π° ΡΠΈΠ»ΠΈΠ°Π» β Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 4-Ρ .
- ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Β«ΡΠ΅Π» Π·Π° ΡΡΡΠ»Β» Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌ ΠΠ.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² (ΡΠΊΠ°Π½Π΅ΡΡ, ΡΠ»ΡΡΠΊΠΈ) Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΌΠ΅ΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Β«ΡΡΠ°Π½ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡΒ».
- ΠΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°
- ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² (ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ) Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ°.
ΠΡΠΊΠΈ ΡΠ²ΠΎΡΡΠ΅ΡΡΠ²Π°
ΠΠ΄ΠΎΠ²ΠΎΠ»Ρ Π½Π°ΠΈΠ³ΡΠ°Π²ΡΠΈΡΡ Ρ Π²ΠΈΠ½Π΄ΠΎΠ²ΡΠΌΠΈ livecd, ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΄ΡΡΠ½ΠΎΠΌΡ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ΅Π΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 3 ΠΊΡΠΈΡΠΈΡΠ½ΡΠΌ ΠΏΡΠ½ΠΊΡΠ°ΠΌ. ΠΠ½ΠΈ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ»Π³ΠΎ Π³ΡΡΠ·ΡΡΡΡ, Π»ΠΈΠ±ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ live, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈΡ Π±ΡΠ»Π° ΡΠΎΠΏΡΡΠΆΠ΅Π½Π° Ρ Π΄ΠΈΠΊΠΈΠΌΠΈ Π±ΠΎΠ»ΡΠΌΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΏΠ»ΠΎΡ ΠΎ ΠΈΡΠΊΠ°Π»ΠΈ, ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π±ΡΠ΄Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½.
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ ΡΡΠ°Π»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ VDI, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π»ΠΈΠ±ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΡΠΎΠ³ΠΈ, Π»ΠΈΠ±ΠΎ ΡΡΠ΅Π±ΡΡΡ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ. Π Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠ°Π³ΠΈΠΈ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ/ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°. Π ΡΡΠ°ΡΡΡΡ, Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅, low end ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΈΠ»ΠΈΠ°Π»Π°Ρ , ΠΎΡ Π²ΡΠ²ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ ΠΈΠ· ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±Π°Π·Ρ.
Π§ΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ? Π Π²ΠΎΡ, ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, Ρ Π²Π°ΠΌ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ ΡΠΌΠΎΠ³Ρ, ΠΈΠ±ΠΎ NDA, Π½ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ² ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΡ Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΠΎΡΠΎΡΠΎ ΡΠ΅Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π² Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡΡ , Ρ ΠΎΡΡ ΠΈ Π½Π΅ ΠΏΠΎΡΠ»Π° Π² ΡΠ΅ΡΠΈΡ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ»Π°ΠΉΠΌΠ΅ΡΠΎΠ²: Π°Π²ΡΠΎΡ Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π΄ΠΎΠ±ΡΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈ Ρ ΠΏΠ΅ΡΠ½Π΅ΠΉ. ΠΠ²ΡΠΎΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ Sein Englishe sprache is zehr schlecht. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ, Π½Π° bug fix ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ, Π²ΡΡ Π² Π²Π°ΡΠΈΡ ΡΡΠΊΠ°Ρ . ΠΠ²ΡΠΎΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ KVM ΠΈ ΡΠΈΡΠ°Π»ΠΈ ΠΎΠ±Π·ΠΎΡΠ½ΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎ Spice ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π½Ρ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ Centos ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ GNU Linux Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠΌ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΡΡΡΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌΡ ΡΠΈΠΊΠ»Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΡΠ°ΡΡΡ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ΅, Ρ ΠΎΠΏΠΈΡΡ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ live ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ½ΠΊΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π½Π° Π±Π°Π·Π΅ Fedora ΠΈ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ Π΄Π΅ΡΠ°Π»ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ KVM ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Π·ΡΡΡ ΡΠ²Π΅ΡΠ½ΠΎΠΉ Π±ΡΠΌΠ°Π³ΠΈ,
ΠΡΠ°ΡΠΊΠΈ, ΠΊΠΈΡΡΠΎΡΠΊΠΈ ΠΈ ΠΊΠ»Π΅ΠΉ,
Π Π΅ΡΠ΅ ΡΡΡΡ-ΡΡΡΡ ΡΠ½ΠΎΡΠΎΠ²ΠΊΠΈβ¦
ΠΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΡΠ±Π»Π΅ΠΉ!
Π‘Ρ Π΅ΠΌΠ° ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π΄Π°
ΠΡΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ΅ΡΠΈ ΡΠΈΠ»ΠΈΠ°Π»Π°, Π½Π°ΡΡΠΆΡ Π²ΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΊΠ°Π½Π°Π». ΠΡΠΎΠΊΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΆΠ΅ Π±ΡΠ», Π½ΠΈΡΠ΅Π³ΠΎ ΡΠΊΡΡΡΠ°ΠΎΡΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ½ ΠΈΠ· ΡΠ΅Π±Ρ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅ΠΌ, Π² ΡΠΈΡΠ»Π΅ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΡΠ°ΡΡΠΈΠΊΠ° ΠΎΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΠΌΠ°ΡΠΈΠ½ (ΡΠΎΠΊΡ. ΠΠ Π΄Π°Π»Π΅Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅). ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ Π½Π° KVM ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ Π½Π°Π΄ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΡ Π½Π΅Π³ΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ.
Client Station β ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Β«ΡΡΠ°Π½ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡΒ», Β«ΡΡΠΎΠ½ΡΠ΅Π½Π΄Β» Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ· ΡΠ΅Π±Ρ Π½Π΅ΡΡΠΎΠΏΡ Lenovo IdeaCentre. Π§Π΅ΠΌ Ρ ΠΎΡΠΎΡ ΡΡΠΎΡ Π°Π³ΡΠ΅Π³Π°Ρ? ΠΠ° ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ°Π΄ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ USB ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ² ΠΈ ΠΊΠ°ΡΠ΄ΡΠΈΠ΄Π΅Ρ Π½Π° Π»ΠΈΡΠ΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Π Π½Π°ΡΠ΅ΠΉ ΡΡ Π΅ΠΌΠ΅ Π² ΠΊΠ°ΡΠ΄ΡΠΈΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»Π΅Π½Π° SD ΠΊΠ°ΡΡΠ° Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΠΎΠΉ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΡ Π·Π°ΠΏΠΈΡΠ°Π½ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ live ΠΎΠ±ΡΠ°Π· Fedora 28. Π‘Π°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ, ΠΊ Π½Π΅ΡΡΠΎΠΏΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° ΠΈ ΠΌΡΡΡ.
Switch β Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ switch Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΡΠΎΠΈΡ Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΈ ΠΌΠΈΠ³Π°Π΅Ρ Π»Π°ΠΌΠΏΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠΈ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΡΠ΅ΡΡΠΌ, ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΡΠΈ Β«ΡΡΠ°Π½ΡΠΈΠΉ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡΒ» Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½.
KVM_Server β ΡΠ΄ΡΠΎ ΡΡ Π΅ΠΌΡ, Π² ΡΡΠ΅Π½Π΄ΠΎΠ²ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡΡ Core 2 Quad Q9650 Ρ 8 ΠΠ± ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΡΡΠ½ΡΠ» Π½Π° ΡΠ΅Π±Π΅ 3 Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ Windows10. ΠΠΈΡΠΊΠΎΠ²Π°Ρ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° β adaptec 3405 2 Π΄ΠΈΡΠΊΠ° Raid 1 + SSD. Π ΠΏΠΎΠ»Π΅Π²ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡΡ Xeon 1220 Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΉ LSI 9260 + SSD Π»Π΅Π³ΠΊΠΎ ΡΡΠ½ΡΠ»ΠΈ 5-6 ΠΠ. Π‘Π΅ΡΠ²Π΅ΡΠ° Π½Π°ΠΌ Π΄ΠΎΡΡΠ°Π»ΠΈΡΡ Π±Ρ ΠΎΡ Π²ΡΠ±ΡΠ²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΊΠ°ΠΏΠΈΡΠ°Π»ΡΠ½ΡΡ Π·Π°ΡΡΠ°Ρ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠ° ΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅(Π°Ρ ) ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ KVM Ρ ΠΏΡΠ»ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ pool_Vm.
Vm β Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π±ΡΠΊΡΠ½Π΄ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°. Π Π½Π΅ΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Enp5s0 β ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΌΠΎΡΡΡΡΠΈΠΉ Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΅ΡΠΈ Β«ΡΡΠ°Π½ΡΠΈΠΉ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡΒ», Π½Π° Π½Π΅ΠΌ ΠΆΠΈΠ²ΡΡ dhcpd, ntpd, httpd, ΠΈ xinetd ΡΠ»ΡΡΠ°Π΅Ρ Β«signalΒ» ΠΏΠΎΡΡ.
Lo0 β ΠΏΡΠ΅Π²Π΄ΠΎΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ»ΠΈ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ.
Spice_console β ΠΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ Π²Π΅ΡΡ, Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ RDP, ΠΏΡΠΈ ΡΠ°Π·Π²ΠΎΡΠΎΡΠ΅ ΡΠ²ΡΠ·ΠΊΠΈ KVM+Spice protocol, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ β ΠΏΠΎΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡ Π½Π° ΡΡΠΎΡ TCP ΠΏΠΎΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Vm, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡ ΠΊ Vm ΡΠ΅ΡΠ΅Π· Π΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Vm ΠΏΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Π°, ΡΠ΅ΡΠ²Π΅Ρ Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ. ΠΠ»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ β IPKVM. Π’.Π΅. Π½Π° ΡΡΠΎΡ ΠΏΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΠ, Π½Π° Π½Π΅Π³ΠΎ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΡΡΠΈ, ΠΈ (ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅) Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Spice ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅ΡΡΠΎΠ²Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ USB ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠ»ΠΎΠ²Π½ΠΎ ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΊ ΡΠ°ΠΌΠΎΠΉ Vm. ΠΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠ»ΡΡ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Π΅ΠΉ, ΡΠΊΠ°Π½Π΅ΡΠΎΠ², Π²ΡΠ±-ΠΊΠ°ΠΌΠ΅Ρ.
Vnet0, virbr0 ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΊΠ°ΡΡΡ Vm ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΠ΅ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½.
ΠΠ°ΠΊ ΠΠ’Π ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π‘ΠΎ ΡΡΠΎΡΠΎΠ½Ρ Client Station
ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΡΠ°Π½ΡΠΈΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ live ΠΎΠ±ΡΠ°Π·Π° Fedora 28, ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ip Π°Π΄ΡΠ΅Ρ ΠΏΠΎ dhcp ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΡΠ΅ΡΠΈ 169.254.24.0/24. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°ΠΉΠ΅ΡΠ²ΠΎΠ»Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ Β«signalΒ» ΠΈ Β«spiceΒ» ΠΏΠΎΡΡΠ°ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΠ°Π½ΡΠΈΡ ΠΆΠ΄Π΅Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Β«ClientΒ». ΠΠΎΡΠ»Π΅ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΏΡΡΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ°Π±ΠΎΡΠΈΡ ΡΡΠΎΠ»ΠΎΠ² Β«openboxΒ» ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° autostart ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π²ΡΠ΅Π³ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ, ΡΠΊΡΠΈΠΏΡ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΊΡΠΈΠΏΡ remote.sh.
$HOME/.config/openbox/scripts/remote.sh
#!/bin/sh
server_ip=$(/usr/bin/cat /etc/client.conf |/usr/bin/grep "server_ip"
|/usr/bin/cut -d "=" -f2)
vdi_signal_port=$(/usr/bin/cat /etc/client.conf |/usr/bin/grep "vdi_signal_port"
|/usr/bin/cut -d "=" -f2)
vdi_spice_port=$(/usr/bin/cat /etc/client.conf |/usr/bin/grep "vdi_spice_port"
|/usr/bin/cut -d "=" -f2)
animation_folder=$(/usr/bin/cat /etc/client.conf |/usr/bin/grep "animation_folder"
|/usr/bin/cut -d "=" -f2)
process=/usr/bin/remote-viewer
while true
do
if [ -z `/usr/bin/pidof feh` ]
then
/usr/bin/echo $animation_folder
/usr/bin/feh -N -x -D1 $animation_folder &
else
/usr/bin/echo
fi
/usr/bin/nc -i 1 $server_ip $vdi_signal_port |while read line
do
if /usr/bin/echo "$line" |/usr/bin/grep "RULE ADDED, CONNECT NOW!"
then
/usr/bin/killall feh
pid_process=$($process "spice://$server_ip:$vdi_spice_port"
"--spice-disable-audio" "--spice-disable-effects=animation"
"--spice-preferred-compression=auto-glz" "-k"
"--kiosk-quit=on-disconnect" | /bin/echo $!)
/usr/bin/wait $pid_process
/usr/bin/killall -u $USER
exit
else
/usr/bin/echo $line >> /var/log/remote.log
fi
done
done
/etc/client.conf
server_ip=169.254.24.1
vdi_signal_port=5905
vdi_spice_port=5906
animation_folder=/usr/share/backgrounds/animation
background_folder=/usr/share/backgrounds2/fedora-workstation
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»Π° client.conf
server_ip β Π°Π΄ΡΠ΅Ρ KVM_Server
vdi_signal_port β ΠΏΠΎΡΡ KVM_Server Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Β«ΡΠΈΠ΄ΠΈΡΒ» xinetd
vdi_spice_port β ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΏΠΎΡΡ KVM_Server, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ remote-viewer ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ spice ΠΏΠΎΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Vm (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½ΠΈΠΆΠ΅)
animation_folder β ΠΏΠ°ΠΏΠΊΠ°, ΠΎΡΠΊΡΠ΄Π° Π±Π΅ΡΡΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ bullshit animation
background_folder β ΠΏΠ°ΠΏΠΊΠ°, ΠΎΡΠΊΡΠ΄Π° Π±Π΅ΡΡΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΉ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ°ΡΡΠΈ.
Π‘ΠΊΡΠΈΠΏΡ remote.sh Π±Π΅ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ /etc/client.conf ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ nc ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Β«vdi_signal_portΒ» ΠΏΠΎΡΡ KVM ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΡΠΎΠΊΠΈ Β«RULE ADDED, CONNECT NOWΒ». ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ remote-viewer Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΊΠΈΠΎΡΠΊΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° Β«vdi_spice_portΒ» ΠΏΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ remote-viewer-Π°.
Remote-viewer ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡ Π½Π° Β«vdi_spice_portΒ» ΠΏΠΎΡΡ, Π·Π° ΡΡΠ΅Ρ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π½Π° ΠΏΠΎΡΡ Β«spice_consoleΒ» ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° lo0 Ρ.Π΅. Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ bullshit animation, Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π°ΠΉΠ΄-ΡΠΎΡ ΠΈΠ· jpeg ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ animation_folder ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
ΠΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Β«spice_consoleΒ» ΠΏΠΎΡΡΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΎΠ± Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ/ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ (Ρ.Π΅. ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ), ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π²ΡΠ΅Π³ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΡ lightdm ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ.
Π‘ΠΎ ΡΡΠΎΡΠΎΠ½Ρ KVM Server
ΠΠ° Β«signalΒ» ΠΏΠΎΡΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΊΠ°ΡΡΡ enp5s0 ΠΆΠ΄Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ xinetd. ΠΠΎΡΠ»Π΅ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠ° Π½Π° Β«signalΒ» ΠΏΠΎΡΡ xinetd Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΊΡΠΈΠΏΡ vm_manager.sh Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅ΠΌΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π²Π²ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ° Π² nc ΡΠ΅ΡΡΠΈΡ Client Station.
/etc/xinetd.d/test-server
service vdi_signal
{
port = 5905
socket_type = stream
protocol = tcp
wait = no
user = root
server = /home/admin/scripts_vdi_new/vm_manager.sh
}
/home/admin/scripts_vdi_new/vm_manager.sh
#!/usr/bin/sh
#<SET LOCAL VARIABLES FOR SCRIPT>#
SRV_SCRIPTS_DIR=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_scripts_dir" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_SCRIPTS_DIR=$SRV_SCRIPTS_DIR"
export SRV_SCRIPTS_DIR=$SRV_SCRIPTS_DIR
SRV_POOL_SIZE=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_pool_size" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_POOL_SIZE=$SRV_POOL_SIZE"
export "SRV_POOL_SIZE=$SRV_POOL_SIZE"
SRV_START_PORT_POOL=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_start_port_pool" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo SRV_START_PORT_POOL=$SRV_START_PORT_POOL
export SRV_START_PORT_POOL=$SRV_START_PORT_POOL
SRV_TMP_DIR=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_tmp_dir" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_TMP_DIR=$SRV_TMP_DIR"
export SRV_TMP_DIR=$SRV_TMP_DIR
date=$(/usr/bin/date)
#</SET LOCAL VARIABLES FOR SCRIPT>#
/usr/bin/echo "# $date START EXECUTE VM_MANAGER.SH #"
make_connect_to_vm() {
#<READING CLEAR.LIST AND CHECK PORT FOR NETWORK STATE>#
/usr/bin/echo "READING CLEAN.LIST AND CHECK PORT STATE"
#<CHECK FOR NO ONE PORT IN CLEAR.LIST>#
if [ -z `/usr/bin/cat $SRV_TMP_DIR/clear.list` ]
then
/usr/bin/echo "NO AVALIBLE PORTS IN CLEAN.LIST FOUND"
/usr/bin/echo "Will try to make housekeeper, and create new vm"
make_housekeeper
else
#<MINIMUN ONE PORT IN CLEAR.LIST FOUND>#
/usr/bin/cat $SRV_TMP_DIR/clear.list |while read line
do
clear_vm_port=$(($line))
/bin/echo "FOUND PORT $clear_vm_port IN CLEAN.LIST. TRY NETSTAT"
"CHECK FOR PORT=$clear_vm_port"
#<NETSTAT LISTEN CHECK FOR PORT FROM CLEAN.LIST>#
if /usr/bin/netstat -lnt |/usr/bin/grep ":$clear_vm_port" > /dev/null
then
/bin/echo "$clear_vm_port IS LISTEN"
#<PORT IS LISTEN. CHECK FOR IS CONNECTED NOW>#
if /usr/bin/netstat -nt |/usr/bin/grep ":$clear_vm_port"
|/usr/bin/grep "ESTABLISHED" > /dev/null
then
#<PORT LISTEN AND ALREADY CONNECTED! MOVE PORT FROM CLEAR.LIST
# TO WASTE.LIST>#
/bin/echo "$clear_vm_port IS ALREADY CONNECTED, MOVE PORT TO WASTE.LIST"
/usr/bin/sed -i "/$clear_vm_port/d" $SRV_TMP_DIR/clear.list
/usr/bin/echo $clear_vm_port >> $SRV_TMP_DIR/waste.list
else
#<PORT LISTEN AND NO ONE CONNECT NOW. MOVE PORT FROM CLEAR.LIST TO
# CONN_WAIT.LIST AND CREATE IPTABLES RULES>##
/usr/bin/echo "OK, $clear_vm_port IS NOT ALREADY CONNECTED"
/usr/bin/sed -i "/$clear_vm_port/d" $SRV_TMP_DIR/clear.list
/usr/bin/echo $clear_vm_port >> $SRV_TMP_DIR/conn_wait.list
$SRV_SCRIPTS_DIR/vm_connect.sh $clear_vm_port
#<TRY TO CLEAN VM IN WASTE.LIST AND CREATE NEW WM>#
/bin/echo "TRY TO CLEAN VM IN WASTE.LIST AND CREATE NEW VM"
make_housekeeper
/usr/bin/echo "# $date STOP EXECUTE VM_MANAGER.SH#"
exit
fi
else
#<PORT IS NOT A LISTEN. MOVE PORT FROM CLEAR.LIST TO WASTE.LIST>#
/bin/echo " "$clear_vm_port" is NOT LISTEN. REMOVE PORT FROM CLEAR.LIST"
/usr/bin/sed -i "/$clear_vm_port/d" $SRV_TMP_DIR/clear.list
/usr/bin/echo $clear_vm_port >> $SRV_TMP_DIR/waste.list
make_housekeeper
fi
done
fi
}
make_housekeeper() {
/usr/bin/echo "=Execute housekeeper="
/usr/bin/cat $SRV_TMP_DIR/waste.list |while read line
do
/usr/bin/echo "$line"
if /usr/bin/netstat -lnt |/usr/bin/grep ":$line" > /dev/null
then
/bin/echo "port_alive, vm is running"
if /usr/bin/netstat -nt |/usr/bin/grep ":$line"
|/usr/bin/grep "ESTABLISHED" > /dev/null
then
/bin/echo "port_in_use can't delete vm!!!"
else
/bin/echo "port_not in use. Deleting vm"
/usr/bin/sed -i "/$line/d" $SRV_TMP_DIR/waste.list
/usr/bin/echo $line >> $SRV_TMP_DIR/recycle.list
$SRV_SCRIPTS_DIR/vm_delete.sh $line
fi
else
/usr/bin/echo "posible vm is already off. Deleting vm"
/usr/bin/echo "MOVE VM IN OFF STATE $line FROM WASTE.LIST TO"
"RECYCLE.LIST AND DELETE VM"
/usr/bin/sed -i "/$line/d" $SRV_TMP_DIR/waste.list
/usr/bin/echo $line >> $SRV_TMP_DIR/recycle.list
$SRV_SCRIPTS_DIR/vm_delete.sh "$line"
fi
done
create_clear_vm
}
create_clear_vm() {
/usr/bin/echo "=Create new VM="
while [ $SRV_POOL_SIZE -gt 0 ]
do
new_vm_port=$(($SRV_START_PORT_POOL+$SRV_POOL_SIZE))
/usr/bin/echo "new_vm_port=$new_vm_port"
if /usr/bin/grep "$new_vm_port" $SRV_TMP_DIR/clear.list > /dev/null
then
/usr/bin/echo "$new_vm_port port is already defined in clear.list"
else
if /usr/bin/grep "$new_vm_port" $SRV_TMP_DIR/waste.list > /dev/null
then
/usr/bin/echo "$new_vm_port port is already defined in waste.list"
else
if /usr/bin/grep "$new_vm_port" $SRV_TMP_DIR/recycle.list > /dev/null
then
/usr/bin/echo "$new_vm_port PORT IS ALREADY DEFINED IN RECYCLE LIST"
else
if /usr/bin/grep "$new_vm_port" $SRV_TMP_DIR/conn_wait.list > /dev/null
then
/usr/bin/echo "$new_vm_port PORT IS ALREADY DEFINED IN CONN_WAIT LIST"
else
/usr/bin/echo "PORT IN NOT DEFINED IN NO ONE LIST WILL CREATE"
"VM ON PORT $new_vm_port"
/usr/bin/echo $new_vm_port >> $SRV_TMP_DIR/recycle.list
$SRV_SCRIPTS_DIR/vm_create.sh $new_vm_port
fi
fi
fi
fi
SRV_POOL_SIZE=$(($SRV_POOL_SIZE-1))
done
/usr/bin/echo "# $date STOP EXECUTE VM_MANAGER.SH #"
}
make_connect_to_vm |/usr/bin/tee -a /var/log/vm_manager.log
/etc/vm_manager.confsrv_scripts_dir=/home/admin/scripts_vdi_new
srv_pool_size=4
srv_start_port_pool=5920
srv_tmp_dir=/tmp/vm_state
base_host=win10_2
input_iface=enp5s0
vdi_spice_port=5906
count_conn_tryes=10
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° vm_manager.conf
srv_scripts_dir β ΠΏΠ°ΠΏΠΊΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² vm_manager.sh, vm_connect.sh, vm_delete.sh, vm_create.sh, vm_clear.sh
srv_pool_size β ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»Π° Vm
srv_start_port_pool β Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠ½Π΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΎΠ² spice ΠΊΠΎΠ½ΡΠΎΠ»Π΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΠΌΠ°ΡΠΈΠ½
srv_tmp_dir β ΠΏΠ°ΠΏΠΊΠ° Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²
base_host β Π±Π°Π·ΠΎΠ²Π°Ρ Vm (Π·ΠΎΠ»ΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ°Π·) Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ Π΄Π΅Π»Π°ΡΡΡΡ ΠΊΠ»ΠΎΠ½Ρ Vm Π² ΠΏΡΠ»
input_iface β ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠΌΠΎΡΡΡΡΠΈΠΉ Π² ΡΡΠΎΡΠΎΠ½Ρ Client Stations
vdi_spice_port β ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΏΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ remote-viewer ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ spice ΠΏΠΎΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Vm
count_conn_tryes β ΡΠ°ΠΉΠΌΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ Vm Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΌ. vm_connect.sh)
Π‘ΠΊΡΠΈΠΏΡ vm_manager.sh ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° vm_manager.conf, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π½ΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π² ΠΏΡΠ»Π΅ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΠΊΠΎΠ»ΡΠΊΠΎ VM ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎ, Π΅ΡΡΡ Π»ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΡΡΡΠ΅ VM. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠΈΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» clear.list Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π½ΠΎΠΌΠ΅ΡΠ° Β«spice_consoleΒ» ΠΏΠΎΡΡΠΎΠ² Β«ΡΠ²Π΅ΠΆΠ΅ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Β» (ΡΠΌ. Π½ΠΈΠΆΠ΅ ΡΠΈΠΊΠ» ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π.Π.) Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π½ΠΈΠΌΠΈ. ΠΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΡΠ° Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ, (ΡΠ΅Π³ΠΎ Π±ΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ) Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π² waste.list ΠΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° ΠΈΠ· ΡΠ°ΠΉΠ»Π° clear.list Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ vm_manager.sh Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΡΠΈΠΏΡ vm_connect.sh ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅ΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½ΠΎΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°.
/home/admin/scripts_vdi_new/vm_connect.sh
#!/bin/sh
date=$(/usr/bin/date)
/usr/bin/echo "#" "$date" "START EXECUTE VM_CONNECT.SH#"
#<SET LOCAL VARIABLES FOR SCRIPT>#
free_port="$1"
input_iface=$(/usr/bin/cat /etc/vm_manager.conf |/usr/bin/grep "input_iface"
|/usr/bin/cut -d "=" -f2)
/usr/bin/echo "input_iface=$input_iface"
vdi_spice_port=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "vdi_spice_port" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "vdi_spice_port=$vdi_spice_port"
count_conn_tryes=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "count_conn_tryes" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "count_conn_tryes=$count_conn_tryes"
#</SET LOCAL VARIABLES FOR SCRIPT>#
#<CREATE IPTABLES RULES AND SEND SIGNAL TO CONNECT>#
/usr/bin/echo "create rule for port" $free_port
/usr/sbin/iptables -I INPUT -i $input_iface -p tcp -m tcp --dport
$free_port -j ACCEPT
/usr/sbin/iptables -I OUTPUT -o $input_iface -p tcp -m tcp --sport
$free_port -j ACCEPT
/usr/sbin/iptables -t nat -I PREROUTING -p tcp -i $input_iface --dport
$vdi_spice_port -j DNAT --to-destination 127.0.0.1:$free_port
/usr/bin/echo "RULE ADDED, CONNECT NOW!"
#</CREATE IPTABLES RULES AND SEND SIGNAL TO CONNECT>#
#<WAIT CONNECT ESTABLISHED AND ACTIVATE CONNECT TIMER>#
while [ $count_conn_tryes -gt 0 ]
do
if /usr/bin/netstat -nt |/usr/bin/grep ":$free_port"
|/usr/bin/grep "ESTABLISHED" > /dev/null
then
/bin/echo "$free_port NOW in use!!!"
/usr/bin/sleep 1s
/usr/sbin/iptables -t nat -D PREROUTING -p tcp -i $input_iface --dport
$vdi_spice_port -j DNAT --to-destination 127.0.0.1:$free_port
/usr/sbin/iptables -D INPUT -i $input_iface -p tcp -m tcp --dport
$free_port -j ACCEPT
/usr/sbin/iptables -D OUTPUT -o $input_iface -p tcp -m tcp --sport
$free_port -j ACCEPT
/usr/bin/sed -i "/$free_port/d" $SRV_TMP_DIR/conn_wait.list
/usr/bin/echo $free_port >> $SRV_TMP_DIR/waste.list
return
else
/usr/bin/echo "$free_port NOT IN USE"
/usr/bin/echo "RULE ADDED, CONNECT NOW!"
/usr/bin/sleep 1s
fi
count_conn_tryes=$((count_conn_tryes-1))
done
#</WAIT CONNECT ESTABLISED AND ACTIVATE CONNECT TIMER>#
#<IF COUNT HAS EXPIRED. REMOVE IPTABLES RULE AND REVERT
# VM TO CLEAR.LIST>#
/usr/bin/echo "REVERT IPTABLES RULE AND REVERT VM TO CLEAN
LIST $free_port"
/usr/sbin/iptables -t nat -D PREROUTING -p tcp -i $input_iface --dport
$vdi_spice_port -j DNAT --to-destination 127.0.0.1:$free_port
/usr/sbin/iptables -D INPUT -i $input_iface -p tcp -m tcp --dport $free_port
-j ACCEPT
/usr/sbin/iptables -D OUTPUT -o $input_iface -p tcp -m tcp --sport
$free_port -j ACCEPT
/usr/bin/sed -i "/$free_port/d" $SRV_TMP_DIR/conn_wait.list
/usr/bin/echo $free_port >> $SRV_TMP_DIR/clear.list
#</COUNT HAS EXPIRED. REMOVE IPTABLES RULE AND REVERT VM
#TO CLEAR.LIST>#
/usr/bin/echo "#" "$date" "END EXECUTE VM_CONNECT.SH#"
# Attention! Must Be! sysctl net.ipv4.conf.all.route_localnet=1
Π‘ΠΊΡΠΈΠΏΡ vm_connect.sh Π²Π½ΠΎΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°ΠΉΠ΅ΡΠ²ΠΎΠ»Π»Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ Β«vdi_spice_portΒ» ΠΏΠΎΡΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° enp5s0 Π½Π° Β«spice console portΒ» VM, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π½Π° lo0 ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΏΡΡΠΊΠ°. ΠΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π² conn_wait.list, VM ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅ΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π ΡΠ΅ΡΡΠΈΡ Client Station Π½Π° Β«signalΒ» ΠΏΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Β«RULE ADDED, CONNECT NOWΒ», ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ Π½Π° Π½Π΅ΠΉ ΡΠΊΡΠΈΠΏΡ remote.sh. ΠΠ°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠΏΡΡΠΎΠΊ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«count_conn_tryesΒ» ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ Π² nc ΡΠ΅ΡΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π°Π²Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠ° Β«RULE ADDED, CONNECT NOWΒ» ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄ΠΎ Β«spice_consoleΒ» ΠΏΠΎΡΡΠ°.
ΠΡΠ»ΠΈ Π·Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, Β«spice_consoleΒ» ΠΏΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² clear.list ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_connect.sh Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_manager.sh, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΠΊΠ» ΠΎΡΠΈΡΡΠΊΠΈ.
ΠΡΠ»ΠΈ ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Client Station ΠΊ Β«spice_consoleΒ» ΠΏΠΎΡΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ lo0, ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°ΠΉΠ΅ΡΠ²ΠΎΠ»Π»Π° ΡΠΎΠ·Π΄Π°ΡΡΠΈΠ΅ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Β«spiceΒ» ΠΏΠΎΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Β«spice_consoleΒ» ΠΏΠΎΡΡΠΎΠΌ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ°ΠΉΠ΅ΡΠ²ΠΎΠ»Π»Π°. Π ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π·ΡΡΠ²Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΡΠ·Ρ Ρ Β«spice_consoleΒ» ΠΏΠΎΡΡΠΎΠΌ, Π½Π΅ ΡΠ΄Π°ΡΡΡΡ. ΠΠΎΡΡ Β«spice_consoleΒ» ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π² waste.list, VM ΡΡΠΈΡΠ°Π΅ΡΡΡ Β«Π³ΡΡΠ·Π½ΠΎΠΉΒ» ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² ΠΏΡΠ» Β«ΡΠΈΡΡΡΡ Β» Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π±Π΅Π· ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡΠΈΡΡΠΊΠΈ ΠΎΠ½Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_connect.sh Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_manager.sh, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΠΊΠ» ΠΎΡΠΈΡΡΠΊΠΈ.
Π¦ΠΈΠΊΠ» ΠΎΡΠΈΡΡΠΊΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ°ΠΉΠ»Π° waste.list Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡΡΡ Π½ΠΎΠΌΠ΅ΡΠ° Β«spice_consoleΒ» ΠΏΠΎΡΡΠΎΠ² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΎΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Β«spice_consoleΒ» ΠΏΠΎΡΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π² recycle.list ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ(ΡΠΌ. Π½ΠΈΠΆΠ΅), ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π» ΡΡΠΎΡ ΠΏΠΎΡΡ. ΠΡΠ»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΡ, ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ Π½Π΅Π΅ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΡ Π½Π΅ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΡΡΡ, ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ VM Π²ΡΠΊΠ»ΡΡΠ΅Π½Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π½ΡΠΆΠ½Π°. ΠΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ Π² recycle.list ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ vm_delete.sh, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½ΠΎΠΌΠ΅Ρ Β«spice_consoleΒ» ΠΏΠΎΡΡΡ VM, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ.
/home/admin/scripts_vdi_new/vm_delete.sh
#!/bin/sh
#<Set local VARIABLES>#
port_to_delete="$1"
date=$(/usr/bin/date)
#</Set local VARIABLES>#
/usr/bin/echo "# $date START EXECUTE VM_DELETE.SH#"
/usr/bin/echo "TRY DELETE VM ON PORT: $vm_port"
#<VM NAME SETUP>#
vm_name_part1=$(/usr/bin/cat /etc/vm_manager.conf |/usr/bin/grep 'base_host'
|/usr/bin/cut -d'=' -f2)
vm_name=$(/usr/bin/echo "$vm_name_part1""-""$port_to_delete")
#</VM NAME SETUP>#
#<SHUTDOWN AND DELETE VM>#
/usr/bin/virsh destroy $vm_name
/usr/bin/virsh undefine $vm_name
/usr/bin/rm -f /var/lib/libvirt/images_write/$vm_name.qcow2
/usr/bin/sed -i "/$port_to_delete/d" $SRV_TMP_DIR/recycle.list
#</SHUTDOWN AND DELETE VM>#
/usr/bin/echo "VM ON PORT $vm_port HAS BEEN DELETE AND REMOVE"
"FROM RECYCLE.LIST. EXIT FROM VM_DELETE.SH"
/usr/bin/echo "# $date STOP EXECUTE VM_DELETE.SH#"
exit
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΡΠΊΡΠΈΠΏΡ vm_delete.sh ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΏΠΎΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π°ΠΏΡΡΠΊΠ°. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΡΠ°Π½ΠΎΠ² VM, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ VM ΠΈΠ· Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠ°, ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ Π΄Π°Π½Π½ΠΎΠΉ VM. ΠΠΎΡΡ Β«spice_consoleΒ» ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· recycle.list. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_delete.sh Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_manager.sh
Π‘ΠΊΡΠΈΠΏΡ vm_manager.sh, ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΠΎΡΠΈΡΡΠΊΠ΅ Π»ΠΈΡΠ½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° waste.list Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠΈΠΊΠ» ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Π² ΠΏΡΠ».
ΠΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠΎΠ² Β«spice_consoleΒ». ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Β«srv_start_port_poolΒ» ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ Π΄Π»Ρ ΠΏΡΠ»Π° Β«spice_consoleΒ» Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Β«srv_pool_sizeΒ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠΎΡΡΠΎΠ². ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΈΡΠΊ Π΅Π³ΠΎ Π² clear.list, waste.list, conn_wait.list, recycle.list. ΠΡΠ»ΠΈ ΠΏΠΎΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π·Π°Π½ΡΡΡΠΌ ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΡ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½, ΠΎΠ½ Π²Π½ΠΎΡΠΈΡΡΡ Π² ΡΠ°ΠΉΠ» recycle.list ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ vm_create.sh ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½ΠΎΠΌΠ΅Ρ Β«spice_consoleΒ» ΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ VM.
/home/admin/scripts_vdi_new/vm_create.sh
#!/bin/sh
/usr/bin/echo "#" "$date" "START RUNNING VM_CREATE.SH#"
new_vm_port=$1
date=$(/usr/bin/date)
a=0
/usr/bin/echo SRV_TMP_DIR=$SRV_TMP_DIR
#<SET LOCAL VARIABLES FOR SCRIPT>#
base_host=$(/usr/bin/cat /etc/vm_manager.conf |/usr/bin/grep "base_host"
|/usr/bin/cut -d "=" -f2)
/usr/bin/echo "base_host=$base_host"
#</SET LOCAL VARIABLES FOR SCRIPT>#
hdd_image_locate() {
/bin/echo "Run STEP 1 - hdd_image_locate"
hdd_base_image=$(/usr/bin/virsh dumpxml $base_host
|/usr/bin/grep "source file" |/usr/bin/grep "qcow2" |/usr/bin/head -n 1
|/usr/bin/cut -d "'" -f2)
if [ -z "$hdd_base_image" ]
then
/bin/echo "base hdd image not found!"
else
/usr/bin/echo "hdd_base_image found is a $hdd_base_image. Run next step 2"
#< CHECK FOR SNAPSHOT ON BASE HDD >#
if [ 0 -eq `/usr/bin/qemu-img info "$hdd_base_image" | /usr/bin/grep -c "Snapshot"` ]
then
/usr/bin/echo "base image haven't snapshot, run NEXT STEP 3"
else
/usr/bin/echo "base hdd image have a snapshot, can't use this image"
exit
fi
#</ CHECK FOR SNAPSHOT ON BASE HDD >#
#< CHECK FOR HDD IMAGE IS LINK CLONE >#
if [ 0 -eq `/usr/bin/qemu-img info "$hdd_base_image" |/usr/bin/grep -c "backing file"
then
/usr/bin/echo "base image is not a linked clone, NEXT STEP 4"
/usr/bin/echo "Base image check complete!"
else
/usr/bin/echo "base hdd image is a linked clone, can't use this image"
exit
fi
fi
#</ CHECK FOR HDD IMAGE IS LINK CLONE >#
cloning
}
cloning() {
# <Step_1 turn the base VM off >#
/usr/bin/virsh shutdown $base_host > /dev/null 2>&1
# </Step_1 turn the base VM off >#
#<Create_vm_config>#
/usr/bin/echo "Free port for Spice VM is $new_vm_port"
#<Setup_name_for_new_VM>#
new_vm_name=$(/bin/echo $base_host"-"$new_vm_port)
#</Setup_name_for_new_VM>#
#<Make_base_config_as_clone_base_VM>#
/usr/bin/virsh dumpxml $base_host > $SRV_TMP_DIR/$new_vm_name.xml
#<Make_base_config_as_clone_base_VM>#
##<Setup_New_VM_Name_in_config>##
/usr/bin/sed -i "s%<name>$base_host</name>%<name>$new_vm_name</name>%g" $SRV_TMP_DIR/$new_vm_name.xml
#</Setup_New_VM_Name_in_config>#
#<UUID Changing>#
old_uuid=$(/usr/bin/cat $SRV_TMP_DIR/$new_vm_name.xml |/usr/bin/grep "<uuid>")
/usr/bin/echo old UUID $old_uuid
new_uuid_part1=$(/usr/bin/echo "$old_uuid" |/usr/bin/cut -d "-" -f 1,2)
new_uuid_part2=$(/usr/bin/echo "$old_uuid" |/usr/bin/cut -d "-" -f 4,5)
new_uuid=$(/bin/echo $new_uuid_part1"-"$new_vm_port"-"$new_uuid_part2)
/usr/bin/echo $new_uuid
/usr/bin/sed -i "s%$old_uuid%$new_uuid%g" $SRV_TMP_DIR/$new_vm_name.xml
#</UUID Changing>#
#<Spice port replace>#
old_spice_port=$(/usr/bin/cat $SRV_TMP_DIR/$new_vm_name.xml
|/usr/bin/grep "graphics type='spice' port=")
/bin/echo old spice port $old_spice_port
new_spice_port=$(/usr/bin/echo "<graphics type='spice' port='$new_vm_port' autoport='no' listen='127.0.0.1'>")
/bin/echo $new_spice_port
/usr/bin/sed -i "s%$old_spice_port%$new_spice_port%g" $SRV_TMP_DIR/$new_vm_name.xml
#</Spice port replace>#
#<MAC_ADDR_GENERATE>#
mac_new=$(/usr/bin/hexdump -n6 -e '/1 ":%02X"' /dev/random|/usr/bin/sed s/^://g)
/usr/bin/echo New Mac is $mac_new
#</MAC_ADDR_GENERATE>#
#<GET OLD MAC AND REPLACE>#
mac_old=$(/usr/bin/cat $SRV_TMP_DIR/$new_vm_name.xml |/usr/bin/grep "mac address=")
/usr/bin/echo old mac is $mac_old
/usr/bin/sed -i "s%$mac_old%$mac_new%g" $SRV_TMP_DIR/$new_vm_name.xml
#<GET OLD MAC AND REPLACE>#
#<new_disk_create>#
/usr/bin/qemu-img create -f qcow2 -b $hdd_base_image /var/lib/libvirt/images_write/$new_vm_name.qcow2
#</new_disk_create>#
#<attach_new_disk_in_confiig>#
/usr/bin/echo hdd base image is $hdd_base_image
/usr/bin/sed -i "s%<source file='$hdd_base_image'/>%<source file='/var/lib/libvirt/images_write/$new_vm_name.qcow2'/>%g" $SRV_TMP_DIR/$new_vm_name.xml
#</attach_new_disk_in_confiig>#
starting_vm
#</Create_vm config>#
}
starting_vm() {
/usr/bin/virsh define $SRV_TMP_DIR/$new_vm_name.xml
/usr/bin/virsh start $new_vm_name
while [ $a -ne 1 ]
do
if /usr/bin/virsh list --all |/usr/bin/grep "$new_vm_name" |/usr/bin/grep "running" > /dev/null 2>&1
then
a=1
/usr/bin/sed -i "/$new_vm_port/d" $SRV_TMP_DIR/recycle.list
/usr/bin/echo $new_vm_port >> $SRV_TMP_DIR/clear.list
/usr/bin/echo "#" "$date" "VM $new_vm_name IS STARTED #"
else
/usr/bin/echo "#VM $new_vm_name is not ready#"
a=0
/usr/bin/sleep 2s
fi
done
/usr/bin/echo "#$date EXIT FROM VM_CREATE.SH#"
exit
}
hdd_image_locate
ΠΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ
Π‘ΠΊΡΠΈΠΏΡ vm_create.sh ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«base_hostΒ» ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡΡΡ ΠΊΠ»ΠΎΠ½. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΠ³ΡΡΠ·ΠΊΡ xml ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ VM ΠΈΠ· Π±Π°Π·Ρ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ qcow ΠΎΠ±ΡΠ°Π·Π° Π΄ΠΈΡΠΊΠ° VM ΠΈ ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ ΠΈΡ
Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ xml ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ VM ΠΈ Β«linked cloneΒ» ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ VM. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ xml ΠΊΠΎΠ½ΡΠΈΠ³ Π½ΠΎΠ²ΠΎΠΉ VM Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² Π±Π°Π·Ρ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠ° ΠΈ VM Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΠΎΡΡ Β«spice_consoleΒ» ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ ΠΈΠ· recycle.list Π² clear.list. ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_create.sh ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ vm_manager.sh.
ΠΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½Π°ΡΠ°Π»Π°.
ΠΠ»Ρ Π°Π²Π°ΡΠΈΠΉΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ vm_clear.sh ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ±Π΅Π³Π°Π΅Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌ VM ΠΈΠ· ΠΏΡΠ»Π° ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΡ Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ list-ΠΎΠ². ΠΡΠ·ΠΎΠ² Π΅Π³ΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ (Π½Π΅Π΄ΠΎ)VDI Ρ ΡΠΈΡΡΠΎΠ³ΠΎ Π»ΠΈΡΡΠ°.
/home/admin/scripts_vdi_new/vm_clear.sh
#!/usr/bin/sh
#set VARIABLES#
SRV_SCRIPTS_DIR=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_scripts_dir" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_SCRIPTS_DIR=$SRV_SCRIPTS_DIR"
export SRV_SCRIPTS_DIR=$SRV_SCRIPTS_DIR
SRV_TMP_DIR=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_tmp_dir" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_TMP_DIR=$SRV_TMP_DIR"
export SRV_TMP_DIR=$SRV_TMP_DIR
SRV_POOL_SIZE=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_pool_size" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo "SRV_POOL_SIZE=$SRV_POOL_SIZE"
SRV_START_PORT_POOL=$(/usr/bin/cat /etc/vm_manager.conf
|/usr/bin/grep "srv_start_port_pool" |/usr/bin/cut -d "=" -f2)
/usr/bin/echo SRV_START_PORT_POOL=$SRV_START_PORT_POOL
#Set VARIABLES#
/usr/bin/echo "= Cleanup ALL VM="
/usr/bin/mkdir $SRV_TMP_DIR
/usr/sbin/service iptables restart
/usr/bin/cat /dev/null > $SRV_TMP_DIR/clear.list
/usr/bin/cat /dev/null > $SRV_TMP_DIR/waste.list
/usr/bin/cat /dev/null > $SRV_TMP_DIR/recycle.list
/usr/bin/cat /dev/null > $SRV_TMP_DIR/conn_wait.list
port_to_delete=$(($SRV_START_PORT_POOL+$SRV_POOL_SIZE))
while [ "$port_to_delete" -gt "$SRV_START_PORT_POOL" ]
do
$SRV_SCRIPTS_DIR/vm_delete.sh $port_to_delete
port_to_delete=$(($port_to_delete-1))
done
/usr/bin/echo "= EXIT FROM VM_CLEAR.SH="
ΠΠ° ΡΡΠΎΠΌ Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΡΠ°ΡΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°. ΠΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½Π΅Π΄ΠΎVDI Π² Π΄Π΅Π»Π΅. ΠΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ, Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ livecd Fedora ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΅Π΅ Π² ΠΊΠΈΠΎΡΠΊ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com