Eng oddiy Internet-radio ustuni "Kodi" yoki "Raspberry" g'ishtining najoti

Eng oddiy Internet-radio ustuni "Kodi" yoki "Raspberry" g'ishtining najoti

Asosiy shartlar:

  1. Eski foydalanilmagan birinchi avlod Raspberry Pi taxtasi mavjud;
  2. Doska shkafda o'lik vazn sifatida yotadi va ishlatilmaydi - "G'isht" taxtasi;

Men nimani olishni xohlayman:

  1. Vaqtning ma'lum bir nuqtasida (masalan, kayfiyat bo'yicha)
    doska "G'isht" bo'lishni to'xtatadi va unga sehrli xotira kartasi o'rnatiladi;
  2. Ethernet kabeli va oddiy maishiy karnay yoki minigarnituraning vilkasi taxtaga ulangan;
  3. Quvvat berilgandan so'ng, sobiq "G'isht" - qo'shiq aytadi

Asosiy fikr; asosiy g'oya:

  1. Har qanday sozlash uchun minimal imo-ishoralar soni, eng ideal holatda, biz faqat "Ethernet" kabelini, quvvatni va dinamiklarni ulaymiz va so'zdan boshqa hech narsa qilmaymiz. "umuman";
  2. Sobiq "G'isht" qutidan tashqarida, masalan, sichqonchaning g'ildiragini yoki ma'lum bir GPIO pinini bosish orqali aylana bo'ylab almashtirilishi mumkin bo'lgan 20 ta Internet radiostantsiyasini qo'llab-quvvatlaydi (ikkita simni ulang va ularni qisqartiring (bolalikdagi orzuim) );
  3. Boshqarish radiokanal orqali amalga oshiriladi va bu radiokanal oddiy radio sichqonchasi bo'lishi mumkin;
  4. Tayyor tizimni oling va tarqatishni "Yokto loyihasi" ga yig'ing.
    bular. odatdagidek, biz sizga hech narsa qilmaymiz, chunki hamma narsa allaqachon qilingan.
    (boshqa tarafga tashqi kuzatuvchini qo'yish kifoya "TV");

Tavsif

Eng oddiy Internet-radio ustuni "KODI"
Yig'ma eski Raspberry Pi 1 platalari uchun mo'ljallangan
(shkafning biron bir joyida chang to'plash, lekin ular ko'proq ish qilishga tayyor)

Odatiy bo'lib, 3 ta Internet radiostantsiyalarining m8u12 ro'yxati ishlatiladi.

Taxminlarga ko'ra, plata HDMI chiqishisiz ishlaydi va uni o'chirish uchun quvvat adapterini rozetkadan ajratib qo'yish kifoya. Va ultra zamonaviy simsiz boshqaruv paneli sifatida siz o'zingizning super radio sichqonchangizdan foydalanishingiz mumkin (yoki oddiy kulrangni quyruq bilan ulashingiz mumkin).

Yoqilganda, standart tarmoq interfeysi DHCP protokoli orqali sozlanadi va ro'yxatdagi oxirgi yodlangan radiostantsiya o'ynaladi, ijro etish ovozi oddiy sichqoncha bilan boshqariladi:
(nihoyat, sichqonchangizni “boshqaruv rahbari” etib tayinlang va tabriklang, u bunga loyiq)

  колесико вперед  - увеличение громкости звука
  колесико назад   - уменьшение громкости звука
  длительное нажатие (3сек и более) на правую кнопку мыши
                   - выбор следующий радиостанции
  длительное нажатие (3сек и более) на левую кнопку мыши
                   - выбор предыдущей радиостанции

Internet radiostantsiyalaringiz ro'yxatini qo'shish uchun
har doim televizoringizdan HDMI kabelini ulashingiz mumkin
va Kodi 17.6 standart grafik interfeysidan foydalaning
(taxtani o'chiring, HDMI-ni ulang va quvvat adapterini yoqing)

Kodi asosiy menyusi => "Qo'shimchalar" => "Mening qo'shimchalarim"
          => “PVR Clients” => “PVR IPTV Simple Client”

Dastlabki amalga oshirish

(mumkin)
Dastlab, men "Internet radio ustuni" ni yaratishga qaror qilganimda, men quyidagilarni rejalashtirdim:

  • Yocto loyihasida minimalist konsol taqsimoti;
  • Ovoz oqimi GStreamer orqali ijro etiladi;
  • Tarmoq interfeysi DHCP orqali sozlangan;

Va bu yechim bir qator afzalliklarga ega:

  1. Juda tez (elektr ta'minotidan ish rejimiga o'tish uchun 30-40 soniya kerak bo'ladi);
  2. Etarlicha ishonchli (dasturlar kamroq, muvaffaqiyatsizlik nuqtalari kamroq);
  3. Konsol tarqatish faqat o'qish rejimiga o'tishni osonlashtiradi
    bular. dasturlar ildiz fayl tizimiga hech narsa yozmaydi
    (va SDHC muhitidagi fayl tizimi, mening fikrimcha, muvaffaqiyatsizlikka birinchi nomzod);

Eslatma:

    В Yocto перевести корневую файловую систему (rootfs) 
    в режим только чтение можно сделать достаточно просто, 
    изменив один параметр во время сборки 

    Из коробки Yocto предлагает два варианта:
    1) Работа файловой системы в обычном режиме чтение/запись 
    (так работают все дистрибутивы общего назначения, например Ubuntu)
    2) Работа файловой системы в режиме только чтение
    (так работают специализированные дистрибутивы, например в маршрутизаторах)

    В режиме только чтение все каталоги, в которые обычно 
    записываются данные приложений и сервисов во время работы монтируются 
    в оперативную память (например каталог /var/log и т.п.)
    Данные актуальны только для текущего сеанса работы и после сброса питания
    данные теряются.

    Если в Yocto Project вы укажете при сборке использовать "read only", 
    то после сборки ваш дистрибутив будет настроен только на чтение, 
    но вы всегда можете добавить возможность динамического перевода 
    из "read only"  в "read/write", но это уже совсем другая история ...
    

Va bitta asosiy kamchilik:

"Buni qilish kerak", ya'ni. Men N oqshomni o'tkazishim kerak
(odatda ishdan keyin va bu eng samarasiz vaqt, bu vaqtda miya endi o'ylamaydi, odatda uxlaydi)

Va shunga qaramay, men Habré-da multimedia markazi haqida oldingi maqolamni yozgan edim Kodi va Yocto loyiha
va xuddi shu yo'nalishda davom etish imkoniyati mening tadqiqot ishtiyoqimdan ustun keldi. Bu haqda keyingi bobda batafsil.

Kodi-ni Internet-radio dinamikiga aylantirish

Menga kerak bo'lgan funksionallikni qo'shish uchun men avvalgisida tasvirlangan tarqatishni yaratish retseptiga yana bir usul qo'shaman maqola berserk-image.bb fayliga qarang

GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"

# конфигурация запуска последнего выбранного ТВ канала (1-фон 2-передний план)
F1_LINE = "<startlast default="true">0</startlast>"
R1_LINE = "<startlast>1</startlast>"
# конфигурация вывода звука, всегда подключен только аналоговый аудио выход
F2_LINE = "<audiodevice default="true">PI:HDMI</audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue</audiodevice>"
# так как HDMI по умолчанию не используется отключаю автоматическое обновление
# а то может получиться что питание уехало, а данные остались не записанными
F3_LINE = "<addonupdates default="true">0</addonupdates>"
R3_LINE = "<addonupdates>2</addonupdates>"


# метод отвечает за добавление конфигурации:
# которая превращает "Умный телевизор" в "простую Интернет Радио колонку"
add_radio_guisettings() {
    sed -i "s|${F1_LINE}|${R1_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
    sed -i "s|${F2_LINE}|${R2_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
    sed -i "s|${F3_LINE}|${R3_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
}


FIND_STR = "touch ./tmp/.FIRST_RUN."
SCRIPT_FIRST_RUN = "etc/init.d/first-run.sh"
# так как HDMI выход может не использоваться, 
# то необходимо отключить "стартовое приветствие"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Usullar buyruq bilan xotira kartasiga yozilgan bitta xom fayl shaklida tarqatish tasvirini shakllantirishdan oldin ildiz fayl tizimini o'zgartirish uchun mo'ljallangan. dd

Bu shunday amalga oshiriladi:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Muxtasar qilib aytganda, Kodi 17.6 ning asosiy konfiguratsiya faylida "uch nuqta" o'zgaradi

  • Oxirgi tanlangan telekanalni ishga tushirish uchun konfiguratsiya;
  • Ovoz chiqishi konfiguratsiyasi, faqat analog audio chiqishi doimo ulanadi;
  • Avtomatik yangilanishlarni o'chiring;
  • Eslatma:
        Единственное с чем у меня возникли сложности, 
        это то, что пришлось еще подтащить файл базы данных 
        в формате sqlite => TV29.db, в котором указывается 
        текущий проигрываемый ТВ канал 
        (так как по умолчанию никакой из каналов не выбран), 
        а через xml конфигурацию в Kodi этого не сделать.
        

Har bir element uchun batafsilroq harakatlar ketma-ketligi:

1) Ekranning yuqori chap burchagidagi tishli belgini bosing
va "PVR va televizor sozlamalari" ni tanlang (ikki shoxli televizor tasviri)
keyin menyuning chap tomonida "Ijro etish" ni va markaziy bo'limda "Umumiy" ni tanlang.
ochiladigan ro'yxatda "Ishga tushganda oxirgi kanaldan davom etish" ni tanlang
"Old fon" sozlamasini tanlash

yoki aniqroq:

      "Настройки PVR и ТВ" 
       => "Воспроизведение" 
       => "Продолжить с последнего канала при запуске" => "Передний план"

2) Ekranning yuqori chap burchagidagi “tishli” belgisini bosing va elementni tanlang:

       "Системные настройки"  
       => "Дополнения" => "Обновления" => "Никогда не проверять обновления"

