OrangePi Zero LTS

OrangePi са пуснали нова версия на техния продукт Zero като вече се казва Zero LTS. Модификацията на LTS се води 1.5, докато аз разполагам със Zero 1.4 и според производителя това решава (най-сетне!) проблема със Wifi модула. Във предходните дизайни заради близоста си до захранването се прави интерференция със Wifi и производителността беше плачевна.

За да го онагледим използваме софтуера wavemon който показва във реално време какво се случва на безжичния интерфейс.

Ето и OrangePi Zero:

Ето и Raspberry Pi 3B:

Както сами виждате при OPi Zero имаме 30% загуба на пакети което води до повторното им изпращане. При RPi 3B няма такива загуби по трасето.

В заключение – ако не искате да си скъсате нервите ползвайте Zero само и единственно по Ethernet и категорично забравете Wifi функционалността му. В противен случай устройството работи 2-3 часа (може и повече, може и по-малко) и после не може да бъде достъпно защото се разкача от Wifi мрежата. Надявам се, че проблема е оправен във версия 1.5.

Обаче 1.5 въвежда и нов проблем:
https://lemariva.com/blog/2019/10/orange-pi-zero-lts-upgraded-alternative-old-raspberry-pis#armbian-buster-336586
Изглежда има някакъв нов проблем, този път със температурния сензор. НЕ Е нормално след работа да показва 10-15 градуса температура на ядрата. Подозирам, че е възможно процесора да е друга ревизия и със някакъв пач за в бъдеще това ще бъде отстранено.

OrangePi Zero LTS

OpenWRT factory reset

Днес успях да ресетна паролата на един OpenWRT рутер който Иван Джеферов от BizLabs ми изпрати. Рутера е използван във организация и понеже е пенсиониран никой не му знаеше паролите и как да се влезе във административния интерфейс. Само се видя, че е „нестандартен“ firmware което е синоним на някое от WRT-тата.

За тази цел свързах рутера със кабел към настолния си Мак и се залових. Първото което ми хрумна е да прегледам трафика който излита от и влиза във самото устройство. Отворих терминала и натраках на бърза ръка
sudo tcpdump -Ani en0
което ми позволи да видя какво се случва вътре. Един от пакетите беше към NTP сърврър на OpenWRT което на практика беше това което търсех. А именно – рутера е рефлашнат със OpenWRT.

Етап 2 беше да видя как да сменя паролата. За тази цел рутера трябва да влезе във Failsafe mode и тогава се получава някакъв контрол. Общо взето по време на boot процеса трябва да се натисне един бутон. Проблема е, че рутерите имат още един режим Recovery mode който пак се активира със натискане на същия бутон.

Разликата между двата режима е колосална. Recovery mode на практика инсталира на устройството IP 192.168.0.86 и стартира TFTP клиент който ще дръпне и флашне recovery image. За тази цел компютъра трябва да му се набие IP 192.168.0.66 (ТВЪРДО!) и да се стартира TFTP сървър. Ако по време на tcpdump видите, че IP 192.168.0.86 прави ARP заявки за намиране на 192.168.0.66 значи сте влезнали във този режим. Или сте натиснали бутона много рано след включване на устройството.

Аз обаче не търсех Recovery mode, ами Failsafe mode което просто позволява да се нулират настройките на устройството. След известно количество проба-грешка се установи кога трябва да се натисне бутона за влизане във този режим. Това е приблизително 3-5 секунди след включване на самото устройство. Тогава един от светодиодите започва много бързо да мига което е сигнал, че режима е активиран. За да се възползвате от него обаче трябва да си набиете IP от рода на 192.168.1.10 (ТВЪРДО!) и тогава можете да достъпите устройството под telnet при по-старите OpenWRT или ssh при по-новите на адрес 192.168.1.1

