PHP Simple HTTP Server

Ето как лесно и просто да стартирате HTTP Server под PHP:

php -S 127.0.0.1:8080

След което отваряте в браузър http://localhost:8080 и можете да видите как се изпълняват PHP скриптове от папката в която е създаден. Основната разлика в сравнение със сървъра работещ под Python е, че няма показване на папките във директорията. Директно се опитва да намери index.php и ако няма такъв сървъра тържествено обяснява, че не може да достъпи „/“ и връща 404.

PHP Simple HTTP Server

Python Simple HTTP Server

Понякога когато човек работи на Linux сървър и му трябва да си види няколко файла, но без да активира допълнителни клиенти или сървъри. Ето и решението за Python 2:

python -m SimpleHTTPServer 8080

Ако използвате Python 3:

python -m http.server 8080

След което отваряте браузър и пишете това:
http://ip.на.сървъра:8080/път/към/файла.txt

Това е всичко! Когато си свършите работа просто набивате един Ctrl-C на Python. Имайте на предвид, че Python се изпълнява под текущия потребител и наследява всички негови ограничения за достъпи до файловете. Под *nix портове под 1024 могат да се отварят само под root права и затова използваме порт 8080. Ако искате да отворите порт под 1024 ще трябва да използвате sudo, но тогава Python също ще се изпълнява под ниво на root и ще може да има достъп до всички файлове.

Python Simple HTTP Server

OpenVPN benchmark

Как да пресметнем колко е максималната пропусквателна способност на OpenVPN:
openvpn –genkey –secret /tmp/secret
time openvpn –test-crypto –secret /tmp/secret –verb 0 –tun-mtu 20000 –cipher aes-256-cbc

Резултата от втората команда е:

Tue Dec 17 22:27:25 2019 disabling NCP mode (--ncp-disable) because not in P2MP client or server mode
real    0m42.917s
user    0m42.738s
sys    0m0.075s

Приемаме, че командата се изпълнява за 43 секунди. Сега правим следната сметка:
(3200 / секундите) = максималната теоритична пропусквателна способностна OpenVPN в Mbps
При нас е:
(3200 / 43) = 73.41 Mbps

Откъде идва 3200? Това е сумата на числата от 1 до 20000, умножава се по 2 за шифроване/разшифроване и после се умножава по 8 бита и се разделя на 1000000 за да се получи като мегабита в секунда. Резултата показва колко е максималната пропусквателната пропусквателна способност ограничена от процесора (шифриране/дешифриране).

OpenVPN benchmark

Отпечатване със използване на 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

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

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