Настройка dnsmasq для локальной машины (локальный wildcard)

Для того, чтобы не ползать править постоянно /etc/hosts при каждом заведении нового проекта на локалке хорошо бы заставить машину ломится по определенному домену на локальную машину всегда. Я как-то уже писал на эту тему, но решение там мягко говоря не самое простое. Я тут и там слышал про dnsmasq но как-то все не доходили руки разобраться. В общем, это совсем-совсем просто.
  1. sudo apt-get install dnsmasq (ну или brew install dnsmasq, кстати с brew была какая-то проблема небольшая, сейчас не вспомню на ходу)
  2. Идем открываем редактором файл конфигурации /etc/dnsmasq.conf (внутри конфига все расписано, но все опции закоменчены; в случае с brew конфиг лежит /usr/local/etc/dnsmasq.conf)
  3. Добавляем (или ищем и раскоментируем+правим то что уже есть в конфиге) две строки
    address=/.dev/127.0.0.1   # прибиваем гвоздями домен к ip
    listen-address=127.0.0.1 # слушать будем на этом ип
    
    Создаем папку (если нет)
    sudo mkdir /etc/resolver
    
    Создаем такой файлик под зону
    sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dev'
    
    Теперь все хосты вида *.dev будут завернуты на 127.0.0.1
    Любопытные граждане гуглят и читают комментарии в конфиг файле.
  4. Последний штрих, идем в свойства текущего сетевого соединения и в его свойствах указываем дополнительный DNS как свой локальный 127.0.0.1 (в формах настройки есть разница, но я думаю это просто и пояснения не нужны)
  5. И совсем последний штрих - перезапускаем dnsmasq
    sudo service dnsmasq restart
    
    Как это делается на маке я не помню, нужно поглядеть brew info dnsmasq
Вот собственно и все. Теперь /etc/hosts можно оставить в покое и прописывать везде локальные хосты в домене .dev
Жаль я забыл что у меня там с brew сломалось, но фикс нагуглился минут за 20, ничего серьезного.

P.S.:

А если ещё в nginx добавить что-то вида
server {

  server_name ~^(.*)\.my\.dev$;
  set $projectFolder $1;

  root /home/luke/projects/php/$projectFolder/public;
  index index.php;
  
  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}
то ещё и в конфиги сервера можно будет ползать значительно реже.
В этом примере будет достаточно просто размещать проекты на диске вот так
/home/luke/projects/php/project-one/public -> http://project-one.my.dev
/home/luke/projects/php/project-two/public -> http://project-two.my.dev
/home/luke/projects/php/project-three/public -> http://project-three.my.dev
/home/luke/projects/php/project-four/public -> http://project-four.my.dev

Автоматический перезапуск приложения после перезагрузки сервера

На самом деле эта заметка почти никакого отношения к node.js не имеет, сам по себе такой перезапуск может быть чего угодно и вообще есть другие варианты, но я как совсем ленивый гражданин не мог не воспользоваться такой халявой.
Суть такая: есть приложение которое должно автоматом взлетать после перезагрузки и поскольку в некоторых случаях (весьма неприятных) проконтролировать перезагрузку невозможно, надо прописать это приложение где-то на автозапуск. Использовать для этой цели (оказывается!) можно тот самый crontab. Я вожусь с линуксом уже лет 6-7 и понятия не имел о такой замечательной возможности. Есть два момента
  1. Нужно выбрать cron того пользователя от которого должно заработать ваше приложение
  2. Нужно воспользоваться простой как двери в милиции инструкцией @reboot
Итак, идем редактировать crontab для выбраннорого пользователя так
crontab -e -u user_login
Теперь добавляем наше распоряжение на действия после перезагрузки, например так
@reboot sleep 20; /home/user_login/restart-app.sh
В примере через 20 секунд после перезагрузки будет запущен выбранный скрипт. И вся любовь. Задержка взята по причине того, что какие-то сервисы у меня не стартовали до запуска искомого приложения и оно валилось не находя нужной для себя фигни. С такой задержкой все взлетает на ура.

Проблема с ssh-add

Картина маслом
ssh-add ~/.ssh/mykey_rsa
Could not open a connection to your authentication agent.
ЭЭ.. чего? Гуглим.. ок, нет агента, запускаем его.
eval $(ssh-agent -s)
Теперь ключ добавляется. Ладно вроде все окей. Только при следующем коннекте опять та же канитель!! То есть отключился от сервера, зашел под тем же логином и опять 25. Ровно тот же самый вопрос. При этом
ps axu | grep ssh
.. говорит что да-да, ssh-agent запущен и все круто. Но при следующем коннекте мы его не видим все рано. Во дела. Как быть-то..

Я знатно попарился разыскивая решение, но оно тупое как.. В общем убиваем агент, он не нужен будет
killall ssh-agent
Теперь делаем так
cd ~/.ssh/
touch config
echo IdentityFile ~/.ssh/mykey_rsa >> ./config
И таки все начинает работать, при условии что ключ сгенерен без парольной защиты, иначе будет трэбовать пароль после каждого нового логина и придется приплясывать снова ещё и с этим. Мне это надо было для автоматизации обновлений через баш-скриптик одной штуки, то есть зашел-запустил-вышел, минимум движений. Буду признателен за решение лучше.

Решение нашел тут.

Vim: копирование в буфер обмена

Поскольку с регистрами я до сих пор не разобрался, забываю эту ерунду постоянно. В визуальном режиме выбираем область для копирования и выполняем команду ниже
"+y
# для копирования в консоль под линукс, почему-то работает этот регистр
"*y
На эту тему есть небольшой скринкаст.

os x: как перезапустить Finder?

Оказывается можно не приплясывать каждый раз с консолью типа
killall Finder
Есть способ значительно более человечный. Зажимаем на клавиатуре Option (оно же alt) и кликаем правой кнопкой мыши по иконке Finder в доке. В меню увидим дополнительный пункт "Перезапустить". Просто как двери в милиции.


Первоисточник: osxdaily.com