Instalace Ulož.to captcha serveru a integrace pro pyLoad

V tomto návodu si nainstalujeme jednoduchý server pro řešení captchy z Ulož.to na Raspberry PI. Potřebujeme mít nainstalovaný Ubuntu Server 22 z předchozího návodu. Je nutné mít statickou IP adresu pro náš server v síti. Captchu můžeme řešit pouze pro naší instanci pyLoad na Raspberry PI, nebo i pro všechy ostatní instance pyLoadu, běžící v síti (např. v LXC kontejnerech na Omnii). Tento návod pokrývá obě možnosti.

Server je postaven na projektu ulozto-captcha-breaker, na výsledném modelu pro Tensor Flow. Je to napsané v Pythonu. Raspberry PI jsem vytáhl ze šuplíku, protože rozchodit potřebnou knihovnu tflite_runtime v LXC kontejneru na Turris Omnia se mi nepodařilo.

Vůbec instalace tflite_runtime je trochu složitější, vyžaduje přesné verze Python3 - v novějších Debian forcích (jako je náš Ubuntu Server 22.04.2 64bit) jsou novější verze Python3 než vyžaduje tato knihovna.

O výslednou integraci s pyLoadem se stará jednoduchý prográmek, který jsem vytvořil. Nejsem Pythonář, ale nakonec jsem to zvládnul a vše funguje.

Vše budeme instalovat jako root uživatel, je to nejjednodušší. Abychom nemuseli stále psát sudo, nalogujeme se jako root:

sudo su

Nejdříve si nainstalujeme potřebné knihovny:

apt install -y python3-pip make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev tk-dev liblzma-dev

Jdeme do domovského adresáře root uživatele:

cd /root

A nainstalujeme si podporovanou verzi Python3 přes pyenv:

curl https://pyenv.run | bash

Přidáme si do PATH:

vim .bashrc

Na konec souboru vložíme tyto řádky:

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Ve Vim se začne editovat zapnutím editačního módu stiskem Insert nebo i. Až se soubor doedituje, musí se nejdříve vyskočit z editačního módu stiskem Esc. Poté se napíše : a w a q a potvrdí Enter. Tím se změny uloží a ukončí Vim. Pokud se něco nepovedlo, a chceme vyskočit z Vimu bez uložení změn, vyskočíme z editačního módu (Esc) a napíšeme : a q a ! a potvrdíme Enter.

Aplikujeme změny:

source ~/.bashrc

Nainstalujeme si vrzi Pythonu 3.9.16, na které tflite-runtime funguje:

pyenv install 3.9.16

To bude dlooouho trvat. Až se doinstaluje, podíváme se na verze:

pyenv versions

A přepneme na naší verzi:

pyenv global 3.9

A už konečne můžeme nainstalovat to, co skutečně potřebujeme:

python3 -m pip install tflite-runtime Pillow

Nyní si stáhneme projekt na řešení captcha (jsme v /root):

git clone https://github.com/jdvorak23/ulozto-captcha.git

Pokud máme pyLoad pouze na tom samém Raspberry PI a nepotřebujeme řešit captchu pro jiné pyLoady v síti, přepneme na verzi local (jinak tento krok vynecháme):

cd /root/ulozto-captcha/
git checkout local

Tento program si musíme nastavit jako službu, aby se spouštěl automaticky:

vim /etc/systemd/system/captcha.service

Tím jsme vytvořili prázdný soubor, do kterého vložíme:

[Unit]
Description=Socket for captcha resolving script
After=network.target

[Service]
User=root
Group=root
ExecStart=/root/.pyenv/versions/3.9.16/bin/python /root/ulozto-captcha/captcha.py
Restart=always

[Install]
WantedBy=multi-user.target

A uložíme. Povolíme a nastartujeme službu:

systemctl enable captcha.service
systemctl start captcha.service

Zkontrolujeme že běží:

systemctl status captcha.service

Pokud je vše v pořádku, zkusíme test:

python3 /root/ulozto-captcha/test.py

A měli bychom vidět něco takovéhoto (s jinou IP pravděpodobně, v local verzi localhost):

IP: 192.168.1.223
Port: 9988
good

Integrace do pyLoad

Ještě musíme nastavit pyLoad, aby posílal captchy z Ulož.to do naší captcha služby. To se dělá pomocí hooku, který je součástí projektu. Pokud máme verzi local, následující krok vynecháme:

vim /root/ulozto-captcha/assets/UlozToCaptcha.py

A najdeme řádky:

__config__ = [("activated", "bool", "Activated", True),
              ("host", "string", "IP or hostname or localhost", "pyload.xxx"),
              ("port", "int", "Port of open socket", 9988)]

Pokud jsme nastavovali vše přesně podle návodu na tomto blogu, nemusíme taktéž nic upravovat. Pokud máme jiný název PC v síti, nebo nemáme DNS a připojujeme se pouze pomocí IP, přepíšeme pyload.xxx na naši IP / hostname. Soubor si uložíme.

Tento soubor musíme nakopírovat do našich pyLoadů. Zkopírování v případě, že máme pyLoad na našem Raspberry PI (stále jsme přihlášeni jako root):

cp /root/ulozto-captcha/assets/UlozToCaptcha.py /root/pyload/module/plugins/hooks/

V případě, že máme další pyLoad v LXC kontejneru na Omnii, můžeme zkopírovat takto, místo NAZEV_LXC vyplníme název kontejneru, který jsme si vybrali při vytváření kontejneru(podle předchozího návodu user1):

scp /root/ulozto-captcha/assets/UlozToCaptcha.py root@192.168.1.1:/srv/lxc/NAZEV_LXC/rootfs/root/pyload/module/plugins/hooks/

PyLoad musíme vyčistit a restartovat aby se změna projevila. Vždy na konkrétní stanici s pyLoadem:

systemctl stop pyload.service
python2 /root/pyload/pyLoadCore.py --clean
systemctl start pyload.service

K tomu bych ještě dodal, že nastavení pluginů a hooků je v souboru:

vim /root/.pyload/plugin.conf

Při prvním spuštění našeho hooku se zde vytvoří sekce s parametry našeho hooku - jako je třeba IP adresa a port. Pokud si po instalaci a prvním spuštění nějak hrajeme s nastaveními, nestačí pouze změnit IP v našem hooku (jak je uvedeno výše), nastavení pyLoad už bere z tohoto plugin.conf. Takže si IP musíme změnit zde, nebo vymazat celou složku s nastavením (.pyload) a spustit pyload znovu "poprvé" s nutností proklikat první nastavení jako když jsme ho nainstalovali.

A je to, zkusíme něco stáhnout, captcha se měla řešit automaticky. Občas se nevyřeší, pyLoad to ale za chvíli zkusí znovu. Pokud je captcha nesprávná, pyLoad o tom captcha aplikaci dá vědět - ta si ukládá pouze správně vyřešené captchy do adresáře images, tj. /root/ulozto-captcha/images. Pokud jich budeme mít hodně a jsme nadšenci, můžeme si vycvičit vlastní model. Jak je popsáno u projektu, ze kterého jsem vycvyčený model vzal(ulozto-captcha-breaker). Pokud Vám vše funguje, nezapomeňte jít na Git a "ohvězdičkovat" všechny projekty, díky kterým to máme:


Komentáře

Vložit komentář

Odpovědět

Vyplňte prosím antispam