3) Ekranning yuqori chap burchagidagi “tishli” belgisini bosing va elementni tanlang:

       "Системные настройки" 
       => "Аудио" => "Устройство вывода звука" => "PI: Analogue"

Qanday qilib men ikki yil davomida noto'g'ri televizor ko'rdim.

Sizga tan olishim kerakki, ikki yil davomida men hali ham televizorni to'g'ri ko'rishni o'rganmaganman.

Men odatda oshxonada televizor ko'raman. Raspberry Pi 2B platasi televizorga, Ethernet va HDMI ulagichlari esa plataga ulangan. Kengash oddiy USB kabeli orqali quvvatlanadi, u televizorning USB portiga ulangan, ya'ni. Aslida, televizorni standart masofadan boshqarish pulti yordamida yoqish Raspberry Pi platasini quvvat bilan ta'minlaydi va masofadan boshqarish pultidan televizorni o'chirish ham darhol Raspberry Pi platasining quvvatini tiklaydi.

Ha, buni amalga oshirish mumkin emasligini yaxshi bilaman, chunki Kodi media markazining ildiz fayl tizimi (ext3) oddiy o'qish/yozish rejimida ishlaydi. Ammo men dangasa odamman va birinchi navbatda tizimni yuklashni to'liq to'xtatmaguncha qancha vaqt o'chirib qo'yishim mumkinligini tekshirishga qaror qildim, lekin afsuski, ikki yildan keyin men buni uddalay olmadim (ehtimol, men shunchaki omadli edim, Bilmadim ).

