Александр Рыжов Posted October 7, 2015 Share Posted October 7, 2015 1) Кажется, есть противоречение между wiki и прошивкой. Согласно этой статьи в среду должны передаётся: LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib:/lib:/usr/lib Однако /lib/libndmOpkg.so при запуске initrc экспортирует в среду: LD_LIBRARY_PATH=/lib:/usr/lib:/opt/lib:/opt/usr/lib Это можно воспроизвести, написав «фальшивый» скрипт /opt/etc/init.d/S99fake со следующим содержимым: #!/bin/sh export > /opt/tmp/env.tst В итоге при запуске внешних сервисов возможны жалобы can't resolve symbol с аварийным завершением работы. Link to comment Share on other sites More sharing options...
ndm Posted October 7, 2015 Share Posted October 7, 2015 Точно, баг. Не соответствует описанию, исправим. Новый релиз запланирован к концу следующей недели, а пока можно определить правильный LD_LIBRARY_PATH в initrc. Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 7, 2015 Author Share Posted October 7, 2015 2. Экспорт LD_LIBRARY_PATH наверняка сделано потому, что в тулчейн для сбора пакетов не заложен rpath=/opt/lib. Хочу напомнить, что пути из LD_LIBRARY_PATH не заменяют rpath, а дополняют его подстановкой перед путями из rpath, что для без указания правильного префикса /opt не имеет смысла для ряда пакетов, использующих свои плагины (poptop, znc, perl и другие). Устанавливай LD_LIBRARY_PATH или нет, такие пакеты без правки префикса не взлетят: admin@RT-N66U:/tmp/home/root# ldd /opt/bin/perl libperl.so => /opt/lib/perl5/5.22/CORE/libperl.so (0x2aac0000) libpthread.so.0 => /opt/lib/libpthread.so.0 (0x2ac85000) libdl.so.0 => /opt/lib/libdl.so.0 (0x2acaa000) libm.so.0 => /opt/lib/libm.so.0 (0x2acbd000) ... Кроме того, для бинарников с установленными битами setuid или setgid содержимое LD_LIBRARY_PATH игнорируется по соображением безопасности. Это можно проверить, скажем, на пакете sudo. Если для сборки пакетов будет использовать билдут с этой правкой, то костыль с установкой LD_LIBRARY_PATH не понадобится. Link to comment Share on other sites More sharing options...
ndm Posted October 7, 2015 Share Posted October 7, 2015 Здесь не первый раз упоминают rpath. Но предмет для дискуссии пустяковый. С точки зрения прошивки (libndmOpkg) важно, чтобы поддерживалось как можно больше разных пакетов. Для этого определяется LD_LIBRARY_PATH, который не мешает работе пакетов, собранных с rpath=/opt/lib, и позволяет работать пакетам, собранным без него. Если же кто займётся сборкой пакетов нашим билдрутом, и непременно захочет rpath, подправит rules.mk самостоятельно. Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 13, 2015 Author Share Posted October 13, 2015 Кстати, $PATH в среду логичнее передавать не такой как сейчас: PATH='/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin' а такой, чтобы в первую очередь искались сторонние бинарники: PATH='/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin' Link to comment Share on other sites More sharing options...
ndm Posted October 13, 2015 Share Posted October 13, 2015 Спасибо, тоже исправлено, ждет релиза. Link to comment Share on other sites More sharing options...
Александр Рыжов Posted October 13, 2015 Author Share Posted October 13, 2015 ndm, ещё здесь, но не критично. Link to comment Share on other sites More sharing options...
ndm Posted October 13, 2015 Share Posted October 13, 2015 ndm, ещё здесь, но не критично. Да, поменяем (поменяли) в /etc/profile Link to comment Share on other sites More sharing options...
Александр Рыжов Posted November 17, 2015 Author Share Posted November 17, 2015 Кстати, $PATH в среду логичнее передавать не такой как сейчас: PATH='/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin' а такой, чтобы в первую очередь искались сторонние бинарники: PATH='/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin' Спасибо, тоже исправлено, ждет релиза. В бетах от 14.11.2015г косяк всё ещё есть. Проверено на Omni II. Link to comment Share on other sites More sharing options...
ndm Posted November 17, 2015 Share Posted November 17, 2015 В бетах от 14.11.2015г косяк всё ещё есть. Проверено на Omni II. Как проверяли, если не секрет? Берем скрипт /opt/etc/initrc: #!/bin/sh echo INITRC: $1 echo INITRC: $PATH echo INITRC: $LD_LIBRARY_PATH Видим: [i] Nov 17 12:36:33 ndm: Opkg::Manager: /tmp/mnt/OPT initialized. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: start. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: /opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: /opt/lib:/opt/usr/lib:/lib:/usr/lib. Link to comment Share on other sites More sharing options...
Александр Рыжов Posted November 17, 2015 Author Share Posted November 17, 2015 Как проверяли, если не секрет?С таким стартовым скриптом rc.unslung при старте роутера получаем в логе следующие сообщения: [i] Nov 17 13:47:33 ndm: FileSystem::Ext: ext2 "ceeaaab9-273d-4fc4-b47e-94ec13633148:" filesystem initialized. [W] Nov 17 13:47:33 ndm: kernel: EXT2-fs (sda3): warning: mounting unchecked fs, running e2fsck is recommended … [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE mounted to /tmp/mnt/STORAGE. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE mounted to /opt/. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE initialized. [E] Nov 17 13:47:33 ndm: Opkg::Manager: invalid initrc "/opt/etc/initrc": no such file or directory, trying /opt/etc/init.d/. [i] Nov 17 13:47:33 wmond: WifiMaster0/AccessPoint0: (RT2860) STA(30:75:12:0c:b6:0e) had associated successfully. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /usr/lib/libsupc++.so: _Unwind_SjLj_RaiseException: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /usr/lib/libsupc++.so: _Unwind_SjLj_Resume_or_Rethrow: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /usr/lib/libsupc++.so: _Unwind_SjLj_Register: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /usr/lib/libsupc++.so: _Unwind_SjLj_Resume: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /usr/lib/libsupc++.so: _Unwind_SjLj_Unregister: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmBase.so: _Unwind_SjLj_Unregister: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmBase.so: _Unwind_SjLj_Register: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmBase.so: _Unwind_SjLj_Resume: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmBase.so: __gcc_personality_sj0: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmHttp.so: _Unwind_SjLj_Unregister: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmHttp.so: _Unwind_SjLj_Register: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmHttp.so: _Unwind_SjLj_Resume: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /lib/libndmHttp.so: __gcc_personality_sj0: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /opt/etc/init.d/S00telnetd: _Unwind_SjLj_Unregister: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /opt/etc/init.d/S00telnetd: _Unwind_SjLj_Register: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /opt/etc/init.d/S00telnetd: _Unwind_SjLj_Resume: symbol not found. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: Error relocating /opt/etc/init.d/S00telnetd: __gcc_personality_sj0: symbol not found. [E] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/init.d/rc.unslung: exit code 127. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/ndm/user.d/010-profile.sh: admin's home directory created. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/ndm/user.d/020-root-pwd.sh: Pasword is set from file. Добавляем второй строчкой в rc.unslung unset LD_LIBRARY_PATH и перегружаем роутер. Всё в порядке: [i] Nov 17 13:47:33 ndm: FileSystem::Ext: ext2 "ceeaaab9-273d-4fc4-b47e-94ec13633148:" filesystem initialized. [W] Nov 17 13:47:33 ndm: kernel: EXT2-fs (sda3): warning: mounting unchecked fs, running e2fsck is recommended … [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE mounted to /tmp/mnt/STORAGE. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE mounted to /opt/. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /tmp/mnt/STORAGE initialized. [E] Nov 17 13:47:33 ndm: Opkg::Manager: invalid initrc "/opt/etc/initrc": no such file or directory, trying /opt/etc/init.d/. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/ndm/user.d/010-profile.sh: admin's home directory created. [i] Nov 17 13:47:33 ndm: Opkg::Manager: /opt/etc/ndm/user.d/020-root-pwd.sh: Pasword is set from file. Версия прошивки: (config)> show version release: v2.05(AAUS.5)C1 arch: mips ndm: exact: 0-43162e7 cdate: 14 Nov 2015 bsp: exact: 0-f0f8cc3 cdate: 14 Nov 2015 ndw: version: 4.0.1.106 features: wifi_button,single_usb_port,flexible_menu, emulate_firmware_progress components: cloud,ddns,dot1x,factory,fat,hfsplus,kabinet,miniupnpd, monitor,nathelper-ftp,nathelper-pptp,nathelper-sip,ntfs, opkg,ppe,ssl,trafficcontrol,usblte,usbserial,cifs, components,cloudcontrol,config-ap,config-client,config- repeater,corewireless,dlna,easyconfig,dhcpd,ftp,igmp, l2tp,pingcheck,ppp,pppoe,pptp,skydns,storage, transmission,usb,udpxy,usbmodem,usbnet,vpnserver,ydns, base,printers,sysmode,easyconfig-3.2,base-l10n,modems, theme-ZyXEL-Intl,base-theme,ispdb,base-ZyXEL-Intl manufacturer: ZyXEL vendor: ZyXEL series: Keenetic series model: Keenetic hw_version: 12132000-F hw_id: kn_rf device: Keenetic Omni II class: Internet Center Link to comment Share on other sites More sharing options...
McMCC Posted November 17, 2015 Share Posted November 17, 2015 А вот так вот сделать в вашем rc.unslung в самом начале: export LANG=C export PATH=/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib:/lib:/usr/lib В чем сложность? По идее, когда запуск происходит из одной среды другой, то необходимо в первоначальном инит скрипте указывать полностью значения этих переменных. Link to comment Share on other sites More sharing options...
McMCC Posted November 17, 2015 Share Posted November 17, 2015 Как проверяли, если не секрет? Берем скрипт /opt/etc/initrc: #!/bin/sh echo INITRC: $1 echo INITRC: $PATH echo INITRC: $LD_LIBRARY_PATH Видим: [i] Nov 17 12:36:33 ndm: Opkg::Manager: /tmp/mnt/OPT initialized. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: start. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: /opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin. [i] Nov 17 12:36:33 ndm: Opkg::Manager: /opt/etc/initrc: INITRC: /opt/lib:/opt/usr/lib:/lib:/usr/lib. Мне кажется, что передавать эти переменные запуском из прошивки, бесполезное занятие. Busybox будет все равно дергать /etc/profile. Link to comment Share on other sites More sharing options...
ndm Posted November 17, 2015 Share Posted November 17, 2015 IMHO пустое дело обсуждать rpath vs LD_LIBRARY_PATH, см. выше: С точки зрения прошивки важно, чтобы поддерживалось как можно больше разных пакетов. Для этого определяется LD_LIBRARY_PATH, который не мешает работе пакетов, собранных с rpath=/opt/lib, и позволяет работать пакетам, собранным без него. LD_LIBRARY_PATH может быть необходим для работы /opt/bin/sh, собранного без rpath. Внутри скрипта экспортируйте и переопределяйте, что вашей душе угодно. Link to comment Share on other sites More sharing options...
Recommended Posts