LINUX.ORG.RU

Этичная сборка ПО из исходников.

 , ,


0

1

Доброго времени суток, ЛОРчане.

Объясните, пожалуйста, неофиту(т.е. мне) каким способом можно собирать программы из исходного кода не засоряя при этом основную систему? Например, мне захотелось «потыкать палочкой» в проект, который написан 2-х языках программирования и использующий несколько библиотек в зависимостях. Следовательно, все это безобразие в виде libkgb-1.0, NameLang Compiler попадет ко мне в основную систему и после сборки придется вычищать все ненужное руками. Но я уже устал заниматься такой рутиной и следовательно вопрос: существуют ли специальные окружения, позволяющие изолировать директорию проекта от основной системы? Например, создал виртуальное окружение, скачал в него исходный код, скачал необходимые зависимости для сборки, собрал, удалил окружение оставив систему в изначальной чистоте.


Если ты собираешь не из под рута, то систему ты портить не будешь.

Если нужно собирать из под рута (зачем?), то можешь сделать chroot.

Если хочешь большей безопасности и гибкости, то лучше сделать виртуалку в qemu и собирай в ней, тогда сохранив ее первоначальный образ (тупо скопировав файл – ее диск), ты будешь всегда иметь чистую систему. Я поступаю так.

soomrack ★★★★
()

Использовать пакетный менеджер, собирающий в песочнице. Желательно такой, в котором вообще нет этой штуки из прошлого века под названием «установка в систему», но в принципе сойдёт и какой-нибудь популярный из прошлого века.

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

Если ты собираешь не из под рута, то систему ты портить не будешь. систему ты портить не будешь.

Под «портить» я подразумевал установку тулчейна для сборки проекта. Конечно, можно скачивать, линковать и раскладывать по папочкам зависимости вручную, как предлагал выше Бурато, но велик соблазн установить библиотеку/компилятор с помощью пакетного менеджера, а здесь уже установка в систему через sudo.

Например, мне нужно скомпилировать программу на условном Rust, Zig, etc, для этого мне придется устанавливать компилятор этого языка в систему через пакетный менеджер, а после сборки его удалять, верно? Поэтому хотелось бы удалить сразу окружение, а не сидеть вспоминать, что я устанавливал через пакетный менеджер.

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

Похоже, что придется копать в эту сторону, да.

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

Например, мне нужно скомпилировать программу на условном Rust, Zig, etc, для этого мне придется устанавливать компилятор этого языка в систему через пакетный менеджер, а после сборки его удалять, верно? Поэтому хотелось бы удалить сразу окружение, а не сидеть вспоминать, что я устанавливал через пакетный менеджер.

В генту это просто решается. Есть такая штука, set, вручную составляемый список пакетов которые я могу поставить и снести пачкой, оперируя именем созданного сета. Необходимые пакетам зависимости поставятся сами, и сами же снесутся при «чистке» системы после того как я сет удалю. Так что если мне для внутрихомячной ручной сборки требуются некие зависимости, которые я не хочу видеть постоянно в своей системе и после того как наиграюсь возжелаю удалить — я из них сет сформирую, а потом этот сет удалю.

Ну и если я решу что внутрихомячная софтина достойна того чтобы быть — напишу ebuild и положу в персональный домашний оверлей, и софтина станет легальной частью системы. А то что в сете будет вписано мною в ебилд как зависимости, сборочные или постоянные. Надобность в сете после этого отпадёт.

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

В целом да, но могут возникать случаи, когда установка библиотеки потянет за собой необходимость выставить use-флаги для уже имеющегося софта, или что еще хуже обновить версию до ~amd64.

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

soomrack ★★★★
()

Что в дебиане что в рхеле пакетные манагеры умеют удалять ровно то что ты поставил т.е. условно если после apt install rust (что притащит 100500 пакетов) сделать apt delete rust то ровно эти же 100500 и будут унесены ветром

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

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

Да, наверное, но как то заморочено как по мне. Да и qemu я к стыду своему плохо осиливаю, мне как то виртуалбокса всегда хватало, в нём быстро, мышкой натыкал и виртуалку запустил. А в qemu меня угнетает портянка параметров запуска и кривые полурабочие графические морды, которых при этом много разных, из за которых всё равно упарываешься в рукопашную портянку параметров в итоге. И да, я знаю что qemu/kvm круче, а я ленивый ламер.

А так если юзы нужно поменять чему то уже установленному, так конфиги портажа модульные и комментарии поддерживают. Поменял этому чему то юз индивидуально, создал специальный файл под это в /etc/portage/package.use/ и подробно в нём прокомментировал, что это и зачем было нужно.

