что-то вроде лабораторного журнала
поток сознания ;)
программа-максимум: собрать под uclibc sisyphus.base.
простой «linux с uclibc» – скачать uclibc-buildroot, make world. все это конечно весело, теперь хочу именно альт =>
- сборка средствами дистрибутива
- все в rpm
- желательно обойтись без правки спеков (кажется, это возможно) – полученный репозитарий должен быть совместимым с sisyphus на уровне исходных пакетов.
todo:
- собрать uclibc-cross в /usr/lib (не проблема)
- собрать кросс-gcc и binutils для сборки под платформу i586-alt-linuxuclibc
- на тему кроссов есть макросы в mingw. btw в дебиане все это унифицировано.
- наск. я понял, достаточно будет --with-sysroot и --program-prefix. rfc.
- можно будет собирать рпм простым указанием --target (похачить /usr/lib/rpm). но в бинарниках будет прописан путь к /usr/lib, а не /lib и зависимость на uclibc-cross.
- можно будет в хэшере собрать кросскомпилером зависимости rpm-build, uclibc-native в /lib и затем обычный gcc. все равно бутстрапинг получается ручной, пока не придумал лучше.
- дальше получается в chroot будут стоять uclibc-native, uclibc-native-gcc и – одновременно – uclibc-cross для остального софта. опять пересобираем этот репозитарий (уже native gcc), и наконец имеем сборочную среду без всяких следов glibc. дальше в ней можно собирать все остальное.
это все теория. возможные проблемы:
- явно указанный glibc в req (наверное это баг?) и buildreq. провайдить glibc ? хотя все равно мешать нельзя, можно и conflicts? а бинарные rpm еще требуют libc.so.6, так что неродные туда не встанут.
- хаки в /usr/lib/rpm/$platform/ macros вокруг glibc. почитать внимательно, что ли...
- что делать с glibc-kernheaders? вроде в альте они патчены для совместимости с 2.6 и 2.4, взять их.
- rpmbuild странно себя ведет с четырехкомпонентным target. баг? обычно допустимо i586-vendor-linux-newlib. хотя не баг. объехать можно в arch-macros и в любом случае это нужно только вначале. результат все равно должен называться i586-alt-linux
- что-нибудь еще :)
буду копать дальше и потихоньку пробовать
30/06: ага. еще можно сачкануть и взять готовый тулчейн, им собрать stage1 репозитария (наверное вручную в chroot хэшера?). кстати есть http://linuxfromscratch.org/~scot/RPM.
01/07: http://billgatliff.com/~bgat/twiki/bin/view/Crossgcc/WebHome
01/07 02:17: http://lists.gnu.org/archive/html/bug-autoconf/2002-10/msg00058.html. для кросса указывать --host и --build без target. $arch/macros ?
подсмотрел скрипты из uclibc-buldroot, теперь grep компилируется и даже не пытается линковаться с libc.so.6 (замечательно!). дальше начинаются зависимости библиотек: warning: libc.so.6, needed by /usr/lib/libpcre.so not found. как их разгребать.
01/07 14:57 придумал. на buildrequires внимания не обращаем – сборка в хост системе, так что имеют значение только бинарные зависимости. строим дерево, начинаем собирать под новый target и устанавливать полученные rpm в $bootstrap. кросс-линкер туда и лезет, так что все будет нормально. фишка в том, что все что нужно, в хост системе уже есть и его можно использовать :)
в итоге получим некий репозитарий (как вычислить минимально замкнутое подмножество base?), который сможет собрать себя.
http://www.geocities.com/robm351/uclibc/ и в частности http://www.geocities.com/robm351/uclibc/index-3.html
http://www.uclibc.org/lists/uclibc/2001-December/002238.html
http://www.linuxfromscratch.org/hlfs/view/unstable/uclibc/chapter02/toolchaintechnotes.html