• Можно ли использовать Oracle database с Java 19?

    Vamp
    @Vamp
    Kavani, sql developer 19 версию не поддерживает. Тут пишут, что нужна 11 или 8 версия.
  • Можно ли использовать Oracle database с Java 19?

    Vamp
    @Vamp
    Kavani, так у вас проблема с sql developer, а не с oracle database?
  • Как в контейнере сделаться рутом?

    Vamp
    @Vamp
    сергей кузьмин, никто его не обрезает. Да, у него нет конкретно имени root, но это не значит, что он перестал из-за этого существовать.

    Рассматривайте ситуацию со стороны безопасности - если удалось похачить приложение в контейнере и обнаружить, скажем, RCE, то грош цена этой поистине эпичной дыре если кроме самого приложения даже нечего запустить в этом контейнере. Но если в контейнере есть bash, пользователи, ещё какие-то бинарники (особенно curl/wget), то ценность уязвимости значительно возрастает.
  • Как в контейнере сделаться рутом?

    Vamp
    @Vamp
    сергей кузьмин, по философии докера работать в контейнере должно только приложение. Вам там работать не нужно. Поэтому чем меньше в контейнере мусора (файлов, не нужных для нормальной работы приложения), тем лучше (меньше поверхность атаки, меньший вес образа).
  • Как в контейнере сделаться рутом?

    Vamp
    @Vamp
    сергей кузьмин, запись в /etc/passwd необязательна. Можно указывать пользователей не только по имени, но ещё и по uid: USER 0 в Dockerfile или docker exec -ti --user 0 bfad81cba22b /bin/sh
  • Docker / PHP - Как организовать воркеры?

    Vamp
    @Vamp
    А чилды? Чилды как (простите, обработчики)?

    Григорий Васильков, ну так запускайте каждый чилд в отдельном контейнере:
    docker run -d -v /home/project:/var/www --name child1 php:8.1-cli php /var/www/worker.php
    docker run -d -v /home/project:/var/www --name child2 php:8.1-cli php /var/www/worker.php
    docker run -d -v /home/project:/var/www --name child3 php:8.1-cli php /var/www/worker.php
    docker run -d -v /home/project:/var/www --name child4 php:8.1-cli php /var/www/worker.php


    Спамим proc_open($cmd, $spec, $pipes) + stream_set_blocked($pipes[0], false)? Под них не пишут конфиги докеровские?

    Не нужны отдельные Dockerfile для этого. Слежение за процессами, запущенными через proc_open, - это проблема скрипта, а не докера. В данном случае скрипт у вас получается самописным аналогом supervisor. Если вы уверены, что ваш скрипт сможет нормально управлять этими дочерними процессами, не допускать их превращения в зомби, автоматически перезапускать упавшие - то всё в порядке. Но на мой взгляд проще запустить каждый воркер в своём контейнере без всех этих заморочек с proc_open.

    Получается сие работает в рамках одного процесса, значит лимит памяти может исчерпаться по мере числа тредов, в этом беда основная? (лид сказал трабла, какая - ему пояснить не удалось, и мне не понятно, судя по вашему ответу - тоже траблы нет)

    Если на докер контейнер при запуске не накладывались ограничения по памяти, то скрипту доступна вся память в системе, а значит ситуация никак не отличается от запуска скрипта прямо на хосте безо всякой контейнеризации. Так что если вдруг скрипту в контейнере не хватило памяти, то ему не хватит её и при запуске напрямую с хоста. И это снова проблема скрипта, а не докера или линукса.

    Запуск процесса в докере по сути ничем не отличается от запуска процесса сразу на хосте. Вот прям одно и то же. Буквально. Единственное отличие тут только в том, что на процесс в контейнере система накладывает ограничения. Например, видна не вся файловая система хоста, а только часть.
  • Разница между L2 и L3 vpn разница?

    Vamp
    @Vamp
    И чем тогда уровни различаются, по вашему мнению?

    Griboks, ничем :)
    OSI - это пережиток прошлого. Международная организация ISO придумала эту модель чтобы по ней делать свои сетевые стандарты. Но ISO проиграла войну более простому стеку TCP/IP. OSI модели при этом удалось выжить, хоть реальность она уже давно не отражает. Просто людям надо было как-то классифицировать протоколы, а более подходящей модели не нашлось. TLS, например, вообще ни в какой уровень по OSI не укладывается.

    Инкапсуляция рулит. Благодаря ей пакет какого-либо протокола не интересуется что конкретно он перевозит в своём пэйлоаде, а так же ему не интересно на каком протоколе он едет верхом. Поэтому и возможны прыжки между уровнями. Но и с инкапсуляцией не всё так просто. Например, в заголовке протокола IPv4 существует поле Protocol, в котором указывается какой протокол верхнего уровня находится в пэйлоаде. Или упоминавшийся выше TLS. У него есть расширение ALPN, в котором указывается какая версия http протокола у TLS там внутри. Такая вот "протёкшая" инкапсуляция.
  • Разница между L2 и L3 vpn разница?

    Vamp
    @Vamp
    Griboks, ну я понял. Весь ваш тезис сводится к "нельзя, но если очень хочется, то можно". То есть вы не знаете точный ответ и не можете внятно объяснить.

    Поскольку L3 не ниже L3, то L3 нельзя инкапсулировать в L3

    Вполне можно.

    Поверх L2 туннеля можно использовать любой L3 протокол, а поверх L3 - нельзя.

    Тоже можно.

    Но если вы хотите конкретный ответ, то передавать tcp внутри udp нельзя.

    UDP в TCP я ещё могу понять, но TCP в UDP лишено всякого смысла. Тем не менее, при большом желании и это возможно, нужно только реализовать свой LSP или TUN драйвер для ядра линукса.

    Vamp, не нужно ничего складывать, нужно прочитать ссылку на OSI.

    Хочу привести цитату из статьи в википедии, на которую вы ссылаетесь и, похоже, сами ещё не читали:
    Любой протокол модели OSI должен взаимодействовать либо с протоколами своего уровня, либо с протоколами на единицу выше и/или ниже своего уровня.
  • Разница между L2 и L3 vpn разница?

    Vamp
    @Vamp
    Griboks, вы как-то путано отвечаете - то "нельзя", то "можно". Складывается впечатление, что вы не очень разбираетесь в теме.
  • Разница между L2 и L3 vpn разница?

    Vamp
    @Vamp
    Griboks, так значит всё-таки можно?
  • Как называется этот эффект в поле ввода?

    Vamp
    @Vamp
    В мобильном хроме не работает
  • Что означает синтаксис dockerfile (php-fpm)?

    Vamp
    @Vamp
    а почему у мня такой вывод (отличается от вашего) (FROM php:7.4-fpm-alpine3.16)

    Потому что apk info не лезет в интернет, а смотрит информацию в кешированном индексе. Вы во всех командах apk прописываете флаг --no-cache, поэтому индекса у вас нет, из-за чего команда и валится с ошибкой.

    в какой момент и для чего нам нужно libmcrypt (без дев)?

    Нужно в момент запуска php-fpm. Когда php загружает модули, автоматически загружаются и системные библиотеки из so файлов.

    если же apk add libmcrypt-dev и потом НЕ удалять -dev пакет - все работает (подозревая что он( libmcrypt-dev) скачивает как зависимость libmcrypt (поэтому, как вы и пояснили, при удалении -dev из папки .so пропадает), а тут НЕ удаляем -dev поэтому и простой пакет сохраняется

    Всё правильно, так как при установке сразу двух пакетов apk add libmcrypt libmcrypt-dev, пакет libmcrypt будет промаркирован пакетным менеджером apk как "установленный вручную" и поэтому не будет удаляться автоматически при удалении libmcrypt-dev.

    но я-то всегда думал что libmcrypt-dev (вместе с g++ gcc make ....) компилируют мне этот .so файлик и мне после этого не нужен пакет без -dev суффикса (все ведь у меня в папке so лежит и именно он "работает"), но, когда ковыряюсь - понимаю что все не так, файлик so пропадет, нужена библиотека без -dev, но в какой момент и для чего....

    Ещё раз для закрепления материала. Пакет libmcrypt содержит скомпилированную динамическую библиотеку, которая распаковывается по пути /usr/lib/libmcrypt.so.4. Пакет libmcrypt-dev содержит в себе сишный заголовочный файл, который нужен для компиляции php модуля mcrypt. После компиляции php модуля mcrypt этот сишный заголовочный файл больше не нужен и его следует удалить. У скомпилированного php модуля mcrypt образуется зависимость от файла /usr/lib/libmcrypt.so.4:

    /var/www/html # ldd /usr/local/lib/php/extensions/no-debug-non-zts-20190902/mcrypt.so
    	/lib/ld-musl-x86_64.so.1 (0x7f07e7381000)
    	libmcrypt.so.4 => /usr/lib/libmcrypt.so.4 (0x7f07e7346000) <--------- вот она
    	libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f07e7381000)
    	...

    Так как пакет libmcrypt неявно устанавливается вместе с libmcrypt-dev, то при удалении пакета libmcrypt-dev, пакет libmcrypt так же будет неявно удалён. Это поведение не уникальное для альпиновского пакетного менеджера. Так действуют и apt, и yum, и прочие менеджеры пакетов из других дистрибутивов. Так как libmcrypt нужен для работы php модуля mcrypt, то чтобы пакет libmcrypt неявно не удалялся вместе с пакетом libmcrypt-dev, пакет libmcrypt необходимо устанавливать явно. Рецепт успеха выглядит так:

    apk add libmcrypt libmcrypt-dev
    pecl install mcrypt
    docker-php-ext-enable mcrypt
    apk del libmcrypt-dev
  • Что означает синтаксис dockerfile (php-fpm)?

    Vamp
    @Vamp
    вы говорите "Устанавливать нужно обе версии. Обычная версия "freetype" содержит саму библиотеку в so файле, которую gd будет подключать в рантайме. " можно пояснить более простыми словами?

    so - это формат файла, в котором создаются динамические библиотеки. Ближайшим аналогом будут dll файлы в ОС windows. Ещё можно усмотреть некоторую аналогию с composer пакетами.

    я проксперементировал и удалил apk add freetype, оставив только dev версию и у меня образ собрался запустился и php -m показываем пакеты, но, как я понимаю все же что-то не так, как мне понять что не так?

    Это потому что пакет freetype всё равно установился, так как является зависимостью к freetype-dev.
    /var/www/html # apk info --depends freetype-dev
    freetype-dev-2.12.1-r0 depends on:
    freetype=2.12.1-r0 <------ вот
    pc:libbrotlidec
    pc:libpng
    pc:zlib
    pkgconfig

    То есть, устанавливая freetype-dev, автоматически установится ещё и freetype.

    а еще добавил удаление -dev библиотек в конце dockerfile образ собрался но теперь ругается сам php

    Вероятно это из-за того, что вы не устанавливали пакет imagemagick. Установили imagemagick-dev, вместе с ним установился imagemagick. При удалении imagemagick-dev удалилась ещё и зависимость imagemagick, так как она не была установлена явным образом.
  • Отличия GET от POST?

    Vamp
    @Vamp
    Василий Банников, частенько вижу кнопки выхода из аккаунта в таком виде:
    <a href="/logout">выйти</a>
    Такая ссылка не идемпотентна.
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    Vamp
    @Vamp
    jofumi, я не очень разбираюсь в истории сетей. После комментария Максим Гришин, сходил в википедию и оказалось, что Ethernet изобрели вообще раньше упомянутых Token Ring и ARCnet, что подтверждает моё невежество в этом вопросе. Так-то конечно были разные протоколы и до IP, и до Ethernet, но они были разработаны под конкретное оборудование и я сомневаюсь, что там была какая-то иерархия и классификация.

    Классификация по уровням OSI довольно условная и не обязывает производить упаковку данных строго сверху вниз. Например, тот же самый протокол ARP считается L2 протоколом. То есть, находящимся на втором уровне OSI, так же как и Ethernet. И всё же ARP оборачивается в Ethernet.

    Или взять VPN, где упаковка вообще зиг-загом идёт - сначала трафик заворачивается как обычно сверху вниз, а затем ещё раз сверху вниз, после чего наконец покидает машину. То есть HTTP -> TCP -> IP -> Ethernet -> TCP/UDP (в зависимости от технологии VPN) -> IP -> Ethernet -> физический линк. Или если нарисовать эту же схему уровнями OSI: L7 -> L4 -> L3 -> L2 -> L4 -> L3 -> L2 -> L1. И это вполне обыденная ситуация. Бывают и более экзотические варианты. Например, мне встречалась схема, когда внутри VPN туннеля строился GRE туннель, внутри которого был ещё vxlan туннель. Вот уж где я наелся проблем с MTU и фрагментацией пакетов.

    Спасибо за уточнение про DHCP, я не сильно углублялся, но его всегда указывают между сетевым уровнем и сетевых интерфейсов по TCP/IP, а он еще и по UDP...
    DHCP, между прочим, считается прикладным протоколом (L7 по OSI).

    Я не собираюсь работать с сетями, но базовые знания нужны.
    Отличный настрой! Расширить кругозор всегда полезно.
  • Русский open-source, есть ли он?

    Vamp
    @Vamp
    Вы искали что-то конкретное и поэтому не нашли? Так-то российского опенсорса полно.
  • Почему поток не останавливается?

    Vamp
    @Vamp
    pshevnin, чтобы засыпали liche и sude, то wait() нужно вызывать именно в них. То есть в методе run(). А в методе main убрать wait() и оставить только notify().
  • Как подключиться к wss по такому адресу?

    Vamp
    @Vamp
    aspirantes, а дальше думать особо нечего - выкидывайте свой код и берите готовую библиотеку. Socket функции настолько низкоуровневые, что при их использовании вам придется самостоятельно написать код реализующий протоколы tls, http и websocket.