Пробвах ssh, но ми отказа връзка което означаваше да пробвам под telnet. Разбира се се оказа, че на новите macOS няма telnet и се наложи да си го компилирам от сорс:
wget http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.4.tar.gz
tar xvzf inetutils-1.9.4.tar.gz
cd inetutils-1.9.4
./configure
make
cd telnet
./telnet 192.168.1.1

при което ще видите нещо като:

И тук почна голямото брожение как да се нулират настройките. Според горния екран е трябвало само да използвам firstboot за целта. След като го изчаках културно към 10тина минутки, натиснах произволен клавиш и командата ми върна контрол. Изпълних reboot -f и устройството се рестартира. Неочаквано за мен обаче нищо не се случи. И така няколко пъти със различни комбинации със mount_root, без mount_root и т.н.

След малко гугълване видях, че няколко човека се оплакват от същото и единия написа, че се е оправил със изпълнение на следната команда:
mtd -r erase rootfs_data
изпълних я и след рестартиране можех да вляза във устройството през LuCI (уеб интерфейса на OpenWRT) на адрес 192.168.1.1

OpenWRT factory reset

netboot.xyz

Едно ново бижю на хоризонта:
https://netboot.xyz

След като си го запишете на CD или USB позволява да заредите някъде около 1MB файл. След което всичко останало се дърпа през интернет от официалните им сървъри. Говорим за инсталация на Linux или FreeBSD без наличие на ISO. Ето пълен списък на операционните системи със които идва:
https://github.com/antonym/netboot.xyz

Наличието на подобен инструмент позволява да не се разкарваш със много CDта или USBта из раницата и всичко пак да ти е под ръка. Все пак не всеки може да се разкарва със 30 Линукс дистрибуции със по няколко версии.

netboot.xyz

Ubuntu netboot images

Ако горния трик за Debian netinst ви е харесал ето и netboot изображенията за Ubuntu 19.04:
http://archive.ubuntu.com/ubuntu/dists/disco/main/installer-i386/current/images/netboot/mini.iso
http://archive.ubuntu.com/ubuntu/dists/disco/main/installer-amd64/current/images/netboot/mini.iso
и на 18.10:
http://archive.ubuntu.com/ubuntu/dists/cosmic/main/installer-i386/current/images/netboot/mini.iso
http://archive.ubuntu.com/ubuntu/dists/cosmic/main/installer-amd64/current/images/netboot/mini.iso
и на 18.04 LTS:
http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-i386/current/images/netboot/mini.iso
http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso
и на 16.04 LTS:
http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-i386/current/images/netboot/mini.iso
http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/mini.iso

Както казах и преди – аз ги харесвам защото мога да си направя инсталация която цялата да се преточи от-до през интернет и да се използват актуални версии на пакетите. Това което не харесвам във традиционната инсталация със големи ISO файлове е, че дори и да направиш прясна инсталация после половината дистрибуция се обновява след първото влизане което губи време.

Ubuntu netboot images

Debian netinst + netboot images

Да не забравя ето линковете към netinst изображенията на новия Debian:

https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.0.0-amd64-netinst.iso
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-mac-10.0.0-amd64-netinst.iso
https://cdimage.debian.org/debian-cd/current/i386/iso-cd/debian-10.0.0-i386-netinst.iso
https://cdimage.debian.org/debian-cd/current/i386/iso-cd/debian-mac-10.0.0-i386-netinst.iso
https://cdimage.debian.org/debian-cd/current/multi-arch/iso-cd/debian-10.0.0-amd64-i386-netinst.iso

Ако горните изображения са ви идват малко големи за тестове под виртуалки ето и по-малките изображения (10тократно по-малки):

https://cdimage.debian.org/debian/dists/buster/main/installer-amd64/current/images/netboot/mini.iso
https://cdimage.debian.org/debian/dists/buster/main/installer-i386/current/images/netboot/mini.iso

Разбира се ако имате по-нестандартен хардуер (мрежови карти или дискови масиви) по-малките изображения може и да не ви свършат работа защото не идват със всички налични драйвери. Така устройствата няма да могат да се инициализират и намерят съответно.
Аз обаче си ги харесвам защото всичко се точи по интернет така и след инсталация няма нищо за обновяване.

