LINUX.ORG.RU

Продакшн и девелопмент файлы в разных местах. Как их унифицировать?

 


0

4

Здравствуйте

Допустим, разрабатывается проект под линукс. Понятное дело, исполняемые файлы в /bin, конфиги в /etc, либы в /usr/lib, остальное с /usr/share/foo.

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

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

Как в таких ситуациях принято поступать?

★★★★★

Тааак. Предлагаю подумать на тему, а если я хочу, чтобы у меня было все в /Users/user/Containers/App/*, что, твое приложение у меня совсем не заработает?

Quickern ★★
()
Ответ на: комментарий от x3al

Только аккуратно и почитывая их баг-трекер.

Deleted
()

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

anonymous
()
Ответ на: комментарий от anonymous

В какой-то момент времени их таки придется захардкодить. А в конфиг все не засунешь. Скажем, системдэ-юнит, в нем захардкожен путь к экзешнику. Экзешник ищет свой конфиг тоже по захардкоженому пути. Прод и дев пути отличаются. И таких значений куча

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от x3al

Кажется одну проблему меняем на другую, похлеще )

makoven ★★★★★
() автор топика
Ответ на: комментарий от Quickern

Вот и я предлагаю подумать. Пока додумался только до симлинков во все щели системы

makoven ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Дык не только сишечка, еще пара скриптовых языков и кастомные конфиги от всяких нгинксов

makoven ★★★★★
() автор топика

Как в таких ситуациях принято поступать?

Скрипты и конфиги перед установкой прогоняются через шаблонизатор. Для бинарников перед сборкой через шаблонизатор прогоняется config.h (или его аналог).

i-rinat ★★★★★
()

Интересно, а если overlayfs накатить на корень - сработает? В папке проекта организовать файлы словно от корневой директории

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Ну если так, то делай, как и говорит i-rinat, через шаблонизатор. Для каждой языковой среды будет свой характерный config.h, config.py или myprogram.conf, который на этапе генерации появляется. Далее уже сборка проекта. Это стандартное и понятное решение. В отличие от всяких докеров и других ухищрений.

Deleted
()
Ответ на: комментарий от i-rinat

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

В общем, посижу, подожду. Вдруг кто придет с простым и гениальным решением. Что нередко случается на этом прекрасном ресурсе

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Дефолтные захардкодить и добавить параметры командной строки для изменения.

anonymous
()

Для питона я решал костылями и фиксированными префиксами. Будет интересно узнать как это надо делать правильно. Пока что всё что нагуглил выглядит стрёмно и устаревшим. Та же документация setuptools ведёт на полудохлую страницу eggs которая не обновлялась с 2008 года.

Короче, всё либо устарело, либо ещё не готово :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

В идеале, наверное, это должно быть так: суть такова. Жмешь кнопку «REC», система начинает следить какие изменения ты сделал в ФС (с фильтрацией черным/белым списком). И сразу пишешь проект в те места, где он должны быть в продакшене. Затем жмешь «сохранить» и слепок твоих изменений копируется в папочку. Их этого слепка делаешь пакет. Жмешь «удалить» чтобы очистить ФС от пакости

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Эм, ты только что описал то что делает любой пакетный менеджер.

Я думал у тебя вопрос про поиск ресурсов. В проекте на гитхабе всё в одной куче, а на установленной машине что-то в /bin/, что-то в /usr/lib...

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Пакетный менеджер не делает пакеты в реальном времени

makoven ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Имеется в виду, разрабатываешь проект сразу в реальной ФС, а система следит. Когда приходит время собрать пакет - система просто записывает все изменения

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Думаю, lsyncd такое умеет через inotify. Можно свой костыль через fanotify сделать.

true_admin ★★★★★
()

Жмешь кнопку «REC», система начинает следить какие изменения ты сделал в ФС

Может быть ты хочешь checkinstall ? Правда не пойму как это соотносится с исходным вопросом.

Nao ★★★★★
()
Ответ на: комментарий от Nao

Может быть ты хочешь checkinstall

Может и подойдет. Если он не сильно завязан на make. Погляжу

как это соотносится с исходным вопросом

Ну это так, мысли вслух. Представь, в папке с проектом только c-файлы. h-файлы создаешь сразу в /usr/include. Компилишь сразу в /bin и /usr/lib (gcc -o /bin/foo). Конфики создаешь сразу в /etc идт. Закончил разработку - созданные файлы автоматически перекочевали в папочку с сохранением структуры, а ФС очистилась от твоих загрязнений

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

постоянно файлы создавать приходится чтоли?

Закончил разработку - созданные файлы автоматически перекочевали в папочку с сохранением структуры

а завтра придешь разрабатывать опять и что будешь делать?

irton ★★★★★
()
Ответ на: комментарий от irton

Ну если у тебя есть структура файлов - развернуть ее назад дело нехитрое и очевидное. Поэтому я даже описывать не стал )

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Скажем, системдэ-юнит, в нем захардкожен путь к экзешнику

Юнит можно генерить билдсистемой из шаблона, например

Pinkbyte ★★★★★
()

От корня проекта дерево каталогов должно полностью повторять системное. В конфиг префикс.

/thread

anonymous
()
Ответ на: комментарий от makoven

Пробовал так. После каждого твиканья приходится перегенерять. А иногда забываешься и редактируешь сгенеренный конфиг

Натрави демона на изменение конфигурации - будет всегда свежий конфиг.

ya-betmen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.