Va mening fikrimcha, agar bu rejim mening televizorim uchun mos bo'lsa, u "oddiy Internet-radio dinamik" uchun ham mos bo'lar edi va men Kodi plaginlarini avtomatik yangilashni majburan o'chirib qo'yganim sababli, fayl tizimining ishlamay qolish ehtimoli tenglashadi. Ozroq. Hozircha men bu borada muammo ko'rmayapman

Eslatma:

    Но вы всегда при желании можете с помощью одной yocto команды 
    IMAGE_FEATURES += "read-only-rootfs"

    и определенной магии перевести ваш дистрибутив в режим "read only"
    

Maqolada tasvirlangan "Internet radio dinamiklari" tarqatish uy xo'jaligidir va uy tarqatish uchun eng muhimi - bu chiroyli GUI. Menimcha, oddiy foydalanuvchini konsolga har qanday tushunarsiz sehrli buyruqlarni kiritishga o'rgatish juda qiyin yoki deyarli imkonsiz va u bu so'zni ham bilmaydi. Lekin GUI, iltimos.

Va bu, ehtimol, konsol bo'lmagan tarqatish foydasiga mening asosiy dalil. Kodi-ning iliq chiroqli grafik foydalanuvchi interfeysi, bu haqiqatan ham kerak emas, lekin u erda.
(Shuningdek, men Kodi-ni masofadan turib, masalan, smartfondan, Yatse ilovasini o'rnatish orqali boshqarish mumkinligini eslatib o'tishni butunlay unutganman va bu ba'zilar uchun ortiqcha bo'lishi mumkin)