Debian netinst + netboot images

Как да пренасочиш порт 3000 към 80?

Понякога се налага да се пренасочи порт от едно приложение да отговаря на друг. Най-пресния пример е пренасочване на Ruby On Rails който слухти на порт 3000 да работи на порт 80.

Ето как става:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

Така със нула промени по конфигурацията вече RoR започва да обработва заявки на порт 80.

Как да пренасочиш порт 3000 към 80?

Смяна на Chrome user agent без плъгин

Понякога се налага да се смени user agent-a без да се използва плъгин. Ето и как можете да го направите без плъгин или някаква друга приставка.

Ето оригинала:

Както виждате user agent-a ми е CrOS което си е ChromeOS. Нека сега да го сменим!

Натискаме десен бутон във файла, Инспект Елемент и от инспектора във долния панел избираме Network Conditions и го сменяме. Ако не е активен Network Conditions се клика на трите точки във ляво и оттам се избира. Ето как би трябвало да изглежда.

И как да се представим за Googlebot mobile:

След презареждане действително заявката се изпраща със този user agent. Това е полезно за тестване на сайтове когато се сервират различни страници във зависимост от браузъра. Отделно е полезно когато се тестват сайтове защото във един прозорец може да се сервира съдържание за iPhone, във друг за iPad, във трети за Android и четвърти да е за компютър със симулиране и на различната мрежа във всеки един от тях индивидуално.

Смяна на Chrome user agent без плъгин

Node.js and npm update

Наложи ми се да обновя на macOS някакъв остарял node.js и ето конкретните стъпки
1. Пишем npm version и виждаме това:
{ npm: ‘3.10.3’,
ares: ‘1.10.1-DEV’,
http_parser: ‘2.7.0’,
icu: ‘57.1’,
modules: ’48’,
node: ‘6.5.0’,
openssl: ‘1.0.2h’,
uv: ‘1.9.1’,
v8: ‘5.1.281.81’,
zlib: ‘1.2.8’ }
2. Пишем node -V и виждаме това:
v6.5.0

Които са инсталирани някъде 2015 или 2016та и са праисторически спрямо днешните стандарти.

Обновяванието става лесно:
1. sudo npm install -g npm
2. npm version вече връща това:
{ npm: ‘6.1.0’,
ares: ‘1.14.0’,
cldr: ‘33.0’,
http_parser: ‘2.8.0’,
icu: ‘61.1’,
modules: ’64’,
napi: ‘3’,
nghttp2: ‘1.32.0’,
node: ‘10.6.0’,
openssl: ‘1.1.0h’,
tz: ‘2018c’,
unicode: ‘10.0’,
uv: ‘1.21.0’,
v8: ‘6.7.288.46-node.13’,
zlib: ‘1.2.11’ }
3. sudo npm cache clean -f
4. sudo npm install -g n
5. И вече можем да напишем sudo n latest или sudo n stable. Изчакваме малко
6. node -v вече връща
v10.6.0

Оттук насетне обновяването към последните версии е само:
1. sudo npm install -g npm
2. sudo npm cache clean -f
3. sudo n stable (или latest)

Node.js and npm update

Принтиране от мобилно устройство

Използването на принтер от мобилно устройство било то таблет или телефон е лесно когато имате принтер със такава поддръжка. Обикновенно тези принтери разполагат със връзка към безжична мрежа и (ама разбира се!) съответно са малко по-скъпи. Проблема възниква когато разполагате със по-стар принтер който е или само жичен (USB или Centronics) или принтер със безжична поддръжка, но по-стар модел. Сега ще ви покажа как да се преборите със тази житейска несправедливост.

Печатане от Android

