![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Apache як one-liner
Коли хтось раптом потребує статичного HTTP сервера для тестів, йому
зазвичай рекомендують python -m http.server 8000
; колись навіть
список таких команд був для багатьох мов.
Закінчується це зазвичай так: людина або цим користується, або починає їхати дахом--писати для себе статичний сервер на awk, на netcat, на whitespace чи brainfuck. Кількість божевільних серед уйоб погромістів загалом вражає і чим простіша задача, тим більше часу вони їй приділяють.
Примітивність an ad hoc http static server in your current directory також є очевидна: цю іграшку викидають як тільки з'являється потреба тестувати сценарії реального життя, наприклад CORS чи клаентську аутентифікацію з сертифікатом. Приклад з пáйфоном не дозволяє навіть перевірити TLS хендшейка.
Чому ув якості http server one-liner не використовувати справжні сервера? Тому що жоден з них (окрім Caddy) такого використання не передбачає, а вагон файлів ув /etc, які очікує хеві-д'юті сервер, його сістемді юніти та мотлох ув /run на спроби не надихають.
Пригадуєте як працює опач з
$ lol() { curl -sL "$1" | nokogiri -e "p \$_.css('$2').size"; }
$ lol https://httpd.apache.org/docs/2.4/mod/directives.html li
733
дайрективами ув
$ lol https://httpd.apache.org/docs/2.4/mod 'dt a'
133
модулях?
Щоб стартувати йому потрібно окрема директорія, в якій він буде шукати конфігурацію, плюватися логами та записувати підфайла.
Сценарій: користувач інсталює опач звичним методом dnf install httpd
, &c, а чи використовує він його за призначення на порту 80, нас
не цікавить. Той самий системно-інстальйований опач можна змусити
читати інший файл конфігурації, слухати на іншому порту і
конфліктувати зі системною конфігурацією ніяк.
На жаль, це потребує скриптування, але такий скрипт може служити все життя, тому що нові http сервера з'являються та щезають кожен рік, а опач є вічний.
Я спочатку написав наївний шелівський враппер ув федорі, який робив темпоральну директорію, куди копіював крихітний httpd.conf. Все запрацювало, але коли я спробував той враппер на деб'яні, то на деякий час закрив обличчя руками.
Кожного разу 1 і те саме: мейнтейнер вважає що він знає краще, ніж апстрім. Сабсета модулів які .so, деб'ян компайлить ін (щоб однакові конфіґі на різних ОС працювали ніколи), ім'я дефолтного конфіґу є свое (звичайно), éкзек'ютабл називається опач2 замість httpd (чому ні).
Всі завжди з цим погоджуються, тому шо інакше не дай бог запишуть ув ко-мейнтейнери а це я вибачаюсь! Не для того штани ув фаанґ просиджувати щоб майнтейнерить якийсь пекедж як лох, най 15-річний румун за опачем слідкує, ув перерві між алгеброю та фізикою.
(Вибачте.)
З цікавості подивився на fbsd. Не настільки погано, але всі шляхи до модулей, наприклад, з лайнаксом не співпадають.
Поліпшена версія враперу читає конфігурацію з json.
$ find * -type f | xargs wc -l
30 conf/httpd.conf
52 httpd-test
26 os.json
108 total
це є забагато щоб постити тут, але ось вам svg (чув що ув журналах, які давно збанкрутували, колись друкували вихідний код програм, який читач мав вдома самотужки ввести):
$ httpd-test ~/Downloads
ID fedora
log tail -f /tmp/tmp.7PTHVzUhE5/logs/access_log
conf /tmp/tmp.7PTHVzUhE5/conf/httpd.conf
TypesConfig /etc/mime.types
DocumentRoot /home/alex/Downloads
Listen 127.0.0.1:8000
До речі, всі 133 модуля опачу можна йому скомпайлити статично (або
вибірково, лише ті що потрібні: configure --enable-modules=none --enable-mods-static='auth_basic …'
). Чому це не використовують
усіляки ембедні дівайси замість пародій tiny/micro/nano-something, у
яких тече пам'ять і які половину слів http/1.1 не знають, залишається
незрозумілим.
no subject
Зате співпадають з фбсд усіх релізів.
Що мене дратує в лінухах найбільше, це саме відмінна від фбсд розкладка шляхів. І, ніби того мало, в кожному лінуходістрі розкладка по шляхах своя. Най трошечки, але своя.
Наприклад, мені дуже подобається, що у фбсд системний /єтц не засирається конфігами стороннього софта, а є /usr/local/etc. І за всі роки я так і не спромігся второпати, якого біса робочий каталог мускля в дебіана знаходиться в /var/lib, а не /var/db, що є логічним.
Дочитав до SVG і мене порвало у шмаття!
no subject
це там з культури let a thousand flowers bloom, ггг
какєто в редхєтє bin єто сімлінк на usr/bin? нахажу что такоє повєдєніє в ущєрб пользоватєльскому опиту нєпріємлємо єто била послєдняя капля я стартую свойо дістро
> у фбсд системний /єтц не засирається конфігами стороннього софта
все так, зате ув лайнаксах немає компонентів, які з'являються поза rpm/deb
апґрейда ув федорі це літералі "оновити лінки на ріпо, завантажити нові rpm, рібутнутися до сінґл моуду, апдейтнути кожний завантажений rpm". ядро це також rpm з пост інсталл скриптами, &c
тобто система тримається на якості мейнтейнерів кожного пекеджу
no subject
Ну, всі ми, так чи інакше, залежимо від майнтейнерів, але у фбсд додано всеохоплюючу опцію обісратися самотужки. Можна залізти своїми мацаками в сирци ядра, те ядро зібрати і потім на ньому завантажитися. Принаймні - спробувати завантажитися. Колись давно довелося в драйвері мережевої карти руками додати один від/під, бо не було часу чекати, поки мейнтейнер роздуплиться.
no subject
git clone "https://src.fedoraproject.org/rpms/ім'я"
і редактуєш .spec файла та збираєш свою версію пекеджу. easy-peasy lemon squeezy
no subject
no subject
no subject
no subject
no subject
з ембедним лайнаксом навряд без кастомної компіляції вийде дівайса зробити, але чомусь багатьом подобаються кастровані http сервери, замість справжніх
може це є тому що їх роблять діди, які навіть до коробки з N GB ram та малтікорним cpu заливають те, що було оригінально написано для mips картоплини з 32MB ram 20 років тому
no subject
no subject
What's the use case for launching a fully-functional web server to just test a functionality? I would expect a server to be hiding behind some kind of layer that takes care of TLS... not sure about CORS, but maybe. I strongly believe that an application layer should not care about that. So if we are talking about testing interactions between microservices, it makes no sense (to me).
OTOH, if we test the frontend tier, then, I believe, a slapped together server may be not a good idea at all, since it's not fully functional, it may give an impression that everything's ok, but actually it's not. I'd rather count on a properly deployed test/staging/dev server.
Or?
no subject
з апачем елементарно додавати до .htaccess що очікується від справжньої endpoint
зі іграшковими серверами це або неможливо або дуже незручно
намагався якось до рубівського un (який використовує webrick'у під капотом) додати підтримку cors, зробив PR, але японса-мейнтейнер не бажає мерджити ггг, той PR висить більше року