Sichqonchani boshqarish uchun Kodi konfiguratsiyasi

va endi Roket

<keymap>
    <global>
        <mouse>
          <wheelup>VolumeUp</wheelup>
          <wheeldown>VolumeDown</wheeldown>
          <middleclick>ChannelDown</middleclick>
          <longclick id="0">ChannelDown</longclick>
          <longclick id="1">ChannelUp</longclick>
          <!-- конфигурационный rocket -->
        </mouse>
    </global>
</keymap>

Konfiguratsiya quyidagi elementlar uchun global hodisalarni bekor qiladi:

  • sichqonchaning g'ildiragini oldinga aylantiring
  • sichqonchaning g'ildiragini orqaga aylantiring
  • sichqonchaning o'rta tugmachasini bosing
  • uzoq sichqonchani bosish bilan ishlov berish (3 soniya yoki undan ko'proq),
    0 o'ng tugma identifikatori, 1 chap tugma identifikatori

Sichqoncha hodisalarini sozlash bo'yicha batafsil ma'lumot:

kodi.wiki/view/Alternative_keymaps_for_mice
kodi.wiki/view/Action_IDs
kodi.wiki/view/Window_IDs

Kabel tizimi sizga etib kelmasa, nima qilish kerak

"Ammo mening uyda hech qanday bepul Ethernet portlari yo'q (yoki hech qachon yo'q)," deb hayqirishi mumkin eski Raspberry Pi 1 platalarining ba'zi baxtli egalari (ehtimol, taxta tadqiqot uchun sotib olingan va kabinetda yotgan bo'lishi mumkin).

Va platada o'rnatilgan Wi-Fi mavjud emasligi sababli, u Ethernet ulanishisiz unchalik ishlamaydi.

Albatta, Raspberry Pi 1 platasidan Ethernetsiz foydalanish mumkin, ammo buning uchun sizdan biroz harakat talab etiladi. Odatda, bunday narsalarni faqat yangi narsalarni o'rganishning bir qismi sifatida qilish qiziqarli, ya'ni. Bu odatiy ish emas.

Shunday qilib, Ethernetsiz plata uchun gipotetik foydalanish holatini ko'rib chiqaylik:

Ko'rib chiqishga asoslanib, tashqi USB - Wi-Fi adapterini ulashingiz mumkin
adapter Linux ostida yaxshi ishlashi kerak

Eslatma:

    К сожалению часть WiFi адаптеров работать не будет, 
    это не особенность представленного в данной статье дистрибутива, 
    а скорее проблема конкретных драйверов WiFi адаптеров в ядре Linux. 
    Можно констатировать тот факт, что в настоящий момент вы не можете просто 
    пойти в магазин и купить любой WiFi адаптер. Скорее вы должны подобрать WiFi 
    адаптер из списка менее проблематичных и хорошо работающих под Linux.

    я проверял только следующии модели:
    - WiFi адаптер на чипсете Atheros D-Link DWA-126 802.11n (AR9271)
    - WiFi адаптер NetGear WNDA3200
    - WiFi адаптер NetGear WNA1100
    - WiFi адаптер TP-Link TL-WN722N (AR9271)
    - WiFi адаптер TL-WN322G v3
    - WiFi адаптер TL-WN422G
    - Wifi адаптер Asus USB-N53 chipset Ralink RT3572 
    