~amd64 меня тоже не пугает, у меня много чего с тильдой стоит, это всё прекрасно управляется, если бардак не разводить и не валить всё размаскированное из ~ в один бардачного вида конфиг без комментариев зачем конкретно вот это понадобилось. Гента своей гибкостью прекрасна, но только если ты аккуратен, понимаешь как работает портаж, и зачем ты делаешь то что делаешь.

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

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

А почему бы ПМу не помнить это за тебя? В DNF это реализовано:

dnf history last..last-20

Он тебе покажет 20 последних транзакций: хочешь пакет удаляй, хочешь целиком транзакцию отмени.

papin-aziat ★★★★★
()

А если я, пока собираю что-то забористое, бывает, матом крою так, что кактус вянет - это уже, наверное, неэтичная сборка ПО считается :)

А если без шуток, то уже насоветовали от chroot-а, до любых контейнеров. Хоть в виртуалке на самый крайний случай. Почему-бы и нет.

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

собираю что-то забористое, бывает, матом крою так, что кактус вянет - это уже, наверное, неэтичная сборка ПО считается :)

Это эпичная сборка ПО из исходников.

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

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

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

Да это все понятно. Работает и ладно. Мне просто в какой-то момент надоели все эти зависимости и сложности при обновлении, и я вынес отдельные сервисы в qemu (даже без графики, просто крутится демоном несколько виртуалок).

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

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

Контейнеры по вашему что делают? Это самое и делают.

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

Containers, containers everywhere. В будующем всё будет в контейнерах, абсолютно всё, и Луна, и Небо, и даже Аллах... А правда что докер специалисты предпочитают жить в шкафу?

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)

В общем случае зависит от дистра и желаемого уровня красноглазия.

Если для одного пользователя, можно собирать и ставить весь софт в $HOME. Придется вручную указывать пути к либам и компиляторам.

Если для системы, можно ставить софт в /usr/local. Он для этого и предназначен, но тоже достаточно быстро превратится в помойку. Для /usr/local тоже есть свои пакетные менеджеры, но…

Про chroot и контейнеры уже упоминали.

Это если на один раз собрать и запустить. Если хочется нормальный пакет, то надо смотреть средства сборки конкретного дистрибутива. Например, в дебиане/федоре есть pbuilder. Этот набор скриптов создает в chroot минимальную систему нужной версии дистрибутива, пакует его в архив. Далее при сборке пакета распаковывает архив, устанавливает зависимости для сборки, собирает. После сборки изменения не сохраняются. Такой подход обеспечивает какую-никакую воспроизводимость сборки (привет системам портов, ага).

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

Что в дебиане что в рхеле пакетные манагеры умеют удалять ровно то что ты поставил т.е. условно если после apt install rust (что притащит 100500 пакетов) сделать apt delete rust то ровно эти же 100500 и будут унесены ветром

ЕМНИП, не совсем так. Автоматически установленный пакет может оказаться в списке рекомендованных другого пакета, в результате удалится уже 90500. Ну и проблема неявных сборочных зависимостей никуда не денется, поэтому только чистое сборочное окружение, только хардкор.

undef ★★
()

Необходимую информацию на подумать я получил, поэтому все варианты будут рассмотрены. Спасибо, что уделили мне время.

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

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

Золотые слова. Если уж приходится часто красноглазить нужно выяснить какой способ красноглазия является штатным и кошерным в этом дистрибутиве. И его таки осилить. Смысла нет велосипед придумывать, всё придумано до нас и множество людей занимаются разработкой каким то штатным способом. Дистрибутив же сам по себе как то разрабатывают? Вот и нужно прочитать какие в этом монастыре уставы.

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

А почему этичная?

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

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

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

Ну вот он с помощью сарказма пытался донести до тебя мысль что есть такая штука как снапшоты, и их умеет LVM, с любой FS, btrfs сама по себе, штатно, ZFS, наверное, наверняка, не знаю, не пользовался, ну и виртуалочки само собой. И создание снапшота перед красноглазием и откат на «исходные позиции» после красноглазия это тоже вполне себе метод и способ. И более того, он в целом чертовски хорош и сочетается со всем остальным тут советуемым.

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

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

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

Что в дебиане что в рхеле пакетные манагеры умеют удалять ровно то что ты поставил т.е. условно если после apt install rust (что притащит 100500 пакетов) сделать apt delete rust то ровно эти же 100500 и будут унесены ветром

Вы ведь плохо знакомы с дебианом, да?

utanho ★★★★★
()

Объясните, пожалуйста, неофиту(т.е. мне) каким способом можно собирать программы из исходного кода не засоряя при этом основную систему?

Изоляция chrot и контейнеризация Jail во FreeBSD, создание собственных экспериментальных портов.

iZEN ★★★★★
()