Pull to refresh

Comments 47

UFO just landed and posted this here
В какой блог перенести? Может «Разработка» или «Убунтариум»?
Может, стоит перенести в блог Убунтариум?..
Это наиболее близкий блог по тематике? А не лучше будет в «Разработку» перенести?
Когда в следующий раз появится статья про «установим PHP из исходников», буду на Вашу ссылаться, как на образец.
Спасибо!
UFO just landed and posted this here
UFO just landed and posted this here
Можно попробовать использовать git svn, но я не использую там теги — поэтому не знаю получится ли залить их в svn.
В крайнем случае можно использовать номер ревизии с git-svn-id, а версию делать 1.0.НОМЕР_РЕВИЗИИ
Можно попробовать checkinstall, который сделает почти всю грязную работу сам.
Смысл был не в том, что бы установить пакет на локальной машине, а что бы на локальной машине собрать пакет и установить его на серверах
Одной из возможностей checkinstall как раз является сборка пакетов: вот и вот
Гораздо полезнее было бы подготовить директорию для сборки пакета со всякими control.
Потому что автоматически собранный пакет это совсем не то, что надо — надо подправить стартовые скрипты, настройки в /etc/default кинуть и тп.

Мне больше понравился вариант с tap2deb — эта утилита готовит для приложения на twisted все требуемое — остается обтесать и собирать.
Какие отличия будут для убунту?
Как пропписать действие(!) при установке обновлении, чтобы прописать в другие конфиги пару строк?
В убунту те же менеджеры пакетов. apt и aptitude.
Ну я поэтому и спросил, какие отличия.

postinst файл — ответ на мой второй вопрос.
Да тупо добавляешь свою репу в sources.list и будет тебе счастье. Вот же беда…
Я задал вполне конкретный вопрос, если что. Можно не отвечать: отличий нет. Но вот прочитать вопрос перед ответом все же было желательно.
>Как пропписать действие(!) при установке обновлении, чтобы прописать в другие конфиги пару строк?

Извиняюсь, но это все что я понял из заданного вопроса. Об такой вопрос можно мозг сломать.
У нас как раз пакет собирается на локальной машине с Ubuntu, а заливается на офисный сервер с Ubuntu Server и на площадку на Debian Lenny.
Для выливки с++ кода на Debian есть одна проблема — версии пакетов зависимостей могу не совпадать. Для её решения мы используем chroot дебиана на локальной машине с ubuntu в котором версии пакетов те же что и на бою. В chroot-е собирается пакет, а потом выливается на бой.
Для задания действия при установке достаточно добавить shell скрипт с именем postinst (детальнее тут).
Ну я думаю, что не обязательно shell )
Да, можно любой. Допустим, на любимом разарбочиками Ubuntu python'е.
не обязательно :) но он должен обрабатывать небольшой набор передаваемых параметров.
UFO just landed and posted this here
Да! Если возможно, то было бы неплохо узнать про отличия от deb-пакетов.
Кстати все таки советую не лениться, а сделать свой ключ и подписывать им репозитарий и внести его в доверенные на всех серверах. В интернетах были руководства и готовые скрипты для автоматизации.

