1 (06.05.2012 11:49:16 отредактировано vitus153)

Доброе время суток!
Столкнулся со следующей проблемой. Мне необходимо собрать PHP под архитектуру Mipsel с определенными ключами. Поставил Ubuntu 11.04, toolchain (как описано здесь http://www.hub.ru/wiki/%D0%9A%D1%80%D0% … 0%B8%D1%8F).

Для проверски сделал make mc-ipk. Сборка прошла, пакет сформировался (т.е. предположительно все работает).

Приступил к сборе php. И возникла следующая ошибка:

./configure: 11818: 5: Bad file descriptor
./configure: 11818: :: checking for __dn_skipname in -lbind: not found
./configure: 11818: 6: Bad file descriptor
./configure: 11818: checking for __dn_skipname in -lbind... : not found
./configure: 11818: ac_fn_c_try_link: not found
./configure: 11818: 5: Bad file descriptor
./configure: 11818: :: result: no: not found
./configure: 11818: 6: Bad file descriptor
./configure: 11818: no: not found
./configure: 11823: 5: Bad file descriptor
./configure: 11823: :: checking for ANSI C header files: not found
./configure: 11823: 6: Bad file descriptor
./configure: 11823: checking for ANSI C header files... : not found
./configure: 11922: ac_fn_c_try_compile: not found
./configure: 11924: 5: Bad file descriptor
./configure: 11924: :: result: no: not found
./configure: 11924: 6: Bad file descriptor
./configure: 11924: no: not found
./configure: 11971: ac_cv_header_dirent_dirent.h: not found
./configure: 11971: 5: Bad file descriptor
./configure: 11971: :: checking for dirent.h that defines DIR: not found
./configure: 11971: 6: Bad file descriptor
./configure: 11971: checking for dirent.h that defines DIR... : not found
eval: 1: Bad substitution
make: *** [/root/optware/oleg/builds/php/.configured] Ошибка 2

И всё! Гуглил и задавал вопросы яндексу - ничего не помогло! Перерыл php.mk и configurate - все без толку! Помогите, вторую ночь не сплю!

2

на мой взгляд инструкция косая... в частности после export'ов отключаться от машины нельзя...
так что описывайте подробно всё, что делали...

95% процентов проблем находятся между клавиатурой и стулом.

3

Если начать с самого начало, то мне необходимо собрать php для ASUS N56U (маршрутизатор). Он поддерживает optware. Я поставил php из оптваре, но он собран без библиотеки iconv.
Пытался нативно скомпилить, безуспешно, бился неделю и бросил. Поставил Ubuntu, поставил toolchain. Зашел в файл php.mk дописал в нужном месте ключ. После этого сделал make php-ipk. C инета выкачивались необходимые пакеты, чего-то делалось, а потом выдало, то что я привел (я привел окончание, там было много много подобно /configure: 11971: :: checking for dirent.h that defines DIR: not found, ./configure: 11971: 6: Bad file descriptor только ждля разных библиотек).
Перерыл все что мог - ничего не помогает. http://www.cyberforum.ru/redirector.php … BhZ2UtMg== - вот здесь (в конце страницы) у человека аналогичная проблема, я так понял не решилась

4

пользуйтесь или хотя бы оглядывайтесь на официальную доку...
отсюда: http://www.nslu2-linux.org/wiki/Optware … eToOptware

   svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
   cd optware; make <platform>-target
   cd <platform>; make directories toolchain ipkg-utils

какая у вас платформа/прошивка на роутере? и где именно вы указаль --with-iconv?
собственно дальше предлагаю пересобрать тулчейн по этой схеме... [ответьте на предыдущее перед сборкой]

ЗЫ: по ссылке трабла не связана с кросс-компиляцией... там похоже просто -devel пакеты зависимостей забыли установить...

95% процентов проблем находятся между клавиатурой и стулом.

5 (06.05.2012 14:55:51 отредактировано vitus153)

пользуйтесь или хотя бы оглядывайтесь на официальную доку...
отсюда: http://www.nslu2-linux.org/wiki/Optware … eToOptware

Официальные доки я читал. Делал все в соответствии.
Платформа oleg
make directories toolchain ipkg-utils - тоже выполнено. Пробовал для теста собирать nginx и mc - собрались. Не собирается php

Ключ добавлял в файл php.mr

autoreconf -vif $(@D)
    (cd $(@D); \
        $(TARGET_CONFIGURE_OPTS) \
        CPPFLAGS="$(STAGING_CPPFLAGS) $(PHP_CPPFLAGS)" \
        LDFLAGS="$(STAGING_LDFLAGS) $(PHP_LDFLAGS)" \
        CFLAGS="$(STAGING_CPPFLAGS) $(PHP_CPPFLAGS) $(STAGING_LDFLAGS) $(PHP_LDFLAGS)" \
        PATH="$(STAGING_DIR)/bin:$$PATH" \
        PHP_LIBXML_DIR=$(STAGING_PREFIX) \
        EXTENSION_DIR=/opt/lib/php/extensions \
        ac_cv_func_memcmp_working=yes \
        cv_php_mbstring_stdarg=yes \
        STAGING_PREFIX="$(STAGING_PREFIX)" \
        $(PHP_CONFIGURE_ENV) \
        ./configure \
        --build=$(GNU_HOST_NAME) \
        --host=$(GNU_TARGET_NAME) \
        --target=$(GNU_TARGET_NAME) \
        --prefix=/opt \
        --with-config-file-scan-dir=/opt/etc/php.d \
        --with-layout=GNU \
        --disable-static \
        --enable-bcmath=shared \
        --enable-calendar=shared \
        --enable-dba=shared \
        --with-inifile \
        --with-flatfile \
        --enable-dom=shared \
        --enable-embed=shared \
        --enable-exif=shared \
        --enable-ftp=shared \
        --enable-mbstring=shared \
        --enable-pdo=shared \
        --enable-shmop=shared \
        --enable-sockets=shared \
        --enable-sysvmsg=shared \
        --enable-sysvshm=shared \
        --enable-sysvsem=shared \
        --enable-xml=shared \
        --enable-xmlreader=shared \

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        --with-iconv \
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        --with-bz2=shared,$(STAGING_PREFIX) \
        --with-curl=shared,$(STAGING_PREFIX) \
        --with-db4=$(STAGING_PREFIX) \
        --with-dom=shared,$(STAGING_PREFIX) \
        --with-gdbm=$(STAGING_PREFIX) \
        --with-gd=shared,$(STAGING_PREFIX) \
        --with-imap=shared,$(STAGING_PREFIX) \
        --with-mysql=shared,$(STAGING_PREFIX) \
        --with-mysql-sock=/tmp/mysql.sock \
        --with-mysqli=shared,$(STAGING_PREFIX)/bin/mysql_config \
        --with-pgsql=shared,$(STAGING_PREFIX) \
        --with-mssql=shared,$(STAGING_PREFIX) \
        --with-unixODBC=shared,$(STAGING_PREFIX) \
        --with-openssl=shared,$(STAGING_PREFIX) \
        --with-sqlite=shared \
        --with-pdo-mysql=shared,$(STAGING_PREFIX) \
        --with-pdo-pgsql=shared,$(STAGING_PREFIX) \
        --with-pdo-sqlite=shared \
        --with-xsl=shared,$(STAGING_PREFIX) \
        --with-zlib=shared,$(STAGING_PREFIX) \
        --with-libxml-dir=$(STAGING_PREFIX) \
        --with-jpeg-dir=$(STAGING_PREFIX) \
        --with-png-dir=$(STAGING_PREFIX) \
        --with-freetype-dir=$(STAGING_PREFIX) \
        --with-zlib-dir=$(STAGING_PREFIX) \
        --with-pcre-regex=$(STAGING_PREFIX) \
        $(PHP_CONFIGURE_ARGS) \
        --without-pear \
        --with-xmlrpc=shared \
    )
    $(PATCH_LIBTOOL) $(@D)/libtool
    touch $@
 
php-unpack: $(PHP_BUILD_DIR)/.configured

без него тоже не собирается (восклицательные знаки для выделения поставил)

6

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

95% процентов проблем находятся между клавиатурой и стулом.

7 (10.05.2012 13:56:29 отредактировано vitus153)

2 Fat-Zer а у меня тулчейн собрался номально, я собирал себе nginx и для теста пробовал собирать mc и php-fcgi - собирались без проблем. Именно проблемы при сборке PHP 5.2.17. Хотя когда собирал тулчейн, возникали ошибки, но они легко решались с помощью яндекса. Если приведете что говорит говорит тулчейн при сборке, могу вспомнить как решал проблему у себя. Да и в целом могу инструкцию привести как ставил это дело у себя

8 (10.05.2012 15:29:22 отредактировано Fat-Zer)

я забросил на том моменте, когда на kernel.org'е не оказалось bz2 - архивов binutils приемлемых версий... сейчас сам перепаковал 2.16.90.0.3 - вроде собирается... благо он контрольные суммы не проверяет...
+ пришлось вручную кой-чего конфигурировать, что мне тоже не очень понравилось...

ЗЫ: вообще ощущение, что этой штукой года с 2008-го никто не занимался...

[added] а поддержку с++ вы включали?

95% процентов проблем находятся между клавиатурой и стулом.

9

Fat-Zer пишет:

ЗЫ: вообще ощущение, что этой штукой года с 2008-го никто не занимался..

мне тоже так показалось
я скачал пакет binutils-2.17.50.0.8.tar.bz2 http://ftp.gnu.org/gnu/binutils/

10

Fat-Zer пишет:

added] а поддержку с++ вы включали?

