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

PacktPub безплатни електронни книги

PacktPub като едно от големите издателства пуска всеки ден по една тяхна книга абсолютно безплатно на адрес:
https://www.packtpub.com/free-learning

Единственият недостатък е, че преди време позволяваше да се смъкнат ePub, Mobi и PDF на книгите. Сега вече се отварят само във техния си уеб базиран Reader.

PacktPub безплатни електронни книги

Капан за мишки

Веднъж мишката забелязала, че стопанинът на фермата е сложил капан за мишки. Тя разказала за това на кокошката, овцата и кравата, но те всичките и отговаряли:
– Капанът за мишки е твой проблем, а не наш!
Малко по-късно в капана се хванала змия и ухапала жената на фермера. Опитвайки се да я излекуват, сварили на жената супа от кокошката. После заклали овцата, за да нахранят всички, пристигнали да навестят болната. И накрая заклали кравата, за да нахранят гостите, дошли на погребението.
И през цялото време мишката наблюдавала от дупката си, мислейки за нещата, които са чужд проблем, докато не станат твой!

Капан за мишки

Отпечатване със използване на cups под macOS

Добавяне на принтер:

$ lpadmin -E \
 -p Printer \
 -v ipp://192.168.1.10/ipp/print \
 -P Vendor-Model.ppd

-E разрешава приемането на задачи за отпечатване
-p установява името на принтера
-v път към URI на устройството
-P път към PPD файла със характеристиките на устройството

Проверка на наличните принтери:

$ lpstat -a
Printer accepting requests since Thu Nov 26 18:29:28 2015

Отпечатване на документ:

$ lpadmin -x Printer

Изтриване на принтер:

$ lpadmin -x Printer
Отпечатване със използване на cups под macOS

How to control OrangePi Zero Leds

От известно време търкалям едно OrangePi Zero и сега ще ви покажа как да контролирате вградените му два светодиода (LED). За основа ползвам armbian 5.90 със linux kernel 4.19.57.

Пускане на червения led:
echo 1 > /sys/class/leds/orangepi\:red\:status/brightness
Спиране на червения led:
echo 0 > /sys/class/leds/orangepi\:red\:status/brightness

Аналогично командите за управление на зеления са:
echo 1 > /sys/class/leds/orangepi\:green\:pwr/brightness
echo 0 > /sys/class/leds/orangepi\:green\:pwr/brightness

А ето и нещо по-интересно – автоматично мигане на червения:
echo "heartbeat" > /sys/class/leds/orangepi\:red\:status/trigger
Или мигане на зеления при активност на SD картата:
echo "mmc0" > /sys/class/leds/orangepi\:green\:pwr/trigger

От чисто естетическа гледна точка обаче е по-добре да оставите зеления да е за heartbeat, а червения за mmc0. Другите валидни команди за контрол са:
none mmc0 mmc1 timer heartbeat backlight default-on

How to control OrangePi Zero Leds

The beer-ware license

Бахти якия лиценз!

"THE BEER-WARE LICENSE" (Revision 42):

As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy us a beer in return.

This project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
The beer-ware license

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

WordPress създаване на потребител през SQL

От доста време ползвам този код за създаване на потребител през базата и никога не ме е подвеждал. Затова сега ще го споделя със вас.

INSERT INTO databasename.wp_users (ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES ('999', 'petern', MD5('p@ssw0rd'), 'Peter Nikolow', 'peter@nikolow.me', 'http://peter.nikolow.me/', '2011-01-01 01:01:01', '', '0', 'Peter Nikolow');

INSERT INTO databasename.wp_usermeta (umeta_id, user_id, meta_key, meta_value) VALUES (NULL, '999', 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

INSERT INTO databasename.wp_usermeta (umeta_id, user_id, meta_key, meta_value) VALUES (NULL, '999', 'wp_user_level', '10');

Кода създава потребител със ID 999, за да не се омешат със съществуващите. Потребителското име е petern, паролата е p@ssw0rd. Само трябва да замените databasename със истинската база и да го изпълните. Кода е много полезен когато имате пълен достъп до WordPress включително базата, но не можете да влезете защото нямате акаунт. Или ако акаунта ви е със по-ниски права например редактор.

WordPress създаване на потребител през SQL