Бид PXE ашиглан сүлжээгээр хэрэглэгчийн компьютерийг ачаалах үед Системийн төвийн тохиргооны менежерийн (МТ-ийн дэд бүтцийг удирдах бүтээгдэхүүн) чадавхийг өргөжүүлэх талаар бодож байна. Бид Системийн төвийн функц бүхий PXELinux-д суурилсан ачаалах цэсийг үүсгэж, вирусын эсрэг сканнердах, оношлох, сэргээх зургийг нэмдэг. Өгүүллийн төгсгөлд бид PXE-ээр ачаалах үед Windows Deployment Services (WDS)-тай хамтран System Center 2012 Configuration Manager-ийн онцлогуудын талаар ярих болно.
Бид System Center 2012 Configuration Manager SP1, домэйн хянагч болон хэд хэдэн туршилтын машин суулгасан туршилтын орчинд бүх үйлдлийг гүйцэтгэдэг. SCCM-ийг PXE ашиглан сүлжээгээр аль хэдийн байрлуулж байна гэж таамаглаж байна.
нэвтрэх
Туршилтын орчин нь хэд хэдэн виртуал машинаас бүрдэнэ. Бүх машинд Microsoft Windows Server 2008 R2 (x64) зочин үйлдлийн систем, E1000 сүлжээний адаптер, SCSI Controller: LSI Logic SAS суулгасан.
Нэр (Үүрэг)
IP хаяг / DNS нэр
Функциональ
SCCM (Системийн төвийн тохиргооны менежер)
192.168.57.102
sccm2012.test.local
Системийн төвийн тохиргооны менежер 2012 SP1 суулгасан
DC (AD, DHCP, DNS)
192.168.57.10
dc1.test.local
Домэйн хянагч, DHCP сервер, DNS серверийн үүрэг
TEST (туршилтын машин)
192.168.57.103
test.test.local
Туршилтын хувьд
G.W. (Гарц)
192.168.57.1
Сүлжээ хоорондын чиглүүлэлт. Гарцын үүрэг
1. PXELinux-г SCCM-д нэмнэ
Системийн төвийн тохиргооны менежер суулгасан машин дээр бид үйлдэл хийдэг
- WDS файлуудыг татаж авах директорийг тодорхойлъё, үүний тулд бид бүртгэлээс параметрийн утгыг хайж байна.
RootFolder
салбартHKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesWDSServerProvidersWDSTFTP
Өгөгдмөл утгаC:RemoteInstall
SCCM байршуулах цэгээс татаж авах файлууд нь лавлах хэсэгт байрладагsmsbootx86
иsmsbootx64
архитектураас хамаарна.
Эхлээд анхдагчаар 32 битийн архитектурт зориулсан лавлахыг тохируулна ууc:Remoteinstallsmsbootx86
- Хамгийн сүүлийн үеийн архивыг татаж аваарай
syslinux . syslinux-5.01.zip-аас хуулахc:Remoteinstallsmsbootx86
дараах файлууд:
memdisk, chain.c32, ldlinux.c32, libcom32.c32, libutil.c32, pxechn.c32, vesamenu.c32, pxelinux.0
Ийм алдаа гаргахгүйн тулд нэмэлт файлууд хэрэгтэй.
- В
c:Remoteinstallsmsbootx86
нэрийг өөрчлөхpxelinux.0
вpxelinux.com
Хавтсандc:remoteinstallsmsbootx86
хуулбар хийхabortpxe.com
болон нэрийг нь өөрчлөхabortpxe.0
Үгүй бол өргөтгөл болгон нэрийг нь өөрчил.0
, дараа нь жишээ нь зааварKernel abortpxe.com
дараах алдаагаар бүтэлгүйтэх болно: Цөмийг ачаалж чадсангүй: Файлын дугаар буруу
PXELINUX-ийн хувьд татаж авах файлын өргөтгөлийг хавтангийн дагуу тохируулах ёстойnone or other Linux kernel image .0 PXE bootstrap program (NBP) [PXELINUX only] .bin "CD boot sector" [ISOLINUX only] .bs Boot sector [SYSLINUX only] .bss Boot sector, DOS superblock will be patched in [SYSLINUX only] .c32 COM32 image (32-bit COMBOOT) .cbt COMBOOT image (not runnable from DOS) .com COMBOOT image (runnable from DOS) .img Disk image [ISOLINUX only]
Эх сурвалж:
http://www.syslinux.org/wiki/index.php/SYSLINUX#KERNEL_file Цөмийн файлын хэсэг - Цэсээр дамжуулан SCCM-г ачаалах үед F12 товчлуурыг хэд хэдэн удаа дарахгүйн тулд pxeboot.com-ын нэрийг pxeboot.com.f12 болгож, pxeboot.n12-г pxeboot.com руу хуулна уу.
Хэрэв энэ нь хийгдээгүй бол сонгохдоо бид ийм мессежийг бүртгэх болно
Анхаар: x64 фолдерт эдгээр файлын нэрийг өөрчлөхөө бүү мартаарай. ачаалах үедx86wdsnbp.com
x86 хавтсаас ачаалагч процессорын архитектурыг тодорхойлж, дараагийн файлыг холбогдох архитектуртай хавтаснаас ачаална. Тиймээс x64-ийн хувьд дараагийн файл байхгүй болноx86pxeboot.com
болонx64pxeboot.com
- Татаж авах / үүсгэх
суурь.png , нягтрал 640x480, ижил хавтас руу хуулна. Хавтас үүсгэхISO
Бид ISO дүрсийг хаана байрлуулах болно. Хавтас үүсгэхpxelinux.cfg
тохиргооны хувьд. - Pxelinux.cfg фолдерт юникод бус кодчилол бүхий өгөгдмөл файл үүсгэнэ үү.
анхдагч (харуулахын тулд товшино уу)# используем графическое меню DEFAULT vesamenu.c32 PROMPT 0 timeout 80 TOTALTIMEOUT 9000 MENU TITLE PXE Boot Menu (x86) MENU INCLUDE pxelinux.cfg/graphics.conf MENU AUTOBOOT Starting Local System in 8 seconds # Boot local HDD (default) LABEL bootlocal menu label Boot Local menu default localboot 0x80 # if it doesn't work #kernel chain.c32 #append hd0 # Вход в меню по паролю Qwerty, алгоритм MD5 label av menu label Antivirus and tools menu PASSWD $1$15opgKTx$dP/IaLNiCbfECiC2KPkDC0 kernel vesamenu.c32 append pxelinux.cfgav.conf label sccm menu label Start to SCCM COM32 pxechn.c32 APPEND sccm2012.test.local::smsbootx86wdsnbp.com -W label pxe64 menu label Start to x64 pxelinux COM32 pxechn.c32 APPEND sccm2012.test.local::smsbootx64pxelinux.com LABEL Abort MENU LABEL Exit KERNEL abortpxe.0
Хавтсанд
pxelinux.cfg
файл үүсгэхgraphics.conf
агуулгатай
graphics.conf (харуулахын тулд товшино уу)MENU MARGIN 10 MENU ROWS 16 MENU TABMSGROW 21 MENU TIMEOUTROW 26 MENU COLOR BORDER 30;44 #00000000 #00000000 none MENU COLOR SCROLLBAR 30;44 #00000000 #00000000 none MENU COLOR TITLE 0 #ffffffff #00000000 none MENU COLOR SEL 30;47 #40000000 #20ffffff MENU BACKGROUND background.png NOESCAPE 0 ALLOWOPTIONS 0
Хавтсанд
pxelinux.cfg
файл үүсгэхav.conf
агуулгатай
av.conf (харуулахын тулд товшино уу)DEFAULT vesamenu.c32 PROMPT 0 MENU TITLE Antivirus and tools MENU INCLUDE pxelinux.cfg/graphics.conf label main menu menu label return to main menu kernel vesamenu.c32 append pxelinux.cfg/default label drweb menu label DrWeb kernel memdisk append iso raw initrd=isodrweb.iso label eset menu label Eset kernel memdisk append iso raw initrd=isoeset_sysrescue.iso label kav menu label KAV Rescue CD KERNEL kav/rescue APPEND initrd=kav/rescue.igz root=live rootfstype=auto vga=791 init=/init kav_lang=ru udev liveimg doscsi nomodeset quiet splash #Загружаем ISO по полному пути, можно загружать с другого TFTP label winpe menu label WinPE from another TFTP kernel sccm2012.test.local::smsbootx86memdisk append iso raw initrd=sccm2012.test.local::smsbootx86isoWinPE_RaSla.iso label clonezilla menu label Clonezilla kernel memdisk append iso raw initrd=isoclonezilla.iso
- Үүний үр дүнд c:remoteinstallsmsbootx86 сан нь бүтцийг агуулдаг
c:remoteinstallsmsbootx86
pxelinux.cfgхэлхээ.c32
ldlinux.c32
libcom32.c32
libutil.c32
pxechn.c32
vesamenu.c32
pxelinux.com
суурь.png
pxelinux.cfg
pxelinux.cfg
pxelinux.cfg
ISO
abortpxe.0
wdsnbp.com
bootmgfw.efi
wdsmgfw.efi
bootmgr.exe
pxeboot.n12
pxeboot.com
abortpxe.comАнхдагч байна
av.conf
graphics.conf
*.iso - X64 архитектурын хувьд бид хавтас доторх ижил бүтцийг хуулж, үүсгэдэг
c:remoteinstallsmsbootx64
Нэмэлт
Командыг ашиглах үедmenu PASSWD
нууц үгийг байгаагаар нь тохируулж болно, эсвэл параметрийн эхэнд харгалзах гарын үсгийг нэмж хэш алгоритмыг ашиглана.Алгоритм
Гарын үсэгMD5
1 долларSHA-1
4 долларSHA-2-256
5 долларSHA-2-512
6 долларТиймээс нууц үгийн хувьд
Qwerty
ба MD5 алгоритмmenu PASSWD $1$15opgKTx$dP/IaLNiCbfECiC2KPkDC0
Жишээлбэл, та онлайн хэш үүсгэгчээр дамжуулан нууц үг үүсгэж болно
www.insidepro.com/hashes.php?lang=rus , шугамMD5(Unix)
2. PXELinux ачаалах тохиргоог хийнэ үү
Одоо бид pxelinux.com-г хэрхэн ачаалж, цэсийг авахыг зааж өгөх болно.
WDS функцээр дамжуулан pxelinux.com ачаалагчийг зааж өгөх нь SCCM дээр ажиллахгүй. Командуудыг харах
wdsutil /set-server /bootprogram:bootx86pxeboot.com /architecture:x86
боловсруулагдаагүй байна. Гаралтын WDS серверийн тохиргооны командыг ажиллуулснаар ачаалах дүрсийг тохируулаагүй эсэхийг шалгаж болно
wdsutil /get-server /show:images
Тиймээс, SCCM 2012 дээр та SMSPXE үйлчилгээ үзүүлэгч рүү PXE татаж авах файлаа зааж өгөх боломжгүй. Тиймээс бид DHCP серверийн идэвхтэй хэсгийг тохируулах болно.
DHCP идэвхтэй хэсгийн параметрүүдэд хавтангийн дагуу параметрүүдийг тохируулна
DHCP сонголт
Параметрийн нэр
үнэ цэнэ
066
Ачаалах серверийн хостын нэр
sccm2012.test.local
067
Ачаалах файлын нэр
smsbootx86pxelinux.com
006
DNS серверүүд
192.168.57.10
015
DNS домэйн нэр
тест.орон нутгийн
Сонголт 066-д бид sccm серверийн FQDN нэрийг, 067-д бид TFTP root-оос эхлэн x86 ачаалагч pxelinux.com руу очих замыг, 006-д бид DNS серверийн IP хаягийг зааж өгнө. Хэрэв 066-р сонголтод богино серверийн нэрийг ашигласан бол 015-р сонголтод бид домэйны DNS дагаварыг зааж өгнө.
Нэмэлт
DHCP тохиргоог илүү дэлгэрэнгүй тайлбарласанмвголубев энд . Гэхдээ дээрDC
сонголт 150, TFTP серверийн IP хаяг нь DHCP хамрах хүрээний тохиргоонд байхгүй байсан бөгөөд netsh-ээр дамжуулан 150-р сонголтыг зааж өгсөн ч ажиллахгүй байна.
3. Ажлыг шалгах
Үндсэн тохиргоо хийгдсэн бөгөөд та шалгаж эхлэх боломжтой. Бид BIOS дахь туршилтын компьютер дээр үүнийг сүлжээгээр ачаалж, цэс рүү ачаалсныг зааж өгдөг
Нэг зүйлийг сонго «Start to SCCM»
Хэрэв компьютерт даалгаврын дарааллыг өгсөн бол хэсэг хугацааны дараа "Даалгаврын дарааллын шидтэн" цонх гарч ирэх бөгөөд танаас нууц үг оруулахыг хүсэх болно.
Машинаа дахин ачаалж, цэс рүү буцаж очоод цэснээс сонгоно уу «Antivirus and tools»
болон нууц үгээ оруулна уу Qwerty
Бид дурын зүйлийг сонгож, ISO дүрсийг санах ойд ачаалж байгааг ажигладаг
Баталгаажуулалт дууссан
4. Нэмэлт тохиргоо болон функцууд
Чиглүүлэлтийн тохиргоо
Хэрэв үйлчлүүлэгч, DHCP сервер болон сүлжээ ачаалагчийг агуулсан сервер нь нэг сүлжээний сегментэд байгаа бол нэмэлт тохиргоо хийх шаардлагагүй. Гэсэн хэдий ч, хэрэв үйлчлүүлэгч болон DHCP сервер эсвэл WDS/SCCM сервер нь өөр өөр сүлжээний сегмент дээр байрладаг бол хэрэглэгчээс идэвхтэй DHCP сервер болон идэвхтэй WDS/SCCM сервер рүү өргөн нэвтрүүлгийн пакетуудыг дамжуулахаар чиглүүлэгчдээ тохируулахыг зөвлөж байна. Англи хэл дээрх уран зохиолд энэ процессыг "IP Helper table updates" гэж нэрлэдэг. Энэ тохиолдолд үйлчлүүлэгч IP хаягийг авсны дараа сүлжээний дуудагчийг татаж авахын тулд DHCP пакетаар дамжуулан сүлжээний дуудагч агуулсан сервертэй шууд холбогддог.
Cisco чиглүүлэгчийн хувьд тушаалыг ашиглана уу
ip helper-address {ip address}
хаана {ip address}
DHCP сервер эсвэл WDS/SCCM серверийн хаяг. Энэ тушаал нь мөн дараах UDP өргөн нэвтрүүлгийн пакетуудыг илгээдэг
Боомт
Протокол
69
TFTP
53
Домэйн нэрийн систем (DNS)
37
Цагийн үйлчилгээ
137
NetBIOS нэрийн сервер
138
NetBIOS Datagram сервер
67
Bootstrap протокол (BOOTP)
49
TACACS
Үйлчлүүлэгч нь DHCP серверээс сүлжээний дуудагчийг шууд авах хоёр дахь арга бол DHCP сервер дээр 60,66,67 гэсэн сонголтыг зааж өгөх явдал юм. DHCP сонголт 60-ыг утгаар нь ашиглаж байна «PXEClient»
Зөвхөн DHCP сервер нь Windows Deployment Services-тэй нэг сервер дээр байрладаг бол бүх DHCP хамрах хүрээг хамарна. Энэ тохиолдолд үйлчлүүлэгч DHCP ашиглахын оронд UDP 4011 порт дээрх TFTP ашиглан Windows Deployment Services сервертэй шууд холбогддог. Ачаалал тэнцвэржүүлэх, DHCP тохируулгуудыг буруу ашиглах, үйлчлүүлэгчийн тал дээр Windows Deployment Services-ийн хариултын сонголттой холбоотой асуудлууд зэргээс шалтгаалан Microsoft энэ аргыг хэрэглэхийг зөвлөдөггүй. Мөн зөвхөн DHCP 66 ба 67 гэсэн хоёр сонголтыг ашиглах нь сүлжээний ачаалах сервер дээр тохируулсан параметрүүдийг тойрч гарах боломжийг олгодог.
Та мөн Windows Deployment Services сервер дээр дараах UDP портуудыг нээх хэрэгтэй
порт 67 (DHCP)
порт 69 (TFTP)
порт 4011 (PXE)
сервер дээр DHCP зөвшөөрөл шаардлагатай бол порт 68.
Дэлгэрэнгүй, тохиргооны үйл явц болон өөр өөр WDS серверүүдийн хооронд дахин чиглүүлэх нюансуудыг эх сурвалжид доор тайлбарласан болно.
Сүлжээний ачаалах програмын удирдлагаhttp://technet.microsoft.com/ru-ru/library/cc732351(v=ws.10).aspx
Серверийн удирдлагаhttp://technet.microsoft.com/ru-ru/library/cc770637(v=ws.10).aspx
Майкрософт бүтээгдэхүүний дэмжлэг үзүүлэх үйлчилгээ (PSS) сүлжээг ачаалахад зориулсан хил хязгаарыг дэмждэг Microsoft Windows-ын урьдчилан суулгах орчин (Windows PE) 2.0http://support.microsoft.com/kb/926172/en-us
Cisco дээр UDP цацалтыг (BOOTP / DHCP) хэрхэн дамжуулах вэhttp://www.cisco-faq.com/163/forward_udp_broadcas.html
Cisco чиглүүлэгчид DHCP-ийн ажиллагаа ба тохиргооны онцлогууд (2-р хэсэг)http://habrahabr.ru/post/89997/
Орон нутгийн татаж авах нэмэлт сонголтууд
Туршилтын орчинд тушаал
localboot 0
ийм алдаа гаргадаг
Энэ нь syslinux баримт бичгээс харахад хэзээ
localboot 0
локал дискнээс ачаалах болно. Анхдагч (анхдагч) уян дискнээс 0x00 тодорхой утгыг зааж өгөхдөө, үндсэн (анхдагч) хатуу дискнээс 0x80-ийг зааж өгөхдөө. тушаалыг өөрчилснөөр
localboot 0x80
локал үйлдлийн систем ачаалагдсан байна.
Хэрэв тодорхой диск, хуваалт эсвэл командаас ачаалах шаардлагатай бол localboot
ажиллахгүй бол та модулийн чадварыг ашиглаж болно chain.c32
. Үүнийг ачаалсны дараа append командыг ашиглан тодорхой диск эсвэл дискний хуваалтыг зааж өгнө, дискний дугаарлалт 0-ээс, хуваалтын дугаарлалт 1-ээс эхэлнэ. хэрэв 0 хуваалтыг зааж өгсөн бол MBR ачаалагдсан байна. Дискийг зааж өгөхдөө хуваалтыг орхиж болно.
KERNEL chain.c32
APPEND hd0 0
буюу
KERNEL chain.c32
APPEND hd0
Эх сурвалж:
PXE-ээр файл татаж авах захиалга, тайлбар
Өгүүллийн эхэнд дурьдсанчлан WDS файлуудыг татаж авахын тулд байгаа лавлах нь параметрийн утгад агуулагддаг. RootFolder
бүртгэлийн салбарт HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesWDSServerProvidersWDSTFTP
Өгөгдмөл утга C:RemoteInstall
Энд параметрт байна ReadFilter
TFTP сервер татаж авах файлуудыг эхээс нь хайж буй сангууд нь тодорхойлогддог. SCCM 2012 SP1 суулгасан бол энэ тохиргоо байна
boot*
tmp*
SMSBoot*
SMSTemp*
SMSImages*
Хэрэв та параметрийн утгыг өөрчилбөл *
дараа нь директорт байрлах бүх файлууд боловсруулагдах болно RemoteInstall
.
SCCM 2012 байршуулах цэгийн үүргийг бүртгэлийн утгад заасан ProvidersOrder
салбарт байрладаг HKLMSystemCurrentControlSetWDSServerProvidersWDSPXE
Үзүүлэлт ProvidersOrder
утгыг авч болно
SMSPXE
SCCM дахь PXE үйлчилгээний цэг
SMS.PXE.Шүүлтүүр
MDT-ийн PXE скрипт зохицуулагч (Microsoft Deployment Toolkit)
BINLSVC
Стандарт WDS болон RIS хөдөлгүүр
SCCM суулгасан бол параметр ProvidersOrder
асуудал SMSPXE
. Параметрийг өөрчилснөөр та үйлчилгээ үзүүлэгчдийг ачаалах дарааллыг өөрчилж болно.
Каталог дээр RemoteInstall
дараах стандарт файлууд байрладаг
wdsnbp.com
Дараах ажлуудыг гүйцэтгэдэг Windows Deployment Services-д зориулагдсан сүлжээний ачаалах програм.
1. Архитектур илрүүлэх.
2. Хүлээж буй компьютеруудын засвар үйлчилгээ. Автоматаар нэмэх бодлогыг идэвхжүүлсэн үед энэ сүлжээний ачаалах програм нь сүлжээний ачааллыг түр зогсоохын тулд хүлээгдэж буй компьютерууд руу илгээгдэж, серверт клиент компьютерийн архитектурын талаар мэдээлнэ.
3. Сүлжээний ачаалах холбоосыг ашиглах (үүнд DHCP 66 ба 67-р сонголтуудыг ашиглах)
PXEboot.com
(Өгөгдмөл) Сүлжээний ачааллыг үргэлжлүүлэхийн тулд хэрэглэгчээс F12 дарахыг шаарддаг
PXEboot.n12
Хэрэглэгчээс F12 товчлуурыг дарахыг шаарддаггүй бөгөөд сүлжээг шууд ачаалж эхэлнэ
AbortPXE.com
BIOS-ийн дараагийн ачаалах зүйлийг ашиглан компьютерийг хүлээхгүйгээр ачаална
bootmgr.exe
Windows ачаалах менежер (Bootmgr.exe эсвэл Bootmgr.efi). Windows ачаалагчийг тодорхой дискний хуваалтаас эсвэл сүлжээний холболтоор програм хангамж ашиглан ачаална (сүлжээг ачаалах тохиолдолд)
Bootmgfw.efi
PXEboot.com болон PXEboot.n12-ын EFI хувилбар (EFI-д PXE-г ачаалах эсвэл ачаалахгүй байх сонголт нь сүлжээний ачаалах програм биш харин EFI бүрхүүлд байдаг). Bootmgfw.efi нь PXEboot.com, PXEboot.n12, abortpxe.com болон bootmgr.exe-ийн чадавхийг хослуулсан. Энэ нь одоогоор зөвхөн x64 болон Itanium архитектурт зориулагдсан.
Өгөгдмөл.bcd
Boot Configuration Data Store (BCD), REGF форматыг REGEDIT-д ачаалах боломжтой, Boot.ini текст файлыг орлодог.
Ачаалал нь дээр дурдсанчлан дараах дарааллаар явагдана
1. wdsnbp.com сайтыг татаж авна уу.
2. Дараа нь тохирох архитектурын pxeboot.com ачаалагдсан байна
3. PXEBoot.com нь bootmgr.exe болон BCD ачаалах тохиргооны мэдээллийн санг татаж авдаг.
4. Bootmgr.exe нь BCD ачаалах тохиргооны өгөгдлийн үйлдлийн системийн оруулгуудыг уншиж, Boot.sdi файл болон Windows PE дүрсийг (boot.wim) ачаална.
5. Bootmgr.exe нь Windows PE зураг дээрх Winload.exe руу хандсанаар Windows PE-г ачаалж эхэлдэг.
Хэрэв байгаа бол RemoteInstall
хавтаснууд байдаг
Boot
Images
Mgmt
Templates
Tmp
WdsClientUnattend
Тэдгээр нь байгаа нь SCCM 2012 (SCCM 2007-д PXE үйлчилгээний цэгүүд) дээр түгээлтийн цэгийн үүргийг нэмэхээс өмнө суулгасан Windows Deployment Services (WDS) дээр эдгээр фолдеруудыг автоматаар үүсгэсэн зарим тохиргооны үйлдэл байсан гэсэн үг.
Түгээх цэгийн үүргийн хувьд (SCCM 2007 дахь PXE үйлчилгээний цэг) зөвхөн дараах хавтаснууд хангалттай.
SMSBoot
SMSIMAGES
SMSTemp
Stores
Энэ нь SCCM-ийг буруу суулгасан гэсэн үг биш, гэхдээ энэ нь алдааны боломжит эх үүсвэрийг зааж өгч магадгүй юм.
WDS, SCCM, PXE багцын янз бүрийн асуудлыг шийдэх асуудлыг нийтлэлд нарийвчлан авч үзсэн болно.
Үр дүн
Системийн төвийн тохиргооны менежерээр удирддаг мэдээллийн технологийн дэд бүтэц нь талбарын системийн администраторуудад зориулсан шинэ хэрэгсэл нэмсэн.
ISO дүрсний холбоосуудын жагсаалт (харуулахын тулд товшино уу)
Таны анхаарлын төвд баярлалаа!
Эх сурвалж: www.habr.com