Это как? я не силен в Линексе. Все узнаю у яндекса ab

11

vitus153 пишет:

Это как? я не силен в Линексе. Все узнаю у яндекса

cd oleg/toolchain/buildroot && make menuconfig - там Toolchain Options  --->  [ ] Build/install c++ compiler and libstdc++?
в любом случае похоже, что он не собирается... так что не берите в голову =))

95% процентов проблем находятся между клавиатурой и стулом.

12 (10.05.2012 15:52:09 отредактировано vitus153)

Fat-Zer пишет:

cd oleg/toolchain/buildroot && make menuconfig - там Toolchain Options  --->  [ ] Build/install c++ compiler and libstdc++?

Открываю для себя все больше нового. Это вижу впервые ab у меня стоит [звездочка в скобках] Build/install c++ compiler and libstdc++? - вот так. Как это понять? Установлено?

13

vitus153 пишет:

Открываю для себя все больше нового. Это вижу впервые  у меня стоит [звездочка в скобках] Build/install c++ compiler and libstdc++? - вот так. Как это понять? Установлено?

мм - значит установлено... у меня с ним не собирается - где-то в дебрях iostreams ошибка...

95% процентов проблем находятся между клавиатурой и стулом.

14

Могу дать логи как у меня ругается, может хоть какое-то направление для мыслей даст. А вообще могу примерную  свою последоватьльность по сборке тулчейна выслать (я для себя документировал), по причине того что уже третий раз Ubuntu ставлю и с нуля пытаюсь все сделать (каждый раз новым способом), к великому моему сожалению результат всегда один ac