Agar sizda USB Wi-Fi adapteringiz bo'lsa, uning Linuxda yaxshi ishlashini quyidagicha tekshirishingiz mumkin:

  • Ba'zi keng tarqalgan Linux distributivlarini o'rnating
    umumiy maqsad, masalan, "Ubuntu Desktop"
  • Tizimni ishga tushiring
  • Wi-Fi USB adapteringizni ulang
  • Tarmoq menejerini ishga tushiring va Wi-Fi kirish nuqtasiga ulanishga harakat qiling
  • Agar hamma narsa yaxshi ishlayotgan bo'lsa va Internetga ulanishingiz barqaror bo'lsa, unda sizning adapteringiz yaxshi qo'llab-quvvatlanadi va siz ushbu adapterni maxsus tarqatishda va ehtimol yadroning boshqa versiyalari bilan ulash bo'yicha ishingizni davom ettirishingiz mumkin.
    (agar bo'lmasa, unda yo'q, afsuski, sinab ko'rmaslik yaxshiroqdir)

Raspberry PI-da tashqi Wi-Fi adapterini qo'llab-quvvatlash

Linuxda WiFi adapteri to'g'ri ishlashi uchun bizga ikkita narsa kerak bo'ladi:
1) Muayyan Wi-Fi adapteri uchun Linux yadrosini qo'llab-quvvatlash
2) Muayyan Wi-Fi adapteri uchun tizimda yadro modulining mavjudligi

Masalan, TP-Link TL-WN722N adapterini olaylik. U shunchaki ajoyib antennaga ega.
Keling, plata ishlaydigan chipsetni topamiz - men uchun bu "AR9271", Eslatma:

    что самое интересное, это то, что для одной и той же модели
    одного и того же производителя, чипсет Wifi может отличаться.
    Я например сталкивался с тем, что для TL-WN722N версии 2, 
    используется уже другой чипсет Realtek RTL8188, а он уже 
    плохо работал под Linux (на тот момент), увы такие вот дела, 
    т.е. иногда нужно еще приглядываться к маленьким цифрам 
    версии на обратной (темной) стороне адаптера.    
    

Endi AR9271 chipset drayveri uchun mas'ul bo'lgan yadro konfiguratsiyasidagi parametr nomini topamiz, "AR9271 catee.net" so'zlarining kombinatsiyasini izlash yaxshidir.
     bu erda "cateee.net" - bu Linux yadro modullarining konfiguratsiyasini tavsiflovchi ajoyib sayt

Biz darhol yadro konfiguratsiyasi nomini topamiz - CONFIG_ATH9K_HTC
va bizga kerak bo'lgan yadro modulining nomi ath9k_htc

va keyin faqat konfiguratsiya fragment faylida kerakli modul nomini belgilang
Linux yadrosi => retseptlar-kernel/linux/files/rbpi.cfg, qatorni qo'shing:
CONFIG_ATH9K_HTC=m

Shunday qilib, kelajakda siz tizimingizga har qanday qo'shimcha uskunani ulashingiz mumkin (yaxshi, albatta, agar u allaqachon Linux yadrosida qo'llab-quvvatlansa)

Agar siz xabra geek - dizayner bo'lsangiz, nima qilish kerak

Va siz eng zo'r narsalarni yaratasiz, masalan shu yerda yoki siz talabasiz va shunga o'xshash narsalarni yaratishni orzu qilasiz.

