redmine и плагин redmine_gitosis

Обновил недавно redmine с 1.3 до 1.4.4, что поломало загрузку ключей в плагин с ошибкой

NameError (uninitialized constant GitosisPublicKeysController::ARCondition):

Выяснилось, что из redmine убрали нужную библиотечку, чтобы ее вернуть, достаточно положить файлик ar_condition.rb в redmine/lib. Взять файлик можно, например, отсюда.

Старый знакомый

Отловил сегодня баг, который меня беспокоил, наверное, 2 или больше года назад.

Предыстория такова: один из пользователей постоянно говорил, что его учетка блокируется ни с того, ни с сего. Причин тогда выяснить так и не удалось, списали все на вирусы, поставили ему политику блокировки достаточно лояльную к такому поведению и он успокоился. Я про эту проблему тоже подзабыл.

Недавно у некоторых пользователей на Windows 7 начали проявляться странные симптомы на компьютерах, не получалось входить на сетевые шары, не подключались сетевые диски и тому подобное. Как выяснилось, шары и диски были подключены через DFS. После нескольких попыток разобраться с DFS, починить DNS и прочее, выяснилось, что виновато RAS-подключение, через которое пользователю выдается интернет. Стоит его отключить, как все магическим образом начинает работать. После этого поиск ошибки стал делом техники, выяснилось, что при подключении к впн, Windows пытается пользоваться именно этой парой логин-пароль для авторизации (не знаю зачем это было добавлено). Отключается элементарно в файле, который отвечает за подключение, нужно заменить 1 в параметре UseRasCredentials на 0. Файл находится либо в профиле пользователя в каталоге %AppData%\Microsoft\Network\Connections\Pbk, либо в каталоге %ProgramData%\Microsoft\Network\Connections\Pbk

После этого мне в голову закрались смутные подозрения и я попробовал вернуть политику блокировки в первоначальное состояние. При подключенном RAS-соединении попытка зайти на DFS шару тут же вызвала блокировку учетной записи. Вот он, старый знакомый.

Убираем /index.php в nginx

У меня есть сайтик, где главная страничка статическая, а весь динамический контент генерируется через index.php, на нем потребовалось, чтобы не дублировались страницы /index.php, /index.html и /. Вот как это сделать в nginx

location ~ ^/index.(html|php)$ {
  if ($request_uri ~ ^/index.(html|php)) {
    rewrite ^.*$ / permanent;
  }
}

Теперь запросы на /index.html и /index.php будут давать 301 редирект на корень сайта, а сам сайт целиком будет работать как и прежде.

Squid и куча адресов

Некоторое время назад потребовалось поднять прокси на нескольких адресах, для этого я использовал программу proxy из комплекта 3proxy:

proxy -iIP -eIP -l/dev/null -d -p3128

Увы, когда адресов становится чуть больше чем несколько, это начинает утомлять своей избыточностью и кучей процессов. Поэтому было решено заменить кучу этих proxy на старый добрый squid. Ставится он из репозитория дистрибутива без всяких заморочек, поэтому опишу только конфигурацию.

acl all src all
http_access allow all
http_port 3128
access_log none
cache_store_log none
maximum_object_size 0 KB
minimum_object_size 0 KB
no_cache deny all
cache_dir null /tmp
forwarded_for off

Отключаем какой-либо контроль за входящими соединениями (их я фильтрую в iptables/ipset), логи, кеширование. Затем добавляем контроль заголовков:

# Header control
header_access Allow allow all
header_access Authorization allow all
header_access Cache-Control allow all
header_access Content-Encoding allow all
header_access Content-Length allow all
header_access Content-Type allow all
header_access Date allow all
header_access Expires allow all
header_access Host allow all
header_access If-Modified-Since allow all
header_access Last-Modified allow all
header_access Location allow all
header_access Pragma allow all
header_access Accept allow all
header_access Accept-Encoding allow all
header_access Accept-Language allow all
header_access Accept-Charset allow all
header_access Content-Language allow all
header_access Mime-Version allow all
header_access Cookie allow all
header_access Set_Cookie allow all
header_access Retry-After allow all
header_access Title allow all
header_access Connection allow all
header_access Proxy-Connection allow all
header_access Proxy-Authorization allow all
header_access Proxy-Authenticate allow all
header_access WWW-Authenticate allow all
header_access User-Agent allow all
header_access All deny all

Теперь ничего кроме заголовков, у которых указано allow за прокси не уйдет. X-Forwarded-For тоже отключен. Далее добавляем «магию» для IP-адресов:

