Рассматривается такя ситуация: надо заставить sendmail сервера отправлять почту, но ничего в ответ не принимать. Строго для оповещений с сайтов. У меня вдс-ка с предустановленным exim4 на который, насколько я понимаю, "ссылается" sendmail. Т.е. фактически работает exim4.
Сначала настраиваем хост (my-host-name это имя нашего хоста с которого все будет ездить)
sudo mcedit /etc/hostsВ файле должны быть строки вида
127.0.0.1 localhost 111.111.111.111 hostname.my-hoster.net my-host-nameДалее меняем имя хоста в файле
sudo mcedit /etc/hostnameФайл должен выглядеть вот так (полностью, т.е. только имя хоста и все)
my-host-nameТеперь перегружаем службу которая грубо говоря обновляет имя хоста глобально
sudo /etc/init.d/hostname.sh stop sudo /etc/init.d/hostname.sh start # если такого скрипта нет, то пробуем иначе: sudo service hostname restartREM ещё такой вариант есть, для Debian 9 (stretch)
hostnamectl set-hostname my-host-nameТеперь выполняем команды
hostname hostname -fЕсли все правильно сделано, то они обе должны вернуть значение my-host-name (т.е. имя вашего хоста)
Теперь надо настроить сам sendmail. В моем случае, нужно перенастроеить exim4. Делается это примерно так:
sudo dpkg-reconfigure exim4-configПосле этого в мастере просто нужно выбирать значения (именно для exim4)
- internet site..
- вводим название вашего хоста (my-host-name)
- ip для smtp устанавливаем только 127.0.0.1 т.к. нам не нужны внешние подключения по smtp
- другие допустимые назначения оставляем по умолчанию
- домены для разрешенного релея - оставляем пустым
- машины для релея - оставляем пустым
- кол-во днс запросов на ваше усмотрение, я не ограничивал
- метод доставки я оставил тот же который был, т.е. /var/mail
- разделять не разделять файлы конфигурации - на ваше усмотрение, аргументы там описаны, я разделять не стал
sendmail -i my-email@my-host.comДалее вводим тект тестового сообщения. И по готовности нажимаем Ctrl+d
Идем проверяем свою почту. Если письмо пришло - все ок и ура. Если нет - идем гуглить дальше :)
Дальше надо убедиться что на нашем сервере недоступен smtp, для этого нам надо сходить с локальной машины постучаться в 25 порт сервера и получить отлуп. Делается это например так:
telnet my-host-name 25 Trying 111.111.111.111... telnet: Unable to connect to remote host: Connection refusedЕсли все так, то все тип-топ. Порт закрыт.
Ещё маленькая фишка. Бывает так что по каким-то причинам, сервис рулящий веб-приложением надо перезапускать регулярно. В моем случае это node.js и делаю я это по крону раз в N времени. Так вот если перезапустить процесс кроном, то sendmail перестает работать, потому как приложение не знает где он, в path пути до него просто нет и соот-но он просто не находится. Точно так же можно передавать любые другие настройки переменных окружения. Как это делать смотрим ниже.
Сначала посмотрим где sendmail
which sendmail /usr/local/bin/sendmailОк, видим путь. Если вдруг не видим то идем смотреть тоже самое но под sudo. Теперь идем в кронтаб и добавляем переменные окружения там.
crontab -eОткроется редактирование заданий для текущего пользователя. То есть все задания будут выполнены с правами текущего пользователя и сервис запустится с правами этого пользователя, если он запускается конечно согласно вашему плану :)
# это переменная которая рассказывает где искать sendmail, # другие нужные пути можно писать через разделитель - двоеточие # там будут искаться необходимые нам утилиты PATH=/usr/local/bin # это пример переменной окружения которую будет использовать само приложение NODE_ENV=production # это собственно само задание, гуглим по формату crontab чтобы понять что к чему # в данном случае скрипт будет срабатывать в 30 минут каждого четного часа */30 */2 * * * /home/user/blog/scripts/restart.shНу вот примерно так. Прошу не воспринимать эту заметку как полное руководство к действию, вполне возможно что для вашего случая все будет значительно отличаться. Но возможно это как-то поможет или хотя бы наведет на мысли в нужном направлении :) Успехов!
Пользовался вот этим источником. Рекомендую на него взглянуть, надеюсь он ещё дышит.
find /path/to/directory -type d -exec chmod g+s {} \;Вики: http://ru.wikipedia.org/wiki/Suid
git config --global --add color.ui trueЭта инструкция добавит глобальную настройку в ваш конфигурационный файл ~/.gitconfig и сделает вывод цветным для всех операций со всеми вашими репозиториями.
Это я нагуглил и решил записать. А то голова как унитаз..
И раз пошла такая пьянка..
# установить имя пользователя для всех своих репов config --global user.name ijin # установить email config --global user.email mail@mail.com # посмотреть лог коммитов за последнее время git log --since="30 minute ago" # откатить последний коммит в git (поправить коммент например) git reset --soft HEAD^ # посмотреть список локальных тегов git tag -l # удалить все локальные теги и получить все теги с удаленного репозитория git tag -l | xargs git tag -d git fetch # создать тег git tag tagName # отправить новые теги в удаленный репозиторий вместе с новыми коммитами git push --tags # удалить локальный тег git tag -d tagName # удалить тег в удаленном репозитории (origin) git push --delete origin tagName # выкатиться с тега git fetch --tags git checkout tagName # откатиться на предыдущий установленный тег, круто для отката на боевой при контроле установки тегов git checkout tagName^ # посмотреть текущий тег проекта git describe --tags # посмотреть настройки для текущего репозитория git config -l # посмотреть глобальные настройки Git git config --global -l # установить простой глобальный алиас для вывода лога, см. git help log # теперь в репозиториях будет работать git ll git config --global alias.ll "log -20 --pretty='%Cred%h %Cblue%an %ar %Cgreen%s'" # смотрим путь к удаленному репозиторию git remote -v git config -l # правим путь к удаленному репозиторию git config remote.origin.url "git@192.168.1.100:repo.git" # если нужно добавить файлы к последнему коммиту или поправить комментарий git commit --amendВообще Git очень нравится. Очень продвинутая VCS, просто песня.
Книжка со всем необходимым про Git живет тут.
Онлайн курсы по Git можно найти например тут.
UPD: Таже самая цель, но меньшей кровью — настройка dnsmasq
Зачем это надо.
Надо это затем что есть например 10 локально поднятых проектов на рабочей станции разработчика. Этот разработчик
- Для работы с локальной копией проекта редактирует конфиг своего веб сервера (apache, lighttpd etc.) и указывает в конфиге имя хоста для этого локального проекта.
- Потом перезапускает веб сервер.
- Потом тащится редактировать /etc/hosts Прописывает там имя хоста и локальный ip.
- Потом выясняет что этот прописанный хост перекрывает тот который был в интернете или он ошибся когда прописал имя в конфиге веб-сервера или в hosts.
В итоге всего этого занудства как правило тратится драгоценная нервная энергия которую можно потратить более эффективно на что-то поинтереснее.
Что я предлагаю сделать.
Я предлагаю сделать локальный домен (в примере .mydev) и сократить процедуру выше до двух шагов:
- Прописываем конфиг веб-сервера с хостом вида projectname.mydev
- Перезапускаем веб-сервер.
И всё. И радостно начинаем допиливать наш проект по заданному имени.
Что будем делать, TODO
- Установим DNS сервер.
sudo apt-get install bind9 - Идем разглядывать собственно конфиги. Принцип нашей этой гадости состоит в том что на данный момент при обращении к какому-либо хосту (это грубая схема) наша машинка ломится на провайдерский DNS выданный ему провайдером или прописанный иным образом это не суть. Получает собственно у DNS-а айпишник хоста ну и соответственно отправляется за данными в его сторону. Дальше нам не интересно.
Как будет. Будет так: при обращении к какому-либо хосту, мы будем обращаться к локальному DNS серверу, который будет проверять наши правила и если запрос не попадает под наши правила, то наш локальный DNS идет и спрашивает тоже самое у провайдерского DNS-а. И отдает нам уже собственно его (провайдера) ответ. Итак, идем к конфигам
cd /etc/bind
Я пользуюсь mc, это удобно, рекомендую. Нам понадобятся права суперпользователя, так что либо sudo mc, либо sudo mcedit filename при редактировании каждого файла, вопрос с правами я далее затрагивать не буду. - Открываем на редактирование named.conf.options
Тут нас интересует секция forwarders её нам нужно раскомментировать и указать IP адрес(а) DNS сервера провайдера (или может быть роутера, смотря как организован выход в интернет). Сохраняем, выходим. - Открываем на редактирование named.conf.default-zones
Тут нам вниз нужно добавить новую зону. Выглядеть новая секция будет вот так:zone "mydev" { type master; file "/etc/bind/db.mydev"; };
- По указанному пути создаем файлик
sudo cp /etc/bind/db.local /etc/bind/db.mydev
То есть просто делаем копию описания локальной зоны. Нам нужно будет в ней кое-что отредактировать. Итак копию сделали, теперь: - Открываем на редактирование db.mydev
Там нам нужно исправить всего несколько строк. В итоге наш db.mydev будет выглядеть вот так:$TTL 604800 @ IN SOA mydev. root.mydev. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS mydev. @ IN A 127.0.0.1 * IN A 127.0.0.1 @ IN AAAA ::1
Жирным отмечены строки которые были отредактированы или добавлены. Сравните с оригинальным db.local для того чтоб было понятно что произошло. По сути ничего особенного. - Теперь остается только перезапустить наш DNS
sudo /etc/init.d/bind9 restart - Ну и проверяем теперь как эта карусель работает.
ping 11.mydev
ping 22.mydev
Если работает то IP должен быть тот что вы указали (в примере 127.0.0.1) Но сейчас ничего не работает. Потому что.. - Забыл рассказать про грабли. Наш уважаемый NetworkManager автоматом прописывает в /etc/resolv.conf адрес DNS провайдера. Если там будет прописан внешний DNS то наша поделка пролетит как фанера над Парижем. Обращения в сеть просто пойдут мимо неё. Чтобы это дело устранить, нужно зайти в свойства текущего подключения к интернету, "Изменить соединения" => Выбираем наше соединение => "Параметры IPv4". Тут указываем IP нашего локального DNS (в примере 127.0.0.1), сделать это можно выбрав метод "DHCP, только адрес". Этого должно быть достаточно. После этого через NetworkManager соединение разрываем и снова устанавливаем. Если все ок, то в /etc/resolv.conf мы должны увидеть наш искомый IP, тот что прописали как DNS в NetworkManager.
- Вот теперь проверяем результат.
Вот собственно и всё. Теперь можно не трогать /etc/hosts. Прошу обратить внимание, что решение я нашел сам и возможно оно неоптимальное или даже неправильное, но однозначно рабочее. Ничего подходящего я в интернете по форумам не нашел.