Под Android проблемите се решават сравнително по-лесно със Google Cloud Print. Изисква се браузър Chrome и регистриране на принтера във облака. Така можете да принтирате от целия свят на вашия принтер. Разбира се има уловка – трябва да се логнете във мобилното устройство и във Chrome със един и същи потребител. Ето и процедурата:

  • Регистрираме принтера на настолния компютър тук chrome://devices/
  • На мобилното устройство инсталираме Cloud Print

И общо взето е това. Има няколко благинки:

  • можем да използваме принтера от друг компютър. Хитрото е, че принтера тогава може да се намира във друг град, страна и даже континент. Разбира само от Chrome
  • можем да си закупим по-модерен принтер със поддръжка на Google Cloud Print. Текущите модели са налични ето тук
  • можем да наблюдаваме заявките през интернет оттук
  • можем да печатаме документи от Google Drive директно
  • можем да печатаме директно към CUPS под Linux със използване на специализиран драйвер за него. Кода на драйвера може да бъде взет оттук или да използвате прекомпилиран пакет оттук

И тъжната новина – връзката става само и единственно през интернет. Ако няма интернет дори и във същата стая да се намира принтера ако не е вързан със кабел към компютъра ще е просто неизползваем. Същото важи и за мобилното устройство – дори и да е във същата безжична мрежа. Ако няма интернет няма да може да използва принтера.

Печатане от iOS

Под iOS нещата са малко по-различни. Тук най-лесния и удобен начин е когато принтера поддържа AirPrint през протокола Bonjour. Ако нямаме такъв принтер разбира се ще си го емулираме:

  • инсталираме HandyPrint на macOS оттук. Под Windows ще трябва да се хакне ето така или оттук със по-новата версия. Отделно под Windows ще се наложи да инсталирате и Bonjour Print Services оттук.
  • на мобилното устройство избираме иконката за споделяне (share) и ако приложението поддържа AirPrint принтера ще се появи във списъка. Няма никакви настройки

Сега малко особенности:

  • принтера трябва да се намира във същата локална мрежа със мобилното устройство
  • няма функция печатане през интернет
  • може да се печата дори и когато интернет липсва във локалната мрежа
  • ако имате принтер свързан със AirPort Extreme или AirPort Express то самия принтер трябва да поддържа AirPrint за да можете да го ползвате. Официален списък на поддържаните принтери през AirPort има тук и неофициални тук и тук. Но ще трябва да проверите дали и принтера поддържа AirPrint иначе от мобилно устройство няма да можете да го видите и използвате
  • може да се ползва CUPS и да се емулира подобен принтер. За повече информация как – тук, тук и тук

Разбира се това са официалните начини. Има и алтернативи. Hewlett Packard поддържат стандарта ePrint използващ техните устройства. FedEx имат мобилно принтиране също тук – като след отпечатването можете да изберете да минете през техен офис за да го вземете или те да ви го доставят. Можете да използвате Printer Pro – оттук или някое от многобройните алтернативни приложения. Можете да видите дали производителя на принтера ви няма приложение: Samsung, Canon, Epson или други.

Както виждате – има богат избор вече на пазара. А само преди няколко години използването на принтер от мобилно устройство беше мит. Вече е реалност.

Принтиране от мобилно устройство

Global Firefox Console

Firefox е един от най-любимите ми браузъри по много причини. Днес установих, че е възможно да се активира глобална конзола където той да започне да показва информация относно целия мрежов трафик от всичките плъгини, него самия и сайтовете. Единственното което трябва да се направи е да се стартира със параметър от командния ред -jsconsole. Как става това?
Windows 32 битов

"C:\Program Files\Mozilla Firefox\firefox.exe" -jsconsole

Windows 64 битов

"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -jsconsole

OSX

/Applications/Firefox.app/Contents/MacOS/firefox-bin -jsconsole

Linux

firefox -jsconsole

Това е всичко. Разбира се подгответе се за потоп от информация във глобалната конзола. На мен лично ми трябва да открия проблем при обновлението му. На версия 48.0 съм и ми казва че няма обновление. Което е лъжа при положение че има 48.0.2 налична.

Global Firefox Console