acl ip1 myip 10.0.0.1
tcp_outgoing_address 10.0.0.1 ip1
acl ip2 myip 10.0.0.2
tcp_outgoing_address 10.0.0.2 ip2
acl ip3 myip 10.0.0.3
tcp_outgoing_address 10.0.0.3 ip3

Все, теперь все запросы, пришедшие на какой-то адрес, прокси будет отправлять с этого же адреса, что и требовалось.

HW RAID в Debian

Обнаружил полезный для владельцев железных рейд-контроллеров репозиторий Debian/Ubuntu, который так и называется HWraid.

Подключается оч. просто, например, для Squeeze нужно добавить в /etc/apt/sources.list:

deb http://hwraid.le-vert.net/debian squeeze main

Ключ для подписи, увы, авторы не прилагают, т.ч. просто используем -y —force-yes при установке пакета.

query string и rewrite в nginx

На одном из сайтов потребовалось сделать 301 редирект всех URL на индекс, я прописал в конфиг вот такую конструкцию:

if ( !-e $request_filename ) {
  rewrite ^.*$ / permanent;
}

Увы, URL, к которым добавлялись какие-то параметры типа http://example.com/url1?test=1 редиректились не совсем правильно: http://example.com/?test=1. Оказалось, чтобы этого избежать, подправить нужно совсем чуть-чуть:

if ( !-e $request_filename ) {
  rewrite ^.*$ /? permanent;
}

И все, редирект теперь срабатывает на http://example.com/

Sony Ericsson j108i (cedar) как модем

Смотрю, ищут подобный вопрос достаточно активно. На самом деле, проблем с этим никаких. Вот что надо сделать.

  1. Подключаем телефон к компьютеру. (Для пользователей Windows 7 есть инструкция)
  2. Запускаем PC Companion, выбираем приложение «Подключение к интернету»
  3. Жмем в нем кнопку «Подключить» и через несколько секунд связь будет установлена

Установка redmine на Debian Squeeze

Попросили сделать хост с редмайном для нескольких проектов, ставлю на Debian 6. В репах squeeze редмайн какой-то совсем старый, аж версии 1.0.1, а в бекпортах 1.1.2, хочется же последний, поэтому ставить буду из testing (или можно из unstable).

В файле /etc/apt/sources.list добавить строчку для testing:

deb http://ftp.us.debian.org/debian/ testing main contrib non-free

Сделать привязку к squeeze в /etc/apt/preferences или preferences.d, например, так

Package: *
Pin: release n=squeeze
Pin-Priority: 700

Package: *
Pin: release n=wheezy
Pin-Priority: -1

Далее установить редмайн командами

apt-get update
apt-get install mysql-server
apt-get install -t wheezy redmine redmine-mysql

Обновить придется половину системы, так что это будет уже не squeeze в чистом виде, но уж если хочется…

Теперь надо выдать через веб только что установленную систему. Есть множество способов это сделать, я использую apache+mod_fcgid

apt-get install apache2 libapache2-mod-fcgid libfcgi-ruby1.8

Создаем сайт для редмайна в /etc/apache2/sites-available/redmine с таким содержимым

SocketPath "/var/run/redmine/sockets/default"
<VirtualHost *:80>
  ServerName redmine.example.com
  DefaultInitEnv RAILS_RELATIVE_URL_ROOT ""
  DefaultInitEnv X_DEBIAN_SITEID "default"

  Alias "/plugin_assets/" /var/cache/redmine/default/plugin_assets/
  DocumentRoot /usr/share/redmine/public

  <Directory "/usr/share/redmine/public">
    Options +FollowSymLinks +ExecCGI
    Order allow,deny
    Allow from all
    RewriteEngine On
    RewriteRule ^$ index.html [QSA]
    RewriteRule ^([^.]+)$ $1.html [QSA]
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} dispatch.fcgi$
    RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  </Directory>
</VirtualHost>

Включаем сайт

a2ensite redmine

и рерайты

a2enmod rewrite

правим права на некоторые каталоги

chown -R www-data /var/run/redmine

перезапустим апач

service apache2 restart

и можно заходить на свежеустановленный редмайн как admin / admin. Не забудьте поставить скин BaseCamp.

debian squeeze 6.0.3 openvz template

Странно, что в сети нет явных ссылок на шаблон Debian Squeeze для OpenVZ с нормально обновленными пакетами. Решил выложить у себя, мало ли кому пригодятся.

Версия amd64

Версия i386