Debian.pro

Блог для пользователей и администраторов Debian


Не используйте make install, !&*%$*, или повесть о checkinstall.

Я знаю много таких бяк, которые делают плохую вещь и ставят софт на сервер через make install. Особенно это огорчает, если ставят какой-нибудь nginx (пытаешься поставить его потом из пакета — и удаляешь по кусочкам ходишь). Потому что папки с исходниками уже нет, и make unistall сделать нельзя.
В итоге на сервере получается бардак, софт не обновляется, обрастает известными уязвимостями. И в один прекрасный момент от крона вам приходит письмо вида «chown root.root /tmp/sh && chmod +x /tmp/sh: sucessfully done», а через пару часов хостер банит ваш сервер за исходящую ддос атаку.

Данную проблему призвана решить утилита checkinstall.
Поставим её:

root@server:~# apt-get install checkinstall

И запоминаем навсегда, что вместо make install мы делаем checkinstall, а потом ставим получившийся deb-пакетик.

Обычно на это и заканчиваются все мануалы по checkinstall’у. Но инструмент куда умнее, чем кажется на первый взгляд. Во-первых, он умеет собирать RPM-пакеты, deb-пакеты и slackware пакеты (ключи -R/-D/-S, соответственно). По умолчанию ставится ключ, соответствующий вашему пакетному менеджеру. Ебилды не умеет, да =)

Во-вторых у него есть ключ --install, который сразу установит созданный пакет.

Пакеты могут быть названы вполне аккуратно при помощи ключей --pkgname и --pkgversion. Тогда они вообще прекрасно вклинятся в базу dpkg.

Полезной может стать опция --nodoc (зачем хранить документацию на каждом сервере?)

Если вы собираете библиотеку (или что-либо, содержащее shared-libs) — вам будет полезна опция --addso (тогда при установке пакет добавит записи в /etc/ld.so.conf).

Нередко будет полезной опция --reset-uids — ставит chmod 755 на все файлы и chown root:root на все каталоги.

В итоге, вместо make install, стоит делать примерно следующее:

root@server:~# sudo checkinstall --pkgname progname --pkgversion 1.0-nmu --install

Комментарии (18):

  1. Алексей :

    спасибо, полезная штука)

  2. Ritsufag :

    Из исходников ставить софт на сервер? Месье знает толк в извращениях.

  3. Если вы про факт сборки софта — то найдите мне deb-пакет nginx’a, который вызовет у меня доверие, в котором есть модули nginx-headers-more, nginx-chunkin, ну и парочку каких-нибудь ещё.
    Если вы про факт установки через make install — то вы невнимательно читали статью.

  4. Какие опции должен поддерживать таргет install в Makefile что бы всё работало?

    Я не пользуюсь autoconf, Makefile написан вручную.

  5. У вас не собирается что-то?

  6. Ну как сказать, не собирается =) У меня всё собирается, я автор http://erlyvideo.org/

  7. О, мне как раз недавно про твой продукт таска приезжала хД Последняя версия deb-пакета в Squeeze не ставится, откатываться пришлось.

    Вообще checkinstal хитрый, я пока не встречал вживую исходника, который собирается через make, который бы не собрался checkinstall’ом. С cmake были проблемы, но это отдельная история.

  8. Последняя версия — да, не будет ставиться, потому что я собирал erlyvideo вместе с забандленным эрлангом под Ubuntu 12.04, в которой совсем свежая glibc.

    Но erlyvideo версии 2 уже закрытая тема. Сейчас уже третья версия и я её хочу пропихнуть в дебиан.

    Что же касается checkinstall, то у меня вообще нет таргета install в Makefile =)

  9. Т.е. у меня есть подозрение, что этого: https://github.com/erlyvideo/flussonic/blob/d8cb03c6055b9b97c2014f792f6f54a6009559f3/Makefile#L9 будет недостаточно для того, что бы отработал checkinstall

  10. install: all
    mkdir -p $(DESTDIR)
    cp -r Emakefile Makefile apps contrib deps priv rebar wwwroot $(DESTDIR)

    Должен отработать.

  11. Кирилл :

    checkinstall —pkgname avrdude —pgkversion 6.0.1

    make: *** Нет правила для сборки цели ‘install’. Останов
    *** Установка неудачная. Отменяется создание пакета.

    куда копать?

  12. Что собираете-то? У него точно можно делать make install? make отработал?

  13. kirill :

    Ну дак если make install Делать не рекомендуется, то я и не делал, соответственно, а собирал deb-пакет. Поэтому не знаю, делается ли успешно make install.
    Собираю программу для программирования микроконтроллеров avrdude. Нужно не ниже версии 5.2, а в репозиториях только 5.11.
    src: http://download.savannah.gnu.org/releases/avrdude/

  14. > Ну дак если make install Делать не рекомендуется,
    Просто make. Сначала исходники скомпилировать нужно, а потом уже пакет собирать.

    > Нужно не ниже версии 5.2, а в репозиториях только 5.11.
    Версия 5.11 выше 5.2 на примерно 9 версий ;)

  15. Евгений :

    Копирую из статьи команды, а в консоле какие-то дефисы неправильные, пришлось руками набрать, что бы запустить chekinstall с параметрами.

  16. Евгений :

    checkinstall конечно же, опечатка.

  17. Поформатировал статью правильно, спасибо.

  18. yukra :

    >Вообще checkinstal хитрый, я пока не встречал вживую исходника, который собирается через make, который бы не собрался checkinstall’ом. С cmake были проблемы, но это отдельная история.

    vsftpd 3.0.3 у меня сегодня не собрался на debian7, поругавшись что маны некуда положить.

Написать комментарий