15

vitus153 пишет:

А вообще могу примерную  свою последоватьльность по сборке тулчейна выслать (я для себя документировал), по причине того что уже третий раз Ubuntu ставлю и с нуля пытаюсь все сделать (каждый раз новым способом), к великому моему сожалению результат всегда один

давайте... может я чего-то из виду упускаю...

95% процентов проблем находятся между клавиатурой и стулом.

16

Тут в тексте допускается только одна ссылка. Поэтому тяжко будет, может на почту?

17

vitus153 пишет:

Тут в тексте допускается только одна ссылка. Поэтому тяжко будет, может на почту?

зачем... на пейстбин...

95% процентов проблем находятся между клавиатурой и стулом.

18 (10.05.2012 16:41:50 отредактировано vitus153)

Пока начну здесь. Открываем терминал и делаем следующее:

sudo apt-get install autoconf automake bash bison bzip2 diffutils dropbear file flex g++ gawk groff libncurses-dev libtool libslang2 make mc patch perl sed shtool subversion tar texinfo zlib1g zlib1g-dev

далее

cd ~
svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
cd optware
make oleg-target
cd oleg
make directories ipkg-utils

ВАЖНО! Все make надо выполнять находясь в ~/optware/oleg
все проходит на УРА! После этого выполняю
make nginx
Не получается – ошибки. Нету какого-то пакета. Ищу его в интернете и выкачиваю в папке /oleg/downloads/ с помощью команды wget.
Таким образом я скачал пакеты

http://ftp.gnu.org/gnu/binutils/binutils-2.17.50.0.8.tar.bz2

http://downloads.foonas.org/sources/gbb-6.5.tar.bz2


Пакет nginx был удачно собран! Собирал его в качестве тестового.

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

19

Далее приступил к сборке PHP 5.2.17 (именно эта версия присутствует в пакете optware - меня это устраивает).
make php

Нехватка fontconfig-2.8.0.tar.gz восполняется с http://mirrors.cdn.adacore.com/art/552e … 6f459eaa28

20 (10.05.2012 16:41:05 отредактировано vitus153)

В результате куча ошибок, лог приведен здесь http://pastebin.com/U2Zjtvcn
Ну вот в общих чертах, как-то так ac

21

мои ошибки по ходу:

vitus153 пишет:

make directories ipkg-utils

