Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

15:58 Рубрика: Linux

da577538

 

К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.

 

 

Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Лирическое отступление


Как известно, для нормальной работы большинство софта должно быть не только скомпилировано, но и правильно установлено в системе. Программы ожидают найти нужные им файлы в определённых местах, и места эти в большинстве *nix-систем зашиты в код на этапе компиляции. Помимо этого аспекта основным отличием процесса установки в linux/freebsd/whatever от таковой в Windows и MacOS является то, что программа не просто складывает кучу файлов в отдельную директорию в Program Files или /Applications, а «размазывает» себя по всей файловой системе. Библиотеки идут в lib, исполняемые файлы в bin, конфиги в etc, разного рода данные в var и так далее. Если вам вдруг понадобится её обновить, то всё это надо сначала как-то вычистить, т. к. при использовании новой версии остатки файлов от старой могут привести к совершенно непредсказуемым последствиям, зачастую нехорошим. Вероятность этого события не так велика, но оно вам надо на боевом сервере?

И что с того?


Так вот, если вы делали установку напрямую через make install, то нормально удалить или обновить софтину вы, скорее всего, не сможете. Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах. make install делает ровно то, что ему сказано — производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Помимо этого хранить для деинсталяции распакованное дерево исходников и правил сборки как-то странно.

Как бороться?


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

  1. берётся определённым образом сформированный архив
  2. из него извлекается информация о том, что это вообще такое, какой версии, от чего зависит, с чем конфликтует, надо ли для установки/удаления/настройки запускать какие-то скрипты, etc
  3. Выполняются действия по непосредственной установке
  4. Все данные о том, куда и что было поставлено добавляются в базу данных пакетного менеджера.



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

Если вы по незнанию/лени скопипастили make install из инструкции, то в системе появляются файлы, о которых пакетный менеджер не знает. Со всеми вытекающими, если вам мало того, что было перечислено ранее.

Что делать?


Можно, конечно, сконфигурировать дерево исходников так, чтобы установка всего и вся шла куда-нибудь в /opt/mycoolapp/, а потом при необходимости руками удалить, но тут может вылезти масса неприятных вещей, начиная с того, что программа ожидает, что сможет загрузить свои библиотеки, а загрузчик о директории, где они лежат ничего не знает, заканчивая тем, что автор программы может рассчитывать, что например, если он кладёт файл, скажем в $prefix/share/xsessions/, то его подхватит менеджер дисплея. Не говоря уже о путях для pkgconfig и прочем.

Так что надо собирать пакет.

У меня нет времени, чтобы ***ться с этим, лучше ещё раз сделаю make install, всё просто и понятно!


Спокойно, спокойно. Он у нас за ноги привязан. Всё не так уж страшно и сложно, как кажется на первый взгляд.

checkinstall


Данная чудесная утилита, будучи запущенной вместо make install задаст несколько вопросов, после чего сама соберёт и установит пакет. Всё, при обновлении никаких проблем с вычисткой старого хлама у вас не будет.

Сборка deb-пакета вручную


Если вы не склонны доверять такой автоматике (которая иногда всё же косячит) или же хочется внести пару изменений, но разбираться с нормальным процессом сборки пакетов всё же лениво, то можно собрать пакет ручками. Я привожу способ, как соорудить его для систем на базе Debian, т. к. лучше всего знаком именно с ними. Он не является идеологически правильным, но на выходе получается вполне корректный пакет без задействования дополнительных сущностей. Делается это следующим образом.
Для начала собираем софт с предварительно указанными для configure или autogen.sh параметрами --prefix=/usr и --exec-prefix=/usr.
Далее производим установку во временную директорию. Пишем:

fakeroot
make install DESTDIR=`pwd`/tempinstall


После чего получаем в свежесозданной директории весь тот набор файлов файлов. Кстати, мы сейчас находимся в fakeroot-окружении, т. е. можно невозбранно менять владельца и права доступа файлов, но физически в системе владельцем останетесь вы сами. Софт же внутри fakeroot-сессии будет получать изменённую информацию, что позволит упаковать в архив файлы с корректными правами.
Далее создадим в «корне пакета» директорию DEBIAN и сложим в DEBIAN/conffiles список всех файлов, которые должны попасть в /etc:

cd tempinstall
mkdir DEBIAN
find etc|sed "s/^/\//"|DEBIAN/conffiles


После чего создаём файл DEBIAN/control следующего содержания:

Package: имя_пакета
Version: 1.2.3
Architecture: amd64/i386/armel/all
Maintainer: Можете вписать своё имя, можете дребедень, но если оставить пустым, то dpkg будет ругаться
Depends: Тут можно вписать список пакетов через запятую.
Priority: optional
Description: Тоже надо что-нибудь вписать, чтобы не кидало предупреждения



При необходимости там же можно создать скрипты preinst, postinst, prerm и postrm.

Всё, делаем dpkb -b tempintall и получаем на выходе tempinstall.deb, на который можно натравить dpkg -i и который корректно установится, обновится или удалится.

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

Заключение



Как видите, тут нет абсолютно ничего сложного, но выполнение этих действий избавит вас от огромного числа проблем в будущем.

А авторам статей на хабре просьба: пишите checkinstall вместо make install. Не надо давать вредные советы.

 

(c)

Далее

413847

18:20 Рубрика: Всячина

Мировой зло черпает свои знания о вселенной напрямую из космоса и из журнала Vogue. Не надо задaвать вопросов и уж тем более что-то обьяснятъ. Только нервы себе трепать.

 

(c)

letteringjs

10:22 Рубрика: jQuery

lettering

 

A jQuery plugin for radical web typography

Microjs: Fantastic Micro-Frameworks and Micro-Libraries for Fun and Profit!

10:18 Рубрика: Web Development

microjs

 

More

Калибровка аккумуляторной батареи

23:35 Рубрика: Всячина

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

Старайтесь не допускать полной разрядки литиевых аккумуляторов, это крайне отрицательно скажется на сроке службы аккумулятора.

 

(c) Тут

 

http://ulrith.livejournal.com/705901.html

iconizer.net

15:01 Рубрика: Web Development

iconizer

 

Бесплатный генератор иконок

Preloaders.net

14:21 Рубрика: Web Development

preloaders

 

Бесплатный генератор анимированных GIF и APNG для загузки AJAX и JQuery

Создание виртуальных хостов в apache под Linux на Python

22:22 Рубрика: Python

Занимаюсь разработкой сайтов и всякие эксперименты и основную разработку делаю на локальном компьютере под Debian. В следствии того, что приходилось постоянно ручками создавать виртуальные хосты пришлось поставить себе цель автоматизировать процесс.
Первый делом двинулся я в просторы интернета в поисках необходимого решения, которое должно было обладать простотой и выполнять всего 2 задачи: добавлять виртуальный хост и удалять его. Мне удобно пользоваться консолью, поэтому и приложение должно было быть консольным. Но все варианты которые нашел имели большое количество ненужного функционала, кроме того почти все они предоставляли web интерфейс, которым я просто не хотел пользоваться.
В результате были поставлены цели:
— написать свой простенький скрипт, который создавал все то, что мне нужно;
— в качестве языка разработке я выбрал python, т.к. давно искал повод на нем учится писать.

 

Далее

10 Simple and Light Weight CMS Solutions

22:20 Рубрика: Web Development

simple_cms_4

 

Choosing the right content management system can be an overwhelming task for a web designer or developer. There are so many available, all with different features, it can be difficult to decide which is the best solution for a particular web project. For complex websites, a fully featured CMS is probably the best way to go. However, for simple sites, lots of bells and whistles can be overkill and actually be a bit confusing for the person maintaining the website.

In this article, I’ve rounded up 10 simple and light weight cms solutions. All of these systems were built with simplicity and ease-of-use in mind.

 

More

10 Best Content Management Systems for Designers

22:18 Рубрика: Web Development

cms_1

 

There are a lot of content management systems out there, but many of them are overly complicated and require a certain level of technical expertise. However, there are a select few that focus on simplicity and ease-of-use, but still give the designer flexibility in templating features and customization. In this article, we have listed ten of these CMS’s. Some of them are well known, while others you may have never heard of, but deserve a look.

If you have a favorite CMS that we didn’t list here, let us know.

 

More