3 заметки с тегом

хак

Настройки MAMP Pro для слабого интернета.

Слабый интернет, поэтому я стряхнул пыль с MAMP Pro и начал работать в нем. Возникла необходимость обновить ядро проекта с интернета и я получаю ошибку 500, а в логах следующее:

FastCGI: comm with server "/Applications/MAMP/fcgi-bin/php5.6.10.fcgi" aborted: idle timeout (30 sec)

Выход был найден при прочтении «FastCGI error when accessing a local development site using MAMP Pro».
Последовательность действий:

  1. Перейти в MAMP Pro File → Edit Template → Apache → httpd.conf
  2. Выполнить Find & Replace для MAMP_FastCgiServer_MAMP
  3. Закомментировать MAMP_FastCgiServer_MAMP
  4. Добавить линию конфигурации для вашей версии PHP с временным периодом, который вас устраивает:
FastCgiServer /Applications/MAMP/fcgi-bin/php5.6.10.fcgi -idle-timeout 3600

В результате в вас получится в httpd.conf следующее:

#MAMP_FastCgiServer_MAMP
FastCgiServer /Applications/MAMP/fcgi-bin/php5.6.10.fcgi -idle-timeout 3600

P.S. Важно не забыть вернуть все назад, когда появится нормальный интернет.

Time Machine на Tomato by Shibby для Asus RT-AC68U

Озадачился вот своим роутером. Надоела нестабильность стоковой прошивки и решил попробовать что-то новое. Решил поставить Tomato by Shibby. Про установку из под Windows достаточно подробно написано в публикации «ASUS RT-AC68U — How to flash TomatoUSB for RT-AC68U». Но у меня уже стояла прошивка от Merlin с открытым Telnet, поэтому все ограничилось подключением к роутеру и командами nvram erase, затем nvram commit, выбором файла с последней (131) прошивкой на её сайте и установкой.
В отличии от стоковой, у этой прошивки нет встроенной поддержки Time Machine, поэтому её пришлось добавить. Операция проходила в два этапа.

Этап первый: Установка репозитория Entware

Раньше нужно было сделать много манипуляций, но сейчас репозитории для моего роутера устанавливается достаточно просто. Проверьте доступ по SSH в роутере Administration → Admin Access и в путь.
Для флешки отформатированной в ext2/ext3 с меткой ENTWARE делаем следующие настройки роутера в USB and NAS → USB Support:
В поле Run after mounting вносим:

#!/bin/sh
/opt/etc/init.d/rc.unslung start

и в поле Run before unmounting следующее:

#!/bin/sh
/opt/etc/init.d/rc.unslung stop
sleep 15
for i in `cat /proc/mounts | awk '/ext3/{print($1)}'` ; do
  mount -o remount,ro $i
done

Не забываем сохранить изменения. Переходим в Administration → Scripts → Init page, вводим

echo "LABEL=ENTWARE /opt ext3 defaults 1 1" >> /etc/fstab

и вновь сохраняем. Перегружаем роутер и устанавливаем Entware. В текущей прошивке он устанавливается простой командой через Telnet.

entware-install.sh

Дополнительно об установке можно почитать в статье «Устанавливаем Entware.arm на маршрутизатор с прошивкой tomato от Shibby»

Этап второй: Настройка Time Machine

Приступим к настройке Time Machine и начнём с установки нужных пакетов. Может они не все нужны, поэтому комментарии экспертов приветствуются!
Устанавливаем netatalk для реализации протокола AppleTalk нужного для Time Machine и  avahi-daemon с утилитами, для имитации сервиса Bonjour. Bonjour нужен для наглядного представления Time Machine в Mac OS. Слухи ходят, что netatalk сам это умеет и он не нужен
Пакет busybox даст нам возможность использовать некоторые недоступные Unix команды. Например, добавлять пользователей.

opkg install netatalk avahi-daemon avahi-utils busybox

Создаём файл S00setup с первой строкой #!/bin/sh для загрузки настроек нужных для Time Machine при перезагрузке роутера и кладём его в /opt/etc/init.d/S00setup
Теперь сделайте его исполняемым

chmod +x /opt/etc/init.d/S00setup

Настраиваем avahi

Настройку avahi начинаем с создания файла afpd.service со следующем содержанием

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
    <service>
    <type>_afpovertcp._tcp</type>
    <port>548</port>
  </service>
  <service>
    <type>_device-info._tcp</type>
    <port>0</port>
    <txt-record>model=TimeCapsule6</txt-record>
  </service>
</service-group>

который кладём по следующему пути /opt/etc/avahi/services/afpd.service
Редактируем /opt/etc/avahi/avahi-daemon.conf, раскомментировав линию host-name и дав имя:

host-name=TimeCapsule