alexander@goblin /tmp/optware/oleg $ make directories ipkg-utils
make/libevent.mk:23: *** пропущен разделитель.  Останов.      # надо удалить пробел в +=
vitus153 пишет:

make nginx

make -C /tmp/optware/oleg/toolchain/buildroot LINUX_HEADERS_SOURCE=linux-libc-headers-oleg.tar.bz2 LINUX_HEADERS_UNPACK_DIR=/tmp/optware/oleg/toolchain/buildroot/toolchain_build_mipsel/linux \
UCLIBC_CONFIG_FILE=/tmp/optware/oleg/sources/buildroot/uClibc-0.9.28.config
make[1]: Вход в каталог `/tmp/optware/oleg/toolchain/buildroot'
package/raidtools/raidtools.mk:46: *** пропущен разделитель(не имели ли вы в виду TAB вместо восьми пробелов?).  Останов.
make[1]: Выход из каталога `/tmp/optware/oleg/toolchain/buildroot'
make: *** [/tmp/optware/oleg/toolchain/buildroot/.built] Ошибка 2

# make правильно говорит - заменяем пробелы на таб.
# + тут пришлось создать симлинк oleg/toolchain/buildroot/dl на oleg/downloads
# иначе поведение было очень странным

такого файла нет... очень хотедлось бы конечно найти именно эту версию.

95% процентов проблем находятся между клавиатурой и стулом.

22

Fat-Zer пишет:

такого файла нет... очень хотедлось бы конечно найти именно эту версию.

нашел здесь http://downloads.foonas.org/sources/

23 (10.05.2012 21:08:42 отредактировано Fat-Zer)

проблему воспроизвожу... виноваты или патчи, которые они накладывают или слишком свежие autotools.
из зависимостей ещё не собрался freetds ну да и шут с ним...
[added]
autoconf похоже не причём...

95% процентов проблем находятся между клавиатурой и стулом.

24

бинго! нужен autoconf версии 2.63. с ним ./configure получасется нормальный... может и с каким нибудь другими ещё будет работать...

правда потом вылезает проблема с libtools.
она решается заменой в make/php.mk autoreconf -vif $(@D) на 

    (cd $(@D); \
    aclocal; \
    libtoolize --force; \
    autoheader; \
    autoconf; \
    )

после этого сборка идёт...

ЗЫ: autotools - это адское поделие из мастерской ужасов столлмана =)
так что до этого было очень не просто докопаться... ИМХО с вас пиво =)))

95% процентов проблем находятся между клавиатурой и стулом.

25

Я вчера не дождался (ждал до часа ночи). Сегодня обязательно все попробую. Спасибо. Позже отпишусь!!!

26 (11.05.2012 02:30:05 отредактировано vitus153)

Fat-Zer пишет:

нужен autoconf версии 2.63

Что-то никак не могу допетрить как его установить?

