Два дня пытался разобраться почему не проходит git push в мой репозиторий. Ошибка была вида «PUT xxxxxxxxxxxxxxxxxxxxxxx failed, aborting (22/413)». Грешил на WebDAV, даже попробовал настроить доступ к репозиторию через nginx (к слову push тогда работать не будет, т.к. nginx не умеет обрабатывать WebDAV комманды вроде PROPFIND). Проблема решилась, когда узнал, что «22/413» означает коды ошибок CURL/HTTP. А HTTP 413 — это «Request entity too large». Всего-то надо было поправить максимальный размер запроса от клиента
Страдания из-за ошибки от git push
Твиттерасты
Когда смотришь конференцию вроде HTML5 Camp всегда так смешно наблюдать как в модной колонке «Twitter» стадо повторяет одно и то-же друг за другом, стремясь засветиться.
Как я настраивал gitweb
Методом проб и ошибок, наконец разобрался как настроить себе на одном домене gitweb и доступ к репозиториям через HTTP. Ошибкой было то, что я считал, что достаточно одного gitweb а на деле оказалось ещё и небольшое шаманство с Апачем. За основу взята инструкция с хабрахабр.
- Первым делом установил сами пакеты:
aptitude install git-core gitweb
- Создал каталоги для репозиториев и веб-доступа:
mkdir -p /web/git.domain.tld/{htdocs,logs} /web/git.domain.tld/htdocs/git - Активируем модули DAV в Апаче, для доступа с помощью git:
a2enmod dav a2enmod dav_fs a2enmod rewrite a2enmod env
- Создаем конфигурацию gitweb:
vim /web/git.domain.tld/gitweb.conf
Например:
# адрес репозиториев $my_uri = "http://git.domain.tld"; # название сайта, отображается в заголовке $site_name = "git.domain.tld"; # путь к репозиториям git на жёстком диске $projectroot = "/web/git.domain.tld/htdocs/git/"; $git_temp = "/tmp"; # ссылка на «домашнюю страничку» $home_link = $my_uri; # текст, можно расскоментировать и вставить свой # $home_text = "indextext.html"; $projects_list = $projectroot; $stylesheet = "/gitweb/gitweb.css"; $logo = "/gitweb/git-logo.png"; $favicon = "/gitweb/git-favicon.png"; $projects_list_description_width = 40; $feature{'pathinfo'}{'default'} = [1]; - И на закуску самое вкусное — настройки Апача:
<VirtualHost *:80> ServerName git.domain.tld ServerSignature Off ServerAdmin admin@git.domain.tld DocumentRoot /web/git.domain.tld/htdocs/ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ SetEnv GITWEB_CONFIG /web/git.domain.tld/gitweb.conf Alias /gitweb /usr/share/gitweb/ RewriteEngine on RewriteRule ^/([a-zA-Z0-9_\-]+\.git.*)$ /cgi-bin/gitweb.cgi/$1 [L,PT] <Directory /web/git.domain.tld/htdocs> Options Indexes FollowSymLinks ExecCGI AllowOverride None Order allow,deny allow from all </Directory> <Location /git> DAV on <LimitExcept GET HEAD PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> ErrorLog /var/log/apache2/error.log <Location /> DirectoryIndex /cgi-bin/gitweb.cgi AuthType Basic AuthName "Version Control Server" AuthUserFile /web/git.domain.tld/htusers Require valid-user </Location> </VirtualHost>
Остается только завести пользователей в web/git.domain.tld/htusers и создавать репозитории в /web/git.domain.tld/htdocs/git. Например, создав myrepo.git (с опцией --bare) мы увидим его в списке проектов, зайдя браузером на git.domain.tld, а чтобы работать с ним через git надо будет использовать url http://git.domain.tld/git/myrepo.git/,
Оперативность = любовь клиентов
Вчера, на волне регистрации доменов в зоне .рф завёл пару адресов для своих проектов и собрался уже было использовать Linode в качестве DNS, как выяснилось, что у них национальные домены не поддерживаются. Огорчённый сим фактом завёл тикет и, не успел дойти до дома, как поддержка появилась и работает! Ещё один плюс в копилку карму этой компании.
А вот один игровой сервис уже два года шлёт мне письма о всяких своих новостях, из-за регистрации, сделанной там по глупости. А ведь ещё тогда завёл у них запрос на удаление аккаунта (опции такой в интерфейсе не было вообще). На днях повторил запрос, а воз и ныне там — ни прекратить слать своё говно ни стереть регистрацию они не могут/не хотят.
Ещё про почтовые сервера
Возвращаясь к предыдущей записи: одна весьма крупная и известная телекомпания не гнушается настроить свой почтовый сервер так, чтобы он в команде HELO называл себя «bender». Всем конечно приятно вспомнить героя с именем Остап-Сулейман-Берта-Мария-Бендер-Бей из хорошей книги (да, здесь должен быть тег irony), но правильно настроенные против спама почтовые системы разорвут соединение при такой команде HELO и вы не сможете ни восстановить пароль, ни получить код активации вашего профиля.
Халатность в SPF
Довольно давно пользуюсь на своём почтовом сервере модулем проверки письма на соответствие SPF-записям в DNS отправителя. Сегодня попался первый случай, когда она зарезала письмо, из-за халатности администраторов. С одного довольно серьёзного сайта с сериалами было отправлено мне письмо с приглашением (иначе попасть было никак), и доставлять его мне напрямую взялся сервер, отсутствующий в SPF-записи как возможный отправитель. Причём глупо выглядит когда проект, использующий явно не один сервер, представляется в SMTP совершенно другим доменом (но ладно, может у них до почтового сервера руки не дошли). Но факт — письмо зарезано, администраторам отправлено описание проблемы, но пока они молчат с решением.
Настройка админской панели в django
Интересная заметка на habrahabr про то как минимальными усилиями сделать из обычной админской панели django красивый и удобный интерфейс.
Do it satchmo way
Недавно потребовалось быстро развернуть более-менее универсальный магазин для нашего нового проекта торговли велотоварами. PHP-системы мне как-то не нравились и из симпатии к python начал было писать проект на django, но вскоре понял, что скорее всего получается велосипед, и начал искать что-то готовое. Оно пришло в виде Satchmo, весьма универсального и накручиваемого решения для электронной торговли. Что понравилось — немало настроек, в которых поначалу можно запутаться. Есть тонкости в адаптации под себя, но они описаны в документации (один отсутствующий момент — это как обновлять sitemaps, пришлось додумывать и доделывать самома). Но главное, магазин развернулся из коробки и через пару часов в нём уже можно было добавлять товары. А вот допиливания мелочей происходят уже по ходу, и зачастую незаметно для посетителей
Антивелосипед
Python опять обрадовал меня наличием готовых модулей для всего и вся. На этот раз повезло быстро разобраться с чтением конфигурации из XML файла — для этого идеально подошёл модуль xmlobjects и простая конструкция вида:
import xmlobjects import psycopg2 xml = """""" conf = xmlobjects.fromstring(xml) conn = psycopg2.connect('dbname=%s user=%s password=%s' % ( conf.db.dbname, conf.db.user, conf.db.password)) user password dbname
Получение приватного SSL-ключа без пароля
Защищать приватный ключ SSL-соединений паролем в большинстве случаев очень хорошая идея, но некоторое ПО (в частности некоторые классы PHP) не всегда нормально воспринимают такие файлы, особенно в формате PEM. Чтобы дать им счастье и умиротворение достаточно с помощью openssl провести пару простых операций импорта-экспорта и получить желаемый файл без паролей:
cat my.crt my.key > my.pem openssl pkcs12 -export -in my.pem -nodes -out my.pfx openssl pkcs12 -in my.pfx -out my-nodes.key -nodes -nocerts
В примере из файлов my.crt и my.key получаем незащищенный файл my-nodes.key. Взято отсюда.
последние отклики