<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; LFS - и все что с ней связано.]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=39490</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=39490&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «LFS - и все что с ней связано.».]]></description>
		<lastBuildDate>Wed, 13 Jan 2021 19:48:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=468359#p468359</link>
			<description><![CDATA[<div class="quotebox"><cite>007exe пишет:</cite><blockquote><p>Вот на третьем этапе у меня проблема собранный initrd никак не находит rootfs.sfs</p></blockquote></div><div class="quotebox"><cite>007exe пишет:</cite><blockquote><p>3) Создаётся initrd<br />4) Подготовленный rootfs.sfs initrd ядро загрузчик упаковывает в iso образ</p></blockquote></div><p>по порядку цитат.<br />первое, как пример(на самом деле, если забить в поиск &quot;github livedvd linux&quot;, то вывалит просто море проектов) <a href="https://github.com/Tomas-M/linux-live">https://github.com/Tomas-M/linux-live</a> (официальный сайтик его <a href="https://www.linux-live.org/#explore">https://www.linux-live.org/#explore</a> ), чем удобен конкретно этот проект, так тем, что он самодостаточен и не требует дополнительных телодвижений после создания модели системы(ака &quot;1&quot;, &quot;2&quot;). Он сам создаст необходимые каталоги и структуры, а потом и сам образ, единственная забота - контролировать размер желаемой системы, образ больше чем 3-5 гигов сложновато запихнуть в озу меньше 8гиг. Но это чистая вкусовщина, каждый суслик агроном, тут советы фоном.<br />...<br />а вот вторая и третья цитата... хм?!<br />Тут нужно разбираться по цепочке.<br /> Первое - нужно́ понимание всего процесса. Итак, после передачи биосом управления в загруженный образ инитрам, что происходит? А ровно то же, что и при обычной(с диска) загрузке, образ, имея на борту полноценную файловую систему(пусть и виртуальную) с уже размещёнными в ней системными утилитами и !внимание! ядерными модулями, скриптами в виртуальном /etc , и прочими прибамбасами, обеспечивающими собственно нормальную загрузку. <br />Второе - Вот это вот всё, когда отработает, представляет собой самодостаточную систему линукс в режиме init 1(rescue), загруженной в оперативу. После этого, собственно отрабатывает её штатный init, ну или systemd на предмет монтирования файловой системы(как частный случай расшифровке шифрованных разделов или монтированию LVM) с диска и передаче управления уже системе на нём(по сути мы имеет дважды загружаемую систему, но с разным стартовым набором)... но конкретно в твоём случае этот момент должен инициировать монтирование не с физического диска, а из той самой виртуальной системы, где находится твой rootfs.sfs, либо! должен каким-то образом(через юниты или скрипты) выполняться поиск среди доступных физических носителей именно твоего rootfs.sfs, либо по UUID, либо по метке, либо по прямому указанию и уже монтированию его, скорее всего через loop что-то-там...<br />&nbsp; Так вот где-то в этом месте у тебя отсутствует один из этих моментов.<br /> В предложенном выше проекте с гитхаба, который по сути набор баш-скриптов, посмотри внимательно как это всё обыгрывается, страшного там ничего нет, нудновато - да, но не очень уж заумно.<br /> Я этими вещами уже давненько не игрался, маразм своё берёт и деталей уже не вспомню, но копать нужно как-то так.<br /> И да, рекомендую, для облегчения всего процесса использовать федоровский dracut - <a href="http://www.bog.pp.ru/work/dracut.html">http://www.bog.pp.ru/work/dracut.html</a> (по русски, для втягивание в понимание процесса, вот оригинал -&nbsp; <a href="https://dracut.wiki.kernel.org/index.php/Main_Page">https://dracut.wiki.kernel.org/index.php/Main_Page</a> )</p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Wed, 13 Jan 2021 19:48:22 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=468359#p468359</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=468357#p468357</link>
			<description><![CDATA[<p>Здравствуйте Я занимаюсь &quot;Реставрацией&quot; одного старого и заброшенного дистрибутива до недавнего времени всё шло более менее гладко обновил около 300 пакетов (минеральный набор программ для самостоятельной работы дистрибутива. Консольные утилиты, компиляторы...) немного поправил систему сборки пакетов, пакетный менеджер и программу установки дистрибутива (Всё сам описное). Но вот наткнулся на такую проблему которую никак в одиночку не могу победить, а именно собрать LiveCD. Поскольку родная система сборки LiveCD сломана я решил написать свой простой скрипт для сборки. Вот что я смог добиться<br />1) Скрипт скрипт подготавливает рабочие каталоги<br />2) Из указанного репозитория по списку устанавливает систему во временную папку для корневой файловой системы после чего упаковывает его в rootfs.sfs утилитой mksquashfs <br />3) Создаётся initrd<br />4) Подготовленный rootfs.sfs initrd ядро загрузчик упаковывает в iso образ</p><p>Вот на третьем этапе у меня проблема собранный initrd никак не находит rootfs.sfs </p><p>P. S. понимаю данная затея не совсем LFS но я уже не знаю куда обратится</p>]]></description>
			<author><![CDATA[null@example.com (007exe)]]></author>
			<pubDate>Wed, 13 Jan 2021 16:24:54 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=468357#p468357</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467970#p467970</link>
			<description><![CDATA[<p>//PS//<br />...билась нечисть грудью в груди и друг дружку извела...</p><p>По поводу некоторых тонкостей с правами. Гном в этом отношении самый привиреда. Суть в следующем - есть несколько чувствительных точек :<br />папки PolKit, директория /tmp, SUID-биты на некоторые проги и права на &quot;домашние&quot; папки DM например GDM/SDDM/LXDM, ну и групповые политики доступа &quot;к телу&quot;,например ни один DM не даст запустить сессию, если юзер не состоит в группе video, хотя в явном виде этого нигде не прописано, просто так дано в исходниках.<br />Правила PolKit будит реализованы демоном только в том случае, если каталог с ними и сами правила принадлежат пользователю polkitd и его же группе.<br />/tmp должна имет права 777 (chmod 777) и перед первым запуском желательно всё от туда удалить, а потом назначить права.<br />GDM(и остальная компания) базируются в /var/lib/&lt;имя-рек&gt;, права на них должны принадлежать соответствующему пользователю и его группе(вариант группа root, но не всегда работает корректно). это же относится и к логам! ака /var/log/&lt;имя рек&gt;, если у GDM нет доступа к /var/log/gdm, то он не сможет вернуть return 0 и упадет при старте, это нужно отслеживать.<br />Суид биты тёмный лес, суть в том, что запускаемый процесс имея полномочия в системе(порой почище рута), тем не менее принадлежит пользователю который его запустил, к слову сам пользователь вообще может не иметь даже оболочки, тонкая материя, могу только посоветовать читать доки на конкретные вещи полкит, пам, дбас, иксорг, мускуль, гдм и т.д.. к примеру права на xorg(X) 4755, позволяют пускать иксы от обычного юзера, а 755 уже только от рута(или наоборот?! чёт я сам запуталсо, короче разбирайтесь с этими вопросами внимательно!).<br /><strong>*** Добавлено: 17.10.2020 21:20:54 ***</strong></p><p>Готово. <a href="https://gitlab.com/Gramozeka/kokoro">https://gitlab.com/Gramozeka/kokoro</a><br />Можно в архив, если вдруг кто решится пройти по этому тернистому пути - то лучше Ubuntu или какая федора, чем вот это вот всё. Созданием данного проекта я не преследовал никаких амбициозных целей, чистейший, незамутнённый интеллектуальный анонизм для убийства времени... с тем же успехом можно &quot;Войну и мир&quot; перечитывать в издании 1908 года. да. <img src="https://linuxforum.ru/img/smilies/ar.gif" alt="ar" /><br /></p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Sat, 17 Oct 2020 18:20:54 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467970#p467970</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467969#p467969</link>
			<description><![CDATA[<p>Благодарствую за разжевывание темы! У меня аж кое-где&nbsp; зазудело и ручонки&nbsp; зачесались. <img src="https://linuxforum.ru/img/smilies/bp.gif" alt="bp" /> Зима долгая - может и осилю наконец сборку. <img src="https://linuxforum.ru/img/smilies/az.gif" alt="az" /></p>]]></description>
			<author><![CDATA[null@example.com (shtoom)]]></author>
			<pubDate>Fri, 16 Oct 2020 14:07:07 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467969#p467969</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467968#p467968</link>
			<description><![CDATA[<p>... чтоб не забыть.<br /> Когда минимальный набор мультилиб готов, я собрал &quot;обычный&quot; набор софта, иксы там, всякие гномы-кеды,.. примерно с 800 пакетов. Я создал снова безликого юзера без прав, активировал режим linux32(есть такая плюшка util-linux) создал глобальную переменную MACHTYPE=i686-pc-linux, и повторил сборку кросс-тулза только уже в отдельный каталог(обошёлся без chroot, но с ним было бы проще имхо), а потом, уже стандартно от рута собрал всё необходимое из 32-битного стека для вайна, впрочем, можно и целиком систему так собрать, но она мне не особо то нужна(хотя как опция полезно).<br />&nbsp; В итоге провозился две недели со всем этим, зато своё, посконное, из говна и палок с синей изолентой))) .</p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Fri, 16 Oct 2020 10:23:18 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467968#p467968</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467967#p467967</link>
			<description><![CDATA[<p><a href="https://ibb.co/yW9BVmL"><span class="postimg"><img src="https://i.ibb.co/yW9BVmL/2020-10-16-14-49-18.png" alt="https://i.ibb.co/yW9BVmL/2020-10-16-14-49-18.png" /></span></a> <a href="https://ibb.co/B6p9RSm"><span class="postimg"><img src="https://i.ibb.co/B6p9RSm/2020-10-16-14-41-53.png" alt="https://i.ibb.co/B6p9RSm/2020-10-16-14-41-53.png" /></span></a> <a href="https://ibb.co/fDtK92G"><span class="postimg"><img src="https://i.ibb.co/fDtK92G/Screenshot-20201016-143736.png" alt="https://i.ibb.co/fDtK92G/Screenshot-20201016-143736.png" /></span></a><br />у-фф... обновился.<br /> Плазма порадовала, бегает шустро и память не грызёт. Время покажет хотя.. Но первые впечатления - весьма положительны.<br /> Займусь &quot;приборкой&quot; и возможно к концу месяца залью в гит, для истории. Новый метод разделения архитектур отработал - работает, теперь надо осмыслить это всё и запротоколировать... Получилось полностью построить 32-бит(ака i686-pc-linux) из x86_64 гибрида.<br />100% качество изображения:<br /><a href="https://ibb.co/HKdd0cH"><span class="postimg"><img src="https://i.ibb.co/HKdd0cH/Screenshot-20201016-150329.png" alt="https://i.ibb.co/HKdd0cH/Screenshot-20201016-150329.png" /></span></a></p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Fri, 16 Oct 2020 10:01:11 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467967#p467967</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467880#p467880</link>
			<description><![CDATA[<p>О! Нашёл где эта кнопка! Наконец-то.<br /> Про зависимости...<br />Что нужно об этом знать? Главное - это не страшный зверь. Это вообще не проблема, с технической точки зрения.<br /> Что это и как работает.<br />Когда кто-то пишет прогу, то учитывая, что этим занимается куча народу, он реально переизобретает лисапед, украденный, проданный и снова украденный. Поэтому, часто, какие-то отработанные решения просто включаются в код в виде готовых библиотек. И тут есть несколько тонкостей.<br /> В каждом проекте все зависимости определены и секретом не являются, т.к. это прямой функционал проекта. Они бывают простыми, сложными, и... кольцевыми.<br />Простые они на то и простые - проге А нужна прога Б, точка. Тут нет проблем почти никогда.<br />Сложные, это когда Проге А нужна прога Б, но не просто Б, а Б собранная с зависимостью от проги С... Тут иногда просто улетает гора времени на собирание этого зоопарка.<br />А вот с кольцевыми зависимостями бывает самый настоящий цирк.<br />Для примера приведу такой пример:<br />Эволюшен (гномерская прога) нужен SASL... но не простой, а с LDAP, но не с просто LDAP, а с LDAP c SASL... которым нужен KERBEROS... собранный... с с LDAP, но не с просто LDAP, а с LDAP c SASL...<br />т.е. по сути четые проекта тупо кружат какой-то краковяк без трусов!<br /> Но это всё страшно только на первый взгляд, есть алгоритм сборки таких танцев, сперва все части собираются с принудительно отключенными(в конфигуре всё настраивается) зависимостями, а потом каждая собирается по одной, последовательно включая необходимое, а когда все получили номинальные зависимости, то последний раз уже собираются все подряд, именно для этого в генте есть make world, когда неучтённые зависимости автоматически активируются при сквозной сборке всех уже собранных.<br /><strong>*** Добавлено: 01.10.2020 03:37:10 ***</strong></p><p>Другой вариант зависимостей - это протухшее оносамое мамонта.<br /> Это показатель вообще адекватности команды проекта и прямое указание на проработку вопроса - &quot;а нужно ли иметь дело с этим?&quot;<br /> Суть очень проста - например, в программе заявлена обязательная зависимость от какой-нибудь супер-плюшки, но когда мы идем в официоз этой плюшки, то вдруг выясняется, что последние признаки жизни проект подавал в ...2002 году! и собирается только на gcc четвёртой версии... но, упоротость разработчиков не позволяет им взять уже этот проект под себя или переписать ту часть своего кода, которой нужно это застывшее ГЭ. Я стараюсь к подобному даже не прикасаться, всегда есть альтернатива, а упорствовать в глупости - поистине глупость в квадрате.<br /></p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Thu, 01 Oct 2020 00:37:10 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467880#p467880</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=467866#p467866</link>
			<description><![CDATA[<p>*************** ВВЕДЕНИЕ *****************</p><p>Итак дорогие мои, начнём забивание мозгов тем что &quot;НИНУ́ЖНА&quot;.</p><p> С чего начать? Первое что приходит на ум, это как устроена система с точки зрения самой системы. Но это тупиковый путь, т.к. тема безгранична и до сути вопроса в практической плоскости данного топика можно никогда не добраться, поэтому задекларируем что мы это знаем.&nbsp; <img src="https://linuxforum.ru/img/smilies/bu.gif" alt="bu" /> <br /> Для построения системы потребуется немного чистого диска, для знакомства хватит пяти гигов(на самом деле всего 600-800 метров, но накладные расходы на сборку и исходники...).<br /> Потребуется система, способная собрать gcc и glibc, что на самом деле довольно не тривиальная задача.<br /> Потребуется специально огороженный юзер.<br />&nbsp; Вот с него и начнём.<br />Делается он так:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />groupadd clfs<br />useradd -s /bin/bash -g clfs -d /home/clfs clfs<br />mkdir -pv /home/clfs<br />chown -v clfs:clfs /home/clfs</p><p>passwd clfs<br /></div><br />вроде всё как всегда, что особенного?<br /> Если вот прямо сейчас зайти в учётку этого юзера, то он получит все стандартные атрибуты обычного пользователя, на которые, в повседневности никто не смотрит, а тупо пользуется.<br />Это набор стандартных системных переменных, вот в них-то и вся соль.<br /> Система сама их назначает из глобальных установок в /etc/profile, /etc/skell и остальных конфигураций в /etc, коих там вагон и не один.<br />&nbsp; Так вот для собирания(из исходников) кросскомпилятора gcc это всё высокотоксичный актив и от него нужно держаться подальше.<br />&nbsp; &nbsp;Для этого есть инструмент в самой системе - это индивидуальный профиль bash. Хранится он в `$HOME/.bash_profile&nbsp; и `$HOME/.bashrc. Первый инициатор этих установок, а второй - собственно установки.<br />Работает это так - при логине в профиль, система опрашивает домашний каталог на предмет наличия этих файлов и если они присутствуют, то глобальные настройки из /etc игнорируются.<br />Для нашей задачи это выглядит так:<br />cat $HOME/.bash_profile<br /></p><div class="codebox"><pre><code>exec env -i HOME=${HOME} TERM=${TERM} PS1=&#039;\u:\w\$ &#039; /bin/bash</code></pre></div><p>cat ~/.bashrc<br /></p><div class="codebox"><pre><code>set +h
umask 022
CLFS=/mnt/clfs
LC_ALL=POSIX
PATH=/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
unset CFLAGS CXXFLAGS PKG_CONFIG_PATH</code></pre></div><p>вот теперь надо пояснить что есть что.</p><p>exec env -i HOME=${HOME} TERM=${TERM} PS1=&#039;\u:\w\$ &#039; /bin/bash<br />эта строчка указывает системе использовать переменные окружения только из домашнего каталога, никакие другие переменные, кроме объявленных локально не будут учитываться.</p><p>set +h</p><p>в баше есть функция кеша $PATH, укоряющая поиск приложений, т.е. однажды найденная программа ls по пути /usr/bin/ls, все последующие разы будет находиться по нему, не пересматривая весь $PATH, что разумно для простоты работы. Так вот set +h эту функцию отключает, теперь каждый раз, когда пользователь вводит какую либо команду, она будет находится обходом всего пути указанного в $PATH, зачем это надо я чуть позже растолкую.</p><p>CLFS=/mnt/clfs<br />просто переменная, указывающая где у нас &quot;чистый лист&quot;.</p><p>LC_ALL=POSIX<br />тоже понятно? Для тугих - отмена всех языковых установок - только посикс, лютый хардкор девственной консоли.</p><p>PATH=/cross-tools/bin:/bin:/usr/bin<br />собственно PATH, тут важна последовательность поиска, первый же путь оказавшийся валидным и будет применён, если имеется /usr/bin/ls и /cross-tools/bin/ls, то использован будет последний, т.к. он первый в поиске. Это важно для правильного линкования, т.к. задача собрать кроскомпилятор не связанный с базовой системой ничем.</p><p>export CLFS LC_ALL PATH<br />собственно инициация переменных указанных выше.</p><p>unset CFLAGS CXXFLAGS PKG_CONFIG_PATH<br />отмена флагов компилятора если вдруг таковые были где-то заявлены системой.</p><p>Собственно с этим всё. Войдя в эту учётку стоит применить :<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />source ~/.bash_profile<br /></div><br />и мы получим необходимый инструмент для дальнейшего продвижения.</p><p>..продолжение следует.<br /><strong>*** Добавлено: 29.09.2020 14:37:17 ***</strong></p><p>..продолжим.<br />Сам по себе компилятор работать не может, ему нужен определённый обвяз. Фундаментом является связка с\с++, уже на ней строится всё остальное - фортраны, бейсики и прочий зоопарк из рептилий и всяких растов.<br />Подробно останавливаться на том кто есть кто я тут не буду, просто перечислю что нужно:<br /></p><div class="codebox"><pre><code>file
linux(заголовочные файлы ядра)
m4
ncurses
pkg-config
gmp
mpfr
mpc
isl(опционально, пакет не обязательный, но иногда дюже полезный, подробности можно почитать на сайте самого проекта http://isl.gforge.inria.fr/ )
binutils
gcc(собственно виновник этого треша)
glibc</code></pre></div><p>но!!!<br />это только обвязка! Сам кросс-компилятор собирается отдельно с опорой вот на этот список.</p><p>Тут следует немного отступить от темы и погрузится&nbsp; теорию и практику собственно &quot;сборки из исходных кодов&quot;.<br />Тема бездонная и крайне неоднозначная, но без базовых знаний дальнейшее будет просто непонятно.</p><p>...</p><p><strong>*** Добавлено: 29.09.2020 15:32:12 ***</strong></p><p>... про исходники.<br />Систем сборки существует море, и каждый день кто-то изобретает что-то новое. Но.. есть исторически сложившаяся практика применения самых древних, первых систем, и, негласное соглашение программистов, работающих над основами системы, использовать только их, вернее Её. Система на основе configure→make→make install.<br /> Вот с её помощью и собирается базовый набор компиляции.<br /> Там не сложно :<br />В дереве исходников запускается скрипт configure, который обрабатывает по своему алгоритму всё доступное пространство переменных(вот тут то и нужен наш огород!) и составляет последовательность компиляции.<br />Далее, если конфигурация завершается положительно, make, на основе выхлопа configure собирает всё в бинарные файлы.<br />А напоследок make же, на основе&nbsp; выхлопа configure выполняет процедуру install, устанавливая собранное в заранее обговоренные места.</p><p>configure, в зависимости от прямоты рук тех, кто его составлял принимает кучу аргументов, расписывающих какие переменные использовать, как и куда устанавливать программы, библиотеки и прочее.<br />вот тут то и встречается главная засада всех новичков - &quot;как это работает вообще?!!!&quot;... что тут можно посоветовать? - читайте доки(авось поможет). Важно понимать - без знания как этим пользоваться самостоятельно что-то собрать не получится... хотя... дуракам порой везёт, как знать, как знать...<br /><strong>*** Добавлено: 29.09.2020 16:28:29 ***</strong></p><p>ну ладно, это всё лирика.<br />Практика - критерий истины, это нужно знать.<br />Попробуем создать первый кросс-тул.(их два).<br />Дальше можно просто копипастить шаги в консоль, позже я прокомментирую что зачем, пока тупо Ctrl+C &amp; Ctrl+V...<br />Открываем консоль и становимся root&#039;ом натурально:<br />0.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />su -</p><p></div></p><p>Сейчас все действия выполняются от root&#039;а, пока я явно не укажу другое(п. 5)<br />1.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />export CLFS=/mnt/clfs<br />mkdir -pv ${CLFS}<br />mount -v /dev/sdb2 ${CLFS}<br />install -dv ${CLFS}/tools<br />ln -sv ${CLFS}/tools /<br />install -dv ${CLFS}/cross-tools<br />ln -sv ${CLFS}/cross-tools /<br /></div><br />!!! ахтунг !!! /dev/sdb2 - это пример! ставьте своё!</p><p>2.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />groupadd clfs<br />useradd -s /bin/bash -g clfs -d /home/clfs clfs<br />mkdir -pv /home/clfs<br />chown -v clfs:clfs /home/clfs</p><p>passwd clfs<br /></div></p><p>3.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />chown -vR clfs:clfs ${CLFS}/tools<br />chown -vR clfs:clfs ${CLFS}/cross-tools<br />chown -v clfs:clfs /tools<br />chown -v clfs:clfs /cross-tools<br />cd ${CLFS}<br />mkdir sources<br /></div><br />!!! ахтунг !!!<br />Теперь нужно запастись исходниками. Можно просто шарить по сети и тупо качать, можно на сайте проекта прочитать пункт <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter03/introduction.html">http://www.linuxfromscratch.org/lfs/vie … ction.html</a><br />но есть одно &quot;НО&quot;, я описываю создание немного более расширенной версии LFS, а именно multilib, там более жёсткие требования к среде, поэтому не всё что описано в LFS будет работать.<br />вот полный набор ссылок для кросс-компилятора:<br />1. <a href="ftp://ftp.astron.com/pub/file/file-5.39.tar.gz">ftp://ftp.astron.com/pub/file/file-5.39.tar.gz</a><br />2. <a href="https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.8.9.tar.xz">https://www.kernel.org/pub/linux/kernel … 8.9.tar.xz</a><br />3. <a href="http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz">http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz</a><br />4. <a href="http://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz">http://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz</a><br />5. <a href="http://sourceforge.net/projects/pkgconfiglite/files/0.28-1/pkg-config-lite-0.28-1.tar.gz">http://sourceforge.net/projects/pkgconf … 8-1.tar.gz</a><br />6. <a href="http://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.xz">http://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.xz</a><br />7. <a href="http://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz">http://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz</a><br />8. <a href="https://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz">https://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz</a><br />9. <a href="http://isl.gforge.inria.fr/isl-0.22.1.tar.xz(лучше">http://isl.gforge.inria.fr/isl-0.22.1.tar.xz(лучше</a> использовать из git !!! → <a href="https://repo.or.cz/w/isl.git">https://repo.or.cz/w/isl.git</a> )<br />10. <a href="http://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz">http://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz</a><br />11. <a href="http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz">http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz</a><br />12. <a href="http://ftp.gnu.org/gnu/glibc/glibc-2.32.tar.xz">http://ftp.gnu.org/gnu/glibc/glibc-2.32.tar.xz</a></p><p>Всё это нужно поместить в только что созданный каталог ${CLFS}/sources и присвоить нашему огороженному юзеру, а потом и войти в учётную запись:</p><p>4.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />chown -vR clfs:clfs ${CLFS}/sources<br />su - clfs<br /></div></p><p>5.(!!! ахтунг !!! теперь очень важные танцы с бубной !!!) мы теперь пользователь clfs и все действия в дальнейшем выполняются от его имени, пока я явно не укажу другое!!!<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />cat &gt; ~/.bash_profile &lt;&lt; &quot;EOF&quot;<br />exec env -i HOME=${HOME} TERM=${TERM} PS1=&#039;\u:\w\$ &#039; /bin/bash<br />EOF<br />cat &gt; ~/.bashrc &lt;&lt; &quot;EOF&quot;<br />set +h<br />umask 022<br />CLFS=/mnt/clfs<br />LC_ALL=POSIX<br />PATH=/cross-tools/bin:/bin:/usr/bin<br />export CLFS LC_ALL PATH<br />unset CFLAGS CXXFLAGS PKG_CONFIG_PATH<br />EOF</p><p>source ~/.bash_profile<br /></div></p><p>6.<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />export CLFS_HOST=$(echo ${MACHTYPE} | sed -e &#039;s/-[^-]*/-cross/&#039;)<br />export CLFS_TARGET=&quot;x86_64-unknown-linux-gnu&quot;<br />export CLFS_TARGET32=&quot;i686-pc-linux-gnu&quot;<br />export BUILD32=&quot;-m32&quot;<br />export BUILD64=&quot;-m64&quot;</p><p>cat &gt;&gt; ~/.bashrc &lt;&lt; EOF<br />export CLFS_HOST=&quot;${CLFS_HOST}&quot;<br />export CLFS_TARGET=&quot;${CLFS_TARGET}&quot;<br />export CLFS_TARGET32=&quot;${CLFS_TARGET32}&quot;<br />export BUILD32=&quot;${BUILD32}&quot;<br />export BUILD64=&quot;${BUILD64}&quot;<br />EOF</p><p>cd ${CLFS}/sources<br /></div></p><p>Ну вот теперь можно собирать...</p><p>продолжение следует...</p><p><strong>*** Добавлено: 29.09.2020 19:28:58 ***</strong></p><div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>Ну вот теперь можно собирать...</p></blockquote></div><p>...ну да, ну да, собирать. Надо прояснить некоторые моменты до того как.<br /> Есть два подхода к процессу сборки - первый самый тупой и надёжный: зайти в дерево исходника и скомандовать &quot;ату яво! фас!&quot;, как там в фильме: &quot;...машина надёжная, убойная, 75 патронов, но весит...&quot;, это срабатывает для маленьких наколеночных вещей ака &quot;Hello World!&quot;, но для чего-то серьёзного это не годится(если конечно важен не просто результат, а предсказуемый и, что важнее, обратимый результат, когда всё можно обернуть взад).<br /> Для второго нужны скрипты, как правило на баше(не обязательно). В них прописывается весь сценарий сборки целиком, задача просто запустить скрипт и он всё что нужно выполнит.<br /> В первой иттерации пакетирование(ещё одна фишка) не нужно, всё будем делать &quot;по живому&quot;, но таки скриптиками запастись стоит...</p><p><strong>*** Добавлено: 29.09.2020 20:20:19 ***</strong></p><p>сама процедура проста:<br />распаковываем архив, заходим в него, выполняем последовательность команд:<br /></p><div class="codebox"><pre><code>./configure --prefix=/cross-tools
make -j4
make install</code></pre></div><p>тут важен --prefix=/cross-tools (выше мы сделали симлинк в главном дереве системы на реальное расположение директории). Это нужно для того, чтоб готовые программы, оказавшись в изоляции, продолжали считать своё местоположение от корня.<br /> Но это не всё, для каждого архива набор специфических установок разный. Чуть позже я залью обновлённое дерево на гитлаб, а пока просто приведу по порядку сборки для каждого архива:</p><p>file-5.39<br /></p><div class="codebox"><pre><code>./configure --prefix=/cross-tools
make
make install</code></pre></div><p>linux-5.8.9<br /></p><div class="codebox"><pre><code>make mrproper
make INSTALL_HDR_PATH=dest headers_install
mkdir -pv /tools/include || true
cp -rv dest/include/* /tools/include</code></pre></div><p>m4-1.4.18<br /></p><div class="codebox"><pre><code>sed -i &#039;s/IO_ftrylockfile/IO_EOF_SEEN/&#039; lib/*.c
echo &quot;#define _IO_IN_BACKUP 0x100&quot; &gt;&gt; lib/stdio-impl.h
./configure --prefix=/cross-tools
make
make install</code></pre></div><p>сид тут редактирует устаревшие или глюкнутые артефакты, такого будет много, не пугайтесь.</p><p>ncurses-6.2<br /></p><div class="codebox"><pre><code>sed -i s/mawk// configure
./configure \
            --prefix=/cross-tools \
            --with-shared   \
            --without-debug \
            --without-ada   \
            --enable-widec  \
            --enable-overwrite \
            --without-gpm
make -C include
make -C progs tic
install -v -m755 progs/tic /cross-tools/bin</code></pre></div><p>pkg-config-lite-0.28-1<br /></p><div class="codebox"><pre><code>./configure \
    --prefix=/cross-tools \
    --build=${CLFS_TARGET} \
    --with-pc-path=/tools/lib64/pkgconfig:/tools/share/pkgconfig
make
make install</code></pre></div><p>gmp-6.2.0<br /></p><div class="codebox"><pre><code>./configure   \
    --prefix=/cross-tools \
    --enable-cxx \
    --disable-static
make
make install</code></pre></div><p>mpfr-4.1.0<br /></p><div class="codebox"><pre><code>LDFLAGS=&quot;-Wl,-rpath,/cross-tools/lib&quot; \
./configure \
    --prefix=/cross-tools \
    --disable-static \
    --with-gmp=/cross-tools
make
make install</code></pre></div><p>mpc-1.2.0<br /></p><div class="codebox"><pre><code>LDFLAGS=&quot;-Wl,-rpath,/cross-tools/lib&quot; \
./configure \
    --prefix=/cross-tools \
    --disable-static \
    --with-gmp=/cross-tools \
    --with-mpfr=/cross-tools
make
make install</code></pre></div><p>isl-0.22.1<br /></p><div class="codebox"><pre><code>LDFLAGS=&quot;-Wl,-rpath,/cross-tools/lib&quot; \
./configure \
    --prefix=/cross-tools \
    --disable-static \
    --with-gmp-prefix=/cross-tools
make
make install</code></pre></div><p>binutils-2.35<br /></p><div class="codebox"><pre><code>mkdir -v build
cd       build

AR=ar AS=as \
../configure \
    --prefix=/cross-tools \
    --host=${CLFS_HOST} \
    --target=${CLFS_TARGET} \
    --with-sysroot=${CLFS} \
    --with-lib-path=/tools/lib:/tools/lib64 \
    --disable-nls \
    --disable-static \
    --enable-64-bit-bfd \
    --enable-gold=yes \
    --enable-plugins \
    --enable-threads \
    --disable-werror
make
make install</code></pre></div><p>тут надо пояснить - некоторые проекты требуют, чтоб дерево исходников и директория сборки различались, поэтому создаём отдельную площадку где будет сборка.</p><p>gcc-10.2.0 - первый ход, предварительный. Далее директория для сборки будет создаваться вообще вне дерева исходников, для удобства.<br /></p><div class="codebox"><pre><code>patch -Np1 -i ../gcc-10.2.0-specs-1.diff
echo -en &#039;\n#undef STANDARD_STARTFILE_PREFIX_1\n#define STANDARD_STARTFILE_PREFIX_1 &quot;/tools/lib/&quot;\n&#039; &gt;&gt; gcc/config/linux.h
echo -en &#039;\n#undef STANDARD_STARTFILE_PREFIX_2\n#define STANDARD_STARTFILE_PREFIX_2 &quot;&quot;\n&#039; &gt;&gt; gcc/config/linux.h
touch /tools/include/limits.h
mkdir -v ../gcc-build
cd ../gcc-build
AR=ar \
LDFLAGS=&quot;-Wl,-rpath,/cross-tools/lib&quot; \
../gcc-10.2.0/configure \
    --prefix=/cross-tools \
    --build=${CLFS_HOST} \
    --host=${CLFS_HOST} \
    --target=${CLFS_TARGET} \
    --with-sysroot=${CLFS} \
    --with-local-prefix=/tools \
    --with-native-system-header-dir=/tools/include \
    --disable-shared \
    --with-mpfr=/cross-tools \
    --with-gmp=/cross-tools \
    --with-mpc=/cross-tools \
    --with-isl=/cross-tools \
    --without-headers \
    --with-newlib \
    --disable-decimal-float \
    --disable-libgomp \
    --disable-libssp \
    --disable-libatomic \
    --disable-libitm \
    --disable-libsanitizer \
    --disable-libquadmath \
    --disable-libvtv \
    --disable-threads \
    --with-isl=/cross-tools \
    --enable-languages=c,c++ \
    --with-glibc-version=2.11
make -j4 all-gcc all-target-libgcc
make install-gcc install-target-libgcc</code></pre></div><p>сам патч вот тут - <a href="https://gitlab.com/Gramozeka/kokoro/-/blob/master/sources/gcc-10.2.0-specs-1.diff">https://gitlab.com/Gramozeka/kokoro/-/b … ecs-1.diff</a> , он исправляет пути для автоматического линковщика, чтоб получившийся прекомпилятор не ломился в родительскую систему за каждой мелочёвкой, это важная примочка, но есть современные средства позволяющие получать тот же результат, но тогда надо полностью следовать путём предлагаемым в официальном руководстве и забыть о multilib.</p><p>glibc-2.32 32-бита.<br /></p><div class="codebox"><pre><code>mkdir -v ../build
cd      ../build
echo &quot;libc_cv_slibdir=/tools/lib&quot; &gt;&gt; config.cache
BUILD_CC=&quot;gcc&quot; \
CC=&quot;${CLFS_TARGET}-gcc ${BUILD32}&quot;  \
BUILD_CXX=&quot;g++&quot;  \
CXX=&quot;${CLFS_TARGET}-g++ ${BUILD32}&quot; \
AR=&quot;${CLFS_TARGET}-ar&quot; \
RANLIB=&quot;${CLFS_TARGET}-ranlib&quot; \
../glibc-2.32/configure \
    --prefix=/tools \
    --host=${CLFS_TARGET32} \
    --build=${CLFS_HOST} \
    --enable-kernel=3.2 \
    --with-binutils=/cross-tools/bin \
    --with-headers=/tools/include \
         --enable-add-ons \
  --enable-obsolete-nsl \
  --enable-obsolete-rpc \
  --enable-profile \
  --enable-static-nss \
  --disable-werror
    make -j4
    make install</code></pre></div><p>glibc-2.32 64-бита.<br /></p><div class="codebox"><pre><code>mkdir -v ../build
cd      ../build

echo &quot;libc_cv_slibdir=/tools/lib64&quot; &gt;&gt; config.cache

BUILD_CC=&quot;gcc ${BUILD64}&quot; \
CC=&quot;${CLFS_TARGET}-gcc ${BUILD64}&quot;  \
BUILD_CXX=&quot;g++ ${BUILD64}&quot;  \
CXX=&quot;${CLFS_TARGET}-g++ ${BUILD64}&quot; \
AR=&quot;${CLFS_TARGET}-ar&quot; \
RANLIB=&quot;${CLFS_TARGET}-ranlib&quot; \
../glibc-2.32/configure \
    --prefix=/tools \
    --host=${CLFS_TARGET} \
    --build=${CLFS_HOST} \
        --libdir=/tools/lib64 \
    --enable-kernel=3.2 \
    --with-binutils=/cross-tools/bin \
    --with-headers=/tools/include \
       --enable-add-ons \
  --enable-obsolete-nsl \
  --enable-obsolete-rpc \
  --enable-profile \
  --enable-static-nss \
 --cache-file=config.cache --disable-werror
    make -j4
    make install</code></pre></div><p>Тут надо пояснить - материнская система должна уметь в мультилиб! Это без вариантов.</p><p>gcc-10.2.0_cross<br />Собственно первый ход кросс-компиляции, всё что выше это только прелюдия была.<br /></p><div class="codebox"><pre><code>patch -Np1 -i ../gcc-10.2.0-specs-1.diff
echo -en &#039;\n#undef STANDARD_STARTFILE_PREFIX_1\n#define STANDARD_STARTFILE_PREFIX_1 &quot;/tools/lib/&quot;\n&#039; &gt;&gt; gcc/config/linux.h
echo -en &#039;\n#undef STANDARD_STARTFILE_PREFIX_2\n#define STANDARD_STARTFILE_PREFIX_2 &quot;&quot;\n&#039; &gt;&gt; gcc/config/linux.h
mkdir -v ../gcc-build
cd ../gcc-build
AR=ar \
LDFLAGS=&quot;-Wl,-rpath,/cross-tools/lib&quot; \
../gcc-10.2.0/configure \
    --prefix=/cross-tools \
    --build=${CLFS_HOST} \
    --target=${CLFS_TARGET} \
    --host=${CLFS_HOST} \
    --with-sysroot=${CLFS} \
    --with-local-prefix=/tools \
    --with-native-system-header-dir=/tools/include \
    --disable-static \
    --enable-languages=c,c++ \
    --with-mpc=/cross-tools \
    --with-mpfr=/cross-tools \
    --with-gmp=/cross-tools \
    --with-isl=/cross-tools
make -j4 AS_FOR_TARGET=&quot;${CLFS_TARGET}-as&quot; \
    LD_FOR_TARGET=&quot;${CLFS_TARGET}-ld&quot;
make install</code></pre></div><br /><p>Выполнив всё это, мы получим первый кросс-компилятор, способный собрать полноценное дерево cross-tools, с помощью которого можно собрать готовую систему, причём платформу можно выбирать в широких пределах, на то он и &quot;кросс&quot;... ну а можно и просто хелоуворды кАнпилять, какая разница в общем-то...<br />PS// об одной &quot;мелочи&quot; я не рассказал, это такая фича как<br /></p><div class="codebox"><pre><code>make check</code></pre></div><p>это девелоперская примочка, позволяющая тестировать собранное на предмет багов и вообще годности к использованию. Она важна с академической точки зрения, но простому обывателю мало пригодна и понятна, однако знать о ней нужно и даже иногда пользоваться. Только стоит учесть - если на сборку(make) глибса уйдёт примерно минут десять, то на make check после неё уйдёт более часа.</p><p>продолжение обязательно будет...<br /><strong>*** Добавлено: 30.09.2020 02:19:08 ***</strong></p><p>...продолжим.</p><p>Маленькое лирическое отступление.<br /> Современные тенденции в мире Linux меня лично не очень радуют. Корпорации медленно но верно прибирают к рукам все наработки сообщества. Потерингиада уже показывает своё истинное нутро, лишая по большей части манёвра и превращая систему в аналог Венды. Это удручает, но многим нравится, с этим тоже нужно считаться. Я несколько раз пробовал это поделие(systemD), но каждый раз убеждался - не стоит тратить на него время, оно как раковая опухоль, суёт свои метастазы в каждый уголок системы, а по последним сведениям и уже в ядро! Мутная, глюкавая, абсолютно не прозрачная прога пытается стать самой системой - это не юникс-вей! Кто бы что не говорил, нравится? Пользуйтесь, дело хозяйское, мы пока ещё в относительно свободном мире. Но по этой дороге я не ходок...</p><p> Итак, кросс-тул нейтрален, на его базе можно и системДЭ собрать, главное понимать что творишь, а там дело техники, но не спрашивайте меня как это делать, на сайте проекта есть ветка посвящённая этому чуду-юду.<br /> А я по старинке, на SysVinit.</p><p>*******************************************<br />Важный момент. Мультилиб специфическая штука и во многих дистрах уже свернули работы по его поддержке, поэтому собрать gcc с его поддержкой будет проблематично. Я не совсем дока по части железа, поэтому стопроцентной гарантии не дам, но полный набор инструментов я построил на Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz , обладатели аналогичных железок могут ими воспользоваться.<br /> Лежит тут - <a href="https://gitlab.com/Gramozeka/kokoro/-/tree/master/Core/Cross-tools">https://gitlab.com/Gramozeka/kokoro/-/t … ross-tools</a><br />Достаточно распаковать оба архива в нужное место и после небольших манипуляций можно делать chroot в полностью готовую для сборки системы среду. Она уже умеет в мультилиб, поэтому иметь какую-то продвинутую систему не обязательно, лишь бы она(система) умела в chroot, и могла в 64-битное ядро, более-менее свежее.<br />********************************************</p><p>продолжу описание процесса.</p><p>...после сборки gcc-10.2.0_cross, мы всё ещё сильно зависим от материнской системы, нам нужны всякие тары, сиды, перлы и прочие питоны с башами. Второй этап это создание этих всех инструментов с привязанным к ним компилятором, который будет зависим только от самого себя.<br /> Вот нужные инструменты по порядку сборки:<br /></p><div class="codebox"><pre><code>gmp
mpfr
mpc
isl
zlib
binutils
gcc
ncurses
bash
bzip2
check
coreutils
diffutils
file
findutils-
gawk
grep
gzip
m4
make
patch
sed
tar
xz
СТОП!!!!!! ЭТО ОТДЕЛЬНАЯ ПЕСТНЯ́!
gettext
bison
perl
Python
multiarch_wrapper
texinfo
util-linux
vim</code></pre></div><p>Некоторые повторяются? ..хм, да, есть такое. Сейчас объясню механизм.<br />Наша цель с помощью работающей системы с компилятором А, построить работающую систему с компилятором С.<br /> Но, прямым ходом, этого сделать нельзя, ибо динамическая линковка наше всё. Но её можно обмануть.<br />Схематично это работает так:<br />А собирает В1(выше это оно) с привязкой к посторонней директории в корне(это важно), со своим набором библиотек и заголовков, никак не слинкованными с основной системой.<br />Далее В1, собирает для себя вспомогательные инструменты и В2, которые привязаны только к нему, слинкованы с ним, и не имеют с материнской системой ничего общего.<br />Единственный недостаток - это всё привязано не к корню системы &quot;/ &quot;, а к директории в корне, при том, что имеет некоторые связи с В1.<br />Так вот когда мы соберём С с помощью В2 основываясь на реальном корне системы &quot;/&quot;, мы избавимся и от В1, и от В2, и получим самодостаточный компилятор в нативной среде. Для этого нам понадобится chroot.(но это чуть позже)</p><p>В этот раз, мы уже имеем компилятор который к материнской системе не принадлежит, всё ещё оставаясь огороженным пользователем clfs, добавим несколько переменных и изменим саму среду сборки:</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />export CC=&quot;${CLFS_TARGET}-gcc ${BUILD64}&quot;<br />export CXX=&quot;${CLFS_TARGET}-g++ ${BUILD64}&quot;<br />export AR=&quot;${CLFS_TARGET}-ar&quot;<br />export AS=&quot;${CLFS_TARGET}-as&quot;<br />export RANLIB=&quot;${CLFS_TARGET}-ranlib&quot;<br />export LD=&quot;${CLFS_TARGET}-ld&quot;<br />export STRIP=&quot;${CLFS_TARGET}-strip&quot;</p><p>echo export CC=\&quot;&quot;${CC}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export CXX=\&quot;&quot;${CXX}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export AR=\&quot;&quot;${AR}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export AS=\&quot;&quot;${AS}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export RANLIB=\&quot;&quot;${RANLIB}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export LD=\&quot;&quot;${LD}\&quot;&quot; &gt;&gt; ~/.bashrc<br />echo export STRIP=\&quot;&quot;${STRIP}\&quot;&quot; &gt;&gt; ~/.bashrc<br /></div></p><p>Это очень важный момент, так как в окружении пользователя глобально объявлены переменные&nbsp; CC, CXX и т.д., то при умолчании, скрипты configure, сперва будут искать в системе именно эти компиляторы и инструменты, а в некоторых, так и вовсе только эти переменные и отвечают за правильное обращение к сборочному процессу, а т.к. хеширование у оболочки отключено, то в первую очередь будет найден наш новый кросс-компилятор </p><p>x86_64-unknown-linux-gnu-gcc , а не системный gcc.</p><p>После объявления этих переменных, можно начинать собирать вторую часть кросс-компилятора(выше список). Подробно расписывать все 33 позиции наверно не стоит, слишком уж много места это занимает.<br />Подробно можно посмотреть вот тут - <a href="https://gitlab.com/Gramozeka/kokoro/-/tree/master/Temporary-System">https://gitlab.com/Gramozeka/kokoro/-/t … ary-System</a><br />там всё должно быть понятно, если есть желание, то немного доработав(заменив или убрав переменные скрипта) можно просто собирать вручную.</p><p>На счет &quot;СТОП!!!!!! ЭТО ОТДЕЛЬНАЯ ПЕСТНЯ́!&quot;. Это один из тонких моментов.<br /> Некоторые вещи, такие как perl или python, при сборке крайне неразборчивы и мало-управляемые, поэтому практически не пригодны для кросс-компиляции, т.к. собираясь, они находят в системе самих же себя установленных, и наглухо линкуются с тем, что есть, запретить это или как-то ограничить просто не реально. Поэтому, дойдя до этого места, дособирать кросс-тул придётся уже в chroot-окружении.<br />***************************************<br />Вернёмся к вопросу возможности материнской системы к собиранию мультилиба, выше ссылка на два архива, если нет возможности собрать нативный мультилиб, то можно воспользоваться уже готовым кросс-тулом, в нем уже собраны все нужные вещи, в том числе и эта пестня с питонами и перлами...<br />&nbsp; Кто-то заметил - а что за приблуда multiarch_wrapper ? В самом низу поясню зачем это.<br />*************************************************</p><div class="quotebox"><blockquote><p>... дойдя до этого места, дособирать кросс-тул придётся уже в chroot-окружении.</p></blockquote></div><p> Для этого, собрав всё до xz включительно, нужно выйти из учетки clfs, он больше не нужен и его можно удалить из системы полностью, необходимо, оставаясь root&#039;ом, создать в устанавливаемой системе необходимое дерево процессов ака proc, dev, var и т.д., создать ноды(что это вообще за чертовщина!?) и прочие моменты, монтируем это всё хозяйство в ядро работающей системы и выполняем chroot:<br />(!!!Ахтунг!!! Теперь мы root! Практически партизан в тылу врага, поэтому делаем всё очень вдумчиво и аккуратно.)</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"></p><p>&nbsp; mkdir -pv ${CLFS}/{dev,proc,run,sys}<br />&nbsp; mknod -m 600 ${CLFS}/dev/console c 5 1<br />&nbsp; mknod -m 666 ${CLFS}/dev/null c 1 3<br />&nbsp; mount -v -o bind /dev ${CLFS}/dev<br />&nbsp; mount -vt devpts -o gid=5,mode=620 devpts ${CLFS}/dev/pts<br />&nbsp; mount -vt proc proc ${CLFS}/proc<br />&nbsp; mount -vt tmpfs tmpfs ${CLFS}/run<br />&nbsp; mount -vt sysfs sysfs ${CLFS}/sys<br />&nbsp; [ -h ${CLFS}/dev/shm ] &amp;&amp; mkdir -pv ${CLFS}/$(readlink ${CLFS}/dev/shm)</p><p></div><br />а теперь Горбатый!!!(чрутимся в наш шалашик):</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />chroot &quot;${CLFS}&quot; /tools/bin/env -i \<br />&nbsp; &nbsp; HOME=/root TERM=&quot;${TERM}&quot; PS1=&#039;\u:\w\$ &#039; \<br />&nbsp; &nbsp; PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \<br />&nbsp; &nbsp; /tools/bin/bash --login +h<br /></div></p><p>Выполнив это мы увидим вот такую картинку:</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />I have no name!:/#<br /></div></p><p>теперь мы единственный и безраздельный пользователь с безграничными полномочиями в системном пространстве будущей системы, в которой пока нет ничего, кроме пустоты.</p><p> Теперь нужно построить всё системное дерево &quot;как у людей&quot;:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />chown -Rv 0:0 /tools<br />chown -Rv 0:0 /cross-tools<br />mkdir -pv /{bin,boot,dev,{etc/,}opt,lib{,64},mnt}<br />mkdir -pv /{proc,media/{floppy,cdrom},run/{,shm},sbin,srv,sys}<br />mkdir -pv /var/{lock,log,mail,spool}<br />mkdir -pv /var/{opt,cache,lib/{misc,locate},local}<br />ln -sv lib /var/lib64<br />install -dv /root -m 0750<br />install -dv {/var,}/tmp -m 1777<br />ln -sv ../run /var/run<br />mkdir -pv /usr/{,local/}{bin,include,lib{,64},sbin,src}<br />mkdir -pv /usr/{,local/}share/{doc,info,locale,man}<br />mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}<br />mkdir -pv /usr/{,local/}share/man/man{1..8}<br />install -dv /usr/lib/locale<br />ln -sv ../lib/locale /usr/lib64<br />ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin<br />ln -sv /tools/bin/file /usr/bin<br />ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib<br />ln -sv /tools/lib64/libgcc_s.so{,.1} /usr/lib64<br />ln -sv /tools/lib/libstd* /usr/lib<br />ln -sv /tools/lib64/libstd* /usr/lib64<br />ln -sv bash /bin/sh<br /></div><br />задать все те мелочи что мы делали прежде:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />export BUILD32=&quot;-m32&quot;<br />export BUILD64=&quot;-m64&quot;<br />CLFS_TARGET32=&quot;i686-pc-linux&quot;<br />CLFS_TARGET=&quot;x86_64-Phoniex-linux&quot;<br /></div><br />ну и прибить это всё гвоздями к учётной записи пока ещё единственного пользователя:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />cat &gt;&gt; ${CLFS}/root/.bash_profile &lt;&lt; EOF<br />export BUILD32=&quot;${BUILD32}&quot;<br />export BUILD64=&quot;${BUILD64}&quot;<br />export CLFS_TARGET32=&quot;${CLFS_TARGET32}&quot;<br />export CLFS_TARGET=&quot;${CLFS_TARGET}&quot;<br />EOF<br /></div></p><p>Чтобы всё это заработало как надо, нужно создать системные декорации для root&#039;а и системы сборки:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />cat &gt; /etc/passwd &lt;&lt; &quot;EOF&quot;<br />root:x:0:0:root:/root:/bin/bash<br />bin:x:1:1:/bin:/bin/false<br />daemon:x:2:6:/sbin:/bin/false<br />messagebus:x:27:27:D-Bus Message Daemon User:/dev/null:/bin/false<br />nobody:x:65534:65533:Unprivileged User:/dev/null:/bin/false<br />EOF</p><p>cat &gt; /etc/group &lt;&lt; &quot;EOF&quot;<br />root:x:0:<br />bin:x:1:<br />sys:x:2:<br />kmem:x:3:<br />tty:x:5:<br />tape:x:4:<br />daemon:x:6:<br />floppy:x:7:<br />disk:x:8:<br />lp:x:9:<br />dialout:x:10:<br />audio:x:11:<br />video:x:12:<br />utmp:x:13:<br />usb:x:14:<br />cdrom:x:15:<br />adm:x:16:<br />input:x:24:<br />messagebus:x:27:<br />mail:x:30:<br />wheel:x:39:<br />nogroup:x:65533:<br />EOF</p><br /><p>touch /var/log/{btmp,faillog,lastlog,wtmp}<br />chgrp -v utmp /var/log/{faillog,lastlog}<br />chmod -v 664 /var/log/{faillog,lastlog}<br />chmod -v 600 /var/log/btmp<br /></div></p><p>А теперь объявляем себя Государем Мира!</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />exec /tools/bin/bash --login +h<br /></div></p><p>и увидим скромное:</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />root:/#<br /></div><br /> Т.к. ранее был собран минимальный набор системных функций, то простейшие команды уже доступны и можно смело перемещаться по системе.</p><p>Тут нужно оговориться - я собираю всё в специально организованном загончике, но можно всё делать и по живому, например в /tmp.<br />Делаем cd /tmp, распаковываем нужный исходник, например unxz /sources/gettext-0.21.tar.xz, переходим в него и собираем.<br /> Все нужные опции можно подсмотреть в ветке Temporary-System тут <a href="https://gitlab.com/Gramozeka/kokoro/-/tree/master/">https://gitlab.com/Gramozeka/kokoro/-/tree/master/</a> . Все программы из второго списка собираются в /tools, а после входа в чрут, туда же дособираются и эти :</p><div class="codebox"><pre><code>gettext
bison
perl
Python
multiarch_wrapper
texinfo
util-linux
vim</code></pre></div><p>Когда это всё собрано, можно приступать собственно к построению своей собственной системы, так, как взбредёт в голову. Есть конечно базовый минимум, который нужно построить чтобы просто удалить наши кросс-инструменты, вот примерный список :<br /></p><div class="codebox"><pre><code>linux-5.8.9
man-pages-5.08
glibc-2.32
tools-prep
link-glibc-32
zlib-1.2.11
bzip2-1.0.8
xz-5.2.5
zstd-1.4.5
file-5.39
ncurses-6.2
readline-8.0
m4-1.4.18
bc-3.1.5
flex-2.6.4
binutils-2.35
gmp-6.2.0
mpfr-4.1.0
mpc-1.2.0
isl-0.22.1
attr-2.4.48
acl-2.2.53
libcap-2.43
shadow-4.8.1
gcc-10.2.0-final
pkg-config-0.29.2
ncurses-6.2-final
sed-4.8
psmisc-23.3
gettext-0.21
bison-3.7.2
binutils-2.35_i686
grep-3.4
bash-5.0
libtool-2.4.6
gdbm-1.18.1
gperf-3.1
expat-2.2.9
inetutils-1.9.4
perl-5.32.0
XML-Parser-2.46
intltool-0.51.0
autoconf-2.69
automake-1.16.2
kmod-27
elfutils-0.181
libffi-3.3
openssl-1.1.1g
Python-3.8.5
re2c-2.0.3
ninja-1.10.1
meson-0.55.3
coreutils-8.32
check-0.15.2
diffutils-3.7
gawk-5.1.0
findutils-4.7.0
groff-1.22.4
grub-2.04
less-551
gzip-1.10
iproute2-5.8.0
kbd-2.3.0
libpipeline-1.5.3
make-4.3
patch-2.7.6
man-db-2.9.3
tar-1.32
texinfo-6.7
vim-8.2.1361
eudev-3.2.9
procps-ng-3.3.16
util-linux-2.36
e2fsprogs-1.45.6
sysklogd-1.5.1
sysvinit-2.97
libseccomp-2.5.0
iana-etc-2.30
libsigsegv-2.12
pcre-8.44
cpio-2.13
gc-8.0.4
gpm-1.20.7
libatomic_ops-7.6.10
lsb-release-1.4</code></pre></div><p> После сборки shadow нужно задать пароль рута, после сборки bash который /bin/bash(не забыли, у нас есть ещё и /tools/bin/bash) нужно войти в новый баш, и продолжать уже из него...<br />Важная тонкость - есть такой пакет libffi, отвечает за интерфейсы программных вызовов при работе с процессором, так вот по умолчанию у неё стоит флаг сборки --with-gcc-arch=native, т.е. она собирается под тот процессор, который сейчас реально собирает, и если мы попытаемся перенести всю собранную систему на другое железо, с другим процессором(пусть даже и того же вендора), то есть большой шанс словить &quot;Illegal Operation Errors&quot; и полностью неработающую систему, чтобы это избежать нужно либо явно указывать архитектуру на которой в последствии всё это будет работать, либо выставлять некие виртуальные усреднения ака x86_64. Подробности читать тут - <a href="https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/x86-Options.html">https://gcc.gnu.org/onlinedocs/gcc-10.2 … tions.html</a><br />...<br />Список дан в той последовательности, в которой он гарантированно соберётся, без конфликта зависимостей,цифры дело временное, на момент написания этого поста этот набор был собран и проверен, система загрузилась штатно, без костылей и примочек, можно собирать любой собственный софт по задачам.<br /> Да-да, про ядро и настройки ни слова&nbsp; <img src="https://linuxforum.ru/img/smilies/ag.gif" alt="ag" /> .<br /> Это отдельное лютое шаманство.<br />Когда вот это всё собрано, собственно и наступает момент истины, насколько мы вообще представляем &quot;как это работает&quot;.<br /> Последовательность действий такова:<br />Сперва нужно выйти из системы в материнскую систему и войти обратно явно указав использовать /tools/bin/bash, это нужно для процедуры strip, она сильно уменьшает объём занимаемого пространства, буквально в разы, да и быстродействие повышает. Чистится всё хозяйство примерно так:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />chroot ${CLFS} /tools/bin/env -i \<br />&nbsp; &nbsp; HOME=/root TERM=${TERM} PS1=&#039;\u:\w\$ &#039; \<br />&nbsp; &nbsp; PATH=/bin:/usr/bin:/sbin:/usr/sbin \<br />&nbsp; &nbsp; /tools/bin/bash --login<br /></div><br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />/tools/bin/find /{,usr/}{bin,lib,lib64,sbin} -type f \<br />&nbsp; &nbsp;-exec /tools/bin/strip --strip-debug &#039;{}&#039; &#039;;&#039;<br /></div><br />Сообщения :<br />File format not recognized<br />игнорируем, это значит что файл либо сценарий оболочки, либо служебный конфиг.<br />После можно ещё выполнить :<br />--strip-all</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">/tools/bin/find /{,usr/}{bin,sbin} -type f \<br />&nbsp; &nbsp;-exec /tools/bin/strip --strip-all &#039;{}&#039; &#039;;&#039;</div><br />&nbsp; &nbsp;<br />но это уже на собственное усмотрение, один момент - не стоит делать --strip-all для<br />библиотек(в lib,lib64) это может привести к неработоспособности системы...<br />Выходим снова в хост-систему:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">logout</div><br />и входим в уже полностью сформированную новую систему:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">chroot &quot;$CLFS&quot; /usr/bin/env -i&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />&nbsp; &nbsp; HOME=/root TERM=&quot;$TERM&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />&nbsp; &nbsp; PS1=&#039;(clfs chroot) \u:\w\$ &#039;&nbsp; &nbsp; &nbsp; &nbsp; \<br />&nbsp; &nbsp; PATH=/bin:/usr/bin:/sbin:/usr/sbin \<br />&nbsp; &nbsp; /bin/bash --login</div><br />, а теперь само шаманство...<br />Сперва нужно построить всё в /etc<br />Есть уже подготовленный минимум для SysVinit лежит тут <a href="http://www.linuxfromscratch.org/lfs/downloads/development/lfs-bootscripts-20200818.tar.xz">http://www.linuxfromscratch.org/lfs/dow … 818.tar.xz</a><br />Нужно распаковать архив в в нём выполнить make install безо всего.<br />Затем необходимо настроить udev, там много чего можно сделать, самое простое :<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />bash /lib/udev/init-net-rules.sh<br /></div><br />Затем сеть, в каноническом SysVinit это имеет свою специфику, подробно описано тут - <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter09/network.html">http://www.linuxfromscratch.org/lfs/vie … twork.html</a><br />Все инициирующие скрипты и настройки описаны тут - <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter09/usage.html">http://www.linuxfromscratch.org/lfs/vie … usage.html</a><br />Настройка глобального профиля баш целая наука, минимум описан тут - <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter09/profile.html">http://www.linuxfromscratch.org/lfs/vie … ofile.html</a> , <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter09/inputrc.html">http://www.linuxfromscratch.org/lfs/vie … putrc.html</a> , <a href="http://www.linuxfromscratch.org/lfs/view/development/chapter09/etcshells.html">http://www.linuxfromscratch.org/lfs/vie … hells.html</a></p><p>Когда всё это сделано собственно остаётся только собрать своё ядро, установить загрузчик и всё, система готова. Правда она ещё ничерта не может, ни сеть толком, ни всяких гитов и иксов, но это уже другая глава, где нужно решать вопросы с пакетной системой, стратегический план построения системы, что нужно, а что не очень, как автоматизировать те или иные процессы и т.д.. Частично это описано тут - <a href="http://www.linuxfromscratch.org/blfs/view/svn/,">http://www.linuxfromscratch.org/blfs/view/svn/,</a> но далеко не всё, тут уже личная квалификация рулит и педалит. Я конечно это всё решил по своему и сейчас пишу из вот этого всего, есть проект моих портянок, скорее всего через какое-то время(до месяца, возможно и дольше) я залью свой набор готовой системы под вот это ядро - <a href="https://gitlab.com/Gramozeka/kokoro">https://gitlab.com/Gramozeka/kokoro</a> , но это процесс не быстрый, так что придумывайте без меня, задавайте вопросы, что знаю подскажу.<br /><strong>*** Добавлено: 30.09.2020 03:39:24 ***</strong></p><p>*********<br />отдельно про multiarch_wrapper.<br /> Т.к. у нас мультилиб, встаёт вопрос - как сепарировать библиотеки и бинарники разных битностей.<br /> Вот это multiarch_wrapper для того и нужен. Если библиотеки можно разнести по lib32 и lib64, то с бинарниками это всё сложнее, потом, когда система уже собрана, это всё решается в индивидуальном порядке, я например всю ветку 32-бит вынес в отдельный анклав в корне /i686 со своим системным деревом, практически контейнер аль-ля docker, но на этапе сборке это всё не так просто.<br /> Работает он (multiarch_wrapper) очень просто, кто секёт в ссях может почитать сам:<br /></p><div class="codebox"><pre><code>#define _GNU_SOURCE

#include &lt;errno.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/wait.h&gt;
#include &lt;unistd.h&gt;

#ifndef DEF_SUFFIX
#  define DEF_SUFFIX &quot;64&quot;
#endif

int main(int argc, char **argv)
{
  char *filename;
  char *suffix;

  if(!(suffix = getenv(&quot;USE_ARCH&quot;)))
    if(!(suffix = getenv(&quot;BUILDENV&quot;)))
      suffix = DEF_SUFFIX;

  if (asprintf(&amp;filename, &quot;%s-%s&quot;, argv[0], suffix) &lt; 0) {
    perror(argv[0]);
    return -1;
  }

  int status = EXIT_FAILURE;
  pid_t pid = fork();

  if (pid == 0) {
    execvp(filename, argv);
    perror(filename);
  } else if (pid &lt; 0) {
    perror(argv[0]);
  } else {
    if (waitpid(pid, &amp;status, 0) != pid) {
      status = EXIT_FAILURE;
      perror(argv[0]);
    } else {
      status = WEXITSTATUS(status);
    }
  }

  free(filename);

  return status;
}</code></pre></div><p>работает это так:<br />имеем приложение uasya_hakir под обе архитектуры( т.е. два бинарника с одинаковым названием, но разной битности). То, что на 32-bit переименовываем в uasya_hakir-32, а то что на 64-bit в uasya_hakir-64. Теперь создаём ссылку uasya_hakir на скомпилированный бинарник multiarch_wrapper. <br /> И ??? Объявляем глобальную системную переменную USE_ARCH в двух видах : USE_ARCH=32 и USE_ARCH=64. Теперь, чтобы запустить 32-х битный вариант uasya_hakir , вызываем его так :<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />/$ USE_ARCH=32 uasya_hakir<br /></div></p><p>или, если нам нужна 64-х битная версия то :<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />/$ USE_ARCH=64 uasya_hakir<br /></div></p><p>или вообще :<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh"><br />/$ uasya_hakir<br /></div><br />т.к. по умолчанию принята 64-bit архитектура. Врапер подменяет продолжение имени ссылки на необходимую цифру и вызывает это полное имя. Это нужно для двухголового питона и перла, на этапе сборки основной системы, подробней как я это устроил смотрите в скриптах на кокоро.<br /><strong>*** Добавлено: 30.09.2020 22:44:06 ***</strong></p><p>+</p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Wed, 30 Sep 2020 19:44:06 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=467866#p467866</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464126#p464126</link>
			<description><![CDATA[<div class="quotebox"><cite>Wolfenberg пишет:</cite><blockquote><p> Сам обещал показать болгарку под управлением Gentoo Linux.</p></blockquote></div><p>пруфы!!<br />я такого не говорил, но на сие поделие бы глянул...<br />и таки да! Прекращайте оффтоп, давайте по существу темы.<br />Тут копался в wine, так обнаружил одну забавную фичу - а именно, оказывается можно построить практически аналог WoW64, для этого нужен корректный multilib и ванильный i686-based, в первом строится чистый wine-win64, во втором чистый wine-i686, потом в первом собирается гибрид wine-win64+wine-i686=wine-multilib.<br />В таком гибриде корректно работают проги как 32-бит, так и 64-бит, собственно как в любой 64-бит винде. <br />вот так выглядит дерево такого вайна:<br /><a href="http://www.picshare.ru/view/10040513/"><span class="postimg"><img src="http://www.picshare.ru/uploads/190506/Nizeq2E9yn_thumb.jpg" alt="http://www.picshare.ru/uploads/190506/Nizeq2E9yn_thumb.jpg" /></span></a><br />при winecfg ошибок меньше в разы!(и да, я собираю актуальный staging с ./patches/patchinstall.sh DESTDIR=../$PRGNAM-$VERSION --all<br />...............</p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Mon, 06 May 2019 20:17:20 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464126#p464126</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464125#p464125</link>
			<description><![CDATA[<div class="quotebox"><cite>Wolfenberg пишет:</cite><blockquote><p> болгарку под управлением Gentoo Linux.</p></blockquote></div><p> <img src="https://linuxforum.ru/img/smilies/ai.gif" alt="ai" /> я тоже хочу такое увидеть, это же шедевр</p>]]></description>
			<author><![CDATA[null@example.com (lone_wolf)]]></author>
			<pubDate>Mon, 06 May 2019 19:45:03 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464125#p464125</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464119#p464119</link>
			<description><![CDATA[<div class="quotebox"><cite>Wolfenberg пишет:</cite><blockquote><p> под управлением Gentoo Linux.</p></blockquote></div><p>хАчуу! ХАчууу болгарку! ((с) Адская белочка)</p>]]></description>
			<author><![CDATA[null@example.com (DiabloPC)]]></author>
			<pubDate>Mon, 06 May 2019 17:20:47 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464119#p464119</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464116#p464116</link>
			<description><![CDATA[<div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>после второго инфаркта мне недолго осталось</p></blockquote></div><p>Отставить паническое настроение, надо верить в лучшее. И да 100 лет желаю вам ещё прожить.&nbsp; <img src="https://linuxforum.ru/img/smilies/az.gif" alt="az" /></p>]]></description>
			<author><![CDATA[null@example.com (lone_wolf)]]></author>
			<pubDate>Mon, 06 May 2019 14:39:55 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464116#p464116</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464113#p464113</link>
			<description><![CDATA[<div class="quotebox"><cite>gramozeka пишет:</cite><blockquote><p>сами, всё сами, ищ обленились, &quot;..во-о-от мы в ваше время !&quot;... ag</p></blockquote></div><p> <img src="https://linuxforum.ru/img/smilies/ae.gif" alt="ae" />&nbsp; Ни фига! Сам обещал показать болгарку под управлением Gentoo Linux.</p>]]></description>
			<author><![CDATA[null@example.com (Wolfenberg)]]></author>
			<pubDate>Mon, 06 May 2019 13:54:18 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464113#p464113</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464105#p464105</link>
			<description><![CDATA[<p><strong>gramozeka</strong>, Ну, нет. Будет еще инфаркт-микарда и вот такой рубец. <img src="https://linuxforum.ru/img/smilies/bv.gif" alt="bv" />&nbsp; <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></description>
			<author><![CDATA[null@example.com (shtoom)]]></author>
			<pubDate>Sun, 05 May 2019 17:49:16 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464105#p464105</guid>
		</item>
		<item>
			<title><![CDATA[Re: LFS - и все что с ней связано.]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=464104#p464104</link>
			<description><![CDATA[<div class="quotebox"><cite>Wolfenberg пишет:</cite><blockquote><p>А мастер-классы &quot;на все руки мастер&quot; кто проводить будет?</p></blockquote></div><p>сами, всё сами, ищ обленились, &quot;..во-о-от мы в ваше время !&quot;... <img src="https://linuxforum.ru/img/smilies/ag.gif" alt="ag" /> <br />как говорят на лоре &quot;нинужна&quot;. Достаточно документации в /usr/share/doc{,info}(/usr/doc{,info}).<br />Никогда раньше внимания не обращал, а тут залез случайно и залип на месяц - это ж&nbsp; клондайк знаний, даже интернет не нужен, сиди читай, вся система под микроскопом.</p>]]></description>
			<author><![CDATA[null@example.com (gramozeka)]]></author>
			<pubDate>Sun, 05 May 2019 17:37:01 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=464104#p464104</guid>
		</item>
	</channel>
</rss>