И немного подробнее можно по изменениям в php.mk
Там имеет место быть следующая конструкция:

    autoreconf -vif $(@D)
    (cd $(@D); \
        $(TARGET_CONFIGURE_OPTS) \
        CPPFLAGS="$(STAGING_CPPFLAGS) $(PHP_CPPFLAGS)" \
        LDFLAGS="$(STAGING_LDFLAGS) $(PHP_LDFLAGS)" \
        CFLAGS="$(STAGING_CPPFLAGS) $(PHP_CPPFLAGS) $(STAGING_LDFLAGS) $(PHP_LDFLAGS)" \
        PATH="$(STAGING_DIR)/bin:$$PATH" \
        PHP_LIBXML_DIR=$(STAGING_PREFIX) \
        EXTENSION_DIR=/opt/lib/php/extensions \
        ac_cv_func_memcmp_working=yes \
        cv_php_mbstring_stdarg=yes \
        STAGING_PREFIX="$(STAGING_PREFIX)" \
        $(PHP_CONFIGURE_ENV) \
        ./configure \
        --build=$(GNU_HOST_NAME) \
        --host=$(GNU_TARGET_NAME) \
        --target=$(GNU_TARGET_NAME) \
        --prefix=/opt \
        --with-config-file-scan-dir=/opt/etc/php.d \
        --with-layout=GNU \
        --disable-static \
        --enable-bcmath=shared \
        --enable-calendar=shared \
        --enable-dba=shared \
        --with-inifile \
        --with-flatfile \
        --enable-dom=shared \
        --enable-embed=shared \
        --enable-exif=shared \
        --enable-ftp=shared \
        --enable-mbstring=shared \
        --enable-pdo=shared \
        --enable-shmop=shared \
        --enable-sockets=shared \
        --enable-sysvmsg=shared \
        --enable-sysvshm=shared \
        --enable-sysvsem=shared \
        --enable-xml=shared \
        --enable-xmlreader=shared \
        --with-iconv \
        --with-bz2=shared,$(STAGING_PREFIX) \
        --with-curl=shared,$(STAGING_PREFIX) \
        --with-db4=$(STAGING_PREFIX) \
        --with-dom=shared,$(STAGING_PREFIX) \
        --with-gdbm=$(STAGING_PREFIX) \
        --with-gd=shared,$(STAGING_PREFIX) \
        --with-imap=shared,$(STAGING_PREFIX) \
        --with-mysql=shared,$(STAGING_PREFIX) \
        --with-mysql-sock=/tmp/mysql.sock \
        --with-mysqli=shared,$(STAGING_PREFIX)/bin/mysql_config \
        --with-pgsql=shared,$(STAGING_PREFIX) \
        --with-mssql=shared,$(STAGING_PREFIX) \
        --with-unixODBC=shared,$(STAGING_PREFIX) \
        --with-openssl=shared,$(STAGING_PREFIX) \
        --with-sqlite=shared \
        --with-pdo-mysql=shared,$(STAGING_PREFIX) \
        --with-pdo-pgsql=shared,$(STAGING_PREFIX) \
        --with-pdo-sqlite=shared \
        --with-xsl=shared,$(STAGING_PREFIX) \
        --with-zlib=shared,$(STAGING_PREFIX) \
        --with-libxml-dir=$(STAGING_PREFIX) \
        --with-jpeg-dir=$(STAGING_PREFIX) \
        --with-png-dir=$(STAGING_PREFIX) \
        --with-freetype-dir=$(STAGING_PREFIX) \
        --with-zlib-dir=$(STAGING_PREFIX) \
        --with-pcre-regex=$(STAGING_PREFIX) \
        --enable-maintainer-zts \
        --with-ldap=shared,/root/optware/oleg/staging/opt \
        --with-ldap-sasl=/root/optware/oleg/staging/opt \
        --without-pear \
        --with-xmlrpc=shared \
    )
    $(PATCH_LIBTOOL) $(@D)/libtool
    touch $@

Ее надо заменить на

(cd $(@D); \
    aclocal; \
    libtoolize --force; \
    autoheader; \
    autoconf; \
    )

Я правильно понял?

27 (11.05.2012 03:05:03 отредактировано Fat-Zer)

vitus153 пишет:

Что-то никак не могу допетрить как его установить?

вот тут я уже помочь не смогу... о репозитариях бубунты и их содержимом я слабо осведомлён... может кто -то ещё подскажет.
общий принцип: aptitude в зубы и смотреть что-куда... на крайний случай самому пакет собрать...

перед сборки php проверьте autoconf -V

vitus153 пишет:

Я правильно понял?

только строчку "autoreconf -vif $(@D)"
может достаточно было бы добавить libtoolize, но тут надо пробовать...

95% процентов проблем находятся между клавиатурой и стулом.

28 (11.05.2012 03:39:53 отредактировано vitus153)

Fat-Zer пишет:

может достаточно было бы добавить libtoolize,

Что-то все равно теже ошибки. Но я поставил пока autoconf 2.67 (другого не нашел, буду искать)

aptitude - а это что такое (и где лучше всего почитать как его в зубы брать).
Я буду еще активно разбираться и устаканиваться кашу в голове, если что, можно задавать вопросы?

А какую версию PHP получилось собрать?

29

vitus153 пишет:

Что-то все равно теже ошибки. Но я поставил пока autoconf 2.67 (другого не нашел, буду искать)

67 - больно новая... с 68-й - у меня как раз не собирается... лучше почтарше брать, но не меньше 2.50 или даже 59.

vitus153 пишет:

aptitude - а это что такое (и где лучше всего почитать как его в зубы брать).

это псевдографическая морда к apt, системе управления пакетами... просто в ней ИМХО проще ориентироваться, а со всякими apt-search, apt-cache, или как их там, я совсем не знаком...

vitus153 пишет:

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

конечно =)

vitus153 пишет:

А какую версию PHP получилось собрать?

5.2.17 она вроде по умолчанию. отключил сборку mssql, iconv не включал

95% процентов проблем находятся между клавиатурой и стулом.

30

Ну можно я задам ну прямо глупый вопрос. Нашел я в инете архив с требуемой версией autoconf. Скачал его wget. А как ее установить из этого архива (в архиве я так понимаю исходники. их компилить надо?)?