Чтобы TimeCapsule показывалась в Finder всем, нужно добавить группу nogroup для всех пользователей.

addgroup nogroup

Делаем автосоздание группы при перезапуске пользователя.

echo "addgroup nogroup" >> /opt/etc/init.d/S00setup

Запускаем avahi

/opt/etc/init.d/S42avahi-daemon start

и в боковой панели Finder должена появиться TimeCapsule.

Настраиваем netatalk

Приступаем к самому важному. Настраиваем netatalk начиная с редактирования файла /opt/etc/netatalk/AppleVolumes.default. Добавляем в конце следующую строку:

/mnt/LABELDISK/TimeMachine "TimeMachine" volsizelimit:300000 
veto:"/lost+found/Network Trash Folder/Temporary Items/" cnidscheme:dbd options:usedots,upriv,tm allow:USER

, где /mnt/LABELDISK/TimeMachine — путь к папке, где будут хранится бекапы;
«TimeMachine» — имя расшаренного ресурса, которое появится в настройках Time Machine в Mac OS;
volsizelimit:300000 — максимальный размер бекапов (~314GB);
veto:«/lost+found/Network Trash Folder/Temporary Items/» — прячем не нужные папки;
cnidscheme:dbd — уменьшаем количество ошибок (может влиять на скорость создания бекапа);
options:usedots,upriv,tm — показываем что можно использовать для создания Time Machine и кто может это делать;
allow:USER — пользователь имеющий доступ к папке для бекапов, которого мы сейчас создадим.

Поменяем конфигурацию netatalk по следующему пути /opt/etc/netatalk/afpd.conf удалив или закомментировав старую и вставив новую

- -tcp -noddp -uamlist -uams_dhx.so,uams_dhx2_passwd.so -nosavepassword

Эта конфигурация отключает гостевой доступ, возможность сохранить пароли локально и настраивает работу с паролями.

Создаём пользователя USER с паролем PASS (это пример, пароль какой вы хотите) и даём ему права на папку для бекапов.

adduser USER
chown -R USER /mnt/LABELDISK/TimeMachine/

Настраиваем автосоздание этого пользователя при перезагрузке роутера.

echo 'adduser USER' >> /opt/etc/init.d/S00setup
echo 'echo -e "PASS\PASS" | passwd USER' >> /opt/etc/init.d/S00setup

Вот тут загвоздка! Пользователь создаётся, но пароль ему не присваивается. Может кто подскажет?

В результате у нас получается следующее содержимое файла /opt/etc/init.d/S00setup

#!/bin/sh
addgroup nogroup
adduser USER
echo -e "PASS\PASS" | passwd USER

Перезапускаем netatalk

/opt/etc/init.d/S27afpd restart

Или просто перезагрузите роутер целиком. Теперь вы должны подключиться к TimeCapsule как созданный выше пользователь и настроить Time Machine на Mac OS.

P.S. Я ещё не достаточно долго тестировал работу Time Machine на Tomato by Shibby и мог что-то забыть, поэтому возможны неточности.
P.S.S. Дополнительно можно почитать «Using an ASUS router as a Time Capsule», «Concisest guide to setting up Time Machine server on Ubuntu Server 12.04, 14.04 & Debian» и «Time Capsule on OpenWRT (Apple File Protocol Server with Time Machine Support)».

Работаем над ошибками или метод резинового утёнка

Прочитал «7 золотых правил одного программиста» и первое напомнило о методе резинового утёнка. О нём мне рассказал друг программист, когда я жаловался ему на сложность нахождения ошибки в коде. В публикации даётся следующий совет при поиске ошибки:

Ну что там у тебя? Поговорим? Резиновый утёнок

«Универсальный совет — идите спать! Ну или хотя бы отвлекитесь на чашку чая. Когда, через некоторое время, вы вернётесь к коду наверняка станет ясно, что тут лишний оператор отрицания, или перепутаны две переменные с похожими именами, или ещё какая-нибудь мелочь, в которой мы никогда никому не признаемся.»

Совет отличный! В школе немало задач по физике решены следуя этому совету. Но что делать если сроки горят? Спать, чаёвничать или гулять не вариант! На помощь приходит метод резинового утёнка.

Метод заключается в том, что на стол ставится игрушка (резиновый утёнок). А при поиске ошибки ты с ней ведёшь диалог. Объясняешь игрушке, что делается в каждой строке кода. И часто в этом диалоге и находишь спрятанную ошибку. Игрушку можно представлять в воображении и это может быть и не игрушка. Эйнштейн, ваш ребёнок или другая личность для мысленного диалога. Ну а если есть возможность пообщаться вслух, то это еще лучше. Тогда к поиску ошибки подключаются и ваши уши.

У вас ошибка в коде? Резиновый утёнок спешит на помощь!