Задать вопрос
  • Как запускать данную команду без скрипта?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Вызываем справку:
    docker run --rm -v ${PWD}/:/var/task -u 0 node:15-alpine sh --help
    BusyBox v1.31.1 () multi-call binary.
    
    Usage: sh [-/+OPTIONS] [-/+o OPT]... [-c 'SCRIPT' [ARG0 [ARGS]] / FILE [ARGS] / -s [ARGS]]
    
    Unix shell interpreter


    Таким образом:
    docker run --rm -v ${PWD}/:/var/task -u 0 node:15-alpine sh -c "cd /var/task && npm install && npm ci"


    А можно и так:
    docker run --rm -v ${PWD}/:/var/task -u 0 --workdir="/var/task" node:15-alpine sh -c "npm install && npm ci


    Или вообще так:
    docker run --rm -v ${PWD}/:/var/task -u 0 --workdir="/var/task" node:15-alpine npm install && npm ci


    PS
    https://docs.docker.com/engine/reference/run/
    Ответ написан
    2 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • Php, слеш перед именем класса

    janson
    @janson
    PHP-разработчик
    1. Читаем мануал по namespace в PHP. Обязательно пригодится.
    2. Запись \DateTime() означает, что нужно использовать встроенный тип DateTime() который есть в PHP (он находится в корне пространств имён, т.е. начинается с '\' хотя если нет конфликтов, то слэш можно не указывать). Например у вас есть свой класс DateTime, находящийся в вашем собственном пространстве имён MySpace.

    Какой-то ваш файл app/MySpace/DateTime.php:
    <?php
    namespace MySpace;
    
    class DateTime {...}


    Где-то в своём index.php вы используете его:
    <?php
    ...
    ...
    require_once 'app/MySpace/DateTime.php';
    
    // если мы хотим создать объект СВОЕГО КЛАССА:
    $myDateTime = new \MySpace\DateTime();
    
    //Или так:
    use \MySpace\DateTime;
    $myDateTime2 = new DateTime();
    
    // а вот если хотим использовать встроенный класс DateTime в данной ситуации:
    $intDateTime = new \DateTime();


    Так что, если вы хотите использовать в определённый момент именно встроенный тип данных PHP, то безопаснее вписать слэш перед именем файла - избавляемся от неоднозначностей.
    Ответ написан
    Комментировать
  • Зачем ipsec помещать в ipip?

    ifaustrue
    @ifaustrue
    Пишу интересное в теллеграмм канале @cooladmin
    Давай по-порядку. Зачем вообще юзать IPSec - для того, чтобы защитить трафик идущий по публичным (или не очень) сетям. Сделать возможность перехвата, расшифровки или компрометации трафика минимальной. Для этих целей подходят туннели типа OpenVPN и IPSec (всё остальное либо проприетарное, либо ломается на ура).
    Имхо, oVPN больше подходит для приземления клиентов, а IPSec для связи сетей.

    Дальше. IPSec способен работать в двух режимах, туннельном и транспортном.

    Тот что ты описал - туннельный - после появления первого пакета с данными, подходящими под условия политики - поднимается туннель и остаётся открытым пока идёт траф или таймаут его не убьёт. Туннельный режим хорош тем, что, действительно, настроил политики и всё работает как бы само.

    Транспортный режим - соединяет трафик идущий между двумя точками - между двумя устройствами - без построения туннеля. Т.е. просто (де)шифрование пакетов. И для построения туннель нужно будет использовать отдельно IPIP, или L2TP или любой другой протокол Point to Point.

    Нафига же нам может такой понадобиться? Например если у тебя соединяются не две отдельные сети, а несколько с каждой стороны (политик в этом случае нужно в X*Y). А может ты строишь множественную связность, когда нельзя однозначно сказать через какой Peer доступна та или иная сеть (например с ospf внутри). А может быть у тебя по туннелю гоняется не IP трафф (а телефония или мультикаст или FoIP или ATAIP). А может так же ты гоняешь l2 пакеты (например, сбриджевал два офиса и у них общая адресация - при небольшом расстоянии вполне себе решение). А ещё иногда нужно перестроить сеть без сброса всех активных туннелей (что в предыдущем случае невозможно). В целом использование транспорта IPSec - гораздо более удобнее.
    Ответ написан
    10 комментариев
  • Привязка выполнения файла к инициализации в терминале?

    @ipc_ngs
    Используйте ключ -l при вызове su, это эмулирует логин пользователя и использование его .profile:
    su -l postrgres
    Ответ написан
    2 комментария
  • Как найти какой сервис будит машину из гибернации?

    @KriBetko
    Способ откуда-то из интернетов:

    Нужно выяснить от чего компьютер просыпается, можно сделать командой (от админа):
    1) powercfg -lastwake
    2) Дальше, смотрим перечень устройств, которые могут его разбудить: powercfg -devicequery wake_armed
    3) Через диспетчер устройство, выбрав нужное устройство, переходим в вкладку "Управление электропитанием" и снимаем галку "Разрешить этому устройству выводить компьютер из ждущего режима".

    Если это не помогло, смотрим остальные возможные wake timer"ы: powercfg -waketimers

    Наиболее частый случай для Windows 10 - это запланированная дефрагментация и обслуживания ПК ночью, отключить можно здесь:
    1) Идем в Планировщик заданий
    2) NT TASK\Microsoft\Windows\UpdateOrchestrator\Reboot
    3) Правый клик > Свойства > Условия
    4) Снимите галочку возле "Пробуждать компьютер для выполнения задачи"
    Ответ написан
    3 комментария
  • В чем особенности FreeBSD?

    @playnet
    Если позволяют ресурсы, имеет смысл сразу смотреть на ZFS, крайне интересная фс, с поддержкой кэшей записи и чтения на ssd, единым пулом разделов итд. Но оно же и под линукс есть, zfs-on-linux. Не просто так портировали. Требует много памяти, много свободного места (не менее 40% - дальше без тюнинга производительность падает на порядки), крайне аккуратного включения дедупликации - там сильная завязка на размеры пула, и совсем грубо - 1 гб рамы на 100 гб пула, и тоже сильно зависит от кучи условий.

    Хотя как админ фряхи года с 2002 - я бы сказал что время фряхи прошло, слишком низкая популярность означает недостаточный охват всего нового железа, проблема найти спецов на работу и просто помощь, отсутствие новых пользователей, недостаточное финансирование, малая известность, постепенный отказ даже тех вендоров, кто поддерживал (тот же isp официально свернул поддержку, с рейд-контроллерами не очень итд).. Такое болото, которое варится в себе. И чем дальше, тем больше разрыв с линуксом.
    А также: с виртуализацией всё плохо, как клиент - по сути рабочий только HVM с большими накладными расходами. Поэтому только XEN/KVM. Есть зародыш cgroups - jails, но по факту оно не развивается.
    Как хост - вроде как только virtualbox можно запилить, нативной HVM с поддержкой линь и вин-систем нет.
    Когда-то давно это была хорошая система для pptp и BGP, но сейчас и в лине есть хорошие реализации.
    Как веб-сервер - пока актуально, плюс полная имммунность к багам линь-ядра может попортить жизнь хацкерам. Хотя в этой сфере может быть лучше openbsd с заточкой под безопасность.
    Порты - плюс и минус. В 90% я хочу набрать "pkg install apache" без сборки сотен пакетов, с установкой за пару минут. А если у меня системный перл условно 5.12, а в пакете прописан 5.16 - мне обновит и перл. А значит надо обновить всё, что на нём завязано, то есть ВЕСЬ софт, по зависимостям это 95% в среднем выходит. Или компилировать, благо тут это делается штатно и легко, но с каждым скомпилированным пакетом уменьшается возможность пользоваться пакетами и растёт риск поломки после обновления, когда зависимость зависимости ссылается на старую версию либы, которой уже нет... Для нас любое обновление софта - всегда был стресс, а обновление всего что затрагивало пхп или перл - всегда что-нибудь отваливалось. Банально обновили курл - у пхп отломился libcurl у его php5-curl.
    С другой стороны, в портах есть выбор версий, те же пхп - 5.5, 5.6, скоро будет 7; перл так вообще с 5.16 по 5.22. Хотя дропнули пхп 5.2 - всё, приехали. Теперь любое обновление превращается в пляски "обновить пакет, откатить порты до поддержки 5.2, переставить весь 5.2, обновить порты", но теперь и так просто это не делается, центральные мейкфайлы поменяли. Сидим без обновлений.

    Отдельно идёт плохая производительность того же битрикса, один сервер - всё настроено, индекс производительности 20-30. Дебиан "из коробки" - 50.
    Так что сейчас есть несколько серверов на фре, но новые сервера уже идут на дебиане.
    Ответ написан
    5 комментариев
  • Как зарезать права учётной записи гостя, чтобы он мог запускать только браузер?

    Adamos
    @Adamos
    Зря тут речь идет про Windows 7. Под такое дело хорошо работает Debian, проверено.
    Более того, буквально парой строчек в конфиге можно ограничить браузер одним сайтом.
    А в винде дыры так или иначе все равно найдутся...

    Конфиг киоска на Debian:
    /etc/rc.local :
    !/bin/sh -e
    iptables -t filter -A INPUT -p tcp -s YOUR_SITE.ru --dport http -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp -d YOUR_SITE.ru --dport http -j ACCEPT
    iptables -t filter -A INPUT -p tcp --dport http -j DROP
    iptables -t filter -A OUTPUT -p tcp --dport http -j DROP
    iptables -t filter -A INPUT -p tcp --dport https -j DROP
    iptables -t filter -A OUTPUT -p tcp --dport https -j DROP
    su -- user -c "startx" &
    exit 0

    /home/user/.xinitrc :
    xset -dpms &
    xset s off &
    exec chromium -kiosk --start-maximized --disable-restore-background-contents --window-size=1280,1024 --disable-translate "http://YOUR_SITE.ru/PATH_TO_PAGE/"

    Запускается Хром прямо под иксами, без оболочек, и открывает нужную страницу. Ни на какие другие сайты доступа нет. Возможности вызвать какие-то другие программы, не имея пароля администратора - тоже ;)
    Ответ написан
    3 комментария
  • Как отключить системные обновления в Android 4.4.4?

    @beryozavv
    Можно отключить и без рута:
    1. Через панель уведомлений долгим тапом на уведомлении об обновлении, нажимаем на пункт меню "О приложении". Далее там отключаем обновление системы.
    2. Через меню настройки Настройки - Приложения - Все находим приложение "Обновление системы" и отключаем его.
    b74872ce3a994b55b22e847fcd810fcd.png
    Ответ написан
    3 комментария
  • Разница между background: url('...') и background: url(...)?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Если в значении функционала url() не присутствуют пробельные символы (пробелы, табуляция, переносы строк), кавычки и скобки, то разницы нет никакой.
    Пример — ссылка, data:uri в кодировке base64.

    Update: После обсуждения с Алексей Уколов внёс коррекцию

    Если же в значении могут появиться пробельные символы, кавычки и скобки, то при отсутствии обрамляющих кавычек их нужно экранировать (каждый символ).
    Если же обрамляющие кавычки есть, то экранировать нужно только внутренние кавычки в том случае, если они аналогичны обрамляющим. Если же обрамляющие и внутренние кавычки разные (например, внутри двойные, снаружи одинарные и наоборот), то никаких дополнительных действий не требуется.
    Пример — data:uri в кодировке utf8.

    Спецификация:
    Parentheses, whitespace characters, single quotes (') and double quotes (") appearing in a URL must be escaped with a backslash so that the resulting value is a valid URL token

    Пример jsfiddle.net/petroveg/cexbhq4e/6

    8192c6b0c21d43afa0b9b164af297655.png
    Ответ написан
    Комментировать
  • Как избавиться от насильного сглаживания шрифтов в Google Chrome?

    stas_agarkov
    @stas_agarkov
    Я программист
    Нужно включить параметр «Отключить DirectWrite Windows» на странице chrome://flags/
    Мне помогло.
    Ответ написан
    1 комментарий