Вот когда то давно писал — deepwalker.blogspot.com/2008/03/ubuntu.html
Где Вы были два дня назад, когда я читал многостраничные мануалы)
Спасибо, в избранное.
Это работающий, но не совсем правильный способ сборки deb-пакета.
Для облегчения этой задачи есть набор утилит debhelper, которые позволяют создавать «рыбы» пакетов, автоматически заполнять их и собирать, соблюдая все зависимости (debuild).
Если интересно — могу немного рассказать.
Будет время попробую и правильный способ вместе с pbuilder-ом.
А какие преимущества он даст (ну окромя автоматической генерации зависимостей пакета)?
Было бы весьма интересно.
в составе утилит серии dh_make есть утилитка, котрая автоматически вычисляет зависимостии запихивает их в заголовок пакета
хотя для пакета-сайта, оно, конечно, не требуется.
Требуется как раз ;)
Пяток пакетов типа ZF, jQuery с модулями, Rich-редактора и прочих обновляемых либ все же придется тащить ;)
А что вы подразумеваете под «выливки сайта на сервер»? Весь серверный код (php/python-скрипты), вёрстку, картинки?
Нельзя ли пару слов о преимуществах перед (например) какими-нибудь скриптами для SCM-системы, которая закачивает изменения на сервак (вроде для svn это можно делаеть через хуки, не уверен)? Для чего это, что даёт?
Да именно — код на php, swf-ки, верстка, статические картинки. Ну а так же все демоны, обслуживающие сайт. Как раз из-за демонов и было прийнято решение перейти на пакеты.
Используя пакеты вместо VCS облегчается сама выливка. И её может проводить не программист, а админ (который умеет работать с пакетной системой и не хочет знать что такое код и как его выливать).
Для выливок сугубо скриптовой части, в принципе, подойдут и Capistrano, Vlad the Deployer и похожие утилиты (они могут забирать исходики с VCS, но это не отменяет того, что их можно использовать в комбинации с пакетами).
Раньше мы использовали такую схему: на офисном сервере делали чекаут конкретной версии исходников, rsync-ом заливали код на все сервера и билдили демоны на каждой машине. Тогда боевые сервера были на Gentoo и такой метод был приемлем, хотя и вызывал более длительные выливки чем нам хотелось. Сейчас мы перешли на Debian и использовать его пакетную систему было логично. К слову раньше минимальная выливка занимала около полу часа (пока зальются все изменения, пока соберется код). Теперь все пакеты загружены на сервер до выливки. Админ вызывает apt-get install, рестартует демоны и проводит небольшую проверку. Это занимает отсилы 5 минут.
А пулить код с боевого сервера не такая уж и хорошая идея. Недавняя история с уязвимостю с svn подтверждает это. Лучше пушить код на сервер, который ничего не знает о сервере, где код хранится. Но это сугубо моё личное мнение.
Сам некоторое время собирал свой проект именно так, сляпанным на коленке control-файлом и dpkg -b :)
Потом всё-таки собрался с духом и довёл до ума, чтобы собиралось с помощью dpkg-buildpackage, теперь горя не знаю: заливаю на OBS и он собирает мне под любые архитектуры и любые релизы Дебиана/Убунты.
Остался последний шаг, который я всё никак не соберусь сделать: надо добавить gpg-ключ.
есть программа checkinstall, которая из исходников делает и .rpm и .deb, а заодно и устанавливать в систему этот пакет может. версию и зависимости можно прописывать интерактивно.
то как это делает чекинсталл… лучше бы и не делало.
ни зависимостей, ничего.
единственный толк от него это возможность потом штатно удалить, а не вычищать систему.

а уважаемый коллега все же писал статью как сделать пакет который будет ставится на другие сервера+к тому с зависимостями и версионностью.
при использовании checkinstall можно задавать зависимости. Автор же предлагает точно также указывать зависимости в файлике с незатейливым именем «control»
этот «незатейливый» файлик — часть стандарта при создании пакета для дэбиан.
сорри, не знал, что чекинсталл хоть чему-то научился, использовал его году в 2002.
на самом деле, чем руками создавать control и товарищи тебе тут правильно рекомендуют dh_make, который создает болванку директории со всеми файлами.
я тут просто свежий luarocks в пакетик заворачиваю, вот и столкнулся с вопросом тоже :)
Было бы очень интересно почитать про приемущества такого способа (deb-пакеты) для обновления сайта перед остальными (svn, к примеру) в отдельной статье. А то методика есть, а цель её не совсем ясна. Да и в Сети таких статей (сравнений методов обновления сайта) я, к сожалению, не нашёл :(

Привести примеры задач, для которых это требуется и т.д.

P.S. Да, в комментариях выше это частично объясняется, но только частично. Хотелось бы более развёрнуто.
Ну тут дело не в преимуществе одного метода над другим, а выборе верного метода под конкретную задачу. К примеру:

1. git/svn/hg/… — для контроля версий
2. deb/rpm/… — для хранения бинарных данных, трекинга зависимостей, менеджмента версий средствами ОС
3. capistrano/vlad the deployer/… — для автоматизации работы на нескольких серверах, автоматизации выливки и отката изменений и тд.

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

Для сайта на одном-двух серверах, который состоит из нескольких модулей и сложными зависимостями на установленые приложения (либо включает в себя компоненты на с/c++, которые должны быть собраны в бинарники) — оптимальным будет использование пакетов, так как часть работы ложится на пакетный менеджер ОС.

Для развернутых на большом числе машин и сложной системой развартывания — лучше использовать специальные системы деплоя типа capistrano. Причем можно использовать в комбинации как с vcs, так и с теми же пакетами.

У меня мало опыта работы с системами автоматического деплоя, но есть планы по внедрению capistrano в недалеком будущем. После этого постараюсь оформить полученный опыт в статью, в которой сравнить все три указанных подхода.
Sign up to leave a comment.

Articles

Change theme settings