![[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
Ну, всі ми, так чи інакше, залежимо від майнтейнерів, але у фбсд додано всеохоплюючу опцію обісратися самотужки. Можна залізти своїми мацаками в сирци ядра, те ядро зібрати і потім на ньому завантажитися. Принаймні - спробувати завантажитися. Колись давно довелося в драйвері мережевої карти руками додати один від/під, бо не було часу чекати, поки мейнтейнер роздуплиться.
no subject
git clone "https://src.fedoraproject.org/rpms/ім'я"
і редактуєш .spec файла та збираєш свою версію пекеджу. easy-peasy lemon squeezy
no subject
no subject
no subject