O'z-o'zidan, siz aliexpress-da RPI uchun qandaydir sensorli ekranni olishingiz mumkin, u erda mos batareyaga buyurtma berishingiz, barchasini Raspberry Pi 1,2 yoki 3 platasiga ulashingiz mumkin (afzal 3, chunki u o'rnatilgan Wi-Fi), tanlang. Sensorli ekran va voila uchun mo'ljallangan Kodi-dagi grafik dizayn mavzusi interfeysi => siz oddiy audio pleerni olishingiz mumkin. Albatta, bu juda katta bo'ladi, lekin u sizniki bo'ladi.

  Примечание:
  A для того, чтобы собрать Мультимедиа центр Kodi для самой бюджетной платы 
  Raspberry Pi Zero Wifi в yocto вам достаточно изменить две строки:

  конфигурационный файл => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  рецепт сборки Kodi  => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Agar Noldagi yagona protsessor yadrosi tufayli GUI Kodi 17.6 ning sezgirligi sizga sirli bo'lib tuyulsa, siz quloqlaringizni aldab, eski, ammo juda tez versiyani yaratishingiz mumkin, masalan, Kodi 15.2, bu borada u ko'proq "do'stona". (ba'zida meros hamma narsani hal qiladi)

Afsuski, menda kengash yo'q, shuning uchun men tekshira olmayman, lekin u ishlashi kerak deb o'ylayman.

Yig'ish bo'yicha qisqacha ko'rsatmalar

    1) Установите зависимости Yocto Project (например в Ubuntu): 
    sudo apt-get install -y --no-install-suggests --no-install-recommends 
        gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential 
        chrpath socat cpio python python3 python3-pip python3-pexpect 
        xz-utils debianutils iputils-ping python3-git python3-jinja2 
        libegl1-mesa libsdl1.2-dev xterm

    2) Скачайте и установите Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Загрузите проект с github:
        PATH=${PATH}:~/bin
        mkdir radio
        cd radio
        repo init -u https://github.com/berserktv/bs-manifest 
                  -m raspberry/rocko/radio-rpi-0.2.8.xml
        repo sync

    4) Соберите проект:
        ./shell.sh
        bitbake berserk-image
        
    можно тоже самое собрать для плат Raspberry Pi 3B Plus, 3B и 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

batafsil montaj ko'rsatmalari
va microSDHC kartasiga yozib olish, qarang oldingi maqolada

Postscript

Albatta, Internet-radio karnayining g'oyasi odatiy holdir, buni hamma biladi va Habré-da siz ushbu mavzu bo'yicha ko'plab maqolalarni topasiz, masalan shu yerda

Va siz men shunchaki talablarni tayyor yechimga moslashtirgan deb o'ylashingiz mumkin. Men bunga qarshi chiqa olaman va rostini aytsam, yo'q.

Janob Erveyning hikoyasi

    Хотите верьте, хотите нет, а дело было так:

    Наш рабочий офис граничит с фирмой по производству разного звукового
    оборудования, и однажды директор этой фирмы, назовем его мистер "Эрви"
    подошел к нашему заместителю директора филиала мистеру "Арсению"
    и спросил у него, насколько сложно повесить на плату Raspberry Pi 
    проигрывание звукового потока т.е. плата подключается к сети 
    и колонкам, и "слышен характерный звук".

    После этого мистер Арсений подошел к заместителю моего 
    начальника - мистеру "Борису" и переадресовал вопрос ему, 
    ну а я, как сторонний наблюдатель случайно эту идею запомнил
    и назвал ее "Задача трех начальников".

    В общем хотели как лучше, 
    а получилось, цитата - "Но мистер Эрви, как всегда, помог."

    Через некоторое время я поинтересовался у мистера "Бориса" 
    его мнением по поводу написания небольшой заметки на эту тему 
    на "Хабре", на что "Борис" ответил, что изменение 
    "трех пунктов меню" в Kodi, особо не привносит никакой 
    новой информации и не заслуживает отдельного упоминания. 
    Конечно я с ним полностью согласен и поэтому, я не расскажу ему, 
    что что-то написал по этому поводу.

    Статья написана исключительно для платы "Raspberry Pi 1" 
    взятой у мистера "Бориса" на время эксперимента, 
    совпадения со всеми другими платами "Raspberry Pi 1" случайны.
    

Siz uchun ko'proq yaxshi va turli yig'ilishlar, va hatto sobiq g'isht ham bu yil siz uchun kuylasin.

Manba: www.habr.com

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster